在传奇服务端里,把一只指定怪物收成玩家自己的宝宝,靠的是一条召唤命令。不同引擎对这条命令的叫法有差别,最常见的是RECALLMOB,功能更全的一支叫RECALLMOBEX。命令本身写起来不长,真正难的是参数顺序、颜色取值和召唤上限的判断,这三处错了脚本一样能跑完,只是宝宝出不来。
命令到底有哪几条
RECALLMOB是通用写法,GOM、GEE、HERO、HXM2、飞霜这些引擎都认。它做的事就一件,把某只怪物按属主关系挂到人物身上,等级、叛变时间、颜色全由后面的参数定。
RECALLMOBEX属于扩展版本,Mirx一类引擎才提供。它比RECALLMOB多了召唤坐标和数量两个参数,还能决定宝宝名字前面带不带主人名。
要提醒一句,引擎没实现的命令写进脚本不会报错,只是执行时悄无声息,所以先确认自己用的是哪一支引擎,再决定写哪个。
RECALLMOB的参数逐个说清
标准格式是这样的:
text
RECALLMOB怪物名称宝宝等级叛变时间(分钟)是否自动变色固定颜色
怪物名称必须和怪物数据库里那一行完全一致,多一个字、少一个字,或者名字中间带了空格,都召唤不出来。名字默认最长十四字节,超长的怪物名会被截断,得先用工具把字段扩到三十二字节,脚本里才认全名。
宝宝等级最高是七。写零或者写一,出来的就是一级宝宝,血量和攻击按等级往上走,等级越高越能扛。
叛变时间单位是分钟,写三十就代表三十分钟后这只宝宝不再听主人的话。
是否自动变色只有零和一两个值。写零是固定颜色,写一是自动变色。
固定颜色只在自动变色为这个参数写零时才会生效,取值一到七。要是把固定颜色设上了,同时又让自动变色等于一,颜色参数会被直接忽略,宝宝攻击力也跟着按自动变色的规则走,这是很多脚本颜色不对的根源。
有一处容易漏,部分引擎的RECALLMOB末尾还能再跟一个所属技能参数,取值是一到四:一是骷髅,二是神兽,三是圣兽,四是月灵。这个参数是为技能栏服务的,写其他值或者留空,宝宝就不算进任何技能。不打算做技能关联的话,留空就行。
下面是一段能在NPC脚本里直接用的写法:
text
[@recallmob]
#IF
CHECKSLAVECOUNT<5
#ACT
RECALLMOB神兽7301
#SAY
宝宝已经带在身边了。
#ELSESAY
你身上已经有五只或更多的宝宝,先清掉几只再说。
CHECKSLAVECOUNT那一行是前提条件,意思是不足五只才往下走。少了这句判断,玩家反复点,宝宝会一直往上叠。
RECALLMOBEX多出的坐标与数量
扩展版的格式长这样:
text
RECALLMOBEX怪物名XY等级数量叛变时间(分钟)是否自动变色身体颜色是否去掉主人名字
怪物名、等级、叛变时间、自动变色的含义和上面一致。多出来的部分是这样:X和Y是宝宝刷出来的横纵坐标,不写就用人物脚下。数量是这个脚本允许召唤的只数上限,注意RECALLMOBEX执行一次只出一只宝宝,想一次出五只就得把这一行连着写五遍,或者放进循环。
身体颜色默认写负一,表示不改动怪物原本的外观颜色,需要指定时再填具体值。最后一个参数管宝宝头上显示的名字要不要去掉主人名,留空就是保留。整段合起来大概是这个效果:
text
[@recallmobEX]
#IF
CHECKSLAVECOUNT<5
#ACT
RECALLMOBEX神兽514475301
#SAY
宝宝已经在身侧站好了。
#ELSESAY
宝宝数量已经到上限。
五只宝宝会依次落在5144这个点附近,三十分钟后集体叛变。
检测、改名、调威力这些配套命令
光有召唤命令,脚本只能算半成品。判断宝宝数量用CHECKSLAVECOUNT,判断宝宝等级用CHECKSLAVELEVEL,两个都支持大于、小于、等于,等级那里多个宝宝按最高的那只算。要按宝宝名字做判断,就用CHECKSLAVENAME,配合改名命令能做出很细的交互。
玩家点了招宝宝,脚本得知道该把哪只怪物拎出来当宝宝,通常就是靠这两条判断分支去分流的。
想把玩家身上的宝宝全部清掉,用KILLSLAVE。只想弄死某一只,用KILLCALLMOB加宝宝名。要让宝宝当场叛变,命令是GETCALLMOB,后面跟宝宝名字,有的引擎还支持再跟数量和分身是否保留两个参数。GETCALLMOB不带参数时,效果是所有宝宝一起叛变。
改宝宝名字用ChangeBmz,格式是先写新名字,再写要改的旧名字。旧名字留空,就把所有宝宝的名字统一换掉。改名字颜色用ChangeSlaveNameColor,后面跟宝宝名和颜色值。
宝宝攻击人物的力度可以单独调,命令是SetSlaveAttackHumPowerRate,填的数值除以一百才是真正倍数,填零代表宝宝完全不攻击人物。想在现有基础上加减,用SetSlaveAttackHumPowerRateEx,中间那个符号写加、减或等号。数值只能取到变量里时,用GetSlaveAttackHumPowerRate把它读出来。这套命令的好处是做职业平衡时不用动数据库,一条脚本就能控制宝宝对人物造成的伤害。
常用命令整理成一张简表方便查:
表格
用途命令写法
召唤宝宝RECALLMOB怪物名等级分钟变色颜色
带坐标召唤RECALLMOBEX怪物名XY等级数量分钟变色颜色
查数量CHECKSLAVECOUNT控制符数量
查等级CHECKSLAVELEVEL控制符等级
全清宝宝KILLSLAVE无参数
杀指定宝宝KILLCALLMOB宝宝名
立即叛变GETCALLMOB宝宝名数量是否保留分身
改宝宝名ChangeBmz新名旧名
改名字颜色ChangeSlaveNameColor宝宝名颜色值
调攻击力度SetSlaveAttackHumPowerRate宝宝名倍率
叛变时间不全由命令说了算
脚本里写了叛变时间,最后宝宝多久叛变还得看服务端的全局参数。打开Mir200目录下的!Setup.txt,找到MasterRoyaltyRate这一行,默认值十,大致对应两小时。这个数字是倍率,写十二就是原来的一点二倍,写一百差不多八小时。数字越大,宝宝跟得越久。改完必须重启引擎才生效,这一点绕不过去。
另外,怪物数据库里的怪物行为字段也会影响宝宝的表现。比如决定攻击方式的Race和决定攻击效果的Racelmg,取值不合理会让宝宝不主动打怪,或者动作跟外观对不上,看起来像召唤失败,实际上是数据库的问题。
召唤不出来先查这几处
最常见的第一种情况是怪物名和数据库对不上,尤其名字里带符号或用的是超长名的时候,截断之后脚本里的名字就成了无效名。
第二种是没有做数量判断。玩家身上已满上限,脚本还照发召唤命令,命令被引擎挡掉,玩家只看到没反应。加上CHECKSLAVECOUNT就能避免。
第三种是颜色参数自相矛盾。固定颜色和自动变色同时打开,颜色被忽略,宝宝外观跟预期差很远,容易被当成召唤失败。
第四种是用错了引擎的命令。RECALLMOB和RECALLMOBEX分属不同引擎,拿扩展引擎的写法去套普通引擎,或者反过来,都会静默失效。
第五种是触发位置放错。召唤逻辑写在NPC对话里是一种,写在QFunction-0.txt里是另一种。QFunction-0.txt下的触发标签,比如杀死怪物后触发的@GetExp,或者自定义技能触发的@MagSelfFunc加技能编号,只有在对应的引擎里才被调用。位置放对,标签名也得完全一致。
进阶:打死怪就变宝宝、技能召唤
想让玩家打死哪只怪,哪只怪就变成自己的宝宝,思路是把怪物名先存进变量,再拿变量去调用召唤命令。在QFunction-0.txt的@GetExp段里大致这么写:
text
[@GetExp]
#IF
CHECKSLAVECOUNT<5
#ACT
MOVS$名字怪<$KILLMONNAME>
RECALLMOB<$STR(S$名字怪)>710
SetSlaveAttackHumPowerRate<$STR(S$名字怪)>200
ChangeSlaveNameColor<$STR(S$名字怪)>241
先判断宝宝没满,把刚打死的怪物名读进变量,再召唤。后面两条把宝宝的攻击力度调成两倍,同时把名字颜色改掉,一眼就能看出哪只是收来的。同一套逻辑换成自定义技能触发也能用,把标签改成对应的技能编号段即可。
宝宝死亡后自动复活也能做。引擎在宝宝死亡时会触发专门的标签,在里面重新调一次RECALLMOB,宝宝就会原地重新出现,省得玩家反复手动召唤。
参数速查
等级最高七,超了按七算。叛变时间单位是分钟,全零代表不过期。自动变色零是固定、一是自动。固定颜色取值一到七,只有自动变色为零时才起作用。RECALLMOBEX的身体颜色默认写负一。所属技能一到四对应骷髅、神兽、圣兽、月灵。攻击力度倍率是数值除以一百。全局叛变倍率在!Setup.txt的MasterRoyaltyRate里,改完重启引擎。
把这些参数、配套命令和触发位置对上号,一只指定怪物就能稳稳当当地变成玩家自己的宝宝,脚本也不会因为一个小参数写反而时灵时不灵。
命令到底有哪几条
RECALLMOB是通用写法,GOM、GEE、HERO、HXM2、飞霜这些引擎都认。它做的事就一件,把某只怪物按属主关系挂到人物身上,等级、叛变时间、颜色全由后面的参数定。
RECALLMOBEX属于扩展版本,Mirx一类引擎才提供。它比RECALLMOB多了召唤坐标和数量两个参数,还能决定宝宝名字前面带不带主人名。
要提醒一句,引擎没实现的命令写进脚本不会报错,只是执行时悄无声息,所以先确认自己用的是哪一支引擎,再决定写哪个。
RECALLMOB的参数逐个说清
标准格式是这样的:
text
RECALLMOB怪物名称宝宝等级叛变时间(分钟)是否自动变色固定颜色
怪物名称必须和怪物数据库里那一行完全一致,多一个字、少一个字,或者名字中间带了空格,都召唤不出来。名字默认最长十四字节,超长的怪物名会被截断,得先用工具把字段扩到三十二字节,脚本里才认全名。
宝宝等级最高是七。写零或者写一,出来的就是一级宝宝,血量和攻击按等级往上走,等级越高越能扛。
叛变时间单位是分钟,写三十就代表三十分钟后这只宝宝不再听主人的话。
是否自动变色只有零和一两个值。写零是固定颜色,写一是自动变色。
固定颜色只在自动变色为这个参数写零时才会生效,取值一到七。要是把固定颜色设上了,同时又让自动变色等于一,颜色参数会被直接忽略,宝宝攻击力也跟着按自动变色的规则走,这是很多脚本颜色不对的根源。
有一处容易漏,部分引擎的RECALLMOB末尾还能再跟一个所属技能参数,取值是一到四:一是骷髅,二是神兽,三是圣兽,四是月灵。这个参数是为技能栏服务的,写其他值或者留空,宝宝就不算进任何技能。不打算做技能关联的话,留空就行。
下面是一段能在NPC脚本里直接用的写法:
text
[@recallmob]
#IF
CHECKSLAVECOUNT<5
#ACT
RECALLMOB神兽7301
#SAY
宝宝已经带在身边了。
#ELSESAY
你身上已经有五只或更多的宝宝,先清掉几只再说。
CHECKSLAVECOUNT那一行是前提条件,意思是不足五只才往下走。少了这句判断,玩家反复点,宝宝会一直往上叠。
RECALLMOBEX多出的坐标与数量
扩展版的格式长这样:
text
RECALLMOBEX怪物名XY等级数量叛变时间(分钟)是否自动变色身体颜色是否去掉主人名字
怪物名、等级、叛变时间、自动变色的含义和上面一致。多出来的部分是这样:X和Y是宝宝刷出来的横纵坐标,不写就用人物脚下。数量是这个脚本允许召唤的只数上限,注意RECALLMOBEX执行一次只出一只宝宝,想一次出五只就得把这一行连着写五遍,或者放进循环。
身体颜色默认写负一,表示不改动怪物原本的外观颜色,需要指定时再填具体值。最后一个参数管宝宝头上显示的名字要不要去掉主人名,留空就是保留。整段合起来大概是这个效果:
text
[@recallmobEX]
#IF
CHECKSLAVECOUNT<5
#ACT
RECALLMOBEX神兽514475301
#SAY
宝宝已经在身侧站好了。
#ELSESAY
宝宝数量已经到上限。
五只宝宝会依次落在5144这个点附近,三十分钟后集体叛变。
检测、改名、调威力这些配套命令
光有召唤命令,脚本只能算半成品。判断宝宝数量用CHECKSLAVECOUNT,判断宝宝等级用CHECKSLAVELEVEL,两个都支持大于、小于、等于,等级那里多个宝宝按最高的那只算。要按宝宝名字做判断,就用CHECKSLAVENAME,配合改名命令能做出很细的交互。
玩家点了招宝宝,脚本得知道该把哪只怪物拎出来当宝宝,通常就是靠这两条判断分支去分流的。
想把玩家身上的宝宝全部清掉,用KILLSLAVE。只想弄死某一只,用KILLCALLMOB加宝宝名。要让宝宝当场叛变,命令是GETCALLMOB,后面跟宝宝名字,有的引擎还支持再跟数量和分身是否保留两个参数。GETCALLMOB不带参数时,效果是所有宝宝一起叛变。
改宝宝名字用ChangeBmz,格式是先写新名字,再写要改的旧名字。旧名字留空,就把所有宝宝的名字统一换掉。改名字颜色用ChangeSlaveNameColor,后面跟宝宝名和颜色值。
宝宝攻击人物的力度可以单独调,命令是SetSlaveAttackHumPowerRate,填的数值除以一百才是真正倍数,填零代表宝宝完全不攻击人物。想在现有基础上加减,用SetSlaveAttackHumPowerRateEx,中间那个符号写加、减或等号。数值只能取到变量里时,用GetSlaveAttackHumPowerRate把它读出来。这套命令的好处是做职业平衡时不用动数据库,一条脚本就能控制宝宝对人物造成的伤害。
常用命令整理成一张简表方便查:
表格
用途命令写法
召唤宝宝RECALLMOB怪物名等级分钟变色颜色
带坐标召唤RECALLMOBEX怪物名XY等级数量分钟变色颜色
查数量CHECKSLAVECOUNT控制符数量
查等级CHECKSLAVELEVEL控制符等级
全清宝宝KILLSLAVE无参数
杀指定宝宝KILLCALLMOB宝宝名
立即叛变GETCALLMOB宝宝名数量是否保留分身
改宝宝名ChangeBmz新名旧名
改名字颜色ChangeSlaveNameColor宝宝名颜色值
调攻击力度SetSlaveAttackHumPowerRate宝宝名倍率
叛变时间不全由命令说了算
脚本里写了叛变时间,最后宝宝多久叛变还得看服务端的全局参数。打开Mir200目录下的!Setup.txt,找到MasterRoyaltyRate这一行,默认值十,大致对应两小时。这个数字是倍率,写十二就是原来的一点二倍,写一百差不多八小时。数字越大,宝宝跟得越久。改完必须重启引擎才生效,这一点绕不过去。
另外,怪物数据库里的怪物行为字段也会影响宝宝的表现。比如决定攻击方式的Race和决定攻击效果的Racelmg,取值不合理会让宝宝不主动打怪,或者动作跟外观对不上,看起来像召唤失败,实际上是数据库的问题。
召唤不出来先查这几处
最常见的第一种情况是怪物名和数据库对不上,尤其名字里带符号或用的是超长名的时候,截断之后脚本里的名字就成了无效名。
第二种是没有做数量判断。玩家身上已满上限,脚本还照发召唤命令,命令被引擎挡掉,玩家只看到没反应。加上CHECKSLAVECOUNT就能避免。
第三种是颜色参数自相矛盾。固定颜色和自动变色同时打开,颜色被忽略,宝宝外观跟预期差很远,容易被当成召唤失败。
第四种是用错了引擎的命令。RECALLMOB和RECALLMOBEX分属不同引擎,拿扩展引擎的写法去套普通引擎,或者反过来,都会静默失效。
第五种是触发位置放错。召唤逻辑写在NPC对话里是一种,写在QFunction-0.txt里是另一种。QFunction-0.txt下的触发标签,比如杀死怪物后触发的@GetExp,或者自定义技能触发的@MagSelfFunc加技能编号,只有在对应的引擎里才被调用。位置放对,标签名也得完全一致。
进阶:打死怪就变宝宝、技能召唤
想让玩家打死哪只怪,哪只怪就变成自己的宝宝,思路是把怪物名先存进变量,再拿变量去调用召唤命令。在QFunction-0.txt的@GetExp段里大致这么写:
text
[@GetExp]
#IF
CHECKSLAVECOUNT<5
#ACT
MOVS$名字怪<$KILLMONNAME>
RECALLMOB<$STR(S$名字怪)>710
SetSlaveAttackHumPowerRate<$STR(S$名字怪)>200
ChangeSlaveNameColor<$STR(S$名字怪)>241
先判断宝宝没满,把刚打死的怪物名读进变量,再召唤。后面两条把宝宝的攻击力度调成两倍,同时把名字颜色改掉,一眼就能看出哪只是收来的。同一套逻辑换成自定义技能触发也能用,把标签改成对应的技能编号段即可。
宝宝死亡后自动复活也能做。引擎在宝宝死亡时会触发专门的标签,在里面重新调一次RECALLMOB,宝宝就会原地重新出现,省得玩家反复手动召唤。
参数速查
等级最高七,超了按七算。叛变时间单位是分钟,全零代表不过期。自动变色零是固定、一是自动。固定颜色取值一到七,只有自动变色为零时才起作用。RECALLMOBEX的身体颜色默认写负一。所属技能一到四对应骷髅、神兽、圣兽、月灵。攻击力度倍率是数值除以一百。全局叛变倍率在!Setup.txt的MasterRoyaltyRate里,改完重启引擎。
把这些参数、配套命令和触发位置对上号,一只指定怪物就能稳稳当当地变成玩家自己的宝宝,脚本也不会因为一个小参数写反而时灵时不灵。

