脚本中变量计数始终显示为1且无法触发满百判断,核心原因在于变量作用域混淆与逻辑流程断裂。当前代码在检测到名单存在时执行 inc p8 1,随后立即跳转至 @main1 标签。若该脚本被设置为定时触发或每次对话触发,而非仅在击杀瞬间触发,变量 p8 可能在每次调用时被重置或未正确保存。在传奇引擎中,普通变量 p 系列通常属于临时变量,角色下线、换图或脚本重新加载后数值会清零。若需持久化计数,必须使用全局变量 G 系列或确保脚本在单次会话中连续运行且不中断。
观察代码结构,#IF checknamelist 成立后执行加一操作并跳转,这意味着每次满足条件(即名单中有名字)都会执行一次加一。问题在于 checknamelist 的判定逻辑。如果该名单在击杀后未被立即移除,或者脚本触发频率过高,可能导致逻辑混乱。更关键的错误在于 equal p8 100 的判断位置。当 p8 从0增加到1时,脚本跳转到 @main1,此时进行等于100的判断,显然不成立,于是进入 #ELSEsay 分支输出当前数值。由于 p8 是临时变量,若脚本执行完一次对话后结束,下次再触发时 p8 可能又变回初始值(通常为0),导致再次加1后变成1,永远无法累加到100。
解决计数问题的首要步骤是将临时变量 p8 替换为全局变量 G8 或使用引擎支持的持久化存储方式。修改第一行判断后的动作为 inc G8 1,并将后续所有引用 p8 的地方全部改为 G8。全局变量在角色在线期间持续存在,不受单次脚本对话结束的影响。同时,需确认 checknamelist 的执行时机。理想流程应是:玩家击杀怪物 -> 脚本自动检测 -> 若名单存在则移除名单并增加计数 -> 保存计数。当前代码中 delnamelist 被放在了达到100个之后,这意味着在未达到100个之前,名单一直存在。如果脚本是被频繁触发的(例如每秒检测一次),那么只要名单没删,计数就会疯狂增加,或者因为变量重置而无效。
针对“杀再多的怪还是提示杀死1只”的现象,极有可能是脚本触发机制不当。如果这段代码位于对话框的点击选项中,那么只有玩家主动点击才会执行,此时变量未保存导致归零。正确的做法是将计数逻辑放入怪物死亡触发脚本(如 OnDeath 或专门的击杀检测脚本),而不是放在对话脚本中。若必须在此脚本中完成,需确保 checknamelist 成功后立即执行 delnamelist,防止重复计数,同时利用全局变量记录进度。
关于无法换地图的问题,代码中 map 3 指令本身无误,但前提是必须成功通过 equal G8 100 的判断。由于计数逻辑失效,程序永远走不到 #ACT 分支中的换地图指令,而是无限循环在 #ELSEsay 分支。此外,map 3 需要服务器端存在编号为3的地图,且该地图允许通过脚本跳转。若地图号错误或权限不足,即使指令执行也会失败。建议在换地图前增加一步 mov 指令将人物坐标重置到安全点,避免卡死。
修正后的逻辑应调整为:首先定义全局变量用于计数。在击杀检测环节,先检查名单是否存在,若存在则删除该名单条目(防止重复刷分),然后对全局变量执行加一操作。紧接着立即读取该全局变量数值进行判断。若数值达到100,执行奖励发放、清理名单文件、写入新任务名单以及传送地图操作,最后将计数变量清零以便后续任务使用。若未满100,则仅输出当前进度提示,不进行其他操作。
具体代码修改方向如下:将 inc p8 1 改为 inc G8 1,将所有 改为 ,将 equal p8 100 改为 equal G8 100。在 checknamelist 成功后,建议紧跟 delnamelist 操作,确保每个怪物只被计算一次。原代码中 delnamelist 放在最后导致在计数过程中名单一直存在,若脚本触发机制是轮询式,会造成数据异常。务必保证“检测 - 删除 - 计数”这一原子操作的连贯性。
另外需注意 addnamelist 和 delnamelist 的文件路径是否正确。相对路径 ..QuestDiary任务 在不同引擎版本或服务器目录结构下可能解析失败,导致文件操作无效,进而影响任务状态判定。建议使用绝对路径或确认服务器根目录配置。对于 CREDITPOINT + 4 指令,需确认服务器是否开启了声望系统,否则该指令无效但不影响换图。
若修改后仍然无效,需检查引擎脚本加载顺序。部分引擎要求变量初始化必须在登录脚本中完成,否则全局变量可能未分配内存。可在登录脚本中加入 SET G8 0 确保初始值为零。同时,排查是否有其他脚本在同一时间修改了 G8 变量,造成冲突。多开测试时,不同角色共享全局变量会导致数据错乱,需确认变量是否为角色独立存储(通常 G 变量是角色独立的,但需确认引擎具体实现)。
最后,调试此类问题时,可在关键节点加入 SENDMSG 指令,将变量实时数值发送到玩家聊天框,观察数值变化规律。例如在执行加一后立即发送“当前计数:”,能直观看到是数值未增加、增加后归零还是根本未执行到该行。通过这种分段验证法,可快速定位是变量类型错误、逻辑跳转错误还是文件读写权限问题。确保每一步操作都有明确的反馈,避免盲目修改代码结构。

