Написание сервера для 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
занимаемся примерно одним и тем же :) Только с разных сторон
Если видео запишите - будет круто
 
Последнее редактирование модератором:
Назад
Сверху