From 01292b89461e70704ec361ba7b433a53d6361e20 Mon Sep 17 00:00:00 2001 From: winklecrux <36464580+akagibbus@users.noreply.github.com> Date: Thu, 22 Jan 2026 22:01:23 +1300 Subject: [PATCH 1/2] Check combat state in isAggressive for dialogue filters --- apps/openmw/mwmechanics/mechanicsmanagerimp.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp index 856f5ffcf9..cd3f74bad5 100644 --- a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp +++ b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp @@ -1864,6 +1864,10 @@ namespace MWMechanics bool MechanicsManager::isAggressive(const MWWorld::Ptr& ptr, const MWWorld::Ptr& target) { + // If already in combat with target, consider aggressive + if (ptr.getClass().getCreatureStats(ptr).getAiSequence().isInCombat(target)) + return true; + // Don't become aggressive if a calm effect is active, since it would cause combat to cycle on/off as // combat is activated here and then canceled by the calm effect if ((ptr.getClass().isNpc() From 7ec362b96bbb528f000cc3659bd15fd8f43117a7 Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Sun, 1 Feb 2026 18:10:33 +0300 Subject: [PATCH 2/2] Cleanup --- apps/openmw/mwmechanics/mechanicsmanagerimp.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp index cd3f74bad5..1de8b353b2 100644 --- a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp +++ b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp @@ -1571,9 +1571,8 @@ namespace MWMechanics const MWWorld::Class& cls = target.getClass(); const MWMechanics::CreatureStats& stats = cls.getCreatureStats(target); const MWMechanics::AiSequence& seq = stats.getAiSequence(); - return cls.isNpc() && !attacker.isEmpty() && !seq.isInCombat(attacker) && !isAggressive(target, attacker) - && !seq.isEngagedWithActor() && !stats.getAiSequence().isInPursuit() - && !cls.getNpcStats(target).isWerewolf() + return cls.isNpc() && !attacker.isEmpty() && !isAggressive(target, attacker) && !seq.isEngagedWithActor() + && !stats.getAiSequence().isInPursuit() && !cls.getNpcStats(target).isWerewolf() && stats.getMagicEffects().getOrDefault(ESM::MagicEffect::Vampirism).getMagnitude() <= 0; }