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

Nelit

Потрачен
Автор темы
252
38
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем привет. Решил рассказать как сделать систему авто-обновлений скрипта. Это чутка другие что тут были.
Погнали!

Как это будет работать. Скрипт при запуске будет сверять версию в файле update.ini на github и в нашем скрипте. Если версии не совпадают, игроку напишет в чат о том, что есть новая версия. Откроется возможно написать команду /update, после чего скрипт начнёт обновление. Начнём делать!

Шаг №1. Подключение нужных библиотек.
Шаг №1:
local dlstatus = require('moonloader').download_status

Шаг №2. Создание переменных.
Шаг №2:
update_state = false -- Если переменная == true, значит начнётся обновление.
update_found = false -- Если будет true, будет доступна команда /update.

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

local update_url = '' -- Путь к ini файлу. Позже нам понадобиться.
local update_path = getWorkingDirectory() .. "/update.ini"

local script_url = '' -- Путь скрипту.
local script_path = thisScript().path

Шаг №3. Загрузка скрипта на GitHub.

1. Для начала создадим новый репозиторий.

Нажимаем на меню, выбираем "Твои репозитории".
Создание репозитория.png


Нажимаем на зелёную кнопку "New"
Screenshot_1.png


Вписываем имя репозитория, ставим Public и нажимаем "Создать репозиторий".
Screenshot_2.png


Готово! Наш репозиторий создан!

Screenshot_3.png

2. Создадим несколько файлов и получим ссылки на них.
Нажмём на "Creating a new file"
Screenshot_3.png


Создаём новый файл с названием "update.ini". Код который надо вставить сюда:
INI:
[info]
vers=1.0
vers_text=v1.0
Нажимаем "Comit new file" (На скрине кнопка не влезла. Её не заметить сложно. Она в самом низу)
Screenshot_4.png


Получим ссылку на наш файл.
Переходим в наш репозиторий. Нажимаем на наш update.ini

Screenshot_8.png

Нажимаем на кнопку "Raw", и копируем нашу ссылку.
Screenshot_9.png

Возвращаемся назад и находим переменную с нашей ссылкой
Lua:
local update_url = '' -- Путь к ini файлу. Позже нам понадобиться.
Вставляем сюда.

На этом остановимся. Второй файл будет наш скрипт уже с готовой системной обновлений.

Шаг №3. Написание самого кода. Ниже предоставлен код с комментариями.
Lua:
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
            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

Шаг №4. Компилируем наш скрипт в luac и загружаем на GitHub.
Как скомпилировать скрипт думаю найдёте. (Я использую python компилятор, вы можете юзать LuaJIT).


Нажимаем на кнопку "Add file" -> Нажимаем кнопку "Upload files". Выбираем наш компилированный luac скрипт.
Screenshot_5.png


Теперь вернёмся в самое начало и вспомним про данную переменную
Lua:
local script_url = '' -- Путь к скрипту.

Заходим в корень репозитория, нажимаем на наш скрипт.
Screenshot_10.png


Видим кнопку "View raw", нажимаем по ней правой кнопкой мышки, "Копировать ссылку". Вставляем её в нашу переменную
Lua:
local script_url = '' -- Путь к скрипту.
Screenshot_11.png

Ура!!! Всё получилось. Теперь как же обновить наш скрипт так, что-бы обновление увидели ВСЕ у кого он есть?

1. Загружаем наш luac скрипт с готовым обновлением в нём на github как обычно. ВАЖНО!!! НАЗВАНИЕ ФАЙЛА ДОЛЖНО СОВПАДАТЬ С ФАЙЛОМ ТОТ ЧТО ЛЕЖИТ В ПАПКЕ MOONLOADER!

2. Заходим в наш репозиторий, выбираем наш update.ini. Нажимаем "Редактировать файл"

Screenshot_6.png

3. В редакторе меняем строку "vers". К нему надо добавить 1 цифру. Пример: Было - 1.0. Стало - 1.1.
Screenshot_7.png

4. vers_text - это версия, которая выводится игроку в чат. Она сообщает какая новая версия скрипта.

5. Профит! У нас всё вышло.

Всем спасибо за прочтение :)
 

Вложения

  • Screenshot_3.png
    Screenshot_3.png
    49.6 KB · Просмотры: 111
  • Screenshot_6.png
    Screenshot_6.png
    7.1 KB · Просмотры: 106
Последнее редактирование:

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
Не стоит использовать гитхаб в качестве хостинга. Это все же место для хранения git репозиториев.
Компилировать скрипт также не обязательно. Не компилируя файл, вы ускоряете время проверки на бластхаке :roflanebalo:
 
  • Нравится
Реакции: PanSeek, leekyrave и AnWu

Nelit

Потрачен
Автор темы
252
38
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Не стоит использовать гитхаб в качестве хостинга. Это все же место для хранения git репозиториев.
Компилировать скрипт также не обязательно. Не компилируя файл, вы ускоряете время проверки на бластхаке :roflanebalo:
Это как пример. В качестве хоста можно использовать любой.
 

Akionka

akionka.lua
Проверенный
742
499
Не стоит использовать гитхаб в качестве хостинга. Это все же место для хранения git репозиториев.
Компилировать скрипт также не обязательно. Не компилируя файл, вы ускоряете время проверки на бластхаке :roflanebalo:
почему бы и не использовать releases?
 

Hatiko

Известный
Проверенный
1,472
611
Не самый лучший вариант. Если проект будет более менее популярный и количество проверок/скачиваний увеличится, тем самым исчерпает лимит, dropbox может заблокировать временно доступ к публичной ссылке, или вообще к любой, точно не помню. У меня такое было не раз, пришлось отказаться.
 

Nelit

Потрачен
Автор темы
252
38
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Не самый лучший вариант. Если проект будет более менее популярный и количество проверок/скачиваний увеличится, тем самым исчерпает лимит, dropbox может заблокировать временно доступ к публичной ссылке, или вообще к любой, точно не помню. У меня такое было не раз, пришлось отказаться.
Ну не суть. Я в данном гайде рассказывал как сделать на гит хабе
 

Smeruxa

Известный
1,295
680
дропбокс не получится,блочить будет и говорить,что у тебя устаревшая версия браузера
Не самый лучший вариант. Если проект будет более менее популярный и количество проверок/скачиваний увеличится, тем самым исчерпает лимит, dropbox может заблокировать временно доступ к публичной ссылке, или вообще к любой, точно не помню. У меня такое было не раз, пришлось отказаться.
Не знаю, сколько раз использовал, при тестах качал более 50 раз, все было хорошо
 
  • Нравится
Реакции: Nelit

Alkoigel

Участник
116
15
почему то умирает скрипт в строке.
Lua:
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
            os.remove(update_path)
        end
    end)
end

в 7 строке - '=' expected near '=='
 
  • Нравится
Реакции: Nelit

Adrian G.

Известный
Проверенный
521
453
почему то умирает скрипт в строке.
Lua:
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
            os.remove(update_path)
        end
    end)
end

в 7 строке - '=' expected near '=='
update_found = true, а не == true.
 
  • Нравится
Реакции: Nelit

Curtis

Участник
282
10
Почему сначала у меня выполняется IF, а только потом функция ?
1650317802974.png

1650317827475.png
 

_Nelit_

Потрачен
109
39
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.