传奇召唤指定怪物成为自己宝宝脚本命令参数详细写法与实例全讲解

来源: 作者: 点击:
在传奇服务端里,把一只指定怪物收成玩家自己的宝宝,靠的是一条召唤命令。不同引擎对这条命令的叫法有差别,最常见的是 RECALLMOB,功能更全的一支叫 RECALLMOBEX。命令本身写起来不长,真正难的是参数顺序、颜色取值和召唤上限的判断,这三处错了脚本一样能跑完,只是宝宝出不来。

命令到底有哪几条

RECALLMOB 是通用写法,GOM、GEE、HERO、HXM2、飞霜这些引擎都认。它做的事就一件,把某只怪物按属主关系挂到人物身上,等级、叛变时间、颜色全由后面的参数定。

RECALLMOBEX 属于扩展版本,Mirx 一类引擎才提供。它比 RECALLMOB 多了召唤坐标和数量两个参数,还能决定宝宝名字前面带不带主人名。

要提醒一句,引擎没实现的命令写进脚本不会报错,只是执行时悄无声息,所以先确认自己用的是哪一支引擎,再决定写哪个。

RECALLMOB 的参数逐个说清

标准格式是这样的:

text
RECALLMOB 怪物名称 宝宝等级 叛变时间(分钟) 是否自动变色 固定颜色


怪物名称必须和怪物数据库里那一行完全一致,多一个字、少一个字,或者名字中间带了空格,都召唤不出来。名字默认最长十四字节,超长的怪物名会被截断,得先用工具把字段扩到三十二字节,脚本里才认全名。

宝宝等级最高是七。写零或者写一,出来的就是一级宝宝,血量和攻击按等级往上走,等级越高越能扛。

叛变时间单位是分钟,写三十就代表三十分钟后这只宝宝不再听主人的话。

是否自动变色只有零和一两个值。写零是固定颜色,写一是自动变色。

固定颜色只在自动变色为这个参数写零时才会生效,取值一到七。要是把固定颜色设上了,同时又让自动变色等于一,颜色参数会被直接忽略,宝宝攻击力也跟着按自动变色的规则走,这是很多脚本颜色不对的根源。

有一处容易漏,部分引擎的 RECALLMOB 末尾还能再跟一个所属技能参数,取值是一到四:一是骷髅,二是神兽,三是圣兽,四是月灵。这个参数是为技能栏服务的,写其他值或者留空,宝宝就不算进任何技能。不打算做技能关联的话,留空就行。

下面是一段能在 NPC 脚本里直接用的写法:

text
[@recallmob]
#IF
CHECKSLAVECOUNT < 5
#ACT
RECALLMOB 神兽 7 30 1
#SAY
宝宝已经带在身边了。
#ELSESAY
你身上已经有五只或更多的宝宝,先清掉几只再说。


CHECKSLAVECOUNT 那一行是前提条件,意思是不足五只才往下走。少了这句判断,玩家反复点,宝宝会一直往上叠。

RECALLMOBEX 多出的坐标与数量

扩展版的格式长这样:

text
RECALLMOBEX 怪物名 X Y 等级 数量 叛变时间(分钟) 是否自动变色 身体颜色 是否去掉主人名字


怪物名、等级、叛变时间、自动变色的含义和上面一致。多出来的部分是这样:X 和 Y 是宝宝刷出来的横纵坐标,不写就用人物脚下。数量是这个脚本允许召唤的只数上限,注意 RECALLMOBEX 执行一次只出一只宝宝,想一次出五只就得把这一行连着写五遍,或者放进循环。

身体颜色默认写负一,表示不改动怪物原本的外观颜色,需要指定时再填具体值。最后一个参数管宝宝头上显示的名字要不要去掉主人名,留空就是保留。整段合起来大概是这个效果:

text
[@recallmobEX]
#IF
CHECKSLAVECOUNT < 5
#ACT
RECALLMOBEX 神兽 51 44 7 5 30 1
#SAY
宝宝已经在身侧站好了。
#ELSESAY
宝宝数量已经到上限。


五只宝宝会依次落在 51 44 这个点附近,三十分钟后集体叛变。

检测、改名、调威力这些配套命令

光有召唤命令,脚本只能算半成品。判断宝宝数量用 CHECKSLAVECOUNT,判断宝宝等级用 CHECKSLAVELEVEL,两个都支持大于、小于、等于,等级那里多个宝宝按最高的那只算。要按宝宝名字做判断,就用 CHECKSLAVENAME,配合改名命令能做出很细的交互。

玩家点了招宝宝,脚本得知道该把哪只怪物拎出来当宝宝,通常就是靠这两条判断分支去分流的。

想把玩家身上的宝宝全部清掉,用 KILLSLAVE。只想弄死某一只,用 KILLCALLMOB 加宝宝名。要让宝宝当场叛变,命令是 GETCALLMOB,后面跟宝宝名字,有的引擎还支持再跟数量和分身是否保留两个参数。GETCALLMOB 不带参数时,效果是所有宝宝一起叛变。

改宝宝名字用 ChangeBmz,格式是先写新名字,再写要改的旧名字。旧名字留空,就把所有宝宝的名字统一换掉。改名字颜色用 ChangeSlaveNameColor,后面跟宝宝名和颜色值。

宝宝攻击人物的力度可以单独调,命令是 SetSlaveAttackHumPowerRate,填的数值除以一百才是真正倍数,填零代表宝宝完全不攻击人物。想在现有基础上加减,用 SetSlaveAttackHumPowerRateEx,中间那个符号写加、减或等号。数值只能取到变量里时,用 GetSlaveAttackHumPowerRate 把它读出来。这套命令的好处是做职业平衡时不用动数据库,一条脚本就能控制宝宝对人物造成的伤害。

常用命令整理成一张简表方便查:

表格
用途 命令 写法
召唤宝宝 RECALLMOB 怪物名 等级 分钟 变色 颜色
带坐标召唤 RECALLMOBEX 怪物名 X Y 等级 数量 分钟 变色 颜色
查数量 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
MOV S$名字怪 <$KILLMONNAME>
RECALLMOB <$STR(S$名字怪)> 7 10
SetSlaveAttackHumPowerRate <$STR(S$名字怪)> 200
ChangeSlaveNameColor <$STR(S$名字怪)> 241


先判断宝宝没满,把刚打死的怪物名读进变量,再召唤。后面两条把宝宝的攻击力度调成两倍,同时把名字颜色改掉,一眼就能看出哪只是收来的。同一套逻辑换成自定义技能触发也能用,把标签改成对应的技能编号段即可。

宝宝死亡后自动复活也能做。引擎在宝宝死亡时会触发专门的标签,在里面重新调一次 RECALLMOB,宝宝就会原地重新出现,省得玩家反复手动召唤。

参数速查

等级最高七,超了按七算。叛变时间单位是分钟,全零代表不过期。自动变色零是固定、一是自动。固定颜色取值一到七,只有自动变色为零时才起作用。RECALLMOBEX 的身体颜色默认写负一。所属技能一到四对应骷髅、神兽、圣兽、月灵。攻击力度倍率是数值除以一百。全局叛变倍率在 !Setup.txt 的 MasterRoyaltyRate 里,改完重启引擎。

把这些参数、配套命令和触发位置对上号,一只指定怪物就能稳稳当当地变成玩家自己的宝宝,脚本也不会因为一个小参数写反而时灵时不灵。