From 0806db7175837267c8e5d1f6b8bba51fa7e4c652 Mon Sep 17 00:00:00 2001 From: Jacob Ledbetter Date: Wed, 29 Jul 2026 09:46:16 -0600 Subject: [PATCH] refactor(player): Add slot-to-player lookup (#2897) --- .../GUI/ControlBar/ControlBarObserver.cpp | 4 +--- .../Source/GameNetwork/ConnectionManager.cpp | 4 +--- .../GameNetwork/GameSpy/StagingRoomGameInfo.cpp | 14 +++----------- .../Source/GameNetwork/NetCommandMsg.cpp | 4 +--- Core/GameEngine/Source/GameNetwork/Network.cpp | 10 ++++------ .../Code/GameEngine/Include/Common/PlayerList.h | 1 + .../GameEngine/Source/Common/RTS/PlayerList.cpp | 15 +++++++++++++++ .../GameClient/GUI/GUICallbacks/Diplomacy.cpp | 4 +--- .../GameClient/GUI/GUICallbacks/InGameChat.cpp | 4 +--- .../GUI/GUICallbacks/Menus/ScoreScreen.cpp | 9 +++------ .../GameEngine/Source/GameClient/InGameUI.cpp | 5 +---- .../Source/GameLogic/System/GameLogic.cpp | 10 +++------- .../Source/GameNetwork/GameSpyGameInfo.cpp | 8 ++------ .../Code/GameEngine/Include/Common/PlayerList.h | 1 + .../GameEngine/Source/Common/RTS/PlayerList.cpp | 15 +++++++++++++++ .../GameClient/GUI/GUICallbacks/Diplomacy.cpp | 4 +--- .../GameClient/GUI/GUICallbacks/InGameChat.cpp | 4 +--- .../GUI/GUICallbacks/Menus/ScoreScreen.cpp | 9 +++------ .../GameEngine/Source/GameClient/InGameUI.cpp | 5 +---- .../Source/GameLogic/System/GameLogic.cpp | 10 +++------- .../Source/GameNetwork/GameSpyGameInfo.cpp | 8 ++------ 21 files changed, 64 insertions(+), 84 deletions(-) diff --git a/Core/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarObserver.cpp b/Core/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarObserver.cpp index ebf4c18d58c..d19441f3c73 100644 --- a/Core/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarObserver.cpp +++ b/Core/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarObserver.cpp @@ -255,9 +255,7 @@ void ControlBar::populateObserverList() for (i = 0; i < MAX_SLOTS; ++i) { - AsciiString name; - name.format("player%d", i); - Player *p = ThePlayerList->findPlayerWithNameKey(TheNameKeyGenerator->nameToKey(name)); + Player *p = ThePlayerList->getPlayerFromSlotIndex(i); if(p) { if(p->isPlayerObserver()) diff --git a/Core/GameEngine/Source/GameNetwork/ConnectionManager.cpp b/Core/GameEngine/Source/GameNetwork/ConnectionManager.cpp index 932bcc669fb..9b2cffbbc04 100644 --- a/Core/GameEngine/Source/GameNetwork/ConnectionManager.cpp +++ b/Core/GameEngine/Source/GameNetwork/ConnectionManager.cpp @@ -764,9 +764,7 @@ void ConnectionManager::processChat(NetChatCommandMsg *msg) unitext.format(L"[%ls] %ls", name.str(), msg->getText().str()); // DEBUG_LOG(("ConnectionManager::processChat - got message from player %d (mask %8.8X), message is %ls", playerID, msg->getPlayerMask(), unitext.str())); - AsciiString playerName; - playerName.format("player%d", msg->getPlayerID()); - const Player *player = ThePlayerList->findPlayerWithNameKey( TheNameKeyGenerator->nameToKey( playerName ) ); + const Player *player = ThePlayerList->getPlayerFromSlotIndex(playerID); if (!player) { TheInGameUI->message(L"%ls", unitext.str()); diff --git a/Core/GameEngine/Source/GameNetwork/GameSpy/StagingRoomGameInfo.cpp b/Core/GameEngine/Source/GameNetwork/GameSpy/StagingRoomGameInfo.cpp index 04714a4de4b..cfc19976a70 100644 --- a/Core/GameEngine/Source/GameNetwork/GameSpy/StagingRoomGameInfo.cpp +++ b/Core/GameEngine/Source/GameNetwork/GameSpy/StagingRoomGameInfo.cpp @@ -600,9 +600,7 @@ AsciiString GameSpyStagingRoom::generateGameSpyGameResultsPacket() Int lastTeamAtGameEnd = -1; for (i=0; ifindPlayerWithNameKey(NAMEKEY(playerName)); + Player *p = ThePlayerList->getPlayerFromSlotIndex(i); if (p) { ++numHumans; @@ -646,9 +644,7 @@ AsciiString GameSpyStagingRoom::generateGameSpyGameResultsPacket() Int playerID = 0; for (i=0; ifindPlayerWithNameKey(NAMEKEY(playerName)); + Player *p = ThePlayerList->getPlayerFromSlotIndex(i); if (p) { GameSpyGameSlot *slot = &(m_GameSpySlot[i]); @@ -694,9 +690,7 @@ AsciiString GameSpyStagingRoom::generateLadderGameResultsPacket() Player* p[MAX_SLOTS]; for (i=0; ifindPlayerWithNameKey(NAMEKEY(playerName)); + p[i] = ThePlayerList->getPlayerFromSlotIndex(i); if (p[i]) { ++numPlayers; @@ -730,8 +724,6 @@ AsciiString GameSpyStagingRoom::generateLadderGameResultsPacket() Int playerID = 0; for (i=0; ifriend_setPlayerIndex( ThePlayerList->findPlayerWithNameKey(TheNameKeyGenerator->nameToKey(name))->getPlayerIndex()); + retval->friend_setPlayerIndex(ThePlayerList->getPlayerFromSlotIndex(getPlayerID())->getPlayerIndex()); for (size_t i = 0; i < m_argList.size(); ++i) { const GameMessageArgument* arg = m_argList[i]; diff --git a/Core/GameEngine/Source/GameNetwork/Network.cpp b/Core/GameEngine/Source/GameNetwork/Network.cpp index 7f9712381a9..0a63bc02557 100644 --- a/Core/GameEngine/Source/GameNetwork/Network.cpp +++ b/Core/GameEngine/Source/GameNetwork/Network.cpp @@ -657,14 +657,12 @@ void Network::processRunAheadCommand(NetRunAheadCommandMsg *msg) { void Network::processDestroyPlayerCommand(NetDestroyPlayerCommandMsg *msg) { - UnsignedInt playerIndex = msg->getPlayerIndex(); - DEBUG_ASSERTCRASH(playerIndex < MAX_SLOTS, ("Bad player index")); - if (playerIndex >= MAX_SLOTS) + UnsignedInt slotIndex = msg->getPlayerIndex(); + DEBUG_ASSERTCRASH(slotIndex < MAX_SLOTS, ("Bad slot index")); + if (slotIndex >= MAX_SLOTS) return; - AsciiString playerName; - playerName.format("player%d", playerIndex); - Player *pPlayer = ThePlayerList->findPlayerWithNameKey(NAMEKEY(playerName)); + Player *pPlayer = ThePlayerList->getPlayerFromSlotIndex(slotIndex); if (pPlayer) { GameMessage *msg = newInstance(GameMessage)(GameMessage::MSG_SELF_DESTRUCT); diff --git a/Generals/Code/GameEngine/Include/Common/PlayerList.h b/Generals/Code/GameEngine/Include/Common/PlayerList.h index 0aed0b24f2b..33c6f2f9118 100644 --- a/Generals/Code/GameEngine/Include/Common/PlayerList.h +++ b/Generals/Code/GameEngine/Include/Common/PlayerList.h @@ -152,6 +152,7 @@ class PlayerList : public SubsystemInterface, PlayerMaskType getPlayersWithRelationship( Int srcPlayerIndex, UnsignedInt allowedRelationships ); Int getSlotIndex(Int playerIndex) const; + Player *getPlayerFromSlotIndex(Int slotIndex) const; protected: diff --git a/Generals/Code/GameEngine/Source/Common/RTS/PlayerList.cpp b/Generals/Code/GameEngine/Source/Common/RTS/PlayerList.cpp index 17dc7187f67..2cf16c1e2e9 100644 --- a/Generals/Code/GameEngine/Source/Common/RTS/PlayerList.cpp +++ b/Generals/Code/GameEngine/Source/Common/RTS/PlayerList.cpp @@ -507,6 +507,21 @@ Int PlayerList::getSlotIndex(Int playerIndex) const return -1; } +//----------------------------------------------------------------------------- +Player *PlayerList::getPlayerFromSlotIndex(Int slotIndex) const +{ + if (slotIndex >= 0 && slotIndex < MAX_SLOTS) + { + for (Int playerIndex = 0; playerIndex < m_playerCount; ++playerIndex) + { + if (getSlotIndex(playerIndex) == slotIndex) + return m_players[playerIndex]; + } + } + + return nullptr; +} + //----------------------------------------------------------------------------- void PlayerList::assignSlotIndices(const GameInfo& gameInfo) { diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Diplomacy.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Diplomacy.cpp index 2dbfe6c95ca..6c74f13a21e 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Diplomacy.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Diplomacy.cpp @@ -475,9 +475,7 @@ void PopulateInGameDiplomacyPopup() } if (slot->isAI()) isInGame = true; - AsciiString playerName; - playerName.format("player%d", slotNum); - Player *player = ThePlayerList->findPlayerWithNameKey(NAMEKEY(playerName)); + Player *player = ThePlayerList->getPlayerFromSlotIndex(slotNum); Bool isAlive = !TheVictoryConditions->hasSinglePlayerBeenDefeated(player); Bool isObserver = player->isPlayerObserver(); diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/InGameChat.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/InGameChat.cpp index 0080b64a8dd..a923950ce10 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/InGameChat.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/InGameChat.cpp @@ -217,13 +217,11 @@ void ToggleInGameChat( Bool immediate ) if (!msg.isEmpty() && !handleInGameSlashCommands(msg)) { const Player *localPlayer = ThePlayerList->getLocalPlayer(); - AsciiString playerName; Int playerMask = 0; for (Int i=0; ifindPlayerWithNameKey( TheNameKeyGenerator->nameToKey( playerName ) ); + const Player *player = ThePlayerList->getPlayerFromSlotIndex(i); if (player && localPlayer) { switch (inGameChatType) diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp index a217b8023c5..74372391d3f 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp @@ -1771,15 +1771,13 @@ void grabMultiPlayerInfo() typedef ScoreMap::reverse_iterator RevScoreMapIt; Int playerCount = 0; - AsciiString playerName; - Player *player; ScoreMap scores; ScoreMapIt it; scores.clear(); Int adder = 1; // Varible used to add on an offset to the score to make sure we don't add people to the same map - player = ThePlayerList->getLocalPlayer(); - if (player) + Player *localPlayer = ThePlayerList->getLocalPlayer(); + if (localPlayer) { const Image *image = TheMappedImageCollection->findImageByName("MutiPlayer_ScoreScreen"); if(image) @@ -1792,8 +1790,7 @@ void grabMultiPlayerInfo() // Add each player and score to the map. THis allows us to sort the players based on score. for( Int i = 0; i < MAX_SLOTS; ++i) { - playerName.format("player%d",i); - player = ThePlayerList->findPlayerWithNameKey(TheNameKeyGenerator->nameToKey(playerName)); + Player *player = ThePlayerList->getPlayerFromSlotIndex(i); if(player) { Int score = player->getScoreKeeper()->calculateScore(); diff --git a/Generals/Code/GameEngine/Source/GameClient/InGameUI.cpp b/Generals/Code/GameEngine/Source/GameClient/InGameUI.cpp index c13b9f89b30..8bd9b88ded0 100644 --- a/Generals/Code/GameEngine/Source/GameClient/InGameUI.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/InGameUI.cpp @@ -6165,7 +6165,6 @@ void InGameUI::drawPlayerInfoList() const Int lineH = m_playerInfoList.labels[PlayerInfoList::LabelType_Team]->getFont()->height; const Int columnGap = static_cast(lineH * (6.0f / 12.0f) + 0.5f); - AsciiString name; UnicodeString playerInfoListValue; Int rowCount = 0; Int maxValueWidths[PlayerInfoList::LabelType_Count] = {0}; @@ -6176,9 +6175,7 @@ void InGameUI::drawPlayerInfoList() for (Int slotIndex = 0; slotIndex < MAX_SLOTS && rowCount < MAX_PLAYER_COUNT; ++slotIndex) { - name.format("player%d", slotIndex); - const NameKeyType key = TheNameKeyGenerator->nameToKey(name); - Player *player = ThePlayerList->findPlayerWithNameKey(key); + Player *player = ThePlayerList->getPlayerFromSlotIndex(slotIndex); if (!player || player->isPlayerObserver()) continue; diff --git a/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index 857c63995b4..992557575bc 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -1648,13 +1648,11 @@ void GameLogic::tryStartNewGame( Bool loadingSaveGame ) if (!slot || !slot->isOccupied()) continue; - AsciiString playerName; - playerName.format("player%d", i); - Player *player = ThePlayerList->findPlayerWithNameKey(TheNameKeyGenerator->nameToKey(playerName)); + Player *player = ThePlayerList->getPlayerFromSlotIndex(i); if (slot->getPlayerTemplate() == PLAYERTEMPLATE_OBSERVER) { - DEBUG_LOG(("Clearing shroud for observer %s in playerList slot %d", playerName.str(), player->getPlayerIndex())); + DEBUG_LOG(("Clearing shroud for observer in slot %d with player index %d", i, player->getPlayerIndex())); ThePartitionManager->revealMapForPlayerPermanently( player->getPlayerIndex() ); } else @@ -1785,9 +1783,7 @@ void GameLogic::tryStartNewGame( Bool loadingSaveGame ) if (!slot || !slot->isOccupied()) continue; - AsciiString playerName; - playerName.format("player%d", i); - Player *player = ThePlayerList->findPlayerWithNameKey(TheNameKeyGenerator->nameToKey(playerName)); + Player *player = ThePlayerList->getPlayerFromSlotIndex(i); if (slot->getPlayerTemplate() == PLAYERTEMPLATE_OBSERVER) { diff --git a/Generals/Code/GameEngine/Source/GameNetwork/GameSpyGameInfo.cpp b/Generals/Code/GameEngine/Source/GameNetwork/GameSpyGameInfo.cpp index 708f90ce5cc..2dabf2987f2 100644 --- a/Generals/Code/GameEngine/Source/GameNetwork/GameSpyGameInfo.cpp +++ b/Generals/Code/GameEngine/Source/GameNetwork/GameSpyGameInfo.cpp @@ -669,9 +669,7 @@ AsciiString GameSpyGameInfo::generateGameResultsPacket() Int lastTeamAtGameEnd = -1; for (i=0; ifindPlayerWithNameKey(NAMEKEY(playerName)); + Player *p = ThePlayerList->getPlayerFromSlotIndex(i); if (p) { ++numPlayers; @@ -701,9 +699,7 @@ AsciiString GameSpyGameInfo::generateGameResultsPacket() Int playerID = 0; for (i=0; ifindPlayerWithNameKey(NAMEKEY(playerName)); + Player *p = ThePlayerList->getPlayerFromSlotIndex(i); if (p) { GameSpyGameSlot *slot = &(m_GameSpySlot[i]); diff --git a/GeneralsMD/Code/GameEngine/Include/Common/PlayerList.h b/GeneralsMD/Code/GameEngine/Include/Common/PlayerList.h index 401451ae612..e6abce840ab 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/PlayerList.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/PlayerList.h @@ -152,6 +152,7 @@ class PlayerList : public SubsystemInterface, PlayerMaskType getPlayersWithRelationship( Int srcPlayerIndex, UnsignedInt allowedRelationships ); Int getSlotIndex(Int playerIndex) const; + Player *getPlayerFromSlotIndex(Int slotIndex) const; protected: diff --git a/GeneralsMD/Code/GameEngine/Source/Common/RTS/PlayerList.cpp b/GeneralsMD/Code/GameEngine/Source/Common/RTS/PlayerList.cpp index 1cf9041df97..f99ce6aa43f 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/RTS/PlayerList.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/RTS/PlayerList.cpp @@ -507,6 +507,21 @@ Int PlayerList::getSlotIndex(Int playerIndex) const return -1; } +//----------------------------------------------------------------------------- +Player *PlayerList::getPlayerFromSlotIndex(Int slotIndex) const +{ + if (slotIndex >= 0 && slotIndex < MAX_SLOTS) + { + for (Int playerIndex = 0; playerIndex < m_playerCount; ++playerIndex) + { + if (getSlotIndex(playerIndex) == slotIndex) + return m_players[playerIndex]; + } + } + + return nullptr; +} + //----------------------------------------------------------------------------- void PlayerList::assignSlotIndices(const GameInfo& gameInfo) { diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Diplomacy.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Diplomacy.cpp index 053f0e06faa..a2f0e30f712 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Diplomacy.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Diplomacy.cpp @@ -475,9 +475,7 @@ void PopulateInGameDiplomacyPopup() } if (slot->isAI()) isInGame = true; - AsciiString playerName; - playerName.format("player%d", slotNum); - Player *player = ThePlayerList->findPlayerWithNameKey(NAMEKEY(playerName)); + Player *player = ThePlayerList->getPlayerFromSlotIndex(slotNum); Bool isAlive = !TheVictoryConditions->hasSinglePlayerBeenDefeated(player); Bool isObserver = player->isPlayerObserver(); diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/InGameChat.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/InGameChat.cpp index 534036cbf09..8aa625472ad 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/InGameChat.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/InGameChat.cpp @@ -217,13 +217,11 @@ void ToggleInGameChat( Bool immediate ) if (!msg.isEmpty() && !handleInGameSlashCommands(msg)) { const Player *localPlayer = ThePlayerList->getLocalPlayer(); - AsciiString playerName; Int playerMask = 0; for (Int i=0; ifindPlayerWithNameKey( TheNameKeyGenerator->nameToKey( playerName ) ); + const Player *player = ThePlayerList->getPlayerFromSlotIndex(i); if (player && localPlayer) { switch (inGameChatType) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp index 38c88601e42..9a685713085 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ScoreScreen.cpp @@ -2041,15 +2041,13 @@ void grabMultiPlayerInfo() typedef ScoreMap::reverse_iterator RevScoreMapIt; Int playerCount = 0; - AsciiString playerName; - Player *player; ScoreMap scores; ScoreMapIt it; scores.clear(); Int adder = 1; // Varible used to add on an offset to the score to make sure we don't add people to the same map - player = ThePlayerList->getLocalPlayer(); - if (player) + Player *localPlayer = ThePlayerList->getLocalPlayer(); + if (localPlayer) { const Image *image = TheMappedImageCollection->findImageByName("MutiPlayer_ScoreScreen"); if(image) @@ -2062,8 +2060,7 @@ void grabMultiPlayerInfo() // Add each player and score to the map. THis allows us to sort the players based on score. for( Int i = 0; i < MAX_SLOTS; ++i) { - playerName.format("player%d",i); - player = ThePlayerList->findPlayerWithNameKey(TheNameKeyGenerator->nameToKey(playerName)); + Player *player = ThePlayerList->getPlayerFromSlotIndex(i); if(player) { Int score = player->getScoreKeeper()->calculateScore(); diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/InGameUI.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/InGameUI.cpp index b3927ee92bd..b342e0865b3 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/InGameUI.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/InGameUI.cpp @@ -6298,7 +6298,6 @@ void InGameUI::drawPlayerInfoList() const Int lineH = m_playerInfoList.labels[PlayerInfoList::LabelType_Team]->getFont()->height; const Int columnGap = static_cast(lineH * (6.0f / 12.0f) + 0.5f); - AsciiString name; UnicodeString playerInfoListValue; Int rowCount = 0; Int maxValueWidths[PlayerInfoList::LabelType_Count] = {0}; @@ -6309,9 +6308,7 @@ void InGameUI::drawPlayerInfoList() for (Int slotIndex = 0; slotIndex < MAX_SLOTS && rowCount < MAX_PLAYER_COUNT; ++slotIndex) { - name.format("player%d", slotIndex); - const NameKeyType key = TheNameKeyGenerator->nameToKey(name); - Player *player = ThePlayerList->findPlayerWithNameKey(key); + Player *player = ThePlayerList->getPlayerFromSlotIndex(slotIndex); if (!player || player->isPlayerObserver()) continue; diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index 53d28a95aa0..60bae04f186 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -1809,13 +1809,11 @@ void GameLogic::tryStartNewGame( Bool loadingSaveGame ) if (!slot || !slot->isOccupied()) continue; - AsciiString playerName; - playerName.format("player%d", i); - Player *player = ThePlayerList->findPlayerWithNameKey(TheNameKeyGenerator->nameToKey(playerName)); + Player *player = ThePlayerList->getPlayerFromSlotIndex(i); if (slot->getPlayerTemplate() == PLAYERTEMPLATE_OBSERVER) { - DEBUG_LOG(("Clearing shroud for observer %s in playerList slot %d", playerName.str(), player->getPlayerIndex())); + DEBUG_LOG(("Clearing shroud for observer in slot %d with player index %d", i, player->getPlayerIndex())); ThePartitionManager->revealMapForPlayerPermanently( player->getPlayerIndex() ); } else @@ -1998,9 +1996,7 @@ void GameLogic::tryStartNewGame( Bool loadingSaveGame ) if (!slot || !slot->isOccupied()) continue; - AsciiString playerName; - playerName.format("player%d", i); - Player *player = ThePlayerList->findPlayerWithNameKey(TheNameKeyGenerator->nameToKey(playerName)); + Player *player = ThePlayerList->getPlayerFromSlotIndex(i); if (slot->getPlayerTemplate() == PLAYERTEMPLATE_OBSERVER) { diff --git a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GameSpyGameInfo.cpp b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GameSpyGameInfo.cpp index b8386b756e2..d9d47ecb054 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GameSpyGameInfo.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GameSpyGameInfo.cpp @@ -669,9 +669,7 @@ AsciiString GameSpyGameInfo::generateGameResultsPacket() Int lastTeamAtGameEnd = -1; for (i=0; ifindPlayerWithNameKey(NAMEKEY(playerName)); + Player *p = ThePlayerList->getPlayerFromSlotIndex(i); if (p) { ++numPlayers; @@ -701,9 +699,7 @@ AsciiString GameSpyGameInfo::generateGameResultsPacket() Int playerID = 0; for (i=0; ifindPlayerWithNameKey(NAMEKEY(playerName)); + Player *p = ThePlayerList->getPlayerFromSlotIndex(i); if (p) { GameSpyGameSlot *slot = &(m_GameSpySlot[i]);