aboutsummaryrefslogtreecommitdiff
path: root/src/game/Spell.cpp
diff options
context:
space:
mode:
authorTrazom62 <none@none>2010-04-09 20:10:55 +0200
committerTrazom62 <none@none>2010-04-09 20:10:55 +0200
commitbca335f9bd4e11e42d13613d4e8a98695a990c8a (patch)
tree6041dbeeda0b147101f3d33326273a6c8e5fbfbd /src/game/Spell.cpp
parent0c22e5ac994ae5b039a4d011493428e1e88c6404 (diff)
Implement Global Cooldown (originaly written for TC2 v2.4.3).
Thanks eugen.rivniy for the port. Fixes issue #67. --HG-- branch : trunk
Diffstat (limited to 'src/game/Spell.cpp')
-rw-r--r--src/game/Spell.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 6bd54b344ff..29693d969e5 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -2756,6 +2756,9 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const * triggere
m_caster->SetCurrentCastedSpell(this);
SendSpellStart();
+ if (m_caster->GetTypeId() == TYPEID_PLAYER)
+ m_caster->ToPlayer()->AddGlobalCooldown(m_spellInfo,this);
+
if (!m_casttime && !m_spellInfo->StartRecoveryTime
&& !m_castItemGUID //item: first cast may destroy item and second cast causes crash
&& GetCurrentContainer() == CURRENT_GENERIC_SPELL)
@@ -2798,7 +2801,10 @@ void Spell::cancel()
// spell is canceled-take mods and clear list
if (m_caster->GetTypeId() == TYPEID_PLAYER)
+ {
+ m_caster->ToPlayer()->RemoveGlobalCooldown(m_spellInfo);
m_caster->ToPlayer()->RemoveSpellMods(this);
+ }
m_appliedMods.clear();
} break;
@@ -4415,7 +4421,8 @@ SpellCastResult Spell::CheckCast(bool strict)
if (!m_IsTriggeredSpell && m_caster->ToPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY))
return SPELL_FAILED_SPELL_IN_PROGRESS;
- if (m_caster->ToPlayer()->HasSpellCooldown(m_spellInfo->Id))
+ if (m_caster->ToPlayer()->HasSpellCooldown(m_spellInfo->Id) ||
+ (strict && !m_IsTriggeredSpell && m_caster->ToPlayer()->HasGlobalCooldown(m_spellInfo)))
{
if (m_triggeredByAuraSpell)
return SPELL_FAILED_DONT_REPORT;