Core/Areas: Update AreaFlags

Port From (https://github.com/TrinityCore/TrinityCore/commit/f8f1c3b4f0ca631e76101f8492b9688c6d2dca01)
This commit is contained in:
hondacrx
2023-05-23 08:07:33 -04:00
parent 55148a9ca4
commit ef250e0400
13 changed files with 95 additions and 95 deletions
+4 -6
View File
@@ -1460,9 +1460,8 @@ namespace Game.Achievements
{
uint zoneId = referencePlayer.GetAreaId();
AreaTableRecord areaEntry = CliDB.AreaTableStorage.LookupByKey(zoneId);
if (areaEntry != null)
if (areaEntry.HasFlag(AreaFlags.Unk9))
zoneId = areaEntry.ParentAreaID;
if (areaEntry != null && areaEntry.GetFlags().HasFlag(AreaFlags.IsSubzone))
zoneId = areaEntry.ParentAreaID;
if (zoneId != reqValue)
return false;
break;
@@ -1473,9 +1472,8 @@ namespace Game.Achievements
return false;
uint zoneId = refe.GetAreaId();
AreaTableRecord areaEntry = CliDB.AreaTableStorage.LookupByKey(zoneId);
if (areaEntry != null)
if (areaEntry.HasFlag(AreaFlags.Unk9))
zoneId = areaEntry.ParentAreaID;
if (areaEntry != null && areaEntry.GetFlags().HasFlag(AreaFlags.IsSubzone))
zoneId = areaEntry.ParentAreaID;
if (zoneId != reqValue)
return false;
break;
+5 -16
View File
@@ -131,25 +131,14 @@ namespace Game.DataStorage
public uint[] Flags = new uint[2];
public ushort[] LiquidTypeID = new ushort[4];
public AreaFlags GetFlags() { return (AreaFlags)Flags[0]; }
public AreaFlags2 GetFlags2() { return (AreaFlags2)Flags[1]; }
public AreaMountFlags GetMountFlags() { return (AreaMountFlags)MountFlags; }
public bool IsSanctuary()
{
return HasFlag(AreaFlags.Sanctuary);
return GetFlags().HasFlag(AreaFlags.NoPvP);
}
public bool IsFlyable()
{
if (HasFlag(AreaFlags.Outland))
{
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
+8 -8
View File
@@ -97,7 +97,7 @@ namespace Game.Entities
AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(newArea);
bool oldFFAPvPArea = pvpInfo.IsInFFAPvPArea;
pvpInfo.IsInFFAPvPArea = area != null && area.HasFlag(AreaFlags.Arena);
pvpInfo.IsInFFAPvPArea = area != null && area.GetFlags().HasFlag(AreaFlags.FreeForAllPvP);
UpdatePvPState(true);
// check if we were in ffa arena and we left
@@ -124,8 +124,8 @@ namespace Game.Entities
else
RemovePvpFlag(UnitPVPStateFlags.Sanctuary);
AreaFlags areaRestFlag = (GetTeam() == Team.Alliance) ? AreaFlags.RestZoneAlliance : AreaFlags.RestZoneHorde;
if (area != null && area.HasFlag(areaRestFlag))
AreaFlags areaRestFlag = (GetTeam() == Team.Alliance) ? AreaFlags.AllianceResting : AreaFlags.HordeResting;
if (area != null && area.GetFlags().HasFlag(areaRestFlag))
_restMgr.SetRestFlag(RestFlag.FactionArea);
else
_restMgr.RemoveRestFlag(RestFlag.FactionArea);
@@ -181,7 +181,7 @@ namespace Game.Entities
UpdateHostileAreaState(zone);
if (zone.HasFlag(AreaFlags.Capital)) // Is in a capital city
if (zone.GetFlags().HasFlag(AreaFlags.LinkedChat)) // Is in a capital city
{
if (!pvpInfo.IsInHostileArea || zone.IsSanctuary())
_restMgr.SetRestFlag(RestFlag.City);
@@ -226,17 +226,17 @@ namespace Game.Entities
if (area.IsSanctuary()) // sanctuary and arena cannot be overriden
pvpInfo.IsInHostileArea = false;
else if (area.HasFlag(AreaFlags.Arena))
else if (area.GetFlags().HasFlag(AreaFlags.FreeForAllPvP))
pvpInfo.IsInHostileArea = true;
else if (overrideZonePvpType == ZonePVPTypeOverride.None)
{
if (area != null)
{
if (InBattleground() || area.HasFlag(AreaFlags.Combat) || (area.PvpCombatWorldStateID != -1 && Global.WorldStateMgr.GetValue(area.PvpCombatWorldStateID, GetMap()) != 0))
if (InBattleground() || area.GetFlags().HasFlag(AreaFlags.CombatZone) || (area.PvpCombatWorldStateID != -1 && Global.WorldStateMgr.GetValue(area.PvpCombatWorldStateID, GetMap()) != 0))
pvpInfo.IsInHostileArea = true;
else if (IsWarModeLocalActive() || area.HasFlag(AreaFlags.Unk3))
else if (IsWarModeLocalActive() || area.GetFlags().HasFlag(AreaFlags.EnemiesPvPFlagged))
{
if (area.HasFlag(AreaFlags.ContestedArea))
if (area.GetFlags().HasFlag(AreaFlags.Contested))
pvpInfo.IsInHostileArea = IsWarModeLocalActive();
else
{
+1 -1
View File
@@ -356,7 +356,7 @@ namespace Game.Entities
if (area.IsSanctuary())
return false;
if (area.HasFlag(AreaFlags.Arena))
if (area.GetFlags().HasFlag(AreaFlags.FreeForAllPvP))
return true;
if (Global.BattleFieldMgr.IsWorldPvpArea(area.Id))
+4 -4
View File
@@ -2738,10 +2738,10 @@ namespace Game.Entities
public bool CanJoinConstantChannelInZone(ChatChannelsRecord channel, AreaTableRecord zone)
{
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.ZoneDep) && zone.HasFlag(AreaFlags.ArenaInstance))
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.ZoneDep) && zone.GetFlags().HasFlag(AreaFlags.NoChatChannels))
return false;
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.CityOnly) && !zone.HasFlag(AreaFlags.Capital))
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.CityOnly) && !zone.GetFlags().HasFlag(AreaFlags.AllowTradeChannel))
return false;
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.GuildReq) && GetGuildId() != 0)
@@ -4200,7 +4200,7 @@ namespace Game.Entities
bool shouldResurrect = false;
// Such zones are considered unreachable as a ghost and the player must be automatically revived
if ((!IsAlive() && zone != null && zone.HasFlag(AreaFlags.NeedFly)) || GetTransport() != null || GetPositionZ() < GetMap().GetMinHeight(GetPhaseShift(), GetPositionX(), GetPositionY()))
if ((!IsAlive() && zone != null && zone.GetFlags().HasFlag(AreaFlags.NoGhostOnRelease)) || GetTransport() != null || GetPositionZ() < GetMap().GetMinHeight(GetPhaseShift(), GetPositionX(), GetPositionY()))
{
shouldResurrect = true;
SpawnCorpseBones();
@@ -4787,7 +4787,7 @@ namespace Game.Entities
do
{
if ((area.Flags[1] & (uint)AreaFlags2.CanEnableWarMode) != 0)
if (area.GetFlags2().HasFlag(AreaFlags2.AllowWarModeToggle))
return true;
area = CliDB.AreaTableStorage.LookupByKey(area.ParentAreaID);
+4 -4
View File
@@ -782,13 +782,13 @@ namespace Game.Entities
if (!mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.IgnoreRestrictions))
{
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Ground) && !mountFlags.HasAnyFlag(AreaMountFlags.GroundAllowed))
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Ground) && !mountFlags.HasFlag(AreaMountFlags.AllowGroundMounts))
continue;
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Flying) && !mountFlags.HasAnyFlag(AreaMountFlags.FlyingAllowed))
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Flying) && !mountFlags.HasFlag(AreaMountFlags.AllowFlyingMounts))
continue;
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Float) && !mountFlags.HasAnyFlag(AreaMountFlags.FloatAllowed))
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Float) && !mountFlags.HasFlag(AreaMountFlags.AllowSurfaceSwimmingMounts))
continue;
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Underwater) && !mountFlags.HasAnyFlag(AreaMountFlags.UnderwaterAllowed))
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Underwater) && !mountFlags.HasFlag(AreaMountFlags.AllowUnderwaterSwimmingMounts))
continue;
}
+1 -1
View File
@@ -682,7 +682,7 @@ namespace Game
}
AreaTableRecord atEntry = CliDB.AreaTableStorage.LookupByKey(GetPlayer().GetAreaId());
if (atEntry == null || !atEntry.HasFlag(AreaFlags.CanHearthAndResurrect))
if (atEntry == null || !atEntry.GetFlags().HasFlag(AreaFlags.AllowHearthAndRessurectFromArea))
return;
GetPlayer().BuildPlayerRepop();
+1 -1
View File
@@ -479,7 +479,7 @@ namespace Game.Maps
data.AreaId = gridAreaId;
var areaEntry1 = CliDB.AreaTableStorage.LookupByKey(data.AreaId);
if (areaEntry1 != null)
data.outdoors = ((AreaFlags)areaEntry1.Flags[0] & (AreaFlags.Inside | AreaFlags.Outside)) != AreaFlags.Inside;
data.outdoors = areaEntry1.GetFlags().HasFlag(AreaFlags.ForceOutdoors) || !areaEntry1.GetFlags().HasFlag(AreaFlags.ForceIndoors);
}
if (data.AreaId == 0)
+3 -5
View File
@@ -5717,11 +5717,9 @@ namespace Game.Spells
// allow always ghost flight spells
if (m_originalCaster != null && m_originalCaster.IsTypeId(TypeId.Player) && m_originalCaster.IsAlive())
{
BattleField Bf = Global.BattleFieldMgr.GetBattlefieldToZoneId(m_originalCaster.GetMap(), m_originalCaster.GetZoneId());
var area = CliDB.AreaTableStorage.LookupByKey(m_originalCaster.GetAreaId());
if (area != null)
if (area.HasFlag(AreaFlags.NoFlyZone) || (Bf != null && !Bf.CanFlyIn()))
return SpellCastResult.NotHere;
BattleField battleField = Global.BattleFieldMgr.GetBattlefieldToZoneId(m_originalCaster.GetMap(), m_originalCaster.GetZoneId());
if (battleField != null && !battleField.CanFlyIn())
return SpellCastResult.NotHere;
}
break;
}
+2 -2
View File
@@ -2827,14 +2827,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.HasFlag(AreaFlags.AllowDuels))
if (casterAreaEntry != null && !casterAreaEntry.GetFlags().HasFlag(AreaFlags.AllowDueling))
{
SendCastResult(SpellCastResult.NoDueling); // Dueling isn't allowed here
return;
}
AreaTableRecord targetAreaEntry = CliDB.AreaTableStorage.LookupByKey(target.GetAreaId());
if (targetAreaEntry != null && !targetAreaEntry.HasFlag(AreaFlags.AllowDuels))
if (targetAreaEntry != null && !targetAreaEntry.GetFlags().HasFlag(AreaFlags.AllowDueling))
{
SendCastResult(SpellCastResult.NoDueling); // Dueling isn't allowed here
return;
+4 -4
View File
@@ -842,19 +842,19 @@ namespace Game.Spells
// continent limitation (virtual continent)
if (HasAttribute(SpellAttr4.OnlyFlyingAreas))
{
uint mountFlags = 0;
AreaMountFlags mountFlags = 0;
if (player && player.HasAuraType(AuraType.MountRestrictions))
{
foreach (AuraEffect auraEffect in player.GetAuraEffectsByType(AuraType.MountRestrictions))
mountFlags |= (uint)auraEffect.GetMiscValue();
mountFlags |= (AreaMountFlags)auraEffect.GetMiscValue();
}
else
{
AreaTableRecord areaTable = CliDB.AreaTableStorage.LookupByKey(area_id);
if (areaTable != null)
mountFlags = areaTable.MountFlags;
mountFlags = areaTable.GetMountFlags();
}
if (!Convert.ToBoolean(mountFlags & (uint)AreaMountFlags.FlyingAllowed))
if (!mountFlags.HasFlag(AreaMountFlags.AllowFlyingMounts))
return SpellCastResult.IncorrectArea;
if (player)