Решили: стенд баланса подаёт симу фабрику призывов, а призванное тело получает СВОЮ строку метрик
с указателем на хозяина — отсюда три взгляда: кит сам (AvgDmgDealt, DPS_solo), одно тело
(строка в трейсе и сценариях), кит вместе с армией (DmgWithSummons, DPS_with_summons).
Почему: сим отдаёт рождение тел наружу через BindSummonFactory, и её подавал только игровой путь
(EncounterLoader). Стенд не подавал никогда — ctx.Summon молча возвращал null, призыватели дрались
в бенчах в одиночку, и таблица показывала это как их честную силу. Некромант в PvE-линзе после
починки: 524 личного урона за бой против 982 с армией, 206 урона принято телами, среднее число живых
тел 1.99 — и он поднялся с девятого места на первое по цене боя.
Альтернатива, отвергнутая: приписывать работу тел прямо в поля хозяина (SummonDamageDealt и родня)
без отдельных строк. Дешевле на реализацию, но отвечает только на один вопрос из трёх — «сколько бьёт
один скелет» остаётся невыразимым, а именно он решает, чинить тело или число вызовов.
Сказано: «Добавь да, поддержку призывов. Отдельно стату отдельного призыва и стату призывателя отдельно и с призывами.» (2026-08-03, сессия 87bf8fd2)
Грабли:
- Id тела сталкивался с Id живого бойца.
SimBench.Driveпереразмечает бойцов по индексу списка, а счётчик фабрики про это не знает: часть бойцов — синтетика, созданная мимо фабрики, поэтому её счётчик отстаёт от длины списка. Первое же тело получало Id живого, и весь его урон уезжал в чужую строку — замер, неотличимый от честного. ЛечитсяRuntimeUnitFactory.AdvanceIdsPast. - Тело нельзя пускать в состав отряда. Как только у него появилась строка, оно полезло в «павших»
и в остаток HP отряда у всех бенчей, считающих команду по
report.Units. Кит с армией начал бы проходить бой «дешевле», просто разбавив отряд расходниками. - Трешевый костолом не призывает вообще. Способность стоит 100 ресурса при регене 5/сек, а рядовой
бой длится 9–11 секунд: касту нужно 20. У Некроманта то же самое, и работает он только потому, что
два тела приходят пассивкой
SkeletonGuardsна старте боя. Это не про метрику, а про контент — проверять при следующем проходе по призывателям.
Владелец правды: MetricCollector.cs (строки и свёртка SummonRollup), SimEnvironment.cs
(бинд фабрики), SimBench.cs (сдвиг Id), тест SummonMetricsTests.