diff --git a/Client/mods/deathmatch/logic/lua/CLuaMain.cpp b/Client/mods/deathmatch/logic/lua/CLuaMain.cpp index 4dbe913aa0b..446fdc866e3 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaMain.cpp +++ b/Client/mods/deathmatch/logic/lua/CLuaMain.cpp @@ -170,6 +170,9 @@ void CLuaMain::InitVM() lua_pushelement(m_luaVM, m_pResource->GetResourceEntity()); lua_setglobal(m_luaVM, "resourceRoot"); + lua_pushstring(m_luaVM, m_pResource->GetName()); + lua_setglobal(m_luaVM, "resourceName"); + lua_pushelement(m_luaVM, m_pResource->GetResourceGUIEntity()); lua_setglobal(m_luaVM, "guiRoot"); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index 62a8b2f5312..113d810f689 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -10,6 +10,8 @@ *****************************************************************************/ #include "StdInc.h" +#include + using std::list; void CLuaResourceDefs::LoadFunctions() @@ -18,7 +20,7 @@ void CLuaResourceDefs::LoadFunctions() {"call", Call}, {"getThisResource", GetThisResource}, {"getResourceConfig", GetResourceConfig}, - {"getResourceName", GetResourceName}, + {"getResourceName", ArgumentParserWarn}, {"getResourceFromName", GetResourceFromName}, {"getResourceRootElement", GetResourceRootElement}, {"getResourceGUIElement", GetResourceGUIElement}, @@ -220,34 +222,17 @@ int CLuaResourceDefs::GetResourceConfig(lua_State* luaVM) return 1; } -int CLuaResourceDefs::GetResourceName(lua_State* luaVM) +std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional resourceElement) { - // Verify arguments - CResource* pResource = NULL; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pResource); + if (resourceElement.has_value()) + return (*resourceElement)->GetName(); - if (!argStream.HasErrors()) - { - if (pResource) - { - // Grab its name and return it - const char* szName = pResource->GetName(); - if (szName) - { - lua_pushstring(luaVM, szName); - return 1; - } - } - else - m_pScriptDebugging->LogBadPointer(luaVM, "resource", 1); - } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + CResource* localResource = &lua_getownerresource(luaVM); - // Failed - lua_pushboolean(luaVM, false); - return 1; + if (!localResource) + throw std::invalid_argument("Couldn't find the resource"); + + return localResource->GetName(); } int CLuaResourceDefs::GetResourceFromName(lua_State* luaVM) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h index deb8fe9a901..eba15fa6c78 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h @@ -21,7 +21,6 @@ class CLuaResourceDefs : public CLuaDefs LUA_DECLARE(Call); LUA_DECLARE(GetThisResource); LUA_DECLARE(GetResourceConfig); - LUA_DECLARE(GetResourceName); LUA_DECLARE(GetResourceFromName); LUA_DECLARE(GetResourceRootElement); LUA_DECLARE(GetResourceGUIElement); @@ -30,4 +29,6 @@ class CLuaResourceDefs : public CLuaDefs LUA_DECLARE(GetResourceState); LUA_DECLARE(LoadString); LUA_DECLARE(Load); + + static std::string GetResourceName(lua_State* luaVM, std::optional resourceElement); }; diff --git a/Server/mods/deathmatch/logic/lua/CLuaMain.cpp b/Server/mods/deathmatch/logic/lua/CLuaMain.cpp index dd7df7f0405..189d204c57f 100644 --- a/Server/mods/deathmatch/logic/lua/CLuaMain.cpp +++ b/Server/mods/deathmatch/logic/lua/CLuaMain.cpp @@ -234,6 +234,9 @@ void CLuaMain::Initialize() lua_pushelement(m_luaVM, m_pResource->GetResourceRootElement()); lua_setglobal(m_luaVM, "resourceRoot"); + + lua_pushstring(m_luaVM, m_pResource->GetName()); + lua_setglobal(m_luaVM, "resourceName"); } void CLuaMain::LoadEmbeddedScripts() diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index 57ef2f01e71..baa2dbba469 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -54,7 +54,7 @@ void CLuaResourceDefs::LoadFunctions() {"getResourceLoadFailureReason", getResourceLoadFailureReason}, {"getResourceLastStartTime", getResourceLastStartTime}, {"getResourceLoadTime", getResourceLoadTime}, - {"getResourceName", getResourceName}, + {"getResourceName", ArgumentParserWarn}, {"getResourceRootElement", getResourceRootElement}, {"getResourceDynamicElementRoot", getResourceDynamicElementRoot}, {"getResourceMapRootElement", getResourceMapRootElement}, @@ -898,23 +898,17 @@ int CLuaResourceDefs::getResourceLoadTime(lua_State* luaVM) return 1; } -int CLuaResourceDefs::getResourceName(lua_State* luaVM) +std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional resourceElement) { - CResource* pResource; + if (resourceElement.has_value()) + return (*resourceElement)->GetName(); - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pResource); + CResource* localResource = &lua_getownerresource(luaVM); - if (!argStream.HasErrors()) - { - lua_pushstring(luaVM, pResource->GetName().c_str()); - return 1; - } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + if (!localResource) + throw std::invalid_argument("Couldn't find the resource"); - lua_pushboolean(luaVM, false); - return 1; + return localResource->GetName(); } int CLuaResourceDefs::getResourceRootElement(lua_State* luaVM) diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h index 471b7aaef9d..29304f402ad 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h @@ -47,13 +47,14 @@ class CLuaResourceDefs : public CLuaDefs LUA_DECLARE(getResourceLoadFailureReason); LUA_DECLARE(getResourceLastStartTime); LUA_DECLARE(getResourceLoadTime); - LUA_DECLARE(getResourceName); LUA_DECLARE(getResourceRootElement); LUA_DECLARE(getResourceDynamicElementRoot); LUA_DECLARE(getResourceMapRootElement); LUA_DECLARE(getResourceExportedFunctions); LUA_DECLARE(getResourceOrganizationalPath); LUA_DECLARE(isResourceArchived); + + static std::string GetResourceName(lua_State* luaVM, std::optional resourceElement); static bool isResourceProtected(CResource* const resource); // Set stuff