From 6da6c4e62d8f206e0175b683f8c91322752be02c Mon Sep 17 00:00:00 2001 From: David Cernat Date: Sat, 8 Apr 2017 13:06:42 +0300 Subject: [PATCH] [Client] Prevent NPCs from attacking a player engaged in dialogue --- apps/openmw/mwmechanics/aicombataction.cpp | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/apps/openmw/mwmechanics/aicombataction.cpp b/apps/openmw/mwmechanics/aicombataction.cpp index cc1434d52..ee49231f2 100644 --- a/apps/openmw/mwmechanics/aicombataction.cpp +++ b/apps/openmw/mwmechanics/aicombataction.cpp @@ -13,6 +13,16 @@ #include "../mwworld/actionequip.hpp" #include "../mwworld/cellstore.hpp" +/* + Start of tes3mp addition + + Include additional headers for multiplayer purposes +*/ +#include "../mwgui/windowmanagerimp.hpp" +/* + End of tes3mp addition +*/ + #include "npcstats.hpp" #include "spellcasting.hpp" #include "combat.hpp" @@ -754,6 +764,23 @@ namespace MWMechanics ESM::Position actorPos = actor.getRefData().getPosition(); ESM::Position enemyPos = enemy.getRefData().getPosition(); + /* + Start of tes3mp addition + + Because multiplayer doesn't pause the world during dialogue, disallow fights with + a player engaged in dialogue + */ + if (enemy == MWBase::Environment::get().getWorld()->getPlayerPtr()) + { + if (MWBase::Environment::get().getWindowManager()->containsMode(MWGui::GM_Dialogue)) + { + return false; + } + } + /* + End of tes3mp addition + */ + const CreatureStats& enemyStats = enemy.getClass().getCreatureStats(enemy); if (enemyStats.getMagicEffects().get(ESM::MagicEffect::Invisibility).getMagnitude() > 0 || enemyStats.getMagicEffects().get(ESM::MagicEffect::Chameleon).getMagnitude() > 0)