aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp30
-rw-r--r--src/server/game/Entities/Player/Player.h6
2 files changed, 36 insertions, 0 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index b128fcfd70f..89ddc54146c 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -28167,6 +28167,27 @@ bool Player::MeetPlayerCondition(uint32 conditionId) const
return true;
}
+bool Player::IsInFriendlyArea() const
+{
+ if (AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(GetAreaId()))
+ return IsFriendlyArea(areaEntry);
+ return false;
+}
+
+bool Player::IsFriendlyArea(AreaTableEntry const* areaEntry) const
+{
+ ASSERT(areaEntry != nullptr);
+
+ FactionTemplateEntry const* factionTemplate = GetFactionTemplateEntry();
+ if (!factionTemplate)
+ return false;
+
+ if (!(factionTemplate->FriendGroup & areaEntry->FactionGroupMask))
+ return false;
+
+ return true;
+}
+
std::string Player::GetMapAreaAndZoneString() const
{
uint32 areaId = GetAreaId();
@@ -28746,3 +28767,12 @@ void Player::UpdateAverageItemLevelEquipped()
totalItemLevel /= 16.0;
SetAverageItemLevelEquipped(totalItemLevel);
}
+
+bool Player::CanEnableWarModeInArea() const
+{
+ AreaTableEntry const* area = sAreaTableStore.LookupEntry(GetAreaId());
+ if (!area || !IsFriendlyArea(area))
+ return false;
+
+ return area->Flags[1] & AREA_FLAG_2_CAN_ENABLE_WAR_MODE;
+}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 671b550a722..e9cf9ed7fac 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -476,6 +476,7 @@ enum PlayerLocalFlags
PLAYER_LOCAL_FLAG_USING_PARTY_GARRISON = 0x00000100,
PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED = 0x00000200,
PLAYER_LOCAL_FLAG_CAN_VISIT_PARTY_GARRISON = 0x00000400,
+ PLAYER_LOCAL_FLAG_WAR_MODE = 0x00000800,
PLAYER_LOCAL_FLAG_ACCOUNT_SECURED = 0x00001000, // Script_IsAccountSecured
PLAYER_LOCAL_FLAG_OVERRIDE_TRANSPORT_SERVER_TIME= 0x00008000,
PLAYER_LOCAL_FLAG_MENTOR_RESTRICTED = 0x00020000,
@@ -2675,6 +2676,11 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void AddAuraVision(PlayerFieldByte2Flags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), flags); }
void RemoveAuraVision(PlayerFieldByte2Flags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), flags); }
+ bool IsInFriendlyArea() const;
+ bool IsFriendlyArea(AreaTableEntry const* inArea) const;
+
+ bool CanEnableWarModeInArea() const;
+
UF::UpdateField<UF::PlayerData, 0, TYPEID_PLAYER> m_playerData;
UF::UpdateField<UF::ActivePlayerData, 0, TYPEID_ACTIVE_PLAYER> m_activePlayerData;