[技能] 雷電結界

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間16年前 (2010/04/10 09:36), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/3 (看更多)
雷電結界一般可以寫在 fight_d.c, 玩家 A 被怪物 B 攻擊時,呼叫主體是怪物 B,判斷到玩家 A 有雷電結 界時製造反射攻擊。 這造成怪物自己打自己的情況。 Q:如何讓怪物攻擊玩家時,玩家自己觸發雷電結界攻   擊怪物? 傳統的做法是寫在 heart_beat 裡頭,但是它有缺點。 新的做法是比方怪物攻擊該玩家的參數串為 STR,當判 斷到玩家有雷電結界、且有作用成功時.. special_attack=ppl->query_temp("special_attack"); special_attack+=({STR}); ppl->set_temp("special_attack",special_attack); 但是它也有缺點,因為它必須做讀取→累加→再設入的 動作,最理想的情況就是只需要一行就解決。 > call me;set_temp;"abc";({"1"}) 玩家(laechan /std/user)-> set_temp( "abc", ({ "1" }) ) > call me;add_temp;"abc";({"2"}) 玩家(laechan /std/user)-> add_temp( "abc", ({ "2" }) ) > call me;query_temp;"abc" 玩家(laechan /std/user)-> query_temp( "abc" ) = ({ "1", "2" }) 所以目前最佳的做法是把二維陣列變成一維,然後在迴圈 時.. 原先: j=sizeof(special_attack); foreach(sa in special_attack) 改成: j=sizeof(special_attack); for(i=0;i<j;i=i+k) k 即參數串的數量,比方四個為一個參數串,那 k=4。 改這個要關站半小時左右,連同上面的一些修改,有空我會先 公告再關站。相關檔案要備份... /std/user.c /adm/daemons/fight_d.c grep -n special_attack /adm/daemons/*.c, /d/技能相關, ... 另外,目前也要評估這個東西要不要給 mob,我是覺得給 mob 應該也不錯。 Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 119.15.246.228

04/10 10:44, , 1F
哈哈! 這樣就不用自己寫反彈了..laugh
04/10 10:44, 1F
文章代碼(AID): #1BlzO3bJ (mud_sanc)
討論串 (同標題文章)
文章代碼(AID): #1BlzO3bJ (mud_sanc)