Иконка ресурса

[VIP] Updater 1.0.0 - 1.0.0a

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • Автор ресурса
  • #1
Недавно хотел сделать модуль для автоматического обновления ядра випки. Но для этого пришлось частично переписать Updater - AlliedModders. К тому ж появились некоторые проблемы. В итоге работу приостановил.

На днях @DarklSide (http://hlmod.ru/members/darklside.33133/) предложил мне сделать нечто похожее, но получше. А именно систему автоматического обновления ядра и модулей. Даже скинул некоторые наброски. Подумав я решил сделать это, взяв за основу Updater - AlliedModders
За это ему огромное спасибо, и еще за то что дал толчек снова попытаться осуществить задуманное.

В итоге потратив пол дня у меня получилось сделать основу для этого чуда.
Сейчас модуль может только уведомлять администратора о выходе новой версии модуля (в лог), но со временем он сможет еще скачивать и устанавливать обновления (если включено в настройках).

Как сейчас выглядит лог:
L 01/06/2017 - 19:28:41: ################################################################

L 01/06/2017 - 19:28:41: Проверка обновлений VIP


L 01/06/2017 - 19:28:41: Плагин [VIP] Equipments устарел! (Ваша версия: 1.0.2, Последняя версия: 1.1)

L 01/06/2017 - 19:28:41: Fix Исправлено бла-бла
L 01/06/2017 - 19:28:41: Fix Исправлено модель
L 01/06/2017 - 19:28:41: ---------------------------------------------------

L 01/06/2017 - 19:28:41: Плагин [VIP] Core устарел! (Ваша версия: 2.1.1 R, Последняя версия: 2.1.2 R)

L 01/06/2017 - 19:28:41: Add Добавлен новый конфиг настройки информационных сообщений
L 01/06/2017 - 19:28:41: Rem Удалено сообщение в лог: OnLibraryAdded "..."
L 01/06/2017 - 19:28:41: Improve Оптимизирована работа VIP-меню
L 01/06/2017 - 19:28:41: ---------------------------------------------------

L 01/06/2017 - 19:28:41: ################################################################

Вот так выглядит файл для проверки обновлений:
PHP:
"Updater"
{
    "VIP_Core"    // Имя плагина
    {
        "Version"        "2.2.2 R"    // Текущая версия
        "Information"
        {
            // Здесь находятся изменения каждой версии
            "2.2.2 R" // Изменения для текущей версии
            {
                "Add"        "Добавлен новый конфиг настройки информационных сообщений"
                "Rem"        "Удалено сообщение в лог: OnLibraryAdded \"...\""
                "Improve"    "Оптимизирована работа VIP-меню"
            }
        }
  
        "Files"
        {
            // Здесь находится перечень файлов для загрузки
            "Plugin"    "Path_SM/plugins/vip/VIP_Core.smx"
            "Source"    "Path_SM/scripting/vip/VIP_Core.sp"
        }
      
        // Ссылка на тему, где осущестляется поддержка плагина
        "url"    "http://hlmod.ru/resources/vip-core.245/"
    }
    "VIP_Equipments"
    {
        "Version"        "1.1"
        "Information"
        {
            "1.1"
            {
                "Fix"    "Исправлено бла-бла"
                "Fix"    "Исправлено модель"
            }
        }
  
        "Files"
        {
            "Plugin"    "Path_SM/plugins/vip/VIP_Equipments_1.1.smx"
            "Source"    "Path_SM/scripting/vip/VIP_Equipments_1.1.sp"
        }
    }
}

Просьба к тем, у кого много свободного времени и мается со скуки - сделать конфиг для всех модулей из этого раздела: VIP

Если у кого есть пожелания/предложения готов выслушать - пишите в этой теме.
 

DarklSide

Участник
Сообщения
931
Реакции
468
PHP:
 "VIP_Equipments"
    {
        "Version"        "1.1"
        "Information"
        {
            "1.1"
            {
                "Fix"    "Исправлено бла-бла"
                "Fix"    "Исправлено модель"
            }
        }

        "Files"
        {
            "Plugin"    "Path_SM/plugins/vip/VIP_Equipments_1.1.smx"
            "Source"    "Path_SM/scripting/vip/VIP_Equipments_1.1.sp"
        }
    }

Каков разбор алгоритма - конфига файла для модулей?

#a. Вариант:
"VIP_Equipments" - название плагина (без версии).
"Version" - указанная последняя версия модуля (для уведомления/скачивания - например для отката).
"1.1" - Fix/Add etc. - данные о релизе.
"1.2" - Fix/Add etc. - данные о релизе?!
"Plugin" - итоговый новый путь для обновленного модуля (.smx).
"Source" - .... (.sp).


#b. Вариант:
(пожелания)

Те же данные #a, за исключением:
"1.2" - Fix/Add etc. - данные о релизе! - точная поддержка.
"Plugin", "Source" - имеет ту же структуру, только имеет вид:
"Path_SM/plugins|scripting/vip/VIP_Equipments"
Остаточные данные парсирует из "Version" добавляя в плагин [VIP] Updater - _1.1.smx/sp.

P.S.:
(предложения)

Дальше по примеру видно
"Path_SM/plugins/vip/VIP_Equipments":

что "Path_SM/plugins/vip/"
"Path_SM/scripting/vip/
- можно вынести в глобальное.

"/VIP_Equipments" - из имени ключа.

Т.е. если имеется ключ "Files" - использовать его для своего пути или для обратной совместимости -
например [VIP] Weapons Modifier не имеет в своем пути версии файла и автор не поддерживает стандарт, или если в плагине отсутствует нужная информация о версии Plugin myinfo.

Так же, до парсировании файла "Updater", можно до этого иметь локальный файл, с именами плагинов ("VIP_Equipments") - для игнорировании об уведомлении или скачивании.
 
Последнее редактирование:

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
  • Команда форума
  • #3
@R1KO, можно сделать немного по другому само обновление.
В админке есть пункт вип, так вот я предлагаю туда запихать 2 пункта.
  1. Будет показывать наличие обновления (если есть, то выводит обновление чего, ядра или какого-то модуля.
  2. Сделать 2 вариантами, либо показывать только когда есть обновление, либо активным (кликабельным) когда есть обновление, если же нету обновления, просто белый пункт с надписью нету обновления (но тогда их 2 выходит). Суть 2-го пункта в том, что это будет так сказать кнопка для получения обновления (либо сразу, если можно так, либо при смене карты будет уже новая версия).
Пускай работы будет больше, но лично мое мнение, что так лучше будет, но конечно только если можно так реализовать.
--- Добавлено позже ---
@R1KO, так же можно 3-ий пункт, так называемый "Список изменений" в обновлении, если оно имеется.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • Автор ресурса
  • #4
Стандартизация названия плагина VIP_Vips_Online_("1.0.1") = Version ("1.0.1") - его проверка.
Просто в некоторых модулях и ядра нет версии в названии.

PHP:
if(StrContains(sPlugin, g_sPatchVip, false) != -1)
Здесь я умышленно проверял без слеша в конце чтобы модули лежащие не в папке vip/ тоже учитывались.
PHP:
ReplaceString(sParsePlugin[p], sizeof(sParsePlugin), ".smx", "", false);
Мне кажется
PHP:
sPlugin[strlen(sPlugin)-4] = 0;
всё же побыстрее будет.

В остальном согласен. Так же можно сделать чтобы при обновлении модули находящиеся вне папки vip переносились в неё. Еще можно принудительно приводить файлы к стандартизированному названию.
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • Автор ресурса
  • #5
Примерный принцип работы.
C-подобный:
Событие инициализации обновления (OnPluginStart или OnMapStart)
{
    Получаем файл, со списком плагинов, версиями и описаниями (updater.txt).
    Получаем список нужных плагинов на сервере (ядро и модули) по шаблону.
    Сохраняем оригинальный путь расположения и имя smx файла + версию.
    Из названия плагина получаем его имя, с которым дальше и будем работать (отсекается версия и расширение)
    Цикл по полученным плагинам
    {
        Ищем плагин в updater.txt.
        Сравниваем версию
        если не совпадают
        {
            если включено автоматическо обвновление
            {
                уведомляем в лог о начале обновления
                Перемещаем оригинальный файл в plugins/disabled/vip/VIP_ИМЯ_Версия.smx (для возможности отката)
                Начинаем скачивать новый файл в plugins/vip/VIP_ИМЯ.smx
                По завершению уведомляем в лог об успешном обновлении. В случае проблем/ошибки возвращаем оригинальный файл обратно.
                Перезагружаем плагин.
            }
            иначе
            {
                уведомляем в лог о наличии обновления
            }
        }
    }
}

Еще рассматриваются такие варианты:
  • Уведомления в админ меню (о наличии обновлениий/об успешном/не успешном обновлении) + возможность обновления/отката
  • Уведомления личными сообщениями в Steam(о наличии обновлениий/об успешном/не успешном обновлении)
  • Лист исключений (игнор обновлений)
 
Сверху Снизу