[8308] More generic code for new continent spell casting including fly form/mounts. Author: VladimirMangos

* Check new continent requirement by SPELL_ATTR_EX4_CAST_ONLY_IN_OUTLAND in
      SpellMgr::GetSpellAllowedInLocationError.
    * Also in this function let ignore any area requirement in GM-mode (except client side checks ofc if use spellbook/item)
    * For fly form/mount auras check only speciaal reqirement like special fly skill and ignore it for dead state.
    * Drop explicit fly auras drop at zone update, now this part GetSpellAllowedInLocationError functionality.
    * Allow in `spell_area` have data deepndent from ghost auras

    This all allow implement apply spells 55173/55164 to player ghost wiht DB support in `spell_area`

--HG--
branch : trunk
This commit is contained in:
megamage
2009-08-05 16:33:34 -05:00
parent 31f989fab9
commit 907342d5b0
4 changed files with 40 additions and 31 deletions

View File

@@ -5138,14 +5138,15 @@ SpellCastResult Spell::CheckCast(bool strict)
break;
}
case SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED:
case SPELL_AURA_FLY:
case SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED:
{
// not allow cast fly spells at old maps by players (all spells is self target)
if(m_originalCaster && m_originalCaster->GetTypeId()==TYPEID_PLAYER)
// not allow cast fly spells if not have req. skills (all spells is self target)
// allow always ghost flight spells
if (m_originalCaster && m_originalCaster->GetTypeId() == TYPEID_PLAYER && m_originalCaster->isAlive())
{
if( !((Player*)m_originalCaster)->IsAllowUseFlyMountsHere() )
return SPELL_FAILED_NOT_HERE;
if (!((Player*)m_originalCaster)->IsKnowHowFlyIn(m_originalCaster->GetMapId(),m_originalCaster->GetMapId()))
return m_IsTriggeredSpell ? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_NOT_HERE;
}
break;
}