Информация Гайд Система авто-обновлений для Вашего скрипта

Curtis

Участник
282
10
Я хотел для начала попробовать как оно будет работать, а потом уже добавить свои коррективы, но почему-то есть ошибка
Lua:
update_state = false -- Если переменная == true, значит начнётся обновление.
update_found = false -- Если будет true, будет доступна команда /update.

local script_vers = 1.1
local script_vers_text = "v1.0" -- Название нашей версии. В будущем будем её выводить юзеру.

local update_url = 'https://raw.githubusercontent.com/Dev-Oleksandr/auto-update/main/update.ini' -- Путь к ini файлу. Позже нам понадобиться.
local update_path = getWorkingDirectory() .. "/update.ini"

local script_url = 'https://github.com/Dev-Oleksandr/auto-update/blob/main/ManagementTools.luac?raw=true' -- Путь скрипту.
local script_path = thisScript().path


function check_update() -- Создаём функцию которая будет проверять наличие обновлений при запуске скрипта.
    downloadUrlToFile(update_url, update_path, function(id, status)
        if status == dlstatus.STATUS_ENDDOWNLOADDATA then
            updateIni = inicfg.load(nil, update_path)
            if tonumber(updateIni.info.vers) > script_vers then -- Сверяем версию в скрипте и в ini файле на github
                sampAddChatMessage("{FFFFFF}Имеется {32CD32}новая {FFFFFF}версия скрипта. Версия: {32CD32}"..updateIni.info.vers_text..". {FFFFFF}/update что-бы обновить", 0xFF0000) -- Сообщаем о новой версии.
                update_found = true -- если обновление найдено, ставим переменной значение true
            end
            sampAddChatMessage(tonumber(updateIni.info.vers))
            os.remove(update_path)
        end
    end)
end


function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    check_update()

    if update_found then -- Если найдено обновление, регистрируем команду /update.
        sampRegisterChatCommand('update', function()  -- Если пользователь напишет команду, начнётся обновление.
            update_state = true -- Если человек пропишет /update, скрипт обновится.
        end)
    else
        sampAddChatMessage('{FFFFFF}Нету доступных обновлений!')
    end

    while true do wait(0)

        if update_state then -- Если человек напишет /update и обновлени есть, начнётся скаачивание скрипта.
            downloadUrlToFile(script_url, script_path, function(id, status)
                if status == dlstatus.STATUS_ENDDOWNLOADDATA then
                    sampAddChatMessage("{FFFFFF}Скрипт {32CD32}успешно {FFFFFF}обновлён.", 0xFF0000)
                end
            end)
            break
        end       
    end
end
 

shrug228

Активный
212
75
Почему сначала у меня выполняется IF, а только потом функция ? Посмотреть вложение 144115
Посмотреть вложение 144116
check_update разве не создает отдельный поток под себя? 0_о

Я хотел для начала попробовать как оно будет работать, а потом уже добавить свои коррективы, но почему-то есть ошибка
Lua:
update_state = false -- Если переменная == true, значит начнётся обновление.
update_found = false -- Если будет true, будет доступна команда /update.

local script_vers = 1.1
local script_vers_text = "v1.0" -- Название нашей версии. В будущем будем её выводить юзеру.

local update_url = 'https://raw.githubusercontent.com/Dev-Oleksandr/auto-update/main/update.ini' -- Путь к ini файлу. Позже нам понадобиться.
local update_path = getWorkingDirectory() .. "/update.ini"

local script_url = 'https://github.com/Dev-Oleksandr/auto-update/blob/main/ManagementTools.luac?raw=true' -- Путь скрипту.
local script_path = thisScript().path


function check_update() -- Создаём функцию которая будет проверять наличие обновлений при запуске скрипта.
    downloadUrlToFile(update_url, update_path, function(id, status)
        if status == dlstatus.STATUS_ENDDOWNLOADDATA then
            updateIni = inicfg.load(nil, update_path)
            if tonumber(updateIni.info.vers) > script_vers then -- Сверяем версию в скрипте и в ini файле на github
                sampAddChatMessage("{FFFFFF}Имеется {32CD32}новая {FFFFFF}версия скрипта. Версия: {32CD32}"..updateIni.info.vers_text..". {FFFFFF}/update что-бы обновить", 0xFF0000) -- Сообщаем о новой версии.
                update_found = true -- если обновление найдено, ставим переменной значение true
            end
            sampAddChatMessage(tonumber(updateIni.info.vers))
            os.remove(update_path)
        end
    end)
end


function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    check_update()

    if update_found then -- Если найдено обновление, регистрируем команду /update.
        sampRegisterChatCommand('update', function()  -- Если пользователь напишет команду, начнётся обновление.
            update_state = true -- Если человек пропишет /update, скрипт обновится.
        end)
    else
        sampAddChatMessage('{FFFFFF}Нету доступных обновлений!')
    end

    while true do wait(0)

        if update_state then -- Если человек напишет /update и обновлени есть, начнётся скаачивание скрипта.
            downloadUrlToFile(script_url, script_path, function(id, status)
                if status == dlstatus.STATUS_ENDDOWNLOADDATA then
                    sampAddChatMessage("{FFFFFF}Скрипт {32CD32}успешно {FFFFFF}обновлён.", 0xFF0000)
                end
            end)
            break
        end      
    end
end
Код ошибки-то дай)
 

Curtis

Участник
282
10
check_update разве не создает отдельный поток под себя? 0_о


Код ошибки-то дай)
Ошибки системной нет
Почему сначала у меня выполняется IF, а только потом функция ? Посмотреть вложение 144115
Посмотреть вложение 144116

потому что check_update - асинхронная функция
а как это пофиксить?
 

blessave

Известный
364
108
sad:
local sp  = require 'lib.samp.events'
update_state = false -- Если переменная == true, значит начнётся обновление.

local script_vers = 1.1
local script_vers_text = "v1.0" -- Название нашей версии. В будущем будем её выводить юзеру.

local update_url = 'https://raw.githubusercontent.com/Dev-Oleksandr/auto-update/main/update.ini' -- Путь к ini файлу. Позже нам понадобиться.
local update_path = getWorkingDirectory() .. "/update.ini"

local script_url = 'https://github.com/Dev-Oleksandr/auto-update/blob/main/ManagementTools.luac?raw=true' -- Путь скрипту.
local script_path = thisScript().path



function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    
    downloadUrlToFile(update_url, update_path, function(id, status)
        if status == dlstatus.STATUS_ENDDOWNLOADDATA then
            updateini = inicfg.load(nil, update_path)
            if tonumber(updateini.info.vers) > script_vers then
                sampAddChatMessage("Есть обновление! Версия {FA8072}" .. updateini.info.vers_text, -1)
                update_state = true
            end
            os.remove(update_path)
        end
    end)

    while true do wait(0)
      
    end
end

function sp.onSendCommand(input)
    if input:find('^/update') and update_state then 
        lua_thread.create(function()
            downloadUrlToFile(script_url, script_path, function(id, status)
                if status == dlstatus.STATUS_ENDDOWNLOADDATA then
                    sampAddChatMessage("Скрипт успешно обновлен!", -1)
                    thisScript():reload()
                end
            end)
            update_state = false
        end)
        return false
    end 
end
 
  • Нравится
Реакции: Kline и Curtis