Skip to content

Commit b4df76c

Browse files
authored
Merge pull request #469 from GeneralsOnlineDevelopmentTeam/seer/bugfix/player-template-null-checks
bugfix(player): Add null checks for player template access
2 parents 56c8dc4 + d7ad06b commit b4df76c

6 files changed

Lines changed: 12 additions & 6 deletions

File tree

Generals/Code/GameEngine/Source/Common/RTS/Player.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1767,7 +1767,8 @@ void Player::transferAssetsFromThat(Player *that)
17671767
std::list<Object *> objsToTransfer;
17681768

17691769
// let's not transfer beacons
1770-
const ThingTemplate *beaconTemplate = TheThingFactory->findTemplate( that->getPlayerTemplate()->getBeaconTemplate() );
1770+
const PlayerTemplate *thatPlayerTemplate = that->getPlayerTemplate();
1771+
const ThingTemplate *beaconTemplate = thatPlayerTemplate ? TheThingFactory->findTemplate( thatPlayerTemplate->getBeaconTemplate() ) : nullptr;
17711772

17721773
// transfer all his units.
17731774
for (PlayerTeamList::iterator it = that->m_playerTeamPrototypes.begin();

Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1883,7 +1883,8 @@ void ControlBar::evaluateContextUI()
18831883
switchToContext( CB_CONTEXT_COMMAND, drawToEvaluateFor );
18841884

18851885
}
1886-
else if (obj->getControllingPlayer()->getPlayerTemplate()->getBeaconTemplate().compare(obj->getTemplate()->getName()) == 0)
1886+
else if (obj->getControllingPlayer()->getPlayerTemplate()
1887+
&& obj->getControllingPlayer()->getPlayerTemplate()->getBeaconTemplate().compare(obj->getTemplate()->getName()) == 0)
18871888
{
18881889
switchToContext( CB_CONTEXT_BEACON, drawToEvaluateFor );
18891890
}

Generals/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3084,7 +3084,8 @@ GameMessageDisposition CommandTranslator::translateGameMessage(const GameMessage
30843084
(TheGlobalData->m_netMinPlayers==0 || TheGameInfo->isMultiPlayer()))
30853085
{
30863086
Int count;
3087-
const ThingTemplate *thing = TheThingFactory->findTemplate( ThePlayerList->getLocalPlayer()->getPlayerTemplate()->getBeaconTemplate() );
3087+
const PlayerTemplate *localPlayerTemplate = ThePlayerList->getLocalPlayer()->getPlayerTemplate();
3088+
const ThingTemplate *thing = localPlayerTemplate ? TheThingFactory->findTemplate( localPlayerTemplate->getBeaconTemplate() ) : nullptr;
30883089
ThePlayerList->getLocalPlayer()->countObjectsByThingTemplate( 1, &thing, false, &count );
30893090
DEBUG_LOG(("MSG_META_PLACE_BEACON - Player already has %d beacons active", count));
30903091
if (count < TheMultiplayerSettings->getMaxBeaconsPerPlayer())

GeneralsMD/Code/GameEngine/Source/Common/RTS/Player.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2136,7 +2136,8 @@ void Player::transferAssetsFromThat(Player *that)
21362136
std::list<Object *> objsToTransfer;
21372137

21382138
// let's not transfer beacons
2139-
const ThingTemplate *beaconTemplate = TheThingFactory->findTemplate( that->getPlayerTemplate()->getBeaconTemplate() );
2139+
const PlayerTemplate *thatPlayerTemplate = that->getPlayerTemplate();
2140+
const ThingTemplate *beaconTemplate = thatPlayerTemplate ? TheThingFactory->findTemplate( thatPlayerTemplate->getBeaconTemplate() ) : nullptr;
21402141

21412142
// transfer all his units.
21422143
for (PlayerTeamList::iterator it = that->m_playerTeamPrototypes.begin();

GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1908,7 +1908,8 @@ void ControlBar::evaluateContextUI()
19081908
switchToContext( CB_CONTEXT_COMMAND, drawToEvaluateFor );
19091909

19101910
}
1911-
else if (obj->getControllingPlayer()->getPlayerTemplate()->getBeaconTemplate().compare(obj->getTemplate()->getName()) == 0)
1911+
else if (obj->getControllingPlayer()->getPlayerTemplate()
1912+
&& obj->getControllingPlayer()->getPlayerTemplate()->getBeaconTemplate().compare(obj->getTemplate()->getName()) == 0)
19121913
{
19131914
switchToContext( CB_CONTEXT_BEACON, drawToEvaluateFor );
19141915
}

GeneralsMD/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3298,7 +3298,8 @@ GameMessageDisposition CommandTranslator::translateGameMessage(const GameMessage
32983298
(TheGlobalData->m_netMinPlayers == 0 || TheGameInfo->isMultiPlayer()))
32993299
{
33003300
Int count;
3301-
const ThingTemplate* thing = TheThingFactory->findTemplate(ThePlayerList->getLocalPlayer()->getPlayerTemplate()->getBeaconTemplate());
3301+
const PlayerTemplate* localPlayerTemplate = ThePlayerList->getLocalPlayer()->getPlayerTemplate();
3302+
const ThingTemplate* thing = localPlayerTemplate ? TheThingFactory->findTemplate(localPlayerTemplate->getBeaconTemplate()) : nullptr;
33023303
ThePlayerList->getLocalPlayer()->countObjectsByThingTemplate(1, &thing, false, &count);
33033304
DEBUG_LOG(("MSG_META_PLACE_BEACON - Player already has %d beacons active", count));
33043305
if (count < TheMultiplayerSettings->getMaxBeaconsPerPlayer())

0 commit comments

Comments
 (0)