--- a/rts/Game/WebbarCloak.h +++ b/rts/Game/WebbarCloak.h @@ -21,7 +21,10 @@ for (const CUnit* unit: unitHandler.GetActiveUnits()) { if (unit->isDead || unit->team != gu->myTeam) continue; const auto* def = unit->unitDef; - if (!def->canCloak && !unit->isCloaked && !unit->stealth && !unit->sonarStealth && !def->canResurrect && unit->stockpileWeapon == nullptr) continue; + // BAR's converters need actual stun status too. This is presentation + // eligibility, not a prediction of allocation, payment or MMStatus. + const bool converter = !gu->spectating && def->customParams.contains("energyconv_capacity") && def->customParams.contains("energyconv_efficiency"); + if (!def->canCloak && !unit->isCloaked && !unit->stealth && !unit->sonarStealth && !def->canResurrect && unit->stockpileWeapon == nullptr && !converter) continue; if (records.size() >= 4096) { ++dropped; continue; } commandsChanged |= webbarCloakEvents::CommandMetadataChanged(unit->id, unit->beingBuilt); const auto rule = [&](const char* name) {