Документація Steamworks
Ігрові сповіщення

Огляд

Ігрові сповіщення Steam — це система позамережевого повідомлення користувачів, що дозволяє асинхронні багатокористувацькі ігри, як-от шахи.

Мета цього API полягає в сповіщенні користувачів про необхідність певних дій під час ігрового сеансу. Наприклад, у шахах стан ігрового сеансу оновлюється після ходу кожного гравця. Steam надсилає сповіщення користувачам відповідно до стану ігрового сеансу, щоби повідомити їх про очікування їхнього ходу.

Обов’язки гри

Типова гра не в мережі управляє ігровим сеансом шляхом оновлення стану кожного гравця так, що він отримує сповіщення, коли від нього очікується дія. Після запуску гравцем гри й виконання ним необхідних дій, гра знову оновлює ігровий сеанс з урахуванням актуальних станів усіх гравців сеансу.

Що робить Steam

Steam надсилатиме сповіщення користувачам ігрового сеансу відповідно до інформації, наданої грою, а також налаштувань, які гравець обрав для цієї гри. У клієнті Steam чи веб-оглядачі користувачу буде показано сповіщення, що він має виконати певні дії в грі.

Вимоги

API ігрових сповіщень надається методами веб-API й потребує наявності дійсного ключа видавця. Виклики методів веб-API повинні йти від виділеного сервера, що знаходиться окремо від ігрового клієнта. Ключ видавця не можна надсилати з кодом з ігрового клієнта.

Автентифікація і сторонні акаунти

Для виклику API ігрових сповіщень вам спершу необхідно ідентифікувати користувача Steam, який увійшов у вашу гру. Це можна зробити двома способами: ігровий клієнт може згенерувати квиток сеансу автентифікації й передати його назад на ваш сервер, а веб-гра може перевірити користувача за допомогою OpenID. Інструкції наявні в розділі про автентифікацію. Важливо, щоби ви не передавали ідентифікацію користувача в повідомлення, що надсилаються безпосередньо з ігрового клієнта до вашого сервера, адже ці повідомлення можна підробити.
Для ігор зі сторонніми акаунтами використовуйте наведені вище інструкції, але кешуйте SteamID користувача у своїй системі.

API ігрових сповіщень

Технічний огляд

API ігрових сповіщень написаний і надається через веб-API та вимагає передачі 4 параметрів у кожному методі:
  • appid (ідентифікатор застосунку для вашої гри)
  • format (формат результату; рекомендуємо використовувати json)
  • input_json (для методу необхідне кодування всіх параметрів у json)
  • key (ключ видавця необхідно передавати з кожним викликом)
API поверне 200-й код стану HTTP у разі успіху, з подробицями в тілі повідомлення (якщо такі будуть).

Постійні значення

UserState

Текстове значення, визначене як одне з наступного:
  • waiting — користувач очікує інших гравців і не блокує жодних дій. Він не бачитиме жодних сповіщень, оскільки це він очікує дій інших.
  • ready — користувач готовий. Ігровий сеанс очікує на відповідь користувача. Користувач бачитиме сповіщення, доки цей стан не зміниться.
  • done — гра для цього користувача завершена. Користувач отримає сповіщення, що гра завершена, але від нього не очікується жодних дій.

Структури даних (JSON)

Усі структури даних представляються у форматі JSON.

Variable

{ "key": "key_name", // текстовий рядок "value": "value_of_key" // текстовий рядок }

LocalizedText

{ "token": "value", // рядок, що посилається на токен локалізації "variables": [ // Масив «Variable» (вище) ] }

UserStatus

{ "steamid": "76561197960265729", // uint64 "state": // Одна з постійних «UserState» (описано вище), "title": // Об’єкт «LocalizedText» (описано вище), "message": // Об’єкт «LocalizedText» (описано вище) }

Session

{ "sessionid": "1", // uint64 "title": // Об’єкт «LocalizedText» (вище), "time_created": "100000", // Unix-час (з 1 січня 1970). "time_updated": "200000", // Unix-час (з 1 січня 1970). // 64-бітне значення, надане розробником під час створення сеансу, що передається грі після запуску гри. // Дозволяє прив’язати об’єкт сесії до об’єкту на вашому сервері, внутрішньо не використовується в Steam. "context": "31415926", "user_status": [ // Масив об’єктів «UserStatus» (описано вище) ] }

RequestedSession

{ "sessionid": "1", // uint64 "include_all_user_messages": "0" // логічне значення }

Доступні загальні API

Дивіться IGameNotificationsService для повного списку.

Запуск окремих ігрових сеансів

Користувачі зможуть бачити всі свої активні ігрові сеанси у своєму профілі спільноти в Steam. Разом зі станом гри показується кнопка, яка запускає гру з конкретними параметрами запуску, що визначають ігровий сеанс. Коли гра запущена таким чином, їй надається параметр запуску "_sessionid". Ви можете отримати його за допомогою ISteamApps::GetLaunchQueryParam.
Наприклад, так:
const char *pchSessionID = ISteamApps()->GetLaunchQueryParam("_sessionid");
Гра, що підтримує запуск безпосередньо в гру, повинна викликати цей інтерфейс під час запуску, визначати, чи на місці _sessionid, чи є він дійсним для користувача сеансу, і тільки потім почати завантаження гри.

Локалізація

Локалізація надається розробником гри за допомогою інструмента локалізації, який є частиною конфігурації застосунку. Розробник відповідає за вказання перекладу кожного рядка для кожної мови в інструменті локалізації. Неперекладені на мову користувача рядки будуть виводитися англійською.
Ігрові сповіщення підтримують локалізацію для наступних властивостей:

Кожен LocalizedText складається із двох компонентів:
  • Token
  • Список змінних Variable

Токен — це ключ, що починається із символу «#» і представляє локалізований для різних мов рядок за допомогою інструмента локалізації в розділі конфігурації застосунку. Один токен може містити різні змінні, які будуть замінюватися під час виконання програми залежно від контексту в момент генерування тексту. Приклад:
#InvitationText = "{{user}} запрошує вас зіграти в шахи."

У цьому прикладі український переклад #InvitationText містить єдину змінну variable, яка називається user. Якщо вам потрібно буде показати це текстове повідомлення користувачу, коли «SteamUserName» запрошує його до гри, об’єкт LocalizationText потрібно оновити з наступними властивостями:
"message": { "token": "#InvitationText", "variables": [ { "key": "user", "value": "Michael" } ] }

Коли гравець переглядатиме свій статус, то побачить це повідомлення (своєю мовою): «Michael запрошує вас зіграти в шахи».
Токени локалізації вивантажуються в розділ асинхронної локалізації вкладки спільноти на сторінці налаштувань Steamworks для вашого застосунку.
Кожну мову можна вивантажити окремо у файлах VDF таким чином:
"lang" { "Language" "ukrainian" "Tokens" { "TheNameOfTheToken" "Локалізований текст токена" "TheNameOfAnotherToken" "Локалізований текст другого токена" } }

Також токени для всіх мов можна вивантажити в один файл таким чином:
"lang" { "english" { "Tokens" { "TheNameOfTheToken" "The localized text associated with the token" "TheNameOfAnotherToken" "The localized text associated with the second token" } } "ukrainian" { "Tokens" { "TheNameOfTheToken" "Локалізований текст токена" "TheNameOfAnotherToken" "Локалізований текст другого токена" } } }