mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-04 02:41:19 +00:00
!3362 with safe reloadlua
This commit is contained in:
parent
551f424c80
commit
72b8ff82ff
@ -44,6 +44,11 @@ namespace MWLua
|
||||
return world->isActorCollisionEnabled(world->getPlayerPtr());
|
||||
};
|
||||
|
||||
api["toggleMWScript"] = []() { MWBase::Environment::get().getWorld()->toggleScripts(); };
|
||||
api["isMWScriptEnabled"] = []() { return MWBase::Environment::get().getWorld()->getScriptsEnabled(); };
|
||||
|
||||
api["reloadLua"] = []() { MWBase::Environment::get().getLuaManager()->reloadAllScripts(); };
|
||||
|
||||
api["NAV_MESH_RENDER_MODE"]
|
||||
= LuaUtil::makeStrictReadOnly(context.mLua->tableFromPairs<std::string_view, MWRender::NavMeshMode>({
|
||||
{ "AreaType", MWRender::NavMeshMode::AreaType },
|
||||
|
@ -239,6 +239,13 @@ namespace MWLua
|
||||
mInGameConsoleMessages.clear();
|
||||
|
||||
applyDelayedActions();
|
||||
|
||||
if (mReloadAllScriptsRequested)
|
||||
{
|
||||
// Reloading right after `applyDelayedActions` to guarantee that no delayed actions are currently queued.
|
||||
reloadAllScriptsImpl();
|
||||
mReloadAllScriptsRequested = false;
|
||||
}
|
||||
}
|
||||
|
||||
void LuaManager::applyDelayedActions()
|
||||
@ -477,7 +484,7 @@ namespace MWLua
|
||||
scripts->load(data);
|
||||
}
|
||||
|
||||
void LuaManager::reloadAllScripts()
|
||||
void LuaManager::reloadAllScriptsImpl()
|
||||
{
|
||||
Log(Debug::Info) << "Reload Lua";
|
||||
|
||||
|
@ -116,8 +116,9 @@ namespace MWLua
|
||||
void loadLocalScripts(const MWWorld::Ptr& ptr, const ESM::LuaScripts& data) override;
|
||||
void setContentFileMapping(const std::map<int, int>& mapping) override { mContentFileMapping = mapping; }
|
||||
|
||||
// Drops script cache and reloads all scripts. Calls `onSave` and `onLoad` for every script.
|
||||
void reloadAllScripts() override;
|
||||
// At the end of the next `synchronizedUpdate` drops script cache and reloads all scripts.
|
||||
// Calls `onSave` and `onLoad` for every script.
|
||||
void reloadAllScripts() override { mReloadAllScriptsRequested = true; }
|
||||
|
||||
void handleConsoleCommand(
|
||||
const std::string& consoleMode, const std::string& command, const MWWorld::Ptr& selectedPtr) override;
|
||||
@ -149,12 +150,14 @@ namespace MWLua
|
||||
void initConfiguration();
|
||||
LocalScripts* createLocalScripts(const MWWorld::Ptr& ptr,
|
||||
std::optional<LuaUtil::ScriptIdsWithInitializationData> autoStartConf = std::nullopt);
|
||||
void reloadAllScriptsImpl();
|
||||
|
||||
bool mInitialized = false;
|
||||
bool mGlobalScriptsStarted = false;
|
||||
bool mProcessingInputEvents = false;
|
||||
bool mApplyingDelayedActions = false;
|
||||
bool mNewGameStarted = false;
|
||||
bool mReloadAllScriptsRequested = false;
|
||||
LuaUtil::ScriptsConfiguration mConfiguration;
|
||||
LuaUtil::LuaState mLua;
|
||||
LuaUi::ResourceManager mUiResourceManager;
|
||||
|
@ -44,6 +44,19 @@
|
||||
-- @function [parent=#Debug] isCollisionEnabled
|
||||
-- @return #boolean
|
||||
|
||||
---
|
||||
-- Toggles MWScripts
|
||||
-- @function [parent=#Debug] toggleMWScript
|
||||
|
||||
---
|
||||
-- Is MWScripts enabled
|
||||
-- @function [parent=#Debug] isMWScriptEnabled
|
||||
-- @return #boolean
|
||||
|
||||
---
|
||||
-- Reloads all Lua scripts
|
||||
-- @function [parent=#Debug] reloadLua
|
||||
|
||||
---
|
||||
-- Navigation mesh rendering modes
|
||||
-- @type NAV_MESH_RENDER_MODE
|
||||
|
Loading…
Reference in New Issue
Block a user