Skip to content

Équipes et scores ​

Ces commandes modifient les informations du match affichées par le HUD et les scènes : les équipes, le nom de l'événement, le format d'équipe et le score de chaque map.

Elles ont besoin que la fenêtre principale de MyHUD soit ouverte et connectée à ton compte. Chaque changement apparaît tout de suite sur les pages ouvertes, y compris les sources navigateur d'OBS.

Équipe A et équipe B ​

L'API utilise toujours équipe A et équipe B, comme la page match de MyHUD. Ce sont les deux équipes de la série. Elles ne correspondent pas au côté CT ou T dans le jeu.

Lire le match actuel ​

bash
curl http://127.0.0.1:44555/api/match
powershell
(Invoke-RestMethod http://127.0.0.1:44555/api/match).match
python
import requests

match = requests.get("http://127.0.0.1:44555/api/match").json()["match"]
print(match["seriesScore"])
ts
const { match } = await (await fetch('http://127.0.0.1:44555/api/match')).json();
console.log(match.seriesScore);

La réponse contient le nom de l'événement, les équipes, les maps de la série avec leurs scores, le score de la série et le veto :

json
{
  "ok": true,
  "match": {
    "eventName": "Spring Cup",
    "teamFormat": "5v5",
    "boFormat": "bo3",
    "teamA": { "name": "Vitality" },
    "teamB": { "name": "NAVI" },
    "maps": [
      { "number": 1, "map": "de_nuke", "label": "Nuke", "pickedBy": "Vitality", "finished": true, "scoreA": 13, "scoreB": 9, "winner": "Vitality" },
      { "number": 2, "map": "de_mirage", "label": "Mirage", "pickedBy": "NAVI", "finished": false, "scoreA": 4, "scoreB": 6, "winner": null }
    ],
    "seriesScore": { "a": 1, "b": 0 },
    "veto": {
      "steps": [
        { "type": "ban", "team": "A", "map": "de_ancient" },
        { "type": "ban", "team": "B", "map": "de_train" }
      ],
      "revealed": 2
    }
  }
}

teamA, teamB, boFormat et veto valent null tant qu'ils ne sont pas définis.

Les commandes set_* ci-dessous renvoient le même résumé du match dans result.

Définir les équipes ​

json
POST /api/actions/set_teams
{
  "teamA": { "name": "Vitality", "logo": "https://example.com/vitality.png" },
  "teamB": { "name": "NAVI" },
  "boFormat": "bo3"
}
  • logo est optionnel.
  • boFormat (bo1, bo3 ou bo5) est optionnel. Il définit la longueur de la série affichée sur la scène versus.

MyHUD renomme les équipes partout : résultats des maps, picks, veto et scène versus.

Définir le score d'une map ​

json
POST /api/actions/set_map_result
{ "map": 1, "scoreA": 13, "scoreB": 9, "finished": true }
  • map est le numéro de la map dans la série (1 à 5), ou le nom de la map si elle est dans la série ("mirage").
  • finished: true marque la map comme jouée. MyHUD définit alors le vainqueur. Si tu n'envoies pas finished, la valeur actuelle reste.

La map doit déjà être dans la série, via un veto ou la page match. Si l'emplacement est vide, MyHUD répond 409 conflict.

Définir le nom de l'événement ​

json
POST /api/actions/set_event_name
{ "name": "Spring Cup — Grande finale" }

Le HUD et les scènes affichent ce nom.

Définir le format d'équipe ​

json
POST /api/actions/set_team_format
{ "format": "2v2" }

Valeurs : auto, 1v1, 2v2, 3v3, 5v5.

Exemple : préparer une série complète ​

Ce script définit l'événement et les équipes, fait un veto BO3, puis définit le score de la map 1 :

powershell
$Base = 'http://127.0.0.1:44555'

function Invoke-MyHud([string]$Action, [hashtable]$Payload = @{}) {
  Invoke-RestMethod -Method Post "$Base/api/actions/$Action" `
    -ContentType 'application/json' -Body ($Payload | ConvertTo-Json -Depth 6 -Compress)
}

Invoke-MyHud set_event_name @{ name = 'Spring Cup' } | Out-Null
Invoke-MyHud set_teams @{ teamA = @{ name = 'Vitality' }; teamB = @{ name = 'NAVI' }; boFormat = 'bo3' } | Out-Null

Invoke-MyHud veto_start @{
  boFormat = 'bo3'
  teamA    = @{ name = 'Vitality' }
  teamB    = @{ name = 'NAVI' }
  mapPool  = @('ancient', 'anubis', 'dust2', 'inferno', 'mirage', 'nuke', 'train')
} | Out-Null
foreach ($map in 'nuke', 'ancient', 'mirage', 'inferno', 'anubis', 'dust2') {
  Invoke-MyHud veto_select @{ map = $map } | Out-Null
}

Invoke-MyHud set_map_result @{ map = 1; scoreA = 13; scoreB = 9; finished = $true } | Out-Null
python
import requests

BASE = "http://127.0.0.1:44555"


def myhud(action, payload=None):
    res = requests.post(f"{BASE}/api/actions/{action}", json=payload or {}, timeout=40)
    body = res.json()
    if not body["ok"]:
        raise RuntimeError(f"{action} failed ({res.status_code} {body['error']}): {body['message']}")
    return body.get("result")


teams = {"teamA": {"name": "Vitality"}, "teamB": {"name": "NAVI"}}

myhud("set_event_name", {"name": "Spring Cup"})
myhud("set_teams", {**teams, "boFormat": "bo3"})

myhud("veto_start", {
    **teams,
    "boFormat": "bo3",
    "mapPool": ["ancient", "anubis", "dust2", "inferno", "mirage", "nuke", "train"],
})
for map_name in ["nuke", "ancient", "mirage", "inferno", "anubis", "dust2"]:
    myhud("veto_select", {"map": map_name})

match = myhud("set_map_result", {"map": 1, "scoreA": 13, "scoreB": 9, "finished": True})
print("Série :", match["seriesScore"])
ts
const BASE = 'http://127.0.0.1:44555';

async function myhud<T = unknown>(action: string, payload: object = {}): Promise<T> {
  const res = await fetch(`${BASE}/api/actions/${action}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(payload),
  });
  const body = await res.json();
  if (!body.ok) throw new Error(`${action} failed (${res.status} ${body.error}): ${body.message}`);
  return body.result as T;
}

const teams = { teamA: { name: 'Vitality' }, teamB: { name: 'NAVI' } };

await myhud('set_event_name', { name: 'Spring Cup' });
await myhud('set_teams', { ...teams, boFormat: 'bo3' });

await myhud('veto_start', {
  ...teams,
  boFormat: 'bo3',
  mapPool: ['ancient', 'anubis', 'dust2', 'inferno', 'mirage', 'nuke', 'train'],
});
for (const map of ['nuke', 'ancient', 'mirage', 'inferno', 'anubis', 'dust2']) {
  await myhud('veto_select', { map });
}

const match = await myhud<{ seriesScore: { a: number; b: number } }>('set_map_result', {
  map: 1,
  scoreA: 13,
  scoreB: 9,
  finished: true,
});
console.log('Série :', match.seriesScore);