DBY Posted June 15, 2016 Share Posted June 15, 2016 (edited) Buenas, estaba utilizando el módulo fileSystem para hacer un sistema de descargas en el que no haya que añadir los archivos ni al meta.xml ni a ningún tipo de array. Hasta ahí todo bien, el problema llega cuando al triggear al cliente y usar downloadFile me dice que el archivo no existe, únicamente funciona si reinicio el recurso manualmente y no con restartResource. El recurso se encarga de añadir los archivos al meta.xml automáticamente, cuando hace esto reinicia el recurso pero aquí viene el problema, no los reconoce. También he probado a utilizar refreshResources y combinarlo con restartResource pero nada, ¿alguna idea? Servidor: local fmodule = createFilesystemInterface() local rpath = fmodule.createTranslator("mods/deathmatch/resources/" .. rname .. "/") local mods, msize = _, 0 local deleteFileNodesFromMeta = true function getFiles() local _table, files, junk, errors, totalsize = {}, 0, 0, 0, 0 for key, value in ipairs(rpath.getFiles("mods/", "", false)) do local path = rpath.relPath(value) local fname = path:gsub(".txd", ""):gsub(".dff", ""):gsub(".col", ""):gsub("mods/", "") local fext = path:gsub("mods/", ""):gsub(fname, "") if fext:len() > 0 then if tonumber(fname) then local fsize = rpath.size(path) table.insert(_table, {path = path, name = fname, ext = fext, size = fsize}) files = files + 1 totalsize = totalsize + fsize else errors = errors + 1 end else junk = junk + 1 end end return #_table > 0 and _table or nil, files, junk, errors, totalsize end addEventHandler("onResourceStart", resourceRoot, function() if fmodule and rpath then local mtable, files, junk, errors, totalsize = getFiles() if mtable then local meta = xmlLoadFile("meta.xml") if meta then if #xmlNodeGetChildren(meta) == 3 then for _, data in ipairs(mtable) do local child = xmlCreateChild(meta, "file") xmlNodeSetAttribute(child, "src", data.path) xmlNodeSetAttribute(child, "download", "false") end xmlSaveFile(meta) outputDebugString("[" .. rname .. "] El archivo meta.xml ha sido actualizado, reiniciando recurso...") deleteFileNodesFromMeta = false restartResource(getThisResource()) else mods, msize = mtable, totalsize outputDebugString("[" .. rname .. "] " .. (mtable and "Encontrados " .. files .. " archivos útiles" or "Ningún archivo útil encontrado") .. (junk > 0 and ", " .. junk .. " archivos basura" or "") .. (errors > 0 and ", y " .. errors .. " erróneos." or ".") .. (totalsize > 0 and " (" .. sizeFormat(totalsize) .. " útiles)" or "")) end end end else cancelEvent() end end ) addEventHandler("onResourceStop", resourceRoot, function() if deleteFileNodesFromMeta then local meta = xmlLoadFile("meta.xml") if meta then for _, node in ipairs(xmlNodeGetChildren(meta)) do local nodename = xmlNodeGetName(node) if nodename == "file" then xmlDestroyNode(node) end end xmlSaveFile(meta) end end end ) addEvent(rname .. ":requestDownload", true) addEventHandler(rname .. ":requestDownload", root, function(player) if type(mods) == "table" then triggerClientEvent(rname .. ":sendServerInfo", player, mods, msize) end end ) Cliente: addEvent(rname .. ":sendServerInfo", true) addEventHandler(rname .. ":sendServerInfo", localPlayer, function(inf, onf) downloadFile(inf[#inf].path) end ) addCommandHandler("test", function() triggerServerEvent(rname .. ":requestDownload", localPlayer, localPlayer) end ) addEventHandler("onClientFileDownloadComplete", root, function(f) outputChatBox(f) end ) SS debugscript: Edited June 16, 2016 by Guest Link to comment
Tomas Posted June 16, 2016 Share Posted June 16, 2016 downloadFile es una función de MTA, si los archivos no están cargados en el recurso no son leidos, el meta se actualiza cuando haces el refresh, por eso ahí comienza a funcionar. Link to comment
DBY Posted June 16, 2016 Author Share Posted June 16, 2016 Eso lo sé, el recurso primero añade al meta y después lo reinicia. He probado hasta con refreshResources y no funciona si no le das restart manualmente. Y es un problema porque la idea es que lo haga todo automático. Link to comment
DBY Posted June 18, 2016 Author Share Posted June 18, 2016 UP Se me ocurrió darle utilizar stopResource y startResource, pero claro, deberé usar un recurso aparte. No entiendo por qué la función restartResource, la cual se supone que también refresca los archivos, no cumple con su función. ¿Alguna idea? Link to comment
Tomas Posted June 18, 2016 Share Posted June 18, 2016 UPSe me ocurrió darle utilizar stopResource y startResource, pero claro, deberé usar un recurso aparte. No entiendo por qué la función restartResource, la cual se supone que también refresca los archivos, no cumple con su función. ¿Alguna idea? Refresca los archivos que están en el meta, si no están tienes que dar refresh Link to comment
DBY Posted June 19, 2016 Author Share Posted June 19, 2016 Tomas, lo que hace el script es editar el meta.xml añadiendo los archivos que ha de cargar, una vez ya añadidos, el recurso se reinicia (se supone que con restartResource se refresca el meta, incluyendo los archivos, según la wiki) Pero a la hora de utilizar la función para descargar dice que el archivo no existe. Link to comment
Tomas Posted June 19, 2016 Share Posted June 19, 2016 Tomas, lo que hace el script es editar el meta.xml añadiendo los archivos que ha de cargar, una vez ya añadidos, el recurso se reinicia (se supone que con restartResource se refresca el meta, incluyendo los archivos, según la wiki) Pero a la hora de utilizar la función para descargar dice que el archivo no existe. restartResource no refresca el meta, eso lo hace refreshResources(true) Link to comment
DBY Posted June 19, 2016 Author Share Posted June 19, 2016 restartResource no refresca el meta, eso lo hace refreshResources(true) Como ya he dicho arriba, he utilizado refreshResources(true) y tampoco funciona. Según la wiki, restartResurce debería de actualizar los archivos: Link to comment
Recommended Posts