Core/Conditions: Allow battleground maps to use CONDITION_INSTANCE_INFO

This commit is contained in:
Shauren
2023-11-05 20:49:05 +01:00
parent 4628622b1b
commit f4e4e62aea
2 changed files with 28 additions and 8 deletions

View File

@@ -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:

View File

@@ -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;