宝宝叛变在单机传奇里不是单一原因造成的,大体分三类:引擎或配置文件本身就设了叛变时间与概率,脚本层面写了强制叛变的命令,以及祈祷套装或引擎长时间不重启触发的全服异常。排查时先看叛变是“召唤出来一会儿就反”还是“能正常玩一段时间才反”,前者查脚本命令的参数,后者查全局叛变倍率和忠诚度衰减,最后再排除祈祷套装和引擎缓存两个外部因素。
先处理最省事的一层:M2引擎面板里的开关。打开M2主程序,进“选项-功能设置”,依次展开“其他控制-基本控制二”,找到“祈祷生效”并取消勾选,这个选项勾着的时候,哪怕单独关了神兽叛变,穿齐祈祷套的人依然能触发全服宝宝叛变。接着进“宝宝升级”或“召唤兽设置”,把“主人死亡后变异”取消,把“禁止所有召唤兽叛变”勾上,忠诚度相关滑块全部拉到最左,战斗设置里勾上“召唤兽不被玩家攻击触发叛变”。改完点应用并选择立即生效,这一层不需要重启服务端就能压住大部分非脚本触发的叛变。
全局叛变时间的根源在!Setup.txt。打开D:\MirServer\Mir200\!Setup.txt,搜索MasterRoyaltyRate=,这个字段是全局属下叛变时间倍率,默认值10代表10/10,数字越大叛变时间越长,把它改到100以上就能把叛变周期拉长到十几小时以上,改完必须重启M2引擎才读取新值。同一个文件里还要看两行:CallPetLoyalty=1表示启用忠诚度衰减,改成0直接禁用忠诚度机制;PetBetrayalTime如果存在且不为0,改成0取消跟随超时叛变。这三行是时间型叛变的总闸,不关掉它们,下面在数据库和脚本里做再多针对性的修改,宝宝到点照样翻脸。
怪物数据库里的叛变开关按宝宝类型逐个核对。用DBEditor打开Mir200\Envir\Monster.DB,道士骷髅搜“骷髅精灵”,把BetrayalRate改为0、LoyaltyDecay改为0;神兽搜“神兽”,把NeedLoyalty改为0,AngerThreshold改到9999,防止被玩家攻击几次就触发愤怒叛变。数据库里还有一个更直接的字段是CanChangeMaster或UnbindOnHit,数值为1时宝宝允许更换主人,改成0等于在怪物属性层面禁止叛变,这一条对所有召唤来源都生效,优先级高于脚本里的时间参数。数据库改完用M2的“数据库管理-重新加载怪物数据库”热加载即可,不需要重启整个服务端。
脚本层的RECALLMOB或RECALLMOBEX命令是“召唤出来就叛变”的高发点。打开召唤神兽的脚本或QFunction-0.txt,搜索RECALLMOB,命令格式是“RECALLMOB 怪物名称 宝宝等级 叛变时间 颜色类型”,第三个参数是叛变时间,单位是分钟,填30就是30分钟后叛变,如果这个参数被写成了0、负数或者一个很小的数,宝宝召唤瞬间就会被判定为叛变时间已到,直接红名。把这个参数改成0或者一个足够大的正数,0在多数引擎中代表永不叛变。同时检查同一段脚本里有没有GETCALLMOB命令,这个命令的用途就是让指定宝宝立即叛变,如果它被写在了攻击触发或地图进入触发里,删掉或注释掉整行。
QFunction-0.txt里还有两处需要翻一遍。搜索@MobTreachery标签,这是人物宝宝叛变的触发段,如果里面有代码,整段删除或每行前加分号注释。再搜索ChangeSlaveLoyalty,这个命令用来扣减宝宝忠诚度,数值控制不当会一次把忠诚扣成负数,导致宝宝当场反水,检查所有调用该命令的行,把扣减值调小或直接删除。部分版本还在[@Attack]或[@HitTarget]里写了“宝宝攻击主人时自动解散”的逻辑,用UNSUMMON命令实现,这段同样需要注释掉。
祈祷套装是单机环境下最容易被忽略的全局触发源。穿齐整套祈祷装备会直接触发全服道士宝宝叛变,系统还会发出公告,宝宝攻击玩家并在安全区制造混乱。单机玩的时候很少有人主动去凑这套装备,但如果仓库里存了一套、或者从其他角色身上扒下来穿上了,叛变就不是配置问题而是机制本身。把祈祷套拆开存放,或者在上面M2的“祈祷生效”开关上保持取消勾选,两条路任选一条就能关掉这个触发源。
引擎连续运行时间过长引发的叛变属于服务端层面的数据紊乱,不是任何一个配置项写错了。老版引擎连续运行超过一个月,内存管理出问题后宝宝行为逻辑会随机异常,表现为召唤出来就红名或者打着打着突然叛变,此时重启服务端程序就能恢复,改任何配置文件都不解决问题。单机架设虽然不会像公服那样连续跑几十天,但如果挂机挂了好几天没关过服务端,遇到莫名其妙的叛变先完整重启一次M2再判断,能排除掉相当一部分假故障。
登录器与服务端引擎不配套同样会制造宝宝叛变的假象。版本很老的引擎配上新登录器,底层通讯对不上,宝宝可能出现打到一半发呆、叛变后不攻击、或者攻击主人但不掉血等异常,这种问题改服务端参数基本无效,尽量用版本发布时配套的登录器和引擎,不要单独替换其中一侧。
按顺序走下来:先关M2面板的祈祷生效和宝宝叛变开关,再改!Setup.txt的MasterRoyaltyRate、CallPetLoyalty、PetBetrayalTime三行,然后核对Monster.DB里CanChangeMaster和BetrayalRate是否为0,接着翻RECALLMOB的叛变时间参数和GETCALLMOB、@MobTreachery、ChangeSlaveLoyalty三处脚本触发,最后确认身上没有穿齐祈祷套、服务端没有连续运行太久。每一步改完重启或热加载后进游戏召唤宝宝打一会儿怪做对照,只改一个变量,避免多个参数同时变动后分不清哪一项真正起了作用。

