ควรทำการตรวจจับการชนกันของเซิร์ฟเวอร์หรือทำงานร่วมกันระหว่างไคลเอนต์ / เซิร์ฟเวอร์หรือไม่


24

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

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

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

คำตอบ:


21

ดูเหมือนว่าคำตอบที่ชัดเจนคือทำการตรวจหาไคลเอ็นต์ส่วนใหญ่ของคุณ (เพื่อความราบรื่น) จากนั้นคุณสอดแทรกสิ่งที่เซิร์ฟเวอร์แจ้งถ้าไคลเอนต์ของคุณอยู่ไกลเกินไป เซิร์ฟเวอร์จะติ๊กในอัตราที่น้อยกว่าไคลเอนต์ (เช่นพูด 10hz) และอาจต้องมีพื้นฐาน "ผู้เล่นนี้สามารถเข้าถึงที่ซึ่งเขาบอกว่าขณะนี้เขามาจากรหัสตำแหน่งที่รู้จักล่าสุดของเขา" ซึ่งหมายถึง nav-type solution และการหา path

ซึ่งอาจช้าลงอย่างเด็ดขาดขึ้นอยู่กับความต้องการของคุณ คุณอาจตัดสินใจออกแบบเช่นไม่สนใจการชนกันของผู้เล่นผู้เล่นบนเซิร์ฟเวอร์ เกมส่วนใหญ่เท่าที่ฉันรู้ไม่สนใจเกี่ยวกับเรื่องนี้กับลูกค้า ขึ้นอยู่กับความต้องการของคุณ

แต่กฎง่ายๆคือคุณไม่ควรไว้วางใจลูกค้า หากส่งผลกระทบต่อการเล่นเกมคุณต้องยืนยันอย่างน้อยบนเซิร์ฟเวอร์


24

ดังนั้นคำตอบไม่กี่ที่นี่

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

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

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

  • สิ่งที่ฉันแนะนำคือทำเกือบทุกฝั่งไคลเอ็นต์ ลูกค้ามีอำนาจเกี่ยวกับตำแหน่งของตนเช่นเดียวกับในระบบฝั่งไคลเอ็นต์แบบเต็มและทำการประมวลผลของตัวเองทั้งหมด ยิ่งไปกว่านั้นคุณสุ่มให้เซิร์ฟเวอร์ตรวจสอบผู้เล่นต่าง ๆ เป็นระยะ ๆ รักษาเซิร์ฟเวอร์ให้โหลดอยู่ในระดับต่ำ แต่สิ่งนี้จะทำให้การโกงคนขี้โกงรวดเร็วขึ้นอย่างน่าประหลาดใจ

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


3

World of Warcraft ไม่ได้ทำการตรวจจับการชนกันระหว่างผู้เล่น / mobs อาจมีหรือไม่มีเหตุผลทางเทคนิคที่อยู่เบื้องหลังการตัดสินใจนี้ แต่จริงๆแล้วมันต้องมีการตัดสินใจออกแบบเกมมากกว่าการตัดสินใจทางเทคนิค:

ลองนึกภาพว่าการเอาเปรียบผู้เล่นกับผู้เล่นทำได้อย่างไร หรือยากที่จะใช้ธนาคาร / บ้านประมูล / กล่องจดหมายหากมีผู้เล่นคนอื่น ๆ (ที่ไม่ได้ใช้งาน) บล็อกการเคลื่อนไหวของคุณ!

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


1
แม้ว่าคำถามจะไม่เกี่ยวกับว่าการปะทะระหว่างผู้เล่นกับกลุ่มผู้เล่นหรือผู้เล่นเป็นการออกแบบเกมที่ไม่ดี แต่ฉันขอแนะนำให้ดูเกมเช่น Darkfall Online ที่ทุกอย่างมีความมั่นคง มันเพิ่มมิติใหม่ให้กับการเล่นเกมและช่วยให้คุณทำสิ่งที่น่าสนใจมากกับเกม ฉันจะไม่กังวลเกี่ยวกับผู้เล่นที่บล็อกสิ่งต่าง ๆ เช่นธนาคารในเกมของฉันเพราะจะมีช่องว่างเล็ก ๆ ที่ผู้เล่นสามารถมองเห็นผ่านเพื่อเปิดวัตถุ
BarakatX2

คุณสามารถให้ผู้เล่นถูกบล็อกโดยสิ่งใดก็ตามที่มันสามารถโจมตีได้และสิ่งใดก็ตามที่พวกเขาไม่สามารถโจมตีได้ ตัวอย่างเช่นผู้เล่นจะไม่สามารถเดินผ่าน mobs ได้เพราะพวกเขาสามารถโจมตี mobs ได้ พวกเขายังไม่สามารถเดินผ่านผู้เล่นในขณะที่ถูกตั้งค่าสถานะสำหรับ PVP เนื่องจากพวกเขาถูกตั้งค่าสถานะ PVP ผู้เล่นที่ไม่ได้ตั้งค่าสถานะ PVP สามารถเดินผ่านผู้เล่นใดก็ได้แม้กระทั่งผู้ที่ไม่ได้ตั้งค่าสถานะ PVP เพราะพวกเขาไม่สามารถโจมตีผู้เล่นเหล่านั้นได้
Azaral

2

หากคุณมีความกังวลเกี่ยวกับแฮ็กและที่มีผลกระทบอย่างมากในการเล่นเกมแล้วคำตอบคือใช่

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

อย่างไรก็ตามมันอาจเป็นการเล่นเกมในทางที่ผิดเนื่องจากผู้เล่นจำเป็นต้องใช้เหรียญเกม (หรือเงินสดพิเศษ) เพื่อขยายพื้นที่ที่สามารถเล่นได้เพื่อสร้างบ้าน / อาคารเพิ่มเติม ดังนั้นฉันจะใช้การตรวจสอบง่ายๆของจำนวนกระเบื้องที่ครอบครองโดยอาคารที่เพิ่งเพิ่มเข้ามาจะทำให้มีจำนวนกระเบื้องฟรีที่ใช้ได้

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