aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2011-05-17 13:33:24 +0200
committerShauren <shauren.trinity@gmail.com>2011-05-17 13:33:24 +0200
commit37145b6203c5781856ca0546bd57798bbfcc8ab5 (patch)
tree57af96f6c3c63be39074185b9c88c0b69db6328b
parent63f7a6d3d91c0181d753e8ed8e6bbb97aaed4adb (diff)
Core/Spells: Fixed spell modifiers losing charges on cancelled casts
Closes #247 Closes #640 Closes #1353
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index d2d422ba6e4..b35a17ba50f 100755
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -2957,9 +2957,12 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const * triggere
// Prepare data for triggers
prepareDataForTriggerSystem(triggeredByAura);
+ if (m_caster->GetTypeId() == TYPEID_PLAYER)
+ m_caster->ToPlayer()->SetSpellModTakingSpell(this, true);
// calculate cast time (calculated after first CheckCast check to prevent charge counting for first CheckCast fail)
m_casttime = GetSpellCastTime(m_spellInfo, this);
- //m_caster->ModSpellCastTime(m_spellInfo, m_casttime, this);
+ if (m_caster->GetTypeId() == TYPEID_PLAYER)
+ m_caster->ToPlayer()->SetSpellModTakingSpell(this, false);
// don't allow channeled spells / spells with cast time to be casted while moving
// (even if they are interrupted on moving, spells with almost immediate effect get to have their effect processed before movement interrupter kicks in)
@@ -3028,6 +3031,8 @@ void Spell::cancel()
{
case SPELL_STATE_PREPARING:
CancelGlobalCooldown();
+ if (m_caster->GetTypeId() == TYPEID_PLAYER)
+ m_caster->ToPlayer()->RestoreSpellMods(this);
case SPELL_STATE_DELAYED:
SendInterrupted(0);
SendCastResult(SPELL_FAILED_INTERRUPTED);