Вопрос уже многократно подымался, но реального результата не было. Все, кто хоть чуть-чуть шарит в ядре, давайте поставим в этой "загадке" точку. Начну:
Когда-то, бывшим модератор Атом, писал патч, чтобы флай маунты были доступны в Азероте:
Code
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index f94b221..2b97e43 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -4210,7 +4210,7 @@ uint8 Spell::CanCast(bool strict)
if(m_caster->GetTypeId()==TYPEID_PLAYER)
{
uint32 v_map = GetVirtualMapForMapAndZone(m_caster->GetMapId(), m_caster->GetZoneId());
- if( !((Player*)m_caster)->isGameMaster() && v_map != 530 && !(v_map == 571 && ((Player*)m_caster)->HasSpell(54197)))
+ if( !((Player*)m_caster)->isGameMaster() && v_map != 530 && v_map != 580 && v_map != 571)
return SPELL_FAILED_NOT_HERE;
}
Суть заключается в том, чтобы при проверке зоны 530(Азерот) можно было использовать спел 54197. Работоспособность патча я не проверял, возможно работает.
Также, можно просто попробовать вставить в src/game/Spell.cpp строчку:
Code
GetVirtualMapForMapAndZone(m_caster->GetMapId(),m_caster->GetZoneId()) != 530)
Вот выписки из spell.cpp, связанные с маунтом.
Code
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)->IsAllowUseFlyMountsHere() )
return SPELL_FAILED_NOT_HERE;
}
- - - - - - -
Code
case SPELL_AURA_MOUNTED:
{
if (m_caster->IsInWater())
return SPELL_FAILED_ONLY_ABOVEWATER;
if (m_caster->GetTypeId()==TYPEID_PLAYER && ((Player*)m_caster)->GetTransport())
return SPELL_FAILED_NO_MOUNTS_ALLOWED;
// Ignore map check if spell have AreaId. AreaId already checked and this prevent special mount spells
if (m_caster->GetTypeId()==TYPEID_PLAYER && !sMapStore.LookupEntry(m_caster->GetMapId())->IsMountAllowed() && !m_IsTriggeredSpell && !m_spellInfo->AreaGroupId)
return SPELL_FAILED_NO_MOUNTS_ALLOWED;
- - - - - - - -
Code
// zone check
if(uint8 res= GetSpellAllowedInLocationError(m_spellInfo,m_caster->GetMapId(),m_caster->GetZoneId(),m_caster->GetAreaId()))
return res;
// not let players cast spells at mount (and let do it to creatures)
if( m_caster->IsMounted() && m_caster->GetTypeId()==TYPEID_PLAYER && !m_IsTriggeredSpell &&
!IsPassiveSpell(m_spellInfo->Id) && !(m_spellInfo->Attributes & SPELL_ATTR_CASTABLE_WHILE_MOUNTED) )
{
if(m_caster->isInFlight())
return SPELL_FAILED_NOT_FLYING;
else
return SPELL_FAILED_NOT_MOUNTED;
}