Разборы игровых механик, лор и полезные обсуждения. Всё об игре Lineage II.
l2-servera.com
Сотрудничество - @l2servera_adm
Post #320
341

🔥🔥🔥 Привет, друзья!
Полный разбор эффекта Cancelation, как это работает?
Снять ограниченное количество положительных баффов с цели, с определённым шансом.
➡️ Структура и логика по шагам
1. onStart() — активирует эффект
- При активации эффекта вызывается метод cancel(...), который и занимается снятием эффектов.
- getEffector() — кастующий (L2Character).
- getEffected() — цель (L2Character).
- this — текущий эффект (используется для доступа к параметрам скилла).
2. onActionTime() — у эффекта нет периодического действия
- Возвращает false, потому что Cancel — моментальный эффект, а не длительный (например, как Poison или Regen).
3. Метод cancel(...) — вся логика отмены баффов
Этап 1: Проверки
- Работает только против игроков (NPC/монстров не касается).
- Цель должна быть жива.
Этап 2: Сбор параметров скилла
- cancelLvl — маг. уровень скилла Cancel.
- count — сколько эффектов можно снять (как правило от 1 до 5)
- rate — базовый шанс снятия (в среднем 35-50)
Этап 3: Учет сопротивляемости
- Модификация шанса rate с учётом уязвимости/сопротивляемости цели к Cancel (через резисты, баффы и т.д.).
Этап 4: Два прохода снятия эффектов
- На этом этапе Cancel пытается снять обычные положительные эффекты, если остались попытки (count).
- В первый проход денсы/сонги, во второй баффы.
-На этом этапе Cancel пытается снять обычные положительные эффекты, если остались попытки (count).
➕ Алгоритм расчета шанса снятия одного эффекта
int rate = 2 * (cancelLvl - effect.getSkill().getMagicLevel());
- Чем выше уровень Cancel, тем выше шанс.
- Умножается на 2 — чтобы усилить влияние разницы.
- Если Cancel слабее снимаемого эффекта → это даст отрицательное значение.
rate += effect.getPeriod() / 120;
- Чем дольше висит бафф (например, 20 минут), тем выше шанс его снять.
- effect.getPeriod() — длительность эффекта в секундах.
- Делим на 120 (т.е. каждые 2 минуты дают +1 к шансу).
🚩 Вывод:
- Чем выше уровень Cancel по сравнению с уровнем скилла-баффа — тем выше шанс.
- Чем дольше длится эффект — тем выше шанс его снять.
- Есть пределы: шанс будет от 25% до 75%.
Продолжаем, если шанс успешный:
Ограничение шанса: минимум и максимум
Даже если все условия плохие — шанс будет не меньше 25%.
Даже если всё идеально — шанс не больше 75%.
🔖 Финальный расчёт:
return Rnd.get(100) < rate;
- Получаем случайное число от 0 до 99.
- Если оно меньше rate → считается, что успешно снят.
✏️ Пример работы:
- cancelLvl = 12
- Эффект (buff) имеет magicLevel = 10
- Висит уже 10 минут → effect.getPeriod() = 600 сек
- baseRate = 35
Шаги:
Значит, шанс снять эффект = 44%.
🖥 Итого, что влияет?
Разница уровней: +2% или -2% за каждый уровень
Длительность эффекта: +1% за каждые 2 минуты
Базовый шанс
Мин/макс: всегда между 25% и 75%
Финальное решение: Rnd.get(100) < rate — успех или нет
Вроде бы ничего не упущено...😰
Новые сервера Lineage 2 ⭐ Блог Lineage 2 ⭐ Телеграм
Полный разбор эффекта Cancelation, как это работает?
Снять ограниченное количество положительных баффов с цели, с определённым шансом.
➡️ Структура и логика по шагам
1. onStart() — активирует эффект
public boolean onStart()
{
return cancel(getEffector(), getEffected(), this);
}
- При активации эффекта вызывается метод cancel(...), который и занимается снятием эффектов.
- getEffector() — кастующий (L2Character).
- getEffected() — цель (L2Character).
- this — текущий эффект (используется для доступа к параметрам скилла).
2. onActionTime() — у эффекта нет периодического действия
public boolean onActionTime()
{
return false;
}
- Возвращает false, потому что Cancel — моментальный эффект, а не длительный (например, как Poison или Regen).
3. Метод cancel(...) — вся логика отмены баффов
private static boolean cancel(L2Character caster, L2Character target, L2Effect effect)
Этап 1: Проверки
if (!(target instanceof L2PcInstance) || target.isDead())
return false;
- Работает только против игроков (NPC/монстров не касается).
- Цель должна быть жива.
Этап 2: Сбор параметров скилла
final int cancelLvl = effect.getSkill().getMagicLevel();
int count = effect.getSkill().getMaxNegatedEffects(); // максимум снимаемых баффов
double rate = effect.getEffectPower(); // базовый шанс снятия
- cancelLvl — маг. уровень скилла Cancel.
- count — сколько эффектов можно снять (как правило от 1 до 5)
- rate — базовый шанс снятия (в среднем 35-50)
Этап 3: Учет сопротивляемости
final double res = Formulas.calcSkillVulnerability(caster, target, effect.getSkill(), effect.getSkillType());
rate *= res;
- Модификация шанса rate с учётом уязвимости/сопротивляемости цели к Cancel (через резисты, баффы и т.д.).
Этап 4: Два прохода снятия эффектов
if (!eff.getSkill().isDance())
continue;
- На этом этапе Cancel пытается снять обычные положительные эффекты, если остались попытки (count).
- В первый проход денсы/сонги, во второй баффы.
if (eff.getSkill().isDance())
continue;
-На этом этапе Cancel пытается снять обычные положительные эффекты, если остались попытки (count).
➕ Алгоритм расчета шанса снятия одного эффекта
int rate = 2 * (cancelLvl - effect.getSkill().getMagicLevel()); // разница уровней
rate += effect.getPeriod() / 120; // продолжительность эффекта
rate += baseRate;
if (rate < 25) rate = 25;
else if (rate > 75) rate = 75;
int rate = 2 * (cancelLvl - effect.getSkill().getMagicLevel());
- Чем выше уровень Cancel, тем выше шанс.
- Умножается на 2 — чтобы усилить влияние разницы.
- Если Cancel слабее снимаемого эффекта → это даст отрицательное значение.
rate += effect.getPeriod() / 120;
- Чем дольше висит бафф (например, 20 минут), тем выше шанс его снять.
- effect.getPeriod() — длительность эффекта в секундах.
- Делим на 120 (т.е. каждые 2 минуты дают +1 к шансу).
🚩 Вывод:
- Чем выше уровень Cancel по сравнению с уровнем скилла-баффа — тем выше шанс.
- Чем дольше длится эффект — тем выше шанс его снять.
- Есть пределы: шанс будет от 25% до 75%.
Продолжаем, если шанс успешный:
Ограничение шанса: минимум и максимум
if (rate < 25)
rate = 25;
else if (rate > 75)
rate = 75;
return Rnd.get(100) < rate;
Даже если все условия плохие — шанс будет не меньше 25%.
Даже если всё идеально — шанс не больше 75%.
🔖 Финальный расчёт:
return Rnd.get(100) < rate;
- Получаем случайное число от 0 до 99.
- Если оно меньше rate → считается, что успешно снят.
✏️ Пример работы:
- cancelLvl = 12
- Эффект (buff) имеет magicLevel = 10
- Висит уже 10 минут → effect.getPeriod() = 600 сек
- baseRate = 35
Шаги:
rate = 2 * (12 - 10) = 4
rate += 600 / 120 = 5
rate += 35 → всего 44
Значит, шанс снять эффект = 44%.
🖥 Итого, что влияет?
Разница уровней: +2% или -2% за каждый уровень
Длительность эффекта: +1% за каждые 2 минуты
Базовый шанс
Мин/макс: всегда между 25% и 75%
Финальное решение: Rnd.get(100) < rate — успех или нет
Вроде бы ничего не упущено...😰
Новые сервера Lineage 2 ⭐ Блог Lineage 2 ⭐ Телеграм
- 🔥 6
- 👍 5
- ❤ 3
- ⚡ 2









