全服通缉犯脚本的本质是一套基于NPC对话触发的悬赏管理系统,玩家花费元宝将指定角色加入通缉名单,名单中的角色上线或进入特定区域时触发全服公告,击杀者获得元宝奖励。下面按脚本结构、关键命令实现、反挂联动、JS引擎适配四个模块拆解。
脚本主体挂在NPC上,必须加在交易NPC配置文件中。在MerChant.txt中加入NPC定义,不要加在Npcs.txt里,Npcs.txt不支持@@InPutString和@@InPutInteger输入框功能,加错文件会导致输入玩家名字的环节直接失效。NPC的主菜单用#SAY列出选项:通缉仇人、解除通缉、查看通缉犯在线、离开。通缉仇人使用@@InPutString1触发,玩家点击后弹出输入框,输入的名字存入S1变量。解除通缉和查看通缉犯在线分别用普通跳转标签处理。
通缉仇人的核心逻辑分两步:扣元宝和写名单。玩家输入名字后触发[@InPutString1]段,先用CHECKGAMEGOLD > 29检测元宝是否够30个,满足则执行GAMEGOLD - 30扣除,同时用AddTextList把输入的名字写入QuestDiary宠物系统通缉犯.txt文件。写入完成后通过SENDMSG 0发全服广播,内容格式为[发起人]花费30元宝发起对〖目标〗的通缉,谁杀死目标将获得20元宝。最后用GMEXECUTE触发对被通缉者的状态检测,跳转到QManage.txt中的[@通辑犯]段。
QManage.txt里的[@通辑犯]段负责给被通缉者打标记。用CHECKNAMELIST检测目标是否确实在通缉名单中,命中后执行GMEXECUTE TestStatus 1 5给角色施加一个状态标识,再通过SETRANKLEVELNAME %s通辑犯在角色名前挂上通缉犯的称号。紧接着SENDMSG 0发一条包含通缉犯当前位置的公告,内容为通辑犯[名字]在[地图坐标]谁杀死他将获得20元宝。
解除通缉的逻辑用CHECKNAMELIST和CHECKGAMEGOLD双重判断。先用CHECKNAMELIST确认发起者本人在通缉名单中,再用CHECKGAMEGOLD > 24确认有25个元宝,满足则扣元宝、用DelTextList从名单文本中删除该名字、用SETRANKLEVELNAME清除通缉犯称号,最后发一条全服公告通知所有人通缉已解除。两个条件任一不满足就走MessageBox提示,不允许在名单外的人花元宝解除别人的通缉。
查看通缉犯在线功能的实现方式是扣5元宝后触发GMEXECUTE 开始提问 @通辑犯。这个命令会扫描名单中当前在线的玩家并逐一发送状态检测,最终在聊天窗口显示在线通缉犯列表。需要在Command.ini配置文件中确认StartQuest的值确实设为“开始提问”,如果这里不是“开始提问”,脚本里的“开始提问”命令会直接失效。
上线提示的逻辑挂在登录脚本中。角色上线时用CHECKNAMELIST检测是否在通缉名单中,命中则执行TestStatus和SETRANKLEVELNAME设置通缉犯标记,同时发全服公告通知该通缉犯上线了,包含当前所在位置。这样即使通缉犯下线后重新上线,全服玩家也能立刻知道。
反挂联动方面,通缉犯检测可以扩展为自动识别使用加速或自动脚本的玩家。在AutoRun.txt中添加循环检测脚本,用CheckVarHuman LastOperateTime判断玩家最后操作时间与当前时间的差值,如果差值超过300毫秒说明玩家长时间没有主动操作但角色仍在移动或攻击,可以触发异常标记。再配合CheckHP > 99999这类属性检测脚本判断血量是否异常,命中后自动将角色加入通缉名单并全服公告。检测命令和通缉名单的写入命令可以串联使用,检测到异常后直接AddTextList写入名单,再触发全服广播。GM后台抓挂时用CheckTextList比对坐监名单与通缉名单,双名单交叉确认可以降低误判率。
JS引擎适配是这套脚本落地时最容易出问题的环节。不同引擎的变量写法差异明显,GOM引擎常用S$G$格式,而Hero引擎可能用$S$G,变量格式不对脚本会直接失效。输入框命令@@InPutString在部分JS引擎中需要确认是否支持,如果引擎不支持这个输入方式,可以用NPC对话中的选项列表替代,让玩家从在线列表中选择目标而非手动输入名字。AddTextList和DelTextList这两个文本操作命令在大多数引擎中通用,但名单文件的路径分隔符需要注意,有的引擎要求用反斜杠有的要求正斜杠。SENDMSG命令的参数格式在各引擎间基本一致,颜色代码和广播范围参数保持原样即可。
脚本中的GMEXECUTE命令是兼容性风险最高的一条。不同引擎对GM命令的调用方式不同,部分引擎要求GMEXECUTE后面跟的命令名必须与Command.ini中的定义完全一致,大小写都不能错。TestStatus这个命令在部分引擎中可能叫SetStatus或者CheckStatus,修改时要对照该引擎的命令手册。开始提问这条GM命令不是所有引擎都内置,没有的话需要自己在Command.ini中手动添加一条自定义GM命令,把命令名设为开始提问,关联到执行通缉名单检测的脚本段。
脚本测试建议按流程分段验证。先测试NPC对话菜单能否正常弹出,确认@@InPutString输入框能接收到名字。再测试元宝扣除和名单写入是否同步执行,用CHECKNAMELIST验证写入是否成功。然后测试全服公告的触发时机,确认公告内容中的坐标变量%M%X,%Y能正确解析为被通缉者的当前位置。最后测试解除通缉和查看在线两个功能,确认元宝扣除和状态清除都正常执行。整个链路打通后再加到正式NPC配置中,测试时用GM账号操作避免误扣玩家元宝。
传奇全服通缉犯脚本实现与JS引擎适配详细拆解
来源:
作者:
点击:

