diff options
Diffstat (limited to 'src/game/Spell.cpp')
| -rw-r--r-- | src/game/Spell.cpp | 18 |
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: |
