diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index 0feeb255..d7d49b4e 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -298,6 +298,24 @@ bool Obstacle::DoInteraction(Human* sender) Die(sender->room); sender->DropItems(this); BroadcastFullState(sender->room); + if (meta->delay_destroy() > 0) { + sender->room->xtimer.SetTimeoutEx + (meta->delay_destroy() / FRAME_RATE_MS, + [sender, obj_uniid = GetUniId()] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + Entity* entity = sender->room->GetEntityByUniId(obj_uniid); + if (entity && entity->IsEntityType(ET_Obstacle)) { + Obstacle* ob = (Obstacle*)entity; + if (ob->IsRoomObstacle()) { + sender->room->RemoveObjectLater((RoomObstacle*)entity); + } + } + return; + } + }, + &sender->xtimer_attacher); + } } } break;