Fixed wrong area flags, Fixes resting in city.

This commit is contained in:
hondacrx
2021-10-15 18:05:40 -04:00
parent 18033381b9
commit 5994c4e5fb
9 changed files with 27 additions and 24 deletions
+2 -2
View File
@@ -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;
+8 -5
View File
@@ -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
+7 -7
View File
@@ -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
{
+1 -1
View File
@@ -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)
+4 -4
View File
@@ -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
+1 -1
View File
@@ -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();
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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;
+2 -2
View File
@@ -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;