Fontes de eventos

Cada fonte alimenta o mesmo nucleo do servidor (criar -> liquidar) por tras de uma abstracao fixtures generica. O nucleo nunca sabe se um evento veio de uma API real ou da sua imaginacao — por padrao, as odds sao geradas pelo HZ-Bets (precificadas por pool) — ou, com a fonte opcional the-odds-api abaixo, importadas como linhas reais de casas de apostas (odds fixas).


ESPN — todos os esportes, sem chave

Config.Sources.espn puxa o placar publico da ESPN para cada liga configurada: NBA, WNBA, MLB, NHL, NFL, UFC e futebol mundial (Premier League, La Liga, Ligue 1, Bundesliga, Serie A, MLS, Brasil, Mexico...). O futebol se torna um mercado 1/X/2; todo outro esporte um Vencedor de 2 vias.

Ele cria automaticamente as proximas partidas, transmite o placar ao vivo e liquida automaticamente no resultado real. Cada liga e uma linha de configuracao:

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
}

Ligas fora de temporada simplesmente nao retornam nada; as que estao em temporada preenchem o painel automaticamente.

Endpoint nao oficial. O placar da ESPN e publico e sem chave, mas nao documentado — a ESPN nao da garantia e pode altera-lo. O HZ-Bets degrada de forma elegante: uma resposta ruim / vazia / inesperada nao faz nada (ele continua servindo o ultimo painel conhecido e nunca liquida com dados ruins). Se a ESPN algum dia mudar seu formato, as atualizacoes ao vivo pausam ate uma atualizacao do script — as apostas nunca sao corrompidas. E opcional por design (Config.Sources.espn.Enabled).

Como ele liquida: o placar e a fonte da verdade (a flag de vencedor apenas veta um desacordo), e um evento so liquida em um final limpo e jogado — nunca em um jogo adiado / abandonado.


the-odds-api — odds reais de casas de apostas (opcional)

A ESPN te da as partidas, mas sem odds — entao um painel novo abre com precos de pool simetricos ate os jogadores apostarem. Em vez disso, Config.Sources.oddsapi preenche os eventos com odds reais, orientadas por dados: as mesmas linhas de mercado que os grandes apps de apostas mostram, via the-odds-api.com. Ela precifica os esportes que a ESPN nao consegue, incluindo NRL e AFL, alem de futebol, NBA, NFL, MLB, NHL e MMA. Esses eventos usam odds fixas (uma linha de consenso, a media entre as casas de apostas) e liquidam no placar final real.

Chave no lado do servidor — nunca exposta a um cliente. Pegue uma chave gratuita em the-odds-api.com e defina-a no seu server.cfg (ela nunca e entregue dentro do recurso e nunca enviada a NUI):

set hz_bets_oddsapi_key "your_key_here"

Depois ative os esportes que quiser (chaves em 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)
}

Risco da banca. Odds reais sao odds fixas — a banca carrega o risco como uma casa de apostas de verdade (um vencedor muito apostado gera pagamento). Ela permanece limitada por Config.Bet.MaxPayoutPerSelection e Config.Odds.MaxDecimal. Se voce quer que a banca nunca perca, mantenha esse esporte no modelo de pool.
Cota do plano gratuito. O plano gratuito da the-odds-api e de 500 requisicoes / mes. O HZ-Bets e economico por padrao — uma regiao, odds consultadas a cada ~3 h e placares consultados apenas enquanto um jogo esta pendente — o que cabe confortavelmente em um unico esporte. Mais esportes ou atualizacoes mais rapidas exigem um plano pago. A cota restante e registrada em cada consulta (ative Config.Debug).
Nao duplique. Se voce precifica um esporte com a the-odds-api, remova-o de Config.Sources.espn (e vice-versa), ou as duas fontes vao criar as mesmas partidas duas vezes. Tudo a jusante — liquidacao, ledger, pagamentos — e identico a qualquer outra fonte.

OpenLigaDB — futebol, ODbL

Config.Sources.openligadb e um feed de futebol sem chave, sem autenticacao e aberto (https://api.openligadb.de). Liste as ligas como shortcut ou shortcut/season (wm26/2026 para a Copa do Mundo, bl1/2025, dfb...). Ele cria automaticamente os mercados configurados com escudos reais das equipes, liquida automaticamente no placar final e publica os artilheiros da liga ("Top des Buteurs").

Atribuicao (ODbL). Quando a OpenLigaDB esta ativada a UI exibe um credito "Données de match : OpenLigaDB · ODbL 1.0". Mantenha-o — e exigido pela Open Database License.

As partidas em andamento sao consultadas em uma cadencia mais rapida para placares ao vivo e liquidacao rapida.


RP — eventos criados pelo admin

A fonte RP nao tem dependencia externa: voce cria eventos manualmente pela tela de administracao no jogo — corridas, lutas, partidas ficticias, qualquer coisa — para qualquer esporte, com seus proprios resultados e odds. E tambem assim que voce cria um mercado de artilheiro apostavel (Buteur) (o admin escolhe quem marcou). Veja Mercados e odds.


Degradacao elegante

Todo o trabalho de API e apenas no servidor e armazenado em cache; o cliente nunca chama uma API. Uma fonte que retorna lixo ou cai nunca pode travar o recurso, criar um evento malformado ou liquidar uma aposta incorretamente — ela simplesmente para de atualizar ate se recuperar. Eventos ja criados permanecem visiveis (ultimo painel conhecido) o tempo todo.