Skip to content

Commit 5692462

Browse files
authored
bugfix(energy): Don't apply power production bonus for disabled power plants on save game load (#2509)
1 parent a92886b commit 5692462

6 files changed

Lines changed: 38 additions & 14 deletions

File tree

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ void Energy::addPowerBonus( Object *obj )
169169
if( obj == nullptr )
170170
return;
171171

172+
DEBUG_ASSERTCRASH(!obj->isDisabled(), ("power bonus should not be added to disabled power plant"));
173+
172174
addProduction(obj->getTemplate()->getEnergyBonus());
173175

174176
// sanity

Generals/Code/GameEngine/Source/GameLogic/Object/Behavior/OverchargeBehavior.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,15 @@ void OverchargeBehavior::loadPostProcess()
317317
UpdateModule::loadPostProcess();
318318

319319
// Our effect is a fire and forget effect, not an upgrade state that is itself saved, so need to re-fire.
320-
if( m_overchargeActive && getObject()->getControllingPlayer() )
321-
getObject()->getControllingPlayer()->addPowerBonus( getObject() );
320+
if (m_overchargeActive)
321+
{
322+
Object* obj = getObject();
323+
Player* player = obj->getControllingPlayer();
324+
325+
if (player && !obj->isDisabled())
326+
{
327+
player->addPowerBonus(obj);
328+
}
329+
}
322330

323331
}

Generals/Code/GameEngine/Source/GameLogic/Object/Upgrade/PowerPlantUpgrade.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,13 +167,15 @@ void PowerPlantUpgrade::loadPostProcess()
167167

168168
// Most upgrade modules have state change effects that are themselves saved. This one is a fire and forget.
169169
// So we need to re-fire on load if we are turned on.
170-
if( isAlreadyUpgraded() )
170+
if (isAlreadyUpgraded())
171171
{
172-
Player *player = getObject()->getControllingPlayer();
172+
Object* obj = getObject();
173+
Player* player = obj->getControllingPlayer();
173174

174-
// add the new power production to the object
175-
if( player )
176-
player->addPowerBonus(getObject());
175+
if (player && !obj->isDisabled())
176+
{
177+
player->addPowerBonus(obj);
178+
}
177179
}
178180

179181
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,8 @@ void Energy::addPowerBonus( Object *obj )
188188
if( obj == nullptr )
189189
return;
190190

191+
DEBUG_ASSERTCRASH(!obj->isDisabled(), ("power bonus should not be added to disabled power plant"));
192+
191193
addProduction(obj->getTemplate()->getEnergyBonus());
192194

193195
// sanity

GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Behavior/OverchargeBehavior.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,15 @@ void OverchargeBehavior::loadPostProcess()
317317
UpdateModule::loadPostProcess();
318318

319319
// Our effect is a fire and forget effect, not an upgrade state that is itself saved, so need to re-fire.
320-
if( m_overchargeActive && getObject()->getControllingPlayer() )
321-
getObject()->getControllingPlayer()->addPowerBonus( getObject() );
320+
if (m_overchargeActive)
321+
{
322+
Object* obj = getObject();
323+
Player* player = obj->getControllingPlayer();
324+
325+
if (player && !obj->isDisabled())
326+
{
327+
player->addPowerBonus(obj);
328+
}
329+
}
322330

323331
}

GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Upgrade/PowerPlantUpgrade.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,13 +167,15 @@ void PowerPlantUpgrade::loadPostProcess()
167167

168168
// Most upgrade modules have state change effects that are themselves saved. This one is a fire and forget.
169169
// So we need to re-fire on load if we are turned on.
170-
if( isAlreadyUpgraded() )
170+
if (isAlreadyUpgraded())
171171
{
172-
Player *player = getObject()->getControllingPlayer();
172+
Object* obj = getObject();
173+
Player* player = obj->getControllingPlayer();
173174

174-
// add the new power production to the object
175-
if( player )
176-
player->addPowerBonus(getObject());
175+
if (player && !obj->isDisabled())
176+
{
177+
player->addPowerBonus(obj);
178+
}
177179
}
178180

179181
}

0 commit comments

Comments
 (0)