Написание сервера для lineage 2 chronicle 1 на node.js

Fix
* NPC останавливается после применения атаки к NPC
* NPC синхронизируется с сервером в момент остановки. (Монета падает после остановки)

 

space2pacman, а есть в планах переделать файлы на *.ts и добавить типы данных в проект? С типизацией наверное будет попроще разрабатывать, ошибки по типам будут подсвечиваться в IDE. А использовать tsc не обязательно, там в Node 23.6.0+ завезли Type Stripping (удаление типов при запуске). В будущем конечно можно было бы и добавить сборку через tsc, но сейчас для разработки это будет не обязательно, но добавит удобства и плюшек от TypeScript
 
space2pacman, а есть в планах переделать файлы на *.ts и добавить типы данных в проект? С типизацией наверное будет попроще разрабатывать, ошибки по типам будут подсвечиваться в IDE. А использовать tsc не обязательно, там в Node 23.6.0+ завезли Type Stripping (удаление типов при запуске). В будущем конечно можно было бы и добавить сборку через tsc, но сейчас для разработки это будет не обязательно, но добавит удобства и плюшек от TypeScript

Планов на ts пока нет.
Сейчас планы только на архитектуру.
 
space2pacman, понятно, жаль, думал завезёшь хотя бы типы и перейдёшь на module, а то require уже похож на какой-то legacy :)

А вообще в планах делать как подобие эмулятора l2j (весь GS в одном проекте) или разрабатывать какую-то свою архитектуру в виде микросервисов?
 
  • Мне нравится
Реакции: space2pacman

    BladeRunner

    Баллов: 1
    забей. челик за 6 лет сделал чтобы моб реагировал и бил в ответ.
space2pacman, понятно, жаль, думал завезёшь хотя бы типы и перейдёшь на module, а то require уже похож на какой-то legacy :)

А вообще в планах делать как подобие эмулятора l2j (весь GS в одном проекте) или разрабатывать какую-то свою архитектуру в виде микросервисов?
По поводу модулей кстати возможно. Потому что уже многие пакеты не тянут легаси в виде require

По архитектуре - микросервисы.

Как минимум отдельно npc сервер
 
По архитектуре - микросервисы.

Как минимум отдельно npc сервер
В чем преимущество npc сервера? Я на для критики, а узнать как такой сервер (или же микросервис) использовать.
 
MrThirtyOddSix, как минимум NPC сервер желательно вынести в отдельный сервис для того чтобы в системе это был отдельный процесс, под который система выделит отдельные ресурсы. Особенно учитывая тот фактор, что Node.js однопоточная, хотя можно запускать отдельные потоки в рамках процесса. Как максимум этот сервис можно запусти на отдельном сервере от других сервисов/микросервисов. Сборке мусора будет попроще работать, так как вся работа сервера и его сервисов не свалена в одну программу. Так же можно написать сервис под кластер, но думаю в рамках этой задачи "овчинка выделки не стоит"
 
В чем преимущество npc сервера? Я на для критики, а узнать как такой сервер (или же микросервис) использовать.
* Перезагружать NPC без выключение сервера
* Управлять нагрузкой (NPC может быть на другом сервере в той же сети)

В рамках текущего проекта это пока смотрится микросервис ради микросервисов)
 
* Перезагружать NPC без выключение сервера
* Управлять нагрузкой (NPC может быть на другом сервере в той же сети)

В рамках текущего проекта это пока смотрится микросервис ради микросервисов)
Что такой NPC сервер будет делать? И почему нагрузка?

MrThirtyOddSix, как минимум NPC сервер желательно вынести в отдельный сервис для того чтобы в системе это был отдельный процесс, под который система выделит отдельные ресурсы. Особенно учитывая тот фактор, что Node.js однопоточная, хотя можно запускать отдельные потоки в рамках процесса. Как максимум этот сервис можно запусти на отдельном сервере от других сервисов/микросервисов. Сборке мусора будет попроще работать, так как вся работа сервера и его сервисов не свалена в одну программу. Так же можно написать сервис под кластер, но думаю в рамках этой задачи "овчинка выделки не стоит"
Мне интересно что такой NPC сервер должен делать что действительно нужно отслаивать все от главного игрового сервера. В моем проэкте я использую worker_threads (потоки CPU) где просчитывается движение всех персонажей (npc и игроки), или при генерации артифактов. В будущем будет больше потоков которые просчитывают путь (pathfinding, интеграция происходит сейчас) а также обнаружение целей для ИИ. Но я о чем? Мне интересно что люди думают о таких сервисах.
 
Что такой NPC сервер будет делать? И почему нагрузка?


Мне интересно что такой NPC сервер должен делать что действительно нужно отслаивать все от главного игрового сервера. В моем проэкте я использую worker_threads (потоки CPU) где просчитывается движение всех персонажей (npc и игроки), или при генерации артифактов. В будущем будет больше потоков которые просчитывают путь (pathfinding, интеграция происходит сейчас) а также обнаружение целей для ИИ. Но я о чем? Мне интересно что люди думают о таких сервисах.

Держать 25000 NPC
Управлять их состоянием
* Если игроки рядом - выполнять скрипты (кто-то ходит, кто-то бафается)
* Если игроков рядом нет - спать.

Но как я и писал до этого
"В рамках текущего проекта это пока смотрится микросервис ради микросервисов)"

Воркеров пока хватает.
 
Наконец-то переделал и доделал правильную систему передвижения.

То, что было до этого - не масштабировалось. Event loop в node.js сходил с ума от количества таймеров для каждого действия. Когда разница между тиками 1000мс evenloop'у норм но когда меньше 100мс уже появляются расхождения.

Теперь не только передвижение стало точнее (монетка падает чаще а значит перемещение на сервере точнее) но и FSM работает как надо. Раньше FSM был привязан к таймеру. Теперь он работает паралельно с таймером что позволило его масштабировать и увеличить производительность.

Теперь когда задача с передвижением и FSM решена можно идти дальше. Spawn зоны, формулы атаки, заселить Талкинг NPC продавцами и т.д.

 
Наконец-то переделал и доделал правильную систему передвижения.

А коммиты в Git будут? А то смотрю последние коммиты были в январе 😀

Хотелось бы видеть, что там произошло в коде с этими обновлениями 🤓
 
А коммиты в Git будут? А то смотрю последние коммиты были в январе 😀

Хотелось бы видеть, что там произошло в коде с этими обновлениями 🤓
Будут) и коммиты и гайды как все развернуть
 
1744724452106.webp
занимаемся примерно одним и тем же :) Только с разных сторон
 
Посмотреть вложение 86586
занимаемся примерно одним и тем же :) Только с разных сторон
Как не хватает в клиенте ц1 такого функционала рисования линий)) столько идея для модов появляется)

Посмотреть вложение 86586
занимаемся примерно одним и тем же :) Только с разных сторон
А какая тут задача? поиск пути?
 
Последнее редактирование модератором:
А какая тут задача? поиск пути?
Проверяю что скорость мобов и скорость на сервере одинаковая. Если моб не дойдет до точки линия не пропадет оставлю так на пару часов и посмотрю чего будет.... Ну и вообще визуализировать чего происходит:_)
 
Проверяю что скорость мобов и скорость на сервере одинаковая. Если моб не дойдет до точки линия не пропадет оставлю так на пару часов и посмотрю чего будет.... Ну и вообще визуализировать чего происходит:_)
Она постоянная. Например Elder Keltir ( ) скорость 121. Это количество units в секунду. На стороне сервера прирост координат из x1 y1 в x2 y2 должен прирастать каждую секунду на 121 unit. Соответственно если хотим увеличить частоту то на 10 делим. 12.1 в 100мс.

Не помню только 121 это конечная или с множителем. То есть у Human Figther по базе 115 это базовая скорость но финальная 126. Там формула 115 * на модификатор DEX

Для 1 лвл 115 * 1.1 = 126. Соответственно 126 unit в секунду.
 
Наконец-то переделал и доделал правильную систему передвижения.

То, что было до этого - не масштабировалось. Event loop в node.js сходил с ума от количества таймеров для каждого действия. Когда разница между тиками 1000мс evenloop'у норм но когда меньше 100мс уже появляются расхождения.

Теперь не только передвижение стало точнее (монетка падает чаще а значит перемещение на сервере точнее) но и FSM работает как надо. Раньше FSM был привязан к таймеру. Теперь он работает паралельно с таймером что позволило его масштабировать и увеличить производительность.

Теперь когда задача с передвижением и FSM решена можно идти дальше. Spawn зоны, формулы атаки, заселить Талкинг NPC продавцами и т.д.
Что такое FSM ?
 
Finite State Machine.

Есть состояния и переключения между ними.
Например FSM для NPC
state: "idle" (Если задача стоять то стоим. Если патрулировать то следующее состояние "move"
state: "move"
state: "move"
state: "move" (Если дошли то точки то переключаемся в idle)
state: "idle" (Если NPC ударили то атакуем)
state: "attack" (Если цель далеко то преследуем)
state: "follow"
state: "follow"
state: "follow" (Если дошли до цели и задача атаковать то следующее состояние "attack"
state: "attack"

И т.д.
Состояний может быть масса и логика переключения масштабируется.
 
Назад
Сверху