Merge branch 'fargothsayshello' into 'master'

Don't turn to face the player to say hello if there is no hello response

Closes #8132

See merge request OpenMW/openmw!4339
pull/3236/head
psi29a 4 months ago
commit 24a0e42594

@ -190,6 +190,7 @@
Bug #8085: Don't search in scripts or shaders directories for "Select directories you wish to add" menu in launcher
Bug #8097: GetEffect doesn't detect 0 magnitude spells
Bug #8124: Normal weapon resistance is applied twice for NPCs
Bug #8132: Actors without hello responses turn to face the player
Feature #1415: Infinite fall failsafe
Feature #2566: Handle NAM9 records for manual cell references
Feature #3501: OpenMW-CS: Instance Editing - Shortcuts for axial locking

@ -66,7 +66,7 @@ namespace MWBase
virtual void goodbye() = 0;
virtual void say(const MWWorld::Ptr& actor, const ESM::RefId& topic) = 0;
virtual bool say(const MWWorld::Ptr& actor, const ESM::RefId& topic) = 0;
virtual void keywordSelected(std::string_view keyword, ResponseCallback* callback) = 0;
virtual void goodbyeSelected() = 0;

@ -620,25 +620,25 @@ namespace MWDialogue
return false;
}
void DialogueManager::say(const MWWorld::Ptr& actor, const ESM::RefId& topic)
bool DialogueManager::say(const MWWorld::Ptr& actor, const ESM::RefId& topic)
{
MWBase::SoundManager* sndMgr = MWBase::Environment::get().getSoundManager();
if (sndMgr->sayActive(actor))
{
// Actor is already saying something.
return;
return false;
}
if (actor.getClass().isNpc() && MWBase::Environment::get().getWorld()->isSwimming(actor))
{
// NPCs don't talk while submerged
return;
return false;
}
if (actor.getClass().getCreatureStats(actor).getKnockedDown())
{
// Unconscious actors can not speak
return;
return false;
}
const MWWorld::ESMStore& store = *MWBase::Environment::get().getESMStore();
@ -657,6 +657,7 @@ namespace MWDialogue
if (!info->mResultScript.empty())
executeScript(info->mResultScript, actor);
}
return info != nullptr;
}
int DialogueManager::countSavedGameRecords() const

@ -100,7 +100,7 @@ namespace MWDialogue
bool checkServiceRefused(ResponseCallback* callback, ServiceType service = ServiceType::Any) override;
void say(const MWWorld::Ptr& actor, const ESM::RefId& topic) override;
bool say(const MWWorld::Ptr& actor, const ESM::RefId& topic) override;
// calbacks for the GUI
void keywordSelected(std::string_view keyword, ResponseCallback* callback) override;

@ -534,7 +534,8 @@ namespace MWMechanics
if (greetingTimer >= GREETING_SHOULD_START)
{
greetingState = Greet_InProgress;
MWBase::Environment::get().getDialogueManager()->say(actor, ESM::RefId::stringRefId("hello"));
if (!MWBase::Environment::get().getDialogueManager()->say(actor, ESM::RefId::stringRefId("hello")))
greetingState = Greet_Done;
greetingTimer = 0;
}
}

Loading…
Cancel
Save