From d076eae8148c41737fc782d94f27b31ac679aade Mon Sep 17 00:00:00 2001 From: Nico <122193236+Nico8340@users.noreply.github.com> Date: Sun, 14 Apr 2024 03:08:26 +0200 Subject: [PATCH 01/11] Add global variables A global variable named resourceName that always contains the name of the given resource. --- Client/mods/deathmatch/logic/lua/CLuaMain.cpp | 3 +++ Server/mods/deathmatch/logic/lua/CLuaMain.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/Client/mods/deathmatch/logic/lua/CLuaMain.cpp b/Client/mods/deathmatch/logic/lua/CLuaMain.cpp index 4dbe913aa0..446fdc866e 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/Server/mods/deathmatch/logic/lua/CLuaMain.cpp b/Server/mods/deathmatch/logic/lua/CLuaMain.cpp index dd7df7f040..189d204c57 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() From 97be92b9290e274c2c08630dd07cb87379acc25b Mon Sep 17 00:00:00 2001 From: Nico <122193236+Nico8340@users.noreply.github.com> Date: Sun, 14 Apr 2024 03:09:28 +0200 Subject: [PATCH 02/11] Add default values Adds a default value to the getResourceName function, if no resource is defined, it handles the current resource, like other similar functions. --- .../logic/luadefs/CLuaResourceDefs.cpp | 12 ++++++++- .../logic/luadefs/CLuaResourceDefs.cpp | 25 ++++++++++++++++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index 62a8b2f531..07a0261c61 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -225,10 +225,20 @@ int CLuaResourceDefs::GetResourceName(lua_State* luaVM) // Verify arguments CResource* pResource = NULL; CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pResource); + argStream.ReadUserData(pResource, NULL); if (!argStream.HasErrors()) { + if (!pResource) + { + // Find our vm and get the root + CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); + if (pLuaMain) + { + pResource = pLuaMain->GetResource(); + } + } + if (pResource) { // Grab its name and return it diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index 57ef2f01e7..d16af69ff4 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -903,12 +903,31 @@ int CLuaResourceDefs::getResourceName(lua_State* luaVM) CResource* pResource; CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pResource); + argStream.ReadUserData(pResource, NULL); if (!argStream.HasErrors()) { - lua_pushstring(luaVM, pResource->GetName().c_str()); - return 1; + if (!pResource) + { + CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); + if (pLuaMain) + { + pResource = pLuaMain->GetResource(); + } + + // No Lua VM or no assigned resource? + if (!pResource) + { + lua_pushboolean(luaVM, false); + return 1; + } + } + + if (pResource->IsActive()) + { + lua_pushstring(luaVM, pResource->GetName().c_str()); + return 1; + } } else m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); From 09f580b0e50fa03e53d5c64d7f6104614e942c21 Mon Sep 17 00:00:00 2001 From: Nico <122193236+Nico8340@users.noreply.github.com> Date: Sun, 14 Apr 2024 18:26:30 +0200 Subject: [PATCH 03/11] Format code --- Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp | 4 ++-- Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index 07a0261c61..608fe9e8bf 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -223,9 +223,9 @@ int CLuaResourceDefs::GetResourceConfig(lua_State* luaVM) int CLuaResourceDefs::GetResourceName(lua_State* luaVM) { // Verify arguments - CResource* pResource = NULL; + CResource* pResource; CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pResource, NULL); + argStream.ReadUserData(pResource, nullptr); if (!argStream.HasErrors()) { diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index d16af69ff4..176fa6f34c 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -901,9 +901,8 @@ int CLuaResourceDefs::getResourceLoadTime(lua_State* luaVM) int CLuaResourceDefs::getResourceName(lua_State* luaVM) { CResource* pResource; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pResource, NULL); + argStream.ReadUserData(pResource, nullptr); if (!argStream.HasErrors()) { From 1b78938b58e318d471456ffc09b72a0129ba65e1 Mon Sep 17 00:00:00 2001 From: Nico <122193236+Nico8340@users.noreply.github.com> Date: Sat, 1 Jun 2024 02:23:27 +0200 Subject: [PATCH 04/11] Refactoring server --- .../logic/luadefs/CLuaResourceDefs.cpp | 89 ++++++++++++------- .../logic/luadefs/CLuaResourceDefs.h | 3 +- 2 files changed, 61 insertions(+), 31 deletions(-) diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index 176fa6f34c..a20b15ab81 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", ArgumentParser<GetResourceName>}, {"getResourceRootElement", getResourceRootElement}, {"getResourceDynamicElementRoot", getResourceDynamicElementRoot}, {"getResourceMapRootElement", getResourceMapRootElement}, @@ -898,43 +898,72 @@ int CLuaResourceDefs::getResourceLoadTime(lua_State* luaVM) return 1; } -int CLuaResourceDefs::getResourceName(lua_State* luaVM) +std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement) { - CResource* pResource; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pResource, nullptr); - - if (!argStream.HasErrors()) + if (!resourceElement) { - if (!pResource) - { - CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); - if (pLuaMain) - { - pResource = pLuaMain->GetResource(); - } + CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); + CResource* localResource; - // No Lua VM or no assigned resource? - if (!pResource) - { - lua_pushboolean(luaVM, false); - return 1; - } - } + if (!localVM) + return false; - if (pResource->IsActive()) - { - lua_pushstring(luaVM, pResource->GetName().c_str()); - return 1; - } + localResource = localVM->GetResource(); + + if (!localResource) + return false; + + resourceElement = localResource; } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushboolean(luaVM, false); - return 1; + if (!(*resourceElement)->IsActive()) + return false; + + std::string resourceName = (*resourceElement)->GetName(); + + if (resourceName.empty()) + return false; + + return resourceName; } +//int CLuaResourceDefs::getResourceName(lua_State* luaVM) +//{ +// CResource* pResource; +// CScriptArgReader argStream(luaVM); +// argStream.ReadUserData(pResource, nullptr); +// +// if (!argStream.HasErrors()) +// { +// if (!pResource) +// { +// CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); +// if (pLuaMain) +// { +// pResource = pLuaMain->GetResource(); +// } +// +// // No Lua VM or no assigned resource? +// if (!pResource) +// { +// lua_pushboolean(luaVM, false); +// return 1; +// } +// } +// +// if (pResource->IsActive()) +// { +// lua_pushstring(luaVM, pResource->GetName().c_str()); +// return 1; +// } +// } +// else +// m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); +// +// lua_pushboolean(luaVM, false); +// return 1; +//} + int CLuaResourceDefs::getResourceRootElement(lua_State* luaVM) { CResource* pResource; diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h index 471b7aaef9..a7413a1179 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h @@ -47,14 +47,15 @@ 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 bool isResourceProtected(CResource* const resource); + static std::string GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement); // Set stuff LUA_DECLARE(setResourceInfo); From 8cf015b08264f3ae27516844cfaa1b6847320022 Mon Sep 17 00:00:00 2001 From: Nico <122193236+Nico8340@users.noreply.github.com> Date: Sat, 1 Jun 2024 02:23:35 +0200 Subject: [PATCH 05/11] Refactoring client --- .../logic/luadefs/CLuaResourceDefs.cpp | 96 ++++++++++++------- .../logic/luadefs/CLuaResourceDefs.h | 3 +- 2 files changed, 64 insertions(+), 35 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index 608fe9e8bf..e6e2b785f6 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 <lua/CLuaFunctionParser.h> + using std::list; void CLuaResourceDefs::LoadFunctions() @@ -18,7 +20,7 @@ void CLuaResourceDefs::LoadFunctions() {"call", Call}, {"getThisResource", GetThisResource}, {"getResourceConfig", GetResourceConfig}, - {"getResourceName", GetResourceName}, + {"getResourceName", ArgumentParser<GetResourceName>}, {"getResourceFromName", GetResourceFromName}, {"getResourceRootElement", GetResourceRootElement}, {"getResourceGUIElement", GetResourceGUIElement}, @@ -220,46 +222,72 @@ int CLuaResourceDefs::GetResourceConfig(lua_State* luaVM) return 1; } -int CLuaResourceDefs::GetResourceName(lua_State* luaVM) +std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement) { - // Verify arguments - CResource* pResource; - CScriptArgReader argStream(luaVM); - argStream.ReadUserData(pResource, nullptr); - - if (!argStream.HasErrors()) + if (!resourceElement) { - if (!pResource) - { - // Find our vm and get the root - CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); - if (pLuaMain) - { - pResource = pLuaMain->GetResource(); - } - } + CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); + CResource* localResource; - 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); + if (!localVM) + return false; + + localResource = localVM->GetResource(); + + if (!localResource) + return false; + + resourceElement = localResource; } - else - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - // Failed - lua_pushboolean(luaVM, false); - return 1; + std::string resourceName = (*resourceElement)->GetName(); + + if (resourceName.empty()) + return false; + + return resourceName; } +//int CLuaResourceDefs::GetResourceName(lua_State* luaVM) +//{ +// // Verify arguments +// CResource* pResource; +// CScriptArgReader argStream(luaVM); +// argStream.ReadUserData(pResource, nullptr); +// +// if (!argStream.HasErrors()) +// { +// if (!pResource) +// { +// // Find our vm and get the root +// CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); +// if (pLuaMain) +// { +// pResource = pLuaMain->GetResource(); +// } +// } +// +// 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()); +// +// // Failed +// lua_pushboolean(luaVM, false); +// return 1; +//} + int CLuaResourceDefs::GetResourceFromName(lua_State* luaVM) { // Verify arguments diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h index deb8fe9a90..eba15fa6c7 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<CResource*> resourceElement); }; From 5cf37881616ca00c9be785df3565609c425b3e37 Mon Sep 17 00:00:00 2001 From: Nico <122193236+Nico8340@users.noreply.github.com> Date: Sat, 1 Jun 2024 02:39:59 +0200 Subject: [PATCH 06/11] Replace returns with throws --- Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp | 6 +++--- Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index e6e2b785f6..8a20cdda56 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -230,12 +230,12 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR CResource* localResource; if (!localVM) - return false; + throw std::runtime_error("Couldn't find the virtual machine"); localResource = localVM->GetResource(); if (!localResource) - return false; + throw std::runtime_error("Couldn't find the resource"); resourceElement = localResource; } @@ -243,7 +243,7 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR std::string resourceName = (*resourceElement)->GetName(); if (resourceName.empty()) - return false; + throw std::runtime_error("The resource name is empty"); return resourceName; } diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index a20b15ab81..37328d921d 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -906,23 +906,23 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR CResource* localResource; if (!localVM) - return false; + throw std::runtime_error("Couldn't find the virtual machine"); localResource = localVM->GetResource(); if (!localResource) - return false; + throw std::runtime_error("Couldn't find the resource"); resourceElement = localResource; } if (!(*resourceElement)->IsActive()) - return false; + throw std::runtime_error("The resource isn't active"); std::string resourceName = (*resourceElement)->GetName(); if (resourceName.empty()) - return false; + throw std::runtime_error("The resource name is empty"); return resourceName; } From 8db3e98067fadf40db85dbf529d1d3d3fbcf498c Mon Sep 17 00:00:00 2001 From: Nico <122193236+Nico8340@users.noreply.github.com> Date: Sat, 1 Jun 2024 02:40:20 +0200 Subject: [PATCH 07/11] Remove comments --- .../logic/luadefs/CLuaResourceDefs.cpp | 40 ------------------- .../logic/luadefs/CLuaResourceDefs.cpp | 37 ----------------- 2 files changed, 77 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index 8a20cdda56..42b891d03c 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -248,46 +248,6 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR return resourceName; } -//int CLuaResourceDefs::GetResourceName(lua_State* luaVM) -//{ -// // Verify arguments -// CResource* pResource; -// CScriptArgReader argStream(luaVM); -// argStream.ReadUserData(pResource, nullptr); -// -// if (!argStream.HasErrors()) -// { -// if (!pResource) -// { -// // Find our vm and get the root -// CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); -// if (pLuaMain) -// { -// pResource = pLuaMain->GetResource(); -// } -// } -// -// 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()); -// -// // Failed -// lua_pushboolean(luaVM, false); -// return 1; -//} - int CLuaResourceDefs::GetResourceFromName(lua_State* luaVM) { // Verify arguments diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index 37328d921d..380c8bc0a9 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -927,43 +927,6 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR return resourceName; } -//int CLuaResourceDefs::getResourceName(lua_State* luaVM) -//{ -// CResource* pResource; -// CScriptArgReader argStream(luaVM); -// argStream.ReadUserData(pResource, nullptr); -// -// if (!argStream.HasErrors()) -// { -// if (!pResource) -// { -// CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM); -// if (pLuaMain) -// { -// pResource = pLuaMain->GetResource(); -// } -// -// // No Lua VM or no assigned resource? -// if (!pResource) -// { -// lua_pushboolean(luaVM, false); -// return 1; -// } -// } -// -// if (pResource->IsActive()) -// { -// lua_pushstring(luaVM, pResource->GetName().c_str()); -// return 1; -// } -// } -// else -// m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); -// -// lua_pushboolean(luaVM, false); -// return 1; -//} - int CLuaResourceDefs::getResourceRootElement(lua_State* luaVM) { CResource* pResource; From 49abef0407f67070f22a04ffb3527af44901abe9 Mon Sep 17 00:00:00 2001 From: Nico <122193236+Nico8340@users.noreply.github.com> Date: Tue, 18 Jun 2024 14:49:03 +0200 Subject: [PATCH 08/11] Review fixes --- .../logic/luadefs/CLuaResourceDefs.cpp | 14 ++++---------- .../logic/luadefs/CLuaResourceDefs.cpp | 16 +++++----------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index 42b891d03c..acf63d3c8d 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -20,7 +20,7 @@ void CLuaResourceDefs::LoadFunctions() {"call", Call}, {"getThisResource", GetThisResource}, {"getResourceConfig", GetResourceConfig}, - {"getResourceName", ArgumentParser<GetResourceName>}, + {"getResourceName", ArgumentParserWarn<false, GetResourceName>}, {"getResourceFromName", GetResourceFromName}, {"getResourceRootElement", GetResourceRootElement}, {"getResourceGUIElement", GetResourceGUIElement}, @@ -226,13 +226,12 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR { if (!resourceElement) { - CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); - CResource* localResource; + CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); if (!localVM) throw std::runtime_error("Couldn't find the virtual machine"); - localResource = localVM->GetResource(); + CResource* localResource = localVM->GetResource(); if (!localResource) throw std::runtime_error("Couldn't find the resource"); @@ -240,12 +239,7 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR resourceElement = localResource; } - std::string resourceName = (*resourceElement)->GetName(); - - if (resourceName.empty()) - throw std::runtime_error("The resource name is empty"); - - return resourceName; + return (*resourceElement)->GetName(); } int CLuaResourceDefs::GetResourceFromName(lua_State* luaVM) diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index 380c8bc0a9..c811b39865 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", ArgumentParser<GetResourceName>}, + {"getResourceName", ArgumentParserWarn<false, GetResourceName>}, {"getResourceRootElement", getResourceRootElement}, {"getResourceDynamicElementRoot", getResourceDynamicElementRoot}, {"getResourceMapRootElement", getResourceMapRootElement}, @@ -902,13 +902,12 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR { if (!resourceElement) { - CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); - CResource* localResource; - + CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); + if (!localVM) throw std::runtime_error("Couldn't find the virtual machine"); - localResource = localVM->GetResource(); + CResource* localResource = localVM->GetResource(); if (!localResource) throw std::runtime_error("Couldn't find the resource"); @@ -919,12 +918,7 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR if (!(*resourceElement)->IsActive()) throw std::runtime_error("The resource isn't active"); - std::string resourceName = (*resourceElement)->GetName(); - - if (resourceName.empty()) - throw std::runtime_error("The resource name is empty"); - - return resourceName; + return (*resourceElement)->GetName(); } int CLuaResourceDefs::getResourceRootElement(lua_State* luaVM) From 431c6c62136539d96fe184017824c351a4df3a40 Mon Sep 17 00:00:00 2001 From: Nico <122193236+Nico8340@users.noreply.github.com> Date: Tue, 18 Jun 2024 16:24:36 +0200 Subject: [PATCH 09/11] Review fixes --- .../logic/luadefs/CLuaResourceDefs.cpp | 20 ++++++------- .../logic/luadefs/CLuaResourceDefs.cpp | 29 ++++++++++--------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index acf63d3c8d..d4775bb32f 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -224,22 +224,22 @@ int CLuaResourceDefs::GetResourceConfig(lua_State* luaVM) std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement) { - if (!resourceElement) + if (resourceElement && resourceElement.has_value()) { - CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); + return (*resourceElement)->GetName(); + } - if (!localVM) - throw std::runtime_error("Couldn't find the virtual machine"); + CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); - CResource* localResource = localVM->GetResource(); + if (!localVM) + throw std::invalid_argument("Couldn't find the virtual machine"); - if (!localResource) - throw std::runtime_error("Couldn't find the resource"); + CResource* localResource = localVM->GetResource(); - resourceElement = localResource; - } + if (!localResource) + throw std::invalid_argument("Couldn't find the resource"); - return (*resourceElement)->GetName(); + return localResource->GetName(); } int CLuaResourceDefs::GetResourceFromName(lua_State* luaVM) diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index c811b39865..58b499ae8e 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -900,25 +900,28 @@ int CLuaResourceDefs::getResourceLoadTime(lua_State* luaVM) std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement) { - if (!resourceElement) + if (resourceElement && resourceElement.has_value()) { - CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); - - if (!localVM) - throw std::runtime_error("Couldn't find the virtual machine"); + if (!(*resourceElement)->IsActive()) + throw std::invalid_argument("The resource isn't active"); - CResource* localResource = localVM->GetResource(); + return (*resourceElement)->GetName(); + } - if (!localResource) - throw std::runtime_error("Couldn't find the resource"); + CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); - resourceElement = localResource; - } + if (!localVM) + throw std::invalid_argument("Couldn't find the virtual machine"); + + CResource* localResource = localVM->GetResource(); + + if (!localResource) + throw std::invalid_argument("Couldn't find the resource"); - if (!(*resourceElement)->IsActive()) - throw std::runtime_error("The resource isn't active"); + if (!localResource->IsActive()) + throw std::invalid_argument("The resource isn't active"); - return (*resourceElement)->GetName(); + return localResource->GetName(); } int CLuaResourceDefs::getResourceRootElement(lua_State* luaVM) From cfe8b1eeefbfddefa57d0d9646b02f63847a285c Mon Sep 17 00:00:00 2001 From: Nico <122193236+Nico8340@users.noreply.github.com> Date: Tue, 18 Jun 2024 16:28:58 +0200 Subject: [PATCH 10/11] Remove throws --- Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp | 4 ++-- Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h | 2 +- Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp | 8 ++++---- Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index d4775bb32f..bba232ba71 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -232,12 +232,12 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); if (!localVM) - throw std::invalid_argument("Couldn't find the virtual machine"); + return false; CResource* localResource = localVM->GetResource(); if (!localResource) - throw std::invalid_argument("Couldn't find the resource"); + return false; return localResource->GetName(); } diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h index eba15fa6c7..ebe23e5256 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h @@ -30,5 +30,5 @@ class CLuaResourceDefs : public CLuaDefs LUA_DECLARE(LoadString); LUA_DECLARE(Load); - static std::string GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement); + static std::string GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement) noexcept; }; diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index 58b499ae8e..9aaeba2e06 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -903,7 +903,7 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR if (resourceElement && resourceElement.has_value()) { if (!(*resourceElement)->IsActive()) - throw std::invalid_argument("The resource isn't active"); + return false; return (*resourceElement)->GetName(); } @@ -911,15 +911,15 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); if (!localVM) - throw std::invalid_argument("Couldn't find the virtual machine"); + return false; CResource* localResource = localVM->GetResource(); if (!localResource) - throw std::invalid_argument("Couldn't find the resource"); + return false; if (!localResource->IsActive()) - throw std::invalid_argument("The resource isn't active"); + return false; return localResource->GetName(); } diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h index a7413a1179..49283f0365 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h @@ -55,7 +55,7 @@ class CLuaResourceDefs : public CLuaDefs LUA_DECLARE(isResourceArchived); static bool isResourceProtected(CResource* const resource); - static std::string GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement); + static std::string GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement) noexcept; // Set stuff LUA_DECLARE(setResourceInfo); From 580246ce7c0d74696b8a2b7ff63538da6a1bdf4f Mon Sep 17 00:00:00 2001 From: Nico <122193236+Nico8340@users.noreply.github.com> Date: Tue, 18 Jun 2024 16:36:22 +0200 Subject: [PATCH 11/11] Revert "Remove throws" This reverts commit cfe8b1eeefbfddefa57d0d9646b02f63847a285c. --- Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp | 4 ++-- Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h | 2 +- Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp | 8 ++++---- Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index bba232ba71..d4775bb32f 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -232,12 +232,12 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); if (!localVM) - return false; + throw std::invalid_argument("Couldn't find the virtual machine"); CResource* localResource = localVM->GetResource(); if (!localResource) - return false; + throw std::invalid_argument("Couldn't find the resource"); return localResource->GetName(); } diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h index ebe23e5256..eba15fa6c7 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h @@ -30,5 +30,5 @@ class CLuaResourceDefs : public CLuaDefs LUA_DECLARE(LoadString); LUA_DECLARE(Load); - static std::string GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement) noexcept; + static std::string GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement); }; diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp index 9aaeba2e06..58b499ae8e 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp @@ -903,7 +903,7 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR if (resourceElement && resourceElement.has_value()) { if (!(*resourceElement)->IsActive()) - return false; + throw std::invalid_argument("The resource isn't active"); return (*resourceElement)->GetName(); } @@ -911,15 +911,15 @@ std::string CLuaResourceDefs::GetResourceName(lua_State* luaVM, std::optional<CR CLuaMain* localVM = m_pLuaManager->GetVirtualMachine(luaVM); if (!localVM) - return false; + throw std::invalid_argument("Couldn't find the virtual machine"); CResource* localResource = localVM->GetResource(); if (!localResource) - return false; + throw std::invalid_argument("Couldn't find the resource"); if (!localResource->IsActive()) - return false; + throw std::invalid_argument("The resource isn't active"); return localResource->GetName(); } diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h index 49283f0365..a7413a1179 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h @@ -55,7 +55,7 @@ class CLuaResourceDefs : public CLuaDefs LUA_DECLARE(isResourceArchived); static bool isResourceProtected(CResource* const resource); - static std::string GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement) noexcept; + static std::string GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement); // Set stuff LUA_DECLARE(setResourceInfo);