Skip to content
Closed
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Client/mods/deathmatch/logic/lua/CLuaMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,9 @@ void CLuaMain::InitVM()
lua_pushelement(m_luaVM, m_pResource->GetResourceEntity());
lua_setglobal(m_luaVM, "resourceRoot");

lua_pushelement(m_luaVM, m_pResource->GetResourceDynamicEntity());
lua_setglobal(m_luaVM, "resourceDynamicRoot");

lua_pushstring(m_luaVM, m_pResource->GetName());
lua_setglobal(m_luaVM, "resourceName");

Expand Down
26 changes: 7 additions & 19 deletions Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ void CLuaResourceDefs::LoadFunctions()
{"getResourceFromName", GetResourceFromName},
{"getResourceRootElement", GetResourceRootElement},
{"getResourceGUIElement", GetResourceGUIElement},
{"getResourceDynamicElementRoot", GetResourceDynamicElementRoot},
{"getResourceDynamicElementRoot", ArgumentParser<GetResourceDynamicElementRoot>},
{"getResourceExportedFunctions", GetResourceExportedFunctions},
{"getResourceState", GetResourceState},
{"loadstring", LoadString},
Expand Down Expand Up @@ -337,28 +337,16 @@ int CLuaResourceDefs::GetResourceGUIElement(lua_State* luaVM)
return 1;
}

int CLuaResourceDefs::GetResourceDynamicElementRoot(lua_State* luaVM)
CClientEntity* CLuaResourceDefs::GetResourceDynamicElementRoot(lua_State* luaVM, std::optional<CResource*> resource)
{
CResource* pResource = NULL;
CScriptArgReader argStream(luaVM);
argStream.ReadUserData(pResource);

if (!argStream.HasErrors())
CResource* pResource = resource.value_or(&lua_getownerresource(luaVM));
if (!pResource->IsActive())
{
CClientEntity* pEntity = pResource->GetResourceDynamicEntity();
if (pEntity)
{
lua_pushelement(luaVM, pEntity);
return 1;
}
else
m_pScriptDebugging->LogError(luaVM, "getResourceDynamicElementRoot: Resource %s Is Not Currently Running", pResource->GetName());
SString err("Resource \"%s\" is not currently running!", pResource->GetName());
throw LuaFunctionError(err, false);
}
else
m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage());

lua_pushboolean(luaVM, false);
return 1;
return pResource->GetResourceDynamicEntity();
}

int CLuaResourceDefs::GetResourceExportedFunctions(lua_State* luaVM)
Expand Down
2 changes: 1 addition & 1 deletion Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class CLuaResourceDefs : public CLuaDefs
LUA_DECLARE(GetResourceFromName);
LUA_DECLARE(GetResourceRootElement);
LUA_DECLARE(GetResourceGUIElement);
LUA_DECLARE(GetResourceDynamicElementRoot);
static CClientEntity* GetResourceDynamicElementRoot(lua_State* luaVM, std::optional<CResource*> resource);
LUA_DECLARE(GetResourceExportedFunctions);
LUA_DECLARE(GetResourceState);
LUA_DECLARE(LoadString);
Expand Down
5 changes: 4 additions & 1 deletion Server/mods/deathmatch/logic/lua/CLuaMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,10 @@ void CLuaMain::Initialize()

lua_pushelement(m_luaVM, m_pResource->GetResourceRootElement());
lua_setglobal(m_luaVM, "resourceRoot");


lua_pushelement(m_luaVM, m_pResource->GetDynamicElementRoot());
lua_setglobal(m_luaVM, "resourceDynamicRoot");

lua_pushstring(m_luaVM, m_pResource->GetName());
lua_setglobal(m_luaVM, "resourceName");
}
Expand Down
47 changes: 7 additions & 40 deletions Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ void CLuaResourceDefs::LoadFunctions()
{"getResourceLoadTime", getResourceLoadTime},
{"getResourceName", ArgumentParserWarn<false, GetResourceName>},
{"getResourceRootElement", getResourceRootElement},
{"getResourceDynamicElementRoot", getResourceDynamicElementRoot},
{"getResourceDynamicElementRoot", ArgumentParser<GetResourceDynamicElementRoot>},
{"getResourceMapRootElement", getResourceMapRootElement},
{"getResourceExportedFunctions", getResourceExportedFunctions},
{"getResourceOrganizationalPath", getResourceOrganizationalPath},
Expand Down Expand Up @@ -954,49 +954,16 @@ int CLuaResourceDefs::getResourceRootElement(lua_State* luaVM)
return 1;
}

int CLuaResourceDefs::getResourceDynamicElementRoot(lua_State* luaVM)
CElement* CLuaResourceDefs::GetResourceDynamicElementRoot(lua_State* luaVM, std::optional<CResource*> resource)
{
CResource* pResource;

CScriptArgReader argStream(luaVM);
argStream.ReadUserData(pResource, NULL);

if (!argStream.HasErrors())
CResource* pResource = resource.value_or(&lua_getownerresource(luaVM));
if (!pResource->IsActive())
{
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())
{
CElement* pElement = pResource->GetDynamicElementRoot();
if (pElement)
{
lua_pushelement(luaVM, pElement);
return 1;
}
}
else
m_pScriptDebugging->LogError(luaVM, "%s: Resource %s is not currently running", lua_tostring(luaVM, lua_upvalueindex(1)),
pResource->GetName().c_str());
SString err("Resource \"%s\" is not currently running!", pResource->GetName().c_str());
throw LuaFunctionError(err, false);
}
else
m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage());

lua_pushboolean(luaVM, false);
return 1;
return pResource->GetDynamicElementRoot();
}

int CLuaResourceDefs::getResourceMapRootElement(lua_State* luaVM)
Expand Down
2 changes: 1 addition & 1 deletion Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class CLuaResourceDefs : public CLuaDefs
LUA_DECLARE(getResourceLastStartTime);
LUA_DECLARE(getResourceLoadTime);
LUA_DECLARE(getResourceRootElement);
LUA_DECLARE(getResourceDynamicElementRoot);
static CElement* GetResourceDynamicElementRoot(lua_State* luaVM, std::optional<CResource*> resource);
LUA_DECLARE(getResourceMapRootElement);
LUA_DECLARE(getResourceExportedFunctions);
LUA_DECLARE(getResourceOrganizationalPath);
Expand Down