Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 12
  1. #1
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±

    Проверка обновлений через HTTP

    Примечание: По состоянию на 2023 год pastebin полностью перешёл на https и отдаёт любые ответы на нём, что SA-MP сервером, увы, не поддерживается (он из коробки поддерживает лишь голый http). Есть реализация https в стороннем плагине pawn-requests, но смысл описываемой в статье концепции крохотной системы, которая до этого не требовала ничего лишнего, практически полностью теряется, если появляется нужда тянуть за ней какие-то доп. плагины. Тем не менее, на open.mp сервере всё нижеописанное работает без каких-то изменений, поскольку он поддерживает https из коробки.
    Привет, сегодня пришла в голову идея, каким образом сделать проверку обновлений почти любого скрипта.
    В этом мануале мы будем делать проверку обновлений на примере сервера. Т.е. при запуске будет проверять, последняя ли у нас версия сервера, и если нет, то уведомлять об этом в консоль.

    И т.к. на оф. сайте я не нашёл отдельной страницы, где бы выводилась лишь текущая версия сервера/клиента, мне пришлось зарегать аккаунт на pastebin и уже на него заливать текст с версией (и при каждой новой версии мне придётся его обновлять).
    Всё это потому, что если считывать сервером, например, официальную страницу сампа целиком (а на ней последняя версия указана) - то размеры информации, присланной сайтом, повесят стек :(
    Собственно, и с пастебином было бы скорее всего тоже самое, если бы не трюк с режимом просмотра (где сайт отсылает только сам загруженный вами текст).

    Реализация:

    1. Ко всем forward
    PHP код:
    forward OnVersionChecked(indexresponse_codedata[]); 
    2. В OnGameModeInit():
    PHP код:
    HTTP(1000HTTP_GET"pastebin.com/raw/7wmiJKnG""""OnVersionChecked"); 
    3. Ну и в любую часть скрипта:
    PHP код:
    public OnVersionChecked(indexresponse_codedata[])
    {
        
    //Всё прошло успешно
        
    if(response_code == 200)
        {
            new 
    ver[16];
            
    GetServerVarAsString("version"versizeof ver);
            if(
    strcmp(dataver)) printf("[Обновление] Доступна новая версия сервера: %s"data);
            else print(
    "[Обновление] Вы используете последнюю версию сервера");
        }
        
    //Иначе
        
    else print("[Ошибка] Не удалось проверить обновления сервера!");

    Отлично, теперь при запуске сервера ниже версии 0.3.7-R2 в консоль будет писать следующее:
    Код:
    "[Обновление] Доступна новая версия сервера: 0.3.7-R2"
    P.s. Забыл сказать, что для работоспособности кода выше нужно подключить "a_http.inc" (стандартный инклуд) таким образом:
    PHP код:
    #include <a_samp> //Ваш a_samp
    #include <a_http> 
    Надеюсь, было для кого-то полезно.
    Последний раз редактировалось Nexius_Tailer; 22.06.2023 в 01:18. Причина: Примечание
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  2. #2
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Что то не совсем понятно как оно работает
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  3. #3
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Что то не совсем понятно как оно работает
    На этом pastebin хранится версия SA-MP в виде текста. Туда отправляется запрос, который извлекает эту версию.
    pastebin этот зареган на автора темы и он обновит этот pastebin в случае, если выйдет новая версия SA-MP.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  4. #4
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Что то не совсем понятно как оно работает
    Да всё довольно просто: регая аккаунт на пастебине можно создавать тексты с постоянной ссылкой, изменяя их в будущем без ограничений только со своего акка (но это скорее для тех, у кого личного сайта нет).
    Далее создаётся текст, куда пишется только текущая версия нужного скрипта. В нужном скрипте мы дефайним его текущую версию, затем подключаем http и отправляем запрос на наш текст на пастебине (только если текст находится, к примеру, по ссылке "pastebin.com/7wmiJKnG", то нам нужно переделать её в "pastebin.com/raw/7wmiJKnG", чтобы в ответ на запрос приходил только сам текст версии и ничего больше). Далее просто тупо сверяем пришедшую строку с сайта со своей версией: не совпадают - выводим инфу о существовании более новой версии.
    В свою очередь при обновлении скрипта нужно будет каждый раз изменять наш текст на пастебине, тем самым уведомление о новой версии появится при использовании старых.

    Это вкратце смысл мануала.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  5. #5
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Хорошо, плывем дальше, шо за index в аргументах каллбека?)
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  6. #6
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Хорошо, плывем дальше, шо за index в аргументах каллбека?)
    С ним обязательно должен быть паблик, куда приходит ответ от сайтов
    Это своего рода ид запроса, если вдруг нужно слать много запросов с ответом в паблик с одним и тем же названием
    Последний раз редактировалось Nexius_Tailer; 12.12.2016 в 18:52.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  7. #7
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Для GitHub пришлось создать небольшой скрипт, который позволяет узнать информацию о последнем релизе:
    PHP код:
    <?php

    $owner 
    $_GET['owner'];
    $repo $_GET['repo'];
    $elem $_GET['elem'];

    foreach (array(
    $owner$repo$elem) as $param) {
        if (!
    preg_match('/^[a-z0-9_-]+$/i'$param)) {
            exit(
    "Bad param.");
        }
    }

    if (!
    $owner || !$repo || !$elem) {
        exit();
    }

    $ch curl_init("https://api.github.com/repos/$owner/$repo/releases/latest");

    curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36");
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);

    $result curl_exec($ch);

    curl_close($ch);

    if (
    $result !== FALSE) {
        
    $arr json_decode($result);
        echo 
    $arr->$elem;
    }
    Из плюсов - не нужно вручную где-то менять версию скрипта. Пример использования здесь.

  8. #8
    Аватар для _lizard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.02.2016
    Адрес
    Геленджик
    Сообщений
    193
    Репутация:
    26 ±
    Хороший скрипт, жалко конечно, что никогда не понадобится, ибо частота выхода новых версий стремится к нулю.

  9. #9
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от _lizard Посмотреть сообщение
    Хороший скрипт, жалко конечно, что никогда не понадобится, ибо частота выхода новых версий стремится к нулю.
    Так прелесть в том, что это можно использовать и для своих собственных скриптов тоже
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  10. #10
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Новости сервера замутить можно с сайта, поменяв пару значений

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •