Steamworks 文献库
增强版丰富状态

概览

最近发布了全新的 Steam 好友和聊天客户端后,丰富状态系统的能力得到了增强,可以显示更多正在玩的游戏的数据。 我们认为玩家的丰富状态是让该玩家的好友参与其活动的一个方法。 例如,拥有同一款游戏的好友可以知道加入游戏的适当时机,或者与该玩家交流游戏,而未拥有该游戏的好友可能会因为看到许多丰富状态字符串,对自己知之不多的游戏有了进一步了解,从而对该游戏产生兴趣。

丰富状态能在多种情况下显示

本文介绍了两个设置,您可以定义这两个设置,以控制您的游戏如何在玩家的好友列表中显示:
  • 丰富状态字符串:用于在您的游戏中显示好友也许想知道的玩家状态信息
  • 好友分组:用于将正在一起玩游戏的好友进行分组

由游戏控制的丰富状态字符串


好友能迅速了解游戏信息
已经推出的系统可以进行自定义,您的团队可以决定哪些信息是玩家的好友最感兴趣的。
您的游戏将有自己的特定数据,这些是增强版的丰富状态系统将显示的适当信息。 但是在开始前,您需要考虑以下几点:

多人游戏

视多人游戏类型而定,有助于玩家的好友知道何时应该加入其中的信息各不相同。 有些游戏根据时间或剩余玩家的数量按回合进行,因此显示此类信息是最有助益的。 其他多人游戏一旦达到某个目标后就会结束,因此显示目标完成进度最有帮助。 知道玩家采用哪种游戏模式或地图也非常有助于该玩家的好友决定如何参与到该玩家的游戏中。

单人游戏

虽然玩家的好友不能参与玩单人游戏,但是如果显示的信息使得好友观看该玩家玩游戏、与玩家交流游戏策略或谈论游戏高潮部分,那么好友参与还是能实现的。 显示玩家所在区域、章节或关卡,或玩家在游戏中正在进行的操作的信息可以有助于实现这些目标。

* 要定义在 Steam 好友列表和聊天中显示的字符串,请在 SetRichPresence 中设置 steam_display 键值。 更多 API 调用的信息和示例请参见本文文末。

可显示的数据示例(如适用)
  • 剩余时间
  • 已使用时间
  • 仍存活的玩家
  • 地图或区域名称
  • 玩家关卡
  • 玩家等级
  • 游戏分数
  • 难度
  • 游戏模式类型
  • 服务器可用空位
  • 正在进行的操作(构建牌组、阵容调整、位于主菜单,等等)
注意:请记住,丰富状态字符串必须在一行之内显示,并在好友列表里玩家名称下显示。 如果字符串过长,则行末会被截断或省略。

好友分组


新的好友列表可以和额外的信息行一起显示正在一起玩游戏的好友群组。 会有一条线将处于同一支队伍、同一个服务器或一起比赛的好友归到同一个游戏类别下。 分组方法视您的游戏及应该显示的最合理信息而定。 例如,Dota 2 中许多队伍已达 5 人,因此我们显示的是正在一起进行游戏的好友玩家,而不是通过游戏匹配比赛组成的 5 人完整队伍。 而在《反恐精英》中,2 个好友也许在同一个服务器上玩游戏,但只有正在一起玩这个游戏的共同好友才会归入同一个 Steam 玩家组,而不是整个服务器里的玩家。

一起玩的好友被分到一组时,其他人知道是否还能加入

* 要定义在 Steam 好友列表和聊天中的玩家分组,请在 SetRichPresence 中设置 steam_player_groupsteam_player_group_size 键值。

Steam API 和本地化



设置过程简单易行,参见以下代码:

代码片段
/*--------------------------- 样本 -------------------*/ 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" } }