HLFX.Ru Forum Страницы (3): [1] 2 3 »
Показать все 34 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Наши проекты (https://hlfx.ru/forum/forumdisplay.php?forumid=1)
-- NodeMod - скриптинг на NodeJS (https://hlfx.ru/forum/showthread.php?threadid=5855)


Отправлено TheEVolk 07-07-2022 в 21:07:

NodeMod - скриптинг на NodeJS

Идейный наследник некогда разрабатываемого мною проекта luamod.

NodeMod - это плагин для MetaMod, с помощью которого кодер может разрабатывать скриптовую часть своего сервера на основе платформы NodeJS.

Как это работает?
nodemod подключается к metamod как обычный плагин, внутри библиотеки содержится скомпилированный движок V8 и NodeJS V16 под архитектуру 32x, сразу при запуске плагина загружается файл index.js, внутри которого уже можно сразу подгружать нужные модули или вызывать нужные функции.

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

Примеры стандартных плагинов:
@hnodemod/msg - отлов событий и их отправка (message_begin/message_end)
@hnodemod/cmd - простой командный процессор (команды из чата/команды в консоли)

Почему NodeJS вместо чистого JS?
NodeJS как платформа содержит огромное количество готовых модулей, вы можете скачать любой пакет из npm и он будет гарантировано работать с nodemod.

Как оно компилируется?
С помощью cmake, только перед сборкой запускается скрипт на JS, который создает все биндинги автоматически. То есть читает eiface.h и создает функции и евенты.

Что дальше?
А дальше я буду нарабатывать стандартные пакеты, публиковать их, рефакторить код. Из планов демка с миникартой в реальном времени, бот с привязкой аккаунта, кастом ентити/оружия/монстры.

А можно без metamod?
Я надеюсь, что придет время и для этого. Более того, я хочу, чтобы этот плагин позволял кодерам программировать сущности для своих одиночных играх с помощью JS, это значительно упрощает процесс разработки и ускоряет его.

Добавлено 08-07-2022 в 05:07:

Начало темы без всего, даже ссылок на попробовать не оставил, сейчас исправлю.

https://github.com/TheEVolk/xash3d-nodemod
Это репозиторий, не рефакторенный, без семплов. На скриншоте - пример BlueFade плагина.

Все функции движка в nodemod.eng, а дллки будет в nodemon.dll, но еще не прокидывал, занимаюсь этим, завтра будет.

Сразу оформлю репозиторий весь по красоте и можно будет развивать сообщество.

Пока что в этой теме я делюсь неким девблогом и показываю что оно умеет.


Оформил инструкцию по компиляции и залил примеры плагинов на гитхаб.
https://github.com/TheEVolk/xash3d-nodemod

__________________
exit();


Отправлено SNMetamorph 07-07-2022 в 22:59:

За проектом буду следить. Предлагаю разрабатывать это сразу кроссплатформенным решением, как минимум, кроме 32-бита нужно еще иметь 64-бита, т.к. ксаш может быть в обоих вариантах. Ну и на разных платформах, опять таки. Вот сервера ксашевские в основном хостятся на линуксе.

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено TheEVolk 08-07-2022 в 05:59:

Цитата:
SNMetamorph писал:
За проектом буду следить. Предлагаю разрабатывать это сразу кроссплатформенным решением, как минимум, кроме 32-бита нужно еще иметь 64-бита, т.к. ксаш может быть в обоих вариантах. Ну и на разных платформах, опять таки. Вот сервера ксашевские в основном хостятся на линуксе.



Цитата:
SNMetamorph писал:
За проектом буду следить. Предлагаю разрабатывать это сразу кроссплатформенным решением, как минимум, кроме 32-бита нужно еще иметь 64-бита, т.к. ксаш может быть в обоих вариантах. Ну и на разных платформах, опять таки. Вот сервера ксашевские в основном хостятся на линуксе.


В теории это возможно, а на практике нужны 64х бинарники скомпиленные. В защиту этого решения могу сказать, что такие бинарники есть. Ну и настроить это дело через travis какой-нибудь.

__________________
exit();


Отправлено SNMetamorph 08-07-2022 в 21:45:

И да, еще интересует финальная версия LuaMod: что в ней готово, где можно скачать, что не готово?

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено TheEVolk 09-07-2022 в 01:44:

Цитата:
SNMetamorph писал:
И да, еще интересует финальная версия LuaMod: что в ней готово, где можно скачать, что не готово?


Самая новая версия имела таймеры, то есть set_timeout и set_interval. Были запросы в сеть и, похоже, все. Ну были там движковые функции переписаны, плагин msg переписан, потому что были ошибки и он не работал вне xash. Мы так с другом перекатились в CS 1.6 и делали подобие csdm. Был плагин на звуки при определенных фразах в чате, rampage sounds был, вроде все, не густо.

Естественно это все было утеряно, сейчас самое новое - https://github.com/Elektro-Volk/luamod и архив с экстрафайлами из темы про luamod.

Но, есть еще вот такой форк: https://github.com/Workbench-Team/luamod
Мы с ним иногда расходились во мнениях по архитектуре, насколько мне известно он под каждый плагин отдельную вм выделял, мне это не нравилось, но, судя по всему, активность у него выше и развивал он этот плагин всегда.

Вот такая вот история.

__________________
exit();


Отправлено TheEVolk 09-07-2022 в 17:10:

Вот сегодня работал над ООП entity. По сути я хочу обернуть движковый edict и entvars в один JS объект с геттерами и сеттерами.

Тогда будем иметь следующий синтаксис:
const player = /* Как-нибудь достаем его, хоть через pEntOfEntIndex(0) */;
player.health++;
player.health *= 2;
// И так далее.

Добавлено 10-07-2022 в 01:10:

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

__________________
exit();


Отправлено TheEVolk 10-07-2022 в 08:14:

День начался с того, что я сделал аналог hamsandwith. Вы можете перехватывать все сообщения и изменять их значения.

code:
import nodemodCore from '../repo/packages/core/src/index.js'; nodemodCore.msg.on('DeathMsg', state => { console.log(state.rawData); // Поменяем killerId на 1, теперь убийцей всегда будет первый игрок. state.rawData[0].value = 1; });


rawData - это тот же объект, что и data при отправке сообщения. Так я реализую вечером плагин stacionaryFragCounter, а затем залью все демо плагины и сделаю инструкцию, чтобы Вы могли попробовать этот плагин у себя.

Вот как работает этот механизм:
1) Этот аналог ловит событие pfnMessageBegin, для которого создает state и записывает туда все параметры.
2) Затем он ловит все сообщения "write", но отклоняет их, только записывая значения в state.
3) Сразу после вызова pfnMessageEnd и вызова слушателя, который видно в коде, мой ham быстро пишет все значения в движок. Если они изменились на этапе вызова слушателя, то запишутся, соответственно, измененные значения.

Также все @hnodemod/msg или @hnodemod/cmd я решил соединить в @nodemod/core. Это будет набор всех вспомогательных функций для работы с игрой.

Сделал геттеры origin и их же сеттеры. Работаем дальше.

__________________
exit();


Отправлено SNMetamorph 10-07-2022 в 15:01:

Цитата:
TheEVolk писал:
День начался с того, что я сделал аналог hamsandwith. Вы можете перехватывать все сообщения и изменять их значения.

code:
import nodemodCore from '../repo/packages/core/src/index.js'; nodemodCore.msg.on('DeathMsg', state => { console.log(state.rawData); // Поменяем killerId на 1, теперь убийцей всегда будет первый игрок. state.rawData[0].value = 1; });


rawData - это тот же объект, что и data при отправке сообщения. Так я реализую вечером плагин stacionaryFragCounter, а затем залью все демо плагины и сделаю инструкцию, чтобы Вы могли попробовать этот плагин у себя.

Вот как работает этот механизм:
1) Этот аналог ловит событие pfnMessageBegin, для которого создает state и записывает туда все параметры.
2) Затем он ловит все сообщения "write", но отклоняет их, только записывая значения в state.
3) Сразу после вызова pfnMessageEnd и вызова слушателя, который видно в коде, мой ham быстро пишет все значения в движок. Если они изменились на этапе вызова слушателя, то запишутся, соответственно, измененные значения.

Также все @hnodemod/msg или @hnodemod/cmd я решил соединить в @nodemod/core. Это будет набор всех вспомогательных функций для работы с игрой.

Сделал геттеры origin и их же сеттеры. Работаем дальше.

Так Hamsandwich же не про перехват сообщений, а про перехват виртуальных функций у классов.

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено TheEVolk 11-07-2022 в 07:12:

Цитата:
SNMetamorph писал:
Так Hamsandwich же не про перехват сообщений, а про перехват виртуальных функций у классов.

Про перехват, как раз.

Оформил инструкцию по компиляции и залил примеры плагинов на гитхаб.
https://github.com/TheEVolk/xash3d-nodemod

PS. Модераторы, закрепите ссылку в начале темы.

Ну и кто может попробовать, у кого получилось, скажете как оно?

__________________
exit();


Отправлено Дядя Миша 11-07-2022 в 09:07:

Закрепил

Добавлено 11-07-2022 в 12:07:

Цитата:

ads.push(
'ляляля1',
'Дядя Миша лучший'
);

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено TheEVolk 11-07-2022 в 10:28:

Цитата:
Дядя Миша писал:


Это значит, что нужно попробовать запустить у себя.

__________________
exit();


Отправлено TheEVolk 12-07-2022 в 07:51:

Обновил плагин, хоть версию и не менял:
- Сделал эвент pfnClientCommand и соответствующий обработчик в JS
- Залил все ассеты медиа
- Сделал плагин вампиризм (при убийстве оппонента вы получаете немного здоровья)
- Сделал возможность выводить в HUD сообщения с настройками, с помощью tempentity
- Сделал плагин для приветствия игроков, как это любят на кс пабликах
- убрал зависимости для скриптов автосборки
- Благодаря SNMetamorph hlsdk и metamod идут теперь в папке deps, хотя metamod мне пришлось подобрать иной.

Да, план у меня такой, я реализовываю самые популярные плагины из amx и по ходу дорабатываю движок. На очереди:
- подсчет фрагов с танков (башни в crossfire)
- показ нанесенного дамага
- ротация карт

__________________
exit();


Отправлено SNMetamorph 12-07-2022 в 08:55:

Цитата:
TheEVolk писал:
Благодаря SNMetamorph hlsdk и metamod идут теперь в папке deps, хотя metamod мне пришлось подобрать иной.

Так ты зачем сабмодуль то удалил? Верни обратно

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено TheEVolk 12-07-2022 в 08:57:

Цитата:
SNMetamorph писал:
Так ты зачем сабмодуль то удалил? Верни обратно

Я его просто скопировал, там файлов 5 от силы, хедеров.

__________________
exit();


Отправлено TheEVolk 13-07-2022 в 05:14:

Удалось запустить nodemod в ГС:
- precache пришлось запускать строго в dllSpawn
- fastdl переделать, но он у меня все-равно не заработал в rehlds, хотя в браузере все качает нормально.

Коммит залил, все плагины работают, звуки работают. rehlds показался чуть стабильнее в игре, стрельба точнее, но вот клиент GS мне не понравился. По дефолту выкручена гамма и яркость и крайне непривычное ощущение.

__________________
exit();


Временная зона GMT. Текущее время 07:53. Страницы (3): [1] 2 3 »
Показать все 34 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024