2010-03-03 29 views
3

我正在開發基於圖塊的MMORPG,我遇到了問題。基於圖塊的MMORPG移動協議

每個用戶總是有一個固定的位置(一個瓷磚),所以其他用戶可以在那裏看到他,並且不能移動到該瓷磚。所以每個圖塊中只有一個對象或用戶。

如果用戶變得不可見,其餘用戶看不到他,但他們仍然無法移動到他的圖塊。

我的問題是,如果客戶知道所有用戶的位置(即使是不可見的)?這種方法的問題在於有些用戶設法破解客戶端並看到不可見的用戶。

我的一個想法是,客戶端不應該知道用戶的位置,並且在移動之前詢問服務器是否有希望移動到的瓦片可用,但問題是我們正在進行的延遲。可以使用TCP/IP構建客戶端/服務器協議。

+0

是否還有其他原因,用戶可能會阻礙移動到除了被佔用的某個瓷磚? – aefxx 2010-03-03 00:56:50

+0

不,沒有。它可以被「阻塞」對象或用戶佔用,只有這個。 – alcuadrado 2010-03-03 01:04:01

回答

4

你一定要按照第二種方法來安全地使用MMORPG。

實際上邏輯應該完全分開在客戶端和服務器之間。雖然客戶端應該只是

  • 一個「視覺的東西」,也就是能夠呈現世界
  • 輸入接口,讓玩家執行動作

服務器應該照顧一切的。 。

因此,舉例來說,你應該在處理類似的動作:

  • 用戶嘗試移動玩家在客戶端
  • 客戶端發送的數據包,「移動請求」給服務器
  • 服務器檢查舉動是合法的,並更新其內部地圖,根據它
  • 如果此舉是法律只是給所有客戶端更新的狀態(新位置)
  • 如果此舉是非法的,只是警告說,試圖做到這一點

這個方法的更重要的客戶是:客戶是不負責的實際將玩家移動到新的位置只是收到一個新的地圖狀態

忘記:

  • 客戶問,如果此舉是合法
  • 如果服務器說是,那麼客戶端更新位置
+0

太棒了,這是我想要實現的方法,但用戶輸入和移動之間有一個很大的延遲,至少在TCP中。對於像這樣的東西使用UDP是不安全的,不是嗎? – alcuadrado 2010-03-03 01:09:09

+0

UDP不是不安全的,它只是不可實現的..它取決於你想傳輸什麼樣的信息。例如,如果您正在從服務器向客戶端發送地圖狀態,則每秒發送10次只需使用UDP發送即可。它們中的一些可能會在旅行中丟失,但它不會影響真實的遊戲。TCP用於一切,因此如果協議被壓縮(自適應huffman?)並且ping可接受,它應該工作得相當快。 – Jack 2010-03-03 01:14:50

+1

通常,對於'正常操作',你的客戶端會認爲該命令會通過,並相應地更新UI。然後,如果服務器發回一個「你發送了一些無效的命令,這是地圖看起來是什麼」,UI將補償(通常以一些生澀的不吸引人的方式,但是) – Tanzelax 2010-03-03 01:15:56