ผู้ไม่มีส่วนเกี่ยวข้อง

หน้าหลัก เอกสารอ้างอิงและความช่วยเหลือ
เอกสาร Steamworks
สถิติและรางวัลความสำเร็จ

ภาพรวม

ระบบสถิติและรางวัลความสำเร็จของ 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):
    achievements_spacewar.png

    วิธีการใช้งาน

    การเข้าถึงสถิติและรางวัลความสำเร็จจากในเกมของคุณ:

    • หลังจากเริ่มเปิดใช้งาน Steamworks API แล้ว คุณจะสามารถใช้งาน API สถิติและรางวัลความสำเร็จ ที่อยู่ใน ISteamUserStats ได้
    • เมื่อเริ่มเซสชันของเกม ให้เรียก ISteamUserStats::RequestCurrentStats เพื่อดึงข้อมูลสถิติและรางวัลความสำเร็จของผู้ใช้ออกมาจากส่วนแบ็กเอนด์ของ Steam เมื่อข้อมูลพร้อมใช้งาน คุณจะได้รับคอลแบ็ก ISteamUserStats::UserStatsReceived_t
    • ใช้ ISteamUserStats::GetStat และ ISteamUserStats::GetAchievement เพื่อวนซ้ำข้อมูลและเริ่มเปิดใช้งานสถานะของเกม
    • หากคุณต้องการจะการแสดงผลรางวัลความสำเร็จในเกมของคุณ คุณสามารถใช้ ISteamUserStats::GetAchievementDisplayAttribute เพื่อเรียกคุณสมบัติของรางวัลความสำเร็จที่เป็นภาษามนุษย์ ซึ่งจะรวมถึง ชื่อ ("name") และคำอธิบาย ("desc") คุณสมบัติเหล่านี้สามารถแปลได้ที่นี่ในเว็บไซต์พันธมิตร Steamworks และข้อมูลที่คืนค่าจะแตกต่างกันไปตามภาษาที่ผู้ใช้ใช้ในเกม คุณยังสามารถรับไอคอนรางวัลความสำเร็จได้ด้วยการใช้ ISteamUserStats::GetAchievementIcon หรือรับเวลาที่รางวัลความสำเร็จถูกปลดล็อคได้ด้วยการใช้ ISteamUserStats::GetAchievementAndUnlockTime
    • เวลาที่ค่าสถิติเกิดการเปลี่ยนแปลง โดยเฉพาะก่อนที่จะแสดงผลการเปลี่ยนแปลงให้ผู้ใช้เห็น ให้เรียก ISteamUserStats::SetStat หรือ ISteamUserStats::UpdateAvgRateStat การเรียกฟังก์ชันนี้เป็นการแก้ไขสถานะในหน่วยความจำของ Steam เท่านั้น และใช้ทรัพยากรน้อยมาก การทำเช่นนี้จะช่วยให้ Steam เก็บรักษาการเปลี่ยนแปลงระหว่างเซสชันเอาไว้ได้แม้ในเวลาที่เกมแครช
    • เมื่อเกมของคุณมาถึงจุดที่กำหนดไว้ (เช่น จุดตรวจสอบ จุดเปลี่ยนเลเวล) ให้เรียก ISteamUserStats::StoreStats เพื่ออัปโหลดการเปลี่ยนแปลงนั้น เมื่อข้อมูลพร้อมใช้งาน คุณจะได้รับคอลแบ็ก ISteamUserStats::UserStatsStored_t
    • สำหรับรางวัลความสำเร็จที่มีแถบความคืบหน้า ให้ใช้ ISteamUserStats::IndicateAchievementProgress ที่จุดสำคัญตามกำหนดเพื่อแสดงป็อปอัปความคืบหน้าขึ้นมา เช่น หากว่าคุณต้องชนะ 20 ครั้ง คุณอาจจะเรียกขึ้นมาเมื่อชนะไปแล้ว 10 ครั้ง เพื่อแสดงให้ผู้ใช้ทราบว่าได้มาถึงครึ่งทางแล้ว
    • เมื่อปลดล็อครางวัลความสำเร็จได้ 1 หรือหลายรางวัล ให้เรียก ISteamUserStats::SetAchievement ให้กับรางวัลความสำเร็จที่ปลดล็อคได้แต่ละรางวัล แล้วให้เรียก ISteamUserStats::StoreStats ตามทันทีเพื่ออัปโหลดรางวัลความสำเร็จเหล่านั้น เกมของคุณจะเห็นคอลแบ็ก ISteamUserStats::UserStatsStored_t และคอลแบ็ก ISteamUserStats::UserAchievementStored_t อีกหนึ่งตัวต่อการปลดล็อครางวัลความสำเร็จแต่ละรายการ โดยโอเวอร์เลย์เกมของ Steam จะแสดงแผงควบคุมการแจ้งเตือนแก่ผู้ใช้

    ข้อมูลสถิติประเภท 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 ที่ได้รางวัลความสำเร็จนี้แล้ว โดยจะเรียงจากรางวัลที่มีคนทำสำเร็จมากที่สุด จนถึงรางวัลที่มีคนทำสำเร็จน้อยที่สุด ผู้เล่นจะมีความรู้สึกสนุกที่จะได้เห็นความสำเร็จเหล่านี้ รวมทั้งยังเป็นทรัพยากรอันสำคัญที่จะช่วยตั้งคำถามให้กับคุณในฐานะผู้พัฒนาเกมว่า ภารกิจท้าทายพิเศษของคุณนั้นยากพอหรือยัง? หรือว่าภารกิจท้าทายพิเศษนั้นยากเกินไป? (ข้อมูลดังกล่าวนี้จะอยู่บนเว็บไซต์รายงานยอดขายและการเปิดใช้งานด้วยเช่นกัน)

    มีคำถามใด ๆ เพิ่มเติมหรือไม่?

    ถามคำถามได้ที่ กระดานสนทนาหัวข้อสถิติและรางวัลความสำเร็จ