diff options
author | Matan Shukry <matanshukry@gmail.com> | 2021-06-06 21:06:21 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-06-06 21:06:21 +0200 |
commit | 626c8f5de12daac6b88989807eba65d3d7a061dd (patch) | |
tree | 955239fff2cd94e0b7a8b555405afa6c3d2de7ce /src | |
parent | 5134622a75bdc8ffafb0d86e0c0275d731385d0c (diff) |
Core/Player: Add helper function to determine if war mode can be enabled in area
Diffstat (limited to 'src')
-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; |