#ifndef COMPONENTS_LUA_CONFIGURATION_H #define COMPONENTS_LUA_CONFIGURATION_H #include #include #include #include #include namespace ESM { class ESMReader; class ESMWriter; } namespace LuaUtil { using ScriptIdsWithInitializationData = std::map; class ScriptsConfiguration { public: void init(ESM::LuaScriptsCfg, bool); size_t size() const { return mScripts.size(); } const ESM::LuaScriptCfg& operator[](size_t id) const { return mScripts[id]; } std::optional findId(VFS::Path::NormalizedView path) const; std::optional mapId(int savedId) const; bool isCustomScript(int id) const { return mScripts[id].mFlags & ESM::LuaScriptCfg::sCustom; } ScriptIdsWithInitializationData getMenuConf() const { return getConfByFlag(ESM::LuaScriptCfg::sMenu); } ScriptIdsWithInitializationData getGlobalConf() const { return getConfByFlag(ESM::LuaScriptCfg::sGlobal); } ScriptIdsWithInitializationData getPlayerConf() const { return getConfByFlag(ESM::LuaScriptCfg::sPlayer); } ScriptIdsWithInitializationData getLoadConf() const { return getConfByFlag(ESM::LuaScriptCfg::sLoad); } ScriptIdsWithInitializationData getLocalConf( uint32_t type, const ESM::RefId& recordId, ESM::RefNum refnum) const; void read(ESM::ESMReader&); void write(ESM::ESMWriter&) const; private: ScriptIdsWithInitializationData getConfByFlag(ESM::LuaScriptCfg::Flags flag) const; std::vector mScripts; std::map> mPathToIndex; struct DetailedConf { int mScriptId; bool mAttach; std::string_view mInitializationData; }; std::map> mScriptsPerType; std::map, std::less<>> mScriptsPerRecordId; std::map> mScriptsPerRefNum; std::map mScriptIdMapping; }; // Parse ESM::LuaScriptsCfg from text and add to `cfg`. void parseOMWScripts(ESM::LuaScriptsCfg& cfg, std::string_view data); std::string scriptCfgToString(const ESM::LuaScriptCfg& script); } #endif // COMPONENTS_LUA_CONFIGURATION_H