ใครคำนวณ AI ใน MMO ได้บ้าง


30

ฉันกำลังสร้าง MMO และต้องการเพิ่ม NPC สิ่งที่ฉันไม่รู้การออกแบบขั้นพื้นฐาน การคำนวณลูกค้าหรือเซิร์ฟเวอร์คืออะไร? ฉันจะเข้าใจเซิร์ฟเวอร์ที่คำนวณเหตุการณ์และปฏิกิริยาต่าง ๆ แต่เมื่อมันลงไปที่การบอกตำแหน่งและตำแหน่งและการเคลื่อนไหวของผู้เล่น

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


2
ระวังคำศัพท์ของคุณ - NPC ไม่ใช่ผู้เล่นตัวอย่างเช่น
Kylotan

คำตอบ:


25

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

Badumna ของ Scalify ( http://www.scalify.com/badumna.php ) พยายามที่จะ off-load ส่วนหนึ่งของมันให้กับลูกค้าเพื่อที่พวกเขาจะได้ทำการคำนวณฝั่งไคลเอ็นต์และส่งไปให้กัน ข้อมูลบางอย่างจะถูกส่งไปยังเพียร์ผู้มีอำนาจเพื่อตรวจสอบความถูกต้องก่อนส่งผ่านไปยังลูกค้าเช่นเดียวกับเซิร์ฟเวอร์เฉพาะ ปัญหาคือข้อมูลทั้งหมดในเกมที่มีผู้เล่นหลายคนจะต้องส่งผ่านเพียร์ที่มีสิทธิ์หากคุณต้องการป้องกันการโกง ฉันนำ Badumna ขึ้นมาเพราะมันดูใกล้เคียงที่สุดกับสิ่งที่คุณอาจต้องการ แต่ถึงแม้มันจะไม่สามารถจับคนขี้โกง - มันอาจจะจับได้ แต่สิ่งที่สำคัญ (เช่นทุกอย่างสวยมาก) จะต้องทำเซิร์ฟเวอร์ - ด้าน

ฉันอาจขยายตัวใน Badumna เพราะมันอาจเป็นสิ่งที่คุณจะพบว่ามีประโยชน์ (แต่ฉันขอให้คุณลองพิจารณาอีกครั้งในการโหลดสิ่งที่มีความสำคัญต่อลูกค้าเพราะลูกค้าจะโกง)

Badumna เสนอสถาปัตยกรรมแบบผสมผสานสำหรับการดำเนินการด้านข้อมูล มันให้การควบคุมอย่างสมบูรณ์แก่นักพัฒนาในการตัดสินใจสิ่งที่สำคัญ (และต้องได้รับการยืนยัน) และสิ่งที่ไม่ได้ (และสามารถส่งได้โดยเครือข่ายการกระจายอำนาจ)

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

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

ฉันไม่ได้สำรวจ Badumna มากขนาดนั้นดังนั้นอาจมีปัญหาและฟีเจอร์ที่ฉันไม่รู้ แต่อย่างน้อยฉันก็เห็นคร่าวๆคร่าวๆ

tl; dr: ไคลเอนต์ควรเป็นคีย์บอร์ดและเม้าส์ถึงอินเทอร์เน็ต


9

คำตอบสั้น ๆ คือสำหรับ MMO มาตรฐานการคำนวณ AI จะดำเนินการโดยเซิร์ฟเวอร์เสมอ

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


5

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

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

ซึ่งเป็นความอัปยศจริง ๆ เพราะกระจาย AI ไปยังไคลเอนต์อาจส่งผลกระทบต่อ scalability


2
การเข้ารหัสส่วนใหญ่จะไม่มีประโยชน์ - ไคลเอนต์จะต้องสามารถถอดรหัสสิ่งที่ส่งไปและลูกค้าสามารถออกแบบวิศวกรรมย้อนกลับ การเข้ารหัสที่ดีที่สุดจะทำให้คนที่โกงลูกค้าช้าลง
อดัม

2

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


1

เพื่อสร้างคำตอบอื่น ๆ กลยุทธ์ "การถ่ายและการยืนยัน" อาจมีประโยชน์แน่นอนในสถานการณ์ที่การตรวจสอบง่ายกว่าการคำนวณดั้งเดิม

ตัวอย่างเช่นหากคุณมีไคลเอ็นต์ที่ทำ A * pathfinding และส่งผลลัพธ์ไปยังเซิร์ฟเวอร์เซิร์ฟเวอร์ทั้งหมดจะต้องทำคือตรวจสอบว่าก) เส้นทางนั้นถูกต้องและ b) ไม่มีเส้นทางที่สั้นกว่า การตรวจสอบความถูกต้องของพา ธ นั้นง่ายและการตรวจสอบความเหมาะสมอาจทำได้ง่ายกว่าการค้นหาพา ธ ที่ดีที่สุดที่จะเริ่มต้นเนื่องจากตอนนี้คุณมีขอบเขตบนของความยาวของพา ธ ที่คุณต้องตรวจสอบ (โดยเฉพาะอย่างยิ่งหากลูกค้าส่งคืนเส้นทางแบบเส้นตรงจะเห็นได้ชัดว่าเหมาะสมที่สุดตราบใดที่ถูกต้อง) ตามความจริงฉันไม่มีความคิดว่าเคล็ดลับเฉพาะนี้จะมีประโยชน์ในทางปฏิบัติ แต่ฉันไม่เห็นอุปสรรคพื้นฐาน เพื่อมัน

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


1

อาจเป็นการดีที่สุดที่จะมี AI ประจำและการคำนวณเกมที่สำคัญบนฝั่งเซิร์ฟเวอร์ในขณะที่จัดการกับการดำเนินการที่ไม่เกี่ยวกับเกมที่ซับซ้อนบนฝั่งไคลเอ็นต์

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

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

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

ในกรณีที่ง่ายที่สุดคุณจะทำให้ไคลเอนต์ซิงค์กับตำแหน่งที่เซิร์ฟเวอร์คาดว่าเซิร์ฟเวอร์จะตรวจสอบจากนั้นไคลเอ็นต์จะคำนวณอีกครั้ง

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