ภาพรวม
ระบบสถิติและรางวัลความสำเร็จของ Steam จะมอบวิธีการง่าย ๆ เพื่อให้เกมของคุณสามารถให้บริการการติดตามรางวัลความสำเร็จและสถิติที่บันทึกไว้ถาวรและใช้งานข้ามอุปกรณ์ได้สำหรับผู้ใช้ของคุณ โดยข้อมูลผู้ใช้จะเชื่อมโยงกับบัญชี Steam ของผู้ใช้เอง รวมทั้งสามารถจัดรูปแบบและแสดงผลรางวัลความสำเร็จและสถิติของผู้ใช้แต่ละรายในโปรไฟล์ชุมชน Steam ของผู้ใช้ได้
เอาไว้ใช้ประโยชน์อะไรได้บ้าง
นอกจากจะมอบรางวัลอันเลอค่าให้แก่ผู้เล่นเกมของคุณแล้วนั้น รางวัลความสำเร็จยังมีประโยชน์ในการกระตุ้นและสนับสนุนการเล่นเป็นทีมและการปฏิสัมพันธ์ระหว่างผู้เล่น ทำให้เป้าหมายของเกมมีมิติที่หลากหลายขึ้น และให้รางวัลผู้ใช้ผู้ทุ่มเทเวลาของตนเองให้กับการใช้เวลาเล่นเกม
ส่วนสถิตินั้นจะทำหน้าที่ติดตามข้อมูลที่มีรายละเอียดสูงต่าง ๆ เช่น เวลาเล่น จำนวนของพาวเวอร์อัปที่ใช้ และอื่น ๆ ซึ่งคุณยังสามารถเลือกได้ว่าใช้งานเพียงแค่ติดตามข้อมูลในเกมก็ได้ เช่น มอบรางวัลความสำเร็จโดยพิจารณาจากสถิติการเล่นเกมหลายเซสชันที่เก็บมาจากผู้ใช้ผ่านเครื่องคอมพิวเตอร์หลากหลายเครื่อง เป็นต้น
ภาพรวมการใช้งาน
นิยามสถิติและรางวัลความสำเร็จสำหรับเกมของคุณ
รางวัลความสำเร็จนั้นจะใช้งานได้เฉพาะกับแอปพลิเคชันของตัวเอง และสามารถตั้งค่าได้ที่หน้าผู้ดูแลแอปของเว็บไซต์พันธมิตร Steamworks
คุณสามารถจัดเก็บข้อมูลสถิติได้ 3 ประเภทด้วยกัน ได้แก่:
- INT - จำนวนเต็ม 32 บิต (แบบมีเครื่องหมายบวกลบ) (เช่น จำนวนของเกมที่เล่นไป)
- FLOAT - จำนวนแบบมีทศนิยม 32 บิต (เช่น จำนวนกิโลเมตรที่ได้ขับรถไป)
- AVGRATE - ค่าเฉลี่ยเคลื่อนที่ กรุณาอ่าน: ข้อมูลสถิติประเภท AVGRATE
เว็บไซต์พันธมิตร Steamworks จะเตรียมอินเตอร์เฟสสำหรับนิยามรายละเอียด พร้อมอัปเดตสถิติและรางวัลความสำเร็จของเกมของคุณ ซึ่งในการใช้งานนั้น คุณจะสามารถ:
- นิยามรายละเอียดของสถิติและรางวัลความสำเร็จเบื้องต้น
- เพิ่มสถิติและรางวัลความสำเร็จเพิ่มเติม
- อัปเดตชื่อ คำอธิบาย และไอคอนของรางวัลความสำเร็จ
- อัปเดตพารามิเตอร์และข้อจำกัดทางสถิติ (ค่าสูงสุด/ต่ำสุด ความกว้างค่าเฉลี่ยเคลื่อนที่ ฯลฯ)
สถิติจะประกอบไปด้วยคุณสมบัติดังต่อไปนี้:
- ID - ไอดีตัวเลขที่สร้างให้แก่สถิติแต่ละค่าโดยอัตโนมัติ
- Type - ประเภทข้อมูลของสถิติตัวนี้ - INT, FLOAT หรือ AVGRATE
- API Name - สตริงที่ใช้เพื่อการเข้าถึงสถิตินี้โดยใช้ API
- Set By - ตั้งค่าว่าจะให้ใครสามารถแก้ไขสถิติตัวนี้ได้ ซึ่งค่าเริ่มต้นคือ ไคลเอนต์ สำหรับข้อมูลเพิ่มเติม กรุณาอ่าน [doclink = #game_server_stats]
[/doclink]
Increment Only - หากใช้งาน สถิติตัวนี้จะมีค่าเพิ่มขึ้นได้อย่างเดียวเมื่อเวลาผ่านไป
Max Change - หากใช้งาน จะกำหนดขีดจำกัดการเปลี่ยนแปลงค่าสถิติสูงสุดที่เกิดขึ้นได้จากการเรียก SetStat ครั้งหนึ่งจนถึงการเรียก SetStat ครั้งต่อไป
Min Value - หากใช้งาน จะเป็นการกำหนดค่าตัวเลขต่ำสุดที่สถิติตัวนี้รองรับได้ ซึ่งค่าเริ่มต้นจะเป็นค่าต่ำสุดของประเภทข้อมูลตัวเลขที่ใช้ (INT_MIN หรือ -FLT_MAX)
Max Value - หากใช้งาน จะเป็นการกำหนดค่าตัวเลขสูงสุดที่สถิติตัวนี้รองรับได้ ซึ่งค่าเริ่มต้นจะเป็นค่าสูงสุดของประเภทข้อมูลตัวเลขที่ใช้ (INT_MIN หรือ -FLT_MAX)
Default Value - หากใช้งาน จะมีการกำหนดค่าเริ่มต้นให้กับสถิติตัวนี้แก่ผู้ใช้คนใหม่ หากไม่ใช้งาน ค่าเริ่มต้นจะมีค่าเป็น 0
Aggregated - หากใช้งาน Steam จะเก็บค่าผลรวมโดยรวมของสถิติตัวนี้ สำหรับข้อมูลเพิ่มเติม กรุณาดูที่หัวข้อค่าสถิติโดยรวมด้านล่าง
Display Name - ชื่อของสถิติตัวนี้ เวลาแสดงผลในชุมชน Steam สามารถแปลให้เป็นภาษาอื่น ๆ ได้[/list]
AVGRATE ค่าสถิติจะมีค่าคุณสมบัติเพิ่มเติมดังต่อไปนี้:
- Window - ขนาดของ "ช่วงข้อมูล" ที่จะใช้ในการหาค่าเฉลี่ยข้อมูลของคุณ
ค่าสถิติ
AVGRATE จะเป็นค่าที่เฉลี่ยโดยอัตโนมัติด้วย Steam กรุณาอ่าน [doclink = #AVGRATE] AVGRATE[/doclink] ในส่วนด้านล่างเพื่อรับข้อมูลเพิ่มเติม
รางวัลความสำเร็จจะประกอบไปด้วยค่าคุณสมบัติต่อไปนี้:
- ID - ไอดีตัวเลขที่สร้างให้แก่รางวัลความสำเร็จแต่ละค่าโดยอัตโนมัติ
- API Name - สตริงที่ใช้เพื่อการเข้าถึงรางวัลความสำเร็จนี้โดยใช้ API
- Progress Stat- กำหนดค่าสถิติที่จะใช้เป็นแถบความคืบหน้าของรางวัลความสำเร็จนี้ในชุมชน ซึ่งถ้าค่าสถิติมีค่าถึงจุดที่ปลดล็อคได้ รางวัลความสำเร็จก็จะปลดล็อคโดยอัตโนมัติ
- Display Name - ชื่อที่กำหนดให้รางวัลความสำเร็จตัวนี้ ในการแจ้งเตือนแบบป็อปอัปของไคลเอนต์และในชุมชน สามารถแปลให้เป็นภาษาอื่น ๆ ได้
- Description - คำอธิบายของรางวัลความสำเร็จตัวนี้ เอาไว้แสดงผลในชุมชน สามารถแปลให้เป็นภาษาอื่น ๆ ได้
- Set By - ตั้งค่าว่าจะให้ใครสามารถปลดล็อครางวัลความสำเร็จตัวนี้ได้ ซึ่งค่าเริ่มต้นคือ ไคลเอนต์ สำหรับข้อมูลเพิ่มเติมดู [doclink = #game_server_stats]
[/doclink]
Hidden - หากมีค่าเป็น true จะไม่เผยรางวัลความสำเร็จที่ "ซ่อน" ออกมาให้เห็นในหน้าชุมชนของผู้ใช้ (เด็ดขาด) จนกว่าผู้ใช้ท่านนั้นจะได้รางวัลความสำเร็จตัวนี้
Achieved Icon - ไอคอนที่เอาไว้แสดงผลเวลาที่ได้รับรางวัลความสำเร็จแล้ว
Unachieved Icon - ไอคอนที่เอาไว้แสดงผลเวลาที่ยังไม่ได้รับรางวัลความสำเร็จ[/list]
รายละเอียดดังต่อไปนี้คือรายการของรางวัลความสำเร็จจาก
แอปพลิเคชันตัวอย่างของ Steamworks API (SpaceWar):

วิธีการใช้งาน
การเข้าถึงสถิติและรางวัลความสำเร็จจากในเกมของคุณ:
ข้อมูลสถิติประเภท AVGRATE
ข้อมูลสถิติประเภทนี้จะให้ฟังก์ชันการใช้งานที่เป็นเอกลักษณ์และมีประโยชน์ แต่จะต้องอธิบายรายละเอียดมากขึ้น
ให้ลองนึกถึงกรณีที่คุณต้องการจะติดตามค่าสถิติเฉลี่ย เช่น "คะแนนที่ทำได้ต่อชั่วโมง" วิธีการอย่างหนึ่งก็คือ ให้มีตัวแปรสถิติสองค่า ได้แก่ "TotalPoints" ประเภท INT และ "TotalPlayTimeHours" ประเภท FLOAT แล้วจากนั้นให้นำคะแนนมาหารด้วยเวลา เพื่อคำนวณคะแนนต่อชั่วโมง
ข้อเสียของการทำเช่นนี้ก็คือ ถ้าผู้เล่นได้สะสมเวลาเล่นมานานพอสมควร ค่าเฉลี่ยที่คำนวณได้จะเปลี่ยนแปลงไปช้ามาก ๆ ซึ่งตามความเป็นจริงแล้ว ยิ่งผู้ใช้เล่นเกมนาน ค่าเฉลี่ยก็จะยิ่งไม่เปลี่ยนแปลง หากผู้ใช้ใช้เวลาเล่นเกมไป 100 ชั่วโมง ค่าเฉลี่ยที่คำนวณได้จะ "ล้าหลัง" ไปประมาณ 50 ชั่วโมง หากว่าผู้ใช้มีความสามารถเพิ่มขึ้น พวกเขาก็จะไม่เห็นค่า \คะแนนต่อชั่วโมง\ ที่ตนเองคาดหวังไว้
ข้อมูลสถิติประเภท AVGRATE จะทำให้คุณสามารถเลือกใช้ "ช่วงข้อมูล" กับค่าเฉลี่ยได้ เช่น คุณจะสามารถพิจารณาเฉพาะชั่วโมงการเล่นเกมที่ผ่านมาก่อนหน้าไม่กี่ชั่วโมง เพื่อให้ค่าสถิติสะท้อนระดับความสามารถในปัจจุบันของผู้เล่นออกมาได้อย่างแม่นยำ
มาลองตั้งค่าการใช้งานสถิติ AVGRATE เพื่อใช้งาน "คะแนนต่อชั่วโมง" เฉพาะการเล่นเกม 20 ชั่วโมงที่ผ่านมากันดีกว่า ในการใช้งาน คุณจะต้อง
- โปรดทราบว่า เนื่องจากค่าเฉลี่ยจะเป็นค่าเฉลี่ย "ต่อชั่วโมง" หน่วยของเวลาที่ใช้กับพารามิเตอร์เวลาทั้งหมดที่เกี่ยวข้องกับค่าสถิติตัวนี้ก็จะต้องอยู่ในหน่วย "ชั่วโมง" ซึ่งรวมถึงคุณสมบัติความกว้างเส้นค่าเฉลี่ยด้วย และนอกจากนั้นยังใช้งานกับพารามิเตอร์ "dSessionLength" ที่ถูกส่งไปที่
UpdateAvgRateStat
ด้านล่าง
- สร้างสถิติ AVGRATE ที่มีชื่อว่า "AvgPointsPerHour" และความกว้างเส้นค่าเฉลี่ย 20.0 (กรุณาอย่าลืมว่าค่านี้มีหน่วยเป็น "ชั่วโมง")
- เมื่อถึงจุดที่จำเป็นต้องใช้งานในเกมของคุณแล้ว ให้เรียก ISteamUserStats::UpdateAvgRateStat พร้อมด้วยพารามิเตอร์ดังต่อไปนี้:
- pchName - "AvgPointsPerHour"
- flCountThisSession - จำนวนคะแนนที่ผู้เล่นได้รับหลังจากการเรียกไปยัง UpdateAvgRateStat ครั้งล่าสุด
- dSessionLength - ระยะเวลาเล่นเกมหลังจากการเรียก UpdateAvgRateStat ครั้งล่าสุด โดยหน่วยจะต้องเป็นหน่วยเดียวกันกับที่ใช้ในคุณสมบัติความกว้างเส้นค่าเฉลี่ยของสถิติ ในกรณีนี้ คือ "ชั่วโมง"
- ตัวอย่างเช่น หากผู้เล่นได้ 77 คะแนนในรอบล่าสุด ซึ่งรอบดังกล่าวใช้เวลา 0.225 ชั่วโมง (13.5 นาที) นั่นก็คือ
SteamUserStats()->UpdateAvgRateStat( "AvgPointsPerHour", 77, 0.225 )
จากตัวอย่างข้างต้นนี้ Steam จะนำค่าเฉลี่ยของรอบปัจจุบัน 342.2 คะแนนต่อชั่วโมง (77 หารด้วย 0.225) มารวมกับค่าที่แล้ว ผลลัพธ์ที่ได้จะสะท้อนถึงค่าเฉลี่ยรวมจากการเล่นเกม 20 ชั่วโมงล่าสุดของผู้เล่นท่านนั้น และหากว่านี่เป็นครั้งแรกที่มีการอัปเดตค่าสถิติให้แก่ผู้ใช้ปัจจุบันท่านนี้ ค่าปัจจุบันก็จะมีค่าเป็น 342.2
ในตัวอย่างนี้จะใช้ "ชั่วโมง" เป็นหน่วยของเวลา แต่คุณสามารถใช้หน่วยของเวลาอะไรก็ได้ตามที่คุณต้องการ เพียงแค่ขอให้พึงระลึกเอาไว้ว่าคุณจะต้องใช้หน่วยของเวลาดังกล่าวให้สอดคล้องกันเป็นหน่วยฐานของ "dSessionLength" รวมถึงความกว้างเส้นค่าเฉลี่ยด้วยเช่นกัน
การรับสถิติของผู้ใช้ท่านอื่น
คุณสามารถใช้
ISteamUserStats::RequestUserStats เพื่อเรียกรับค่าสถิติของผู้ใช้ท่านอื่นได้ จากนั้นคุณก็จะสามารถใช้
ISteamUserStats::GetUserStat,
ISteamUserStats::GetUserAchievement, และ
ISteamUserStats::GetUserAchievementAndUnlockTime เพื่อรับข้อมูลของผู้ใช้ท่านนั้นได้ ข้อมูลตัวนี้จะไม่ได้รับการอัปเดตโดยอัตโนมัติ เพราะว่าผู้ใช้ท่านอื่นจะเป็นผู้อัปโหลดค่าสถิติใหม่ เพราะฉะนั้น ให้คุณเรียก
ISteamUserStats::RequestUserStats อีกครั้งหนึ่งเพื่อรีเฟรชข้อมูล
เพื่อป้องกันไม่ให้ใช้หน่วยความจำมากเกินไป จะมีการควบคุมแคชที่ใช้งานน้อยที่สุด (LRU) และอันโหลดสถิติของผู้ใช้อื่นเป็นครั้งคราว เมื่อเกิดเหตุการณ์เช่นนี้ขึ้น จะมีการส่งคอลแบ็ก
ISteamUserStats::UserStatsUnloaded_t โดยอัตโนมัติ เมื่อส่งคอลแบ็กนี้แล้ว สถิติของผู้ใช้ที่ได้ระบุไว้จะไม่สามารถใช้งานได้จนกว่าจะเรียก
ISteamUserStats::RequestUserStats อีกครั้ง
โหมดออฟไลน์
Steam จะเก็บแคชภายในเครื่องของข้อมูลสถิติและรางวัลความสำเร็จเอาไว้ เพื่อให้สามารถใช้ API ได้อย่างปกติในโหมดออฟไลน์ ค่าสถิติใดก็ตามที่ไม่สามารถคอมมิตได้นั้นก็จะถูกจัดเก็บเอาไว้ใช้งานในครั้งต่อไปที่ผู้ใช้ออนไลน์ ในกรณีที่มีการดัดแปลงบางสิ่งบางอย่างกับเครื่องใช้งานมากกว่าหนึ่งเครื่อง Steam จะทำการควบรวมรางวัลความสำเร็จโดยอัตโนมัติและจะเลือกชุดสถิติที่มีความคืบหน้ามากกว่า เพราะว่า Steam มีการเก็บแคชภายในเครื่องของข้อมูลสถิติ ตัวเกมจึงไม่จำเป็นที่จะต้องจัดเก็บแคชภายในเครื่องของข้อมูลเอาไว้ในดิสก์ นอกจากนั้น แคชดังกล่าวมักจะมีความขัดแย้ง และเวลาที่เกิดความขัดแย้งเหล่านั้น ผู้ใช้ก็จะรู้สึกเหมือนกับว่าความคืบหน้าของตัวเองนั้นถูกย้อนกลับ ซึ่งจะทำให้เกิดความสับสนได้
สถิติเซิร์ฟเวอร์เกม
ISteamGameServerStats เป็น API ของเซิร์ฟเวอร์เกมที่ดำเนินการขนานไปกับ
ISteamUserStats ซึ่งสามารถนำมาใช้เพื่อรับสถิติให้แก่ผู้ใช้ในวิธีการทางเดียวกันกับที่ไคลเอนต์สามารถทำได้ (ตามที่ได้อธิบายไว้ข้างต้น) นอกจากนั้นยังจะสามารถตั้งค่าสถิติและมอบรางวัลความสำเร็จได้ด้วย แต่กระนั้นก็ทำได้ก็ต่อเมื่อ "Set by" ได้รับการตั้งค่าให้เป็น GS (เซิร์ฟเวอร์เกม) หรือ Official GS (เซิร์ฟเวอร์เกมอย่างเป็นทางการ) ความแตกต่างระหว่างเซิร์ฟเวอร์เกมและเซิร์ฟเวอร์เกมอย่างเป็นทางการนั้นก็คือว่า เซิร์ฟเวอร์เกมอย่างเป็นทางการจะเป็นเซิร์ฟเวอร์ที่คุณเป็นผู้โฮสต์และเป็นผู้ควบคุม การใช้เซิร์ฟเวอร์เกมอย่างเป็นทางการเพื่อตั้งค่าสถิตินั้น จะทำให้ใช้ระบบป้องกันการโกงที่มีประสิทธิภาพสูงขึ้นได้ เพราะว่าผู้ใช้จะสามารถดัดแปลงเซิร์ฟเวอร์เกมของตัวเอง หรือแม้กระทั่งปลอมแปลงตัวเองเป็นเซิร์ฟเวอร์เกมได้ ในการตั้งเซิร์ฟเวอร์เกมอย่างเป็นทางการนั้น ให้ใส่ช่วง IP ของเซิร์ฟเวอร์
ที่นี่สถิติและรางวัลความสำเร็จที่สามารถตั้งค่าได้ด้วยเซิร์ฟเวอร์เกม จะไม่สามารถตั้งค่าด้วยไคลเอนต์ได้ เซิร์ฟเวอร์เกมจะสามารถตั้งค่าสถิติและรางวัลความสำเร็จให้แก่ผู้ใช้ผู้ที่กำลังเล่นอยู่ในเซิร์ฟเวอร์เท่านั้น หากผู้เล่นออกจากเซิร์ฟเวอร์ ก็จะมีช่วงเวลาพักรอเล็กน้อยก่อนที่จะเขียนค่าสถิติสุดท้ายลงไป และหลังจากนั้นก็จะปฏิเสธไม่รับการอัปโหลดใหม่ การทำงานลักษณะนี้มีไว้เพื่อรับรองความสอดคล้องกันของข้อมูล และเป็นการหลีกเลี่ยงไม่ให้เซิร์ฟเวอร์เกมที่มีความประสงค์ร้ายมาลักลอบตั้งค่าสถิติของคนอื่นไม่ว่าจะเมื่อใดก็ตาม และเมื่อพิจารณาข้อจำกัดนี้แล้ว จึงจำเป็นต้องตั้งค่าสถิติโดยอย่ารอให้จบรอบ ให้ตั้งค่าสถิติเหล่านั้นอย่างต่อเนื่องตลอดเวลา เพื่อให้คุณสามารถจัดเก็บค่าสถิติเหล่านั้นได้เมื่อผู้ใช้ได้เลิกเล่น
ไคลเอนต์จะได้รับการอัปเดตโดยอัตโนมัติเมื่อเซิร์ฟเวอร์เกมเปลี่ยนแปลงค่าสถิติต่าง ๆ อย่างไรก็ตาม สถิติที่เซิร์ฟเวอร์ได้โหลดไว้ให้กับผู้ใช้ท่านอื่น ๆ นั้น จะไม่สามารถรีเฟรชโดยอัตโนมัติและสามารถหมดอายุได้ เหมือนกับไคลเอนต์
การรีเซ็ตสถิติ
ในระหว่างการพัฒนาเกม การล้างค่าสถิติและรางวัลความสำเร็จกับบัญชีบางบัญชีหรือทุกบัญชีนั้นเกิดขึ้นได้บ่อยครั้ง และเป็นสิ่งที่เหมาะกับการทดสอบเกม หากต้องการล้างค่าสถิติของบัญชี ให้เรียก
ISteamUserStats::ResetAllStats ด้วย
bAchievementsToo
ที่ได้ถูกตั้งให้เป็นค่า
true เพื่อล้างรางวัลความสำเร็จด้วยเช่นกัน เมื่อเรียกแล้ว กรุณาอย่าลืมที่จะวนซ้ำค่าสถิติและรางวัลความสำเร็จอีกครั้ง แล้วรีเซ็ตสถานะเกมที่อยู่ในหน่วยความจำของคุณ อย่างไรก็ตามคุณจะไม่สามารถล้างค่าสถิติและรางวัลความสำเร็จโดยรวมให้กับผู้ใช้ทุกคนได้ เหตุผลก็คือ แม้ว่าคุณจะได้ล้างทุกอย่างโดยรวมออกไปแล้วก็ตาม เกมที่กำลังดำเนินการอยู่อาจจะไม่สังเกตเห็นการล้างนั้น และได้เขียนค่ากลับลงไปหน่วยความจำ แต่โชคดีที่การสร้างระบบล้างข้อมูลโดยรวมลงไปในเกมของคุณนั้นเป็นสิ่งที่ทำได้ง่าย โดยคุณจะต้อง:
- นิยามค่าสถิติด้วยชื่อ เช่น "เวอร์ชัน"
- ฮาร์ดโค้ดหมายเลขรหัสเวอร์ชันของสถิติลงไปในเกม
- เมื่อโหลดสถิติขึ้นมาแล้ว ให้เทียบ "เวอร์ชัน" ของสถิติกับหมายเลขเวอร์ชันของคุณที่ได้ฮาร์ดโค้ดลงไป
- หากหมายเลขทั้งสองไม่ตรงกัน ให้เรียก ISteamUserStats::ResetAllStats แล้วจากนั้นให้ตั้งค่า "เวอร์ชัน" ของสถิติให้ตรงกับหมายเลขเวอร์ชันที่ได้ฮาร์ดโค้ดไว้
ด้วยวิธีนี้ เมื่อใดก็ตามที่คุณต้องการจะล้างข้อมูลโดยรวม คุณก็เพียงแค่เปลี่ยนหมายเลขเวอร์ชันสถิติที่ได้ฮาร์ดโค้ดลงไปเท่านั้น แล้วจากนั้นการล้างข้อมูลโดยรวมก็จะเกิดขึ้นเวลาที่ผู้ใช้ได้รับบิลด์ใหม่
ความตรงกันของสถิติ
แนวทางที่สมควรกระทำก็คือ ให้คำนึงเอาไว้เสมอว่าสถิติที่เกี่ยวข้องกันนั้นจะเกิดความไม่ตรงกันได้อย่างไร ยกตัวอย่างเช่น คุณอาจจะมีค่าสถิติอยู่ 3 ค่า ซึ่งก็คือ "GamesWon", "GamesLost", และ "GamesPlayed" ถึงแม้ว่าจะได้พยายามอย่างเต็มที่แล้วก็ตาม ค่าสถิติเหล่านี้ก็จะเกิดความไม่ตรงกันได้อยู่ดี ซึ่งกรณีนี้อาจจะทำให้จำนวนเกมที่ชนะและจำนวนเกมที่แพ้บวกกันแล้วไม่เท่ากับจำนวนเกมทั้งหมดที่ได้เล่นไป และหากแก้ปัญหานี้ด้วยการลบค่าสถิติ "GamesLost" ออก แทนที่จะคำนวณค่าสถิติดังกล่าวด้วย "GamesPlayed" - "GamesWon" ข้อมูลที่ไม่สอดคล้องกันก็อาจทำให้ "GamesLost" มีค่าติดลบได้ ดังนั้น ในกรณีนี้ วิธีที่ดีที่สุดก็คือควรจะทิ้งค่าสถิติ "GamesPlayed" ออกไป แล้วก็คำนวณค่าสถิติดังกล่าวเป็น "GamesWon" + "GamesLost" แทน
ค่าสถิติโดยรวม
ในหน้าผู้ดูแล คุณจะสามารถกำหนดค่าให้มีการบวกค่าสถิติแบบทบต้นได้ เพื่อแจ้ง Steam ให้เก็บผลรวมโดยรวมของค่าสถิติดังกล่าวที่มาจากผู้ใช้ทุกคน ซึ่งสามารถนำไปใช้รับข้อมูลต่าง ๆ เช่น จำนวนเงินทั้งหมดในระบบเศรษฐกิจ จำนวนการสังหารทั้งหมด อาวุธที่ชื่นชอบที่สุด แผนที่ฉากที่ชื่นชอบที่สุด และทีมใดที่มักจะแสดงฝีมือได้ดีกว่า เป็นต้น ในทางกลับกัน ไม่ควรจะใช้การดำเนินการเช่นนี้กับค่าสถิติอย่างเช่น "MostKills" เพราะการบวกเพิ่มเข้าไปเช่นนั้นให้กับผู้ใช้หลายคนนั้นไม่มีคุณค่าอะไรเลย และเนื่องจากว่าค่าสถิตินั้นอยู่ในมือของผู้ใช้ ข้อมูลดังกล่าวนี้จึงสามารถถูกดัดแปลงให้ไม่ตรงกับความเป็นจริงได้ เพราะฉะนั้นจึงถือว่ามีความสำคัญอย่างยิ่งเวลาที่ใช้งานค่าสถิติแบบทบต้นนั้น จะต้องมีการตั้งขอบเขต, ค่าสูงสุด, ค่าต่ำสุด, การบังคับให้เพิ่มค่าเท่านั้น (ถ้าเป็นไปได้) และการเปลี่ยนแปลงสูงสุดที่ยอมให้เกิดขึ้นได้ การเปลี่ยนแปลงสูงสุดที่ยอมให้เกิดขึ้นได้นั้น มีความหมายเป็นพิเศษต่อค่าสถิติที่ได้รับการทบต้น โดยเวลาที่มีการอัปโหลดค่าใหม่ ค่าโดยรวมจะมีการเปลี่ยนแปลงไม่เกินไปกว่าค่าการเปลี่ยนแปลงสูงสุดที่ยอมให้เกิดขึ้นได้ โดยการกระทำเช่นนี้จะจำกัดความเร็วที่ผู้โกงจะสามารถกระทำต่อผลรวมโดยรวมได้
ในการเข้าถึงผลรวมโดยรวม ให้เรียก
ISteamUserStats::RequestGlobalStats แล้วจากนั้นให้เรียก
ISteamUserStats::GetGlobalStat ให้กับแต่ละค่าสถิติโดยรวมแต่ละรายการ คุณยังสามารถขอ
ISteamUserStats::RequestGlobalStats จากบันทึกประวัติได้ตามจำนวนวันที่ต้องการ โดยบันทึกประวัตินั้นก็คือจำนวนของค่าสถิติที่ได้เปลี่ยนแปลงไปในแต่ละวัน คุณจะสามารถเข้าถึงบันทึกประวัติดังกล่าวนั้นด้วยการใช้
ISteamUserStats::GetGlobalStatHistoryนอกจากนั้นคุณยังจะสามารถขอเปอร์เซ็นต์โดยรวมของผู้ที่ได้รับรางวัลความสำเร็จจากไคลเอนต์ได้อีกด้วย โดยขั้นแรกคุณจะต้องเรียก
ISteamUserStats::RequestGlobalAchievementPercentages จากนั้น ให้ไล่รางวัลความสำเร็จโดยเริ่มจากผู้ทำสำเร็จมากที่สุดไปจนถึงผู้ทำสำเร็จน้อยที่สุด ด้วยการเรียก
ISteamUserStats::GetMostAchievedAchievementInfo และ
ISteamUserStats::GetNextMostAchievedAchievementInfo และคุณยังจะสามารถรับเปอร์เซ็นต์ผู้ที่ได้รับรางวัลความสำเร็จรายการใดรายการหนึ่งได้โดยการเรียก
ISteamUserStats::GetAchievementAchievedPercentชุมชน Steam
หลังจากที่คุณได้เปิดวางจำหน่ายเกมของคุณไปแล้วนั้น ข้อมูลความคืบหน้าเกี่ยวกับรางวัลความสำเร็จ ไม่ว่าจะเป็นรางวัลความสำเร็จส่วนบุคคลหรือรางวัลความสำเร็จโดยรวม ก็จะแสดงผลในชุมชน Steam โดยผู้เล่นแต่ละท่านนั้นจะมีลิงก์ในโปรไฟล์ชุมชนของตัวเองสำหรับไปที่หน้าแสดงผลรางวัลความสำเร็จของตนเองที่ได้มาแล้ว และรางวัลที่ยังไม่ได้ปลดล็อค
หมายเหตุ: างวัลความสำเร็จของคุณจะไม่ปรากฏขึ้นจนกว่าจะสามารถมองเห็นแอปได้บ้างแล้วในชุมชน
โดยจะแสดงผลรางวัลความสำเร็จแต่ละรายการด้วยไอคอนที่เหมาะสม ชื่อ และคำอธิบายตามที่ได้ตั้งค่าไว้ในแผงควบคุม Steamworks หากชื่อและคำอธิบายของรางวัลความสำเร็จดังกล่าวนั้นได้รับการแปลเป็นภาษาที่ผู้ใช้เลือกไว้ ก็จะแสดงผลชื่อและคำอธิบายในภาษาดังกล่าว
นอกจากนั้นยังจะมีลิงก์เชื่อมต่อไปจากหน้านี้ และลิงก์จากหน้า Steam หลักของเกมของคุณสำหรับไปยังชุดสถิติรางวัลความสำเร็จโดยรวมของเกมคุณอีกด้วย โดยจะแสดงเปอร์เซ็นต์ผู้เล่นเกมดังกล่าวนี้ ใน Steam ที่ได้รางวัลความสำเร็จนี้แล้ว โดยจะเรียงจากรางวัลที่มีคนทำสำเร็จมากที่สุด จนถึงรางวัลที่มีคนทำสำเร็จน้อยที่สุด ผู้เล่นจะมีความรู้สึกสนุกที่จะได้เห็นความสำเร็จเหล่านี้ รวมทั้งยังเป็นทรัพยากรอันสำคัญที่จะช่วยตั้งคำถามให้กับคุณในฐานะผู้พัฒนาเกมว่า ภารกิจท้าทายพิเศษของคุณนั้นยากพอหรือยัง? หรือว่าภารกิจท้าทายพิเศษนั้นยากเกินไป? (ข้อมูลดังกล่าวนี้จะอยู่บนเว็บไซต์รายงานยอดขายและการเปิดใช้งานด้วยเช่นกัน)
มีคำถามใด ๆ เพิ่มเติมหรือไม่?
ถามคำถามได้ที่
กระดานสนทนาหัวข้อสถิติและรางวัลความสำเร็จ