remove player from team when leaving

This commit is contained in:
2023-08-15 13:01:50 +02:00
parent d1aa5cd8aa
commit 1e3b672897
6 changed files with 44 additions and 19 deletions

View File

@@ -28,7 +28,7 @@
#define KEEP_ALIVE_TIMEOUT 10 * 1000 // 10s
#define SAFE_CHECK(expr) if(expr) return
#define SAFE_CHECK(expr) if(!(expr)) return
namespace td {
namespace server {
@@ -116,12 +116,20 @@ void ServerConnexion::HandlePacket(const protocol::PlayerLoginPacket* packet) {
protocol::PlayerListPacket listPacket(playerNames);
SendPacket(&listPacket);
protocol::UpdateGameStatePacket statePacket(m_Server->GetGame().GetGameState());
SendPacket(&statePacket);
protocol::WorldBeginDataPacket headerDataPacket(m_Server->GetGame().GetWorld());
protocol::WorldBeginDataPacket dataPacket(m_Server->GetGame().GetWorld());
SendPacket(&headerDataPacket);
SendPacket(&dataPacket);
m_Server->GetGame().NotifyListeners(&game::GameListener::OnPlayerJoin, m_ID);
}
}
void ServerConnexion::HandlePacket(const protocol::SelectTeamPacket* packet) {
SAFE_CHECK(m_Server->GetGame().GetGameState() != game::GameState::Lobby);
SAFE_CHECK(m_Server->GetGame().GetGameState() == game::GameState::Lobby);
if (static_cast<std::int8_t>(packet->GetSelectedTeam()) >= -1 || static_cast<std::int8_t>(packet->GetSelectedTeam()) <= 1) {
if (m_Player->GetTeamColor() == game::TeamColor::None) { // join a team
@@ -156,18 +164,8 @@ void ServerConnexion::SetServer(Server* server) {
}
void ServerConnexion::InitConnection() {
protocol::UpdateGameStatePacket statePacket(m_Server->GetGame().GetGameState());
SendPacket(&statePacket);
protocol::ConnexionInfoPacket conPacket(m_ID);
SendPacket(&conPacket);
SAFE_CHECK(m_Server->GetGame().GetGameState() != game::GameState::Game);
protocol::WorldBeginDataPacket headerDataPacket(m_Server->GetGame().GetWorld());
protocol::WorldBeginDataPacket dataPacket(m_Server->GetGame().GetWorld());
SendPacket(&headerDataPacket);
SendPacket(&dataPacket);
}
void ServerConnexion::HandlePacket(const protocol::PlaceTowerPacket* packet) {
@@ -177,10 +175,10 @@ void ServerConnexion::HandlePacket(const protocol::PlaceTowerPacket* packet) {
Vec2f towerPos = { static_cast<float>(packet->GetTowerX()), static_cast<float>(packet->GetTowerY()) };
SAFE_CHECK(!world->CanPlaceLittleTower(towerPos, m_ID));
SAFE_CHECK(world->CanPlaceLittleTower(towerPos, m_ID));
if (towerInfo.IsBigTower())
SAFE_CHECK(!world->CanPlaceBigTower(towerPos, m_ID));
SAFE_CHECK(world->CanPlaceBigTower(towerPos, m_ID));
game::TowerPtr tower = world->PlaceTowerAt(towerType, packet->GetTowerX(), packet->GetTowerY(), m_ID);