Fuentes de eventos

Cada fuente alimenta el mismo núcleo del servidor (crear → liquidar) detrás de una abstracción fixtures genérica. El núcleo nunca sabe si un evento vino de una API real o de su imaginación. Por defecto las cuotas son generadas por HZ-Bets (con precio de pool) — o, con la fuente opcional the-odds-api de abajo, importadas como lineas reales de casas de apuestas (cuotas fijas).


ESPN — todos los deportes, sin clave

Config.Sources.espn extrae el marcador público de ESPN para cada liga configurada: NBA, WNBA, MLB, NHL, NFL, UFC, y futbol mundial (Premier League, La Liga, Ligue 1, Bundesliga, Serie A, MLS, Brasil, México…). El futbol se convierte en un mercado 1/X/2; cualquier otro deporte en un Ganador a 2 vías.

Crea automáticamente los próximos partidos, transmite el marcador en vivo, y liquida automáticamente sobre el resultado real. Cada liga es una línea de configuración:

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
}

Las ligas fuera de temporada simplemente no devuelven nada; las que están en temporada llenan el tablero automáticamente.

Endpoint no oficial. El marcador de ESPN es público y sin clave pero no documentado — ESPN no ofrece ninguna garantía y podría cambiarlo. HZ-Bets se degrada con elegancia: una respuesta errónea / vacía / inesperada no hace nada (sigue sirviendo el último tablero conocido y nunca liquida sobre datos erróneos). Si ESPN cambiase su formato, las actualizaciones en vivo se pausan hasta una actualización del script — las apuestas nunca se corrompen. Es opt-in por diseño (Config.Sources.espn.Enabled).

Como liquida: el marcador es la fuente de verdad (la marca de ganador solo veta una discrepancia), y un evento solo liquida sobre un final limpio y jugado — nunca sobre un partido aplazado / abandonado.


the-odds-api — cuotas reales de casas de apuestas (opcional)

ESPN le da los partidos pero ninguna cuota — así que un tablero nuevo se abre con precios de pool simétricos hasta que los jugadores apuestan. Config.Sources.oddsapi en cambio llena los eventos con cuotas reales basadas en datos: las mismas lineas de mercado que muestran las grandes apps de apuestas, vía the-odds-api.com. Pone precio a los deportes que ESPN no puede cotizar, incluyendo NRL y AFL, además de futbol, NBA, NFL, MLB, NHL y MMA. Estos eventos usan cuotas fijas (una línea de consenso promediada entre casas de apuestas) y se liquidan sobre el marcador final real.

Clave del lado del servidor — nunca expuesta a un cliente. Consiga una clave gratuita en the-odds-api.com y configurela en su server.cfg (nunca se incluye dentro del recurso y nunca se envía a la NUI):

set hz_bets_oddsapi_key "your_key_here"

Luego active los deportes que quiera (claves de 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)
}

Riesgo de la banca. Las cuotas reales son cuotas fijas — la banca asume el riesgo como una casa de apuestas real (un ganador muy apostado obliga a pagar). Se mantiene acotado por Config.Bet.MaxPayoutPerSelection y Config.Odds.MaxDecimal. Si quiere que la banca nunca pierda, mantenga ese deporte en el modelo de pool.
Cupo del plan gratuito. El plan gratuito de the-odds-api es de 500 peticiones / mes. HZ-Bets es frugal por defecto — una región, cuotas sondeadas cada ~3 h, y marcadores sondeados solo mientras un partido esta pendiente — lo que se ajusta cómodamente a un solo deporte. Más deportes o una actualización más rápida requieren un plan de pago. El cupo restante se registra en cada sondeo (active Config.Debug).
No lo duplique. Si pone precio a un deporte con the-odds-api, quitelo de Config.Sources.espn (y viceversa), o ambas fuentes crearan los mismos partidos dos veces. Todo lo que viene después — liquidación, libro mayor, pagos — es idéntico a cualquier otra fuente.

OpenLigaDB — futbol, ODbL

Config.Sources.openligadb es un feed de futbol sin clave, sin autenticación y abierto (https://api.openligadb.de). Liste las ligas como shortcut o shortcut/season (wm26/2026 para la Copa del Mundo, bl1/2025, dfb…). Crea automáticamente los mercados configurados con escudos de equipo reales, liquida automáticamente sobre el marcador final, y pública los máximos goleadores de la liga ("Top des Buteurs").

Atribución (ODbL). Cuando OpenLigaDB está activado la interfaz muestra un crédito "Données de match : OpenLigaDB · ODbL 1.0". Consérvelo — lo exige la Open Database License.

Los partidos en juego se sondean con una cadencia más rápida para marcadores en vivo y liquidación rápida.


RP — eventos creados por el administrador

La fuente RP no tiene dependencia externa: usted crea eventos a mano desde la pantalla de administración en el juego — carreras, combates, partidos ficticios, lo que sea — para cualquier deporte, con sus propios resultados y cuotas. Así es también como se crea un mercado de goleador apostable (Buteur) (el administrador elige quien marco). Consulte Mercados y cuotas.


Degradación con elegancia

Todo el trabajo de API es unicamente del lado del servidor y se almacena en cache; el cliente nunca llama a una API. Una fuente que devuelve basura o se cae nunca puede bloquear el recurso, crear un evento mal formado, ni liquidar mal una apuesta — simplemente deja de actualizarse hasta que se recupera. Los eventos ya creados permanecen visibles (último tablero conocido) todo el tiempo.