การจัดเก็บพิกัดของทุกวัตถุในฝั่งเซิร์ฟเวอร์ใน MMO


12

ใน MMORPG:

เป็นเรื่องปกติหรือเป็นไปได้หรือไม่ที่จะเก็บพิกัดของต้นไม้ทุกต้นพุ่มไม้ ฯลฯ ในฝั่งเซิร์ฟเวอร์เพื่อตรวจจับการชนกันของข้อมูล?

ถ้าเป็นเช่นนั้นจะมีวิธีใดในการจัดเก็บพิกัดจำนวนมาก (โครงสร้างข้อมูลและการจัดการปัญหาด้านประสิทธิภาพ)

ถ้าไม่การตรวจจับการชนกันประเภทนี้ทำได้โดยสิ้นเชิงในฝั่งไคลเอ็นต์โดยที่เซิร์ฟเวอร์ไม่ได้ทำการตรวจสอบเลยหรือไม่?

หรือมีพื้นกลางกับลูกค้าตรวจสอบการชนกันและการตรวจสอบเซิร์ฟเวอร์? ถ้าเป็นเช่นนั้นเซิร์ฟเวอร์จะตรวจสอบวิธีเดียวกันโดยไม่เก็บพิกัดไว้ในเซิร์ฟเวอร์ด้วยหรือไม่


2
ฉันไม่รู้เกี่ยวกับเรื่องนี้มากพอที่จะให้คำตอบที่ดี แต่ถ้าคุณทำการตรวจจับการชนเฉพาะที่ฝั่งไคลเอ็นต์ cheaters จะหาวิธีที่จะตัดผ่านทุกสิ่งหรือหยิบ powerups ที่อยู่ห่างออกไปหลายไมล์
Peethor

2
-1 "คำถามไม่แสดงความพยายามในการวิจัยใด ๆ "
Vaillancourt


จริงอาจจะไม่ซ้ำกันผมได้เรียนรู้เกี่ยวกับรูปแบบอวกาศพาร์ทิชันและโครงสร้างข้อมูลอวกาศว่าคำถามอื่น ๆ ไม่ได้มี
Sajith Dilshan ออสการ์

คำตอบ:


15

เป็นอิสระจากความเป็นไปได้ (ใช่ขึ้นอยู่กับขนาด) มักจะมีวิธีที่ดีกว่าหรือง่ายกว่า

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

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

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


7

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

เนื่องจากวัตถุส่วนใหญ่ใน MMO ไม่ย้ายคุณยังสามารถดำเนินการผ่านการประมวลผลล่วงหน้าที่วัตถุถูกใช้เพื่อสร้างต้นไม้ตรวจสอบการชนกัน

รอยเท้าหน่วยความจำไม่ใช่ปัญหาใหญ่ที่นี่ตราบใดที่คุณใช้อินสแตนซ์ การจัดเก็บสองสามลอยต่อวัตถุไม่มีอะไรในรูปแบบที่ยิ่งใหญ่ของสิ่งต่าง ๆ พีซีขนาดเล็กในปัจจุบันจะมี 4 กิกะไบต์ในขณะที่การจัดเก็บตำแหน่งเพียง 3 ลอย (หรือ 3 คู่) - ซึ่งจะช่วยให้วัตถุที่เก็บไว้หลายล้านในเกมได้อย่างง่ายดาย

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

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

คุณต้องการใช้เซิร์ฟเวอร์สำหรับสิ่งที่เชื่อถือได้เท่านั้น ตัวอย่างเช่นคุณจะทำการค้นหาเส้นทางเฉพาะบนไคลเอนต์เนื่องจากคุณไม่สามารถโกงได้โดยใช้เส้นทางที่มีประสิทธิภาพน้อยกว่า!


ขอบคุณสำหรับเคล็ดลับเกี่ยวกับรูปแบบการแบ่งพื้นที่พิเศษฉันได้เรียนรู้สิ่งใหม่
Sajith Dilshan Jamal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.