diff --git a/Source/Framework/Constants/ConditionConst.cs b/Source/Framework/Constants/ConditionConst.cs index f642bdf15..013f440d3 100644 --- a/Source/Framework/Constants/ConditionConst.cs +++ b/Source/Framework/Constants/ConditionConst.cs @@ -119,7 +119,8 @@ namespace Framework.Constants public enum InstanceInfo { Data = 0, - Data64, - BossState + GuidData, + BossState, + Data64 } } diff --git a/Source/Game/Conditions/Condition.cs b/Source/Game/Conditions/Condition.cs index 3c487640f..3fd6c316f 100644 --- a/Source/Game/Conditions/Condition.cs +++ b/Source/Game/Conditions/Condition.cs @@ -38,9 +38,10 @@ namespace Game.Conditions break; case ConditionTypes.InstanceInfo: { - if (map.IsDungeon()) + InstanceMap instanceMap = map.ToInstanceMap(); + if (instanceMap != null) { - InstanceScript instance = ((InstanceMap)map).GetInstanceScript(); + InstanceScript instance = instanceMap.GetInstanceScript(); if (instance != null) { switch ((InstanceInfo)ConditionValue3) @@ -48,9 +49,6 @@ namespace Game.Conditions case InstanceInfo.Data: condMeets = instance.GetData(ConditionValue1) == ConditionValue2; break; - //case INSTANCE_INFO_GUID_DATA: - // condMeets = instance->GetGuidData(ConditionValue1) == ObjectGuid(uint64(ConditionValue2)); - // break; case InstanceInfo.BossState: condMeets = instance.GetBossState(ConditionValue1) == (EncounterState)ConditionValue2; break; @@ -63,6 +61,26 @@ namespace Game.Conditions } } } + else + { + BattlegroundMap bgMap = map.ToBattlegroundMap(); + if (bgMap != null) + { + ZoneScript zoneScript = bgMap.GetBG(); + switch ((InstanceInfo)ConditionValue3) + { + case InstanceInfo.Data: + condMeets = zoneScript.GetData(ConditionValue1) == ConditionValue2; + break; + case InstanceInfo.Data64: + condMeets = zoneScript.GetData64(ConditionValue1) == ConditionValue2; + break; + default: + condMeets = false; + break; + } + } + } break; } case ConditionTypes.Mapid: @@ -657,7 +675,7 @@ namespace Game.Conditions mConditionMap = map; mLastFailedCondition = null; } - + public WorldObject[] mConditionTargets = new WorldObject[SharedConst.MaxConditionTargets]; // an array of targets available for conditions public Map mConditionMap; public Condition mLastFailedCondition; diff --git a/Source/Game/Conditions/ConditionManager.cs b/Source/Game/Conditions/ConditionManager.cs index 51e1841c4..329e86380 100644 --- a/Source/Game/Conditions/ConditionManager.cs +++ b/Source/Game/Conditions/ConditionManager.cs @@ -1784,13 +1784,19 @@ namespace Game case ConditionTypes.PetType: if (cond.ConditionValue1 >= (1 << (int)PetType.Max)) { - Log.outError(LogFilter.Sql, "{0} has non-existing pet type {1}, skipped.", cond.ToString(true), cond.ConditionValue1); + Log.outError(LogFilter.Sql, $"{cond.ToString(true)} has non-existing pet type {cond.ConditionValue1}, skipped."); + return false; + } + break; + case ConditionTypes.InstanceInfo: + if (cond.ConditionValue3 == (uint)InstanceInfo.GuidData) + { + Log.outError(LogFilter.Sql, $"{cond.ToString(true)} has unsupported ConditionValue3 {cond.ConditionValue3} (INSTANCE_INFO_GUID_DATA), skipped."); return false; } break; case ConditionTypes.Alive: case ConditionTypes.Areaid: - case ConditionTypes.InstanceInfo: case ConditionTypes.TerrainSwap: case ConditionTypes.InWater: case ConditionTypes.Charmed: