Ações validadas

Ações validadas

Partidas verificadas no servidor para rankings e moeda do jogo, sem escrever código de servidor. Tickets de uso único por partida, regras que existem apenas no servidor, registros de entrada das melhores partidas e moderação limitam o que um trapaceiro pode ganhar. Apenas na nuvem, não no simpleServer auto-hospedado.

Comecar gratis

Tickets de uso único por partida

Cada partida começa com um ticket do servidor vinculado ao jogador, ao ranking e a uma seed do servidor. Um ticket conta exatamente uma vez e uma partida rejeitada também o consome, então ninguém consegue sondar seus limites com um único ticket.

Regras apenas no servidor

Limites de pontuação, duração mínima, pontuação por segundo, regras por fase e limites de moeda por partida ficam no servidor. Eles nunca aparecem nas respostas do app nem nas mensagens de erro, e a moeda só é gravada pelo servidor.

Registros de entrada e moderação

Para as melhores partidas e as partidas sinalizadas, o servidor pede ao jogo o seu registro de entrada. Você pode reproduzir uma partida suspeita com a seed e o registro e decidir o que fazer com ela.

Integracao rapida

Integracao rapida

Configurar Ações validadas
Vídeo em breve

Ative os envios validados em um ranking e defina suas regras de servidor em Ações validadas. Depois acompanhe as partidas verificadas e revise as provas das melhores partidas no painel.

C#
// Unity C#: Validated Actions
// Dashboard: turn on "Validated submissions only" for the leaderboard "weekly"
var va = ValidatedActionsManager.Instance;

// Round start: single-use ticket plus server seed
var run = await va.StartRun("weekly");
if (run == null) { Debug.Log(va.LastErrorCode); return; } // e.g. RUN_RATE_LIMITED
var random = new System.Random(run.seed);

// ... play, record the inputs into inputLog (byte[]) ...

// Round end: score plus input log (the SDK sends its SHA-256 hash)
var result = await va.SubmitValidated(18250, inputLog);
if (result == null)
{
    Debug.Log($"{va.LastErrorCode}, run kept: {va.HasActiveRun}"); // e.g. DURATION_TOO_SHORT
}
REST
# REST API: Validated Actions (needs the player's session token)

# Start a run: returns runId, a single-use ticket, seed and expiresAt
curl -X POST https://eu.horizon.pm/api/v1/app/validated-actions/runs \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Authorization: Bearer SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"userId":"USER_ID","leaderboardKey":"weekly"}'

# Submit the run: score plus the SHA-256 hex of the input log
curl -X POST https://eu.horizon.pm/api/v1/app/validated-actions/submit \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Authorization: Bearer SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"userId":"USER_ID","ticket":"TICKET","leaderboardKey":"weekly","score":18250,"inputLogHash":"SHA256_HEX"}'

# Rejected runs answer 422 with a code, e.g. TICKET_EXPIRED or DURATION_TOO_SHORT
Perguntas frequentes

Perguntas frequentes

Pronto para integrar?

Comece a construir com o horizOn hoje. Tier gratuito incluido.