fix some scoreboard shit (#1364)
This commit is contained in:
+46
-2
@@ -23,8 +23,48 @@ from typing import Any, Dict, List, Optional
|
||||
|
||||
import aiosqlite
|
||||
|
||||
from spectra_replay_normalize import strip_model_prefix
|
||||
|
||||
log = logging.getLogger("tssbot.storage")
|
||||
|
||||
try:
|
||||
from data_parser import LangTableReader, apply_vehicle_name_filters # type: ignore
|
||||
except Exception: # pragma: no cover - only when SHARED is unavailable
|
||||
LangTableReader = None # type: ignore
|
||||
|
||||
def apply_vehicle_name_filters(name, strip_decorations=True): # type: ignore
|
||||
return name
|
||||
|
||||
_EN_VEHICLE_TRANSLATOR = None
|
||||
|
||||
|
||||
def _vehicle_display_name(internal: str) -> str:
|
||||
"""Return parser-translated English vehicle name, falling back to internal ID."""
|
||||
if not internal:
|
||||
return ""
|
||||
if LangTableReader is None:
|
||||
return internal
|
||||
global _EN_VEHICLE_TRANSLATOR
|
||||
if _EN_VEHICLE_TRANSLATOR is None:
|
||||
try:
|
||||
_EN_VEHICLE_TRANSLATOR = LangTableReader("English")
|
||||
except Exception as exc: # pragma: no cover
|
||||
log.warning("LangTableReader('English') failed: %s", exc)
|
||||
return internal
|
||||
try:
|
||||
translated = _EN_VEHICLE_TRANSLATOR.get_translate(internal)
|
||||
except Exception:
|
||||
translated = None
|
||||
return apply_vehicle_name_filters(translated) if translated else internal
|
||||
|
||||
|
||||
def _unit_vehicle_fields(unit: dict[str, Any]) -> tuple[str, str] | None:
|
||||
"""Return (display_name, internal_id) for a Spectra unit without using unit_normalized."""
|
||||
internal = strip_model_prefix(unit.get("unit"))
|
||||
if not internal:
|
||||
return None
|
||||
return _vehicle_display_name(internal), internal
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Paths
|
||||
@@ -377,14 +417,18 @@ async def insert_player_games(game: Dict[str, Any]) -> None:
|
||||
continue
|
||||
|
||||
for unit in used_units:
|
||||
vehicle_fields = _unit_vehicle_fields(unit)
|
||||
if vehicle_fields is None:
|
||||
continue
|
||||
vehicle, internal = vehicle_fields
|
||||
rows.append((
|
||||
str(uid_str),
|
||||
str(p.get("name") or ""),
|
||||
str(tss_team.get("team_name") or tss_team.get("name") or ""),
|
||||
str(p.get("team") or ""), # team_slot ("1" or "2")
|
||||
session_id,
|
||||
str(unit.get("unit_normalized") or ""),
|
||||
str(unit.get("unit") or ""),
|
||||
vehicle,
|
||||
internal,
|
||||
int(p.get("ground_kills") or 0),
|
||||
int(p.get("air_kills") or 0),
|
||||
int(p.get("assists") or 0),
|
||||
|
||||
+1
-1
@@ -70,7 +70,7 @@ def _build_units(units: list[dict[str, Any]], translate, dead: set[str] | None =
|
||||
is_dead = bool(flag) if flag is not None else internal.lower() in dead_lc
|
||||
out.append({
|
||||
"internal": internal,
|
||||
"name": translate(internal) or u.get("unit_normalized") or internal,
|
||||
"name": translate(internal) or internal,
|
||||
"used": bool(u.get("used")),
|
||||
"dead": is_dead,
|
||||
"unit_type": u.get("unit_type"),
|
||||
|
||||
Reference in New Issue
Block a user