Документация Steamworks
Дополненные расширенные статусы

Введение

С недавним выходом обновлённого клиента с функциями чата и «Друзья в Steam» мы увеличили возможности системы расширенных статусов, чтобы отображать больше информации о запущенных играх. Расширенный статус пользователя рассматривается как способ вовлечь его друзей в то, чем он занимается. Например, друзья, владеющие игрой, будут вовлечены, поскольку они знают, когда присоединиться к игре, или могут обсудить это с пользователем. А те, кто не владеет игрой, заинтересуются ей, увидев разнообразие строк расширенного статуса, рассказывающих об игре, о которой они мало что знают.

Расширенный статус отображается в нескольких контекстах

В этом разделе мы расскажем о двух настройках, которые вы можете задать, чтобы управлять тем, как игра отображается в списке друзей игрока:
  • Строка расширенных статусов: используется для отображения состояния пользователя в игре, которое может быть интересно его друзьям.
  • Группирование друзей: используется для объединения в группу друзей, которые играют вместе.

Строка расширенных статусов, управляемая игрой


Друзья видят больше информации об играх при беглом осмотре
Действующую систему можно изменить в соответствии с тем, какую информацию вы считаете самой интересной для показа друзьям игрока.
У вашей игры будут присущие ей данные, которые будут нужны для показа с дополненным расширенным статусом. Но для начала вам необходимо помнить следующее:

Многопользовательские игры

В зависимости от типа многопользовательской игры информация, помогающая друзьям распознать, когда присоединиться, может различаться. Некоторые игры содержат раунды, ограниченные по времени или числу оставшихся игроков, поэтому эту информацию важнее всего отобразить. Другие многопользовательские игры заканчиваются, когда достигается нужная цель, поэтому информация о продвижении к ней может быть полезна. Информация о режиме или карте, которую использует игрок, также может пригодиться его друзьям, чтобы принять решение о том, как поучаствовать в игре.

Однопользовательские игры

В однопользовательской игре друзья не могут присоединиться к игроку, однако их можно привлечь, если отображаемая информация побуждает их к просмотру игры, обсуждению стратегии или лучших её моментов. Информация о зоне, главе, уровне игрока или его текущей активности может помочь в достижении этих целей.

* Чтобы указать строку для отображения в списке друзей и чате Steam, задайте пару ключ-значение steam_display в SetRichPresence. Дополнительная информация и примеры вызовов API приводятся в конце этого раздела.

Примеры данных для отображения
  • Оставшееся время
  • Прошедшее время
  • Игроки ещё живы
  • Карта или название зоны
  • Уровень игрока
  • Класс игрока
  • Счёт в игре
  • Сложность
  • Тип режима игры
  • Открытые места на сервере
  • Предпринимаемое действие (сбор колоды, изменение списка, главное меню и пр.)
Обратите внимание: помните, что строка расширенного статуса должна умещаться на одной строке и отображается под именем игрока в списке друзей. Если она превышает длину, весь её контент отображаться не будет.

Группирование друзей


Наряду с дополнительной информацией новый список друзей отображает группы друзей, играющих вместе. Друзья, которые играют вместе в одной команде, на одном сервере или матче будут сгруппированы под категорией игры на объединяющей их строке. Принцип группирования будет зависеть от игры и от того, что необходимо отобразить. Например, в Dota 2 команды имеют состав до 5 человек, поэтому будет отображаться лишь команда в целом, а не полный состав, образовавшийся в результате подбора игры. А в Counter-Strike 2 друга будут играть на одном сервере, но вместо показа сервера в составе команды, лишь друзья, играющие вместе, будут помещены в совместную группу игроков Steam.

Когда играющие вместе друзья объединены в группу, другие пользователи знают, будет ли возможность к ним присоединиться

* Чтобы определить настройки группы игроков в списке друзей и чате Steam, задайте пару ключ-значение для steam_player_group и steam_player_group_size в SetRichPresence.

Steam API и локализация

  • Информацию о вызовах Steam API для того, чтобы задать строки расширенных статусов, можно найти здесь: https://partner.steamgames.com/doc/api/ISteamFriends#SetRichPresence

  • Поскольку теперь дополненные расширенные статусы могут отображать строки, относящиеся к играм, локализация необходима, чтобы игроки, запустившие Steam на любом из поддерживаемых иностранных языков, смогли понимать отображаемую информацию. Дополнительную информацию об этих настройках можно найти здесь:
    https://partner.steamgames.com/doc/api/ISteamFriends#richpresencelocalization

  • Подключив данные соответствующим образом, запустите игру и убедитесь, что вошли в Steam в браузере, чтобы протестировать функцию и увидеть, что будет отображаться:
    https://steamcommunity.com/dev/testrichpresence


Ниже представлен пример кода, чтобы продемонстрировать простоту настройки.

Фрагмент кода
/*--------------------------- SAMPLE -------------------*/ const char *pchStatus; if ( bWinning && cWinners > 1 ) { pchStatus = "Tied"; } else if ( bWinning ) { pchStatus = "Winning"; } else { pchStatus = "Losing"; } SteamFriends()->SetRichPresence( "gamestatus", pchStatus ); bool bDisplayScoreInRichPresence = true; if ( bDisplayScoreInRichPresence ) { char rgchBuffer[32]; sprintf_safe( rgchBuffer, "%2u", uMyScore ); SteamFriends()->SetRichPresence( "score", rgchBuffer ); } SteamFriends()->SetRichPresence( "steam_display", bDisplayScoreInRichPresence ? "#StatusWithScore" : "#StatusWithoutScore" ); // Пример группирования друзей, играющих вместе if ( nPartyMemberCount > 1 && strPartyID ) { // Если имеется больше одного игрока и действительный PartyID, тогда // информация передаётся системе расширенных статусов Steam. steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group", strPartyID ); steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group_size", CNumStr( nPartyMemberCount ) ); } else { // В ином случае очистите всю предыдущую информацию, так как мы больше не в группе. steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group", nullptr ); steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group_size", nullptr ); }

Код выше использует локализацию со строками на английском языке наподобие следующего:

"lang" { "language" "english" "tokens" { "#StatusWithoutScore" "{#Status_%gamestatus%}" "#StatusWithScore" "{#Status_%gamestatus%}: %SCORE%" "#Status_AtMainMenu" "At the main menu" "#Status_WaitingForMatch" "Waiting for match" "#Status_Winning" "Winning" "#Status_Losing" "Losing" "#Status_Tied" "Tied" } }