เอกสาร Steamworks
การนำเสนอแบบ Rich Presence ขั้นสูง

ภาพรวม

ด้วยระบบเพื่อนบน Steam และไคลเอนต์แช็ตใหม่ที่มีการเผยแพร่ล่าสุด เราได้เพิ่มความสามารถของระบบการนำเสนอแบบ Rich Presence ของเรา เพื่อแสดงข้อมูลเพิ่มเติมเกี่ยวกับเกมที่กำลังมีการเล่นอยู่ เราเห็นว่าการนำเสนอแบบ Rich Presence ของผู้เล่นเป็นวิธีการในการเชิญชวนเพื่อนของผู้เล่นคนนั้นเข้าร่วมในกิจกรรมของตน ตัวอย่างเช่น เพื่อนที่เป็นเจ้าของเกมสามารถเข้าร่วมกิจกรรมได้หากทราบเวลาที่เหมาะสมในการเข้าร่วมเกม หรือหากได้พูดคุยกับผู้เล่นนั้น และผู้ที่ไม่ได้เป็นเจ้าของเกมอาจได้รับการกระตุ้นเร้าความสนใจจากข้อความการนำเสนอแบบ Rich Presence ต่าง ๆ ที่บอกเล่าเกี่ยวกับเกมที่พวกเขาไม่รู้จักมากได้

การนำเสนอแบบ Rich Presence จะแสดงอยู่ในหลากหลายบริบท

ในเอกสารประกอบการใช้งานนี้ เราจะครอบคลุมการตั้งค่าสองอย่างที่คุณสามารถกำหนด เพื่อควบคุมการปรากฏของเกมของคุณในรายชื่อเพื่อนของผู้เล่น:
  • สตริงการนำเสนอแบบ Rich Presence - ใช้สำหรับแสดงข้อมูลเกี่ยวกับสถานะผู้เล่นในเกมของคุณที่เพื่อนของพวกเขาอาจจะต้องการทราบ
  • การจัดกลุ่มเพื่อน - ใช้สำหรับจัดกลุ่มเพื่อนที่กำลังเล่นกันในเกมเข้าด้วยกัน

สตริงการนำเสนอแบบ Rich Presence ที่ควบคุมโดยเกม


เพื่อนสามารถเห็นข้อมูลเพิ่มเติมเกี่ยวกับเกมโดยคร่าว ๆ ได้
ระบบที่มีอยู่สามารถปรับแต่งเพื่อให้ทีมของคุณสามารถประเมินหาได้ว่าข้อมูลใดเป็นข้อมูลที่เพื่อนของผู้เล่นมีความสนใจมากที่สุด
เกมของคุณจะมีข้อมูลแบบเฉพาะของตัวเองซึ่งจะเป็นข้อมูลที่เหมาะสมที่จะแสดงด้วยการนำเสนอแบบ Rich Presence ขั้นสูง ในการเริ่มดำเนินการ ต่อไปนี้คือแนวคิดบางประการที่ควรพิจาณา:

เกมแบบผู้เล่นหลายคน

ข้อมูลที่ช่วยให้เพื่อนของผู้เล่นทราบเวลาที่จะเข้าร่วมอาจแตกต่างกันไป ทั้งนี้ขึ้นอยู่เกมแบบผู้เล่นหลายคนแต่ละประเภท บางเกมจะเล่นเป็นรอบ ๆ ที่มีการกำหนดตามเวลา หรือตามผู้เล่นที่เหลืออยู่ ดั้งนั้นข้อมูลดังกล่าวจึงเป็นประโยชน์มากที่สุดที่ควรจะแสดง เกมแบบผู้เล่นหลายคนอื่น ๆ จะเสร็จสิ้นเมื่อภารกิจสำเร็จลุล่วง และการแสดงความคืบหน้าตามเป้าหมายดังกล่าวจะมีประโยชน์ การรู้ว่าโหมดเกมหรือแผนที่ใดที่ผู้เล่นของคุณกำลังใช้งานอยู่ยังสามารถเป็นประโยชน์ในการช่วยให้เพื่อนของผู้เล่นสามารถตัดสินใจเกี่ยวกับวิธีการเข้าร่วมกับผู้เล่นได้

เกมแบบผู้เล่นคนเดียว

แม้ว่าเพื่อนของผู้เล่นไม่ได้เข้าร่วมเกมแบบผู้เล่นคนเดียว แต่การเข้าร่วมของเพื่อนยังสามารถเกิดขึ้นได้ หากข้อมูลที่แสดงทำให้เพื่อนเข้าชมการเล่นของผู้เล่น พูดคุยเกี่ยวกับกลยุทธ์ และสนทนาเกี่ยวกับไฮไลต์ในการเล่น ข้อมูลที่แสดงโซน บท หรือระดับของผู้เล่น หรือสิ่งที่ผู้เล่นกำลังดำเนินการอยู่ในเกม สามารถช่วยให้บรรลุเป้าหมายเหล่านี้ได้

* ในการกำหนดสตริงที่ต้องการให้แสดงในรายชื่อเพื่อน Steam และแช็ต ให้ตั้งค่าปุ่ม/ค่า steam_display ใน SetRichPresence ข้อมูลและตัวอย่างเพิ่มเติมเกี่ยวกับการเรียก API อยู่ที่ตอนท้ายของเอกสารฉบับนี้

ตัวอย่างของข้อมูลที่ต้องการแสดงหากเกี่ยวข้อง
  • เวลาคงเหลือ
  • เวลาที่ผ่านไป
  • ผู้เล่นที่ยังมีชีวิตอยู่
  • ชื่อแผนที่หรือโซน
  • ระดับผู้เล่น
  • คลาสผู้เล่น
  • คะแนนเกม
  • ความยาก
  • ประเภทโหมดเกม
  • ตำแหน่งที่เปิดบนเซิร์ฟเวอร์
  • การดำเนินการที่กระทำ (การสร้างเด็ค การเปลี่ยนบัญชีรายชื่อบนเมนูหลัก ฯลฯ)
หมายเหตุ: โปรดทราบว่าสตริงการนำเสนอแบบ Rich Presence จำเป็นจะต้องพอดีในหนึ่งบรรทัด และแสดงใต้ชื่อผู้เล่นในรายชื่อเพื่อน หากยาวเกินไป ตอนท้ายของบรรทัดจะถูกตัดทอนหรือละไว้

การจัดกลุ่มเพื่อน


รายชื่อเพื่อนใหม่จะสามารถแสดงกลุ่มเพื่อนที่กำลังเล่นเกมด้วยกัน พร้อมกับบรรทัดข้อมูลเพิ่มเติมได้ เพื่อนที่อยู่ในปาร์ตี้ เซิร์ฟเวอร์ หรือแมทช์ด้วยกันจะถูกจัดกลุ่มภายใต้หมวดหมู่เกมพร้อมกับเส้นที่เชื่อมต่อพวกเขาด้วยกัน แนวทางในการจัดกลุ่มจะขึ้นอยู่กับเกมของคุณและสิ่งที่เหมาะสมที่สุดที่ควรแสดง ตัวอย่างเช่น ใน Dota 2 มีปาร์ตี้ละไม่เกิน 5 คน ดังนั้นเราจะแสดงปาร์ตี้ที่กำลังเล่นด้วยกันไม่ใช่สมาชิกทีมทั้ง 5 ที่มีการค้นหาแมตช์โดยเกม ในเกม Counter-Strike แม้ว่าเพื่อน 2 คนอาจจะกำลังเล่นบนเซิร์ฟเวอร์ด้วยกัน แต่แทนที่จะแสดงทั้งเซิร์ฟเวอร์เป็นส่วนหนึ่งของปาร์ตี้ เฉพาะเพื่อนร่วมที่กำลังเล่นกันเท่านั้นที่จะถูกจัดไว้ในกลุ่มผู้เล่น Steam เดียวกัน

เมื่อทำการจัดกลุ่มเพื่อนที่เล่นด้วยกันแล้ว เพื่อนคนอื่นก็จะทราบว่ายังมีพื้นที่ที่พวกเขาสามารถเข้าร่วมได้หรือไม่

* ในการกำหนดการจัดกลุ่มผู้เล่นในรายชื่อเพื่อน Steam และแช็ต ให้ตั้งค่าปุ่ม/ค่า steam_player_group and steam_player_group_size
ใน SetRichPresence

Steam API & การแปลภาษา

  • ข้อมูลเกี่ยวกับการเรียก Steam API เพื่อตั้งค่าสตริงการนำเสนอแบบ Rich Presence ใหม่ของคุณ สามารถพบได้ในเอกสารประกอบการใช้งานที่นี่: https://partner.steamgames.com/doc/api/ISteamFriends#SetRichPresence

  • เนื่องจากตอนนี้การนำเสนอแบบ Rich Presence ขั้นสูงจะแสดงสตริงที่เกี่ยวข้องกับแต่ละเกม การแปลภาษามีความจำเป็นเพื่อให้ผู้เล่นที่กำลังดำเนินการในภาษาที่รองรับทั้งหมดสามารถดูข้อมูลนั้นได้ ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการตั้งค่าสามารถอ่านได้ที่นี่:
    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" } }