Core/Player: Add helper function to determine if war mode can be enabled in area
Port From (https://github.com/TrinityCore/TrinityCore/commit/626c8f5de12daac6b88989807eba65d3d7a061dd)
This commit is contained in:
@@ -112,7 +112,7 @@ namespace Game.Entities
|
||||
|
||||
AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(newArea);
|
||||
bool oldFFAPvPArea = pvpInfo.IsInFFAPvPArea;
|
||||
pvpInfo.IsInFFAPvPArea = area != null && area.Flags[0].HasAnyFlag(AreaFlags.Arena);
|
||||
pvpInfo.IsInFFAPvPArea = area != null && area.Flags.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[0].HasAnyFlag(areaRestFlag))
|
||||
if (area != null && area.Flags.HasFlag(areaRestFlag))
|
||||
_restMgr.SetRestFlag(RestFlag.FactionArea);
|
||||
else
|
||||
_restMgr.RemoveRestFlag(RestFlag.FactionArea);
|
||||
@@ -192,7 +192,7 @@ namespace Game.Entities
|
||||
|
||||
UpdateHostileAreaState(zone);
|
||||
|
||||
if (zone.Flags[0].HasAnyFlag(AreaFlags.Capital)) // Is in a capital city
|
||||
if (zone.Flags.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[0].HasAnyFlag(AreaFlags.Arena))
|
||||
else if (area.Flags.HasFlag(AreaFlags.Arena))
|
||||
pvpInfo.IsInHostileArea = true;
|
||||
else if (overrideZonePvpType == ZonePVPTypeOverride.None)
|
||||
{
|
||||
if (area != null)
|
||||
{
|
||||
if (InBattleground() || area.Flags[0].HasAnyFlag(AreaFlags.Combat) || (area.PvpCombatWorldStateID != -1 && Global.WorldMgr.GetWorldState((WorldStates)area.PvpCombatWorldStateID) != 0))
|
||||
if (InBattleground() || area.Flags.HasFlag(AreaFlags.Combat) || (area.PvpCombatWorldStateID != -1 && Global.WorldMgr.GetWorldState((WorldStates)area.PvpCombatWorldStateID) != 0))
|
||||
pvpInfo.IsInHostileArea = true;
|
||||
else if (Global.WorldMgr.IsPvPRealm() || area.Flags[0].HasAnyFlag(AreaFlags.Unk3))
|
||||
else if (Global.WorldMgr.IsPvPRealm() || area.Flags.HasFlag(AreaFlags.Unk3))
|
||||
{
|
||||
if (area.Flags[0].HasAnyFlag(AreaFlags.ContestedArea))
|
||||
if (area.Flags.HasFlag(AreaFlags.ContestedArea))
|
||||
pvpInfo.IsInHostileArea = Global.WorldMgr.IsPvPRealm();
|
||||
else
|
||||
{
|
||||
|
||||
@@ -511,7 +511,7 @@ namespace Game.Entities
|
||||
if (area.IsSanctuary())
|
||||
return false;
|
||||
|
||||
if (area.Flags[0].HasAnyFlag(AreaFlags.Arena))
|
||||
if (area.Flags.HasFlag(AreaFlags.Arena))
|
||||
return true;
|
||||
|
||||
if (Global.BattleFieldMgr.GetBattlefieldToZoneId(area.Id) != null)
|
||||
|
||||
@@ -2575,10 +2575,10 @@ namespace Game.Entities
|
||||
|
||||
public bool CanJoinConstantChannelInZone(ChatChannelsRecord channel, AreaTableRecord zone)
|
||||
{
|
||||
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.ZoneDep) && zone.Flags[0].HasAnyFlag(AreaFlags.ArenaInstance))
|
||||
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.ZoneDep) && zone.Flags.HasFlag(AreaFlags.ArenaInstance))
|
||||
return false;
|
||||
|
||||
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.CityOnly) && !zone.Flags[0].HasAnyFlag(AreaFlags.Capital))
|
||||
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.CityOnly) && !zone.Flags.HasFlag(AreaFlags.Capital))
|
||||
return false;
|
||||
|
||||
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.GuildReq) && GetGuildId() != 0)
|
||||
@@ -4491,7 +4491,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[0].HasAnyFlag(AreaFlags.NeedFly)) || GetTransport() != null || GetPositionZ() < GetMap().GetMinHeight(GetPhaseShift(), GetPositionX(), GetPositionY()))
|
||||
if ((!IsAlive() && zone != null && zone.Flags.HasFlag(AreaFlags.NeedFly)) || GetTransport() != null || GetPositionZ() < GetMap().GetMinHeight(GetPhaseShift(), GetPositionX(), GetPositionY()))
|
||||
{
|
||||
ResurrectPlayer(0.5f);
|
||||
SpawnCorpseBones();
|
||||
@@ -4992,6 +4992,38 @@ namespace Game.Entities
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IsInFriendlyArea()
|
||||
{
|
||||
var areaEntry = CliDB.AreaTableStorage.LookupByKey(GetAreaId());
|
||||
if (areaEntry != null)
|
||||
return IsFriendlyArea(areaEntry);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsFriendlyArea(AreaTableRecord areaEntry)
|
||||
{
|
||||
Cypher.Assert(areaEntry != null);
|
||||
|
||||
var factionTemplate = GetFactionTemplateEntry();
|
||||
if (factionTemplate == null)
|
||||
return false;
|
||||
|
||||
if ((factionTemplate.FriendGroup & areaEntry.FactionGroupMask) == 0)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CanEnableWarModeInArea()
|
||||
{
|
||||
var area = CliDB.AreaTableStorage.LookupByKey(GetAreaId());
|
||||
if (area == null || !IsFriendlyArea(area))
|
||||
return false;
|
||||
|
||||
return area.Flags2.HasFlag(AreaFlags2.CanEnableWarMode);
|
||||
}
|
||||
|
||||
// Used in triggers for check "Only to targets that grant experience or honor" req
|
||||
public bool IsHonorOrXPTarget(Unit victim)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user