Kruzya
Участник
- Сообщения
- 12,973
- Реакции
- 10,927
- Команда форума
- #1
Предисловие
Примерно чуть более года назад, просматривая в очередной раз тему уже имеющегося плагина автодемок для CS:GO, появилась идея, что надо написать свои автодемки, с блекджеком и шлюзами. Примерно так начался проект, конец которого пока не наступил.
Первая ориентировочная дата завершения работ была "конец 2018 года", но, как видите, уже август 2019-го (на момент написания поста), а моей замены всё ещё нет.
Как так?
Моя концепция автозаписи демок была немного иная, чем у уже существовавшего плагина. Предполагалось, что плагин будет чисто "дёргать" SourceTV/GOTV на запись/завершение записи демки и хранить рядом с файлом - файл с "метаданными", которые как-либо описывают содержимое: имя карты, кол-во записанных тиков, время записи, перечень игроков, все произошедшие события (слишком громко сказано, "все". подробнее ниже).
Т.е., у плагина снята какая-либо зависимость от веб-панели. Он просто записывал, сохранял метаданные, а веб (уже неважно, какой: самописный с полностью иной архитектурой работы, или "от автора плагина") периодически стучался на сервер и забирал все записанные полностью отсутствующие у него демки, удаляя их с сервера (для экономии дискового пространства).
И если основа плагина была завершена приблизительно уже в августе 2018-го, то с веб-панелью примерно тогда же было решено повременить, пока ядро не будет протестировано хотя бы базово.
Архитектура
Немного подробнее про архитектуру.
Как я уже сказал несколько раз выше, плагин чисто записывает демки и ведёт файл с метаданными. Метаданные описывают, что включает в себя демо-файл.
Примерная структура метаданных такая (она ведётся в JSON; прокомментировал для понимания, что есть что):
Все записи (включая метаданные) должны храниться в
Одна демка состоит гарантированно из двух файлов:
Все файлы в имени содержат UUID v4.
Список событий ядром не формируется. Для этого используются модули, которые так же управляют состоянием, записывается демка или нет.
Они же (модули) передают имя события и данные, которые должны уйти в JSON-файл.
К ядру приложен базовый модуль (
Что дальше?
Текущий плагин автозаписи демок, которым пользуются уже очень давно, оставляет желать лучшего. Он не подразумевает большой кастомизации, да и его настройка - один большой сплошной геморрой.
Документации нет, всё собиралось и настраивалось методом научного тыка. Плагин прибит гвоздями к CS:GO, которая отнюдь не является единственной игрой, где подобный плагин бы пригодился, и общается с SourceTV (GOTV) посредством выполнения консольных команд, результат исполнения которых никак не обрабатывается (иногда полезно, иногда нет).
Что я хочу предложить... Хоть я и скриптер, но тестового сервера у меня нет (и не будет). А даже если бы и был, мне нужны реальные игроки, чтобы постоянно не прописывать в ядро дикие костыли, которые бы имитировали реальных игроков для записи в мета-данные.
Я хочу попросить у сообщества помощи в завершении работы над данным плагином и вебом. Сейчас я выкладываю лишь плагин, ибо веб в очень глубокой альфе (хотя кое-какие подвижки по нему идут). Пока хочется понять, работает ли вообще ядро, или нет.
И, напоследок. Кому хотел бы сказать "Спасибо".
Этому плагину необходимо два расширения.
Реквизиты
Деньгами время не выиграть. Но его хотя бы можно отбить, и ими же понять, что это действительно кому-то нужно, а потому идею развивать стоит и дальше.
Реквизиты я не публикую здесь в теме. Если кто готов - велкам в ЛС.
Обсудить...
Хотите обсудить плагин/веб или предложить фичу вне этой темы? Милости просим в наш чат Telegram:
И ещё раз: репозиторий на GitHub. Веб будет выложен отдельно от плагина, поскольку явной привязки плагина к вебу делать не планируется.
Вроде всё основное, что хотел написать - написал...
Примерно чуть более года назад, просматривая в очередной раз тему уже имеющегося плагина автодемок для CS:GO, появилась идея, что надо написать свои автодемки, с блекджеком и шлюзами. Примерно так начался проект, конец которого пока не наступил.
Первая ориентировочная дата завершения работ была "конец 2018 года", но, как видите, уже август 2019-го (на момент написания поста), а моей замены всё ещё нет.
Как так?
Моя концепция автозаписи демок была немного иная, чем у уже существовавшего плагина. Предполагалось, что плагин будет чисто "дёргать" SourceTV/GOTV на запись/завершение записи демки и хранить рядом с файлом - файл с "метаданными", которые как-либо описывают содержимое: имя карты, кол-во записанных тиков, время записи, перечень игроков, все произошедшие события (слишком громко сказано, "все". подробнее ниже).
Т.е., у плагина снята какая-либо зависимость от веб-панели. Он просто записывал, сохранял метаданные, а веб (уже неважно, какой: самописный с полностью иной архитектурой работы, или "от автора плагина") периодически стучался на сервер и забирал все записанные полностью отсутствующие у него демки, удаляя их с сервера (для экономии дискового пространства).
И если основа плагина была завершена приблизительно уже в августе 2018-го, то с веб-панелью примерно тогда же было решено повременить, пока ядро не будет протестировано хотя бы базово.
Начало октября 2018-го. Очередной учебный год (кто не знал - я студент). Плагин так и не был протестирован (попросту некогда), но решено было начать хоть что-то делать у веб-панели. Создана доска на Trello, отметил что надо сделать, примерно накидал структуру базы. Начались кое-какие подвижки по вебу.
Т.к. ранее я фреймворки для веб-разработки не использовал для написания приложения полностью с нуля, то решил научиться на примере демок, чтобы хотя бы не велосипедить ту же работу с запросами. Начал долго и усердно выбирать. Остановился на Nette. Это был довольно интересный фреймворк, с интересным шаблонизатором Latte (интересен он синтаксисом, но сейчас не об этом). Даже начинал что-то делать (был реализован примерно конфиг для обработчиков событий (см. ниже), абстрактный класс для обработчиков событий и что-то ещё. До шаблонов руки так и не дошли.
Почему не Laravel? Ну, он был слишком перегруженный для моей задачи. Я бы и 80% функционала фреймворка не использовал, как мне кажется. Плюс ещё в начале проекта, я обозначил себе мини-требования (минимально поддерживать PHP 5.5, ну или хотя бы 5.6). Тянуть старую версию Лары точно был не вариант.
Декабрь. Тот же 2018-ый. Пора, наверное, поторапливаться, ведь конец обозначенного в первую неделю срока, а что готово? Только плагин, не оттестированный полностью, и кое-какие нужные штуки под капотом у веба, которые в чеклистах на Трелло не были никак обозначены, а потому и не отмечены. Но времени снова нет. Сессия. Подготовка к Всероссийской олимпиаде по IT (в которой я, к слову, занял 7-ое место по всей России среди 58-и участников. Успех!).
Январь 2019-ый. Срок просран, даже не протестировано ничего. И да, снова подготовка к олимпиаде + практика. Время вроде есть (по выходным), но как-то абсолютно не до этого.
Май 2019-ый. Этот месяц был немного богат на события. Почему?
Сегодня 3-ое августа 2019 года. В теме с теми самыми старыми кривыми (как я считаю) демками поднимается повторно тема, мол я что-то делал. И сейчас я пишу этот пост.
Т.к. ранее я фреймворки для веб-разработки не использовал для написания приложения полностью с нуля, то решил научиться на примере демок, чтобы хотя бы не велосипедить ту же работу с запросами. Начал долго и усердно выбирать. Остановился на Nette. Это был довольно интересный фреймворк, с интересным шаблонизатором Latte (интересен он синтаксисом, но сейчас не об этом). Даже начинал что-то делать (был реализован примерно конфиг для обработчиков событий (см. ниже), абстрактный класс для обработчиков событий и что-то ещё. До шаблонов руки так и не дошли.
Почему не Laravel? Ну, он был слишком перегруженный для моей задачи. Я бы и 80% функционала фреймворка не использовал, как мне кажется. Плюс ещё в начале проекта, я обозначил себе мини-требования (минимально поддерживать PHP 5.5, ну или хотя бы 5.6). Тянуть старую версию Лары точно был не вариант.
Декабрь. Тот же 2018-ый. Пора, наверное, поторапливаться, ведь конец обозначенного в первую неделю срока, а что готово? Только плагин, не оттестированный полностью, и кое-какие нужные штуки под капотом у веба, которые в чеклистах на Трелло не были никак обозначены, а потому и не отмечены. Но времени снова нет. Сессия. Подготовка к Всероссийской олимпиаде по IT (в которой я, к слову, занял 7-ое место по всей России среди 58-и участников. Успех!).
Январь 2019-ый. Срок просран, даже не протестировано ничего. И да, снова подготовка к олимпиаде + практика. Время вроде есть (по выходным), но как-то абсолютно не до этого.
Май 2019-ый. Этот месяц был немного богат на события. Почему?
- Ведётся работа над своим "фреймворком" на базе уже имеющихся компонентов. Почему я заключил "фреймворк" в кавычки? Под капотом использовался Slim (микро-фреймворк). На него просто насаживал приятные (лично для меня) библиотеки по работе с той же базой и ФС. Он кстати уже работоспособен, и на его базе можно построить какое-нибудь небольшое приложение (те же демки).
- К мёртвому (пока что) проекту присоединяется @Larsalex и предлагает свои варианты фронта. Это как глоток свежего воздуха для меня, ибо я в фронте - ни-ни. Если он не будет против - чуть позже покажу здесь варианты.
Сегодня 3-ое августа 2019 года. В теме с теми самыми старыми кривыми (как я считаю) демками поднимается повторно тема, мол я что-то делал. И сейчас я пишу этот пост.
Архитектура
Немного подробнее про архитектуру.
Как я уже сказал несколько раз выше, плагин чисто записывает демки и ведёт файл с метаданными. Метаданные описывают, что включает в себя демо-файл.
Примерная структура метаданных такая (она ведётся в JSON; прокомментировал для понимания, что есть что):
JSON:
{
// Текущая карта
"play_map": "vsh_kakariko_pb3a",
// Количество записанных тиков (кадров)
"recorded_ticks": 43965,
// Уникальный идентификатор записи.
// Используется исключительно для обеспечения уникальности записи.
"unique_id": "0a71b8d7-57f5-4552-8578-9d84b39b9bf9",
// Время начала записи с эпохи UNIX (01.01.1970 03:00 MSK) в секундах.
"start_time": 1564825141,
// Время завершения записи с эпохи UNIX в секундах.
"end_time": 1564825807,
// Перечень всех игроков, которые попали на демку.
"players": [
{
// Account ID игрока.
"account_id": 1111331224,
// Является ли игрок "ботом".
// По факту, от этого поля можно избавиться, но пока не помню почему, но не избавился.
"is_bot": false,
// Имя игрока.
"name": "CrazyHackGUT aka Kruzya"
},
// ... ещё другие игроки ...
],
// Все записанные события.
"events": [
{
// Имя события.
"event_name": "Core:RoundStart",
// Время.
"time": 1564825147,
// Данные события.
// Просто ассоциативный массив.
// Может быть пустым, если событие не предполагает какие-либо данные.
"data": {}
// Ещё планировалось очень давно записывать тик, но пока не сделано. Поле будет "tick".
},
// ... ещё другие события ...
]
}
/addons/sourcemod/data/demos/.Одна демка состоит гарантированно из двух файлов:
- dem-файл. Сама демка.
- json-файл. Метаданные.
Все файлы в имени содержат UUID v4.
Список событий ядром не формируется. Для этого используются модули, которые так же управляют состоянием, записывается демка или нет.
Они же (модули) передают имя события и данные, которые должны уйти в JSON-файл.
К ядру приложен базовый модуль (
AutoDemo/EventManager.smx, он же AutoDemo_EventManager.sp), который:- Способен (если ядро работоспособно) начинать и завершать запись при смене карты или раунда. Для настройки этого существует консольная переменная
sm_autodemo_recordmode. - В метаданные записывает события убийства игрока и сообщения в чат.
Что дальше?
Текущий плагин автозаписи демок, которым пользуются уже очень давно, оставляет желать лучшего. Он не подразумевает большой кастомизации, да и его настройка - один большой сплошной геморрой.
Документации нет, всё собиралось и настраивалось методом научного тыка. Плагин прибит гвоздями к CS:GO, которая отнюдь не является единственной игрой, где подобный плагин бы пригодился, и общается с SourceTV (GOTV) посредством выполнения консольных команд, результат исполнения которых никак не обрабатывается (иногда полезно, иногда нет).
Что я хочу предложить... Хоть я и скриптер, но тестового сервера у меня нет (и не будет). А даже если бы и был, мне нужны реальные игроки, чтобы постоянно не прописывать в ядро дикие костыли, которые бы имитировали реальных игроков для записи в мета-данные.
Я хочу попросить у сообщества помощи в завершении работы над данным плагином и вебом. Сейчас я выкладываю лишь плагин, ибо веб в очень глубокой альфе (хотя кое-какие подвижки по нему идут). Пока хочется понять, работает ли вообще ядро, или нет.
И, напоследок. Кому хотел бы сказать "Спасибо".
- @ThreshHNS. Выложил первоначальную версию плагина и веба, которые вечно заставляли задуматься над реализацией своего.
- @Rabb1t. Помог немного с составлением README-файла у репозитория и заполнил в файле события для CS:S, CS:GO.
- @The_C@t. Я бы, наверное, и не решился сегодня написать этот тред, если бы не пост этого парня. И плагин продолжал бы висеть в альфе на "тестах". Так может хоть протестируем наконец его.
- @Larsalex. Помощь по фронту.
Этому плагину необходимо два расширения.
- SourceTV Manager. Позволяет управлять GOTV/SourceTV через движок, без команд.
- REST in Pawn. По факту, используется только JSON-модуль из RiP. Необходим для формирования метаданных.
Реквизиты
Деньгами время не выиграть. Но его хотя бы можно отбить, и ими же понять, что это действительно кому-то нужно, а потому идею развивать стоит и дальше.
Реквизиты я не публикую здесь в теме. Если кто готов - велкам в ЛС.
Обсудить...
Хотите обсудить плагин/веб или предложить фичу вне этой темы? Милости просим в наш чат Telegram:
И ещё раз: репозиторий на GitHub. Веб будет выложен отдельно от плагина, поскольку явной привязки плагина к вебу делать не планируется.
GitHub - CrazyHackGUT/sm-autodemo: Server plugin for AutoDemo system
Server plugin for AutoDemo system. Contribute to CrazyHackGUT/sm-autodemo development by creating an account on GitHub.
github.com
Вроде всё основное, что хотел написать - написал...
Последнее редактирование:
