Jump to content

downloadFile


DBY

Recommended Posts

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:

y3QY6X9.jpg

Edited by Guest
Link to comment

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

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, 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
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:

w8rabH0.png

Link to comment
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...