Механика агрессии монстров в Lineage2

Механика агрессии монстров в Lineage2

Примечание: Разбор механик проведён на основе анализа серверного кода Java-версий Lineage 2 (L2J).

Lineage 2 (L2) — это многопользовательская онлайн-ролевая игра (MMORPG), разработанная NCSoft, где боевые взаимодействия с монстрами (мобами) играют центральную роль. Система агрессии и очереди желания определяет, как монстры выбирают цели для атаки, что делает бои с окружением тактически глубокими. Эта механика эволюционировала в разных обновлениях игры, но её основы остаются неизменными.

Введение в систему агрессии

Агрессия в L2 — это симуляция «ненависти» монстра к персонажам, которая определяет приоритет атаки. Без этой системы монстры атаковали бы случайным образом, но благодаря очереди желания они фокусируются на угрозах: танках с провокациями, персонажах с высоким уроном или целителях, лечащих группу. Это стимулирует командную игру: танки контролируют агрессию, дамагеры наносят урон, а хилеры поддерживают баланс.

Система особенно важна в боях с рейдовыми боссами, где потеря агрессии может привести к полному уничтожению группы. В эмуляторах вроде L2J (эмулятор сервера на Java) механика воспроизводится близко к оригиналу, что позволяет изучать код и формулы.

Основные понятия

  • Ненависть (желание): Числовое значение, отражающее «желание» монстра атаковать цель. Оно накапливается от действий персонажа и уменьшается со временем. Ненависть — это сумма компонентов: от урона, от провокаций и от лечения. Чем выше ненависть, тем выше приоритет цели.

  • Очередь желания: Внутренняя структура данных в искусственном интеллекте монстра (обычно карта или отсортированный список), где хранятся цели с их уровнем ненависти. В L2J это класс AggroInfo, содержащий урон, ненависть и общее желание (ненависть + урон × коэффициент). Список обновляется в реальном времени и очищается, если ненависть падает ниже порога (обычно 1).

  • Агрессивные монстры: Монстры с флагом «агрессивный» в базе данных (npc.csv). Они автоматически добавляют начальную ненависть (1–100) при обнаружении игрока в радиусе (1000–2000 единиц). Условие: уровень игрока в диапазоне уровень монстра - 9 ≤ уровень игрока ≤ уровень монстра + 8. Примеры: монстры в Башне Крумы или Логове Антараса.

  • Пассивные монстры: Атакуют только после получения урона или провокации. Не иницируют агрессию.

  • Социальные монстры: Монстры в группах (кланы или фракции), которые помогают друг другу. Если один монстр агрессирует, он может «позвать» союзников, копируя очередь желания. В L2J это реализовано через систему фракций: монстры одной фракции делят агрессию.

  • Радиус видимости: Около 2000 единиц, где монстр может выбирать цели. Цели за пределами игнорируются, даже с высокой ненавистью

Механика накопления ненависти

Ненависть накапливается динамически во время боя:

  • От урона: Каждый удар добавляет ненависть пропорционально урону. Это основной способ для дамагеров привлечь внимание. В атаках по площади ненависть распределяется по всем монстрам в радиусе, но с уменьшением для дальних (например, в 2 раза).

  • От провокаций: Навыки вроде «Агрессия» или «Аура агрессии» добавляют фиксированную ненависть (мощность из навыка). Например, «Агрессия» уровня 24 имеет мощность 1400, что мгновенно повышает приоритет. Провокации работают в боях с монстрами и игроками, но в боях с игроками флагуют кастера.

  • От лечения: Лечение группы генерирует ненависть на целителя, чтобы монстры «защищали» уязвимых. Коэффициент обычно 1,5 × от количества лечения. Это балансирует роль целителей: чрезмерное лечение может перетянуть агрессию.

  • От близости: Просто подбежать к монстру добавляет базовую ненависть (около 100–200). В рейдах это используется для начального притягивания.

  • Другие факторы: Разница в уровнях (штраф за превышение уровня), случайные смены цели (на ближайшую), эффекты вроде «Удаление ненависти» (уменьшает ненависть). Уменьшение ненависти: каждые 2–5 секунд она снижается на 1–10% (в цикле ИИ), чтобы монстры «забывали» цели после боя.

Формулы расчётов

  • Они варьируются по хроникам, но базовая логика: total desire = hate + (damage * 100). От урона: aggro = (damage * 100) / (mob_level + 7). Балансирует для уровней: низкоуровневые монстры реагируют сильнее.

Пример: Монстр lvl 50, damage 500 → aggro = (500 100) / 50+7 ≈ 877. Total += 877 + (500 100) = 50 877.

  • От провокации: aggro = skill_power + bonuses (INT/WIT кастера). Power для Aggression растёт с уровнем: lvl 1 — 659, lvl 24 — 1400.
  • От лечения: aggro = heal_amount * 1.5 / (mob_level + 7). Аналогично урону, но с коэффициентом.
  • Уменьшение: hate *= (1 - decay_rate), где decay_rate = 0.01–0.1 за тик.
  • Штраф за уровень: Для overlevel (игрок >> mob): hate *= (player_level + 89) / 100 (для lvl 1–99). В High Five добавлены модификаторы за M.Def (магическая защита) и случайные элементы.

Пример кода из L2J

В L2Attackable.java:

// Добавление hate public void addDamageHate(L2Character attacker, int damage, int aggro) { AggroInfo ai = getAggroList().computeIfAbsent(attacker, AggroInfo::new); ai.addDamage(damage); ai.addHate(aggro); if (aggro == 0) { aggro = (damage * 100) / (getLevel() + 7); ai.addHate(aggro); } }
// Выбор цели public L2Character getMostHated() { long max = 0; L2Character hated = null; for (AggroInfo ai : getAggroList().values()) { long total = ai.getHate() + (ai.getDamage() * 100); if (total > max && !ai.getTarget().isDead()) { max = total; hated = ai.getTarget(); } } return hated; }

Задержка агрессии после появления

  • Начало агрессии: Агрессивные монстры (с флагом «aggressive=1» в npc.csv) начинают сканировать радиус (1000–2000 единиц) сразу после появления. Если игрок в радиусе и подходит по уровню (уровень монстра - 9 ≤ уровень игрока ≤ уровень монстра + 8), монстр добавляет начальную ненависть (1–100) и атакует. Если список пуст, монстр возвращается в точку появления.
  • Задержка: Обычно 0–2 секунды (цикл обновления ИИ — около 1 секунды). Это время на инициализацию: монстр «просыпается», проверяет список видимых объектов и выбирает цель. В старых обновлениях (C4/Interlude) задержка может быть до 5 секунд из-за задержек сервера.
  • Монстры, которые агрессируют сразу: Большинство агрессивных монстров проявляют агрессию мгновенно после появления, если игрок рядом.

Примеры:

  • Монстры в зонах вроде Башни Крумы или Башни Надменности — появляются и сразу агрессируют, если вы в радиусе (без периода ожидания). Это создаёт «агрессию при появлении», где новый монстр может атаковать до того, как вы выберете следующую цель или убежите.
  • Социальные монстры: Если появляется группа, они могут агрессировать сразу, усиливая эффект (например, в Лабиринте Бездны).
  • Пассивные монстры: Не агрессируют после появления — ждут урона или провокации. Задержка не применяется.

Вывод

Механика агрессии в Lineage 2 формирует основу боевых взаимодействий. Очередь желания и накопление ненависти позволяют монстрам выбирать цели осознанно, создавая баланс между ролями. Система делает бои с окружением и рейдовыми боссами более стратегическими и стимулирует командную игру.

В итоге, это простая и проверенная временем механика, которая до сих пор работает стабильно и служит отличным примером для вдохновения в разработке.

14
2
1
5 комментариев