วิธีการทำนายการเคลื่อนไหวอย่างถูกต้องเมื่อผู้เล่นมองไม่เห็น?


20

ฉันมีเกมที่มีผู้เล่นหลายคนและฉันกำลังทำนายผลฝั่งไคลเอ็นต์ แต่ผู้เล่นบางคนสามารถดื่มยาและมองไม่เห็น ...

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

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

Btw ฉันแก้ไขคำทำนายการเคลื่อนไหวปกติแล้วมันทำงานได้อย่างสมบูรณ์แบบ


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

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

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

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

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

คำตอบ:


30

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

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

ความต้องการภาพเคลื่อนไหวสามารถลบออกได้โดยไม่ปล่อยให้การล่องหนทำงานในระยะใกล้ สิ่งนี้ให้สิ่งจูงใจมากขึ้นกับผู้เล่นที่มองไม่เห็นเพื่อหลีกเลี่ยงการเข้าใกล้ตัวละครอื่น ๆ นี่เป็นวิธีการทั่วไปสำหรับเกมที่ใช้การซ่อนตัวและ AI (แทนที่ "มองไม่เห็น" ด้วย "มองไม่เห็นเป้าหมาย") และสามารถพบได้ในเกม PvP เช่น World of Tanks ไม่จำเป็นต้องกังวลเกี่ยวกับการตอบสนองการชนกันของตัวละครที่มองไม่เห็นถ้าคุณไม่มีสิ่งใดที่มองไม่เห็นอยู่ใกล้คุณพอที่จะชน (ภายในระยะเวลาแฝง)

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

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

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


5
เกม Team Fortress 2 ใช้วิธีแรกนั้น ... หากสายลับที่มองไม่เห็นแตะต้องผู้เล่นอื่นผู้เล่นคนอื่นสามารถเห็นสายลับ (หรือจากด้านหลังอย่างน้อยก็รู้สึกถึงอุปสรรค)
Xantix

4

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


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

สิ่งที่เหลืออยู่ก็คือการส่งการเคลื่อนไหวที่คาดการณ์ไว้ (ทั้งเวกเตอร์เดี่ยวหรืออาร์เรย์เวกเตอร์) และทำการตรวจสอบฝั่งเซิร์ฟเวอร์ หรือเพียงแค่เคลื่อนไหวการแก้ไขดังที่ได้กล่าวมา
Daniel Rusznyak

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

ฉันเห็นว่าการทำงาน แผนที่ที่เล็กที่สุดของฉันมี 1500 ตำแหน่งที่แตกต่างกัน ฉันควรใช้ HMAC ด้วยการเปลี่ยนกุญแจทุกสองสามวินาทีเพื่อป้องกันผู้โจมตีจากการคำนวณตำแหน่งล่วงหน้าทั้งหมดหรือไม่
affiszervmention

5
ไม่โครงการใดที่คุณสามารถสร้างขึ้นมาได้จะไม่ "ปลอดภัย" กับแฮกเกอร์ หากลูกค้าสามารถระบุได้ว่าผู้เล่นจะชนกับตำแหน่งที่กำหนดหรือไม่ก็มีคนสามารถแฮ็คเกมของคุณได้ HMACing ที่มีคีย์การหมุนจะไม่ป้องกันไคลเอนต์จากการทำ 1500 HMACs ต่อวินาที อย่าได้พยายามที่จะทำด้วยตัวเองการเข้ารหัส หากคุณต้องการบรรลุเป้าหมายดั้งเดิมเพียงส่งตำแหน่งผู้เล่นที่มองไม่เห็นไปยังลูกค้าหากพวกเขาอยู่ภายใน 1 หรือ 2 ไทล์ของผู้เล่น จากนั้นคุณสามารถแฮ็คเท่านั้นที่จะรู้ว่ามีใครบางคนอยู่ข้างๆคุณ (ซึ่งไม่มีประโยชน์เพราะคุณสามารถย้ายไปตรวจสอบสิ่งนี้ได้)

2

ถ้าฉันเข้าใจผิดบางอย่างทางออกก็ง่าย อย่าส่งข้อมูลลูกค้าของผู้เล่นที่มองไม่เห็นทั้งหมดเฉพาะผู้ที่อยู่ในระยะที่อาจชนกันภายในขีด จำกัด ของการเคลื่อนไหวในช่วงเวลาที่คาดการณ์ไว้ กล่าวอีกนัยหนึ่งหากลูกค้าคาดการณ์เพียง 200 ms ในอนาคตให้ส่งข้อมูลผู้เล่นที่มองไม่เห็นภายในmax_player_velocity units/sec * 1/5 secหน่วยออกไปเท่านั้น


ฉันเดาว่าสามารถใช้งานได้ แต่เกมของฉันเป็นแบบเรียงต่อกัน (ลืมที่จะพูด)
affiszervmention

ดังนั้นเพียงเปิดเผยผู้เล่นที่มองไม่เห็นในแผ่นติดกันหรือห่างออกไป 2 ก้าวหรืออะไรก็ตาม
...

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