- 252
- 39
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем привет. Решил рассказать как сделать систему авто-обновлений скрипта. Это чутка другие что тут были.
Погнали!
Как это будет работать. Скрипт при запуске будет сверять версию в файле update.ini на github и в нашем скрипте. Если версии не совпадают, игроку напишет в чат о том, что есть новая версия. Откроется возможно написать команду /update, после чего скрипт начнёт обновление. Начнём делать!
Шаг №1. Подключение нужных библиотек.
Погнали!
Как это будет работать. Скрипт при запуске будет сверять версию в файле 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. Для начала создадим новый репозиторий.
2. Создадим несколько файлов и получим ссылки на них.
Шаг №3. Написание самого кода. Ниже предоставлен код с комментариями.
1. Для начала создадим новый репозиторий.
Нажимаем на меню, выбираем "Твои репозитории".
Нажимаем на зелёную кнопку "New"
Вписываем имя репозитория, ставим Public и нажимаем "Создать репозиторий".
Готово! Наш репозиторий создан!
Нажимаем на зелёную кнопку "New"
Вписываем имя репозитория, ставим Public и нажимаем "Создать репозиторий".
Готово! Наш репозиторий создан!
2. Создадим несколько файлов и получим ссылки на них.
Нажмём на "Creating a new file"
Создаём новый файл с названием "update.ini". Код который надо вставить сюда:
Нажимаем "Comit new file" (На скрине кнопка не влезла. Её не заметить сложно. Она в самом низу)
Получим ссылку на наш файл.
Переходим в наш репозиторий. Нажимаем на наш update.ini
Нажимаем на кнопку "Raw", и копируем нашу ссылку.
Возвращаемся назад и находим переменную с нашей ссылкой
Вставляем сюда.
На этом остановимся. Второй файл будет наш скрипт уже с готовой системной обновлений.
Создаём новый файл с названием "update.ini". Код который надо вставить сюда:
INI:
[info]
vers=1.0
vers_text=v1.0
Получим ссылку на наш файл.
Переходим в наш репозиторий. Нажимаем на наш update.ini
Нажимаем на кнопку "Raw", и копируем нашу ссылку.
Возвращаемся назад и находим переменную с нашей ссылкой
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 скрипт.
Теперь вернёмся в самое начало и вспомним про данную переменную
Заходим в корень репозитория, нажимаем на наш скрипт.
Видим кнопку "View raw", нажимаем по ней правой кнопкой мышки, "Копировать ссылку". Вставляем её в нашу переменную
Теперь вернёмся в самое начало и вспомним про данную переменную
Lua:
local script_url = '' -- Путь к скрипту.
Заходим в корень репозитория, нажимаем на наш скрипт.
Видим кнопку "View raw", нажимаем по ней правой кнопкой мышки, "Копировать ссылку". Вставляем её в нашу переменную
Lua:
local script_url = '' -- Путь к скрипту.
Ура!!! Всё получилось. Теперь как же обновить наш скрипт так, что-бы обновление увидели ВСЕ у кого он есть?
1. Загружаем наш luac скрипт с готовым обновлением в нём на github как обычно. ВАЖНО!!! НАЗВАНИЕ ФАЙЛА ДОЛЖНО СОВПАДАТЬ С ФАЙЛОМ ТОТ ЧТО ЛЕЖИТ В ПАПКЕ MOONLOADER!
2. Заходим в наш репозиторий, выбираем наш update.ini. Нажимаем "Редактировать файл"
3. В редакторе меняем строку "vers". К нему надо добавить 1 цифру. Пример: Было - 1.0. Стало - 1.1.
4. vers_text - это версия, которая выводится игроку в чат. Она сообщает какая новая версия скрипта.
5. Профит! У нас всё вышло.
Всем спасибо за прочтение :)
Вложения
Последнее редактирование: