aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Spell.cpp14
-rw-r--r--src/game/SpellAuras.cpp12
2 files changed, 19 insertions, 7 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 88e815352e1..844ec844366 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -4196,15 +4196,19 @@ void Spell::TriggerSpell()
SpellCastResult Spell::CheckCast(bool strict)
{
// check cooldowns to prevent cheating
- if(m_caster->GetTypeId()==TYPEID_PLAYER && ((Player*)m_caster)->HasSpellCooldown(m_spellInfo->Id))
+ if(m_caster->GetTypeId()==TYPEID_PLAYER)
{
//can cast triggered (by aura only?) spells while have this flag
if (!m_IsTriggeredSpell && ((Player*)m_caster)->HasFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY))
return SPELL_FAILED_SPELL_IN_PROGRESS;
- if(m_triggeredByAuraSpell)
- return SPELL_FAILED_DONT_REPORT;
- else
- return SPELL_FAILED_NOT_READY;
+
+ if (((Player*)m_caster)->HasSpellCooldown(m_spellInfo->Id))
+ {
+ if(m_triggeredByAuraSpell)
+ return SPELL_FAILED_DONT_REPORT;
+ else
+ return SPELL_FAILED_NOT_READY;
+ }
}
// only allow triggered spells if at an ended battleground
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 4d619f5fa5a..f364f9d9d6b 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -1473,7 +1473,13 @@ void AuraEffect::HandleShapeshiftBoosts(bool apply)
if(apply)
{
+ // Remove cooldown of spells triggered on stance change - they may share cooldown with stance spell
+ if(m_target->GetTypeId() == TYPEID_PLAYER)
+ ((Player *)m_target)->RemoveSpellCooldown(spellId);
if (spellId) m_target->CastSpell(m_target, spellId, true, NULL, this );
+
+ if(m_target->GetTypeId() == TYPEID_PLAYER)
+ ((Player *)m_target)->RemoveSpellCooldown(spellId2);
if (spellId2) m_target->CastSpell(m_target, spellId2, true, NULL, this);
if(m_target->GetTypeId() == TYPEID_PLAYER)
@@ -7251,11 +7257,13 @@ void AuraEffect::HandleModPossessPet(bool apply, bool Real, bool /*changeAmount*
Unit* caster = GetCaster();
if(!caster || caster->GetTypeId() != TYPEID_PLAYER)
return;
- if(caster->GetGuardianPet() != m_target)
- return;
if(apply)
+ {
+ if(caster->GetGuardianPet() != m_target)
+ return;
m_target->SetCharmedBy(caster, CHARM_TYPE_POSSESS);
+ }
else
{
m_target->RemoveCharmedBy(caster);