Azioni convalidate

Azioni convalidate

Partite verificate dal server per classifiche e valuta di gioco, senza scrivere codice server. Ticket monouso per partita, regole che esistono solo sul server, log degli input delle partite migliori e moderazione limitano ciò che un imbroglione può ottenere. Solo nel cloud, non nel simpleServer self-hosted.

Inizia gratis

Ticket monouso per partita

Ogni partita inizia con un ticket del server legato al giocatore, alla classifica e a un seed del server. Un ticket vale esattamente una volta e anche una partita rifiutata lo consuma, così nessuno può sondare i tuoi limiti con un solo ticket.

Regole solo sul server

Limiti di punteggio, durata minima, punteggio al secondo, regole per livello e limiti di valuta per partita risiedono sul server. Non compaiono mai nelle risposte dell'app né nei messaggi di errore, e la valuta la scrive solo il server.

Log degli input e moderazione

Per le partite migliori e per quelle segnalate il server chiede al gioco il suo log degli input. Puoi rigiocare tu stesso una partita sospetta con il suo seed e il suo log e decidere cosa farne.

Integrazione rapida

Integrazione rapida

Configurare le Azioni convalidate
Video in arrivo

Attiva gli invii convalidati per una classifica e definisci le regole del server in Azioni convalidate. Poi segui le partite verificate e controlla le prove delle partite migliori nella dashboard.

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
Domande frequenti

Domande frequenti

Pronto per l'integrazione?

Inizi a costruire con horizOn oggi stesso. Tier gratuito incluso.