Nên phát hiện va chạm phía máy chủ hoặc hợp tác giữa máy khách / máy chủ?


24

Tôi đang làm việc trên một trò chơi trực tuyến sẽ có quá trình xử lý phát hiện va chạm rất nặng. Các mô hình người chơi sẽ va chạm với những người chơi khác, mob, cấu trúc, địa hình và các vật thể rắn chỉ tồn tại phía máy chủ (không được lưu trữ trong các tệp dữ liệu khách hàng).

Vì mục đích bảo mật, tôi có nên thực hiện tất cả phía máy chủ phát hiện va chạm không? Hoặc tôi nên để khách hàng phát hiện và để máy chủ theo dõi bằng cách nào đó? Tôi cảm thấy như nó sẽ là quá nhiều cho máy chủ tự làm (Tôi đang thiết kế công cụ cho hàng trăm người chơi trên một máy chủ).

Có ai biết MMO chính thống làm điều đó như thế nào không? Tôi biết rằng hầu như tất cả các MMO hiện nay đều dễ bị tấn công vật lý và thường xử lý chúng bằng cách phát hiện các vụ hack và cấm người. Tôi thà rằng các hack không hoạt động, ít nhất là cho các thành phần vật lý.

Câu trả lời:


21

Có vẻ như câu trả lời rõ ràng là thực hiện hầu hết phía máy khách phát hiện của bạn (cho độ mượt), và sau đó bạn nội suy với những gì máy chủ nói nếu máy khách của bạn ở quá xa. Máy chủ sẽ đánh dấu ở tốc độ ít thường xuyên hơn máy khách (như, giả sử, 10hz), và có lẽ cần phải có một số "trình phát này cơ bản có thể đạt được khi anh ta nói rằng anh ta hiện đang ở từ vị trí được biết đến cuối cùng", ngụ ý một số loại giải pháp lưới điều hướng và tìm đường.

Điều đó có thể rất chậm tùy thuộc vào nhu cầu của bạn là gì. Bạn có thể đưa ra quyết định thiết kế, ví dụ, không quan tâm đến sự va chạm giữa người chơi và người chơi trên máy chủ. Hầu hết các trò chơi, theo như tôi biết, thậm chí không quan tâm đến điều đó trên máy khách. Nó thực sự phụ thuộc vào nhu cầu của bạn là gì.

Nhưng quy tắc của ngón tay cái là bạn không bao giờ nên tin tưởng khách hàng. Nếu tác động đến trò chơi, ít nhất bạn phải xác minh nó trên máy chủ.


24

Vì vậy, một vài câu trả lời ở đây.

  • Va chạm phía khách hàng là lý tưởng từ quan điểm hiệu suất và từ quan điểm cảm nhận của người chơi. Bạn không muốn va chạm bị lag, bạn muốn người chơi chạy vào một vật thể rắn và dừng lại. Nếu bạn làm điều đó ở phía máy chủ, bạn sẽ nhìn vào các cầu thủ dây cao su ở khắp mọi nơi hoặc khiến người chơi bị chậm trễ đáng chú ý khi họ cố gắng di chuyển. Mojo xấu, trong cả hai trường hợp.

  • Xung đột phía máy chủ là lý tưởng từ quan điểm bảo mật. Khách hàng của bạn càng đến gần "thiết bị đầu cuối câm", trò chơi của bạn càng ít bị khai thác. Có một lý do mà không ai chơi MUD dựa trên văn bản phải lo lắng về các vụ treo tường hoặc tốc độ - đó là vì khách hàng không làm gì đáng nói.

  • Làm cả hai là "lý tưởng" trong hầu hết mọi trường hợp. Hãy để khách hàng làm việc của họ, sau đó nhân đôi trên máy chủ để đảm bảo mọi người không gian lận. Những nhược điểm là phức tạp, đồng bộ hóa (chính xác những gì làm bạn nếu hai không đồng ý), và sử dụng máy chủ CPU tuyệt.

  • Những gì tôi khuyên là nên làm nó gần như hoàn toàn phía khách hàng. Máy khách có thẩm quyền về vị trí của nó, giống như trong một hệ thống phía máy khách đầy đủ và thực hiện tất cả xử lý riêng. Trên hết, thỉnh thoảng bạn có máy chủ kiểm tra nhiều người chơi khác nhau. Giữ máy chủ tải thấp, nhưng điều này sẽ thoát khỏi những kẻ gian lận nhanh một cách đáng ngạc nhiên.

Ngoài ra, bây giờ hãy thực hiện phía máy khách, thêm xác minh phía máy chủ vào một thời điểm nào đó trong tương lai nếu trò chơi của bạn đủ phổ biến để mọi người gian lận trong đó. Mà, thành thật mà nói, có lẽ nó sẽ không, vì vậy không có thời gian để dành thời gian cho người viết mã cho nó ngay bây giờ.


3

World of Warcraft không phát hiện va chạm giữa người chơi / mob. Có thể có hoặc không có lý do kỹ thuật đằng sau quyết định này, nhưng thực sự, đây phải là một quyết định thiết kế trò chơi nhiều hơn là một quyết định kỹ thuật:

Hãy tưởng tượng nó có thể khai thác như thế nào trong các tình huống giữa người chơi và người chơi. Hoặc việc sử dụng ngân hàng / nhà đấu giá / hộp thư sẽ khó đến mức nào nếu những người chơi khác (thường không hoạt động) chặn chuyển động của bạn!

Đối với phát hiện va chạm dựa trên máy khách và máy chủ - thực sự, trừ khi chuyển động rất chậm, nó phải chủ yếu là phía máy khách, vì vậy nó có vẻ phù hợp với từng máy khách. Phản ứng va chạm chậm chạp / chậm trễ và / hoặc va chạm với các vật thể 'vô hình' sẽ khá khó chịu.


1
Mặc dù câu hỏi không phải là về việc có hay không va chạm giữa người chơi và mob / người chơi có phải là thiết kế trò chơi tồi hay không, tôi sẽ khuyên bạn nên xem các trò chơi như Darkfall Online nơi mọi thứ đều ổn định. Nó bổ sung một chiều hướng mới cho trò chơi và cho phép bạn làm những điều rất thú vị với trò chơi. Tôi sẽ không lo lắng về việc người chơi chặn những thứ như ngân hàng trong trò chơi của tôi bởi vì sẽ luôn có một khoảng trống nhỏ nơi người chơi có thể nhìn xuyên qua để mở đối tượng.
BarakatX2

Bạn có thể khiến người chơi bị chặn bởi bất cứ thứ gì nó có thể tấn công và bất cứ thứ gì họ không thể tấn công họ chỉ có thể đi qua. Chẳng hạn, người chơi sẽ không thể đi qua mob vì họ có thể tấn công mob. Họ cũng sẽ không thể đi qua người chơi trong khi họ được gắn cờ cho PVP vì họ được gắn cờ PVP. Một người chơi không được gắn cờ PVP có thể đi qua bất kỳ người chơi nào, ngay cả những người không được gắn cờ PVP, vì họ không thể tấn công những người chơi đó.
Azaral

2

Nếu bạn lo ngại về các vụ hack và điều đó có tác động lớn trong trò chơi thì câu trả lời là CÓ.

Trong trò chơi dựa trên trình duyệt của tôi là loại trò chơi "xây dựng thành phố", tôi không bận tâm về các vụ hack vì công cụ máy khách sẽ không bị lỗi khi tôi bố trí trạng thái trò chơi đã lưu.

Tuy nhiên, nó có khả năng lạm dụng lối chơi vì người chơi cần phải tiêu tiền xu trò chơi (hoặc tiền mặt cao cấp) để mở rộng khu vực có thể chơi để xây dựng nhiều nhà / tòa nhà hơn. Vì vậy, tôi sẽ thực hiện một kiểm tra đơn giản về số lượng gạch bị chiếm bởi tòa nhà mới được thêm vào đó có bao nhiêu gạch miễn phí có sẵn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.