เอกสาร Steamworks
การอัปโหลดไปยัง Steam

ระบบเนื้อหา SteamPipe เบื้องต้น

SteamPipe คือ ระบบเนื้อหาของเกม/แอปพลิเคชันที่เป็นขุมพลังให้ Steam SteamPipe บรรจุคุณสมบัติดังต่อไปนี้:
  • การนำส่งเนื้อหาที่มีความรวดเร็วและมีประสิทธิภาพ
  • การเพิ่มแบรนช์เวอร์ชัน "เบต้า" ทั้งแบบที่เปิดต่อสาธารณะและส่วนบุคคลที่ไม่จำกัด ทำให้สามารถทดสอบได้หลายบิลด์
  • การจัดการบิลด์ด้วยรูปแบบเว็บไซต์ที่เรียบง่าย - จะส่งบิลด์ใหม่ออกหรือดึงบิลด์เก่ากลับก็ง่าย ใช้เพียงแค่ไม่กี่คลิก
  • สามารถมองเห็นขนาดอัปเดตของบิลด์ก่อนที่จะส่งออกไปให้ใช้งานจริง
  • สามารถแบ่งปันเนื้อหาระหว่างแอปพลิเคชันหลาย ๆ ตัวได้
  • สามารถ สร้างดิสต์ตัวติดตั้ง จากเนื้อหาสาธารณะหรือเนื้อหาเบต้าได้
  • เกม/แอปจะพร้อมใช้งานแบบออฟไลน์ได้เสมอ แม้ว่าจะได้เริ่มการดาวน์โหลดตัวอัปเดตไปแล้วก็ตาม
  • เนื้อหาทั้งหมดจะได้รับการเข้ารหัสเสมอ และลูกค้าจะไม่สามารถมองเห็นเวอร์ชันที่ไม่ได้ใช้งานอยู่
  • เซิร์ฟเวอร์เนื้อหาภายในเครื่อง SteamPipe ที่สามารถใช้งานได้ในระหว่างการพัฒนา
หมายเหตุ: มีแนวคิดใหม่ ๆ ที่สำคัญต่อ SteamPipe เพราะฉะนั้น ก่อนที่จะเริ่มใช้งาน ขอแนะนำให้คุณทำความคุ้นเคยกับแนวคิดทั้งหมดที่ได้ระบุไว้ในเอกสารประกอบการใช้งาน แอปพลิเคชัน เพราะการมีความเข้าใจขั้นพื้นฐานว่าสิ่งเหล่านี้ทำงานประสานกันอย่างไรนั้นจะมีประโยชน์อย่างมากเวลาที่คุณอัปโหลดผลิตภัณฑ์ของคุณไปยัง Steam

วิดีโอฝึกสอน Steamworks - การสร้างเกมของคุณใน Steampipe

การฝึกสอนนี้จะแนะนำ SteamPipe และขั้นตอนต่าง ๆ ผ่านทางการสร้างแอปพลิเคชันตัวอย่างสำหรับ Steam ด้วยเครื่องมือ Steamworks
https://www.youtube.com/watch?v=SoNH-v6aU9Q

วิดีโอฝึกสอน Steamworks - การเพิ่มแพลตฟอร์มและภาษาใหม่

การฝึกสอนนี้จะอธิบายวิธีการเพิ่มแพลตฟอร์มและภาษาใหม่ไปยังเกมของคุณด้วยการเพิ่มดีโปไปยังแอปของคุณ
https://www.youtube.com/watch?v=PShS32hcing

รายละเอียดทางเทคนิคของ SteamPipe

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

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

บัญชีบิลด์ Steam

ก่อนที่คุณจะสามารถสร้างบิลด์ใด ๆ ก็ตามบน Steam ได้นั้น คุณจะต้องมีบัญชี Steam ในบัญชี Steamworks ของคุณที่ได้รับสิทธิ์ "แก้ไขเมทาดาตาของแอป" และ "เผยแพร่การเปลี่ยนแปลงของแอปไปยัง Steam" แล้วเสียก่อน ด้วยเหตุผลด้านความปลอดภัย ขอแนะนำให้คุณสร้างบัญชีบิลด์เฉพาะที่มีสิทธิ์เหล่านี้ คุณสามารถสร้างบัญชี Steam ขึ้นใหม่เพื่อการนี้โดยเฉพาะได้ที่ https://store.steampowered.com/join

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

create_build_account.png

การติดตั้งครั้งแรกสำหรับแอป SteamPipe ใหม่

ปฏิบัติตามขั้นตอนต่อไปนี้สำหรับการติดตั้งแอป SteamPipe ใหม่:
  1. หาไอดีแอปของแอปพลิเคชันของคุณ (ซึ่งสามารถหาได้ด้วยการเลือกแอปพลิเคชันดังกล่าวที่หน้าหลักใน Steamworks ของคุณ)
  2. ไปที่หน้า การตั้งค่าการติดตั้งทั่วไป ของแอปของคุณ
  3. กำหนดตัวเลือกการเริ่มใช้งานอย่างน้อย 1 ตัวเลือก (เส้นทาง และหากเป็นไปได้ ให้ใส่อาร์กิวเมนต์ที่จำเป็นต้องใช้ในการเปิดใช้เกมด้วย) เลื่อนเมาส์ไปค้างไว้เหนือ (?) เพื่อรับทราบข้อมูลเพิ่มเติมเกี่ยวกับช่องข้อมูลแต่ละช่อง

    ตัวอย่างด้านล่างนี้แสดงตัวเลือกการเริ่มใช้งาน 4 ตัวเลือก โดยแบ่งเป็น 2 ตัวเลือกสำหรับระบบ Windows และอย่างละ 1 ตัวเลือกสำหรับระบบ MacOS และ Linux ตัวเลือกที่ 3 จะแสดงบนระบบ Windows เมื่อผู้ใช้เป็นเจ้าของเนื้อหาดาวน์โหลดที่ระบุไว้เท่านั้น

    updatedlaunchoptions.png
  4. ไปที่หน้า ดีโป และเพิ่มดีโปให้แก่แอปนี้ตามที่จำเป็น ซึ่งตามค่าเริ่มต้นแล้ว ดีโปอาจจะได้รับการกำหนดค่าสำหรับแอปพลิเคชันของคุณเรียบร้อยแล้วก็เป็นได้
    1. คลิกที่ดีโปเริ่มต้นแล้วเปลี่ยนชื่อของดีโปให้เป็นชื่อที่หมาะสมและจดจำได้ง่าย (เช่น "เนื้อหาฐาน" หรือ "เนื้อหาสำหรับ Windows")
    2. ปล่อยการตั้งค่าภาษาให้เป็น [All language] เอาไว้ เว้นแต่ว่านี่จะเป็นดีโปที่มีการระบุภาษาเฉพาะ
    3. ปล่อยการตั้งค่า OS ให้เป็น [All OSes] เอาไว้ เว้นแต่ว่านี่จะเป็นดีโปที่มีการระบุ OS เฉพาะ (หากแอปเป็นประเภท all-in-one หรือใช้สำหรับ PC หรือ Mac อย่างเดียว ควรจะปล่อยไว้เป็น [All OSes] ให้ระบุเฉพาะกับดีโปเกมที่มีการระบุ OS เฉพาะเท่านั้น
    4. คลิก เพิ่มดีโปใหม่ เพื่อสร้างดีโปเพิ่มเติม
    5. คลิก บันทึกการเปลี่ยนแปลง เพื่อบันทึกการเปลี่ยนแปลงที่ได้ทำไป
  5. เมื่อคุณตั้งค่าดีโปของคุณเสร็จแล้ว ให้เผยแพร่การเปลี่ยนแปลงที่คุณได้ดำเนินการจากหน้า เผยแพร่
  6. ดีโปที่เพิ่งได้รับการกำหนดค่าใหม่ของคุณจะต้องถูกบรรจุไว้ในแพ็กเกจเพื่อมอบสิทธิ์การเป็นเจ้าของดีโปดังกล่าวแก่คุณได้ เกมแต่ละเกมบน Steam ควรจะมีแพ็กเกจ Developer Comp ที่จะถูกมอบให้กับบัญชีที่ได้ระบุรายการไว้ในกลุ่มผู้จัดจำหน่ายของคุณโดยอัตโนมัติ
    คุณสามารถเพิ่มดีโปใหม่เหล่านี้ไปยังแพ็กเกจดังกล่าวได้ (และ/หรือแพ็กเกจอื่น ๆ ที่ควรจะมีดีโปเหล่านี้) ได้ที่หน้า แพ็จเกจ & เนื้อหาดาวน์โหลดที่เกี่ยวข้อง
หมายเหตุ: หากตัวโปรแกรมที่สั่งใช้งานได้ของคุณอยู่ในโฟลเดอร์ย่อยของโฟลเดอร์การติดตั้งหลัก ให้เพิ่มชื่อโฟลเดอร์ย่อยในช่องข้อมูลตัวโปรแกรมที่สั่งใช้งานได้ อย่าใช้เครื่องหมายทับหรือจุดนำหน้า

การเริ่มตั้งค่า SDK สำหรับการอัปโหลด SteamPipe

ดาวน์โหลด และคลายซิป Steamworks SDK เวอร์ชันล่าสุดบนเครื่องที่คุณจะใช้อัปโหลดบิลด์

เครื่องมือ SteamPipe จะอยู่ภายใน SDK ในโฟลเดอร์ เครื่องมือ ซึ่งบรรจุ 2 ไดเรกทอรีย่อยที่เกี่ยวข้อง

ไดเรกทอรี ContentBuilder เป็นที่ที่บรรจุเนื้อหาและเครื่องมือบิลด์ SteamPipe ของเกมของคุณ ไดเรกทอรีนี้บรรจุไดเรกทอรีย่อยดังต่อไปนี้:
  • builder - ไดเรกทอรีนี้เริ่มแรกจะบรรจุเพียง steamcmd.exe ที่เป็น Steam เวอร์ชันคอมมานด์ไลน์อยู่เพียงเท่านั้น
  • builder_linux - steamcmd เวอร์ชัน Linux
  • builder_osx - steamcmd เวอร์ชัน macOS
  • content - ไดเรกทอรีนี้จะบรรจุไฟล์เกมทั้งหมดที่จะถูกบิลด์ลงไปในดีโป
  • output - ไดเรกทอรีนี้จะเป็นตำแหน่งที่ตั้งสำหรับเก็บบันทึกของบิลด์ กลุ่มแคช และเอาต์พุตระดับกลาง หมายเหตุ: สามารถลบหรือล้างโฟลเดอร์นี้ให้ว่างได้ตามต้องการ แต่หากลบไปแล้ว การอัปโหลดครั้งต่อไปจะใช้เวลานานขึ้น
  • scripts - ไดเรกทอรีนี้จะเป็นที่ที่คุณเอาไว้วางสคริปต์บิลด์ทั้งหมดสำหรับสร้างดีโปเกมของคุณ
steampipebuilddir.png

ขอแนะนำให้คุณเรียกใช้ steamcmd.exe โดยตรงในโฟลเดอร์ของตัวบิลด์สำหรับแพลตฟอร์มของคุณหนึ่งครึ่งเพื่อ bootstrap ระบบบิลด์ของคุณ ซึ่งจะช่วยจัดเตรียมไฟล์ทั้งหมดที่จำเป็นต้องใช้ในการสร้างดีโปลงในไดเรกทอรีตัวบิลด์ของคุณ

ไดเรกทอรี ContentServer บรรจุเครื่องมือสำหรับเรียกใช้ เซิร์ฟเวอร์เนื้อหาภายในเครื่อง SteamPipe ของคุณเอง หากคุณต้องการ

SteamCmd บน macOS

ในการเปิดการใช้งาน SteamCmd บน macOS คุณจะต้องดำเนินการตามขั้นตอนดังต่อไปนี้ให้เสร็จสมบูรณ์:
  1. จากเทอร์มินัล ให้ไปที่โฟลเดอร์ tools\\ContentBuilder\\\\osx32
  2. เรียกใช้ chmod +x steamcmd
  3. ไปที่โฟลเดอร์หลัก (tools\ContentBuilder\builder_osx)
  4. พิมพ์ bash ./steamcmd.sh
  5. SteamCmd จะทำงานและอัปเดตให้เป็นบิลด์ล่าสุด แล้วจะนำคุณไปอยู่ในพร้อมท์ SteamCmd
  6. พิมพ์ exit และกด return เพื่อออกจากพร้อมท์
จากนั้นคุณจะสามารถดำเนินการตามเอกสารประกอบการใช้งานฉบับนี้ทั้งหมด (เปลี่ยนเส้นทางตามที่จำเป็น) ในการสร้างไฟล์การกำหนดค่าของดีโปและแอปสำหรับการอัปโหลดเนื้อหาของคุณไปยัง Steam

การสร้างไฟล์การกำหนดค่าบิลด์ SteamPipe

ในการอัปโหลดแอปของคุณด้วย SteamPipe คุณจะต้องสร้างสคริปต์ที่อธิบายบิลด์ของคุณและแต่ละดีโปที่จะบรรจุรวมไว้ในนั้น มีสคริปต์ตัวอย่างแบบง่ายอยู่ในโฟลเดอร์ ContentBuilder\scripts สำหรับแอปที่มีหนึ่งดีโป

หมายเหตุ: คุณสามารถตั้งชื่อสคริปต์เหล่านี้ได้ตามต้องการ แต่ทางเราได้ใช้ชื่อ app_build_<AppID> และ depot_build_<AppID> เพื่อให้มีความสม่ำเสมอ หากคุณทราบว่าคุณจะสร้างแอปในเครื่องนี้ ถือว่าเป็นการดีที่จะสร้างไดเรกทอรีย่อยในไดเรกทอรีสคริปต์ของคุณสำหรับแต่ละแอปพลิเคชัน เพื่อช่วยจัดระเบียบให้กับสคริปต์บิลด์ของแต่ละแอปพลิเคชัน

เครื่องมือ SteamPipe GUI

หากคุณใช้งานระบบ Windows และต้องการจะใช้งานเครื่องมือ GUI เพื่อช่วยในการสร้างไฟล์การกำหนดค่าต่าง ๆ เหล่านี้แล้วอัปโหลดบิลด์ของคุณ คุณสามารถใช้ SteamPipeGUI ที่พร้อมใช้งานอยู่ในโฟลเดอร์เครื่องมือของ Steamworks SDK ได้ ซึ่งได้ให้คำแนะนำเพิ่มเติมในไฟล์ zip สำหรับเริ่มต้นใช้งาน

หากคุณเลือกที่จะใช้เครื่องมือ GUI ขอแนะนำให้อ่านหัวข้อดังต่อไปนี้เพื่อช่วยเหลือให้ตัวคุณเองมีความคุ้นเคยกับการทำงานของระบบ SteamPipe

สคริปต์สำหรับบิลด์ดีโป

เริ่มแรกให้สร้างสคริปต์สำหรับบิลด์ดีโปให้กับแต่ละดีโปที่คุณต้องการจะอัปโหลด เริ่มด้วยการทำสำเนาสคริปต์ depot_build_1001.vdf แล้วเปลี่ยนชื่อเป็นไอดีดีโปที่จะอัปโหลด

ตัวอย่างสคริปต์สำหรับบิลด์ดีโป:
"DepotBuildConfig" { // Set the depot ID that this script will upload. "DepotID" "1001" // Set a root for all content. // All relative paths specified below (LocalPath in FileMapping entries, and FileExclusion paths) // will be resolved relative to this root. // If you don't define ContentRoot, then it will be assumed to be // the location of this script file, which probably isn't what you want "ContentRoot" "D:\MyGame\rel\master\" // Include all files recursively "FileMapping" { // This can be a full path, or a path relative to ContentRoot "LocalPath" "*" // This is a path relative to the install folder of your game "DepotPath" "." // If LocalPath contains wildcards, setting this means that all // matching files within subdirectories of LocalPath will also // be included. "recursive" "1" } // Exclude all symbol files // This can be a full path, or a path relative to ContentRoot "FileExclusion" "*.pdb" }

หมายเหตุ: การตั้งค่า "ContentRoot" ในสคริปต์บิลด์ดีโปต์จะเข้าไปแทนที่ "ContentRoot" ที่อยู่ในสคริปต์สำหรับบิลด์แอป

สคริปต์สำหรับบิลด์แอป

หลังจากที่คุณตั้งค่าสคริปต์สำหรับบิลด์ดีโปเสร็จแล้ว คุณจำเป็นจะต้องใช้สคริปต์สำหรับบิลด์แอปที่อธิบายรายละเอียดของตัวบิลด์ เริ่มด้วยการทำสำเนาสคริปต์ depot_build_1000.vdf แล้วเปลี่ยนชื่อเป็นไอดีดีโปที่จะอัปโหลด

SteamPipe จะให้การรองรับประเภทบิลด์ดังต่อไปนี้:
  • Preview - เป็นบิลด์ประเภทที่จะให้บันทึกล็อกและมานิเฟสต์ของไฟล์เท่านั้น การบิลด์ Preview เป็นวิธีที่ดีในการลองดำเนินการสคริปต์อัปโหลดของคุณ
  • Local - บิลด์สำหรับ เซิร์ฟเวอร์เนื้อหาภายในเครื่อง SteamPipe บิลด์ LCS จะอัปโหลดไปยัง LCS ของคุณและจะอนุญาตให้คุณสามารถทดสอบการติดตั้งเกมของคุณด้วยการใช้งานไคลเอนต์ Steam ได้
  • SteamPipe - SteamPipe จะบิลด์ผลลัพธ์ลงในดีโปของคุณและจะอัปโหลดไปยัง Steam การดำเนินการนี้มีความปลอดภัย แม้กระทั่งต่อเกมที่ได้เปิดวางจำหน่ายไปแล้ว เนื่องจากคุณจำเป็นจะต้องตั้งค่าให้เป็นสาธารณะก่อนที่ลูกค้าจะสามารถดาวน์โหลดได้

ตัวอย่างสคริปต์บิลด์แอป:
"appbuild" { // Set the app ID that this script will upload. "appid" "1000" // The description for this build. // The description is only visible to you in the 'Your Builds' section of the App Admin panel. // This can be changed at any time after uploading a build on the 'Your Builds' page. "desc" "Your build description here" // Enable/Disable whether this a preview build. // It's highly recommended that you use preview builds while doing the initially setting up SteamPipe to // ensure that the depot manifest contains the correct files. "preview" "1" // File path of the local content server if it's enabled. "local" "" // Branch name to automatically set live after successful build, none if empty. // Note that the 'default' branch can not be set live automatically. That must be done through the App Admin panel. "setlive" "" // The following paths can be absolute or relative to location of the script. // This directory will be the location for build logs, chunk cache, and intermediate output. // The cache stored within this causes future SteamPipe uploads to complete quicker by using diffing. "buildoutput" "..\output\" // The root of the content folder. "contentroot" "..\content\" // The list of depots included in this build. "depots" { "1001" "depot_build_1001.vdf" } }

การบิลด์ดีโป

ในการที่จะเริ่มเปิดใช้งานบิลด์ ให้แก้ไขไฟล์.bat เพื่อบรรจุบัญชีบิลด์ Steamworks และรหัสผ่านของคุณ (กรุณาดู ข้างต้น) และเส้นทางไปยังสคริปต์สำหรับบิลด์แอป:
builder\steamcmd.exe +login "account" "password" +run_app_build ..\scripts\[build_script_name].vdf +quit

หมายเหตุ: Steam Guard อาจจะทำให้การเริ่มใช้งานบิลด์ครั้งแรกล้มเหลวได้ หากเข้าระบบไม่ผ่านเนื่องจาก Steam Guard กรุณาตรวจสอบอีเมลของคุณเพื่อดูรหัส Steam Guard แล้วเรียกใช้ steamcmd เป็น: steamcmd.exe "set_steam_guard_code <code>" จากนั้นลองใหม่อีกครั้ง หลังจากที่เข้าสู่ระบบด้วย Steam Guard แล้วหนึ่งครั้ง ไฟล์รักษาความปลอดภัยที่ใช้ในการยืนยันการเข้าสู่ระบบก็จะมีความถูกต้องสมบูรณ์

If you are using steamcmd from a machine or VM that gets re-imaged frequently, you should include the sentry file in your image so you won't be prompted for a Steam Guard every time. The sentry file is located in <Steam>\ssfn<hashOfNumbers>.

After you run run_build.bat, your build output should be in the directory specified in your build script file. If the preview build produces the expected manifest, run the build again with "preview" "0" in your app build script.

The following steps occur during a SteamPipe build:
  1. Steamcmd.exe จะบันทึกล็อกเข้าไปยังระบบแบ็กเอนด์ของ Steam ด้วยการใช้บัญชีตัวบิลด์ของ Steam
  2. ตัวเริ่มบิลด์แอปจะได้รับการลงทะเบียนด้วย MDS (Master Depot Server) ซึ่งจะตรวจสอบให้มั่นใจว่าผู้ใช้มีระดับสิทธิ์อนุญาตที่ถูกต้องในการแก้ไขแอปนี้
  3. สำหรับแต่ละดีโปที่บรรจุในบิลด์แอปนั้น จะมีการสร้างรายการไฟล์ตามไฟล์ที่อยู่ในโฟลเดอร์เนื้อหาและกฎการกรองตามที่ได้กำหนดไว้ในไฟล์การกำหนดค่าบิลด์ดีโป
  4. แต่ละไฟล์จะถูกสแกนและถูกแบ่งออกเป็นชิ้นส่วนข้อมูลเล็ก ๆ ขนาดประมาณ 1 เมกะไบต์ หากเคยบิลด์ดีโปมาก่อนแล้ว การแบ่งชิ้นส่วนไฟล์นี้จะถูกเก็บไว้เป็นชิ้นส่วนที่ไม่ได้รับการเปลี่ยนแปลงมากที่สุดเท่าที่จะเป็นไปได้
  5. ชิ้นส่วนไฟล์ใหม่จะได้รับการบีบอัด เข้ารหัส และอัปโหลดไปยัง MDS
  6. มานิเฟสต์สุดท้ายจะได้รับการสร้างขึ้นมาให้แก่ดีโปเวอร์ชันนี้ มานิเฟสต์แต่ละชุดจะถูกระบุด้วยไอดีมานิเฟสต์แบบ 64 บิตที่ไม่ซ้ำกัน
  7. เมื่อดีโปทั้งหมดได้รับการประมวลผลแล้ว MDS จะสิ้นสุดการบิลด์แอปนี้ และจะกำหนดไอดีบิลด์ส่วนกลาง
  8. หลังจากทำการบิลด์เสร็จแล้ว อาจมีไฟล์ *.csm และ *.csd อยู่ในโฟลเดอร์บิลด์เอาต์พุต ไฟล์เหล่านี้เป็นไฟล์ชั่วคราวและสามารถลบทิ้งได้ แต่ไฟล์เหล่านี้สามารถช่วยทำให้การบิลด์ในครั้งถัด ๆ ไปมีความรวดเร็วขึ้น

การจัดการอัปเดต

After your app releases to customers, your customers will be receiving the build marked as the Default build. When uploading a new build it's always a good idea to test it before shipping it to your customers, for more information on how to successfully do this see การทดสอบบน Steam.

กฎการแมปไฟล์ขั้นสูง

There can be multiple file mappings that add files to the depot. They should be listed first.
Files or subfolders can be excluded with filter expressions.
Steam install scripts can be marked during the build process so the Steam client knows to run them for any application which mounts the Depot.
Files or folders can be remapped, so sub-folders in the content folder can be mapped to anywhere in the depot.
Files can be tagged with special flags:
  • userconfig - ไฟล์นี้ถูกแก้ไขโดยผู้ใช้หรือเกม ซึ่งไม่สามารถถูกแทนที่ได้ด้วยการอัปเดต และจะไม่ทริกเกอร์ข้อผิดพลาดเกี่ยวกับการยืนยัน หากมีความแตกต่างจากไฟล์เวอร์ชันก่อนหน้า
  • readonly - ไฟล์นี้จะถูกทำเครื่องหมายเป็นอ่านได้อย่างเดียวในระบบไฟล์ของไคลเอนต์
  • hidden - ไฟล์นี้จะถูกทำเครื่องหมายไว้เป็นถูกซ่อนในระบบไฟล์ของไคลเอนต์
  • executable - ไฟล์นี้คือไฟล์ตัวโปรแกรมที่สั่งใช้งานได้ (สำหรับ OS X เท่านั้น)
    "DepotBuildConfig" { "DepotID" "202931" "FileMapping" { // override video files files in \\videos with German versions "LocalPath" "localization\\german\\videos\\*" "DepotPath" "videos\\" } "FileMapping" { // override audio files in \\audio with German versions "LocalPath" "localization\\german\\audio\\*" "DepotPath" "audio\\" } "FileMapping" { "LocalPath" "localization\\german\\german_installscript.vdf" "DepotPath" "." } "FileExclusion" "bin\\server.exe" // exclude this file "FileExclusion" "*.pdb" // exclude all .PDB files everywhere "FileExclusion" "maps\\testroom*" // exclude all files under maps/testroom/ "InstallScript" "localization\\german\\german_installscript.vdf" "FileProperties" { "LocalPath" "bin\\setup.cfg" "Attributes" "userconfig" // this file will be modified during runtime } }

การดีบักปัญหาในบิลด์

If your build wasn't successful, you should look in your output directory for error information, not the console where the build script was run. Most error information can be found in the *.log files.
You can use these Steam client commands and client-side files to debug issues:
  • "app_status [appid]" - แสดงสถานะปัจจุบันของแอปที่อยู่บนไคลเอนต์นี้
  • "app_info_print [appid]" - แสดงการกำหนดค่า Steamworks ในปัจจุบันสำหรับเกมนี้ (ดีโป ตัวเลือกการเรียกเปิดใช้ ฯลฯ)
  • "app_config_print [appid]" - แสดงการกำหนดค่าของผู้ใช้ปัจจุบันสำหรับเกมนี้ (ภาษาที่ใช้งานอยู่ ไดเรกทอรีการติดตั้ง ฯลฯ)
  • file "logs\content_log.txt" - ระบุรายการปฏิบัติการและข้อผิดพลาดของ Oxcart ทั้งหมดที่ได้รับการบันทึกไว้
  • file "steamapps\appmanifest_[appid].acf" - แสดงสถานะการติดตั้งปัจจุบันของแอปนี้ (KeyValues)

การสร้างดีโปอย่างมีประสิทธิภาพสำหรับ SteamPipe

The old Steam content system would patch updates on a file level, which meant that if a single byte in a file changed, the entire new file would be downloaded by all users. This was especially inefficient if the game used pack files, which are collections of game content files in a single big file. Pack files can easily exceed 1 GB, so updates often led to unnecessarily large downloads. A common way to avoid these large downloads was to add new pack files that overrode content of already shipped pack files. That worked for updates, but it hurt new users long-term, since they ended up downloading unused, already-patched content.

The new content system fixes this problem by splitting each file into roughly 1-MB chunks. Each chunk is then compressed and encrypted before being distributed by the Steam content system. If the game content has large redundant parts, these chunks are reused and the user only has to download each repeated chunk once. However, the real strength of this system is building efficient update patches. While the system is building a patch, the new content is scanned for already known chunks. If it finds them, it reuses them. This means if you change or inject a few bytes in a big file, the user only has to download the changes.

This works well in most cases, but there are still a few pitfalls that need to be avoided when designing the content layout of a game. Do not compress or encrypt your game data. This is already done for in-flight downloads and retail discs by the Steam content system. If you do it too, you will reduce the effectiveness of delta patching. If you package multiple data files in a single pack file, make sure that with each re-packaging, no unnecessary changes are made. One problematic practice is including the full name of the original source files on disk, because the names may change, depending on the build machine. Another bad pattern is including build time stamps for each file. If possible, always add new content to the end of your pack files and keep the order of existing files. Also, keep your pack file’s metadata (offset and sizes to individual files) in one place and don’t intersperse it with content files. Use a binary diff’ing tool like BeyondCompare to look at two builds of your pack files to make sure that hundreds of unwanted changes don’t show up.

If you follow these rules you will minimize patch sizes and only new content will need to be downloaded. Your customers will thank you for that and you will be able to increase the quality of your product by shipping more updates.

การบิลด์ดิสก์การติดตั้งขายปลีก

To build retail install disc for SteamPipe games, you must first setup a build project file.
In this example, the SKU file is called "sku_goldmaster.txt":
"sku" { "name" "Test Game Installer" "appid" "202930" "disk_size_mb" "640" "included_depots" { "1" "202931" "2" "202932" } }
Some tips to keep in mind:
  • สร้างโฟลเดอร์ใหม่สำหรับการเขียนดิสก์อิมเมจขายปลีกลงไป เช่น "D:\retail_disks" จะเพิ่มเฉพาะดีโปในส่วน included_depots เข้าไปเท่านั้น จะไม่มีส่วนที่ถูกละเว้นอีกต่อไป
  • คุณสามารถใช้ Steam.exe (ที่มีพารามิเตอร์คอมมานด์ไลน์ -dev และ -console) หรือ steamcmd.exe เพื่อสร้างอิมเมจตัวติดตั้งได้ โดยในทั้งสองกรณี กรุณาใช้คำสั่ง "build_installer"
  • เข้าสู่ระบบด้วยบัญชี Steam ที่เป็นเจ้าของเกมดังกล่าวและดีโปทั้งหมดที่คุณต้องการจะใส่ลงไปในดิสก์ขายปลีก มิฉะนั้น บัญชีดังกล่าวจะไม่จำเป็นจะต้องใช้สิทธิ์พิเศษ ทำให้ทุกคนสามารถสร้างดิสก์ตัวติดตั้งได้
  • หากคุณใช้ Steam.exe ให้หยุดการดาวน์โหลดอื่น ๆ ทั้งหมด
  • ไปยังหน้าคอนโซล แล้วเรียกใช้คำสั่ง build_installer:
    build_installer sku_goldmaster.txt "D:\retail_disks"
    บิลด์จะต้องใช้เวลาสักครู่เพราะว่าดีโปทั้งหมดจะต้องถูกดาวน์โหลดซ้ำในครั้งแรก
  • หากคุณจะสร้าง GM (โกลด์มาสเตอร์) โดยการใช้เซิร์ฟเวอร์เนื้อหาภายในเครื่อง ให้เรียกใช้:
    @localcontentserver "webserver"
    build_installer sku_goldmaster.txt "D:\retail_disks" local
    ส่วนที่เกิน หมายถึง 'Backup' เนื่องจากส่วนสำรองของทั้ง 'ดิสก์การติดตั้งประเภทขายปลีก' และเกมภายในเครื่องโดยทั่วไปแล้วจะเหมือนกัน
  • เมื่อคุณเห็น "Backup AppID..." แสดงว่าอิมเมจดิสก์การติดตั้งพร้อมใช้งานแล้ว คุณสามารถอ่านรายละเอียดเพิ่มเติมเกี่ยวกับบิลด์สำรองได้ใน logs\backup_log.txt
  • มีโฟลเดอร์ใหม่ (Disk_1, Disk_2, และต่อไป) in "D:\retail_disks" ซึ่งแต่ละโฟลเดอร์จะมีขนาดไม่เกิน 640 เมกะไบต์ ตามที่ได้ระบุไว้ด้วย "disk_size_mb" โฟลเดอร์ของดิสก์แต่ละโฟลเดอร์จะบรรจุไฟล์ "sku.sis" และ .csd และ .csm สำหรับแต่ละดีโป ดีโปที่มีขนาดใหญ่จะต้องใช้หลายดิสก์ เนื้อหาดิสก์การติดตั้งขายปลีกทั้งหมดจะถูกเข้ารหัสเสมอ (ซึ่งไม่เหมือนกับไฟล์สำรองเกมภายในเครื่อง) ให้คัดลอกไฟล์การติดตั้ง SDK GM (setup.exe, setup.ini ฯลฯ) ลงไปในโฟลเดอร์ของดิสก์แรกของคุณ และตัวติดตั้งสำหรับดิสก์ประเภทขายปลีกก็จะเสร็จสมบูรณ์
  • ในเวลาที่สร้าง GM ให้กับ OSX กรุณาตรวจสอบให้มั่นใจว่าได้เปิดอิมเมจ goldmaster/disk_assets/SteamRetailInstaller.dmg image บนระบบ Mac จากนั้นให้หาแอปที่อยู่ในนั้นแล้วคัดลอกไปยังรากของสื่อของคุณ ขอแนะนำให้คุณเปลี่ยนชื่อของแอปการติดตั้ง ติดแบรนด์ของคุณให้กับไอคอน แล้วตกแต่งหน้าต่างให้แสดงเฉพาะตัวติดตั้งอย่างเดียว
  • เวลาที่สร้าง GM แบบหลายดิสก์ให้กับ OSX กรุณาตรวจสอบให้มั่นใจว่าชื่อไดรฟ์ข้อมูลของแต่ละดิสก์นั้นตรงกัน เนื่องจากชื่อไดรฟ์ข้อมูลจะกลายเป็นส่วนหนึ่งของเส้นทางการเชื่อมต่อ และหากชื่อไม่ตรงกัน ตัวติดตั้งจะไม่สามารถหาดิสก์ถัดไปได้

คุณสามารถเลือกที่จะสร้างตัวติดตั้งประเภทขายปลีกจากแบรนช์เบต้าได้

The process above will create a retail installer based on the default branch. If you need to create an installer based on a beta branch, you must first create a beta branch named "baseline". Then use the following command to build from the baseline branch:
build_installer <project file> <target folder> <beta key> <beta pwd> steamcmd ex: build_installer sku_goldmaster.txt "D:\retail_disks" baseline superSecret script ex: steamcmd.exe +login user_name password +build_installer "..\Build\GameDataSku.txt" c:\destination beta_key beta_password +exit

การติดตั้งเนื้อหาดาวน์โหลดจากตัวติดตั้งประเภทขายปลีก

In some circumstances, you may wish to create a retail installer that includes your DLC packages. In such cases, the process to create the installer requires only a few changes.
In "sku_goldmaster.txt", include the DLC AppIDs under the "included_depots" section. Once you have run the "build_installer" process, find the generated sku.sis file for the installer and open it with a text editor.
Add the DLC AppID in the "apps" section. For example, if I had a game with AppID 1000 and DLC AppID 1010, I would adjust the "apps" section as follows:
"apps" { "0" "1000" "1" "1010" }
This will ensure that Steam checks for ownership of the DLC and prompt the user for a key if the DLC is not owned by the account that they are logging into on Steam.

การสร้างตัวติดตั้งประเภทขายปลีกสำหรับหลายไอดีแอปบนดิสก์/แพ็กเกจตัวติดตั้งเดียว

To build a GM containing multiple Steam Pipe apps. Build each app installer one by one but point them all to the same output folder. Each build will merge itself with the already existing install image.

การปรับแต่งดิสก์การติดตั้งประเภทขายปลีก

See Customizing a gold master for more details on customizing your retail install disk.

การโหลดเกมล่วงหน้าก่อนการวางจำหน่าย

By default, all content is always encrypted, on all retail discs and on all content servers. Switching a game to preload mode means owners can download the content, but it stays encrypted on the users' disk and can't be played. Once the game becomes officially released, Steam will decrypt the preloaded content and the user can play the game.

Switching a game to preload mode is recommended in these cases:
  • ในเวลาที่นำส่งดิสก์ประเภทขายปลีกพร้อมรหัสผลิตภัณฑ์ก่อนที่เกมจะพร้อมใช้งานจริง (ป้องกันการละเมิดลิขสิทธิ์ตั้งแต่วันที่ 0)
  • เกมเวอร์ชันสั่งซื้อล่วงหน้าและมีขนาดใหญ่กว่า 20 GB

Please submit a ticket to Steam Publishing if you believe your game requires preloading.

การสร้างเนื้อหาดาวน์โหลด

DLC is built as a depot of the base game. See the เนื้อหาดาวน์โหลด (DLC) documentation for more information.

การแก้ไปปัญหา SteamPipe

"การเข้าสู่ระบบล้มเหลว: การเข้าสู่ระบบบัญชีถูกปฏิเสธ" เมื่อเข้าสู่ระบบผ่านทาง steamcmd

Cause: Probably SteamGuard is preventing login. Resolution:
  • ตรวจสอบอีเมลที่เชื่อมโยงกับบัญชีที่คุณพยายามจะใช้เข้าสู่ระบบ แล้วมองหาอีเมลที่ส่งมาจากฝ่ายสนับสนุน Steam คัดลอกรหัสจากอีเมลฉบับนั้น
  • เรียกใช้ steamcmd ต่อไปนี้: set_steam_guard_code <code>
  • ลองเข้าสู่ระบบใหม่อีกครั้งจาก steamcmd: Steam>logon <buildaccount> <password>

การแก้ปัญหาทั่วไปเกี่ยวกับการดาวน์โหลด

  • รีสตาร์ทเครื่องคอมพิวเตอร์ โมเด็ม เราเตอร์ ฯลฯ
  • ตรวจสอบการตั้งค่าไฟร์วอลล์ ระบบใหม่นี้จะจำเป็นต้องใช้พอร์ต 80 (HTTP) และพอร์ต Steam อื่น ๆ ทั้งหมดตามที่ระบุไว้ ที่นี่
  • ปิดการใช้งานโปรแกรมต่อต้านไวรัสและโปรแกรมบล็อกสแปมเป็นการชั่วคราว
  • Check the Steam download region under Settings->Downloads. ภูมิภาคดาวน์โหลดควรจะต้องมีค่าตรงกับตำแหน่งที่ตั้งของคุณ
  • หยุดการดาวน์โหลด ถอนการติดตั้ง แล้วติดตั้งเกมใหม่อีกครั้ง (เป็นการล้างแคชของมานิเฟสต์)
  • ออกจาก Steam ลบสองโฟลเดอร์ ได้แก่ appcache และ depotcache ในโฟลเดอร์การติดตั้ง Steam ของคุณ
  • ลองตั้งค่าภูมิภาคดาวน์โหลด Steam ของคุณให้เป็นภูมิภาคอื่นที่อยู่ไกลออกไป อาจจะช่วยแก้ปัญหาได้ หากเซิร์ฟเวอร์เนื้อหาที่อยู่ใกล้กับคุณนั้นมีการส่งข้อมูลไม่ดี

บิลด์ของ Mac และ/หรือ Linux ของฉันไม่ยอมติดตั้งไฟล์ใด ๆ เลย เกิดอะไรขึ้น?

If you're testing via Steam the installation of your game or application across multiple platforms, you may run into a situation where the build deploys on Windows but doesn't deploy any files on Mac or Linux despite your SteamPipe process being setup to upload Mac and/or Linux depots. There is a step that is easily missed which involves adding your alternate Depots to the Package being deployed. You can check what depots are included in a package via the following steps:
  1. ไปที่หน้า ผู้ดูแลแอป
  2. จากหมวดดูรายการที่เกี่ยวข้อง ให้คลิกที่ ดูเดโม แพ็กเกจที่เกี่ยวข้องทั้งหมด วิดีโอ และเนื้อหาดาวน์โหลด
  3. คลิกที่ชื่อของแพ็กเกจที่คุณต้องการจะดาวน์โหลด
  4. ตรวจสอบหมวด ดีโปที่บรรจุอยู่
  5. ใช้ เพิ่ม/ถอนดีโป เพื่อตรวจสอบให้มั่นใจว่าได้บรรจุดีโปชุดที่ถูกต้องไปยังแพ็กเกจแล้ว
There are a number of discussion threads about this that may also assist:

การเรียกใช้ steamcmd.exe ทำให้เกิดข้อผิดพลาดดังต่อไปนี้: "SteamUpdater: ข้อผิดพลาด: Steam จะต้องออนไลน์จึงจะอัปเดตได้ กรุณายืนยันการเชื่อมต่อของเครือข่ายของคุณ แล้วลองใหม่อีกครั้ง"

Resolution: Go to Internet Options->Connections->Lan Settings and check Automatically detect settings.

การเรียกใช้บิลด์แอปทำให้เกิดข้อผิดพลาดต่อไปนี้:: "ข้อผิดพลาด! 'DepotBuild for scriptname.vdf' ล้มเหลว - สถานะ = 6."

Possible Causes:
  • บัญชีไม่ได้มีสิทธิ์อนุญาตให้ใช้งานแอปนั้นได้
    • ตรวจสอบว่าไอดีแอปที่อยู่ใน app_build.vdf ถูกต้อง
    • ตรวจสอบว่าบัญชีบิลด์ดังกล่าวมี สิทธิ์ที่เหมาะสม ในการเข้าถึงไอดีแอปดังกล่าว
  • Steamcmd หาเนื้อหาดีโปไม่พบ
    • ตรวจสอบว่าค่า "contentroot" ที่อยู่ในสคริปต์ app_build มีเส้นทางที่ถูกต้องสัมพันธ์กับตำแหน่งของไฟล์สคริปต์
    • ตรวจสอบว่าค่า "LocalPath" ที่อยู่ในสคริปต์ depot_build มีเส้นทางที่ถูกต้องสัมพันธ์กับเส้นทางในสคริปต์ app_build ตรวจสอบว่าเส้นทางได้บรรจุเนื้อหาจริง ๆ

การเรียกใช้บิลด์แอปทำให้เกิดข้อผิดพลาดต่อไปนี้:: "ข้อผิดพลาด! ล้มเหลวในการรับข้อมูลแอปพลิเคชันสำหรับแอป NNNNN (ตรวจสอบการเข้าสู่ระบบและการสมัคร)"

This means that Steam can't retrieve information about the app, either because it doesn't exist or the user doesn't have access to the app.
  • ตรวจสอบว่า NNNNN เป็นไอดีแอปสำหรับแอปที่กำหนดไว้ให้กับคุณ
  • ตรวจสอบว่าไอดีแอปที่อยู่ใน app_build.vdf ถูกต้อง
  • หากเป็นไอดีแอปใหม่ ให้ตรวจสอบว่าได้เผยแพร่การกำหนดค่าผู้ดูแลแอปของ Steamworks แล้ว แอปใหม่ควรจะมีไดเรกทอรีการติดตั้ง SteamPipe อยู่ในแท็บการกำหนค่า มีดีโปอยู่ในแท็บดีโป และเผยแพร่การเปลี่ยนแปลงทั้งหมดในแท็บเผยแพร่
  • หากทุกอย่างดูเป็นปกติไม่มีปัญหา กรุณาตรวจสอบให้มั่นใจว่าบัญชีของคุณเป็นเจ้าของไอดีแอปดังกล่าว

"เกิดข้อผิดพลาดขณะติดตั้ง [AppName] (การกำหนดค่าเนื้อหาไม่ถูกต้อง)" ขณะเปิดใช้งาน

Possible Causes:
  • ไม่มีบิลด์ที่ถูกตั้งค่าเปิดใช้งานจริงอยู่ในแบรนช์ที่คุณพยายามจะใช้ติดตั้ง
    วิธีการแก้ปัญหา: ตั้งค่าบิลด์ของคุณให้เป็นเปิดใช้งานจริงในแบรนช์โดยการไปที่ https://partner.steamgames.com/apps/builds/<YourGameAppId> แล้วเลือกแบรนช์ในไคลเอนต์ Steam (ตามที่ได้อธิบายไว้ ที่นี่)
  • ตัวเลือกการเปิดใช้งานเกมไม่ถูกต้อง
    วิธีการแก้ปัญหา: ตรวจสอบตัวเลือกการเปิดใช้งานเกมในแท็บการกำหนดค่าในส่วนผู้ดูแลแอปของเกมของคุณ https://partner.steamgames.com/apps/config/<YourGameAppId>
  • คุณไม่ได้เป็นเจ้าของไอดีดีโปสำหรับเกมดังกล่าว
    วิธีการแก้ปัญหา: ตรวจสอบให้มั่นใจว่าได้เพิ่มดีโปที่จำเป็นไปยังการสมัครสมัครเพื่อการพัฒนาแล้ว (กรุณาดู การแก้ไขแพ็กเกจ สำหรับรายละเอียดเพิ่มเติม)

"รหัสข้อผิดพลาด 15" ขณะเปิดใช้งาน

This is the CEG servers rejecting the request to CEG the exe. Check the release state on the game page. If it is not 'playable', you will need to request Steam keys that override the release state.

"เซิร์ฟเวอร์ Steam ไม่พร้อมที่จะจัดการคำร้องขอของคุณ... รหัสข้อผิดพลาด (2)" ขณะเปิดใช้งาน

This is the CEG servers failing to find a matching CEG exe. Double check that you have a working CEG executable on the CEG tab of your app admin. Click the 'status' button to make sure that it's propped.

ฉันจำไม่ได้ว่าคำสั่ง steamcmd คืออะไรหรือทำงานอย่างไร

Use the 'find' command in steamcmd to search for any steamcmd command. It will do partial matching on the command name and it will list out the command syntax.
Steam>find build_installer ConVars: Commands: build_installer : <project file> <target folder> <beta key> <beta pwd>