Steamworks 文獻庫
加強版豐富狀態

概覽

我們最近新推出的 Steam 好友與聊天用戶端,加強了豐富狀態系統的功能,能顯示更多關於進行中遊戲的資訊。 我們認為玩家的豐富狀態是一種讓該玩家的好友參與其活動的方式。 比方說,擁有同款遊戲的好友能藉此得知加入遊戲的適當時機,或是與玩家討論遊戲,而發起互動。而尚未擁有該遊戲的好友,在看到各種豐富狀態字串所提供的遊戲資訊後,可能會進而對這款他們不太了解的遊戲產生興趣。

豐富狀態在多種情況下顯示

本文將介紹兩種您可以定義的設定,以控制您的遊戲在玩家好友名單中的顯示方式:
  • 豐富狀態字串 - 用來顯示玩家在遊戲中、好友可能想知道的狀態資訊
  • 好友分組 - 用來將正在一起玩遊戲的好友分組

遊戲控制的豐富狀態字串


好友們能一覽遊戲的相關詳細資訊
已推出的系統容許自訂,因此您的團隊可以根據玩家好友最感興趣的資訊,決定顯示哪些狀態。
有了加強版豐富狀態,您的遊戲就會擁有其特定的數據、可呈現正確的資訊。 然而,在開始之前,請您考慮下列幾點:

多人遊戲

依照多人遊戲類型的差異,有助玩家的好友決定何時加入遊戲的資訊也不盡相同。 有些遊戲採回合制,進度依剩餘的時間或玩家人數而定,因此顯示這類資訊是最有用的。 另外有些多人遊戲在達成目標時就結束,此時顯示達到目標的進度就很有用。 了解您的玩家採用何種遊戲模式或是正在哪張地圖上,對於幫助玩家的好友決定如何參與該玩家的遊戲有所助益。

單人遊戲

雖然玩家的好友無法加入單人遊戲,顯示與遊戲相關的資訊仍然可以吸引好友參與,例如觀看該玩家玩遊戲、討論策略,或是談論遊戲的精彩部分。 該玩家到達了哪個區域、章節、等級,或是目前在遊戲裡的動作等資訊也有助於達到這些目標。

* 請在 SetRichPresence 中設定 steam_display 的鍵與值,以定義在 Steam 好友名單與聊天中顯示的字串。 本文末將提供關於 API 呼叫的詳細資訊與範例。

會顯示的數據範例(如果適用)
  • 剩餘時間
  • 經過時間
  • 仍存活的玩家
  • 地圖或區域名稱
  • 玩家等級
  • 玩家階位
  • 遊戲分數
  • 難度
  • 遊戲模式類型
  • 伺服器上的空位
  • 正在進行的動作(組建牌組、調整陣容、在主選單等等)
備註:請留意豐富狀態字串只能占一行的長度,並會顯示於好友名單中玩家名稱的下方。 字串若過長,行末會被截斷或省略。

好友分組


新的好友名單,和額外的一行資訊,都會將正在一起玩遊戲的好友顯示為同一分類。 會有一條線,把在同一個隊伍、伺服器或比賽中的好友劃分到該遊戲類別。 分組的方式取決於您的遊戲以及哪些訊息顯示出來是最合理的。 比方說,《Dota 2》裡有許多最多有 5 位玩家的隊伍,所以我們會顯示正在一起遊戲的團隊,而不是由遊戲配對組成的 5 人完整隊伍。 不過,在《絕對武力》中,兩位好友可能在同一個伺服器上進行遊戲,但只有正玩遊戲、互為好友的玩家才會被分在同一個 Steam 玩家群組,不會將伺服器上的所有玩家顯示為一個隊伍。

當一起玩遊戲的好友被分成一組時,其他人會知道是否有加入的空間

* 請在 SetRichPresence 中設定 steam_player_groupsteam_player_group_size 的鍵和值,來定義在 Steam 好友名單與聊天中的玩家分組。

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" } }