看板 mud_sanc 關於我們 聯絡資訊
※ 引述《hmml (hmml)》之銘言: : 反擊如果是最後一擊,系統會這樣判斷死因: : (發狂)賢者天尊經過了一番苦戰,終於殺死賢者天尊 :  在這區域而言,這樣的結果最無言,徒勞無功。而 :  這個任務,解謎者必須自行解決六位NPC,才能迎 :  戰最終頭目,上面這位天尊是第六位... :  除非純正法牧,我想沒反擊技能的角色應該沒有, :  所以解謎的時候,有很大的機率會因反擊而失敗。 :  事實上,這個謎還蠻容易解失敗的,因為反擊。 :  過去因為法牧盾的阻擋順位在反擊前面,所以有辦 :  法避免。現在就無計可施了。結果要解這個謎,運 :  氣成份變很大,而最終頭目的掉裝也是隨機的,也 :  就是拿裝難度爆增。如果玩家像我天生就帶衰,常 : 常不能像關二爺般過五關斬六將(事實上有,但NPC : 一直堅持是自殺...),解謎興致難免大減,那就只 : 好練個人成就,相對地,就會很安靜... :  所以對於反擊,能不能做個指令來開關反擊,或者 :  和attack stop/rescue做在一起,好讓解謎的不安 :  因素能少一點,至少在反擊判斷解決前,有一個應 : 對措施... 反擊不可能特地寫成「反擊如果是最後一擊,會變成怪 物殺死自己」。因為這樣變成戰鬥中需要兩個判斷.. if(是最後一擊) 怪物攻擊自己; else 玩家攻擊怪物; ================================================ 反擊的相關程式段如下,如果玩家此時被怪物攻擊,tar 就是指玩家(被攻擊對象才會判斷到下面)。 case "counter": 當某一輪攻擊 tar 判斷自己應施展反擊 if(tar && userp(tar)) tar->set_special_attack(({"\n$N抓到了機會,將$O對$N的攻勢反擊了回去", dam2,me})); return ({0,",但是被$O抓到了反擊的機會!"}); 重點是上面標粉紅的部份,如果被攻擊目標是玩家時, 該玩家才會把反擊資訊寫進自己的資料裡頭. 而 special_attack 則是這樣判斷的.. void dump_special_attack() { mixed sa,tmps; if(!temp_data["special_attacks"]) return ; sa=(mixed)temp_data["special_attacks"]; foreach(tmps in sa) if(tmps[2]) me->shut2((string)tmps[0],(int)tmps[1],1000,"dam",tmps[2]); // 採用底下的 delete 方式可以給予極短時間的保險性處理延遲 me->delete_temp("special_attacks"); } tmps[2] 就是「攻擊玩家的人」,tmps[0]是反擊敘述, tmps[1] 是傷害值,me = 玩家自己,所以變成.. 玩家->shut2(敘述,傷害,命中,"dam",攻擊玩家的人); 然後 shut2 是這樣寫的.. varargs int shut2(string msg,int damage,int chance,string kind,object tar) { USER_D-> shut2(me, msg, damage, chance, kind, tar); } user_d 裡頭則是這樣寫的.. varargs int shut2(object me,string msg,int damage,int chance, string kind,object tar) { if(!tar) if(! tar=me->query_current_attacker()) return 1; "/adm/daemons/shut2_d"->shut_tar(me,tar,msg,damage,chance,kind); return 1; } 如果攻擊對象不存在、且也找不到攻擊自己的其它攻擊對象, 就不做 shut2。 shut_tar 的順序則是 (玩家, 攻擊玩家的怪物, ...) 嘛,這裡我可以加一個判斷,怪物自己殺死自己時是這樣 shut_tar(怪物,怪物) 正常則是這樣 shut_tar(玩家,怪物) 而因為只有玩家可以用 shut2,所以這樣判斷就好 if(userp(me)) // 只有玩家反擊怪物才會呼叫 "/adm/daemons/shut2_d"->shut_tar(me,tar,msg,damage,chance,kind); 該設定已實裝,可以再觀察看看。若是再不行,我就一一修 改會出現這類問題的怪物的 die 函數。 Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 223.142.187.191