Jump to content

Файлы на клиенте


Recommended Posts

Здравствуйте. Меня интересует вопрос - как можно с сервера проверить, какие файлы находятся в директории этого ресурса на клиентской стороне пользователя? Например в директории "MTA SA 1.3/mods/deathmatch/resources/resname/files" лежат файлы "lal.txt" и "bomba.png". Каким образом можно проверить, что там есть именно эти файлы, чтобы высветить их в, допустим, gridlist?

Link to comment
  
addEvent 
addEventHandler 
fileExists 
triggerClientEvent 
triggerServerEvent 

Суть проста. Ты делаешь вызов через triggerClientEvent, на клиенте (в событии) создаешь временную таблицу, потом через цикл (таблица с путями файлов) проверяешь функцией fileExists, если есть то добавляешь во временную таблицу. После этого отсылаешь серверу временную таблицу через triggerServerEvent. А дальше уже делай что хочешь.

Link to comment

Может массивом можно сделать это? Кстати, если допустить такой вариант, что файлы туда можно добавить пользователю без причастия МТА, данный цикл мог бы сработать?

Link to comment
Может массивом можно сделать это?

Ты можешь сам решать как добавлять, можешь добавлять через table.insert (тогда твоя таблица будет массивом), можешь table[ ключ ] = значение (если ключ не число, то это будет ассоциативный массив).

Кстати, если допустить такой вариант, что файлы туда можно добавить пользователю без причастия МТА, данный цикл мог бы сработать?

fileExists будет работать даже если ты сам закинешь файл в папку "MTA SA 1.3/mods/deathmatch/resources/resname/files".

Link to comment

Так, это понятно. А fileExists как я буду юзать в цикле? Перебирать все возможные комбинации букв в поиске нужного файла? Или тогда как, там же вроде нужно искать по имени файла. Или проверять по формату файла? Тогда нужно будет количество файлов в папке знать, чтобы цикл заюзать. Или всё гораздо проще?

Link to comment

Ты можешь только указать какие файлы стоит проверять, в MTA нету функции для получения файлов в директории. Данное нововведение есть в форке mta: eir.

https://wiki.multitheftauto.com/wiki/MTA:Eir

https://wiki.multitheftauto.com/wiki/Modules/FileSystem

https://wiki.multitheftauto.com/wiki/MTA:Eir/FileSystem

Link to comment
  
local aFoundedFiles = {}; 
local aFiles = { "abc.txt", "abc2.txt" }; 
  
for i, v in ipairs( aFiles ) do 
    if fileExists( v ) then 
        table.insert( aFoundedFiles, v ); 
    end 
end 
  

Link to comment
  • Other Languages Moderators
Все возможные комбинации названия файлов будет трудно собрать. Есть ли способ попроще?

Как вариант в опредленный файл записывать названия всех создаваемых файлов, а потом его читать.

Link to comment

Подумал, и попробовал заюзать такую-же структуру записи и открытия файла, как в guiEditor'e.

Получилось примерно такое:

function loadAllFiles() 
    if fileExists(":"..getResourceName(getThisResource()).."/files/files.txt") then  
        fs = fileOpen(":"..getResourceName(getThisResource()).."/files/files.txt")  
        if fs then 
            if fileGetSize(fs) > 0 then 
                fss = fileRead(fs, fileGetSize(fs)) 
                if fss and fss ~= "" then  
                    local fil = split(fss, "\n") 
                    x={} 
                    for i,v in ipairs(tArray) do 
                        if v ~= "" then 
                            if not string.find(string.sub(v, 1, string.len(v)-4), ".txt", 0, true) then v=v..".txt" end 
                            if not string.find(v, "/", 0, true) then v=":"..getResourceName(getThisResource()).."/files/"..v end 
                            if fileExists(v) then local fx = fileOpen(v) if fx then x[v] = fileGetSize(fx) fileClose(fx) else x[v] = true end end 
                        end 
                    end 
                end 
            end 
        end 
        fileClose(fs)    
    else local ffss = fileCreate(":"..getResourceName(getThisResource()).."/files/files.txt") if ffss then fileClose(ffss) end end  
    return x or {} 
end 
  
function loadFile(name) 
    row = guiGridListAddRow(documents) 
    guiGridListSetItemText(documents, guiGridListGetColumnCount(documents), columnl, name, false, false) 
    addEventHandler("onClientGUIClick", open, 
        function() 
            if guiGridListGetSelectedItem(row) then 
                getFile(name) 
            end 
        end, false) 
end 
  
function getFile(filename) 
    addFile(filename) 
    filse = loadAllFiles() 
    if filse[filename] == false then 
        addFile(filename) 
    end 
end 
  
function addFile(file) 
    local f 
    if fileExists(":"..getResourceName(getThisResource()).."/files/files.txt") then f = fileOpen(":"..getResourceName(getThisResource()).."/files/files.txt") end 
    if not f then f = fileCreate(":"..getResourceName(getThisResource()).."/files/files.txt") end 
    if f then  
        fileSetPos(f, fileGetSize(f)) 
        fileWrite(f, "\n"..file) 
        fileClose(f) 
    end 
end 

Но как это использовать, я так и не пойму.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

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