ai-streetraces para desenvolvedores
O ai-streetraces não tem exports. Seu alerta da polícia, motivos de registro e eventos privados.
O ai-streetraces não tem exports nem state bags. As corridas vivem só na memória do servidor, e dinheiro, alertas e o item do menu passam pelo AI Core.
Alerta da polícia
Quando a contagem regressiva de uma corrida começa, ela pode enviar um alerta (conforme a Alert chance do painel) pelo dispatch.alert da lib: o título "Street race", a mensagem "(count) vehicles lining up for an illegal race", na linha de largada, com o primeiro corredor como source, ícone flag-checkered. Ele chega a qualquer script de alerta que estiver rodando.
Dinheiro
Todo o dinheiro se move na Money account do painel com estes motivos de registro:
| Motivo | Quando |
|---|---|
streetrace:<raceId> | Um valor de entrada é cobrado ao criar ou entrar. |
streetrace:refund | Um valor de entrada é devolvido (saiu antes da largada, cancelada, poucos corredores, recurso parado). |
streetrace:won | O vencedor leva o prêmio. |
streetrace:split | O tempo limite acabou; cada corredor ainda na corrida recebe uma parte. |
Abrindo o menu a partir de outro script
O servidor abre o menu de corrida com o evento de cliente ai-streetraces:client:openMenu (o que o /race faz). Use-o para colocar o menu no app do seu próprio celular ou no seu ponto de interação.
Lado: Servidor -> cliente · Argumentos: nenhum
// servidor
emitNet("ai-streetraces:client:openMenu", source);O menu mostra só o que o jogador pode fazer agora (criar até o destino, aceitar um convite, largar, cancelar, sair ou desistir), e cada escolha é verificada no servidor, então abri-lo para qualquer um é seguro.
Eventos e callbacks privados
O contrato próprio do script (resource/common/race.ts). O servidor verifica o veículo, a distância, o dinheiro e o estado da corrida a cada chamada. Eles podem mudar entre versões: não os dispare nem os escute a partir de outros recursos.
| Nome | Direção | O que carrega |
|---|---|---|
ai-streetraces:create | callback do cliente | (buyIn, finishX, finishY): cria uma corrida da posição do jogador até a chegada. |
ai-streetraces:join | callback do cliente | (raceId): entra em uma corrida para a qual o jogador foi convidado (paga o valor de entrada). |
ai-streetraces:leave | callback do cliente | (): sai da corrida; o anfitrião saindo antes da largada a cancela. |
ai-streetraces:begin | callback do cliente | (): o anfitrião encerra o tempo de entrada agora. |
ai-streetraces:finish | callback do cliente | (): o corredor chegou ao destino. |
ai-streetraces:client:state | servidor -> corredor | (race, serverNow): um snapshot da corrida em que o jogador está. |
ai-streetraces:client:racer | servidor -> corredores | (racer, pot): um corredor entrou. |
ai-streetraces:client:racerLeft | servidor -> corredores | (racerId, pot): um corredor saiu. |
ai-streetraces:client:start | servidor -> corredores | (startAt, serverNow): a contagem regressiva roda; GO em startAt (relógio do servidor). |
ai-streetraces:client:ended | servidor -> corredor | (): a corrida acabou para este jogador. |
ai-streetraces:client:invite | servidor -> jogadores perto de uma nova corrida | (invite, serverNow). |
ai-streetraces:client:uninvite | servidor -> jogadores convidados | (raceId): a corrida não aceita mais corredores. |