diff options
Diffstat (limited to 'src/server')
| -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;  | 
