From 4150f5fad6ae722cdcea43444efb50d4eb7e0ad2 Mon Sep 17 00:00:00 2001 From: Dave Corley Date: Sat, 1 Feb 2025 03:21:40 -0700 Subject: [PATCH] FEAT: AddTopic in Lua, close #8334 --- apps/openmw/mwlua/types/player.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/apps/openmw/mwlua/types/player.cpp b/apps/openmw/mwlua/types/player.cpp index 15dc719f2e..2235cfc49c 100644 --- a/apps/openmw/mwlua/types/player.cpp +++ b/apps/openmw/mwlua/types/player.cpp @@ -1,5 +1,6 @@ #include "types.hpp" +#include #include #include @@ -195,6 +196,18 @@ namespace MWLua throw std::runtime_error("Only player and global scripts can toggle teleportation."); MWBase::Environment::get().getWorld()->enableTeleporting(state); }; + player["addTopic"] = [](const Object& player, std::string topicId) { + if (dynamic_cast(&player) && !dynamic_cast(&player)) + throw std::runtime_error("Only player and global scripts may add topics."); + + ESM::RefId topic = ESM::RefId::stringRefId(topicId); + if (!MWBase::Environment::get().getESMStore()->get().search(topic)) + { + throw std::runtime_error("Failed to add topic " + topicId + ": topic record not found"); + } + + MWBase::Environment::get().getDialogueManager()->addTopic(topic); + }; player["sendMenuEvent"] = [context](const Object& player, std::string eventName, const sol::object& eventData) { verifyPlayer(player); context.mLuaEvents->addMenuEvent({ std::move(eventName), LuaUtil::serialize(eventData) });