Хуки и 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
 
Последнее редактирование:

lemeshovich

Участник
Сообщения
19
Реакции
6
У cybershoke, на сколько понимаю, уже есть какие-то наработки замены SM для CS2. Работают оповещения в чате, сбор разнообразной статистики игроков с их CS2 серверов, общий банлист для CSGO и CS2 серверов, быстрый дефьюз для ретэйков, скинченжер, восстановление здоровья и патронов при убийстве на DM, наличие режимов HSDM, PISTOLDM и AWPDM и тд.
 

SAZONISCHE

Участник
Сообщения
405
Реакции
232
Привет!
Прошел уже месяц с прошлого треда про скриптинг в 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
Почему бы не использовать nodejs, было бы комфортно юзать все существующую npm базу пакетов?
 

DeathScore13

пирожок. пирожочек.
Сообщения
734
Реакции
403
Почему бы не использовать nodejs, было бы комфортно юзать все существующую npm базу пакетов?
и ставить левые аддоны, которые даже не имеют отношения к игровому серверу
 
Последнее редактирование:

SAZONISCHE

Участник
Сообщения
405
Реакции
232
кстати, в кс 1.6

и ставить левые аддоны, которые даже не имеют отношения к игровому серверу
Это уже дело владельца севера, в см из коробки много чего недоставало, тут уже есть все что твоей душе угодно.
 

Twelvee

Участник
Сообщения
75
Реакции
147
У cybershoke, на сколько понимаю, уже есть какие-то наработки замены SM для CS2. Работают оповещения в чате, сбор разнообразной статистики игроков с их CS2 серверов, общий банлист для CSGO и CS2 серверов, быстрый дефьюз для ретэйков, скинченжер, восстановление здоровья и патронов при убийстве на DM, наличие режимов HSDM, PISTOLDM и AWPDM и тд.
Все тоже так думали, но они, как мне известно, используют vscript. Он вероятно будет удален после выхода Pulse. Зачем-то на своих серверах они сделали фейковые команды sm, чтобы "потролить" других создателей серверов. Было забавно наблюдать эту "драму" в дискорде AlliedModders)

Почему бы не использовать nodejs, было бы комфортно юзать все существующую npm базу пакетов?
Я думал об этом, но нода полна модулей, которые на вряд ли будут использоваться в плагинах, например все что связано с os и процессами. Нода позволит общаться с сетью и файловой системой, что необходимо, однако это можно сделать и самому, причем сделать эффективнее для серверных плагинов. Нода не статичная библиотека, это отдельный процесс, который сделает невозможным полностью нативные плагины для соурса.
Если кратко: так более эффективно по ресурсам, надежнее и более предсказуемо.

Уверен что некоторые пакеты будут работать, так как я имплементирую все те же v8 и libuv, однако с сетью и файловой системой пока еще вопрос не решен. Все еще сомневаюсь в выборе библиотеки.

Однако если есть альтернативы v8+libuv - говорите, в целом я только за пакетный менеджер, но категорически против того как работает npm.

upd: Ах да, кс2 только выходит, это тоже повод использовать собственный рантайм. Не известно что будет через пару лет с игрой, а тут мы быстро сможем реализовать нативную имплементацию некоторых элементов.
 
Последнее редактирование:

Rostu

Добрая душа
Сообщения
986
Реакции
622
Все тоже так думали, но они, как мне известно, используют vscript. Он вероятно будет удален после выхода Pulse. Зачем-то на своих серверах они сделали фейковые команды sm, чтобы "потролить" других создателей серверов. Было забавно наблюдать эту "драму" в дискорде AlliedModders)
Я действительно буду рад увидеть, как на vscript возможно сделать skinchanger и другую работу с памятью, а еще и без потери с производительности.
Пожалуйста, поделись с сообществом как это возможно
Мы делали большую работу с нашей командой -> создали свой продукт без использование проектов от Alliedmodders -> вкладывали в это время с марта. Никаких теорий не должно быть, мы говорили и говорим об этом прямо.
 
Последнее редактирование:

🟡differend🟢

Что хочу - то и делаю
Сообщения
975
Реакции
661
Все тоже так думали, но они, как мне известно, используют vscript. Он вероятно будет удален после выхода Pulse. Зачем-то на своих серверах они сделали фейковые команды sm, чтобы "потролить" других создателей серверов.
Поэтому плагины работают?)
 

Twelvee

Участник
Сообщения
75
Реакции
147
Я действительно буду рад увидеть, как на vscript возможно сделать skinchanger и другую работу с памятью, а еще и без потери с производительности.
Пожалуйста, поделись с сообществом как это возможно
Мы делали большую работу с нашей командой -> создали свой продукт без использование проектов от Alliedmodders -> вкладывали в это время с марта. Никаких теорий не должно быть, мы говорили и говорим об этом прямо.
Поэтому плагины работают?)

Темка не совсем об этом, давайте все вместе не будем тут это обсуждать) Если по какой-то причине это важно - мое мнение: круто что ребята проделали такую работу, жалко что сделали фейковые надписи sourcemod, из-за этого такую работу в дискорде alliedmodders (и в англоязычном комьюнити) воспринимают как стеб. Лично мне нет разницы: сайбершок или другие проекты игровых серверов, для меня это инженерный интерес - сделать платформу для модификаций.

Сайбершок красавцы, буду рад если поделитесь своей версией sdk
 

Auttend

Помешан на Лансере
Сообщения
155
Реакции
48
Хорошо, что потихоньку начинается развитие скриптинга для кс2. Мне кажется, со временем нужно открыть сбор для дальнейшей мотивации)
 

LeroyJenkinsJr

Участник
Сообщения
1
Реакции
0
сделали фейковые надписи sourcemod
Вероятнее всего, вы невнимательно читали данную ветку и зачем-то пытаетесь выделить мнение целых +-3 человек, которые восприняли это как "троллинг" кого-либо. При этом, данные +-3 человека, ни как не связаны с AL, это лишь были обычные серверо-держатели, с которыми в ЛС не поделились SDK и сборками. Не вникая полностью в ситуацию, строить теории бессмысленно
Если вы посмотрите как минимум ответы psychonic, который как раз напрямую общается с некоторыми разработчиками данного проекта, он был совершенно не против использования каких-либо команд и негативно ничего не воспринимал

Не нужно раздувать из мухи слона, достаточно просто полноценно и адекватно воспринимать информацию из сети
 

Twelvee

Участник
Сообщения
75
Реакции
147
V8 не будет!

Чуть-чуть информации:
v8 это Javascript Runtime Engine, который создала компания Google. Используется в Chrome и Node и многих других приложениях.
К моему сожалению v8 не thread-safe движок. Он действительно может работать с многими потоками, однако делает он это с помощью блокирования текущего потока (v8::Locker) - то есть не параллельно.

В cs2 уже имплементирован v8. Вероятно он необходим для использования в системе Pulse, над которой Valve активно работает (кастомки в cs2).

Изоляции v8.
Изоляциями в движке v8 называют виртуальные машины Javascript, думаю по аналогии с java virtual machine будет понятнее.
Это позволяет выполнять разный javascript код с помощью одного движка (что-то вроде контекстов выполнения). Как раз их и можно "блокировать", чтобы выполнить другой код.

Так вот создать такую изоляцию - невозможно в нашем случае. Мы не можем попросить cs2 заблокировать текущее выполнение своей изоляции.
Поэтому при попытке создать Isolate внутри процесса cs2, чтобы запустить наш код, мы получаем access violation ошибку.

Что будет?
В данный момент активно смотрю в сторону spidermonkey (javascript runtime engine но от Firefox), а так же в сторону других js runtime-ов.
Если есть предложения - самое время их предложить)

Главные требования к рантайму - ECMAScript E5/E5.1 (и выше) и поддержка CommonJS модулей. Поддержка libuv (мы хотим использовать пакеты ноды, хоть и не все), ну и конечно же интеграция как Embedded решения в c++ приложение.

В целом смотрел еще Duktape - выглядит просто отлично, но их биндинги Dukluv (для libuv) и Dukcurl (для curl) выглядят устаревшими. Если кто-нибудь захочет их реанимировать - дайте знать. Duktape выглядит более подходящим и простым в использовании рантаймом, чем spidermonkey. Уверен что он будет быстрее выполнять код плагинов из-за отсутствия огромного кол-ва неиспользуемых в нашей сфере пакетов (v8 как и spidermonkey рассчитаны в первую очередь на web).
 

Twelvee

Участник
Сообщения
75
Реакции
147
К сожалению Bun не подходит по критериям - написан не на С, не умеет в embedded, по сути это та же нода, но на Zig.

В общем пока что остановился на Duktape, работает замечательно.
Уже реализовал поддержку CommonJS (require/exports) модулей.
Полная поддержка nodejs модулей не планируется в ближайшее время, вероятно 90% пакетов ноды просто не будут работать.
npm пакетный менеджер - зло, вместо него начал разрабатывать собственный.

По поводу EventLoop механизма да и в целом асинхронных операций пока не понятно нужна ли libuv или можно обойтись более простыми решениями.
Как руки до этого дойдут - поделюсь результатом.

В целом сейчас занимаюсь разработкой архитектуры плагинов, в данный момент тестирую теорию параллельного запуска плагинов с собственным JS контекстом выполнения каждого из них. В моей голове это позволит плагинам запускаться не зависимо от других, что даст возможность их перекомпилировать в нужный момент (hot-reload).
Время еще есть, SDK далек от "юзабельного", пока что доступны только ивенты по сути и некоторые серверные методы (проверка живой ли игрок, например).

Пока имплементировал commonjs модули пришел к выводу что без регистрации в единой системе серверов - невозможно проверить доступность запуска того или иного плагина, это к теме про помощь создателям приватных плагинов в продаже. Ничего не мешает скачать плагин и удалить строчки привязки по ip:port, яваскрипт же)
Но все круто, не переживайте, сделаю системку на офф сайте с продажей плагинов, и по токену который будет выдаваться покупателю - ядро будет проверять валидность плагина. Это все будет интегрировано в пакетный менеджер плагинов, поэтому будет безболезненно для конечных покупателей.

Ко всем публичным плагинам будет требование - публичный git репозиторий. Это уже к теме самого пакетного менеджера (который будет написан на Go и будет поставляться как отдельный пакет). Что тоже решает проблему закрытости исходного кода некоторых публичных плагинов, а так же дает поддержку сообществом публичных плагинов.

Решил послушать @September и назвать платформу Resourcemod, домен уже приобрел. Думаю ближе к этим выходным смогу запустить сайт и дискорд сервер для более простого обсуждения платформы. Есть множество вещей которые нужно уточнять, чтобы сделать платформу более приятной для создателей плагинов, форумный формат не сильно для этого подходит
 

Black_Yuzia

Зарабатываю на жизнь Мемами про Крузю.
Сообщения
693
Реакции
372
5. Сделать возможным на уровне движка проверки подлинности плагина. Чтобы облегчить жизнь создателям приватных плагинов.
Я немного забегаю наперед, так как ничего не готово... но, сидел я и читал описание, и тут у меня возник вопрос.
Если условно кто-то напишет свой приватный плагин на JS.
Как Source2JSMod (я буду его так называть, сокращенно S2JSM / SJSM) будет знать что именно этот плагин и есть приватный?
Генерить хэш по контенту файла? Измени любой символ — вот у тебя и другой хэш.
Генерить хэш и вшивать/вставлять внутрь плагина? Измени хэш внутри файла (ручками) и вот у вас уже не приватный плагин.
Проверять по названию плагина? Вообще не вариант.

Оффтоп


Может еще способы есть ...
 
Последнее редактирование:

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Если условно кто-то напишет свой приватный плагин на JS.
приватный плагин на JS

по-сути можно хранить файлы-описатели (содержащие источник/явки/пароли) в директории плагинов и в момент лоада подкачивать в память (конечно, если разрешено), либо иметь условный package.json с описанием всех имеющихся шифрованных бинарников (и связи их с условным репозиторием) для последующего декодирования и сопоставления на стадии загрузки

в ином случае у меня нет представления каким образом автор собирается ограничить доступ к исходникам и что же на самом деле подразумевается под словом "приватный плагин на JS"
 

Black_Yuzia

Зарабатываю на жизнь Мемами про Крузю.
Сообщения
693
Реакции
372
приватный плагин на JS

по-сути можно хранить файлы-описатели (содержащие источник/явки/пароли) в директории плагинов и в момент лоада подкачивать в память (конечно, если разрешено), либо иметь условный package.json с описанием всех имеющихся шифрованных бинарников (и связи их с условным репозиторием) для последующего декодирования и сопоставления на стадии загрузки

в ином случае у меня нет представления каким образом автор собирается ограничить доступ к исходникам и что же на самом деле подразумевается под словом "приватный плагин на JS"
Кстати, появилась небольшая идея.
Раз плагин "приватный", значит его никто не должен иметь возможности изменять.
Следовательно, можно создать "защиту" которая будет базироваться на шифровке и расшифровке плагина... но и это не панацея.
Условно берем и создаем наш приватный плагин ws.protected.js
Внутри которого будет зашифрована длинная строка (это и будет плагин).
Чтобы его расшифровать у SM2JS будет своя API условно какая-то пара ключей для расшифровки или типо того.
Но, даже так ... эту "защиту" все еще можно спокойно обойти. Просто остановив на моменте расшифровки плагина и подгрузки JS-а в память, после чего сохранить расшифрованные данные (обычный js) в файл ws.js. Вот вам и "обход" этой "защиты"...

Следовательно, можно сделать вывод, что сделать защиту "от дурака", наверное, не сложно, а вот что-то по круче чтобы и "от умного дурака" ...
 

Twelvee

Участник
Сообщения
75
Реакции
147
По поводу приватных плагинов

Входные данные которые использую для создания архитектуры запуска плагинов resourcemod-ом
1. Существуют приватные и публичные плагины.
2. Каждый плагин должен иметь собственный JS контекст выполнения.
3. Вне зависимости от приватности плагина он должен устанавливаться через пакетный менеджер.
4. Должен быть общий репозиторий плагинов (и, возможно, opensource архитектура для кастомных репозиториев по типу docker registry. Пока это как идея, не вижу сильной необходимости в этом. Хотя вероятно будет полезным для больших проектов типа сайбершока).
5. Приватный плагин != плагин с закрытым исходным кодом. Приватный плагин - плагин, лицензию которого нужно купить (или как-то получить право на использование).
6. Могут быть "модули" плагинов внутри одного плагина.
7. Лицензия плагина может позволять или запрещать редактирование исходного кода плагина.

В целом сейчас строю такую систему:
1. При запуске Resourcemod мы авторизуем пользователя
2. Загружаем каждый плагин по отдельности
2.1. Смотрим на конфигурационный файл и смотрим на id плагина
2.2. Проверяем есть ли у пользователя право запустить данный плагин по id.
2.3. Если лицензия плагина запрещает редактировать исходный код плагина - мы загружаем этот плагин через http запрос с сайта resourcemod сразу в память в виде AST дерева (+- так работают веб браузеры).
2.4. Если лицензия плагина позволяет редактировать исходный код - мы загружаем его из файловой системы. Это позволит разрабатывать плагины напрямую из файловой системы, чтобы не загружать каждое обновление на сайт.

Пакетный менеджер будет выступать в роли установщика Resourcemod, авторизация пользователя будет необходима. Главным способом общения resourcemod на игровом сервере и API сервера resourcemod будет пара ключей или токен под сервер.
1 инстанс resourcemod = 1 игровой сервер.

Проблема которая может быть это шеринг аккаунтов, но авторизация на сайте Resourcemod будет через Steam, не думаю что люди так просто будут делиться своими стим аккаунтами с рандомными людьми.
Можно прикрутить привязку ip:port к этой системе, но имхо это крайне не удобно. Чем меньше шагов создателю сервера нужно сделать чтобы совершить покупку плагина - тем выше конверсия продажи.
А вот кол-во копий предусмотренные по лицензии, которую купил создатель сервера - другой разговор.
У создателя сервера лицензия на 1 копию плагина. Он запускает один сервер с ним - все ок, запускает второй с ним - а плагин почему-то не работает.

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

Маркетплейс плагинов
Идея: Иметь возможность обеспечить безопасность покупки как создателям серверов так и создателям плагинов.
Создатель плагина обманул покупателя? Вернули деньги.
Создатель сервера использует плагин без лицензии - забанили создателя сервера.
В целом продажа плагинов это серый рынок, я покупал плагины и лишь в 1 случае из десяти мне действительно скинули ссылку на оплату, а не "ну скинь по номеру на тинькофф".

Идея: Показывать создателям плагинов статистику их продаж, проводить акции и скидки на покупки, оценивать плагины, отзывы к плагинам, в общем сделать все чем занимаются маркетплейсы по типу Wildberries.
Дать свой "виртуальный" магазин создателям игрового контента и инструмент чтобы его создавать - Resourcemod.

Это все пока что теория, но я бы вписался в такое, звучит интересно. Можно еще и проверять плагины перед публикацией, чтобы качество плагинов на платформе поднять (уверен что на яваскрипте качество плагинов будет ниже, потому что порог входа ниже).

upd: забыл уточнить про создание плагинов. вижу это +- так:
resm create plugin <plugin_name> // создаст структуру плагина и draft плагин (не видимый для других пользователей) на сайте, то есть получит свой ID.
далее разрабатывает плагин, заходите на сайт, заполняете о нем информацию и нажимаете Publish.

Если плагин платный - вероятно нужно будет заполнить еще некоторую информацию, пока термсы не составлял очевидно.
 
Последнее редактирование:

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
По поводу приватных плагинов

Входные данные которые использую для создания архитектуры запуска плагинов resourcemod-ом
1. Существуют приватные и публичные плагины.
2. Каждый плагин должен иметь собственный JS контекст выполнения.
3. Вне зависимости от приватности плагина он должен устанавливаться через пакетный менеджер.
4. Должен быть общий репозиторий плагинов (и, возможно, opensource архитектура для кастомных репозиториев по типу docker registry. Пока это как идея, не вижу сильной необходимости в этом. Хотя вероятно будет полезным для больших проектов типа сайбершока).
5. Приватный плагин != плагин с закрытым исходным кодом. Приватный плагин - плагин, лицензию которого нужно купить (или как-то получить право на использование).
6. Могут быть "модули" плагинов внутри одного плагина.
7. Лицензия плагина может позволять или запрещать редактирование исходного кода плагина.

В целом сейчас строю такую систему:
1. При запуске Resourcemod мы авторизуем пользователя
2. Загружаем каждый плагин по отдельности
2.1. Смотрим на конфигурационный файл и смотрим на id плагина
2.2. Проверяем есть ли у пользователя право запустить данный плагин по id.
2.3. Если лицензия плагина запрещает редактировать исходный код плагина - мы загружаем этот плагин через http запрос с сайта resourcemod сразу в память в виде AST дерева (+- так работают веб браузеры).
2.4. Если лицензия плагина позволяет редактировать исходный код - мы загружаем его из файловой системы. Это позволит разрабатывать плагины напрямую из файловой системы, чтобы не загружать каждое обновление на сайт.

Пакетный менеджер будет выступать в роли установщика Resourcemod, авторизация пользователя будет необходима. Главным способом общения resourcemod на игровом сервере и API сервера resourcemod будет пара ключей или токен под сервер.
1 инстанс resourcemod = 1 игровой сервер.

Проблема которая может быть это шеринг аккаунтов, но авторизация на сайте Resourcemod будет через Steam, не думаю что люди так просто будут делиться своими стим аккаунтами с рандомными людьми.
Можно прикрутить привязку ip:port к этой системе, но имхо это крайне не удобно. Чем меньше шагов создателю сервера нужно сделать чтобы совершить покупку плагина - тем выше конверсия продажи.
А вот кол-во копий предусмотренные по лицензии, которую купил создатель сервера - другой разговор.
У создателя сервера лицензия на 1 копию плагина. Он запускает один сервер с ним - все ок, запускает второй с ним - а плагин почему-то не работает.

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

Маркетплейс плагинов
Идея: Иметь возможность обеспечить безопасность покупки как создателям серверов так и создателям плагинов.
Создатель плагина обманул покупателя? Вернули деньги.
Создатель сервера использует плагин без лицензии - забанили создателя сервера.
В целом продажа плагинов это серый рынок, я покупал плагины и лишь в 1 случае из десяти мне действительно скинули ссылку на оплату, а не "ну скинь по номеру на тинькофф".

Идея: Показывать создателям плагинов статистику их продаж, проводить акции и скидки на покупки, оценивать плагины, отзывы к плагинам, в общем сделать все чем занимаются маркетплейсы по типу Wildberries.
Дать свой "виртуальный" магазин создателям игрового контента и инструмент чтобы его создавать - Resourcemod.

Это все пока что теория, но я бы вписался в такое, звучит интересно. Можно еще и проверять плагины перед публикацией, чтобы качество плагинов на платформе поднять (уверен что на яваскрипте качество плагинов будет ниже, потому что порог входа ниже).

upd: забыл уточнить про создание плагинов. вижу это +- так:
resm create plugin <plugin_name> // создаст структуру плагина и draft плагин (не видимый для других пользователей) на сайте, то есть получит свой ID.
далее разрабатывает плагин, заходите на сайт, заполняете о нем информацию и нажимаете Publish.

Если плагин платный - вероятно нужно будет заполнить еще некоторую информацию, пока термсы не составлял очевидно.
Хотелось бы ближе к делу уже хоть что-нибудь. Толку от текста?
 
Сверху Снизу