说到MUD,早年最让WIZ讨厌的除了Multi就是萝卜
但是现在的MUD大多都没有真的认真在抓萝卜了
萝卜一般来说就是用来打怪赚经验(就算JY的UQ,也是要打怪才能赚到经验啊)
基本上萝卜需要具备几个基本的组成成分
1. 状态判定
以万王之王为例
需要判断自己是否在"castall"的状态
判断方式有两个
(1) score check
如果score有抓到 ^身体状况%1朦胧术
KK自己的cast状态,基本上朦胧术之后只会有镇定术
(2) 触发调整
使用常用的castg当castall完成后,触发 #MATH castall 1
等最后一个cast掉(以我自己常用的是迅捷术掉cast)抓触发字触发 #MATH castall 0
(3) 例外调整
其他事件:死亡
(有些MUD断线可能会掉光状态,请自己确认)
抓触发字触发 #MATH castall 0
2. 行走
有些mud(例如kk)有每回合(2 sec)指令上限(7)
有些没有
没有的直接录制path之后用zmud的slow walk trigger可以随时停下打怪
有限制的,我是这样
#TR {路径上房间名称} {#ALA +0.5 {#IF @castall {#IF !@fight {walk}} {回定点的指
令}}
walk是一个alias,内容大致是
#CASE @room {direction} {direction}......{direction}
#ADD room 1
tintin的话
#SWITCH $room
{
#CASE {1} {direction};
#CASE {2} {direction};
...
#CASE {N} {direction}
};
#MATH {room} {$room+1};
机制是这样,进入房间后0.5秒判断有无castall, 如果没有,自动归位重补cast
如果有,判断有无进入战斗,没有战斗就继续移动
TINTIN的话#ALA +0.5 {}可以用#DELAY 0.4 {}取代
理论上TINTIN的极限可以到0.01,但是kk的限制下,最短应该是0.34
(第一个指令起算2秒内只能再接受6个指令,每个指令间隔0.333秒,所以取0.34
但是为了保险起见我会选择 0.4)
3. 触发战斗
#TR {中文名{(}%1{)}} {
#IF @castall {
#IF !@fight {
战斗指令(such as kill %left(%1,2));
#MATH fight 1;
}
}
}
%left(%1,2)表示kill指令下只有该字串的头两个英文字母被使用
KK中最短的ID是三个英文字母,我待的国家又有很多MOB实际上有对应的实际玩家
为了避免自己变成pker,我习惯加上这一层保险
4. 战斗结束
以kk为例
最容易判断战斗结束的
(1)战士系/魔剑士/神官
#TR {得到%1经验} {#MATH fight 0;afterfight指令}
效果是只要你得到经验就会把战斗归零
BUG:如果同一区有狂战,很容易发生你开打后还没碰到怪他就死了
此时你不会得到任何经验......
修正的方式很简单
在一开始开打的地方,设定#VAR mob %1
如果抓到XXX死了的讯息,你就kill @mob
此时可以判断是否还在战斗中(出现这里没有这个人 表示战斗结束)
(2)咒/巫/贤/祭
使用战斗型法术(stun/mind_blast/dragon_breath/soul_steal/holy_word
如果战斗已经结束会跳出 你现在不在战斗中的讯息
#TR {^你现在不在战斗中} {#MATH fight 0;afterfight指令}
5. 战斗结束的动作不外乎
(1) 捡尸
(2) 确认自己状态
(3) 移动
这部分就大家各自有各自的手段
6. 战斗中补施法