1. Нужно реализовать примитивный AI, который будет иметь минимум кода (прямой наследник AbstractAI), обеспечивающий:
- Рэндомное перемещение моба/NPC при наличии оного в поле зрения игрока (наличие хотя бы одного игрока в радиусе 6144)
- Постоянное перемещение моба/NPC по заданному маршруту даже в отсутствии окружающих игроков (корабли и те же будущие "гуляющие" по карте NPC)
- Активация настоящего ИИ при приближении игрока на радиус активности моба (600... - в зависимости от агрорадиуса, например)
- Активация настоящего ИИ при атакующем или ином воздействии игрока на моба.
- Никакого сканирования объектов у неподвижного моба быть не должно.
- При перемещении моба в новое положение происходит пересканирование объектов, при необходимости нотифицирующее новые объекты о появлении этого перемещённого моба в их поле зрения.
Проблема постоянного сканирования мобами окрестностей решается частичным включением в этот процесс игрока.
- При перемещении игрока у него уже есть knownList, в котором хранятся известные ему объекты. При появлении нового объекта в поле зрения (6144) наряду с addKnownObject (посылка пакета этого объекта клиенту) требуется активация AI моба в Light-состояние, если до этого он был в состоянии IDLE. Это уже реализованое.
- Нужно добавить новое: при появлении моба в радиусе меньше типичного агрорадиуса (600) (а расстояния до объектов всё равно у игроков считаются при каждом их перемещении), мобу шлётся нотификация о его активации, после чего у него включается полноценный ИИ.
- Аналогично, при выходе моба за эти пределы, он должен пересмореть свои области видимости и, если нужно, включить лёгкий ИИ, или выключить его совсем (Idle состояние, если моб обычный и игроков в пределах их видимости нет).