fix: case-insensitive dead-vehicle matching for TSS scoreboard
Spectra sends events.kills[].offended_unit with uppercase roman numerals (V/VI) while players[].units[].unit uses lowercase (v/vi). 85% of TSS games are affected — dead-vehicle strikethrough on the Discord scoreboard never triggered because was case-sensitive. Normalize both sides to lowercase before comparing.
This commit is contained in:
+3
-3
@@ -60,14 +60,14 @@ def _build_units(units: list[dict[str, Any]], translate, dead: set[str] | None =
|
|||||||
Prefer an explicit per-unit ``dead``/``died`` flag if Spectra provides one; otherwise
|
Prefer an explicit per-unit ``dead``/``died`` flag if Spectra provides one; otherwise
|
||||||
fall back to the ``dead`` set cross-referenced from ``events.kills`` (see ``_dead_units_by_uid``).
|
fall back to the ``dead`` set cross-referenced from ``events.kills`` (see ``_dead_units_by_uid``).
|
||||||
"""
|
"""
|
||||||
dead = dead or set()
|
dead_lc = {s.lower() for s in (dead or set())}
|
||||||
out: list[dict[str, Any]] = []
|
out: list[dict[str, Any]] = []
|
||||||
for u in units or []:
|
for u in units or []:
|
||||||
internal = strip_model_prefix(u.get("unit"))
|
internal = strip_model_prefix(u.get("unit"))
|
||||||
if not internal:
|
if not internal:
|
||||||
continue
|
continue
|
||||||
flag = u.get("dead", u.get("died"))
|
flag = u.get("dead", u.get("died"))
|
||||||
is_dead = bool(flag) if flag is not None else internal in dead
|
is_dead = bool(flag) if flag is not None else internal.lower() in dead_lc
|
||||||
out.append({
|
out.append({
|
||||||
"internal": internal,
|
"internal": internal,
|
||||||
"name": translate(internal) or u.get("unit_normalized") or internal,
|
"name": translate(internal) or u.get("unit_normalized") or internal,
|
||||||
@@ -88,7 +88,7 @@ def _dead_units_by_uid(game: dict[str, Any]) -> dict[str, set[str]]:
|
|||||||
uid = str(k.get("offended_uid") or "")
|
uid = str(k.get("offended_uid") or "")
|
||||||
unit = strip_model_prefix(k.get("offended_unit"))
|
unit = strip_model_prefix(k.get("offended_unit"))
|
||||||
if uid and unit:
|
if uid and unit:
|
||||||
out.setdefault(uid, set()).add(unit)
|
out.setdefault(uid, set()).add(unit.lower())
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user