Skip to content

Réagir aux événements du jeu ​

MyHUD peut prévenir ton script quand quelque chose se passe dans le jeu : le match commence, un round se termine, la bombe est posée, la mi-temps arrive ou la map se termine. Ton script peut alors envoyer une commande, changer de scène OBS, poster un message, etc.

Les événements passent par la connexion WebSocket. HTTP ne peut pas les recevoir.

Événements disponibles ​

ÉvénementQuand
match_liveLe warmup se termine et le match commence.
round_endUn round se termine.
bomb_plantedLa bombe est posée.
half_timeLa mi-temps commence.
map_endLa map se termine.

Chaque événement contient le tableau des scores actuel :

json
{
  "type": "event",
  "name": "round_end",
  "data": {
    "map": "de_mirage",
    "round": 14,
    "scoreCT": 8,
    "scoreT": 6,
    "teamCT": "Vitality",
    "teamT": "NAVI",
    "winner": "CT"
  }
}

winner n'est présent que sur round_end et map_end. Il vaut CT, T, ou null en cas d'égalité.

MyHUD lit ces événements dans les données de jeu (GSI) de CS2. CS2 doit envoyer ses données à MyHUD, comme pour le HUD.

TIP

Si ton script se connecte en plein match, MyHUD n'envoie pas les événements déjà passés. Le premier événement arrive au prochain changement.

S'abonner aux événements ​

Les événements du jeu ne sont pas envoyés par défaut. Après la connexion, envoie un message subscribe :

json
{ "type": "subscribe", "channels": ["game"] }

MyHUD répond :

json
{ "type": "subscribed", "channels": ["game"] }

Tu peux aussi écouter d'autres canaux. Voir API WebSocket.

Exemple : afficher le récap à la fin d'une map ​

Ce script attend map_end, puis ouvre la scène de récap de map. Il envoie la commande sur la même connexion, avec un message trigger.

  • Python : installe d'abord le paquet websockets : pip install websockets.
  • TypeScript : WebSocket est intégré à Node.js 22 et plus. Aucun paquet à installer.
python
import asyncio
import json

import websockets

URL = "ws://127.0.0.1:44555"


async def main():
    # Se reconnecte après chaque déconnexion (MyHUD redémarré, réglages modifiés…).
    async for ws in websockets.connect(URL):
        try:
            await ws.send(json.dumps({"type": "subscribe", "channels": ["game"]}))

            async for raw in ws:
                msg = json.loads(raw)

                if msg["type"] == "event" and msg["name"] == "round_end":
                    d = msg["data"]
                    print(f"Round {d['round']} : {d['teamCT']} {d['scoreCT']} - {d['scoreT']} {d['teamT']}")

                elif msg["type"] == "event" and msg["name"] == "map_end":
                    print("Fin de map, affichage du récap")
                    await ws.send(json.dumps({
                        "type": "trigger",
                        "action": "show_sen_scene",
                        "payload": {"scene": "mapRecap"},
                        "correlationId": "recap",
                    }))

                elif msg["type"] == "ack" and not msg["ok"]:
                    print("Échec de la commande :", msg.get("code"), msg.get("error"))
        except websockets.ConnectionClosed:
            continue


asyncio.run(main())
ts
const URL_WS = 'ws://127.0.0.1:44555';

type Scoreboard = {
  map: string | null;
  round: number | null;
  scoreCT: number;
  scoreT: number;
  teamCT: string | null;
  teamT: string | null;
  winner?: 'CT' | 'T' | null;
};

function connect() {
  const ws = new WebSocket(URL_WS);

  ws.addEventListener('open', () => {
    ws.send(JSON.stringify({ type: 'subscribe', channels: ['game'] }));
  });

  ws.addEventListener('message', (e) => {
    const msg = JSON.parse(String(e.data));

    if (msg.type === 'event' && msg.name === 'round_end') {
      const d = msg.data as Scoreboard;
      console.log(`Round ${d.round} : ${d.teamCT} ${d.scoreCT} - ${d.scoreT} ${d.teamT}`);
    } else if (msg.type === 'event' && msg.name === 'map_end') {
      console.log('Fin de map, affichage du récap');
      ws.send(
        JSON.stringify({
          type: 'trigger',
          action: 'show_sen_scene',
          payload: { scene: 'mapRecap' },
          correlationId: 'recap',
        }),
      );
    } else if (msg.type === 'ack' && !msg.ok) {
      console.log('Échec de la commande :', msg.code, msg.error);
    }
  });

  // Se reconnecte après chaque déconnexion (MyHUD redémarré, réglages modifiés…).
  ws.addEventListener('close', () => setTimeout(connect, 3000));
}

connect();

Pour l'utiliser depuis un autre appareil, ajoute le jeton à l'URL : ws://192.168.1.20:44555/?token=<jeton>. Voir Piloter depuis un autre appareil.

Se reconnecter ​

MyHUD ferme toutes les connexions quand il redémarre, ou quand tu modifies les réglages d'automatisation. Ton script doit se reconnecter, puis renvoyer subscribe. Les exemples ci-dessus le font.