diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index 7c10130..a00b0e7 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -508,16 +508,7 @@ void Obstacle::OnBulletHit(Bullet* bullet) } } if (IsDead(bullet->room)) { - if (meta->i->damage_dia() > 0.01f && - meta->i->damage() > 0.01f) { - Explosion explosion; - explosion.IndifferenceAttack( - bullet->room, - GetPos(), - meta->i->damage_dia(), - meta->i->damage(), - meta->i->explosion_effect()); - } + ProcDieExplosion(bullet->room); bullet->sender.Get()->DropItems(this); } BroadcastFullState(bullet->room); @@ -558,16 +549,7 @@ void Obstacle::OnExplosionHit(Explosion* e) Die(e->GetRoom()); } if (IsDead(e->GetRoom())) { - if (meta->i->damage_dia() > 0.01f && - meta->i->damage() > 0.01f) { - Explosion explosion; - explosion.IndifferenceAttack( - e->GetRoom(), - GetPos(), - meta->i->damage_dia(), - meta->i->damage(), - meta->i->explosion_effect()); - } + ProcDieExplosion(e->GetRoom()); if (meta->i->drop() != 0) { e->GetRoom()->ScatterDrop(GetPos(), meta->i->drop()); } @@ -882,10 +864,10 @@ bool Obstacle::ProcSpecEvent(Creature* c, ColliderComponent* collider) { if (c->team_id != GetTeamId(c->room)) { AddObstacleBuff(c); + Die(c->room); #if 0 Explosion(); #endif - Die(c->room); BroadcastFullState(c->room); return true; } @@ -898,3 +880,16 @@ bool Obstacle::ProcSpecEvent(Creature* c, ColliderComponent* collider) } return false; } + +void Obstacle::ProcDieExplosion(Room* room) +{ + if (meta->i->damage_dia() > 0.01f) { + Explosion explosion; + explosion.IndifferenceAttack( + room, + GetPos(), + meta->i->damage_dia(), + meta->i->damage(), + meta->i->explosion_effect()); + } +} diff --git a/server/gameserver/obstacle.h b/server/gameserver/obstacle.h index b6086a1..7fae494 100644 --- a/server/gameserver/obstacle.h +++ b/server/gameserver/obstacle.h @@ -82,6 +82,7 @@ protected: void ClearObstacleBuff(Creature* c); bool IsHalfWallCollider(); bool ProcSpecEvent(Creature* c, ColliderComponent* collider); + void ProcDieExplosion(Room* room); protected: CircleCollider* self_collider_ = nullptr; diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index 74453bd..bc2c129 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -160,15 +160,7 @@ void RoomObstacle::UpdateTimerFunc() } } Die(room); - { - Explosion explosion; - explosion.IndifferenceAttack( - room, - GetPos(), - meta->i->damage_dia(), - meta->i->damage(), - meta->i->explosion_effect()); - } + ProcDieExplosion(room); BroadcastFullState(room); if (room->xtimer.GetRunningTimer()) { room->xtimer.DeleteTimer(room->xtimer.GetRunningTimer()); @@ -182,8 +174,7 @@ void RoomObstacle::UpdateTimerFunc() void RoomObstacle::SpecExplosion() { ++explosion_times_; - if (meta->i->damage_dia() > 0.01f && - meta->i->damage() > 0.01f) { + if (meta->i->damage_dia() > 0.01f) { if (!grid_list_) { grid_list_ = new std::set(); room->grid_service->GetAllCellsByXy(room, GetPos().x, GetPos().y, *grid_list_);