Tài liệu Steamworks
Tích hợp trạng thái tăng cường

Tổng quan

Với việc phát hành ứng dụng bạn bè và trò chuyện Steam gần đây, chúng tôi đã cải thiện hệ thống tích hợp trạng thái (rich presence) để hiện thêm các trò chơi đang được chơi. Chúng tôi xem thông tin tích hợp trạng thái (rich presence) của người chơi là cách tạo tương tác giữa bạn bè người chơi theo các hoạt động của họ. Ví dụ như bạn bè sở hữu trò chơi tương tác qua việc biết khi nào nên tham gia chơi cùng hoặc thảo luận với người chơi, và những ai không sở hữu trò chơi có thể cảm thấy hứng thú khi nhìn vào những chuỗi tích hợp trạng thái giúp họ hiểu thêm về trò chơi mình không biết rõ.

Tích hợp trạng thái được hiện trong đa ngữ cảnh

Trong bài viết này, chúng tôi sẽ đề cập về hai thiết lập bạn có thể định nghĩa để kiểm soát cách trò chơi hiện trong danh sách bạn bè của người chơi:
  • Chuỗi tích hợp trạng thái – được dùng để hiển thị thông tin về trạng thái của người chơi trong trò chơi mà bạn bè có thể muốn biết
  • Nhóm bạn bè - dùng để nhóm các người bạn đang cùng nhau chơi một trò chơi

Chuỗi tích hợp trạng thái do trò chơi kiểm soát


Bạn bè chỉ cần xem qua là có thể thấy thêm thông tin về trò chơi
Hệ thống hiện tại cho phép tùy biến để đội của bạn có thể quyết định xem thông tin nào thu hút bạn bè của người chơi nhất.
Trò chơi của bạn sẽ có dữ liệu riêng để làm thông tin hiển thị phù hợp khi tích hợp trạng thái cải tiến. Tuy nhiên, để bắt đầu thì có vài điều cần cân nhắc:

Trò chơi nhiều người

Tùy vào đó là loại trò chơi nhiều người nào, có nhiều kiểu thông tin để giúp bạn bè của người chơi biết khi nào nên tham gia. Một số trò chơi đấu theo ván dựa theo thời gian, hay số người chơi còn lại, nên đó sẽ là thông tin quan trọng nhất để hiển thị. Các trò chơi nhiều người khác hoàn thành một khi đạt mục tiêu, nên việc hiển thị tiến độ đạt mục tiêu có thể hữu ích. Biết được người chơi đang trải nghiệm chế độ hay màn chơi nào cũng có thể hữu ích trong việc giúp bạn bè quyết định cách tương tác cùng người chơi đấy.

Trò chơi đơn

Dù bạn bè không thể tham gia vào trò chơi đơn, họ vẫn có thể gắn kết với nhau nếu thông tin hiển thị cho phép bạn bè xem, trò chuyện về chiến thuật, hay thảo luận điểm nhấn khi chơi. Thông tin về khu vực, chương, hay màn đang chơi, hay người chơi hiện đang làm gì trong trò chơi có thể giúp đạt được những mục tiêu này.

* Để xác định chuỗi cần hiển thị trong danh sách bạn bè Steam và trong trò chuyện, đặt key/value steam_display trong SetRichPresence. Xem thêm thông tin và ví dụ về lệnh gọi API ở cuối bài này.

Ví dụ về dữ liệu hiển thị nếu có
  • Thời gian còn lại
  • Thời gian đã qua
  • Số người chơi còn sống
  • Tên bản đồ hay khu vực
  • Cấp độ người chơi
  • Lớp nhân vật người chơi
  • Điểm số trận đấu
  • Độ khó
  • Loại chế độ chơi
  • Số ô trống trên máy chủ
  • Hành động đang thực hiện (xây dựng bộ bài, thay đổi đội hình, trên menu chính v.v.)
LƯU Ý: Nhớ rằng chuỗi tích hợp trạng thái này cần nằm gọn trong một dòng, và hiện dưới tên người chơi trong danh sách bạn bè. Nếu quá dài, cuối hàng sẽ bị cắt ngắn hoặc hiện dấu ba chấm.

Nhóm bạn bè


Cùng với dòng thông tin bổ sung, danh sách bạn bè mới có thể hiện nhóm bạn bè đang chơi cùng nhau. Bạn bè trong cùng một nhóm, máy chủ, hoặc trong trận cùng nhau sẽ được gộp chung dưới danh mục trò chơi cùng với một đường thẳng kết nối họ với nhau. Việc gộp nhóm được xác định tùy theo trò chơi của bạn sao cho hợp lý nhất. Ví dụ, trong Dota 2, nhóm có thể lên tới 5 người, vậy nên chúng tôi hiện nhóm chơi cùng nhau, chứ không phải toàn bộ đội 5 người được xếp trận bởi trò chơi. Tuy thế, trong Counter-Strike, hai người bạn có thể chơi cùng nhau trên một máy chủ, nhưng thay vì hiện toàn bộ máy chủ là như một nhóm, chỉ có bạn bè chung nào chơi với nhau mới được xếp vào cùng nhóm người chơi Steam.

Khi bạn bè chơi cùng nhau được gộp nhóm, người khác sẽ biết nếu còn chỗ trống để vào hay không

* Để định nghĩa chia nhóm người chơi trong danh sách bạn bè Steam và trò chuyện, đặt key/value steam_player_groupsteam_player_group_size trong SetRichPresence.

API Steam & bản địa hóa



Dưới đây là code ví dụ để cho thấy việc thiết lập đơn giản thế nào.

Đoạn code
/*--------------------------- MẪU -------------------*/ 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" ); // Ví dụ gộp bạn bè cùng nhau khi họ cùng chơi if ( nPartyMemberCount > 1 && strPartyID ) { // Nếu ta ở trong một nhóm có hơn một người dùng, và ta có PartyID hợp lệ thì // thông báo hệ thống tích hợp trạng thái của Steam. steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group", strPartyID ); steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group_size", CNumStr( nPartyMemberCount ) ); } else { // Còn không, xóa bất kỳ thông tin nào ta đã có trước đó; chúng ta không ở trong một nhóm. steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group", nullptr ); steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group_size", nullptr ); }

Code bên trên sử dụng bản địa hóa gồm các token tiếng Anh như sau:

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