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

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"

И т.д.
Состояний может быть масса и логика переключения масштабируется.
А когда follow чего он посылает клиенту?
 

А когда follow чего он посылает клиенту?
follow это внутренняя логика на стороне сервера. Когда move или follow то идет отправка пакета MoveToLocation.

Но вообще есть пакет MoveToPawn, который отправляется один раз и на стороне клиента NPC преследует всегда цель в не зависимости от положения цели. В случае MoveToLocation NPC идет только в одну точку и я его корректирую каждый 100мс.

follow вызывается каждые 100мс и каждые 100мс корректируется маршрут. На видео видно как npc следует за целью. Но в целях оптимизации на боевом сервере лучше использовать MoveToPawn.
 
А как он узнает что нужно остановиться StopMove?
 
Я когда мобиус разбирал он эти MoveToPawn посылал постоянно пачками когда моб преследует игрока....... Попробую для теста послать 1 moveToPawn посмотреть чего будет

Понятно теперь почему он пачкам их шлет. После каждой атаки он посылает moveToPawn и действительно двигается пока не достигнет цели
 
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"

И т.д.
Состояний может быть масса и логика переключения масштабируется.
Это вроде ИИ (AI) для мобов. Как происходит переключение с одного состояния на другое?
 
Это вроде ИИ (AI) для мобов. Как происходит переключение с одного состояния на другое?
Если используется птс аи то оно само решает как и что делать и дергает сервер методами а-ля:
AddUseSkillDesire/AddFleeDesire/AddMoveToTargetDesire/AddMoveToDesire/AddFollowDesire и прочее.
А в обычных эмулях с самописными АИ это уже зависит от того насколько разрабы оглядывались на то как это работает в птс - может быть и в аи переключение, а может и раскидано по всему ядру.
 
Если используется птс аи то оно само решает как и что делать и дергает сервер методами а-ля:
AddUseSkillDesire/AddFleeDesire/AddMoveToTargetDesire/AddMoveToDesire/AddFollowDesire и прочее.
А в обычных эмулях с самописными АИ это уже зависит от того насколько разрабы оглядвались на тот как это работает в птс - может быть и в аи переключение, а может и раскидано по всему ядру.
Я про то что и как регулирует состояние FSM. Даже на ПТС скрипты на самом деле не регулируют состояние напрямую. Ведь те функции о которых вы говорите только регулируют систему desire (что в принципе и есть FSM построенная на значениях уменьшающихся во времени). Напрямую влияют только спаун (когда нпц появился) и смерть (когда FSM в принципе не работает). Под FSM я имею другую систему которая управляет скриптом по ивентам.
 
Я про то что и как регулирует состояние FSM. Даже на ПТС скрипты на самом деле не регулируют состояние напрямую. Ведь те функции о которых вы говорите только регулируют систему desire (что в принципе и есть FSM построенная на значениях уменьшающихся во времени). Напрямую влияют только спаун (когда нпц появился) и смерть (когда FSM в принципе не работает). Под FSM я имею другую систему которая управляет скриптом по ивентам.
Оно влияет вообще на весь цикл жизни\смерти\боя\передвижения моба. Все что сервер делает: шлет в нужной ситуации нужны ивент:
CREATED/NO_DESIRE/SCRIPT_EVENT/ATTACKED и прочее, а АИ уже на это реагирует вызовом функций - бежать к атакущему, от него, двигаться в точку или помереть.
 
Оно влияет вообще на весь цикл жизни\смерти\боя\передвижения моба. Все что сервер делает: шлет в нужной ситуации нужны ивент:
CREATED/NO_DESIRE/SCRIPT_EVENT/ATTACKED и прочее, а АИ уже на это реагирует вызовом функций - бежать к атакущему, от него, двигаться в точку или помереть.
Если все вместе взять да, это будет ИИ. Нo есть ведь разделение на функции скрипта и FSM (система desire). Да есть ивенты и сам скрипт, но это является составимыми ИИ так как без этого не будет самого поведения монстра. У меня различие между скриптом который обрабатывает данные/ивенты и самой системой которая производит эти ивенты. Я просто не обобщаю.
 
Это вроде ИИ (AI) для мобов. Как происходит переключение с одного состояния на другое?
Да, типо ИИ. Состояния переключаются на основе данных.

Например переход от состояния атака к follow если цель далеко. Если близко то повторить атаку. И так каждый раз.

Состояние "убегать" если hp <= 30 && npc находится в состоянии атака. И т.д.

Посмотреть вложение 86586
занимаемся примерно одним и тем же :) Только с разных сторон
Если видео запишите - будет круто
 
Последнее редактирование модератором:
А коммиты в Git будут? А то смотрю последние коммиты были в январе 😀

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

Таки закомитил.

Сделал глобальное обновление

* Добавлены Manager'ы (MovingManager, EntitiesManager, NpcManager, PlayerManager)
* Переделана система передвижения(Npc, Player)
* Спавн зона (1 тестовая)
* FSM состояния Npc, Player
 
Обзорное видео текущего состояния проекта
* Spawn NPC
* Разная скорость NPC
* Жизненный цикл NPC

 
Добавил ботов.

* Добавлена поддержка ботов
* Боты могут делать те же действия, что игрок в рамках этого проекта (Бегать, атаковать, подбирать дроп, искать следующую цель)

 
Чем отличаются Bearded Keltir(id: keltir) от Bearded Keltir(id: tuto_keltir)?


Есть пересечение по карте spawn'a. Но выглядят они одинаково.
 
Чем отличаются Bearded Keltir(id: keltir) от Bearded Keltir(id: tuto_keltir)?


Есть пересечение по карте spawn'a. Но выглядят они одинаково.
Если посмотреть что споилиться и дропается, то есть разница. Ну и в квестах тоже.
 
Если посмотреть что споилиться и дропается, то есть разница. Ну и в квестах тоже.
Да. Технически разница есть. Tuto, я так думаю, сокращение от tutorial так как есть квест на карту. Выбивание 4 клыков происходит у этого NPC. Но внутри игры на вид и на название они одинаковые.
 
Назад
Сверху