Гайд Легкая подкачка библиотек

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Автор темы
Друг
8,763
11,199
Функция для легкой подкачки библиотек:
Недавно заметил как запарно делают подгрузку либ:
Взято отсюда: https://www.blast.hk/threads/106115/
Lua:
local script_vers = 2
local script_vers_text = "1.1"
local script_path = thisScript().path
local script_url = "https://raw.githubusercontent.com/SoMiK3/FindPlayers/main/FindPlayers.lua"
local update_path = getWorkingDirectory() .. "/fplayersupdate.ini"
local update_url = "https://raw.githubusercontent.com/SoMiK3/FindPlayers/main/fplayersupdate.ini"
local config_path = getWorkingDirectory() .. "/config/FindPlayer.ini"

local MoonFolder = getWorkingDirectory()
local MoonLibFolder = MoonFolder .. "\\lib"
local samplua_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events.lua"
local raknet_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/raknet.lua"
local utils_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/utils.lua"
local handlers_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/handlers.lua"
local extra_types_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/extra_types.lua"
local bitstream_io_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/bitstream_io.lua"
local core_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/core.lua"
local imgui_url = "https://raw.githubusercontent.com/SoMiK3/FastLinkLibs/main/imgui.lua"
local imguidll_url = "https://github.com/SoMiK3/FastLinkLibs/blob/main/MoonImGui.dll?raw=true"
local fAwesome5_url = "https://raw.githubusercontent.com/SoMiK3/FastLinkLibs/main/fAwesome5.lua"
local fa_solid_900_url = "https://github.com/SoMiK3/FastLinkLibs/blob/main/fa-solid-900.ttf?raw=true"
-- ДЛЯ МОДЕРАТОРОВ BLASTHACK. МНЕ СКАЗАЛИ, ЧТО ССЫЛКУ НА ИМГУИ МОЖНО НЕ МЕНЯТЬ, ТАК КАК ИМГУИ ОБНОВЛЯТЬСЯ НЕ БУДЕТ (ТОЖЕ САМОЕ С Ф.АВЕСОМ). НЕ НАДО ИЗ-ЗА ЭТОГО ОТПРАВЛЯТЬ ФАЙЛ НА ПОВТОРНУЮ ПРЕМОДЕРАЦИЮ, МОГУ ПОКАЗАТЬ ЧТО МНЕ ОТВЕТИЛ ВСЕФОРУМ.
nalichie = true

function onScriptTerminate(script, quitGame)
    if script == thisScript() then
        sampShowDialog(1338, "{FFFF00}Краш скрипта {FFFFFF}FindPlayers", "{FFFF00}Скрипт был {FFFFFF}крашнут {FFFF00}по какой-то причине...\nВозможно, скрипт был {FFFFFF}перезагружен{FFFF00}, это могло посодействовать появлению данного окна\n\nЕсли же скрипт не был перезагружен, пожалуйста, обратитесь сюда: {FFFFFF}https://vk.com/klamet1/\nНе забудьте указать{FFFF00}, каким было ваше последнее действие перед {FFFFFF}крашем{FFFF00} скрипта.\n\n\n{ffff00}И последнее... Никогда не отчаивайтесь и запомните, {FFFFFF}Аллах {FFFF00}вам в помощь.\n{ff0033}ДОЛБИТЕ ВСЕМИ СИЛАМИ ПО КЛАВИШАМ, ПОСТОЯННО ПЕРЕЗАГРУЖАЙТЕ СКРИПТ КОМБИНАЦИЕЙ CTRL + R\nПОСТОЯННО ПЕРЕЗАПУСКАЙТЕ ГТА ЕСЛИ КОМБИНАЦИЯ НЕ СРАБОТАЛА И НАДЕЙТЕСЬ НА УДАЧУ ДО ПОСЛЕДНЕГО, ПОКА СКРИПТ НЕ ЗАРАБОТАЕТ\n{FFFF00}Ну или просто дождитесь {FFFFFF}фикса {FFFF00}от автора :)\nВсем {00FF00}б{FFFF00}обра и позитива, {FFFFFF}чао", "{ff0000}Автор гей", nil, DIALOG_STYLE_MSGBOX)
    end
end

if not doesDirectoryExist("moonloader//lib") then
    createDirectory("moonloader//lib")
end
if not doesDirectoryExist("moonloader//lib//samp") then
    createDirectory("moonloader//lib//samp")
end
if not doesDirectoryExist("moonloader//lib//samp//events") then
    createDirectory("moonloader//lib//samp//events")
end
if not doesDirectoryExist("moonloader//lib//resource") then
    createDirectory("moonloader//lib//resource")
end
if not doesDirectoryExist("moonloader//lib//resource//fonts") then
    createDirectory("moonloader//lib//resource//fonts")
end

if not doesFileExist(MoonLibFolder .."\\samp\\events.lua") then
    downloadUrlToFile(samplua_url, MoonLibFolder .."\\samp\\events.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\samp\\raknet.lua") then
    downloadUrlToFile(raknet_url, MoonLibFolder .."\\samp\\raknet.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\samp\\events\\utils.lua") then
    downloadUrlToFile(utils_url, MoonLibFolder .."\\samp\\events\\utils.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\samp\\events\\handlers.lua") then
    downloadUrlToFile(handlers_url, MoonLibFolder .."\\samp\\events\\handlers.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\samp\\events\\extra_types.lua") then
    downloadUrlToFile(extra_types_url, MoonLibFolder .."\\samp\\events\\extra_types.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\samp\\events\\bitstream_io.lua") then
    downloadUrlToFile(bitstream_io_url, MoonLibFolder .."\\samp\\events\\bitstream_io.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\samp\\events\\core.lua") then
    downloadUrlToFile(core_url, MoonLibFolder .."\\samp\\events\\core.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\imgui.lua") then
    downloadUrlToFile(imgui_url, MoonLibFolder .."\\imgui.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\fAwesome5.lua") then
    downloadUrlToFile(fAwesome5_url, MoonLibFolder .."\\fAwesome5.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\resource\\fonts\\fa-solid-900.ttf") then
    downloadUrlToFile(fa_solid_900_url, MoonLibFolder .."\\resource\\fonts\\fa-solid-900.ttf")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\MoonImGui.dll") then
    downloadUrlToFile(imguidll_url, MoonLibFolder .."\\MoonImGui.dll")
    nalichie = false
end

Функция
Lua:
function loadLib(lib_data)
    local dlstatus = require('moonloader').download_status
    local loadPath = ''
    if lib_data.folder ~= '' then
        if not doesDirectoryExist(getWorkingDirectory()..'\\lib\\'..lib_data.folder) then
            createDirectory(getWorkingDirectory()..'\\lib\\'..lib_data.folder)
            print('Folder '..getWorkingDirectory()..'\\lib\\'..lib_data.folder..' created!')
        end
        loadPath = getWorkingDirectory()..'\\lib\\'..lib_data.folder..'\\'
    else
        loadPath = getWorkingDirectory()..'\\lib\\'
    end
    local files = table.getn(lib_data.files)
    local exists = 0
    for i = 1, table.getn(lib_data.files) do
        if doesFileExist(loadPath..lib_data.files[i].name) then
            exists = exists + 1
        end
    end
    if exists ~= files then
        for i = 1, table.getn(lib_data.files) do
            if doesFileExist(loadPath..lib_data.files[i].name) then
                print('error, file "'..loadPath..lib_data.files[i].name..'" already exists!')
            else
                downloadUrlToFile(lib_data.files[i].link, loadPath..lib_data.files[i].name, function (id, status, p1, p2)
                    if status == dlstatus.STATUSEX_ENDDOWNLOAD then
                        print('File  loaded!')
                    end
                end)
            end
        end
    end
end
в качестве аргумента при вызове функции необходимо указывать таблицу с содержимыми библиотеки, она должна выглядеть так:

Lua:
{
    name = 'Название библиотеки', folder = 'папка (оставь пустым если не требуется)',
    files = {
        {name = 'название_файла_1.lua', link = 'прямая ссылка на загрузку'},
        {name = 'название_файла_2.lua', link = 'прямая ссылка на загрузку'},
    },
},

Пример таблицы для библиотеки SAMP.lua (samp.events):
Lua:
{
    name = 'SAMP.lua', folder = 'samp',
    files = {
        {name = 'events.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events.lua"},
        {name = 'raknet.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/raknet.lua"},
        {name = 'utils.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/utils.lua"},
        {name = 'handlers.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/handlers.lua"},
        {name = 'extra_types.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/extra_types.lua"},
        {name = 'bitstream_io.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/bitstream_io.lua"},
        {name = 'core.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/core.lua"},
    }
}

Пример вызова функции:
Lua:
local libs = {
    sampev = {
        name = 'SAMP.lua', folder = 'samp',
        files = {
            {name = 'events.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events.lua"},
            {name = 'raknet.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/raknet.lua"},
            {name = 'utils.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/utils.lua"},
            {name = 'handlers.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/handlers.lua"},
            {name = 'extra_types.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/extra_types.lua"},
            {name = 'bitstream_io.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/bitstream_io.lua"},
            {name = 'core.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/core.lua"},
        },
    }
}

loadLib(libs.sampev)

function loadLib(lib_data)
    local dlstatus = require('moonloader').download_status
    local loadPath = ''
    if lib_data.folder ~= '' then
        if not doesDirectoryExist(getWorkingDirectory()..'\\lib\\'..lib_data.folder) then
            createDirectory(getWorkingDirectory()..'\\lib\\'..lib_data.folder)
            print('Folder '..getWorkingDirectory()..'\\lib\\'..lib_data.folder..' created!')
        end
        loadPath = getWorkingDirectory()..'\\lib\\'..lib_data.folder..'\\'
    else
        loadPath = getWorkingDirectory()..'\\lib\\'
    end
    local files = table.getn(lib_data.files)
    local exists = 0
    for i = 1, table.getn(lib_data.files) do
        if doesFileExist(loadPath..lib_data.files[i].name) then
            exists = exists + 1
        end
    end
    if exists ~= files then
        for i = 1, table.getn(lib_data.files) do
            if doesFileExist(loadPath..lib_data.files[i].name) then
                print('error, file "'..loadPath..lib_data.files[i].name..'" already exists!')
            else
                downloadUrlToFile(lib_data.files[i].link, loadPath..lib_data.files[i].name, function (id, status, p1, p2)
                    if status == dlstatus.STATUSEX_ENDDOWNLOAD then
                        print('File  loaded!')
                    end
                end)
            end
        end
    end
end
НАПОМИНАНИЕ: Подкачивать библиотеки можно только с официальных ресурсов!
 
Последнее редактирование:

CaJlaT

Овощ
Модератор
2,806
2,603
Почему ты делаешь абы как? Сделал бы свой МЗ, качать с луарокс, в чем трабл делать сразу нормально?
Если бы 027 уже был готов, то эта статья была бы вообще бесполезной
1635490780353.png
 
  • Нравится
Реакции: mzxer и EclipsedFlow

meowprd

Тот самый Котовский
Проверенный
1,280
712
Ну раз уж это ЛЕГКАЯ, то поделюсь своей НАИЛЕГЧАЙШЕЙ
Пример на samp.events:
Lua:
local dhook, hook = pcall(require, 'lib.samp.events')
local dlstatus = require('moonloader').download_status

function main()
    -- Some code
    checkLibs()
end

function checkLib()
    if not dhook then
        print("Start downloading samp.events")
        local folders = {"samp", "samp/events"}
        local files = {'events.lua', 'events_core.lua', 'packet.lua', 'raknet.lua', 'synchronization.lua', 'events/bitstream_io.lua', 'events/core.lua', 'events/extra_types.lua', 'events/handlers.lua', 'events/utils.lua'}
        for k, v in pairs(folders) do if not doesDirectoryExist('moonloadr/lib/'..v) then createDirectory('moonloader/lib/'..v) end end
        for k, v in pairs(files) do
            local status = 'process'
            downloadUrlToFile('https://raw.githubusercontent.com/MeowBrightside/luaLibs/main/samp/'..v, 'moonloader/lib/samp/'..v, function(id, status, p1, p2)
                if status == dlstatus.STATUS_DOWNLOADINGDATA then
                    status = 'process'
                elseif status == dlstatus.STATUS_ENDDOWNLOADDATA then
                    status = 'succ'
                elseif status == 64 then
                    status = 'failed'
                end
            end)
            while status == "process" do wait(0) end
            if status == "failed" then
                print("Error download "..v)
            else
                print(v.." downloaded.")
            end
        end
        thisScript():reload()
    end
end
 

leekyrave

Известный
419
223
масс он не набрал, единицы его использовали, плюс там проблема важная
пацаны не понимают ахуенности фичи, это в разы облегчает еблю и не нужно писать кастомную проверку либ, после релиза я думаю, что юзали бы
 
  • Нравится
Реакции: deleted-user-422095

meowprd

Тот самый Котовский
Проверенный
1,280
712
пацаны не понимают ахуенности фичи, это в разы облегчает еблю и не нужно писать кастомную проверку либ, после релиза я думаю, что юзали бы
Фича класс, но 95% сидят на муне 0.26, поэтому и не получила большого распространения, правильно говоришь, что после релиза юзали бы
(а бывали и случаи, когда юзеры сидят и сейчас на 25 муне)
 

Dewize

Известный
432
88
Ну раз уж это ЛЕГКАЯ, то поделюсь своей НАИЛЕГЧАЙШЕЙ
Пример на samp.events:
Lua:
local dhook, hook = pcall(require, 'lib.samp.events')
local dlstatus = require('moonloader').download_status

function main()
    -- Some code
    checkLibs()
end

function checkLib()
    if not dhook then
        print("Start downloading samp.events")
        local folders = {"samp", "samp/events"}
        local files = {'events.lua', 'events_core.lua', 'packet.lua', 'raknet.lua', 'synchronization.lua', 'events/bitstream_io.lua', 'events/core.lua', 'events/extra_types.lua', 'events/handlers.lua', 'events/utils.lua'}
        for k, v in pairs(folders) do if not doesDirectoryExist('moonloadr/lib/'..v) then createDirectory('moonloader/lib/'..v) end end
        for k, v in pairs(files) do
            local status = 'process'
            downloadUrlToFile('https://raw.githubusercontent.com/MeowBrightside/luaLibs/main/samp/'..v, 'moonloader/lib/samp/'..v, function(id, status, p1, p2)
                if status == dlstatus.STATUS_DOWNLOADINGDATA then
                    status = 'process'
                elseif status == dlstatus.STATUS_ENDDOWNLOADDATA then
                    status = 'succ'
                elseif status == 64 then
                    status = 'failed'
                end
            end)
            while status == "process" do wait(0) end
            if status == "failed" then
                print("Error download "..v)
            else
                print(v.." downloaded.")
            end
        end
        thisScript():reload()
    end
end
нихуя не работает

attempt to index local 'sampev' (a string value)
stack traceback:

Функция для легкой подкачки библиотек:
Недавно заметил как запарно делают подгрузку либ:
Взято отсюда: https://www.blast.hk/threads/106115/
Lua:
local script_vers = 2
local script_vers_text = "1.1"
local script_path = thisScript().path
local script_url = "https://raw.githubusercontent.com/SoMiK3/FindPlayers/main/FindPlayers.lua"
local update_path = getWorkingDirectory() .. "/fplayersupdate.ini"
local update_url = "https://raw.githubusercontent.com/SoMiK3/FindPlayers/main/fplayersupdate.ini"
local config_path = getWorkingDirectory() .. "/config/FindPlayer.ini"

local MoonFolder = getWorkingDirectory()
local MoonLibFolder = MoonFolder .. "\\lib"
local samplua_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events.lua"
local raknet_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/raknet.lua"
local utils_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/utils.lua"
local handlers_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/handlers.lua"
local extra_types_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/extra_types.lua"
local bitstream_io_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/bitstream_io.lua"
local core_url = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/core.lua"
local imgui_url = "https://raw.githubusercontent.com/SoMiK3/FastLinkLibs/main/imgui.lua"
local imguidll_url = "https://github.com/SoMiK3/FastLinkLibs/blob/main/MoonImGui.dll?raw=true"
local fAwesome5_url = "https://raw.githubusercontent.com/SoMiK3/FastLinkLibs/main/fAwesome5.lua"
local fa_solid_900_url = "https://github.com/SoMiK3/FastLinkLibs/blob/main/fa-solid-900.ttf?raw=true"
-- ДЛЯ МОДЕРАТОРОВ BLASTHACK. МНЕ СКАЗАЛИ, ЧТО ССЫЛКУ НА ИМГУИ МОЖНО НЕ МЕНЯТЬ, ТАК КАК ИМГУИ ОБНОВЛЯТЬСЯ НЕ БУДЕТ (ТОЖЕ САМОЕ С Ф.АВЕСОМ). НЕ НАДО ИЗ-ЗА ЭТОГО ОТПРАВЛЯТЬ ФАЙЛ НА ПОВТОРНУЮ ПРЕМОДЕРАЦИЮ, МОГУ ПОКАЗАТЬ ЧТО МНЕ ОТВЕТИЛ ВСЕФОРУМ.
nalichie = true

function onScriptTerminate(script, quitGame)
    if script == thisScript() then
        sampShowDialog(1338, "{FFFF00}Краш скрипта {FFFFFF}FindPlayers", "{FFFF00}Скрипт был {FFFFFF}крашнут {FFFF00}по какой-то причине...\nВозможно, скрипт был {FFFFFF}перезагружен{FFFF00}, это могло посодействовать появлению данного окна\n\nЕсли же скрипт не был перезагружен, пожалуйста, обратитесь сюда: {FFFFFF}https://vk.com/klamet1/\nНе забудьте указать{FFFF00}, каким было ваше последнее действие перед {FFFFFF}крашем{FFFF00} скрипта.\n\n\n{ffff00}И последнее... Никогда не отчаивайтесь и запомните, {FFFFFF}Аллах {FFFF00}вам в помощь.\n{ff0033}ДОЛБИТЕ ВСЕМИ СИЛАМИ ПО КЛАВИШАМ, ПОСТОЯННО ПЕРЕЗАГРУЖАЙТЕ СКРИПТ КОМБИНАЦИЕЙ CTRL + R\nПОСТОЯННО ПЕРЕЗАПУСКАЙТЕ ГТА ЕСЛИ КОМБИНАЦИЯ НЕ СРАБОТАЛА И НАДЕЙТЕСЬ НА УДАЧУ ДО ПОСЛЕДНЕГО, ПОКА СКРИПТ НЕ ЗАРАБОТАЕТ\n{FFFF00}Ну или просто дождитесь {FFFFFF}фикса {FFFF00}от автора :)\nВсем {00FF00}б{FFFF00}обра и позитива, {FFFFFF}чао", "{ff0000}Автор гей", nil, DIALOG_STYLE_MSGBOX)
    end
end

if not doesDirectoryExist("moonloader//lib") then
    createDirectory("moonloader//lib")
end
if not doesDirectoryExist("moonloader//lib//samp") then
    createDirectory("moonloader//lib//samp")
end
if not doesDirectoryExist("moonloader//lib//samp//events") then
    createDirectory("moonloader//lib//samp//events")
end
if not doesDirectoryExist("moonloader//lib//resource") then
    createDirectory("moonloader//lib//resource")
end
if not doesDirectoryExist("moonloader//lib//resource//fonts") then
    createDirectory("moonloader//lib//resource//fonts")
end

if not doesFileExist(MoonLibFolder .."\\samp\\events.lua") then
    downloadUrlToFile(samplua_url, MoonLibFolder .."\\samp\\events.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\samp\\raknet.lua") then
    downloadUrlToFile(raknet_url, MoonLibFolder .."\\samp\\raknet.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\samp\\events\\utils.lua") then
    downloadUrlToFile(utils_url, MoonLibFolder .."\\samp\\events\\utils.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\samp\\events\\handlers.lua") then
    downloadUrlToFile(handlers_url, MoonLibFolder .."\\samp\\events\\handlers.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\samp\\events\\extra_types.lua") then
    downloadUrlToFile(extra_types_url, MoonLibFolder .."\\samp\\events\\extra_types.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\samp\\events\\bitstream_io.lua") then
    downloadUrlToFile(bitstream_io_url, MoonLibFolder .."\\samp\\events\\bitstream_io.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\samp\\events\\core.lua") then
    downloadUrlToFile(core_url, MoonLibFolder .."\\samp\\events\\core.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\imgui.lua") then
    downloadUrlToFile(imgui_url, MoonLibFolder .."\\imgui.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\fAwesome5.lua") then
    downloadUrlToFile(fAwesome5_url, MoonLibFolder .."\\fAwesome5.lua")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\resource\\fonts\\fa-solid-900.ttf") then
    downloadUrlToFile(fa_solid_900_url, MoonLibFolder .."\\resource\\fonts\\fa-solid-900.ttf")
    nalichie = false
end
if not doesFileExist(MoonLibFolder .."\\MoonImGui.dll") then
    downloadUrlToFile(imguidll_url, MoonLibFolder .."\\MoonImGui.dll")
    nalichie = false
end

Функция
Lua:
function loadLib(lib_data)
    local dlstatus = require('moonloader').download_status
    local loadPath = ''
    if lib_data.folder ~= '' then
        if not doesDirectoryExist(getWorkingDirectory()..'\\lib\\'..lib_data.folder) then
            createDirectory(getWorkingDirectory()..'\\lib\\'..lib_data.folder)
            print('Folder '..getWorkingDirectory()..'\\lib\\'..lib_data.folder..' created!')
        end
        loadPath = getWorkingDirectory()..'\\lib\\'..lib_data.folder..'\\'
    else
        loadPath = getWorkingDirectory()..'\\lib\\'
    end
    local files = table.getn(lib_data.files)
    local exists = 0
    for i = 1, table.getn(lib_data.files) do
        if doesFileExist(loadPath..lib_data.files[i].name) then
            exists = exists + 1
        end
    end
    if exists ~= files then
        for i = 1, table.getn(lib_data.files) do
            if doesFileExist(loadPath..lib_data.files[i].name) then
                print('error, file "'..loadPath..lib_data.files[i].name..'" already exists!')
            else
                downloadUrlToFile(lib_data.files[i].link, loadPath..lib_data.files[i].name, function (id, status, p1, p2)
                    if status == dlstatus.STATUSEX_ENDDOWNLOAD then
                        print('File  loaded!')
                    end
                end)
            end
        end
    end
end
в качестве аргумента при вызове функции необходимо указывать таблицу с содержимыми библиотеки, она должна выглядеть так:

Lua:
{
    name = 'Название библиотеки', folder = 'папка (оставь пустым если не требуется)',
    files = {
        {name = 'название_файла_1.lua', link = 'прямая ссылка на загрузку'},
        {name = 'название_файла_2.lua', link = 'прямая ссылка на загрузку'},
    },
},

Пример таблицы для библиотеки SAMP.lua (samp.events):
Lua:
{
    name = 'SAMP.lua', folder = 'samp',
    files = {
        {name = 'events.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events.lua"},
        {name = 'raknet.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/raknet.lua"},
        {name = 'utils.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/utils.lua"},
        {name = 'handlers.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/handlers.lua"},
        {name = 'extra_types.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/extra_types.lua"},
        {name = 'bitstream_io.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/bitstream_io.lua"},
        {name = 'core.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/core.lua"},
    }
}

Пример вызова функции:
Lua:
local libs = {
    sampev = {
        name = 'SAMP.lua', folder = 'samp',
        files = {
            {name = 'events.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events.lua"},
            {name = 'raknet.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/raknet.lua"},
            {name = 'utils.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/utils.lua"},
            {name = 'handlers.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/handlers.lua"},
            {name = 'extra_types.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/extra_types.lua"},
            {name = 'bitstream_io.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/bitstream_io.lua"},
            {name = 'core.lua', link = "https://raw.githubusercontent.com/THE-FYP/SAMP.Lua/master/samp/events/core.lua"},
        },
    }
}

loadLib(libs.sampev)

function loadLib(lib_data)
    local dlstatus = require('moonloader').download_status
    local loadPath = ''
    if lib_data.folder ~= '' then
        if not doesDirectoryExist(getWorkingDirectory()..'\\lib\\'..lib_data.folder) then
            createDirectory(getWorkingDirectory()..'\\lib\\'..lib_data.folder)
            print('Folder '..getWorkingDirectory()..'\\lib\\'..lib_data.folder..' created!')
        end
        loadPath = getWorkingDirectory()..'\\lib\\'..lib_data.folder..'\\'
    else
        loadPath = getWorkingDirectory()..'\\lib\\'
    end
    local files = table.getn(lib_data.files)
    local exists = 0
    for i = 1, table.getn(lib_data.files) do
        if doesFileExist(loadPath..lib_data.files[i].name) then
            exists = exists + 1
        end
    end
    if exists ~= files then
        for i = 1, table.getn(lib_data.files) do
            if doesFileExist(loadPath..lib_data.files[i].name) then
                print('error, file "'..loadPath..lib_data.files[i].name..'" already exists!')
            else
                downloadUrlToFile(lib_data.files[i].link, loadPath..lib_data.files[i].name, function (id, status, p1, p2)
                    if status == dlstatus.STATUSEX_ENDDOWNLOAD then
                        print('File  loaded!')
                    end
                end)
            end
        end
    end
end
и это тоже
 
Последнее редактирование: