Re: [問題] 聖光盾沒破 卻被打到

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間9年前 (2016/02/20 14:33), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《xbowcat (Cat)》之銘言: : 以下為戰鬥內容,場地於大空地內部 : 妳緩緩唸道: 神聖的光芒啊...在邪惡之力前化為不壞之盾吧! : 你開始唸起古老的咒文: ~ 8 ~ ~ ~ 聖光盾 ~ : 在妳的前面形成了一道聖光盾保護著妳! : > 妳 -> 冥府鬼卒,.(795) : 「冥府鬼卒受了點傷,但沒大礙。」 : 妳 -> 冥府鬼卒, (287979) : 「冥府鬼卒正緩緩的流出鮮血。」 : 妳 -> 冥府鬼卒, (296779) : 「冥府鬼卒正緩緩的流出鮮血。」 : 妳 -> 冥府鬼卒, (294960) : 「冥府鬼卒正緩緩的流出鮮血。」 : 妳 -> 冥府鬼卒, (293970) : 「冥府鬼卒正緩緩的流出鮮血。」 : 在你的靈力驅動之下,大地產生了規率性的晃動...... : 你開始唸起古老的咒文: ~ 63 ~ ~ ~ 飛砂走石 ~ : 冥府鬼卒拿出長戟丟向妳, 但是被牧師貓身上的1枚聖光盾彈開了!! : 鬼卒放開了雙手,做好了施放法術的準備 : 吼~~~~~~~~ : 冥府鬼卒 -> 妳,但是被妳閃開了! : 冥府鬼卒 -> 妳,但是被妳閃開了! : 鬼卒放開了雙手,做好了施放法術的準備 : 吼~~~~~~~~ : 冥府鬼卒 -> 妳,但是被妳閃開了! : 冥府鬼卒 -> 妳,但是被妳閃開了! : 冥府鬼卒拿出長戟丟向妳(30988) : 「妳傷口鮮血滿身是。護甲防禦力剩餘100%.」 : 妳 -> 冥府鬼卒, (293747) : 「冥府鬼卒正緩緩的流出鮮血。」 : 妳 -> 冥府鬼卒, (288817) : 「冥府鬼卒正緩緩的流出鮮血。」 : 妳 -> 冥府鬼卒, (291974) : 「冥府鬼卒正緩緩的流出鮮血。」 : 妳 -> 冥府鬼卒, (293931) : 「冥府鬼卒正緩緩的流出鮮血。」 : 在你的靈力驅動之下,大地產生了規率性的晃動...... : 你開始唸起古老的咒文: ~ 63 ~ ~ ~ 飛砂走石 ~ : 妳以一招 0 攻向冥府鬼卒, ,但是被冥府鬼卒閃開了! : 妳以一招 0 攻向冥府鬼卒, ,但是被冥府鬼卒閃開了!(4018) : 「冥府鬼卒正緩緩的流出鮮血。」 : 冥府鬼卒拿出長戟丟向妳, 但是被牧師貓身上的1枚聖光盾彈開了!! : 由以上敘述可以看出 盾沒破 但是被穿盾了....包含護甲術, : 此部分想請問是否為bug導致? 目前盾擋的判斷移動到最後,「理論上」,在執行盾擋判斷前 只要是留有傷害的部份都不能使用 return,除非是 return 0 ,我剛檢查了一下: else if(mod=tar->query_temp("shield2")) { if(!mod[2] || (mod[0] && mod[0]<1)) { tar->delete_temp("shield2"); // 不存在時自動移除 tar->delete_temp("attack"); //增加結界的攻擊移除 return ({damage,msg2+""}); } else if(userp(tar)) { t=time(); if(tar->query_temp("holybell_times")>t && tar->query_temp("holybell_check")>0) { damage=damage*(100-(int)tar->query_temp("holybell_check")/100)/100; tell_object(tar,"(holybell)攻擊你的傷害在撞上護盾前先被削減了!\n"); } return (mixed)mod[2]->shield(me,tar,damage,type); } } mod[2]=聖光盾 /d/spell/holy_shield.c me=冥府鬼卒, tar=你, damage=傷害值, type=傷害型態 mixed shield(object me,object tar,int dam,string type) { int sl,cost,max,bs=0,n,ethic; mixed mod; object caster,env1,env2; mod=tar->query_temp("shield2"); if(!me) return ({dam,"ERROR"}); // 防止bug , by Norr in 2011/08/23 if(sizeof(mod)<4) return ({dam,"ERROR"}); 以上兩種情況,會造成 護盾沒有被移除的情況下 你會被打到。 > call me;query_temp;"shield2" 玩家(laechan /std/user)-> query_temp( "shield2" ) = ({ 768180, 0, 房間(/d/spell/holy_shield), 玩家(laechan /std/user) }) 1 2 3 4 所以第二種情況幾乎不可能。 那麼理論上,me 做為攻擊者,當出現 if(!me) 的情況時,應判 斷為攻擊者已消失,這時應 return 回去的值就是 0 而非 dam 也就是說該 bug 發生於「冥府鬼卒在攻擊你的那一瞬間已經被 你消滅」,而照正常的判斷它的攻擊應該要失效。 以上已修正,順便也檢查了 powershield,並以 shutdown 更新。 Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.106.224 ※ 文章網址: https://www.ptt.cc/bbs/mud_sanc/M.1455950037.A.FD4.html
文章代碼(AID): #1Mo0ZL_K (mud_sanc)
討論串 (同標題文章)
文章代碼(AID): #1Mo0ZL_K (mud_sanc)