传奇脚本国王信息显示与变量保存使用详解

来源: 作者: 点击:
针对国王名字显示问题,通过自定义变量结合文本文件存储是可靠方案。以下为实现保存玩家名字到文本、在游戏对话框中读取显示,以及管理各类变量的具体方法。

保存玩家名字到文本文件
将达成条件的玩家名字写入文本,需要使用脚本的文件操作命令。核心命令为SAVETEXTFILE,其作用是将指定字符串保存到文本文件的特定行。以下是完整的申请国王与保存名字的脚本示例:

[@国王]
#if
ISGUILDMASTER ; 检查是否为行会会长
CHECKLEVEL > 49 ; 检查等级是否大于49级(即50级或以上)
#act
; 将当前玩家的名字保存到文本文件第一行
SAVETEXTFILE ..\QuestDiary\国王信息.txt 0 <$USERNAME>
SENDMSG 6 恭喜!您的名字【<$USERNAME>】已被记录为国王候选人。
#elseact
SENDMSG 6 申请国王失败:您必须是行会会长且等级达到50级。


脚本说明:SAVETEXTFILE命令的第一个参数是文件相对路径,第二个参数0表示行号(通常0代表第一行),第三个参数<$USERNAME>是系统变量,表示当前操作玩家的角色名。文件路径..\QuestDiary\国王信息.txt需确保QuestDiary目录存在,引擎有写入权限。

从文本中读取并显示名字
读取文本内容并显示在对话框,需使用GETSTRINGFILE或GetListString命令。在显示国王信息的脚本段落中,从文件读取第一行的内容,并将其赋值给一个私人变量用于显示。

[@信息]
#act
; 从文本文件第一行读取内容,并存入私人字符型变量S1
GETSTRINGFILE ..\QuestDiary\国王信息.txt 0 S1
#say
<——————————/SCOLOR=250>\
< 国王信息 /SCOLOR=253>\
<——————————/SCOLOR=250>\
\
现任国王:<【/SCOLOR=249><$STR(S1)><】/SCOLOR=249>\
\
<——————————/SCOLOR=250>


脚本说明:GETSTRINGFILE命令从指定文件读取指定行号的内容,并存入变量。<$STR(S1)>用于在#say段落中输出字符型变量S1的值。如果文件为空或不存在,S1可能为空,显示则不完整,因此可增加判断逻辑。

增强脚本的健壮性
为避免文件不存在或内容为空导致显示异常,可在读取前进行判断。

[@信息]
#if
CHECKFILE ..\QuestDiary\国王信息.txt
#act
GETSTRINGFILE ..\QuestDiary\国王信息.txt 0 S1
#say
<——————————/SCOLOR=250>\
< 国王信息 /SCOLOR=253>\
<——————————/SCOLOR=250>\
\
现任国王:<【/SCOLOR=249><$STR(S1)><】/SCOLOR=249>\
<——————————/SCOLOR=250>
#elseact
#say
<——————————/SCOLOR=250>\
< 国王信息 /SCOLOR=253>\
<——————————/SCOLOR=250>\
\
<暂无国王/SCOLOR=242>\
<——————————/SCOLOR=250>


CHECKFILE命令用于检查文件是否存在,根据结果分支执行,使脚本更稳定。

各类变量详解与不保存变量应用场景
您列出的变量分类基本正确,以下是详细说明和典型应用场景,特别是“不保存”变量的用途。

• P0-P9 (私人数字变量,不保存):用于脚本段落内或短流程中的临时计算。例如,在某个NPC对话中累计玩家选择的次数,对话关闭或跳转至无关段落时,其值可被重置为0。无需手动清理,关闭对话框或小退后自动失效。

[@计算费用]
#act
MOV P1 10 ; 基础费用
MUL P1 <$GOLDCOUNT> ; 乘以金币数量
#say
您需要支付<$STR(P1)>金币。


• M0-M99 (私人数字变量,不保存):常用于计时器、延时判断或作为临时标志位。例如,M1标记玩家当天是否已领取福利,服务器每日零点或玩家小退后自动清零,无需额外脚本重置。

[@领取福利]
#if
EQUAL M1 1
#act
SENDMSG 6 您今天已经领取过了。
BREAK
#elseact
MOV M1 1
GAMEGOLD + 1000


• I0-I99 (全局数字变量,不保存):适用于需要全服同步但无需持久化的临时状态。例如,I10记录当前“世界BOSS”是否已被召唤(1是,0否),服务器重启后自动清零。

[@召唤BOSS]
#if
EQUAL I10 0
#act
MOV I10 1
PARAM1 ...
MOB ...


• D0-D9, N0-N99 (私人数字变量,不保存):与P变量类似,可用于临时存储。D系列有时在部分引擎中与计时器相关。N系列是标准的临时变量。它们都用于单次会话中的逻辑处理。

• S0-S99 (私人字符变量,不保存):用于临时存储字符串。例如,接收玩家输入(@@InPutString)后暂存,或临时拼接一段文本。对话关闭后失效。

[@输入封号]
#act
#CALL [\系统\输入.txt] @输入封号
; 在输入.txt中,@@InPutString命令会将输入值存入S1
[@获取输入]
#act
#say
您输入的封号是:<$STR(S1)>


• G0-G499 (全局数字变量,可保存):用于需要持久化且全服共享的数据。例如,G100记录服务器累计在线人数,其值会保存到Global.ini等文件中,服务器重启后依然存在。

• A0-A499 (全局字符变量,可保存):用于需要持久化且全服共享的字符串数据。这是保存国王名字的最佳选择之一。您可以不使用文本文件,而直接将国王名字存入一个A变量,读取更方便,且由引擎自动管理持久化。

[@国王]
#if
ISGUILDMASTER
CHECKLEVEL > 49
#act
MOV A0 <$USERNAME> ; 将国王名字存入全局可保存字符变量A0
SENDMSG 6 恭喜!【<$USERNAME>】已成为国王!

[@信息]
#say
现任国王:<【/SCOLOR=249><$STR(A0)><】/SCOLOR=249>


总结与方案选择
1. 保存与显示国王名字:优先推荐使用全局可保存字符变量(A变量),如MOV A0 <$USERNAME>,无需文件操作,更为简洁稳定。次选方案是使用SAVETEXTFILE命令写入文本文件,再用GETSTRINGFILE读取。
2. 临时变量使用:对于对话过程中的临时计数、标记、输入暂存,使用不保存的私人变量,如P、M、N、S系列。它们会自动重置,避免残留数据干扰后续逻辑。
3. 全局临时状态:对于全服性、但无需永久保存的开关或状态,使用不保存的全局变量(I变量)。

通过结合可保存的全局变量(G/A)实现数据的持久化,利用不保存的私人/全局变量(P/M/I/N/S等)处理临时逻辑,可以构建出稳定、高效的传奇游戏脚本系统。