CLEO | Пишем автообновление скрипта - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Alowir  
CLEO | Пишем автообновление скрипта
S0f4aR Дата: Понедельник, 16.01.2017, 14:03 | Сообщение # 1
Новичок
Сообщений: 23
Статус: Offline
скрипт будет автоматически обновляться.
В данной статейке я расскажу о некоторых опкодах SF версии 5.2, а рассмотрим их в простейшем способе обновления скрипта.

Для того, чтобы нам начать делать систему обновления, необходимо сервер, который будет хранить данные об обновлении.
Необходимо найти любой хостинг для их хранения(хостинг сайта, "облако", SVN…).
Так-же нужен сам скрипт

Далее нужно обдумать структуру файла обновления. Я не буду париться и сделаю более-менее простую:
Код
[UPDATE]
version=2
script_url=http://legend2360.googlecode.com/svn/trunk/autoupd_ex/cleo_name/script.cs
changelog_url=http://legend2360.googlecode.com/svn/trunk/autoupd_ex/cleo_name/change.log

version - номер версии(для меня будет лучше хранить в целочисленном формате(без дробей));
script_url - ссылка на загрузку скрипта;
changelog_url - ссылка на загрузку списка изменений(это необязательно, как и предыдущее. Все это можно указать в самом скрипте).

пишем скрипт
Основная часть - написание кода для автообновления.
Пытался написать комментарии ко всем строкам. Список изменений можно вырезать.
Чтобы это всё было столь удобно, сделаем это все через функции(0AB1, 0AB2):
Код
{$CLEO}

0000:

const // Константы для определения названий файлов и версии скрипта
    SCRIPT_VERSION = 1

    UPDATEINFO_FILE = "cleo_name_update.txt"
    CHANGELOG_FILE = "cleo_name_changelog.txt"
end

repeat
    wait 400
until 0AFA:  is_samp_available

0AF8: samp add_message_to_chat "Скрипт cleo_name. Версия №%d" color -1 SCRIPT_VERSION

0AB1: call_scm_func @check_updates 1 current_version SCRIPT_VERSION

while true
    wait 0
end

:download_check_status // Для проверки статуса загрузки(т.к. эта часть будет использоваться более, чем 1 раз)
// call @download_check_status 1 download_n 0@
1@ = -1
while 1@ == -1 // Скачивание всё ещё в процессе
    wait 0
    0C66: 1@ = get_download 0@ state // Получаем статус загрузки
end
0AB2: ret 1 1@ // Возвращаем статус зарузки

:url_fileupdateinfo // Т.к. в Sanny Builder иначе никак не подружиться со слешами в строках, придется как нить так
// Здесь хранится URL на данные с обновлением
hex
    "http:" "/" "/" "legend2360.googlecode.com/svn/trunk/autoupd_ex/cleo_name/update.txt" 00
end

:check_updates
// call @check_updates 1 current_version 0@
0AC6: 1@ = label @url_fileupdateinfo offset // Сделаем грешок и переопределим переменную
0C65: 1@ = download_url 1@ to_file UPDATEINFO_FILE // Начинаем скачивание файла
0AB1: call_scm_func @download_check_status 1 download_n 1@ status_to 2@
0C7D: release_download 1@ // Освобождаем, т.к. скачивание завершено

if 2@ <> 0 // Если статус НЕ равен 0(т.е. загрузка завершена неудачно), то
then
    0AF8: samp add_message_to_chat "Произошла ошибка во время загрузки. Ошибка %p" color -1 2@ // Выводим сообщение об ошибке
else // иначе
    0AF8: samp add_message_to_chat "Загрузка успешно завершена." color -1 // Выводим сообщение об успешном скачивании

    if 0AAB: file_exists UPDATEINFO_FILE // Мало ли файл не был создан в необходимом нам месте, проверим это на всякий случай
    then
        0AF0: 3@ = get_int_from_ini_file UPDATEINFO_FILE section "UPDATE" key "version" // Читаем номер версии в скаченном файле обновления
        if 001D: 3@ > 0@ // Если текущая версия скрипта меньше, чем указанная в файле обновления, то
        then
            0AF8: samp add_message_to_chat "Доступна новая версия обновления №%d для {FFFF00}cleo_name" color -1 3@ // Оповещаем

            0AC8: 4@ = allocate_memory_size 260 // Выделяем память под URL загрузки файла
            0C11: memset destination 4@ value 0 size 260 // Очищаем от ненужных символов(на всякий случай)

            0AF4: 4@ = read_string_from_ini_file UPDATEINFO_FILE section "UPDATE" key "changelog_url" // Читаем URL загрузки списка изменений
            0C65: 1@ = download_url 4@ to_file CHANGELOG_FILE // Скачиваем список изменений
            0AB1: call_scm_func @download_check_status 1 download_n 1@ status_to 2@ // ждем окончание загрузки
            0C7D: release_download 1@ //

            if 2@ == 0
            then
                0AB1: call_scm_func @show_changelog 0

            end

            // -------
            0C11: memset destination 4@ value 0 size 260 //
            0AF4: 4@ = read_string_from_ini_file UPDATEINFO_FILE section "UPDATE" key "script_url" //
            0C65: 1@ = download_url 4@ to_file "cleo/cleo_name.cs" // Скачиваем новую версию скрипта и заменяем текущий скрипт
            0AB1: call_scm_func @download_check_status 1 download_n 1@ status_to 2@ //
            0C7D: release_download 1@ //

            if 2@ == 0
            then
                0AF8: samp add_message_to_chat "Обновление завершено." color -1
            else
                0AF8: samp add_message_to_chat "Произошла ошибка при обновлении." color -1
            end

            0AC9: free_allocated_memory 4@
        end
    end
end
0AB2: ret 0

:show_changelog // Отдельная функция для показа списка изменений
if 0A9A: 0@ = openfile CHANGELOG_FILE mode "rt" // Открываем файл для чтения
then
    0AC8: 1@ = allocate_memory_size 96 // Выделяем память под строки из файла
    0C11: memset destination 1@ value 0 size 96

    0A9C: 2@ = file 0@ size // получаем размер файла
    2@++ // последний символ - нулевой

    0AC8: 4@ = allocate_memory_size 2@ // Выделяем память под список изменений
    0C11: memset destination 4@ value 0 size 2@
    repeat     
        0AD7: read_string_from_file 0@ to 1@ size 95
        0C17: 3@ = strlen 1@
        if 3@ > 0
        then
            0C15: strcat destination 4@ source 1@ // Прикрепляем строку из файла в буфер со списком изменений
        end
    until 0AD6: end_of_file 0@ reached

    0B3B: samp show_dialog id 335 caption "{FFFF00}Список изменений {FFFFFF}cleo_name" text 4@ button_1 "ОК" button_2 "" style 0 // Показываем диалог

    0AC9: free_allocated_memory 4@ // Далее не используется

    0AC9: free_allocated_memory 1@ //
    0A9B: closefile 0@ // Закрываем файл              
end
0AB2: ret 0
на этом все с вами был S0f4aR все удачи в написании скриптов
скажу сразу если не понимаете лучше не надо
первый урок


Кодер-сатанист
Откуда такой псевдоним?
первая половина SOF - от слова софтер, вторая - 4aR (Чар) это тип данных в программировании, присущий С++


Сообщение отредактировал S0f4aR - Вторник, 17.01.2017, 14:59
Ozzi_Money Дата: Вторник, 17.01.2017, 14:56 | Сообщение # 2
Новичок
Сообщений: 7
Статус: Offline
годно

Гавно Вопрос
desetfall Дата: Вторник, 17.01.2017, 16:15 | Сообщение # 3
Новичок
Сообщений: 13
Статус: Offline
Кто хочет полную версию этого урока, а не этот скопированный огрызок - ищите "вики самп фанс кс" (не реклама)

"Регистрируясь на сайте вы соглашались с данными правилами (они показаны на странице регистрации). Если вы больше не согласны с правилами, свяжитесь с администрацией, мы заблокируем ваш аккаунт." © Cheat-master =D
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума