Хуки и sourcemod на cs2

Twelvee

Участник
Сообщения
75
Реакции
147
Привет!
Прошел уже месяц с прошлого треда про скриптинг в cs2 и я решил актуализировать информацию + рассказать чем занимается комьюнити AlliedModders в данный момент.

Начнем с главного - Sourcemod не портирован в кс2 и вероятно не будет. Активная разработка Sourcemod в кс2 не ведется, достаточно посмотреть коммиты и пулл-реквесты в репозитории sourcemod.
Metamod все так же работает на source2, что позволяет создать свой sourcemod сообществу, но судя по диалогам в дискорд сервере AlliedModders информации о таких наработках крайне мало, в основном люди просто спрашивают когда будет sourcemod.

Текущие проблемы, почему sourcemod и metamod до сих пор не портировали

1. Metamod и Sourcemod работают на библиотеке SourceHooks, которая в свою очередь позволяет цепляться к публичным интерфейсам Source (memory hook) через декларацию интерфейсов Valve в их SDK.
Самая последняя версия SDK позволяющая цепляться к cs2 серверу находится вот тут Update Dota & CS2 support by GAMMACASE · Pull Request #125 · alliedmodders/hl2sdk, за что огромное спасибо GAMMACASE
В данный момент ребята еще продолжают над ней работать.

2. Архитектура х64. Это критичное изменение для Sourcemod и Metamod, так как куча инструментов была написана под х86 архитектуру. В целом с этой проблемой начали знакомиться еще во времена перехода доты на source2, именно поэтому metamod можно установить к себе на сервер (достаточно сложно, но можно). С SourceMod все сложнее.

3. VSP (Valve Server Plugin). Подробнее обо всех вещах от которых Valve избавились во второй версии Source я напишу чуть ниже, но отказ от Valve Server Plugins становится критичным для AlliedModders проектов. Установка metamod больше не возможна с помощью обычного .vdf файла.

4. Поддержка других игр. Metamod и Sourcemod рассчитаны на множество игр Source, практически все игры Source, если быть точнее. Это добавляет кучу проблем с обратной совместимостью Source и Source2.

5. Мало людей, которые действительно готовы вносить вклад в портирование Sourcemod&Metamod в CS2. За время моего присутствия на сервере AlliedModders я заметил лишь 3-4 человека, которые что-то ковыряют в Metamod. Никто из них не портирует Sourcemod&Metamod в CS2.


Я начал строить сарай
Изначально я увидел что xtance пытался прикрутить к текущей системе скриптинга Javascript.
Меня действительно заинтересовала эта идея и я начал реализовывать свою версию Sourcemod, друзья в тимспике придумали идеальное название - SORAI (Вроде бы как "Небо" на японском, но на русском звучит забавно).
Название вероятно временное :)

Задумка была такой:
Я создаю dll, внутри которой использую metamod и сверху на это все пишу интерфейсы на Javascript для плагинов.
Вскоре узнаю что метамод это слишком жирная штука (она рассчитана сразу на все игры Source) и решаю использовать SourceHook.

Спустя несколько дней у меня получается подключить SourceHook и подписаться на интерфейсы Valve.
Sorai сейчас это dll пакет, который мы подключаем через кастомный dll-injector внутрь процесса cs2. В нем есть возможность подписываться на игровые события и прочие интерфейсы от Valve (CvarChanged, ServerInit, итд).
Проект на очень ранней стадии, его код - это набор тестов работы с движком Source2.

Различия от решений AlliedModders:
1. В Source2 полностью выпилили старую систему игровых событий (igamevents). На смену пришла новая - IGameEventSystem. Любимый и простой FireEvent больше не thing в новом Source. Ивенты теперь отправляются через grpc(?) в Protobuf формате.
2. х64 архитектура. Тут и добавить нечего, кс2 требует x64 dll.
3. Поддержка только CS2, для остальных игр есть Sourcemod.
4. Установка сарая через кастомный dll иньектор. Это временно, пока не придумал лучшего решения с учетом отказа Valve от valve server plugin.

Проблемы с которыми я столкнулся можно и не начинать считать, их действительно море. Однако самая главная, которую я не знаю как решить - отсутствие VGUI интерфейса во втором соурсе.
Менюшек - нет. Это критичная часть любого плагина, никто не любит писать все команды в чат или консоль. Если есть идеи как реализовать меню в cs2 - буду рад слышать.

Что в планах:

1. Я решил отказаться от идеи с простыми интерфейсами Javascript, так как по сути это будет являться socket-based архитектурой плагинов (общение через IPC), в дискорде AlliedModders мне дали понять что это не тру.
Поэтому я буду добавлять в сарай движок v8, чтобы дать возможность нативно разрабатывать плагины на Javascript.
2. Создать публичный репозиторий и простенький сайт с базовой информацией о статусе разработки.
3. Доделать базовый функционал ивентов (проверить работу компиляции protobuf).
4. Сделать возможным hot-reload плагинов на яваскрипте.
5. Сделать возможным на уровне движка проверки подлинности плагина. Чтобы облегчить жизнь создателям приватных плагинов.
6. Пакетный менеджер для плагинов. Установка плагинов через cli? Звучит интересно.

Если есть идеи по развитию данного проекта - буду рад их услышать. У нас появилась возможность избавиться от проблем Sourcemod и я знаю далеко не о всех этих проблемах.
Для c++ разработчиков:
Я открою исходный код Sorai как только добавлю в него v8. Сейчас и поддерживать его невозможно, так как не существует основной архитектуры. Просто куча кода которая тестирует взаимодействие с движком Source2.
Оффтоп

Для всех остальных:
Подскажите название, что ли. Я ж реально назову его сараем.

Ну и конечно же хотел бы сказать огромное спасибо сообществу AlliedModders, ребята всегда готовы прийти на помощь. Особенные благодарности двум людям - Core Team AlliedModders psychonic и создателю плагинов, активному участнику актуализации SDK - GAMMACASE
 
Последнее редактирование:

SlavON

Добрая душа
Сообщения
1,582
Реакции
326
Вы так аудиторию переманиваете с hlmod? Хотя бы согласовали свою рекламу с администрацией форума?
Каким образом это может хоть кого-то переманить? За плагином или за помощью его настраивать всё равно сюда пойдут, в то же время это тот ресурс благодаря которому и хлмод будет жить и собирать аудиторию. Это же как нужно морочить себе голову ссылками на какие-то сайты чтобы даже не вдаваться в смысл и резать руку, которая "подкармливает"...
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Это же как нужно морочить себе голову ссылками на какие-то сайты чтобы даже не вдаваться в смысл и резать руку, которая "подкармливает"...
И кого же эта рука подкармливает?
 

HenryTownshand

Чел ты
Сообщения
255
Реакции
140
[ссылка удалена, а нужно ли ее было удалять?]
Если судить по другим постам на форуме, то ты можешь кидать ссылку на дискорд канал, а там получается можно переманивать. Видимо это так тут работает.
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Получается ты тоже переманиваешь?
Посмотреть вложение 115006
Не беспокойся, это специально отведённое место. Да и где ты там увидел призыв пользоваться моим "личным" сайтом, чтобы получать помощь?

К остальным фейспалмщикам это тоже относится, которые, слыша слово "реклама", думают про ссылку
 

Twelvee

Участник
Сообщения
75
Реакции
147
Сделал регистри. Еще есть куча багов, но в целом свою роль выполняет. Подтяну качество вместе с релизом пакетного менеджера.

ResourceMod Registry - это self-hosted решение для размещения ваших плагинов и расширений для игровых серверов cs2.
Именно отсюда будут загружаться ваши плагины и расширения (c-modules) с помощью менеджера пакетов ResourceMod (rmod).

Что-то вроде docker registry, чтобы вы смогли не зависеть от маркетплейса ResourceMod

Буду рад вашим pull-request'ам
 
Последнее редактирование:

Сергей68

Неуместный юмор
Сообщения
420
Реакции
377
@Twelvee, Там вроде source2mod делают или я ошибаюсь? не будет ли трата ваших сил на это необоснованным? я думаю при выборе SM2 или RM большинство выберет SM2 так как все же большинство уже на нем написано решений. Чем придется изучать все по новой тем, кто ране не сталкивался с js, тем более не так быстро набьется новое комьюнити SM2.
Раз уж начали делать свой движок, логично было бы сделать тогда уж форум свой, нет?
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
@Сергей68, У вас есть конкретная дата выхода sm2 или хотябы 100% информация что будет? Если будет одно решение уже не плохо, будет 2 решения будет конкуренция каждый будет писать на том что ему нравится.
 

L1MONENKO

Добрая душа
Сообщения
655
Реакции
600
@Сергей68, У вас есть конкретная дата выхода sm2 или хотябы 100% информация что будет? Если будет одно решение уже не плохо, будет 2 решения будет конкуренция каждый будет писать на том что ему нравится.
Будет решать качество и количество готовых решений, а не кому и на чем нравиться писать
 

Twelvee

Участник
Сообщения
75
Реакции
147
@Twelvee, Там вроде source2mod делают или я ошибаюсь? не будет ли трата ваших сил на это необоснованным? я думаю при выборе SM2 или RM большинство выберет SM2 так как все же большинство уже на нем написано решений. Чем придется изучать все по новой тем, кто ране не сталкивался с js, тем более не так быстро набьется новое комьюнити SM2.
Раз уж начали делать свой движок, логично было бы сделать тогда уж форум свой, нет?
Source2Mod в разработке, вы правы. Но важно понимать, что ResourceMod это не соурсмод, это экосистема компонентов (ResourceMod который вы загружаете на сервер - далеко не весь ResourceMod).
Вы так же можете устанавливать одновременно ResourceMod и SourceMod (специально чтобы иметь такую возможность я переписал resourcemod на metamod).
Про форум - не уверен что он нужен вообще, не понимаю зачем в 2023 году люди пользуются форумами. Я публикую обновления в своем дискорд сервере, а сюда я их пишу чтобы люди которые не сидят в дискорд сервере resourcemod, но им интересна эта тема - тоже были в курсе что происходит.

Общего с source2mod в моем решении это работа с движком source (метамод и sdk).
ЯП и концепты совершенно противоположные. Если вы любите sourcemod и не любите ничего нового - используйте sourcemod. ResourceMod это не sourcemod и является чем-то новым.

Было бы круто конкурировать с SM, да и вероятно какая-то "конкуренция" будет, но я бы назвал ее дружеским соперничеством (по крайней мере я ее так вижу, возможно ребята из sourcemod считают что resourcemod это полная чушь не стоящая внимания, я совершенно не против).

За время существования Source было не мало вариантов моддинга: Sourcemod, EventScripts, AMX, Source.Python итд. Я еще школьником ставил себе на css сервер Mani Admin Plugin, WCS и Props моды на EventScripts.
Все эти решения, по моему мнению, очень крутые, но очень заплесневелые. Практически все из них ушли на покой, а sourcemod, опять же чистое ИМХО, застрял где-то в прошлом. Они не развиваются, а вместе с этим не развивается сообщество создателей контента.
Я выбрал концепт экосистемы чтобы у меня была возможность реализовать все свои идеи, не сильно нагружая основное ядро неиспользуемым функционалом. Если проводить аналогии - вероятно экосистема Laravel более чем похожа на то что я пытаюсь сделать, где частью этой экосистемы в основном являются опенсорс проекты. Надеюсь что все получится.

Не так давно я открывал свою компанию, мы тоже разрабатывали софт стоящий рядом с темой игровых серверов, к сожалению пришлось закрыться. Недавно команда, которую я собрал, узнали о resourcemod и заинтересовались, вполне возможно к выходным будет небольшой анонс расширения команды разработки. Мы в целом топим за то чтобы развивался внутри-игровой контент, и нам всем кажется что здоровая "конкуренция" будет полезна в целом всему сообществу.

По неожиданному стечению обстоятельств source2mod начали активно разрабатывать только после того как вылили несколько ведер помоев в мою сторону в дискорд сервере AlliedModders, вероятно им захотелось сделать "правильно", а не так как делаю я :)
Сообщения автоматически склеены:

Открыл openapi спецификацию (генератор спецификации) компонентов resourcemod

Пишете спеку на понятном человеку typescript, генерируете yaml формата openapi3.
С этой спекой можете создавать альтернативы официальным компонентам по типу registry, на любом языке который вам больше нравится.
 
Последнее редактирование:

Сергей68

Неуместный юмор
Сообщения
420
Реакции
377
@Twelvee, про форум заблуждаетесь, форум это большая база информации для всех поколений, где можно научиться или научить кого-то, что тут когда-то и было пока комьюнити не стало токсичным в плане помощи. (не все) да и просто они удобнее и приятнее чем тот же дискорд с его кривыми форумами и поиском, отсутствие как токовой разметки.
Про конкуренцию это будет зависеть от того как быстро будут писаться всякие моды на вашем движке. Если оба движка S2M и RM выйдут в одно время плюс минус, и у s2m будет возможность реинтегрировать старые плагины и моды то выбор юзера что использовать будет очевиден, он просто перенесет сборку свою в кс2 с малейшими доработками. (даже если он это не умеет, умельцы сделаю рефорки на новый двиг)
Как быстро на вашем движке появятся сложные моды? такие как Jail, или тот же Maniac, плагины легенды? это не камень в огород, просто позабавило услышать про конкуренцию с монополистом.
Вам успехов, какая никакая конкуренция всегда хорошо, и если реально то что за счет вас s2m будет жить, то считайте вклад в сообщество уже внесен не менее.
 

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
Как быстро на вашем движке появятся сложные моды? такие как Jail, или тот же Maniac, плагины легенды?
Когда перед вами готовое ТЗ и не надо ничего придумывать это делается достаточно быстро
 

Z10Y

Участник
Сообщения
30
Реакции
33
Не понимаю почему именно JS а не C++ или C#, или здесь акцент на переносимости между платформами? CoreCLR тоже кроссплатформенная, куча возможностей из коробки и Open source библиотек, есть и работа с указателями, один и тот же плагин не придётся компилировать под Linux/Windows или другие архитектуры, например ARM, главное написать нативную библиотеку которая будет запускать среду CLR и реализовать API
Сообщения автоматически склеены:

В s&box, который тоже на Source 2 весь скриптинг на C#, полностью его воссоздать не получится, но хотя бы использовать как эталон для некоторых функций
Вот товарищ пилит под .net платформу
CounterStrikeSharp
GitHub - roflmuffin/CounterStrikeSharp: CounterStrikeSharp allows you to write server plugins in C# for Counter-Strike 2/Source2/CS2
 

DOK-26-RUS

Участник
Сообщения
264
Реакции
40

DOK-26-RUS

Участник
Сообщения
264
Реакции
40
CounterStrikeSharp:
Для сборки требуется CMake в Linux.

Клонировать репозиторий

git clone https://github.com/roflmuffin/counterstrikesharp
Инициализация и обновление подмодулей

git submodule update --init --recursive
Создать папку сборки

mkdir build
cd build
Создание файлов сборки CMake

cmake ..
Строить

cmake --build . --config Debug
Или я что-то иное путаю с компиляцией?
 

Muinez

Участник
Сообщения
132
Реакции
120
CounterStrikeSharp:
Для сборки требуется CMake в Linux.

Клонировать репозиторий

git clone https://github.com/roflmuffin/counterstrikesharp
Инициализация и обновление подмодулей

git submodule update --init --recursive
Создать папку сборки

mkdir build
cd build
Создание файлов сборки CMake

cmake ..
Строить

cmake --build . --config Debug
Или я что-то иное путаю с компиляцией?
 

DOK-26-RUS

Участник
Сообщения
264
Реакции
40
Сверху Снизу