From 1e05bb20bf9c29e87911f658506e90b8cafe5c0d Mon Sep 17 00:00:00 2001 From: Zackhasacat Date: Wed, 15 May 2024 11:39:02 -0500 Subject: [PATCH 1/4] Allow Actors to pick an attack type/animation when no AI applies --- apps/openmw/mwmechanics/character.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index 646cee8a23..cbe23299cc 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -1645,12 +1645,14 @@ namespace MWMechanics { std::string startKey = "start"; std::string stopKey = "stop"; + MWBase::LuaManager::ActorControls* actorControls + = MWBase::Environment::get().getLuaManager()->getActorControls(mPtr); if (mWeaponType != ESM::Weapon::PickProbe && !isRandomAttackAnimation(mCurrentWeapon)) { if (weapclass == ESM::WeaponType::Ranged || weapclass == ESM::WeaponType::Thrown) mAttackType = "shoot"; - else if (mPtr == getPlayer()) + else if (mPtr == getPlayer() || actorControls->mDisableAI) { if (Settings::game().mBestAttack) { From b62b0a2f00ae4e6cb98d93195500a5a78c7917b6 Mon Sep 17 00:00:00 2001 From: Zackhasacat Date: Wed, 15 May 2024 11:56:58 -0500 Subject: [PATCH 2/4] Check for world AI disable --- apps/openmw/mwmechanics/character.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index cbe23299cc..1791bb94c8 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -1647,12 +1647,13 @@ namespace MWMechanics std::string stopKey = "stop"; MWBase::LuaManager::ActorControls* actorControls = MWBase::Environment::get().getLuaManager()->getActorControls(mPtr); - + const bool aiInactive + = actorControls->mDisableAI || !MWBase::Environment::get().getMechanicsManager()->isAIActive(); if (mWeaponType != ESM::Weapon::PickProbe && !isRandomAttackAnimation(mCurrentWeapon)) { if (weapclass == ESM::WeaponType::Ranged || weapclass == ESM::WeaponType::Thrown) mAttackType = "shoot"; - else if (mPtr == getPlayer() || actorControls->mDisableAI) + else if (mPtr == getPlayer() || aiInactive) { if (Settings::game().mBestAttack) { From 0ad64cffdbb2d8c8d01a73ccb86221a427178538 Mon Sep 17 00:00:00 2001 From: Zackhasacat Date: Wed, 15 May 2024 12:41:45 -0500 Subject: [PATCH 3/4] Add empty line back --- apps/openmw/mwmechanics/character.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index 1791bb94c8..074ce951bf 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -1645,6 +1645,7 @@ namespace MWMechanics { std::string startKey = "start"; std::string stopKey = "stop"; + MWBase::LuaManager::ActorControls* actorControls = MWBase::Environment::get().getLuaManager()->getActorControls(mPtr); const bool aiInactive From 20d26a9cdaaa3baa8b7c3c7ce0a28ab68832c2e8 Mon Sep 17 00:00:00 2001 From: Zackhasacat Date: Wed, 15 May 2024 14:09:33 -0500 Subject: [PATCH 4/4] Use random attack type --- apps/openmw/mwmechanics/character.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index 074ce951bf..287e5d035c 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -1654,7 +1654,7 @@ namespace MWMechanics { if (weapclass == ESM::WeaponType::Ranged || weapclass == ESM::WeaponType::Thrown) mAttackType = "shoot"; - else if (mPtr == getPlayer() || aiInactive) + else if (mPtr == getPlayer()) { if (Settings::game().mBestAttack) { @@ -1673,6 +1673,8 @@ namespace MWMechanics mAttackType = getMovementBasedAttackType(); } } + else if (aiInactive) + mAttackType = getRandomAttackType(); // else if (mPtr != getPlayer()) use mAttackType set by AiCombat startKey = mAttackType + ' ' + startKey; stopKey = mAttackType + " max attack";