Core/Spells: Fix infinite loop

Fix an infinite loop caused by a mix of item 25498 and liquid damage

(cherry picked from commit 9b292f4369)
This commit is contained in:
jackpoz
2019-07-28 17:13:48 +02:00
committed by Shauren
parent b4000b3375
commit e6e73b7b13
2 changed files with 8 additions and 2 deletions

View File

@@ -3007,9 +3007,12 @@ void Unit::ProcessTerrainStatusUpdate(ZLiquidStatus status, Optional<LiquidData>
if (_lastLiquid && _lastLiquid->SpellID)
RemoveAurasDueToSpell(_lastLiquid->SpellID);
Player* player = GetCharmerOrOwnerPlayerOrPlayerItself();
// Set _lastLiquid before casting liquid spell to avoid infinite loops
_lastLiquid = curLiquid;
if (curLiquid && curLiquid->SpellID && (!player || !player->IsGameMaster()))
CastSpell(this, curLiquid->SpellID, true);
_lastLiquid = curLiquid;
// mount capability depends on liquid state change
UpdateMountCapability();

View File

@@ -3953,7 +3953,10 @@ void Spell::finish(bool ok)
if (spellInfo && spellInfo->IconFileDataId == 134230)
{
TC_LOG_DEBUG("spells", "Statue %s is unsummoned in spell %d finish", unitCaster->GetGUID().ToString().c_str(), m_spellInfo->Id);
unitCaster->setDeathState(JUST_DIED);
// Avoid infinite loops with setDeathState(JUST_DIED) being called over and over
// It might make sense to do this check in Unit::setDeathState() and all overloaded functions
if (unitCaster->getDeathState() != JUST_DIED)
unitCaster->setDeathState(JUST_DIED);
return;
}
}