#IFEQUAL G2000 EQUAL G2010
#ACT
MOV A1 19
MOV G201 1
ADDATTACKS ABUKALL 0
这段是传奇引擎下的变量判断与属性修改脚本,整体逻辑为先比对两个全局变量数值,满足条件之后执行后面的属性操作,每一条指令拆解如下。
IFEQUAL是条件判断指令,作用是同时判断多个等式是否全部成立,只有全部条件满足,才会进入下方#ACT执行段。G开头代表全局变量,G2000与G2010属于全局变量编号。IFEQUAL G2000 EQUAL G2010含义为判断全局变量G2000的值是否等于全局变量G2010的值。两个变量数值相等,条件判定通过,进入#ACT代码块;如果数值不一致,#ACT内所有指令直接跳过,不会执行。
#ACT是执行标记,标记之后的所有指令,仅在上方条件判断成功之后才会运行,条件不成立时,#ACT到下一个条件标签之间的脚本不会触发。
MOV A1 19,MOV为变量赋值指令,A开头一般是人物局部变量,A1代表1号人物变量。这条指令的作用是将人物变量A1赋值为19,变量A1后续可以被其他脚本读取,用来做计数、标记状态、控制跳转逻辑。
MOV G201 1,给全局变量G201赋值为1。全局变量G的数据会在服务器内全局生效,所有玩家、地图、NPC脚本都可以读取G201的数值,赋值之后这个标记会持续保存,直到其他脚本修改G201的值。很多场景下用这类全局变量用来标记任务状态、开关功能、记录活动阶段。
ADDATTACKS ABUKALL 0,ADDATTACKS是属性增减指令,用于修改角色的攻防属性。ABUKALL代表沙巴克相关全套攻击属性,后面数字0代表增减数值。本条指令是给目标角色增加0点沙巴克攻击属性,在实际使用场景中,这条语句本身不会带来属性变化,一般是作为占位代码,或是预留后续修改数值,也有部分写法用来重置沙巴克攻击标记。
整套脚本完整运行流程,脚本触发时引擎读取G2000和G2010两个全局变量,对比两者数值。两个变量相等,依次执行三条动作,把人物变量A1设置成19,全局变量G201设置为1,执行沙巴克攻击属性增加0点。如果G2000和G2010数值不一样,所有动作直接跳过,不产生任何变量修改和属性变动。
变量区分要点,G系列全局变量,服务器重启之后部分引擎会清空数值,需要根据引擎配置确认持久化规则,多地图、多NPC之间共享同一个G变量,多个脚本同时修改同一个G变量,容易出现数值互相覆盖,造成逻辑错乱。A系列人物变量,只绑定当前触发脚本的玩家,换其他玩家、下线重登之后变量会重置,适合单人任务标记,不会影响其他角色。
常见使用场景,这类写法多用于沙巴克相关任务、行会状态判定、活动阶段判断。例如沙巴克占领状态标记,当两个全局记录的沙巴克标识相等时,开启对应标记,写入G201状态值,同时给人物本地变量写入标记,用于后续弹窗、传送、道具发放的二次判断。
脚本容易出现的问题,变量编号写错,G2000、G2010、G201数字写错会直接导致条件永远无法成立,脚本不会触发。变量类型混用,把人物变量和全局变量直接对比,部分引擎会判定异常。ADDATTACKS参数写错,属性标识拼写错误,会直接报错,脚本中断。全局变量冲突,其他NPC脚本修改G2000或者G2010,会打乱这个条件判断的结果,出现时灵时不灵的现象。
调试方法,在脚本内增加消息提示指令,条件成立时弹出文字提示,验证条件是否触发。可以单独写测试脚本,查看G2000、G2010读取到的实时数值,确认两个变量是否能够达到相等状态。修改G变量之后,观察G201的数值变化,确认赋值指令正常生效。测试ADDATTACKS这条指令,可以修改后面数字,观察角色面板沙巴克攻击是否变动,验证指令是否支持该属性标识。
脚本不具备循环功能,属于单次触发逻辑,只有脚本被触发的一瞬间执行一次判断,不会自动持续监测变量。想要持续监控G2000和G2010的数值,需要把脚本绑定定时器、NPC检测或者人物走动触发,才可以反复比对变量。
代码书写格式也会影响执行,引擎对换行、空格敏感,条件行和#ACT分行书写,多余空格、换行缺失,会造成引擎解析失败,脚本直接失效。复制代码时,需要清理多余不可见字符,避免隐形符号导致脚本不执行。
传奇脚本IFEQUALG2000EQUALG2010代码逐段解析 指令作用与常见报错原因
来源:
作者:
点击:

