diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index 72f00121..4da7ef9c 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -215,7 +215,7 @@ void RoomObstacle::UpdateTimerFunc() } } -void RoomObstacle::SpecExplosion() +void RoomObstacle::SpecExplosion(int delay_time) { ++explosion_times_; if (meta->i->damage_dia() > 0.01f) { @@ -234,6 +234,9 @@ void RoomObstacle::SpecExplosion() if (room->grid_service->CanAdd(bomb_pos.x, bomb_pos.y)) { std::shared_ptr explosion = EntityFactory::Instance()->MakeExplosion(); explosion->exclude_uniid = GetUniId(); + if (delay_time > 0) { + explosion->SetDamageDelay(delay_time); + } explosion->IndifferenceAttack( room, bomb_pos, @@ -398,7 +401,7 @@ void RoomObstacle::ActiveSelfExplosion() [] (const a8::XParams& param) { RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData(); - obstacle->SpecExplosion(); + obstacle->SpecExplosion(obstacle->meta->i->explosion_dmg_delay()); }, &obstacle->xtimer_attacher.timer_list_ ); diff --git a/server/gameserver/roomobstacle.h b/server/gameserver/roomobstacle.h index 0b340a8d..9078a1f2 100644 --- a/server/gameserver/roomobstacle.h +++ b/server/gameserver/roomobstacle.h @@ -43,7 +43,7 @@ class RoomObstacle : public Obstacle void DestoryAt(int time); private: - void SpecExplosion(); + void SpecExplosion(int delay_time = 0); void ActiveSelfExplosion(); void ActiveMine(); void ActiveTrap();