aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-11-05 20:49:05 +0100
committerShauren <shauren.trinity@gmail.com>2023-11-05 20:49:05 +0100
commitf4e4e62aea79ff478dbc0f2bb2c5ab7f412a8a66 (patch)
tree0da98729d74f48accc70cfa2602462db8fec4917
parent4628622b1ba8904ef1c0d692fe37c5d2f60f1dba (diff)
Core/Conditions: Allow battleground maps to use CONDITION_INSTANCE_INFO
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp34
-rw-r--r--src/server/game/Maps/Map.h2
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;