Fear - это эффект представляющий страх (FEAR): цель теряет контроль и бежит от кастера на заданную дистанцию, пока действует эффект.
Немного фактов.
🔵Страх накладывается только у whitelisted-скиллов, Если скилл не из списка - эффект не стартует (защита от "всепроникающего" страха в PvP).
Список ID скиллов:
case 1376: case 1169: case 65: case 1092:
case 98: case 1272: case 1381: case 763:
🔵Нельзя напугать Folk (торговцы/квест-NPC), осадные флаги и осадных саммонов.
🔵Если цель уже в страхе, второй раз эффект не накладывается.
Что происходит, пока действует страх
⏺ Принудительный бег
if (!(getEffected() instanceof Pet))
getEffected().setRunning();
Для всех, кроме петов, принудительно включается бег.
⏺Вычисление точки "убегания"
int victimX = effected.getX(), victimY = effected.getY(), victimZ = effected.getZ();
int posX = victimX + (((victimX > effector.getX()) ? 1 : -1) * FEAR_RANGE);
int posY = victimY + (((victimY > effector.getY()) ? 1 : -1) * FEAR_RANGE);
*Берём текущие координаты жертвы и сравниваем с координатами кастера.
*Двигаем цель на 500 юнитов по X и Y в сторону, противоположную кастеру — получается "диагональный" уход от источника страха.
⏺Геопатчинг и команда AI
Location dest = GeoEngine.getInstance().canMoveToTargetLoc(victimX, victimY, victimZ, posX, posY, victimZ);
getEffected().getAI().setIntention(IntentionType.MOVE_TO, dest);
*Через GeoEngine получаем достижимую точку (с учётом коллизий/препятствий).
*Выдаём AI цель движения
MOVE_TO.*На каждом тике эффект переcчитывает позицию заново - если кастер смещается, жертву продолжит "вырисовывать" дальше от него.
🛠 Практические заметки/краевые случаи/баги
🟢Если между жертвой и вычисленной точкой стена/клифф, GeoEngine подберёт ближайшую допустимую позицию — иногда жертва "цепляется" за край и бежит вдоль препятствия.
🟢Из-за простой «диагональной» логики вектора убегания (по знакам X/Y), иногда видишь угловое движение, а не идеальный обратный вектор - это норма для данной реализации.
🟢Петы: бег включается самим AI пета, здесь насильно не принудили (setRunning() пропущен).
🟢В момент страха обычно (внутренними флагами) сбрасывается таргет/каст.
Хочешь разберем механику/умение которая тебя давно интересует? С удовольствием! Пиши нам об этом в комментариях или в чат канала!
⚡️ Анонсы серверов ✈️ Телеграм-канал