看板 GameDesign 關於我們 聯絡資訊
LayerZ: 認真回一下,基本上是不可能做到前後端同步的,如果做得到 01/31 14:06
LayerZ: 就已經突破雲端遊戲瓶頸了 01/31 14:06
LayerZ: 一般有兩種做法,一種是控制變數常數,Client端物理表演, 01/31 14:07
LayerZ: Server端驗算 (目前常見短連線遊戲),一種是資料Server端 01/31 14:07
LayerZ: 為主,Client僅依照Server端送下來的資訊作出表演,如何用 01/31 14:08
LayerZ: 這些資訊讓表演逼真是另一個領域了 01/31 14:08
LayerZ: (MMO之類) 01/31 14:08
LayerZ: 至於你說的作弊,作弊抓的到就好,指要讓他正常遊玩不會出 01/31 14:09
LayerZ: 問題就沒關係,至於玩家不管用任何手段作弊,只要server端 01/31 14:10
LayerZ: 抓得出來(各種驗算) 就能即時處理掉 01/31 14:10
>>請問你說的變數常數主要是控制哪些部分?(是指物理參數嗎?) >>目前想到的方法好像是比較偏向你說的方法2 >>我打算在Client跟Server都用Box2D去創建一個遊戲世界(world) >>並且讓Client跟Server端的world盡可能保持在一致的狀態 >>當玩家進行遊戲操作後 >>Client會將該操作的RPC封包送至後端 >>後端接收封包後後產生結果(使用物理引擎計算路徑並且包含亂數因素)並回傳前端作演示 >>但這樣似乎有可能會碰到浮點數精準的問題(?) 基本上不會在後端用物理引擎的.. 假如有同時10000人遊玩,那麼你的後端就要同時模擬10000場遊戲,很明顯是不切實際的 >>另外場面上如果有移動性的Body >>似乎也會導致無法單靠物理參數就導出同樣的結果 >> 移動性? 從什麼時候開始移動,從哪裡開始,方向往哪裡,什麼時候轉彎 甚至隨機移動的種子是多少,都是可以固定下來的常數 舉個例子,高爾夫球遊戲,理論上只要角度跟力道兩個變數不變,打出去的結果就要是 固定的,而玩家怎麼打就是這遊戲的變數 (量角器拿出來 因此理論上,控制好常數與變數,就能知道結果,甚至將結果記錄下來,後來的用查表法 直接給你答案 ___ 不過上面是理論上的東西,實務上,後端真的需要知道精確的結果嗎,驗證的時候也不用 到100%精確,只要能確定是否合法就好 假設有個遊戲 分數落在 0~100分之間,突然來個10000分的肯定有問題 (異常封包) 平均分數60~80,突然有玩家拿個100分再來查也沒關係,甚至不需要去查 為什麼? 你要去靠動作查玩家怎麼達到的,那玩家直接作弊做出能達到的動作,你在後端 就查不到任何東西 (詳見FPS外掛戰爭,可以另開一個專題了XDD) -- 昨天沒說完,補充一下 你說你要對抗作弊,作弊也有很多形式不能一概而論,你還是要有個目標才能對抗 1.封包修改 「所有的封包在client做完運算與表演後,Server都要驗證」 這是入門一定要學的觀念,完全不該犯的錯誤 舉個例子 GTA V 原本我覺得他們規模可以超過 Diablo 的,但是被作弊毀了 一顆手榴彈可以炸毀城市中所有的人,可以生成任意物件,甚至改變自己的數據 會發生這種事情,代表他可以傳任何封包給Server端而沒有驗證,否則他能作的 頂多改變他自己的Client資料,自己顯示自己爽而已 2.DDoS 這個要說作弊也不太對,但是有外掛瘋狂送合法封包過來要你處理,你的後端也會掛掉 基本上是能做到的例如,讓比賽直接中斷,或是直接勒索遊戲商付錢 所以還是要有觀念的東西,正式的DDoS攻擊應該會有MIS搞防火牆去擋 但是設計面上還是要考量到封包數量,跟過多過大封包的處理,不過新手的話遇到再說啦 ...想到了啦,天堂加速器咩,加速Client端瘋狂送正常封包Server端都當正常封包處理 3.客戶端作弊 舉個例子 「自動瞄準」 這種類型是Client端另外執行程式,把Client端的資料當成輸入,作出槍槍暴頭的玩家 行為,因此Server端收到的東西是完全正常的 後續遊戲商與反外掛的戰爭可以再寫個10萬字吧...有機會再說 -- 明知道這是不可能的願望 卻如同烙印的爪痕沁入大地 假如 可以實現的話 將我的存在剝奪 捨棄也無妨 祈禱著 祈求著 幻想也好 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.240.115.198 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1612201727.A.23E.html ※ 編輯: LayerZ (59.124.224.47 臺灣), 02/02/2021 09:41:40
v86861062: :D 02/02 12:17
SecondRun: 我也在想多幾個玩家他server就要死了吧XD 02/05 00:59