作者laechan (小太保)
看板mud_sanc
标题Re: [问题] 圣光盾没破 却被打到
时间Sat Feb 20 14:33:54 2016
※ 引述《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://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1455950037.A.FD4.html