From febab9baed7782df6453cda9bffc1b2ecaeddba9 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Thu, 1 Feb 2024 10:22:15 -0500 Subject: [PATCH] Core/Misc: Use DB2Manager::IsInArea for area-related criterias and conditions Port From (https://github.com/TrinityCore/TrinityCore/commit/9f68215bb61e46265c6667b6c71f0d2376835686) --- Source/Game/Achievements/CriteriaHandler.cs | 26 +++++++-------------- Source/Game/Conditions/Condition.cs | 2 +- Source/Game/Conditions/ConditionManager.cs | 2 +- 3 files changed, 11 insertions(+), 19 deletions(-) diff --git a/Source/Game/Achievements/CriteriaHandler.cs b/Source/Game/Achievements/CriteriaHandler.cs index 59f2b0f94..8185a1ea5 100644 --- a/Source/Game/Achievements/CriteriaHandler.cs +++ b/Source/Game/Achievements/CriteriaHandler.cs @@ -1149,7 +1149,7 @@ namespace Game.Achievements break; case CriteriaType.PVPKillInArea: case CriteriaType.EnterTopLevelArea: - if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset) + if (miscValue1 == 0 || !Global.DB2Mgr.IsInArea((uint)miscValue1, criteria.Entry.Asset)) return false; break; case CriteriaType.CurrencyGained: @@ -1313,9 +1313,7 @@ namespace Game.Achievements break; case ModifierTreeType.PlayerIsInArea: // 17 { - uint zoneId, areaId; - referencePlayer.GetZoneAndAreaId(out zoneId, out areaId); - if (zoneId != reqValue && areaId != reqValue) + if (!Global.DB2Mgr.IsInArea(referencePlayer.GetAreaId(), reqValue)) return false; break; } @@ -1323,9 +1321,7 @@ namespace Game.Achievements { if (refe == null) return false; - uint zoneId, areaId; - refe.GetZoneAndAreaId(out zoneId, out areaId); - if (zoneId != reqValue && areaId != reqValue) + if (!Global.DB2Mgr.IsInArea(refe.GetAreaId(), reqValue)) return false; break; } @@ -3301,11 +3297,9 @@ namespace Game.Achievements case ModifierTreeType.PlayerIsInAreaGroup: // 298 { var areas = Global.DB2Mgr.GetAreasForGroup(reqValue); - AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(referencePlayer.GetAreaId()); - if (area != null) - foreach (uint areaInGroup in areas) - if (areaInGroup == area.Id || areaInGroup == area.ParentAreaID) - return true; + foreach (uint areaInGroup in areas) + if (Global.DB2Mgr.IsInArea(referencePlayer.GetAreaId(), areaInGroup)) + return true; return false; } case ModifierTreeType.TargetIsInAreaGroup: // 299 @@ -3314,11 +3308,9 @@ namespace Game.Achievements return false; var areas = Global.DB2Mgr.GetAreasForGroup(reqValue); - var area = CliDB.AreaTableStorage.LookupByKey(refe.GetAreaId()); - if (area != null) - foreach (uint areaInGroup in areas) - if (areaInGroup == area.Id || areaInGroup == area.ParentAreaID) - return true; + foreach (uint areaInGroup in areas) + if (Global.DB2Mgr.IsInArea(refe.GetAreaId(), areaInGroup)) + return true; return false; } case ModifierTreeType.PlayerIsInChromieTime: // 300 diff --git a/Source/Game/Conditions/Condition.cs b/Source/Game/Conditions/Condition.cs index 1e81e7f42..3c487640f 100644 --- a/Source/Game/Conditions/Condition.cs +++ b/Source/Game/Conditions/Condition.cs @@ -196,7 +196,7 @@ namespace Game.Conditions } break; case ConditionTypes.Areaid: - condMeets = obj.GetAreaId() == ConditionValue1; + condMeets = Global.DB2Mgr.IsInArea(obj.GetAreaId(), ConditionValue1); break; case ConditionTypes.Spell: if (player != null) diff --git a/Source/Game/Conditions/ConditionManager.cs b/Source/Game/Conditions/ConditionManager.cs index bbac3ea55..51e1841c4 100644 --- a/Source/Game/Conditions/ConditionManager.cs +++ b/Source/Game/Conditions/ConditionManager.cs @@ -2394,7 +2394,7 @@ namespace Game for (var i = 0; i < condition.AreaID.Length; ++i) if (condition.AreaID[i] != 0) - results[i] = player.GetAreaId() == condition.AreaID[i] || player.GetZoneId() == condition.AreaID[i]; + results[i] = Global.DB2Mgr.IsInArea(player.GetAreaId(), condition.AreaID[i]); if (!PlayerConditionLogic(condition.AreaLogic, results)) return false;