diff --git a/Source/Game/Achievements/CriteriaHandler.cs b/Source/Game/Achievements/CriteriaHandler.cs index e2b85623d..14e165b6b 100644 --- a/Source/Game/Achievements/CriteriaHandler.cs +++ b/Source/Game/Achievements/CriteriaHandler.cs @@ -1464,7 +1464,7 @@ namespace Game.Achievements uint zoneId = referencePlayer.GetAreaId(); AreaTableRecord areaEntry = CliDB.AreaTableStorage.LookupByKey(zoneId); if (areaEntry != null) - if (areaEntry.Flags.HasFlag(AreaFlags.Unk9)) + if (areaEntry.HasFlag(AreaFlags.Unk9)) zoneId = areaEntry.ParentAreaID; if (zoneId != reqValue) return false; @@ -1477,7 +1477,7 @@ namespace Game.Achievements uint zoneId = refe.GetAreaId(); AreaTableRecord areaEntry = CliDB.AreaTableStorage.LookupByKey(zoneId); if (areaEntry != null) - if (areaEntry.Flags.HasFlag(AreaFlags.Unk9)) + if (areaEntry.HasFlag(AreaFlags.Unk9)) zoneId = areaEntry.ParentAreaID; if (zoneId != reqValue) return false; diff --git a/Source/Game/DataStorage/Structs/A_Records.cs b/Source/Game/DataStorage/Structs/A_Records.cs index cfbb70cd1..649232828 100644 --- a/Source/Game/DataStorage/Structs/A_Records.cs +++ b/Source/Game/DataStorage/Structs/A_Records.cs @@ -142,8 +142,7 @@ namespace Game.DataStorage public byte WildBattlePetLevelMax; public byte WindSettingsID; public uint ContentTuningID; - public AreaFlags Flags; - public AreaFlags2 Flags2; + public uint[] Flags = new uint[2]; public ushort[] LiquidTypeID = new ushort[4]; public bool IsSanctuary() @@ -151,19 +150,23 @@ namespace Game.DataStorage if (ContinentID == 609) return true; - return Flags.HasAnyFlag(AreaFlags.Sanctuary); + return HasFlag(AreaFlags.Sanctuary); } public bool IsFlyable() { - if (Flags.HasAnyFlag(AreaFlags.Outland)) + if (HasFlag(AreaFlags.Outland)) { - if (!Flags.HasAnyFlag(AreaFlags.NoFlyZone)) + if (!HasFlag(AreaFlags.NoFlyZone)) return true; } return false; } + + public bool HasFlag(AreaFlags flag) { return Flags[0].HasAnyFlag((uint)flag); } + + public bool HasFlag2(AreaFlags2 flag) { return Flags[1].HasAnyFlag((uint)flag); } } public sealed class AreaTriggerRecord diff --git a/Source/Game/Entities/Player/Player.Map.cs b/Source/Game/Entities/Player/Player.Map.cs index 349a2a9b9..3a6d69344 100644 --- a/Source/Game/Entities/Player/Player.Map.cs +++ b/Source/Game/Entities/Player/Player.Map.cs @@ -112,7 +112,7 @@ namespace Game.Entities AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(newArea); bool oldFFAPvPArea = pvpInfo.IsInFFAPvPArea; - pvpInfo.IsInFFAPvPArea = area != null && area.Flags.HasFlag(AreaFlags.Arena); + pvpInfo.IsInFFAPvPArea = area != null && area.HasFlag(AreaFlags.Arena); UpdatePvPState(true); // check if we were in ffa arena and we left @@ -140,7 +140,7 @@ namespace Game.Entities RemovePvpFlag(UnitPVPStateFlags.Sanctuary); AreaFlags areaRestFlag = (GetTeam() == Team.Alliance) ? AreaFlags.RestZoneAlliance : AreaFlags.RestZoneHorde; - if (area != null && area.Flags.HasFlag(areaRestFlag)) + if (area != null && area.HasFlag(areaRestFlag)) _restMgr.SetRestFlag(RestFlag.FactionArea); else _restMgr.RemoveRestFlag(RestFlag.FactionArea); @@ -192,7 +192,7 @@ namespace Game.Entities UpdateHostileAreaState(zone); - if (zone.Flags.HasFlag(AreaFlags.Capital)) // Is in a capital city + if (zone.HasFlag(AreaFlags.Capital)) // Is in a capital city { if (!pvpInfo.IsInHostileArea || zone.IsSanctuary()) _restMgr.SetRestFlag(RestFlag.City); @@ -237,17 +237,17 @@ namespace Game.Entities if (area.IsSanctuary()) // sanctuary and arena cannot be overriden pvpInfo.IsInHostileArea = false; - else if (area.Flags.HasFlag(AreaFlags.Arena)) + else if (area.HasFlag(AreaFlags.Arena)) pvpInfo.IsInHostileArea = true; else if (overrideZonePvpType == ZonePVPTypeOverride.None) { if (area != null) { - if (InBattleground() || area.Flags.HasFlag(AreaFlags.Combat) || (area.PvpCombatWorldStateID != -1 && Global.WorldMgr.GetWorldState((WorldStates)area.PvpCombatWorldStateID) != 0)) + if (InBattleground() || area.HasFlag(AreaFlags.Combat) || (area.PvpCombatWorldStateID != -1 && Global.WorldMgr.GetWorldState((WorldStates)area.PvpCombatWorldStateID) != 0)) pvpInfo.IsInHostileArea = true; - else if (Global.WorldMgr.IsPvPRealm() || area.Flags.HasFlag(AreaFlags.Unk3)) + else if (Global.WorldMgr.IsPvPRealm() || area.HasFlag(AreaFlags.Unk3)) { - if (area.Flags.HasFlag(AreaFlags.ContestedArea)) + if (area.HasFlag(AreaFlags.ContestedArea)) pvpInfo.IsInHostileArea = Global.WorldMgr.IsPvPRealm(); else { diff --git a/Source/Game/Entities/Player/Player.PvP.cs b/Source/Game/Entities/Player/Player.PvP.cs index 49ff2fb45..c046213ea 100644 --- a/Source/Game/Entities/Player/Player.PvP.cs +++ b/Source/Game/Entities/Player/Player.PvP.cs @@ -511,7 +511,7 @@ namespace Game.Entities if (area.IsSanctuary()) return false; - if (area.Flags.HasFlag(AreaFlags.Arena)) + if (area.HasFlag(AreaFlags.Arena)) return true; if (Global.BattleFieldMgr.GetBattlefieldToZoneId(area.Id) != null) diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 883c43b6f..5ccae5f8a 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -2581,10 +2581,10 @@ namespace Game.Entities public bool CanJoinConstantChannelInZone(ChatChannelsRecord channel, AreaTableRecord zone) { - if (channel.Flags.HasAnyFlag(ChannelDBCFlags.ZoneDep) && zone.Flags.HasFlag(AreaFlags.ArenaInstance)) + if (channel.Flags.HasAnyFlag(ChannelDBCFlags.ZoneDep) && zone.HasFlag(AreaFlags.ArenaInstance)) return false; - if (channel.Flags.HasAnyFlag(ChannelDBCFlags.CityOnly) && !zone.Flags.HasFlag(AreaFlags.Capital)) + if (channel.Flags.HasAnyFlag(ChannelDBCFlags.CityOnly) && !zone.HasFlag(AreaFlags.Capital)) return false; if (channel.Flags.HasAnyFlag(ChannelDBCFlags.GuildReq) && GetGuildId() != 0) @@ -4527,7 +4527,7 @@ namespace Game.Entities AreaTableRecord zone = CliDB.AreaTableStorage.LookupByKey(GetAreaId()); // Such zones are considered unreachable as a ghost and the player must be automatically revived - if ((!IsAlive() && zone != null && zone.Flags.HasFlag(AreaFlags.NeedFly)) || GetTransport() != null || GetPositionZ() < GetMap().GetMinHeight(GetPhaseShift(), GetPositionX(), GetPositionY())) + if ((!IsAlive() && zone != null && zone.HasFlag(AreaFlags.NeedFly)) || GetTransport() != null || GetPositionZ() < GetMap().GetMinHeight(GetPhaseShift(), GetPositionX(), GetPositionY())) { ResurrectPlayer(0.5f); SpawnCorpseBones(); @@ -5057,7 +5057,7 @@ namespace Game.Entities if (area == null || !IsFriendlyArea(area)) return false; - return area.Flags2.HasFlag(AreaFlags2.CanEnableWarMode); + return area.HasFlag2(AreaFlags2.CanEnableWarMode); } // Used in triggers for check "Only to targets that grant experience or honor" req diff --git a/Source/Game/Handlers/BattleGroundHandler.cs b/Source/Game/Handlers/BattleGroundHandler.cs index 04aba6d8a..e18604990 100644 --- a/Source/Game/Handlers/BattleGroundHandler.cs +++ b/Source/Game/Handlers/BattleGroundHandler.cs @@ -648,7 +648,7 @@ namespace Game } AreaTableRecord atEntry = CliDB.AreaTableStorage.LookupByKey(GetPlayer().GetAreaId()); - if (atEntry == null || !atEntry.Flags.HasFlag(AreaFlags.CanHearthAndResurrect)) + if (atEntry == null || !atEntry.HasFlag(AreaFlags.CanHearthAndResurrect)) return; GetPlayer().BuildPlayerRepop(); diff --git a/Source/Game/Maps/Map.cs b/Source/Game/Maps/Map.cs index 1a4dbbe13..216d54d65 100644 --- a/Source/Game/Maps/Map.cs +++ b/Source/Game/Maps/Map.cs @@ -2069,7 +2069,7 @@ namespace Game.Maps data.AreaId = gridAreaId; var areaEntry1 = CliDB.AreaTableStorage.LookupByKey(data.AreaId); if (areaEntry1 != null) - data.outdoors = (areaEntry1.Flags & (AreaFlags.Inside | AreaFlags.Outside)) != AreaFlags.Inside; + data.outdoors = ((AreaFlags)areaEntry1.Flags[0] & (AreaFlags.Inside | AreaFlags.Outside)) != AreaFlags.Inside; } if (data.AreaId == 0) diff --git a/Source/Game/Spells/Spell.cs b/Source/Game/Spells/Spell.cs index 5271f1969..92ac8079b 100644 --- a/Source/Game/Spells/Spell.cs +++ b/Source/Game/Spells/Spell.cs @@ -5347,7 +5347,7 @@ namespace Game.Spells BattleField Bf = Global.BattleFieldMgr.GetBattlefieldToZoneId(m_originalCaster.GetZoneId()); var area = CliDB.AreaTableStorage.LookupByKey(m_originalCaster.GetAreaId()); if (area != null) - if (area.Flags.HasFlag(AreaFlags.NoFlyZone) || (Bf != null && !Bf.CanFlyIn())) + if (area.HasFlag(AreaFlags.NoFlyZone) || (Bf != null && !Bf.CanFlyIn())) return SpellCastResult.NotHere; } break; diff --git a/Source/Game/Spells/SpellEffects.cs b/Source/Game/Spells/SpellEffects.cs index 576caf02d..e1cd93e7c 100644 --- a/Source/Game/Spells/SpellEffects.cs +++ b/Source/Game/Spells/SpellEffects.cs @@ -3224,14 +3224,14 @@ namespace Game.Spells // Players can only fight a duel in zones with this flag AreaTableRecord casterAreaEntry = CliDB.AreaTableStorage.LookupByKey(caster.GetAreaId()); - if (casterAreaEntry != null && !casterAreaEntry.Flags.HasFlag(AreaFlags.AllowDuels)) + if (casterAreaEntry != null && !casterAreaEntry.HasFlag(AreaFlags.AllowDuels)) { SendCastResult(SpellCastResult.NoDueling); // Dueling isn't allowed here return; } AreaTableRecord targetAreaEntry = CliDB.AreaTableStorage.LookupByKey(target.GetAreaId()); - if (targetAreaEntry != null && !targetAreaEntry.Flags.HasFlag(AreaFlags.AllowDuels)) + if (targetAreaEntry != null && !targetAreaEntry.HasFlag(AreaFlags.AllowDuels)) { SendCastResult(SpellCastResult.NoDueling); // Dueling isn't allowed here return;