Core/Spells: fix a crash.

This commit is contained in:
QAston
2011-08-20 09:49:18 +02:00
parent cf4e19cf4b
commit 580a68573f
+28 -25
View File
@@ -5442,38 +5442,41 @@ SpellCastResult Spell::CheckPetCast(Unit* target)
if (m_caster->isInCombat() && !m_spellInfo->CanBeUsedInCombat()) if (m_caster->isInCombat() && !m_spellInfo->CanBeUsedInCombat())
return SPELL_FAILED_AFFECTING_COMBAT; return SPELL_FAILED_AFFECTING_COMBAT;
//dead owner (pets still alive when owners ressed?) // dead owner (pets still alive when owners ressed?)
if (Unit *owner = m_caster->GetCharmerOrOwner()) if (Unit *owner = m_caster->GetCharmerOrOwner())
if (!owner->isAlive()) if (!owner->isAlive())
return SPELL_FAILED_CASTER_DEAD; return SPELL_FAILED_CASTER_DEAD;
if (!target && m_targets.GetUnitTarget()) if (!target && m_targets.GetUnitTarget())
target = m_targets.GetUnitTarget(); target = m_targets.GetUnitTarget();
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
{
if (m_spellInfo->Effects[i].TargetA.GetType() == TARGET_TYPE_UNIT_TARGET
|| m_spellInfo->Effects[i].TargetA.GetType() == TARGET_TYPE_DEST_TARGET)
{ {
if (m_spellInfo->Effects[i].TargetA.GetType() == TARGET_TYPE_UNIT_TARGET if (!target)
|| m_spellInfo->Effects[i].TargetA.GetType() == TARGET_TYPE_DEST_TARGET) return SPELL_FAILED_BAD_IMPLICIT_TARGETS;
{ m_targets.SetUnitTarget(target);
if (!target) break;
return SPELL_FAILED_BAD_IMPLICIT_TARGETS;
m_targets.SetUnitTarget(target);
break;
}
} }
}
Unit* _target = m_targets.GetUnitTarget(); Unit* _target = m_targets.GetUnitTarget();
if (_target) //for target dead/target not valid // for target dead/target not valid
{ if (_target)
if (!_target->isAlive()) {
return SPELL_FAILED_BAD_TARGETS; if (!_target->isAlive())
return SPELL_FAILED_BAD_TARGETS;
if (!IsValidSingleTargetSpell(_target)) if (!IsValidSingleTargetSpell(_target))
return SPELL_FAILED_BAD_TARGETS; return SPELL_FAILED_BAD_TARGETS;
} }
//cooldown
if (m_caster->ToCreature()->HasSpellCooldown(m_spellInfo->Id)) // cooldown
if (Unit const* creatureCaster = m_caster->ToCreature())
creatureCaster->HasSpellCooldown(m_spellInfo->Id))
return SPELL_FAILED_NOT_READY; return SPELL_FAILED_NOT_READY;
return CheckCast(true); return CheckCast(true);