HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > NodeMod - скриптинг на NodeJS
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
TheEVolk
NodeMod разработчик

Группа: Неопытный
Дата регистрации: Dec 2019
Проживает: Россия
Сообщений: 95
Возраст: 22

Рейтинг



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

[ Вложение ]
ihganwjd0oe.jpg

__________________
exit();

Сообщить модератору | | IP: Записан
Сообщение: 210168

Старое сообщение 07-07-2022 21:07
- За что?
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



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

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

Сообщить модератору | | IP: Записан
Сообщение: 210170

Старое сообщение 07-07-2022 22:59
- За что?
TheEVolk
NodeMod разработчик

Группа: Неопытный
Дата регистрации: Dec 2019
Проживает: Россия
Сообщений: 95
Возраст: 22

Рейтинг



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



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


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

__________________
exit();

Сообщить модератору | | IP: Записан
Сообщение: 210171

Старое сообщение 08-07-2022 05:59
- За что?
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



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

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

Сообщить модератору | | IP: Записан
Сообщение: 210176

Старое сообщение 08-07-2022 21:45
- За что?
TheEVolk
NodeMod разработчик

Группа: Неопытный
Дата регистрации: Dec 2019
Проживает: Россия
Сообщений: 95
Возраст: 22

Рейтинг



Цитата:
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();

Сообщить модератору | | IP: Записан
Сообщение: 210177

Старое сообщение 09-07-2022 01:44
- За что?
TheEVolk
NodeMod разработчик

Группа: Неопытный
Дата регистрации: Dec 2019
Проживает: Россия
Сообщений: 95
Возраст: 22

Рейтинг



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

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

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

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

[ Вложение ]
1111.png

__________________
exit();

Сообщить модератору | | IP: Записан
Сообщение: 210178

Старое сообщение 09-07-2022 17:10
- За что?
TheEVolk
NodeMod разработчик

Группа: Неопытный
Дата регистрации: Dec 2019
Проживает: Россия
Сообщений: 95
Возраст: 22

Рейтинг



День начался с того, что я сделал аналог 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 и их же сеттеры. Работаем дальше.

[ Вложение ]
screenshot_20220710_161409.png

__________________
exit();

Сообщить модератору | | IP: Записан
Сообщение: 210179

Старое сообщение 10-07-2022 08:14
- За что?
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



Цитата:
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

Сообщить модератору | | IP: Записан
Сообщение: 210181

Старое сообщение 10-07-2022 15:01
- За что?
TheEVolk
NodeMod разработчик

Группа: Неопытный
Дата регистрации: Dec 2019
Проживает: Россия
Сообщений: 95
Возраст: 22

Рейтинг



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

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

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

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

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

__________________
exit();

Сообщить модератору | | IP: Записан
Сообщение: 210182

Старое сообщение 11-07-2022 07:12
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Закрепил

Добавлено 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'

Сообщить модератору | | IP: Записан
Сообщение: 210183

Старое сообщение 11-07-2022 09:07
-
TheEVolk
NodeMod разработчик

Группа: Неопытный
Дата регистрации: Dec 2019
Проживает: Россия
Сообщений: 95
Возраст: 22

Рейтинг



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


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

__________________
exit();

Сообщить модератору | | IP: Записан
Сообщение: 210184

Старое сообщение 11-07-2022 10:28
- За что?
TheEVolk
NodeMod разработчик

Группа: Неопытный
Дата регистрации: Dec 2019
Проживает: Россия
Сообщений: 95
Возраст: 22

Рейтинг



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

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

__________________
exit();

Сообщить модератору | | IP: Записан
Сообщение: 210205

Старое сообщение 12-07-2022 07:51
- За что?
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



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

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

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

Сообщить модератору | | IP: Записан
Сообщение: 210210

Старое сообщение 12-07-2022 08:55
- За что?
TheEVolk
NodeMod разработчик

Группа: Неопытный
Дата регистрации: Dec 2019
Проживает: Россия
Сообщений: 95
Возраст: 22

Рейтинг



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

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

__________________
exit();

Сообщить модератору | | IP: Записан
Сообщение: 210211

Старое сообщение 12-07-2022 08:57
- За что?
TheEVolk
NodeMod разработчик

Группа: Неопытный
Дата регистрации: Dec 2019
Проживает: Россия
Сообщений: 95
Возраст: 22

Рейтинг



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

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

__________________
exit();

Сообщить модератору | | IP: Записан
Сообщение: 210218

Старое сообщение 13-07-2022 05:14
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 06:04. Новая тема    Ответить
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > NodeMod - скриптинг на NodeJS
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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