From 588442b6ccf24e7ff731c32249e28949666205e7 Mon Sep 17 00:00:00 2001 From: Allofich Date: Sun, 25 Dec 2016 20:14:21 +0900 Subject: [PATCH] Make enemies start combat with player followers Recreates vanilla behavior of enemies starting combat with player followers and escorters. (Fixes #3691) --- apps/openmw/mwmechanics/actors.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index 23a6f497f..8c1a88e3f 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -310,13 +310,14 @@ namespace MWMechanics if (!actor1.getClass().isMobile(actor1)) return; + const std::list& playerFollowersAndEscorters = getActorsSidingWith(getPlayer()); bool aggressive; - if (againstPlayer) + if (againstPlayer || std::find(playerFollowersAndEscorters.begin(), playerFollowersAndEscorters.end(), actor2) != playerFollowersAndEscorters.end()) { - // followers with high fight should not engage in combat with the player (e.g. bm_bear_black_summon) - const std::list& followers = getActorsSidingWith(actor2); - if (std::find(followers.begin(), followers.end(), actor1) != followers.end()) + // Player followers and escorters with high fight should not initiate combat with the player or with + // other player followers or escorters + if (std::find(playerFollowersAndEscorters.begin(), playerFollowersAndEscorters.end(), actor1) != playerFollowersAndEscorters.end()) return; aggressive = MWBase::Environment::get().getMechanicsManager()->isAggressive(actor1, actor2); @@ -369,7 +370,8 @@ namespace MWMechanics { bool LOS = MWBase::Environment::get().getWorld()->getLOS(actor1, actor2); - if (againstPlayer) LOS &= MWBase::Environment::get().getMechanicsManager()->awarenessCheck(actor2, actor1); + if (againstPlayer || std::find(playerFollowersAndEscorters.begin(), playerFollowersAndEscorters.end(), actor2) != playerFollowersAndEscorters.end()) + LOS &= MWBase::Environment::get().getMechanicsManager()->awarenessCheck(actor2, actor1); if (LOS) {