[學術] 蘿蔔PseudoCode

作者: deathcustom (第三人的到來)   2023-04-11 12:01:31
說到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. 戰鬥中補施法
作者: tsetsethatha (吉星麥造~~~我來了)   2023-04-12 13:58:00
感謝發表!收錄於精華區z-3-20 再次感謝d大! :)

Links booklink

Contact Us: admin [ a t ] ucptt.com