From b8ee467d1308ca3a3f30aa4b752ebe1b86d00cf8 Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Tue, 7 May 2024 13:31:26 +0300 Subject: [PATCH] Allow NPCs to activate in-world books for the player (part of #7959) --- apps/openmw/mwworld/actionread.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwworld/actionread.cpp b/apps/openmw/mwworld/actionread.cpp index 477c92d2dd..b6014b834c 100644 --- a/apps/openmw/mwworld/actionread.cpp +++ b/apps/openmw/mwworld/actionread.cpp @@ -23,15 +23,15 @@ namespace MWWorld void ActionRead::executeImp(const MWWorld::Ptr& actor) { - - if (actor != MWMechanics::getPlayer()) + const MWWorld::Ptr player = MWMechanics::getPlayer(); + if (actor != player && getTarget().getContainerStore() != nullptr) return; // Ensure we're not in combat if (MWMechanics::isPlayerInCombat() // Reading in combat is still allowed if the scroll/book is not in the player inventory yet // (since otherwise, there would be no way to pick it up) - && getTarget().getContainerStore() == &actor.getClass().getContainerStore(actor)) + && getTarget().getContainerStore() == &player.getClass().getContainerStore(player)) { MWBase::Environment::get().getWindowManager()->messageBox("#{sInventoryMessage4}"); return; @@ -44,13 +44,13 @@ namespace MWWorld else MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Book, getTarget()); - MWMechanics::NpcStats& npcStats = actor.getClass().getNpcStats(actor); + MWMechanics::NpcStats& npcStats = player.getClass().getNpcStats(player); // Skill gain from books ESM::RefId skill = ESM::Skill::indexToRefId(ref->mBase->mData.mSkillId); if (!skill.empty() && !npcStats.hasBeenUsed(ref->mBase->mId)) { - MWBase::Environment::get().getLuaManager()->skillLevelUp(actor, skill, "book"); + MWBase::Environment::get().getLuaManager()->skillLevelUp(player, skill, "book"); npcStats.flagAsUsed(ref->mBase->mId); }