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);