From 51ec035490f732544a03540e79545b99e1850559 Mon Sep 17 00:00:00 2001 From: Simon Pribylski <66266021+Persson-dev@users.noreply.github.com> Date: Sat, 26 Aug 2023 10:25:52 +0200 Subject: [PATCH] remove towers on player leave --- include/server/game/ServerGame.h | 1 + include/td/game/World.h | 2 ++ src/server/game/ServerGame.cpp | 16 ++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/include/server/game/ServerGame.h b/include/server/game/ServerGame.h index 08a5a01..fb38765 100644 --- a/include/server/game/ServerGame.h +++ b/include/server/game/ServerGame.h @@ -35,6 +35,7 @@ public: virtual void OnGameClose() override; virtual void OnPlayerJoin(game::PlayerID id) override; + virtual void OnPlayerLeave(game::PlayerID id) override; private: void BalanceTeams(); void InitPlayerStats(); diff --git a/include/td/game/World.h b/include/td/game/World.h index e4e87e8..0d5988c 100644 --- a/include/td/game/World.h +++ b/include/td/game/World.h @@ -219,7 +219,9 @@ public: const TeamList& GetTeams() const; + TowerList& GetTowers() { return m_Towers; } const TowerList& GetTowers() const { return m_Towers; } + TowerPtr GetTowerById(TowerID tower); const Player* GetPlayerById(PlayerID id) const; diff --git a/src/server/game/ServerGame.cpp b/src/server/game/ServerGame.cpp index a1f74de..48f4ea0 100644 --- a/src/server/game/ServerGame.cpp +++ b/src/server/game/ServerGame.cpp @@ -2,6 +2,7 @@ #include "server/Server.h" #include "td/protocol/packets/DisconnectPacket.h" +#include "td/protocol/packets/RemoveTowerPacket.h" #include "td/protocol/packets/UpdatePlayerTeamPacket.h" #include "td/protocol/packets/UpdateGameStatePacket.h" #include "td/protocol/packets/UpdateMoneyPacket.h" @@ -139,5 +140,20 @@ void ServerGame::OnPlayerJoin(game::PlayerID id){ BalanceTeams(); } +void ServerGame::OnPlayerLeave(game::PlayerID playerId){ + // temporary fix + auto& towerList = GetWorld()->GetTowers(); + for(std::size_t i = 0; i < towerList.size(); i++) { + auto tower = towerList.at(i); + + if(tower->GetBuilder() == playerId) { + protocol::RemoveTowerPacket packet(tower->GetID()); + m_Server->BroadcastPacket(&packet); + + towerList.erase(towerList.begin() + i); + } + } +} + } // namespace game } // namespace td