概覽
我們最近新推出的 Steam 好友與聊天用戶端,加強了豐富狀態系統的功能,能顯示更多關於進行中遊戲的資訊。 我們認為玩家的豐富狀態是一種讓該玩家的好友參與其活動的方式。 比方說,擁有同款遊戲的好友能藉此得知加入遊戲的適當時機,或是與玩家討論遊戲,而發起互動。而尚未擁有該遊戲的好友,在看到各種豐富狀態字串所提供的遊戲資訊後,可能會進而對這款他們不太了解的遊戲產生興趣。
本文將介紹兩種您可以定義的設定,以控制您的遊戲在玩家好友名單中的顯示方式:
- 豐富狀態字串 - 用來顯示玩家在遊戲中、好友可能想知道的狀態資訊
- 好友分組 - 用來將正在一起玩遊戲的好友分組
遊戲控制的豐富狀態字串
已推出的系統容許自訂,因此您的團隊可以根據玩家好友最感興趣的資訊,決定顯示哪些狀態。
有了加強版豐富狀態,您的遊戲就會擁有其特定的數據、可呈現正確的資訊。 然而,在開始之前,請您考慮下列幾點:
多人遊戲
依照多人遊戲類型的差異,有助玩家的好友決定何時加入遊戲的資訊也不盡相同。 有些遊戲採回合制,進度依剩餘的時間或玩家人數而定,因此顯示這類資訊是最有用的。 另外有些多人遊戲在達成目標時就結束,此時顯示達到目標的進度就很有用。 了解您的玩家採用何種遊戲模式或是正在哪張地圖上,對於幫助玩家的好友決定如何參與該玩家的遊戲有所助益。
單人遊戲
雖然玩家的好友無法加入單人遊戲,顯示與遊戲相關的資訊仍然可以吸引好友參與,例如觀看該玩家玩遊戲、討論策略,或是談論遊戲的精彩部分。 該玩家到達了哪個區域、章節、等級,或是目前在遊戲裡的動作等資訊也有助於達到這些目標。
*
請在
SetRichPresence 中設定
steam_display
的鍵與值,以定義在 Steam 好友名單與聊天中顯示的字串。 本文末將提供關於 API 呼叫的詳細資訊與範例。
會顯示的數據範例(如果適用)- 剩餘時間
- 經過時間
- 仍存活的玩家
- 地圖或區域名稱
- 玩家等級
- 玩家階位
- 遊戲分數
- 難度
- 遊戲模式類型
- 伺服器上的空位
- 正在進行的動作(組建牌組、調整陣容、在主選單等等)
備註:請留意豐富狀態字串只能占一行的長度,並會顯示於好友名單中玩家名稱的下方。 字串若過長,行末會被截斷或省略。
好友分組
新的好友名單,和額外的一行資訊,都會將正在一起玩遊戲的好友顯示為同一分類。 會有一條線,把在同一個隊伍、伺服器或比賽中的好友劃分到該遊戲類別。 分組的方式取決於您的遊戲以及哪些訊息顯示出來是最合理的。 比方說,《Dota 2》裡有許多最多有 5 位玩家的隊伍,所以我們會顯示正在一起遊戲的團隊,而不是由遊戲配對組成的 5 人完整隊伍。 不過,在《絕對武力》中,兩位好友可能在同一個伺服器上進行遊戲,但只有正玩遊戲、互為好友的玩家才會被分在同一個 Steam 玩家群組,不會將伺服器上的所有玩家顯示為一個隊伍。
*
請在
SetRichPresence 中設定
steam_player_group
和
steam_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"
}
}