View Issue Details

IDProjectCategoryView StatusLast Update
0035277Legion CoreClasses - Priest - Жрецpublic2026-04-29 13:34
ReporterShalfey Assigned ToWhatinhell  
PriorityhighSeveritymajorReproducibilityalways
Status closedResolutionduplicate 
Summary0035277: [Отблеск света]
DescriptionОписание проблемы:
Неверно рассчитывается объем тика, общая длительность баффа и количество самих тиков при обновлении хоты. Механика [Отблеск света] отличается от стандартной логики «Пандемии» и имеет уникальную логику наслоения, которая сейчас работает некорректно.
Логика механики :
Интервал тиков:
Всегда константа - 3 секунды.
Обновление:
При наложении новой хоты на уже существующую, остаток «банка» суммируется с новым значением.
Длительность:
Новое время баффа = 6 сек (базовое) + остаток времени до следующего тика. Максимальная длительность — до 9 сек (теоритечески, но практически всегда меньше будет).
Количество тиков: 2 тика (если бафф наложен «с нуля») или 3 тика (если произошло обновление до истечения первого тика в очереди в момент обновления).
Пример для воспроизведения (Искусность 10%, Хил = 1 000 000):

Сценарий 1, который на сервере работает (Одиночное применение):
Применяем «Быстрое исцеление» (1 000 000). В банк уходит 100 000.
Ожидаемый результат: Бафф 6 сек. 2 тика по 50 000 (на 3-й и 0-й секундах).

Сценарий 2, который на сервере НЕ РАБОТАЕТ И СЧИТАЕТ НЕКОРРЕКТНО (Обновление баффа):
0 сек: Применяем «Быстрое исцеление». В банке 100 000. Бафф 6 сек. До тика — 3 сек.
1 сек (оставшееся время бафа [Отблеск света] 5с) : Снова применяем «Быстрое исцеление».
Математика обновления: Остаток времени до тика в очереди (2 сек) + 6 сек базовых = 8 секунд общая длительность обновленного таймера бафа [Отблеск света].
Пересчет банка: 100 000 (старый остаток) + 100 000 (новый) = 200 000.
Распределение: 200 000 размазываются на 3 тика (так как общая длительность > 6 сек).
Ожидаемый результат: Тики по ~66 666 ед. с сохранением интервала в 3 сек.

Например, если исцеление произойдет на времени бафа 6.8 сек (0.8 сек до первого тика на 6.0 секунде), то таймер "обновится" 6 + 0.8сек (фактически визуально мы не увидим обновления времени), а размер банка пересчитается и размажется на 3 тика.

Необходимо привести механику пересчета размера тика и таймера [Отблеск света] в соответствие с формулой: (Остаток + Новое) / (Количество будущих тиков), где количество тиков увеличивается до 3-х, если бафф обновлен до срабатывания первого интервала.
Все что я описал выше продемонстрировано и подтверждается в видео:
https://youtu.be/2SppXTc35Vo?t=299
где видно как обновляется баф по выше приведенной формуле и как размазывается размер тиков.

Relationships

duplicate of 0035004 confirmedGhost Arms war, Trauma talent 

Activities

Shalfey

2026-04-29 13:23

reporter   ~0080851

ИИшка вот так нарисовала логику, которую я выше описал в первом сообщении, если это как-то поможет
class EchoOfLight {
    double totalPool = 0; // Тот самый "банк" хила
    double timeToNextTick = 0; // Время до ближайшего срабатывания
    double remainingDuration = 0;
    const double TICK_INTERVAL = 3.0;
    const double BASE_DURATION = 6.0;

    // Метод, который вызывается при каждом "Быстром исцелении"
    void OnHealApplied(double healAmount, double masteryPercent) {
        double newAddedHeal = healAmount * masteryPercent;

        if (!isActive()) {
            // Сценарий 1: Наложение с нуля
            totalPool = newAddedHeal;
            timeToNextTick = TICK_INTERVAL; // Первый тик через 3 сек
            remainingDuration = BASE_DURATION;
        }
        else {
            // Сценарий 2: ОБНОВЛЕНИЕ (Та самая хитрая логика)
            totalPool += newAddedHeal;
            
            // Важно: Мы НЕ сбрасываем timeToNextTick.
            // Мы оставляем его как есть (например, 2 сек до тика).
            
            // Новая длительность = База (6) + время до ближайшего тика (от 0 до 3)
            remainingDuration = BASE_DURATION + timeToNextTick;
        }

        // РЕШАЮЩИЙ МОМЕНТ: Пересчет размера тика
        // Считаем, сколько тиков влезет в текущую длительность
        // 6.0 сек -> 2 тика, 6.1-9.0 сек -> 3 тика
        int ticksPending = ceil(remainingDuration / TICK_INTERVAL);
        
        double tickAmount = totalPool / ticksPending;
        
        // Обновляем параметры баффа для отправки на клиент
        ApplyAuraToTarget(remainingDuration, tickAmount);
    }

    // Логика самого тика (срабатывает раз в секунду или по таймеру)
    void OnUpdate(double deltaTime) {
        timeToNextTick -= deltaTime;
        remainingDuration -= deltaTime;

        if (timeToNextTick <= 0) {
            ExecuteHeal(tickAmount); // Хиляем цель
            totalPool -= tickAmount; // Вычитаем из банка
            timeToNextTick = TICK_INTERVAL; // Сбрасываем интервал на 3 сек
        }
    }
};

Whatinhell

2026-04-29 13:34

administrator   ~0080853

Доброго времени суток. О данной проблеме уже известно. К сожалению, это относится не только к Отблеску Света, но и к другим HoT/DoT-эффектам, которые работают по принципу Ignite-эффекта (накопление от других триггерных способностей, на которые не работает механика пандемии).

Issue History

Date Modified Username Field Change
2026-04-29 13:17 Shalfey New Issue
2026-04-29 13:17 Shalfey Status new => assigned
2026-04-29 13:17 Shalfey Assigned To => Whatinhell
2026-04-29 13:23 Shalfey Note Added: 0080851
2026-04-29 13:34 Whatinhell Note Added: 0080853
2026-04-29 13:34 Whatinhell Status assigned => closed
2026-04-29 13:34 Whatinhell Resolution open => duplicate
2026-04-29 13:34 Whatinhell Relationship added duplicate of 0035004