diff options
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 30 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 6 |
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; |