Sources d'événements

Chaque source alimente le même coeur serveur (créer → régler) derrière une abstraction générique fixtures. Le coeur ne sait jamais si un événement provient d'une vraie API ou de votre imagination — par défaut, les cotes sont générées par HZ-Bets (au parimutuel) — ou, avec la source optionnelle the-odds-api ci-dessous, importées comme de vraies lignes de bookmaker (cotes fixes).


ESPN — tous sports, sans clé

Config.Sources.espn récupère le scoreboard public d'ESPN pour chaque championnat configure : NBA, WNBA, MLB, NHL, NFL, UFC, et le football mondial (Premier League, La Liga, Ligue 1, Bundesliga, Série À, MLS, Bresil, Mexique…). Le football devient un marche 1/X/2 ; tout autre sport un Vainqueur à 2 issues.

Il crée automatiquement les matchs à venir, diffuse le score en direct, et règle automatiquement sur le vrai résultat. Chaque championnat est une ligne de config :

Leagues = {
    { sport = 'basketball', league = 'nba' },
    { sport = 'baseball',   league = 'mlb' },
    { sport = 'hockey',     league = 'nhl' },
    { sport = 'football',   league = 'nfl' },     -- American football
    { sport = 'mma',        league = 'ufc' },     -- per-fight on a card
    { sport = 'soccer',     league = 'eng.1' },   -- Premier League
    -- … add / remove freely
}

Les championnats hors saison ne renvoient simplement rien ; ceux en saison remplissent le tableau automatiquement.

Endpoint non officiel. Le scoreboard d'ESPN est public et sans clé mais non documenté — ESPN ne donne aucune garantie et pourrait le changer. HZ-Bets se dégrade gracieusement : une réponse mauvaise / vide / inattendue ne fait rien (il continue de servir le dernier tableau connu et ne règle jamais sur de mauvaises données). Si ESPN change un jour son format, les mises à jour en direct se mettent en pause jusqu'a une mise à jour du script — les paris ne sont jamais corrompus. C'est opt-in par conception (Config.Sources.espn.Enabled).

Comment il règle : le score est la source de vérité (le drapeau du vainqueur ne sert qu'a opposer un veto à un désaccord), et un événement ne se règle que sur un final propre et joue — jamais sur un match reporte / abandonne.


the-odds-api — vraies cotes de bookmaker (optionnel)

ESPN vous donne les matchs mais aucune cote — un nouveau tableau s'ouvre donc a des cotes parimutuelles symétriques jusqu'a ce que les joueurs parient. Config.Sources.oddsapi remplit plutôt les événements avec de vraies cotes pilotées par les données : les mêmes lignes de marche qu'affichent les grandes applis de paris, via the-odds-api.com. Elle cote les sports qu'ESPN ne peut pas coter, dont le NRL et l'AFL, plus le football, le NBA, le NFL, le MLB, le NHL et le MMA. Ces événements utilisent des cotes fixes (une ligne de consensus moyennee sur l'ensemble des bookmakers) et se règlent sur le vrai score final.

Clé côté serveur — jamais exposée à un client. Récupérez une clé gratuite sur the-odds-api.com et definissez-la dans votre server.cfg (elle n'est jamais livrée à l'intérieur de la ressource ni envoyée à la NUI) :

set hz_bets_oddsapi_key "your_key_here"

Activez ensuite les sports voulus (clés depuis the-odds-api.com/sports) :

oddsapi = {
    Enabled = true,
    Regions = 'au',                  -- 1 region = 1 quota credit; 'au' for Aussie books
    Sports  = { 'rugbyleague_nrl' }, -- e.g. add 'aussierules_afl', 'soccer_epl', 'basketball_nba'
    PollIntervalMin = 180,           -- odds refresh (pre-match lines barely move)
}

Risque pour la maison. Les vraies cotes sont des cotes fixes — la maison porte le risque comme un vrai bookmaker (un gagnant très mise entraine un gros paiement). Cela reste borne par Config.Bet.MaxPayoutPerSelection et Config.Odds.MaxDecimal. Si vous voulez que la maison ne perde jamais, gardez plutôt ce sport sur le modèle parimutuel.
Quota de l'offre gratuite. L'offre gratuite de the-odds-api est de 500 requêtes / mois. HZ-Bets est économe par défaut — une seule région, cotes sondées toutes les ~3 h, et scores sondes uniquement tant qu'un match est en attente — ce qui convient largement à un seul sport. Plus de sports ou un rafraîchissement plus rapide nécessitent une offre payante. Le quota restant est journalise à chaque sondage (activez Config.Debug).
Ne faites pas doublon. Si vous cotez un sport avec the-odds-api, retirez-le de Config.Sources.espn (et vice-versa), sinon les deux sources créeront deux fois les mêmes matchs. Tout ce qui suit en aval — règlement, grand livre, gains — est identique à n'importe quelle autre source.

OpenLigaDB — football, ODbL

Config.Sources.openligadb est un flux de football sans clé, sans auth, ouvert (https://api.openligadb.de). Listez les championnats sous forme shortcut ou shortcut/season (wm26/2026 pour la Coupe du Monde, bl1/2025, dfb…). Il crée automatiquement les marches configures avec de vrais blasons d'équipes, règle automatiquement sur le score final, et publie les meilleurs buteurs du championnat ("Top des Buteurs").

Attribution (ODbL). Quand OpenLigaDB est activé, l'interface affiche un crédit "Données de match : OpenLigaDB · ODbL 1.0". Conservez-le — il est requis par l'Open Database License.

Les matchs en cours sont sondes à une cadence plus rapide pour les scores en direct et un règlement rapide.


RP — événements créés par l'admin

La source RP n'a aucune dépendance externe : vous créez les événements à la main depuis l'écran admin en jeu — courses, combats, matchs fictifs, n'importe quoi — pour n'importe quel sport, avec vos propres issues et cotes. C'est aussi ainsi que vous créez un marche buteur (Buteur) pariable (l'admin choisit qui a marque). Voir Marches et cotes.


Degradation gracieuse

Tout le travail API est côté serveur uniquement et mis en cache ; le client n'appelle jamais une API. Une source qui renvoie n'importe quoi ou qui tombe ne peut jamais faire planter la ressource, créer un événement malforme, ou mal régler un pari — elle cesse simplement de se mettre à jour jusqu'a ce qu'elle se rétablisse. Les événements déjà créés restent visibles (dernier tableau connu) pendant tout ce temps.