aboutsummaryrefslogtreecommitdiff
path: root/src/game/Spell.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Spell.cpp')
-rw-r--r--src/game/Spell.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index aa0d24ffdb8..fb5662bfd7b 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -2114,7 +2114,7 @@ void Spell::prepare(SpellCastTargets * targets, Aura* triggeredByAura)
}
}
-void Spell::cancel()
+void Spell::cancel(bool report)
{
if(m_spellState == SPELL_STATE_FINISHED)
return;
@@ -2144,7 +2144,7 @@ void Spell::cancel()
m_caster->RemoveAurasDueToCasterSpell(m_spellInfo->Id, m_caster->GetGUID());
SendChannelUpdate(0);
SendInterrupted(0);
- SendCastResult(SPELL_FAILED_INTERRUPTED);
+ SendCastResult(report ? SPELL_FAILED_INTERRUPTED : SPELL_FAILED_DONT_REPORT);
} break;
default:
@@ -3440,7 +3440,8 @@ uint8 Spell::CanCast(bool strict)
// check correctness positive/negative cast target (pet cast real check and cheating check)
if(IsPositiveSpell(m_spellInfo->Id))
{
- if(m_caster->IsHostileTo(target))
+ //dispel positivity is dependant on target, don't check it
+ if(m_caster->IsHostileTo(target) && !IsDispel(m_spellInfo))
return SPELL_FAILED_BAD_TARGETS;
}
else
@@ -3683,6 +3684,12 @@ uint8 Spell::CanCast(bool strict)
if(m_targets.getUnitTarget() && !m_caster->IsFriendlyTo(m_targets.getUnitTarget()) && !m_caster->HasInArc( M_PI, target ))
return SPELL_FAILED_UNIT_NOT_INFRONT;
}
+ else if (m_spellInfo->Id == 19938) // Awaken Peon
+ {
+ Unit *unit = m_targets.getUnitTarget();
+ if(!unit || !unit->HasAura(17743, 0))
+ return SPELL_FAILED_BAD_TARGETS;
+ }
break;
}
case SPELL_EFFECT_SCHOOL_DAMAGE:
@@ -4165,14 +4172,11 @@ uint8 Spell::CanCast(bool strict)
case SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED:
case SPELL_AURA_FLY:
{
- // not allow cast fly spells at old maps by players (all spells is self target)
if(m_caster->GetTypeId()==TYPEID_PLAYER)
{
- if( !((Player*)m_caster)->isGameMaster() &&
- GetVirtualMapForMapAndZone(m_caster->GetMapId(),m_caster->GetZoneId()) != 530)
+ if(!((Player*)m_caster)->CanFlyInMap(GetVirtualMapForMapAndZone(m_caster->GetMapId(),m_caster->GetZoneId())))
return SPELL_FAILED_NOT_HERE;
}
-
break;
}
case SPELL_AURA_PERIODIC_MANA_LEECH: