![]() |
Страницы (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)
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();
За проектом буду следить. Предлагаю разрабатывать это сразу кроссплатформенным решением, как минимум, кроме 32-бита нужно еще иметь 64-бита, т.к. ксаш может быть в обоих вариантах. Ну и на разных платформах, опять таки. Вот сервера ксашевские в основном хостятся на линуксе.
__________________
Мой сайт
Xash3D Modding Discord
__________________
exit();
И да, еще интересует финальная версия LuaMod: что в ней готово, где можно скачать, что не готово?
__________________
Мой сайт
Xash3D Modding Discord
__________________
exit();
Вот сегодня работал над ООП entity. По сути я хочу обернуть движковый edict и entvars в один JS объект с геттерами и сеттерами.
Тогда будем иметь следующий синтаксис:
const player = /* Как-нибудь достаем его, хоть через pEntOfEntIndex(0) */;
player.health++;
player.health *= 2;
// И так далее.
Добавлено 10-07-2022 в 01:10:
У меня получилось, геттер и сеттер здоровья готовы, значит могу сделать остальные "важные" поля, включая проброс строк. С последними, мне придется обращаться к движку, чтобы он давал строку по ID и тому подобное, но это не сложно.
__________________
exit();
День начался с того, что я сделал аналог 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; });
__________________
exit();
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; });
__________________
Мой сайт
Xash3D Modding Discord
__________________
exit();
Закрепил
Добавлено 11-07-2022 в 12:07:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
exit();
Обновил плагин, хоть версию и не менял:
- Сделал эвент pfnClientCommand и соответствующий обработчик в JS
- Залил все ассеты медиа
- Сделал плагин вампиризм (при убийстве оппонента вы получаете немного здоровья)
- Сделал возможность выводить в HUD сообщения с настройками, с помощью tempentity
- Сделал плагин для приветствия игроков, как это любят на кс пабликах
- убрал зависимости для скриптов автосборки
- Благодаря SNMetamorph hlsdk и metamod идут теперь в папке deps, хотя metamod мне пришлось подобрать иной.
Да, план у меня такой, я реализовываю самые популярные плагины из amx и по ходу дорабатываю движок. На очереди:
- подсчет фрагов с танков (башни в crossfire)
- показ нанесенного дамага
- ротация карт
__________________
exit();
__________________
Мой сайт
Xash3D Modding Discord
__________________
exit();
Удалось запустить nodemod в ГС:
- precache пришлось запускать строго в dllSpawn
- fastdl переделать, но он у меня все-равно не заработал в rehlds, хотя в браузере все качает нормально.
Коммит залил, все плагины работают, звуки работают. rehlds показался чуть стабильнее в игре, стрельба точнее, но вот клиент GS мне не понравился. По дефолту выкручена гамма и яркость и крайне непривычное ощущение.
__________________
exit();
Временная зона GMT. Текущее время 14:22. | Страницы (3): [1] 2 3 » Показать все 34 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024