传奇里出现“NPC重名复制装备”,通常不是玩家单纯因为两个NPC名字一样就自动刷出装备,而是服务端里NPC配置、脚本文件、仓库交易、物品扣除逻辑同时存在问题。排查时要先看NPC是否真的重名,再看脚本是否被重复触发,接着检查仓库、交易、回收、Give命令是否缺少Take验证,最后再看引擎版本是否存在双登或数据同步漏洞。
第一步先查Merchant.txt。这个文件在服务端Mir200Envir目录下,用来配置NPC显示位置、脚本名称和NPC名称。打开后按NPC名称搜索,看有没有多个配置行指向同一个NPC名字。例如两个不同地图、不同坐标的NPC都叫“装备回收员”,玩家点击时可能触发相同脚本标签,如果脚本里没有判断地图、角色状态或消耗物品,就可能被重复利用。
排查Merchant.txt时要注意几个字段:脚本名称、地图名称、X坐标、Y坐标、NPC名称、形象代码。脚本名称决定调用哪个脚本文件,NPC名称只是显示名字。很多时候问题不是NPC显示名重复,而是两个不同脚本名称调用了同一个[@main]或同一个Give逻辑,导致玩家在不同位置反复点击都能拿到物品。
第二步检查Market_Def目录下的脚本文件。脚本文件通常命名成“脚本名称-地图编号.txt”,例如“装备回收-3.txt”。如果Merchant.txt里有两个NPC都指向同一个脚本文件,而脚本里只写了Give,没有写Take、CheckItem、地图判断或次数限制,就容易出现重复领取。修复时不要把两个NPC简单改成不同名字,要先确认脚本是否应该共用。如果确实需要共用,就要在脚本里增加判断,例如检测背包是否已有该物品、是否已经领取过、是否消耗了对应道具。
第三步重点看Give和Take命令。很多复制问题都出在“先给物品,后扣物品”或者“只给不扣”。例如回收装备时,脚本先Give元宝或装备,再Take玩家物品;如果玩家在Take执行前小退、断线、切换地图,物品可能没有被正确扣除。正确写法应该先检测物品数量,再扣除,最后发放奖励。顺序不能反,也不能缺少失败回滚。
第四步检查仓库复制问题。部分版本里,玩家利用两个角色、同名角色或仓库数据同步延迟,把物品存入仓库后小退,再登录另一个角色取出,造成物品没有减少。修复时不要只改NPC名字,要检查仓库脚本是否在服务端完成验证。仓库存取、交易、回收、邮寄这类操作,必须保证物品扣除和奖励发放是同一流程内完成,不能依赖客户端状态或延迟判断。
第五步检查交易和摆摊脚本。如果版本里有NPC交易、摆摊购买、材料兑换等功能,要确认购买时是否真的扣除了货币或材料。常见漏洞是脚本只判断玩家拥有多少元宝,却没有执行Take;或者扣除写在ElseAct里,正常流程反而没有执行。排查时搜索脚本目录里的GAMEGOLD、GAMEDIAMOND、Give、Take、CheckItem、SetShopItemPriceRate等命令,确认没有无条件发放物品的情况。
第六步处理真正的NPC重名。如果多个NPC确实显示相同名字,且玩家容易混淆,可以在Merchant.txt里修改NPC名称,让每个NPC显示不同文字。例如把“武器商人”改成“比奇武器商人”“盟重武器商人”。但要注意,修改NPC名称后,脚本文件名和Merchant.txt里的脚本名称不能跟着乱改,否则NPC点击会没有反应。NPC显示名可以改,脚本调用关系必须保持一致。
第七步检查角色重名和双登问题。早期传奇和一些老引擎存在地图切换时双登验证不足的情况,玩家可能利用两个客户端同时登录同一角色,再通过交易或仓库复制物品。这类问题不是改NPC名字能解决的,需要引擎层面处理。排查时查看M2Server是否有双登检测、登录踢线、地图切换状态校验等设置。如果版本引擎较老,建议更换到修复过双登漏洞的版本,或开启引擎自带的防双登选项。
第八步检查QFunction-0.txt和QManage.txt。这两个文件容易被忽略,但很多后台触发、双击触发、登录触发、升级触发会写在这里。如果里面有Give命令,却没有对应消耗判断,也可能造成玩家通过NPC、道具、升级、登录等途径重复获得物品。排查时不要只看Market_Def目录,要把Envir下的公共脚本一起检查。
第九步检查管理员列表和权限命令。AdminList.txt、管理员权限、CHANGEPERMISSION、CHANGEMODE等如果被错误开放,玩家可能通过命令直接获得物品或权限。修复时清理不必要的GM账号,管理命令权限不要设为0,避免普通玩家触发管理功能。单机测试时为了方便可以设置高权限,但开放给他人使用前必须收回。
第十步验证修复效果。修改完成后重启M2Server,或重新加载NPC配置和脚本。进入对应NPC测试多次点击、小退再上线、存仓库再取、交易取消、断线重连等情况。重点观察物品是否被重复发放、扣除是否生效、仓库数据是否一致。测试时最好准备两个角色,一个负责触发NPC,一个负责接收交易或查看仓库变化。
常见问题里,NPC点击无反应通常是脚本文件名或脚本名称写错;NPC显示重名但功能正常,只需改显示名;玩家能无限领取物品,多半是脚本缺少Take或次数判断;仓库取出后物品不减少,要检查仓库脚本是否在服务端扣物;两个同名角色同时在线,需要引擎开启双登检测或更换修复版本。
修复这类问题时,修改前一定要备份Merchant.txt、Market_Def脚本、QFunction-0.txt、AdminList.txt和仓库相关脚本。不要一次性改太多文件,改完一个环节就测试一次,否则出现新BUG后很难定位是哪一处改动导致。
第一步先查Merchant.txt。这个文件在服务端Mir200Envir目录下,用来配置NPC显示位置、脚本名称和NPC名称。打开后按NPC名称搜索,看有没有多个配置行指向同一个NPC名字。例如两个不同地图、不同坐标的NPC都叫“装备回收员”,玩家点击时可能触发相同脚本标签,如果脚本里没有判断地图、角色状态或消耗物品,就可能被重复利用。
排查Merchant.txt时要注意几个字段:脚本名称、地图名称、X坐标、Y坐标、NPC名称、形象代码。脚本名称决定调用哪个脚本文件,NPC名称只是显示名字。很多时候问题不是NPC显示名重复,而是两个不同脚本名称调用了同一个[@main]或同一个Give逻辑,导致玩家在不同位置反复点击都能拿到物品。
第二步检查Market_Def目录下的脚本文件。脚本文件通常命名成“脚本名称-地图编号.txt”,例如“装备回收-3.txt”。如果Merchant.txt里有两个NPC都指向同一个脚本文件,而脚本里只写了Give,没有写Take、CheckItem、地图判断或次数限制,就容易出现重复领取。修复时不要把两个NPC简单改成不同名字,要先确认脚本是否应该共用。如果确实需要共用,就要在脚本里增加判断,例如检测背包是否已有该物品、是否已经领取过、是否消耗了对应道具。
第三步重点看Give和Take命令。很多复制问题都出在“先给物品,后扣物品”或者“只给不扣”。例如回收装备时,脚本先Give元宝或装备,再Take玩家物品;如果玩家在Take执行前小退、断线、切换地图,物品可能没有被正确扣除。正确写法应该先检测物品数量,再扣除,最后发放奖励。顺序不能反,也不能缺少失败回滚。
第四步检查仓库复制问题。部分版本里,玩家利用两个角色、同名角色或仓库数据同步延迟,把物品存入仓库后小退,再登录另一个角色取出,造成物品没有减少。修复时不要只改NPC名字,要检查仓库脚本是否在服务端完成验证。仓库存取、交易、回收、邮寄这类操作,必须保证物品扣除和奖励发放是同一流程内完成,不能依赖客户端状态或延迟判断。
第五步检查交易和摆摊脚本。如果版本里有NPC交易、摆摊购买、材料兑换等功能,要确认购买时是否真的扣除了货币或材料。常见漏洞是脚本只判断玩家拥有多少元宝,却没有执行Take;或者扣除写在ElseAct里,正常流程反而没有执行。排查时搜索脚本目录里的GAMEGOLD、GAMEDIAMOND、Give、Take、CheckItem、SetShopItemPriceRate等命令,确认没有无条件发放物品的情况。
第六步处理真正的NPC重名。如果多个NPC确实显示相同名字,且玩家容易混淆,可以在Merchant.txt里修改NPC名称,让每个NPC显示不同文字。例如把“武器商人”改成“比奇武器商人”“盟重武器商人”。但要注意,修改NPC名称后,脚本文件名和Merchant.txt里的脚本名称不能跟着乱改,否则NPC点击会没有反应。NPC显示名可以改,脚本调用关系必须保持一致。
第七步检查角色重名和双登问题。早期传奇和一些老引擎存在地图切换时双登验证不足的情况,玩家可能利用两个客户端同时登录同一角色,再通过交易或仓库复制物品。这类问题不是改NPC名字能解决的,需要引擎层面处理。排查时查看M2Server是否有双登检测、登录踢线、地图切换状态校验等设置。如果版本引擎较老,建议更换到修复过双登漏洞的版本,或开启引擎自带的防双登选项。
第八步检查QFunction-0.txt和QManage.txt。这两个文件容易被忽略,但很多后台触发、双击触发、登录触发、升级触发会写在这里。如果里面有Give命令,却没有对应消耗判断,也可能造成玩家通过NPC、道具、升级、登录等途径重复获得物品。排查时不要只看Market_Def目录,要把Envir下的公共脚本一起检查。
第九步检查管理员列表和权限命令。AdminList.txt、管理员权限、CHANGEPERMISSION、CHANGEMODE等如果被错误开放,玩家可能通过命令直接获得物品或权限。修复时清理不必要的GM账号,管理命令权限不要设为0,避免普通玩家触发管理功能。单机测试时为了方便可以设置高权限,但开放给他人使用前必须收回。
第十步验证修复效果。修改完成后重启M2Server,或重新加载NPC配置和脚本。进入对应NPC测试多次点击、小退再上线、存仓库再取、交易取消、断线重连等情况。重点观察物品是否被重复发放、扣除是否生效、仓库数据是否一致。测试时最好准备两个角色,一个负责触发NPC,一个负责接收交易或查看仓库变化。
常见问题里,NPC点击无反应通常是脚本文件名或脚本名称写错;NPC显示重名但功能正常,只需改显示名;玩家能无限领取物品,多半是脚本缺少Take或次数判断;仓库取出后物品不减少,要检查仓库脚本是否在服务端扣物;两个同名角色同时在线,需要引擎开启双登检测或更换修复版本。
修复这类问题时,修改前一定要备份Merchant.txt、Market_Def脚本、QFunction-0.txt、AdminList.txt和仓库相关脚本。不要一次性改太多文件,改完一个环节就测试一次,否则出现新BUG后很难定位是哪一处改动导致。

