diff --git a/modules/client_skins/skins.lua b/modules/client_skins/skins.lua index 139c9d0b..3939ca08 100644 --- a/modules/client_skins/skins.lua +++ b/modules/client_skins/skins.lua @@ -16,8 +16,7 @@ local function onSkinComboBoxOptionChange(self, optionText, optionData) end local function getSkinPath(name) - local current = getfsrcpath() - return g_resources.getRealDir(current) .. current .. '/skins/' .. string.lower(name) + return getfsrcpath() .. '/skins/' .. string.lower(name) end -- public functions @@ -27,7 +26,7 @@ function Skins.init() Skins.installSkins('skins') if installedSkins[defaultSkinName] then - g_resources.addSearchPath(getSkinPath(defaultSkinName), 0) + g_resources.addSearchPath(getSkinPath(defaultSkinName), true) end local userSkinName = g_settings.get('skin', 'false') diff --git a/src/framework/core/resourcemanager.cpp b/src/framework/core/resourcemanager.cpp index 3f54a1ec..4754ce2e 100644 --- a/src/framework/core/resourcemanager.cpp +++ b/src/framework/core/resourcemanager.cpp @@ -100,12 +100,27 @@ bool ResourceManager::setWriteDir(const std::string& writeDir, bool create) bool ResourceManager::addSearchPath(const std::string& path, bool pushFront) { - if(!PHYSFS_addToSearchPath(path.c_str(), pushFront ? 0 : 1)) - return false; + std::string savePath = path; + if(!PHYSFS_addToSearchPath(path.c_str(), pushFront ? 0 : 1)) { + bool found = false; + for(std::string searchPath : m_searchPaths) { + std::string newPath = searchPath + path; + if(PHYSFS_addToSearchPath(newPath.c_str(), pushFront ? 0 : 1)) { + savePath = newPath; + found = true; + break; + } + } + + if(!found) { + g_logger.error(stdext::format("Could not add '%s' to directory search path. Reason %s", path, PHYSFS_getLastError())); + return false; + } + } if(pushFront) - m_searchPaths.push_front(path); + m_searchPaths.push_front(savePath); else - m_searchPaths.push_back(path); + m_searchPaths.push_back(savePath); m_hasSearchPath = true; return true; }