diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index c106efaa..f27a9441 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -470,22 +470,29 @@ void Bullet::Check(float distance) } { Buff* hold_shield_buff = c->GetBuffByEffectId(kBET_HoldShield); - if (hold_shield_buff && !IsBomb()) { + if (hold_shield_buff && !IsBomb() && !c->dead && c != sender.Get()) { float shot_angle = 0.0f; if (c->GetMoveDir().IsZero()) { shot_angle = dir.CalcAngleEx(a8::Vec2::UP); } else { shot_angle = dir.CalcAngleEx(c->GetMoveDir()); } + CircleCollider collider; + collider.owner = c; + collider.rad = hold_shield_buff->meta->param1; if (shot_angle < A8_PI / 4) { - eat = true; - stop = true; - return; + if (TestCollision(room, &collider)) { + eat = true; + stop = true; + return; + } } else if (fabs(shot_angle) < 0.000001f && shot_angle + A8_PI < A8_PI / 4){ - eat = true; - stop = true; - return; + if (TestCollision(room, &collider)) { + eat = true; + stop = true; + return; + } } } }