Решили: отступление получило предел по времени — SimTuning.RetreatMaxSeconds, по умолчанию 4
секунды, после которых боец возвращается в бой независимо от здоровья. Кайтеров предел не касается.
Счётчик живёт на юните (RuntimeUnit.RetreatTicks) и обнуляется по тому же порогу, по которому боец
возвращается сам.
Почему: порог возврата задан долей HP, а поднять её нечем, когда лечить некому. Боец уходил навсегда, обе стороны оставались живы, и бой не разрешался: 93 боя из 702 упирались в потолок 240 секунд, у Монаха вихря — 57.69% его матчей. После правки — 2 из 702, самый долгий бой упал с 231.0 до 110.3 секунды.
Грабли:
- Овертайм не мог это вылечить по построению, и я потратила время, считая иначе. Правило анти-затягивания умножает урон (к 240-й секунде — в 8.5 раза), но в такой ситуации урон не наносится вовсе: трасса «Убийца против Древня» показала обоих живыми на 23% и 18% HP, которые двести секунд подряд только обновляли свои пассивки. Я называла это «клинчем сустейна» — то есть лечила бы сустейн, а болезнь была в позиционировании.
- Диагноз дало распределение, а не среднее. У Убийцы в дуэлях 26.92% таймаутов при средней длительности боя 14 секунд: бой либо кончается быстро, либо не кончается никогда, промежутка нет. Такая форма распределения означает «урон перестал наноситься», а не «урона мало».
- Профили правятся с обеих сторон. Играет AI-пресет, но инлайн-профиль в релике никуда не девается и остаётся врать следующему читателю — выключать надо оба.
Владелец правды: ProfileBrain.ResolvePositioning, SimTuning.RetreatMaxSeconds,
RuntimeUnit.RetreatTicks.