diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 88591a331..7cd2c5a02 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1498,27 +1498,15 @@ SpellCastResult SpellInfo::CheckLocation(uint32 map_id, uint32 zone_id, uint32 a // continent limitation (virtual continent) if (HasAttribute(SPELL_ATTR4_ONLY_FLYING_AREAS)) { - if (strict) + AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(area_id); + if (!areaEntry) { - 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; - } + areaEntry = sAreaTableStore.LookupEntry(zone_id); } - else + + if (!areaEntry || !areaEntry->IsFlyable() || (strict && (areaEntry->flags & AREA_FLAG_NO_FLY_ZONE) != 0) || !player->canFlyInZone(map_id, zone_id, this)) { - uint32 const v_map = GetVirtualMapForMapAndZone(map_id, zone_id); - MapEntry const* mapEntry = sMapStore.LookupEntry(v_map); - if (!mapEntry || mapEntry->Expansion() < 1 || !mapEntry->IsContinent()) - { - return SPELL_FAILED_INCORRECT_AREA; - } + return SPELL_FAILED_INCORRECT_AREA; } } diff --git a/src/server/shared/DataStores/DBCStructure.h b/src/server/shared/DataStores/DBCStructure.h index 89454cee7..4f45dd5d2 100644 --- a/src/server/shared/DataStores/DBCStructure.h +++ b/src/server/shared/DataStores/DBCStructure.h @@ -538,7 +538,7 @@ struct AreaTableEntry [[nodiscard]] bool IsFlyable() const { - return flags & AREA_FLAG_OUTLAND && !(flags & AREA_FLAG_NO_FLY_ZONE); + return flags & AREA_FLAG_OUTLAND; } };