看板 mud 關於我們 聯絡資訊
這裡對於原文中的判斷順序要稍微修正一下,並說明修正的原因 1. 看到mob是否進入戰鬥的判斷 判斷順序一、當前是否有戰鬥 因此一格中始終只有第一個(存在於MOB DB的)MOB會觸發攻擊 判斷順序二、是否有CAST 視使用的User Interface不同,可以使用的語法也不同,甚至可以使用 #IF (!@fight && @castall) {enterfight} {do nothing}; 2. 進入一格後判斷是否移動的順序 原來的順序是(由外而內) #ALA +0.5 {#IF @castall {#IF !@fight {walk}} {home}} 等待0.5秒,先判斷是否有castall->沒有就歸位 有的話判斷是否有進入戰鬥->沒有的話就可以移動位置 這裡(在極少數的狀況下)會發生BUG 就是當遇到MOB時還有CASTALL於是進入戰鬥,但是恰好一進戰鬥就掉CAST 於是會發生沒有CASTALL該歸位了,卻因為戰鬥中無法歸位 如果在其他的地方沒寫好(或是個別MUD系統規則不同)可能會造成BOT當機 所以這個地方的判定要倒轉過來 #ALA +0.5 {#IF !@fight {#IF @castall {walk} {home}}} 先判斷是否在戰鬥,如果沒戰鬥,判斷有無CAST 有CAST就移動到下一格 沒CAST就歸位 ※ 引述《deathcustom (Full House)》之銘言: : 說到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. 戰鬥中補施法 另外來提一下戰鬥中補施法 這需要考慮兩個情境 1. 傷害性法術 2. 輔助性法術(所有不是施法結果必然直接造成傷害者都算, 例如mage的火龍變幻) 前者無論戰鬥的哪一個階段都可以施法,因為施法完的結果就是造成傷害 後者則不一定,通常輔助性法術的施法回合較長,而且施法中不會造成傷害,也無法移動 如果在施放法術後的判定階段(遠端server還沒計算、回饋結果)MOB就受傷死亡 則可能會造成戰鬥結束判定上的當機(因為你正在忙XDDD) 因此我曾經用過的處理方式有 (1) 加上一個casting的判定值 如果戰鬥結束,casting判定值為真,則不進行戰鬥後的動作 如果戰鬥結束,casting判定值為否,則進行戰鬥後的動作 如果casting判定值由真變否時,戰鬥尚未結束,不進行戰鬥後動作 如果casting判定值由真變否時,戰鬥已經結束,進行戰鬥後的動作 但是這個邏輯有點複雜,而且觸發失敗的話容易當機 所以我還用過另外一個機制: (2) MOB 紅血狀態時禁止施放輔助性法術 加上一個紅血判定值,由XXX已經奄奄一息觸發修正判定值為1(true) 當輔助狀態消失觸發要補施放輔助性法術(mage: coating, ogre_power/ pal: pure_blade) 先判定是否紅血,如果紅血則不施放輔助法術 從這裡延伸 紅血狀態還可以做一件事 KK的法術中,咒術的主要傷害法術mind_blast根據友人統計,施放成功率只有62% 換句話說 一發成功率 =62% 雙發成功率 =0.38*0.62 = 23.56% 三發成功率 =8.95% 四發成功率 =3.4% 基本上四發失敗也不是不可能~"~ 但是咒術的傷害法術還有stun (成功率超過八成) 再來就是跟前面一樣的問題 法術系可以使用"你現在不在戰鬥中"作為觸發判斷離開戰鬥 但是常常在紅字階段會發生的是 "唱法(需要兩回合),第一回合結束時SERVER判定MOB死亡" 結果就是這個唱法是無效施法(有耗用MP但是實質上沒有任何效果) 對於咒術來說,這有個問題-無效施法造成OOM風險上升 對應修正方式大約是 1. MOB紅血階段施法節奏放慢(本來是#ALA +0.5,改成#ALA +1甚至+2) 2. MOB紅血階段計算mind_blast次數,滿足次數後施法節奏放慢 -- 以上,不好意思浪費了大家的時間 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.23.191.211 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/mud/M.1681790228.A.90A.html
tsetsethatha: 感謝! 04/18 21:50