aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp4
-rw-r--r--src/server/game/DataStores/DB2Structure.h17
-rw-r--r--src/server/game/DataStores/DBCEnums.h115
-rw-r--r--src/server/game/Entities/Player/Player.cpp26
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp14
-rw-r--r--src/server/game/Handlers/BattleGroundHandler.cpp2
-rw-r--r--src/server/game/Maps/TerrainMgr.cpp2
-rw-r--r--src/server/game/Spells/Spell.cpp5
-rw-r--r--src/server/game/Spells/SpellEffects.cpp4
-rw-r--r--src/server/game/Spells/SpellInfo.cpp8
-rw-r--r--src/server/scripts/Spells/spell_item.cpp3
11 files changed, 106 insertions, 94 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index ca94accd24c..202da5744a7 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -1895,7 +1895,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
{
uint32 zoneId = referencePlayer->GetAreaId();
if (AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(zoneId))
- if (areaEntry->Flags[0] & AREA_FLAG_UNK9)
+ if (areaEntry->GetFlags().HasFlag(AreaFlags::IsSubzone))
zoneId = areaEntry->ParentAreaID;
if (zoneId != reqValue)
return false;
@@ -1907,7 +1907,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
return false;
uint32 zoneId = ref->GetAreaId();
if (AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(zoneId))
- if (areaEntry->Flags[0] & AREA_FLAG_UNK9)
+ if (areaEntry->GetFlags().HasFlag(AreaFlags::IsSubzone))
zoneId = areaEntry->ParentAreaID;
if (zoneId != reqValue)
return false;
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h
index 8f2907d060d..a458abee76c 100644
--- a/src/server/game/DataStores/DB2Structure.h
+++ b/src/server/game/DataStores/DB2Structure.h
@@ -150,20 +150,13 @@ struct AreaTableEntry
std::array<uint16, 4> LiquidTypeID;
// helpers
- bool IsSanctuary() const
- {
- return (Flags[0] & AREA_FLAG_SANCTUARY) != 0;
- }
+ EnumFlag<AreaFlags> GetFlags() const { return static_cast<AreaFlags>(Flags[0]); }
+ EnumFlag<AreaFlags2> GetFlags2() const { return static_cast<AreaFlags2>(Flags[1]); }
+ EnumFlag<AreaMountFlags> GetMountFlags() const { return static_cast<AreaMountFlags>(MountFlags); }
- bool IsFlyable() const
+ bool IsSanctuary() const
{
- if (Flags[0] & AREA_FLAG_OUTLAND)
- {
- if (!(Flags[0] & AREA_FLAG_NO_FLY_ZONE))
- return true;
- }
-
- return false;
+ return GetFlags().HasFlag(AreaFlags::NoPvP);
}
};
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index bd8ee99f2be..9748c410788 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -106,53 +106,74 @@ enum AchievementFlags
uint32 constexpr ACHIVEMENT_CATEGORY_PET_BATTLES = 15117;
-enum AreaFlags
-{
- AREA_FLAG_SNOW = 0x00000001, // snow (only Dun Morogh, Naxxramas, Razorfen Downs and Winterspring)
- AREA_FLAG_UNK1 = 0x00000002, // Razorfen Downs, Naxxramas and Acherus: The Ebon Hold (3.3.5a)
- AREA_FLAG_UNK2 = 0x00000004, // Only used for areas on map 571 (development before)
- AREA_FLAG_SLAVE_CAPITAL = 0x00000008, // city and city subzones
- AREA_FLAG_UNK3 = 0x00000010, // can't find common meaning
- AREA_FLAG_SLAVE_CAPITAL2 = 0x00000020, // slave capital city flag?
- AREA_FLAG_ALLOW_DUELS = 0x00000040, // allow to duel here
- AREA_FLAG_ARENA = 0x00000080, // arena, both instanced and world arenas
- AREA_FLAG_CAPITAL = 0x00000100, // main capital city flag
- AREA_FLAG_CITY = 0x00000200, // only for one zone named "City" (where it located?)
- AREA_FLAG_OUTLAND = 0x00000400, // expansion zones? (only Eye of the Storm not have this flag, but have 0x00004000 flag)
- AREA_FLAG_SANCTUARY = 0x00000800, // sanctuary area (PvP disabled)
- AREA_FLAG_NEED_FLY = 0x00001000, // Respawn alive at the graveyard without corpse
- AREA_FLAG_UNUSED1 = 0x00002000, // Unused in 3.3.5a
- AREA_FLAG_OUTLAND2 = 0x00004000, // expansion zones? (only Circle of Blood Arena not have this flag, but have 0x00000400 flag)
- AREA_FLAG_OUTDOOR_PVP = 0x00008000, // pvp objective area? (Death's Door also has this flag although it's no pvp object area)
- AREA_FLAG_ARENA_INSTANCE = 0x00010000, // used by instanced arenas only
- AREA_FLAG_UNUSED2 = 0x00020000, // Unused in 3.3.5a
- AREA_FLAG_CONTESTED_AREA = 0x00040000, // On PvP servers these areas are considered contested, even though the zone it is contained in is a Horde/Alliance territory.
- AREA_FLAG_UNK6 = 0x00080000, // Valgarde and Acherus: The Ebon Hold
- AREA_FLAG_LOWLEVEL = 0x00100000, // used for some starting areas with area_level <= 15
- AREA_FLAG_TOWN = 0x00200000, // small towns with Inn
- AREA_FLAG_REST_ZONE_HORDE = 0x00400000, // Warsong Hold, Acherus: The Ebon Hold, New Agamand Inn, Vengeance Landing Inn, Sunreaver Pavilion (Something to do with team?)
- AREA_FLAG_REST_ZONE_ALLIANCE = 0x00800000, // Valgarde, Acherus: The Ebon Hold, Westguard Inn, Silver Covenant Pavilion (Something to do with team?)
- AREA_FLAG_COMBAT = 0x01000000, // "combat" area (Script_GetZonePVPInfo), used
- AREA_FLAG_INSIDE = 0x02000000, // used for determinating spell related inside/outside questions in Map::IsOutdoors
- AREA_FLAG_OUTSIDE = 0x04000000, // used for determinating spell related inside/outside questions in Map::IsOutdoors
- AREA_FLAG_CAN_HEARTH_AND_RESURRECT = 0x08000000, // Can Hearth And Resurrect From Area
- AREA_FLAG_NO_FLY_ZONE = 0x20000000, // Marks zones where you cannot fly
- AREA_FLAG_UNK9 = 0x40000000
-};
-
-enum AreaFlags2
-{
- AREA_FLAG_2_DONT_SHOW_SANCTUARY = 0x00000200, // Hides sanctuary status from zone text color (Script_GetZonePVPInfo)
- AREA_FLAG_2_CAN_ENABLE_WAR_MODE = 0x00001000, // Allows enabling war mode
-};
-
-enum AreaMountFlags
-{
- AREA_MOUNT_FLAG_GROUND_ALLOWED = 0x1,
- AREA_MOUNT_FLAG_FLYING_ALLOWED = 0x2,
- AREA_MOUNT_FLAG_FLOAT_ALLOWED = 0x4,
- AREA_MOUNT_FLAG_UNDERWATER_ALLOWED = 0x8
-};
+enum class AreaFlags : uint32
+{
+ EmitBreathParticles = 0x00000001,
+ BreathParticlesOverrideParent = 0x00000002,
+ OnMapDungeon = 0x00000004,
+ AllowTradeChannel = 0x00000008,
+ EnemiesPvPFlagged = 0x00000010,
+ AllowResting = 0x00000020,
+ AllowDueling = 0x00000040,
+ FreeForAllPvP = 0x00000080,
+ LinkedChat = 0x00000100, // Set in cities
+ LinkedChatSpecialArea = 0x00000200,
+ ForceThisAreaWhenOnDynamicTransport = 0x00000400,
+ NoPvP = 0x00000800,
+ NoGhostOnRelease = 0x00001000,
+ SubZoneAmbientMultiplier = 0x00002000,
+ EnableFlightBoundsOnMap = 0x00004000,
+ PVPPOI = 0x00008000,
+ NoChatChannels = 0x00010000,
+ AreaNotInUse = 0x00020000,
+ Contested = 0x00040000,
+ NoPlayerSummoning = 0x00080000,
+ NoDuelingIfTournamentRealm = 0x00100000,
+ PlayersCallGuards = 0x00200000,
+ HordeResting = 0x00400000,
+ AllianceResting = 0x00800000,
+ CombatZone = 0x01000000,
+ ForceIndoors = 0x02000000,
+ ForceOutdoors = 0x04000000,
+ AllowHearthAndRessurectFromArea = 0x08000000,
+ NoLocalDefenseChannel = 0x10000000,
+ OnlyEvaluateGhostBindOnce = 0x20000000,
+ IsSubzone = 0x40000000,
+ DontEvaluateGraveyardFromClient = 0x80000000
+};
+
+DEFINE_ENUM_FLAG(AreaFlags);
+
+enum class AreaFlags2 : uint32
+{
+ ForceMicroDungeonArtMap = 0x00000001, // Ask Programmer
+ UseSubzonePlayerLoot = 0x00000002,
+ AllowPetBattleDuelingEvenIfNoDuelingAllowed = 0x00000004,
+ UseMapTransferLocsForCemeteries = 0x00000008,
+ IsGarrison = 0x00000010,
+ UseSubzoneForChatChannel = 0x00000020,
+ DontRealmCoalesceChatChannel = 0x00000040,
+ NotExplorable = 0x00000080, // Don't assign area bit
+ DontUseParentMapForCemeteries = 0x00000100,
+ DontShowSanctuaryText = 0x00000200,
+ CrossFactionZoneChat = 0x00000400,
+ ForceNoResting = 0x00000800,
+ AllowWarModeToggle = 0x00001000
+};
+
+DEFINE_ENUM_FLAG(AreaFlags2);
+
+enum class AreaMountFlags : uint8
+{
+ None = 0x0,
+ AllowGroundMounts = 0x1,
+ AllowFlyingMounts = 0x2,
+ AllowSurfaceSwimmingMounts = 0x4,
+ AllowUnderwaterSwimmingMounts = 0x8,
+ ClientEnforcesMount = 0x10
+};
+
+DEFINE_ENUM_FLAG(AreaMountFlags);
enum ArtifactCategory : uint32
{
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index e346b174147..c171d9bf424 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -4831,7 +4831,7 @@ void Player::RepopAtGraveyard()
bool shouldResurrect = false;
// Such zones are considered unreachable as a ghost and the player must be automatically revived
- if ((!IsAlive() && zone && zone->Flags[0] & AREA_FLAG_NEED_FLY) || GetTransport() || GetPositionZ() < GetMap()->GetMinHeight(GetPhaseShift(), GetPositionX(), GetPositionY()))
+ if ((!IsAlive() && zone && zone->GetFlags().HasFlag(AreaFlags::NoGhostOnRelease)) || GetTransport() || GetPositionZ() < GetMap()->GetMinHeight(GetPhaseShift(), GetPositionX(), GetPositionY()))
{
shouldResurrect = true;
SpawnCorpseBones();
@@ -4874,10 +4874,10 @@ void Player::RepopAtGraveyard()
bool Player::CanJoinConstantChannelInZone(ChatChannelsEntry const* channel, AreaTableEntry const* zone) const
{
- if (channel->Flags & CHANNEL_DBC_FLAG_ZONE_DEP && zone->Flags[0] & AREA_FLAG_ARENA_INSTANCE)
+ if (channel->Flags & CHANNEL_DBC_FLAG_ZONE_DEP && zone->GetFlags().HasFlag(AreaFlags::NoChatChannels))
return false;
- if ((channel->Flags & CHANNEL_DBC_FLAG_CITY_ONLY) && (!(zone->Flags[0] & AREA_FLAG_SLAVE_CAPITAL)))
+ if ((channel->Flags & CHANNEL_DBC_FLAG_CITY_ONLY) && (!(zone->GetFlags().HasFlag(AreaFlags::AllowTradeChannel))))
return false;
if ((channel->Flags & CHANNEL_DBC_FLAG_GUILD_REQ) && GetGuildId())
@@ -7452,7 +7452,7 @@ void Player::UpdateArea(uint32 newArea)
AreaTableEntry const* area = sAreaTableStore.LookupEntry(newArea);
bool oldFFAPvPArea = pvpInfo.IsInFFAPvPArea;
- pvpInfo.IsInFFAPvPArea = area && (area->Flags[0] & AREA_FLAG_ARENA);
+ pvpInfo.IsInFFAPvPArea = area && (area->GetFlags().HasFlag(AreaFlags::FreeForAllPvP));
UpdatePvPState(true);
// check if we were in ffa arena and we left
@@ -7479,8 +7479,8 @@ void Player::UpdateArea(uint32 newArea)
else
RemovePvpFlag(UNIT_BYTE2_FLAG_SANCTUARY);
- uint32 const areaRestFlag = (GetTeam() == ALLIANCE) ? AREA_FLAG_REST_ZONE_ALLIANCE : AREA_FLAG_REST_ZONE_HORDE;
- if (area && area->Flags[0] & areaRestFlag)
+ AreaFlags const areaRestFlag = (GetTeam() == ALLIANCE) ? AreaFlags::AllianceResting : AreaFlags::HordeResting;
+ if (area && area->GetFlags().HasFlag(areaRestFlag))
_restMgr->SetRestFlag(REST_FLAG_IN_FACTION_AREA);
else
_restMgr->RemoveRestFlag(REST_FLAG_IN_FACTION_AREA);
@@ -7534,7 +7534,7 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea)
UpdateHostileAreaState(zone);
- if (zone->Flags[0] & AREA_FLAG_CAPITAL) // Is in a capital city
+ if (zone->GetFlags().HasFlag(AreaFlags::LinkedChat)) // Is in a capital city
{
if (!pvpInfo.IsHostile || zone->IsSanctuary())
_restMgr->SetRestFlag(REST_FLAG_IN_CITY);
@@ -7578,17 +7578,17 @@ void Player::UpdateHostileAreaState(AreaTableEntry const* area)
if (area->IsSanctuary()) // sanctuary and arena cannot be overriden
pvpInfo.IsInHostileArea = false;
- else if (area->Flags[0] & AREA_FLAG_ARENA)
+ else if (area->GetFlags().HasFlag(AreaFlags::FreeForAllPvP))
pvpInfo.IsInHostileArea = true;
else if (overrideZonePvpType == ZonePVPTypeOverride::None)
{
if (area)
{
- if (InBattleground() || area->Flags[0] & AREA_FLAG_COMBAT || (area->PvpCombatWorldStateID != -1 && sWorldStateMgr->GetValue(area->PvpCombatWorldStateID, GetMap()) != 0))
+ if (InBattleground() || area->GetFlags().HasFlag(AreaFlags::CombatZone) || (area->PvpCombatWorldStateID != -1 && sWorldStateMgr->GetValue(area->PvpCombatWorldStateID, GetMap()) != 0))
pvpInfo.IsInHostileArea = true;
- else if (IsWarModeLocalActive() || (area->Flags[0] & AREA_FLAG_UNK3))
+ else if (IsWarModeLocalActive() || (area->GetFlags().HasFlag(AreaFlags::EnemiesPvPFlagged)))
{
- if (area->Flags[0] & AREA_FLAG_CONTESTED_AREA)
+ if (area->GetFlags().HasFlag(AreaFlags::Contested))
pvpInfo.IsInHostileArea = IsWarModeLocalActive();
else
{
@@ -26543,7 +26543,7 @@ bool Player::IsAreaThatActivatesPvpTalents(uint32 areaID) const
if (area->IsSanctuary())
return false;
- if (area->Flags[0] & AREA_FLAG_ARENA)
+ if (area->GetFlags().HasFlag(AreaFlags::FreeForAllPvP))
return true;
if (sBattlefieldMgr->IsWorldPvpArea(area->ID))
@@ -29200,7 +29200,7 @@ bool Player::CanEnableWarModeInArea() const
do
{
- if (area->Flags[1] & AREA_FLAG_2_CAN_ENABLE_WAR_MODE)
+ if (area->GetFlags2().HasFlag(AreaFlags2::AllowWarModeToggle))
return true;
area = sAreaTableStore.LookupEntry(area->ParentAreaID);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 98fd0ff18a2..f6acfa09d7b 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -7815,7 +7815,7 @@ MountCapabilityEntry const* Unit::GetMountCapability(uint32 mountType) const
uint32 areaId = GetAreaId();
uint32 ridingSkill = 5000;
- uint32 mountFlags = 0;
+ EnumFlag<AreaMountFlags> mountFlags = AreaMountFlags::None;
bool isSubmerged = false;
bool isInWater = false;
@@ -7825,10 +7825,10 @@ MountCapabilityEntry const* Unit::GetMountCapability(uint32 mountType) const
if (HasAuraType(SPELL_AURA_MOUNT_RESTRICTIONS))
{
for (AuraEffect const* auraEffect : GetAuraEffectsByType(SPELL_AURA_MOUNT_RESTRICTIONS))
- mountFlags |= auraEffect->GetMiscValue();
+ mountFlags |= AreaMountFlags(auraEffect->GetMiscValue());
}
else if (AreaTableEntry const* areaTable = sAreaTableStore.LookupEntry(areaId))
- mountFlags = areaTable->MountFlags;
+ mountFlags = areaTable->GetMountFlags();
LiquidData liquid;
ZLiquidStatus liquidStatus = GetMap()->GetLiquidStatus(GetPhaseShift(), GetPositionX(), GetPositionY(), GetPositionZ(), map_liquidHeaderTypeFlags::AllLiquids, &liquid);
@@ -7846,13 +7846,13 @@ MountCapabilityEntry const* Unit::GetMountCapability(uint32 mountType) const
if (!(mountCapability->Flags & MOUNT_CAPABIILTY_FLAG_IGNORE_RESTRICTIONS))
{
- if (mountCapability->Flags & MOUNT_CAPABILITY_FLAG_GROUND && !(mountFlags & AREA_MOUNT_FLAG_GROUND_ALLOWED))
+ if (mountCapability->Flags & MOUNT_CAPABILITY_FLAG_GROUND && !(mountFlags.HasFlag(AreaMountFlags::AllowGroundMounts)))
continue;
- if (mountCapability->Flags & MOUNT_CAPABILITY_FLAG_FLYING && !(mountFlags & AREA_MOUNT_FLAG_FLYING_ALLOWED))
+ if (mountCapability->Flags & MOUNT_CAPABILITY_FLAG_FLYING && !(mountFlags.HasFlag(AreaMountFlags::AllowFlyingMounts)))
continue;
- if (mountCapability->Flags & MOUNT_CAPABILITY_FLAG_FLOAT && !(mountFlags & AREA_MOUNT_FLAG_FLOAT_ALLOWED))
+ if (mountCapability->Flags & MOUNT_CAPABILITY_FLAG_FLOAT && !(mountFlags.HasFlag(AreaMountFlags::AllowSurfaceSwimmingMounts)))
continue;
- if (mountCapability->Flags & MOUNT_CAPABILITY_FLAG_UNDERWATER && !(mountFlags & AREA_MOUNT_FLAG_UNDERWATER_ALLOWED))
+ if (mountCapability->Flags & MOUNT_CAPABILITY_FLAG_UNDERWATER && !(mountFlags.HasFlag(AreaMountFlags::AllowUnderwaterSwimmingMounts)))
continue;
}
diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp
index 7103b0adce3..6083c180b71 100644
--- a/src/server/game/Handlers/BattleGroundHandler.cpp
+++ b/src/server/game/Handlers/BattleGroundHandler.cpp
@@ -709,7 +709,7 @@ void WorldSession::HandleHearthAndResurrect(WorldPackets::Battleground::HearthAn
}
AreaTableEntry const* atEntry = sAreaTableStore.LookupEntry(_player->GetAreaId());
- if (!atEntry || !(atEntry->Flags[0] & AREA_FLAG_CAN_HEARTH_AND_RESURRECT))
+ if (!atEntry || !(atEntry->GetFlags().HasFlag(AreaFlags::AllowHearthAndRessurectFromArea)))
return;
_player->BuildPlayerRepop();
diff --git a/src/server/game/Maps/TerrainMgr.cpp b/src/server/game/Maps/TerrainMgr.cpp
index b811f24a821..b5c2eeea8f8 100644
--- a/src/server/game/Maps/TerrainMgr.cpp
+++ b/src/server/game/Maps/TerrainMgr.cpp
@@ -372,7 +372,7 @@ void TerrainInfo::GetFullTerrainStatusForPosition(PhaseShift const& phaseShift,
data.outdoors = true;
data.areaId = gridAreaId;
if (AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(data.areaId))
- data.outdoors = (areaEntry->Flags[0] & (AREA_FLAG_INSIDE | AREA_FLAG_OUTSIDE)) != AREA_FLAG_INSIDE;
+ data.outdoors = areaEntry->GetFlags().HasFlag(AreaFlags::ForceOutdoors) || !areaEntry->GetFlags().HasFlag(AreaFlags::ForceIndoors);
}
if (!data.areaId)
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 77d5cf5e449..aa1531619c7 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -6555,9 +6555,8 @@ SpellCastResult Spell::CheckCast(bool strict, int32* param1 /*= nullptr*/, int32
if (m_originalCaster && m_originalCaster->GetTypeId() == TYPEID_PLAYER && m_originalCaster->IsAlive())
{
Battlefield* Bf = sBattlefieldMgr->GetBattlefieldToZoneId(m_originalCaster->GetMap(), m_originalCaster->GetZoneId());
- if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(m_originalCaster->GetAreaId()))
- if (area->Flags[0] & AREA_FLAG_NO_FLY_ZONE || (Bf && !Bf->CanFlyIn()))
- return SPELL_FAILED_NOT_HERE;
+ if (Bf && !Bf->CanFlyIn())
+ return SPELL_FAILED_NOT_HERE;
}
break;
}
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 1dbc2269e84..9f878275a6e 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -3128,14 +3128,14 @@ void Spell::EffectDuel()
// Players can only fight a duel in zones with this flag
AreaTableEntry const* casterAreaEntry = sAreaTableStore.LookupEntry(caster->GetAreaId());
- if (casterAreaEntry && !(casterAreaEntry->Flags[0] & AREA_FLAG_ALLOW_DUELS))
+ if (casterAreaEntry && !(casterAreaEntry->GetFlags().HasFlag(AreaFlags::AllowDueling)))
{
SendCastResult(SPELL_FAILED_NO_DUELING); // Dueling isn't allowed here
return;
}
AreaTableEntry const* targetAreaEntry = sAreaTableStore.LookupEntry(target->GetAreaId());
- if (targetAreaEntry && !(targetAreaEntry->Flags[0] & AREA_FLAG_ALLOW_DUELS))
+ if (targetAreaEntry && !(targetAreaEntry->GetFlags().HasFlag(AreaFlags::AllowDueling)))
{
SendCastResult(SPELL_FAILED_NO_DUELING); // Dueling isn't allowed here
return;
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 43844717a11..7c0ef4b6f46 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -1996,16 +1996,16 @@ SpellCastResult SpellInfo::CheckLocation(uint32 map_id, uint32 zone_id, uint32 a
// continent limitation (virtual continent)
if (HasAttribute(SPELL_ATTR4_ONLY_FLYING_AREAS))
{
- uint32 mountFlags = 0;
+ EnumFlag<AreaMountFlags> mountFlags = AreaMountFlags::None;
if (player && player->HasAuraType(SPELL_AURA_MOUNT_RESTRICTIONS))
{
for (AuraEffect const* auraEffect : player->GetAuraEffectsByType(SPELL_AURA_MOUNT_RESTRICTIONS))
- mountFlags |= auraEffect->GetMiscValue();
+ mountFlags |= AreaMountFlags(auraEffect->GetMiscValue());
}
else if (AreaTableEntry const* areaTable = sAreaTableStore.LookupEntry(area_id))
- mountFlags = areaTable->MountFlags;
+ mountFlags = areaTable->GetMountFlags();
- if (!(mountFlags & AREA_MOUNT_FLAG_FLYING_ALLOWED))
+ if (!(mountFlags.HasFlag(AreaMountFlags::AllowFlyingMounts)))
return SPELL_FAILED_INCORRECT_AREA;
if (player)
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index 53c445a3b28..9a360b6a152 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -3180,9 +3180,8 @@ class spell_item_nitro_boosts : public SpellScript
void HandleDummy(SpellEffIndex /* effIndex */)
{
Unit* caster = GetCaster();
- AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(caster->GetAreaId());
bool success = true;
- if (areaEntry && areaEntry->IsFlyable() && !caster->GetMap()->IsDungeon())
+ if (!caster->GetMap()->IsDungeon())
success = roll_chance_i(95); // nitro boosts can only fail in flying-enabled locations on 3.3.5
caster->CastSpell(caster, success ? SPELL_NITRO_BOOSTS_SUCCESS : SPELL_NITRO_BOOSTS_BACKFIRE, GetCastItem());
}