From 869af17b230ebb1cb3370b91c83a4c2086cf8513 Mon Sep 17 00:00:00 2001 From: Hondacrx Date: Wed, 27 Aug 2025 22:06:57 -0400 Subject: [PATCH] Fixes crash with AreaTriggers --- Source/Game/Entities/AreaTrigger/AreaTrigger.cs | 2 +- Source/Game/Entities/Object/Update/UpdateField.cs | 7 +++---- Source/Game/Entities/Unit/Unit.cs | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Source/Game/Entities/AreaTrigger/AreaTrigger.cs b/Source/Game/Entities/AreaTrigger/AreaTrigger.cs index 8453eb710..17a4593e5 100644 --- a/Source/Game/Entities/AreaTrigger/AreaTrigger.cs +++ b/Source/Game/Entities/AreaTrigger/AreaTrigger.cs @@ -1555,7 +1555,7 @@ namespace Game.Entities public override ObjectGuid GetOwnerGUID() { return GetCasterGuid(); } public ObjectGuid GetCasterGuid() { return m_areaTriggerData.Caster; } - public bool HasSplines() { return !_spline.Empty(); } + public bool HasSplines() { return _spline != null && !_spline.Empty(); } public Spline GetSpline() { return _spline; } bool HasOrbit() { return m_areaTriggerData.PathData.Is(); } diff --git a/Source/Game/Entities/Object/Update/UpdateField.cs b/Source/Game/Entities/Object/Update/UpdateField.cs index 1ae4f2df9..56da13a55 100644 --- a/Source/Game/Entities/Object/Update/UpdateField.cs +++ b/Source/Game/Entities/Object/Update/UpdateField.cs @@ -353,15 +353,14 @@ namespace Game.Entities } } - public class VariantUpdateField(int blockBit, int bit, params Type[] types) + public class VariantUpdateField(int blockBit, int bit) { public object _value; - Type[] _types = types; public int BlockBit = blockBit; public int Bit = bit; - public bool Is() { return _types.Contains(typeof(T)); } + public bool Is() { return _value is T; } public T Get() where T : class, new() { @@ -466,7 +465,7 @@ namespace Game.Entities public void ClearChangesMask(VariantUpdateField field) { - if (typeof(IHasChangesMask).IsAssignableFrom(field._value.GetType())) + if (field._value != null && typeof(IHasChangesMask).IsAssignableFrom(field._value.GetType())) ((IHasChangesMask)field._value).ClearChangesMask(); } diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index 2e8714b6f..f4a14c20e 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -856,7 +856,7 @@ namespace Game.Entities public void RemoveAreaTrigger(AuraEffect aurEff) { - foreach (AreaTrigger areaTrigger in m_areaTrigger) + foreach (AreaTrigger areaTrigger in m_areaTrigger.ToList()) { if (areaTrigger.GetAuraEffect() == aurEff) { @@ -868,7 +868,7 @@ namespace Game.Entities public void RemoveAllAreaTriggers(AreaTriggerRemoveReason reason = AreaTriggerRemoveReason.Default) { - foreach (AreaTrigger at in m_areaTrigger) + foreach (AreaTrigger at in m_areaTrigger.ToList()) { if (reason == AreaTriggerRemoveReason.UnitDespawn && at.GetTemplate().ActionSetFlags.HasFlag(AreaTriggerActionSetFlag.DontDespawnWithCreator)) continue;