diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-11-05 20:49:05 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-11-05 20:49:05 +0100 |
commit | f4e4e62aea79ff478dbc0f2bb2c5ab7f412a8a66 (patch) | |
tree | 0da98729d74f48accc70cfa2602462db8fec4917 | |
parent | 4628622b1ba8904ef1c0d692fe37c5d2f60f1dba (diff) |
Core/Conditions: Allow battleground maps to use CONDITION_INSTANCE_INFO
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 34 | ||||
-rw-r--r-- | src/server/game/Maps/Map.h | 2 |
2 files changed, 28 insertions, 8 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index e7d439ac7d6..40a3f78bab0 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -19,6 +19,7 @@ #include "AchievementMgr.h" #include "AreaTrigger.h" #include "AreaTriggerDataStore.h" +#include "Battleground.h" #include "BattlePetMgr.h" #include "Containers.h" #include "ConversationDataStore.h" @@ -38,16 +39,16 @@ #include "Map.h" #include "ObjectAccessor.h" #include "ObjectMgr.h" -#include "PhasingHandler.h" #include "Pet.h" +#include "PhasingHandler.h" #include "Player.h" #include "RaceMask.h" #include "Realm.h" #include "ReputationMgr.h" #include "ScriptMgr.h" #include "Spell.h" -#include "SpellAuras.h" #include "SpellAuraEffects.h" +#include "SpellAuras.h" #include "SpellMgr.h" #include "World.h" #include "WorldSession.h" @@ -189,18 +190,15 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const break; case CONDITION_INSTANCE_INFO: { - if (map->IsDungeon()) + if (InstanceMap const* instanceMap = map->ToInstanceMap()) { - if (InstanceScript const* instance = ((InstanceMap*)map)->GetInstanceScript()) + if (InstanceScript const* instance = instanceMap->GetInstanceScript()) { switch (ConditionValue3) { case INSTANCE_INFO_DATA: condMeets = instance->GetData(ConditionValue1) == ConditionValue2; break; - //case INSTANCE_INFO_GUID_DATA: - // condMeets = instance->GetGuidData(ConditionValue1) == ObjectGuid(uint64(ConditionValue2)); - // break; case INSTANCE_INFO_BOSS_STATE: condMeets = instance->GetBossState(ConditionValue1) == EncounterState(ConditionValue2); break; @@ -213,6 +211,22 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const } } } + else if (BattlegroundMap const* bgMap = map->ToBattlegroundMap()) + { + ZoneScript const* zoneScript = bgMap->GetBG(); + switch (ConditionValue3) + { + case INSTANCE_INFO_DATA: + condMeets = zoneScript->GetData(ConditionValue1) == ConditionValue2; + break; + case INSTANCE_INFO_DATA64: + condMeets = zoneScript->GetData64(ConditionValue1) == ConditionValue2; + break; + default: + condMeets = false; + break; + } + } break; } case CONDITION_MAPID: @@ -2698,6 +2712,12 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) const } break; case CONDITION_INSTANCE_INFO: + if (cond->ConditionValue3 == INSTANCE_INFO_GUID_DATA) + { + TC_LOG_ERROR("sql.sql", "{} has unsupported ConditionValue3 {} (INSTANCE_INFO_GUID_DATA), skipped.", cond->ToString(true), cond->ConditionValue3); + return false; + } + break; case CONDITION_AREAID: case CONDITION_ALIVE: case CONDITION_IN_WATER: diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 6cd97bb5d4b..425e7dfcd23 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -891,7 +891,7 @@ class TC_GAME_API BattlegroundMap : public Map void RemoveAllPlayers() override; virtual void InitVisibilityDistance() override; - Battleground* GetBG() { return m_bg; } + Battleground* GetBG() const { return m_bg; } void SetBG(Battleground* bg) { m_bg = bg; } private: Battleground* m_bg; |