View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0035277 | Legion Core | Classes - Priest - Жрец | public | 2026-04-29 13:17 | 2026-04-29 13:34 |
| Reporter | Shalfey | Assigned To | Whatinhell | ||
| Priority | high | Severity | major | Reproducibility | always |
| Status | closed | Resolution | duplicate | ||
| Summary | 0035277: [Отблеск света] | ||||
| 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 где видно как обновляется баф по выше приведенной формуле и как размазывается размер тиков. | ||||
|
|
ИИшка вот так нарисовала логику, которую я выше описал в первом сообщении, если это как-то поможет 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 сек } } }; |
|
|
Доброго времени суток. О данной проблеме уже известно. К сожалению, это относится не только к Отблеску Света, но и к другим HoT/DoT-эффектам, которые работают по принципу Ignite-эффекта (накопление от других триггерных способностей, на которые не работает механика пандемии). |
| 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 |