Решили: эффекты, живущие собственным таймером схода («Угли», «Изморозь»), сами сжимают своё окно
на EffectSystem.DurationScale — новый публичный множитель длительности от статов сторон.
Почему: оба эффекта объявлены бессрочными (baseDuration = -1) намеренно — с обычной
длительностью они истекали бы РАЗОМ со всеми стаками вместо постепенного осыпания, которое требует
карточка burn. Но ResolveDurationTicks на отрицательной длительности выходит первой же строкой,
поэтому ReceiveDebuffEff проходил мимо: стойкость к дебаффам не действовала на самый частый дебафф
в игре и на всю холодную линию. Альтернатива — дать им конечную длительность и продлевать её на
каждый стак — отвергнута: это ровно та реализация, от которой уходили, когда писали свой таймер
схода.
Сказано: «Т.е. уголь бессерочный? Втф. Изучи по документации как он должен работать!!!» и следом, про распространение правила: «Да, и всех таких дебаффов в т.ч.!» (2026-08-03, сессия 87bf8fd2).
Грабли:
- «Бессрочный» здесь не значит «вечный». Слово в поле сбивает: угли держатся 5 секунд и осыпаются с ускорением, ровно как в карточке. Бессрочность — способ сказать движку «не истекай целиком».
- Тега
Wetв проекте не существовало вовсе. Правило «мокрый ускоряет сход углей ×2» описано в карточке с 2026-07-26, зеркальная половина (огонь гасит «Изморозь») была реализована, а эта нет — и не могла быть: состояния «мокрый» не было ни тегом, ни эффектом. Заведены и тег, и маркерeffect.wetна 4 секунды, накладывают автоатаки водного монаха. GetStringTableCollections()возвращает ВСЕ коллекции, включая UI. Проход по ним сAddKeyзавёл контентные ключи ещё и в UI-таблицу; заметно только поgit status. Правя лок-таблицы, фильтруй поTableCollectionName.
Владелец правды: EmberComponent.cs, FrostComponent.cs, EffectSystem.DurationScale,
EffectTag.Wet.