скрипт будет автоматически обновляться.
В данной статейке я расскажу о некоторых опкодах 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 все удачи в написании скриптов
скажу сразу если не понимаете лучше не надо
первый урок