Счёт и результат
Промежуточный счёт и финальный результат имеют разные сообщения.
Счёт
score.update передаёт score, shots, hits и time_left_ms. Используйте целые числа; hits не должно превышать shots. Определите shots как количество принятых событий удара, а hits — успешных попаданий в игровую цель. Система не регистрирует выстрелы мимо физического полотна.
Итог
session.complete содержит status и result со score, shots, hits, duration_ms, player_count. Число игроков должно совпадать с текущим сеансом. В HTML5 repeated complete возвращает false и не создаёт повторного сообщения. Ошибка валидации не расходует защиту завершения.
Гарантии
Успешный вызов означает передачу сообщения в WebSocket, не подтверждённую долговременную запись. В протоколе нет отдельного result ACK или операции безопасного повтора после переподключения. Не изобретайте дополнительные поля рейтинга, которые Launcher или Cloud якобы обязательно сохранят; расширения требуют изменения и проверки общего контракта.
Пример кода
Фрагмент интеграции: переменные игрового проекта задаются приложением. Полный запускаемый пример — в Playground.
await sdk.updateScore({score: 50, shots: 7, hits: 5, time_left_ms: 10000});
await sdk.complete({score: 80, shots: 10, hits: 8, duration_ms: 45000});