diff options
author | megamage <none@none> | 2009-06-07 11:59:12 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-06-07 11:59:12 -0500 |
commit | 79b76f10cd7a0b5e299b7e0ff3d01cdd727b893d (patch) | |
tree | c1ec074e433a61b335c25342c6a1fad8827d1f4a /src/game/Spell.cpp | |
parent | c48c20cb9866d22f1b03159ae258310ab10a9263 (diff) | |
parent | 2e4fae75a4f4f24dc2c97b8bde4870974c073aa9 (diff) |
*Merge. A m_casttime check is added to prevent redundent check of canseeordetect.
--HG--
branch : trunk
Diffstat (limited to 'src/game/Spell.cpp')
-rw-r--r-- | src/game/Spell.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 4b410480ebe..8ca1dc6f82a 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -2555,18 +2555,29 @@ void Spell::cancel() void Spell::cast(bool skipCheck) { - SetExecutedCurrently(true); - // update pointers base at GUIDs to prevent access to non-existed already object UpdatePointers(); - // cancel at lost main target unit - if(!m_targets.getUnitTarget() && m_targets.getUnitTargetGUID() && m_targets.getUnitTargetGUID() != m_caster->GetGUID()) + if(m_targets.getUnitTarget()) { - cancel(); - SetExecutedCurrently(false); - return; + // three check: prepare, cast (m_casttime > 0), hit (delayed) + if(m_casttime && m_targets.getUnitTarget()->isAlive() && !m_caster->canSeeOrDetect(m_targets.getUnitTarget(), true))) + { + cancel(); + return; + } } + else + { + // cancel at lost main target unit + if(m_targets.getUnitTargetGUID() && m_targets.getUnitTargetGUID() != m_caster->GetGUID()) + { + cancel(); + return; + } + } + + SetExecutedCurrently(true); if(m_caster->GetTypeId() != TYPEID_PLAYER && m_targets.getUnitTarget() && m_targets.getUnitTarget() != m_caster) m_caster->SetInFront(m_targets.getUnitTarget()); |