![]() |
Показать все 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();
ShowMenu
Сделал генератор менюшек, в максимально простом и декларативном стиле.
code:
nodemodCore.menu.show({ entity, title: 'Main menu', items: [ { name: 'Commands', handler: entity => this.openFastCommands(entity) }, { name: 'Profile', handler: entity => this.openProfile(entity) }, { name: 'Current game', handler: entity => this.openCurrentGame(entity) }, { name: 'About us', handler: entity => this.openServerInfo(entity) } ] });
__________________
exit();
__________________
exit();
TheEVolk ну так ты проверь, выводится ли у тебя кириллица из titles.txt. Если нет - то, виноват не ты и
А вот и bad apple в hl с использованием nodemod.
https://www.youtube.com/watch?v=tlQMMH7oJSU
Спавнил партиклы в 5 фпс
__________________
exit();
создал ентитю:
const ent = createNamedEntity('info_target');
заспавнил
nodemod.dll.spawn(ent);
// прописал имя
ent.classname = 'func_casino';
// и модель
ent.model = 'models/terminal.mdl';
// прописал физическое поведение
ent.solid = 2; // SOLID_BBOX
ent.movetype = 5; // MOVETYPE_FLY
// и выставил размеры коллизии
nodemod.eng.setSize(ent, [-50, -50, -50], [50, 50, 60]);
либо я что-то не понимаю или это какая-то ошибка, но сущность полностью прозрачная для игрока. Я вижу лишь модель, сквозь которую я могу пройти. При этом срабатывает touch (в котором я чекаю нажатие E) и оно работает. Есть ли в оригинальном goldsource возможность прочекать все abs боксы? В чем может быть проблема?
__________________
exit();
вот еще пример плагина https://youtu.be/DIY5Tv4_xRE
с энтитей решил, setSize сбрасывал solid в ноль. Поменял местами и стало лучше.
Все npm пакеты настроил чтоб они публиковались в npm.
__________________
exit();
https://www.youtube.com/watch?v=EyxTZK1vPC4
я запустил doom 1 в half-life 1, вывел хоть какое-то изображение и даже обрабатываю нажатия клавиш. На этом интернет можно закрывать.
__________________
exit();
Для мельтешения партиклей дуум запускать необязательно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
> Для мельтешения партиклей дуум запускать необязательно.
а это и не партикли..
Но единственный способ что-то цветное отрисовать в хл, и то часть верхних энтитей решила не обновлять цвет. По крайней мере это из разряда:
- смотри что оно умеет.
__________________
exit();
А практическая польза? Там же не разобрать ничего.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
TheEVolk
А что это за игра в видеоролике?
__________________
__________________
exit();
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
exit();
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
exit();
__________________
Временная зона GMT. Текущее время 19:33. | Показать все 34 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024