12/04/2020, 20:38
Bonjour Aquayoup !
Si, en tant que MJ, vous appréciez vous promener en monture volante sur Azeroth, vous risquez de rencontrer une difficulté lors des changements d'area.
En effet, il existe une vérification côté serveur qui va vous faire descendre de la monture, même si vous êtes MJ.
Voici comment corriger le problème dans le core.
Dans le player.cpp, remplacez la méthode "CanFlyInZone" comme suit :
Dans le fichier SpellInfo.cpp, dans la méthode CheckLocation, modifiez la partie concernant les limitations par continent comme suit :
Je précise que je m'équipe de mes montures en passant par la commande ".aura", vous ne pouvez pas passer par la méthode classique (catalogue de montures) car il existe une vérification côté client.
En espérant que cela dépannera quelqu'un un jour
Si, en tant que MJ, vous appréciez vous promener en monture volante sur Azeroth, vous risquez de rencontrer une difficulté lors des changements d'area.
En effet, il existe une vérification côté serveur qui va vous faire descendre de la monture, même si vous êtes MJ.
Voici comment corriger le problème dans le core.
Dans le player.cpp, remplacez la méthode "CanFlyInZone" comme suit :
Code :
bool Player::CanFlyInZone(uint32 mapid, uint32 zone, SpellInfo const* bySpell) const
{
if (IsGameMaster())
return true;
// continent checked in SpellInfo::CheckLocation at cast and area update
uint32 v_map = GetVirtualMapForMapAndZone(mapid, zone);
if (v_map == 571 && !bySpell->HasAttribute(SPELL_ATTR7_IGNORE_COLD_WEATHER_FLYING))
if (!HasSpell(54197)) // 54197 = Cold Weather Flying
return false;
return true;
}
Dans le fichier SpellInfo.cpp, dans la méthode CheckLocation, modifiez la partie concernant les limitations par continent comme suit :
Code :
// continent limitation (virtual continent)
if (HasAttribute(SPELL_ATTR4_CAST_ONLY_IN_OUTLAND))
{
if (strict)
{
AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(area_id);
if (!areaEntry)
areaEntry = sAreaTableStore.LookupEntry(zone_id);
if (!areaEntry || !areaEntry->IsFlyable() || !player->CanFlyInZone(map_id, zone_id, this))
return SPELL_FAILED_INCORRECT_AREA;
}
else
{
uint32 const v_map = GetVirtualMapForMapAndZone(map_id, zone_id);
MapEntry const* mapEntry = sMapStore.LookupEntry(v_map);
if(!mapEntry)
return SPELL_FAILED_INCORRECT_AREA;
if (!player->IsGameMaster())
{
if(mapEntry->Expansion() < 1 || !mapEntry->IsContinent())
return SPELL_FAILED_INCORRECT_AREA;
}
//if (!mapEntry || mapEntry->Expansion() < 1 || !mapEntry->IsContinent() || !player->IsGameMaster())
// return SPELL_FAILED_INCORRECT_AREA;
}
}
Je précise que je m'équipe de mes montures en passant par la commande ".aura", vous ne pouvez pas passer par la méthode classique (catalogue de montures) car il existe une vérification côté client.
En espérant que cela dépannera quelqu'un un jour