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