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