Acciones validadas

Acciones validadas

Partidas verificadas en el servidor para clasificaciones y moneda del juego, sin escribir código de servidor. Los tickets de un solo uso por partida, las reglas que solo existen en el servidor, los registros de entrada de las mejores partidas y la moderación limitan lo que un tramposo puede ganar. Solo en la nube, no en el simpleServer autoalojado.

Comenzar gratis

Tickets de un solo uso por partida

Cada partida empieza con un ticket del servidor vinculado al jugador, a la clasificación y a una semilla del servidor. Un ticket cuenta exactamente una vez y una partida rechazada también lo consume, así que nadie puede tantear tus límites con un solo ticket.

Reglas solo en el servidor

Los límites de puntuación, la duración mínima, la puntuación por segundo, las reglas por fase y los límites de moneda por partida viven en el servidor. Nunca aparecen en las respuestas de la app ni en los mensajes de error, y la moneda solo la escribe el servidor.

Registros de entrada y moderación

Para las mejores partidas y las partidas marcadas, el servidor pide al juego su registro de entrada. Puedes reproducir tú mismo una partida sospechosa con su semilla y su registro y decidir qué hacer con ella.

Integracion rapida

Integracion rapida

Configurar Acciones validadas
Vídeo próximamente

Activa los envíos validados en una clasificación y define tus reglas de servidor en Acciones validadas. Después sigue las partidas comprobadas y revisa las pruebas de las mejores partidas en el panel.

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
Preguntas frecuentes

Preguntas frecuentes

Listo para integrar?

Empiece a construir con horizOn hoy. Nivel gratuito incluido.