diff --git a/Projects/UOContent.Tests/Tests/Mobiles/AI/AIDeactivationTests.cs b/Projects/UOContent.Tests/Tests/Mobiles/AI/AIDeactivationTests.cs new file mode 100644 index 000000000..fc3f82aa8 --- /dev/null +++ b/Projects/UOContent.Tests/Tests/Mobiles/AI/AIDeactivationTests.cs @@ -0,0 +1,33 @@ +using Server; +using Xunit; + +namespace UOContent.Tests.Mobiles.AI; + +[Collection("Sequential UOContent Tests")] +public class AIDeactivationTests +{ + [Theory] + [InlineData(false, false)] + [InlineData(false, true)] + [InlineData(true, false)] + [InlineData(true, true)] + public void Deactivate_WithoutWorldMap_StopsTimer(bool internalMap, bool controlled) + { + var creature = new PetTestStub(); + try + { + creature.Controlled = controlled; + creature.Map = internalMap ? Map.Internal : null; + creature.AIObject.Activate(); + Assert.True(creature.AIObject.AITimer.Running); + + creature.AIObject.Deactivate(); + + Assert.False(creature.AIObject.AITimer.Running); + } + finally + { + creature.Delete(); + } + } +} diff --git a/Projects/UOContent/Mobiles/AI/BaseAI/BaseAI.cs b/Projects/UOContent/Mobiles/AI/BaseAI/BaseAI.cs index e7b16be9c..e762c5c61 100644 --- a/Projects/UOContent/Mobiles/AI/BaseAI/BaseAI.cs +++ b/Projects/UOContent/Mobiles/AI/BaseAI/BaseAI.cs @@ -1102,7 +1102,7 @@ public abstract partial class BaseAI public virtual void Deactivate() { - if (Mobile.Map == Map.Internal || !Mobile.Controlled && !Mobile.Map.GetSector(Mobile.Location).Active) + if (Mobile.Map == null || Mobile.Map == Map.Internal || !Mobile.Controlled && !Mobile.Map.GetSector(Mobile.Location).Active) { AITimer.Stop(); }