Skip to content
Closed
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
20 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
2 changes: 2 additions & 0 deletions Client/mods/deathmatch/logic/CResource.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ class CResource

const auto& GetExportedFunctions() const noexcept { return m_exportedFunctions; }

std::list<CResourceFile*>& GetResourceFiles() noexcept { return m_ResourceFiles; }
const std::list<CResourceFile*>& GetResourceFiles() const noexcept { return m_ResourceFiles; }
std::list<CResourceFile*>::iterator IterBeginResourceFiles() { return m_ResourceFiles.begin(); }
std::list<CResourceFile*>::iterator IterEndResourceFiles() { return m_ResourceFiles.end(); }

Expand Down
23 changes: 22 additions & 1 deletion Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ using std::list;

void CLuaResourceDefs::LoadFunctions()
{
constexpr static const std::pair<const char*, lua_CFunction> functions[]{
constexpr static const std::pair<const char*, lua_CFunction> functions[]
{
{"call", Call},
{"getThisResource", GetThisResource},
{"getResourceConfig", GetResourceConfig},
Expand All @@ -29,6 +30,7 @@ void CLuaResourceDefs::LoadFunctions()
{"getResourceState", GetResourceState},
{"loadstring", LoadString},
{"load", Load},
{"getLoadedFiles", ArgumentParser<GetLoadedFiles>},
};

// Add functions
Expand Down Expand Up @@ -545,3 +547,22 @@ int CLuaResourceDefs::Load(lua_State* luaVM)
lua_pushboolean(luaVM, false);
return 1;
}

std::vector<std::string> CLuaResourceDefs::GetLoadedFiles(lua_State* luaVM, std::optional<CResource*> resource) noexcept
{
if (!resource)
resource = &lua_getownerresource(luaVM);

const auto resourceFiles = (*resource)->GetResourceFiles();

std::vector<std::string> files;
files.reserve(resourceFiles.size());
for (const auto& file : resourceFiles)
{
if (file->GetResourceType() != CResourceFile::eResourceType::RESOURCE_FILE_TYPE_CLIENT_FILE)
continue;
files.push_back(file->GetName());
}

return files;
}
1 change: 1 addition & 0 deletions Client/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@ class CLuaResourceDefs : public CLuaDefs
LUA_DECLARE(Load);

static std::string GetResourceName(lua_State* luaVM, std::optional<CResource*> resourceElement);
static std::vector<std::string> GetLoadedFiles(lua_State* luaVM, std::optional<CResource*> resource) noexcept;
};
4 changes: 2 additions & 2 deletions Server/mods/deathmatch/logic/CResource.h
Original file line number Diff line number Diff line change
Expand Up @@ -256,8 +256,8 @@ class CResource : public EHS
const std::string& GetResourceDirectoryPath() const { return m_strResourceDirectoryPath; }
const std::string& GetResourceCacheDirectoryPath() const { return m_strResourceCachePath; }

std::list<CResourceFile*>& GetFiles() { return m_ResourceFiles; }
size_t GetFileCount() const noexcept { return m_ResourceFiles.size(); }
std::list<CResourceFile*>& GetResourceFiles() noexcept { return m_ResourceFiles; }
const std::list<CResourceFile*>& GetResourceFiles() const noexcept { return m_ResourceFiles; }

time_t GetTimeStarted() const noexcept { return m_timeStarted; }
time_t GetTimeLoaded() const noexcept { return m_timeLoaded; }
Expand Down
2 changes: 1 addition & 1 deletion Server/mods/deathmatch/logic/CResourceManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ void CResourceManager::ListResourcesLoaded(const SString& strListType)
else
{
if (strListType == "stopped" || strListType == "all")
CLogger::LogPrintf("%-20.20s STOPPED (%d files)\n", res->GetName().c_str(), res->GetFileCount());
CLogger::LogPrintf("%-20.20s STOPPED (%d files)\n", res->GetName().c_str(), res->GetResourceFiles().size());
}
uiCount++;
}
Expand Down
24 changes: 23 additions & 1 deletion Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ void CLuaResourceDefs::LoadFunctions()
{"getResourceACLRequests", getResourceACLRequests},
{"loadstring", LoadString},
{"load", Load},

{"getLoadedFiles", ArgumentParser<GetLoadedFiles>},
};

// Add functions
Expand Down Expand Up @@ -804,7 +806,7 @@ int CLuaResourceDefs::getResourceConfig(lua_State* luaVM)
CheckCanModifyOtherResource(argStream, pThisResource, pResource);
if (!argStream.HasErrors())
{
for (CResourceFile* pResourceFile : pResource->GetFiles())
for (CResourceFile* pResourceFile : pResource->GetResourceFiles())
{
if (pResourceFile->GetType() != CResourceFile::RESOURCE_FILE_TYPE_CONFIG)
continue;
Expand Down Expand Up @@ -1468,3 +1470,23 @@ bool CLuaResourceDefs::isResourceProtected(CResource* const resource)
{
return resource->IsProtected();
}

std::vector<std::string> CLuaResourceDefs::GetLoadedFiles(lua_State* luaVM, std::optional<CResource*> resource) noexcept
{
if (!resource)
resource = &lua_getownerresource(luaVM);

const auto resourceFiles = (*resource)->GetResourceFiles();

std::vector<std::string> files;
files.reserve(resourceFiles.size());
for (const auto& file : resourceFiles)
{
if (file->GetType() != CResourceFile::eResourceType::RESOURCE_FILE_TYPE_CLIENT_FILE)
continue;

files.push_back(file->GetName());
}

return files;
}
2 changes: 2 additions & 0 deletions Server/mods/deathmatch/logic/luadefs/CLuaResourceDefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,6 @@ class CLuaResourceDefs : public CLuaDefs

LUA_DECLARE(LoadString);
LUA_DECLARE(Load);

static std::vector<std::string> GetLoadedFiles(lua_State* luaVM, std::optional<CResource*> resource) noexcept;
};