ฉันมีเกมออนไลน์ที่ผู้เล่นสามารถทำให้โลกเป็นรูปร่างในทางใดทางหนึ่งเช่น ที่อยู่อาศัยของ Ultima Online ที่ซึ่งคุณสามารถสร้างบ้านของคุณได้โดยตรงบนบางส่วนของแผนที่โลก สิ่งเหล่านี้คือการเปลี่ยนแปลงที่ควรมีอยู่ตลอดเวลาซึ่งเป็นส่วนหนึ่งของโลกที่ยังคงอยู่
ในขณะเดียวกันทีมออกแบบกำลังเพิ่มเนื้อหาใหม่และแก้ไขเนื้อหาเก่าเพื่อปรับปรุงและขยายเกมสำหรับผู้เล่นใหม่ พวกเขาจะทำสิ่งนี้บนเซิร์ฟเวอร์การพัฒนาก่อนในระหว่างการทดสอบและหลังจากนั้นจะต้องรวมงานของพวกเขาเข้ากับการทำงานของผู้เล่นบนเซิร์ฟเวอร์สด
สมมติว่าเราแก้ไขปัญหาการออกแบบเกม - เช่น ผู้เล่นสามารถสร้างได้เฉพาะในพื้นที่ที่กำหนดเท่านั้นดังนั้นพวกเขาจึงไม่เคยขัดแย้งกับการแก้ไขนักออกแบบ - วิธีใดที่ดีในการจัดการข้อมูลหรือจัดโครงสร้างข้อมูลเพื่อหลีกเลี่ยงความขัดแย้งเมื่อข้อมูลนักออกแบบใหม่ถูกรวมเข้ากับข้อมูลเครื่องเล่นใหม่
ตัวอย่างที่ 1: ผู้เล่นสร้างไอเท็มชนิดใหม่และเกมกำหนด ID 123456 ให้กับมัน อินสแตนซ์ของไอเท็มนั้นอ้างอิงกลับไปที่ 123456 ตอนนี้ลองนึกภาพว่านักออกแบบเกมมีระบบที่คล้ายกันและผู้ออกแบบสร้างรายการใหม่ด้วยหมายเลข 123456 สิ่งนี้สามารถหลีกเลี่ยงได้อย่างไร
ตัวอย่างที่ 2: ใครบางคนสร้าง mod ที่เป็นที่นิยมซึ่งทำให้มังกรของคุณเน้นเสียงภาษาฝรั่งเศส มันมีสคริปต์ที่มีวัตถุใหม่ที่เรียกว่าassignFrenchAccent
พวกเขาใช้ในการกำหนดสินทรัพย์เสียงใหม่ให้กับวัตถุมังกรแต่ละ แต่คุณกำลังจะปรับใช้ DLC "Napoleon vs Smaug" ของคุณซึ่งมีชื่อเดียวกัน - คุณจะทำสิ่งนี้ได้อย่างไรโดยไม่มีปัญหาการบริการลูกค้ามากมาย?
ฉันคิดถึงกลยุทธ์ต่อไปนี้:
- คุณสามารถใช้ไฟล์ / ไดเร็กตอรี่ / ฐานข้อมูลแยกกัน 2 ตัว แต่การอ่านของคุณนั้นซับซ้อนอย่างมาก "แสดงรายการทั้งหมด" จะต้องอ่านหนึ่งรายการในฐานข้อมูลผู้ออกแบบและอีกหนึ่งรายการที่อ่านบนฐานข้อมูลผู้เล่น (และยังคงต้องแยกความแตกต่างระหว่าง 2 อย่างใด)
- คุณสามารถใช้เนมสเปซได้ 2 แบบภายในร้านเดียวกันเช่น การใช้สตริงเป็นคีย์หลักและนำหน้าด้วย "DESIGN:" หรือ "PLAYER:" แต่การสร้างเนมสเปซเหล่านั้นอาจไม่ใช่เรื่องเล็กน้อยและการอ้างอิงไม่ชัดเจน (เช่นใน RDBMS คุณอาจไม่สามารถใช้สตริงเป็นคีย์หลักได้อย่างมีประสิทธิภาพคุณสามารถใช้จำนวนเต็มและจัดสรรคีย์หลักทั้งหมดที่อยู่ด้านล่างของจำนวนที่แน่นอนเช่น 1 ล้านเพื่อเป็นข้อมูลผู้ออกแบบและทุกอย่างที่อยู่เหนือจุดนั้น ข้อมูลผู้เล่น แต่ข้อมูลนั้นไม่สามารถมองเห็นได้ใน RDBMS และลิงค์สำคัญต่างประเทศจะข้าม 'หาร' ซึ่งหมายถึงเครื่องมือและสคริปต์ทั้งหมดต้องทำงานอย่างชัดเจน)
- คุณสามารถทำงานบนฐานข้อมูลที่ใช้ร่วมกันแบบเรียลไทม์ได้ แต่ประสิทธิภาพอาจไม่ดีและอาจเพิ่มความเสี่ยงต่อความเสียหายของข้อมูลผู้เล่น นอกจากนี้ยังไม่ขยายไปถึงเกมที่รันบนเซิร์ฟเวอร์มากกว่า 1 เครื่องที่มีข้อมูลโลกแตกต่างกัน
- ... ความคิดอื่น ๆ
มันเกิดขึ้นกับฉันว่าแม้ว่านี่จะเป็นปัญหาหลักสำหรับเกมออนไลน์ แต่แนวคิดก็อาจนำไปใช้กับ modding ได้เช่นกันซึ่งชุมชนก็สร้าง mods ในเวลาเดียวกันกับที่ผู้พัฒนาเกมทำการปะ มีการใช้กลยุทธ์ใด ๆ ที่นี่เพื่อลดโอกาสที่จะเกิดการแตกหักเมื่อมีการอัพเดทใหม่หรือไม่?
ฉันยังติดแท็กสิ่งนี้เป็น "การควบคุมเวอร์ชัน" เพราะในระดับหนึ่งนั่นคือสิ่งนี้ - การพัฒนาข้อมูล 2 สาขาที่ต้องรวมเข้าด้วยกัน บางทีข้อมูลเชิงลึกบางอย่างอาจมาจากทิศทางนั้น
แก้ไข - ตัวอย่างบางส่วนที่เพิ่มด้านบนเพื่อช่วยชี้แจงปัญหา ฉันเริ่มคิดว่าปัญหานี้เป็นหนึ่งในการกำหนดเนมสเปซจริง ๆ ซึ่งสามารถนำไปใช้ในร้านค้าผ่านคีย์ผสม อย่างน้อยก็เป็นการรวมกลยุทธ์เข้าด้วยกัน แต่อาจมีทางเลือกอื่นที่ฉันไม่เห็น