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

作者: laechan (揮淚斬馬雲)   2016-02-20 14:33:54
※ 引述《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

Links booklink

Contact Us: admin [ a t ] ucptt.com