遊戲中有兩大常用同步方式,操作訊框同步和狀態同步,顧名思義,前面那個是同步玩家的操作,後面那個是同步遊戲中物體的狀態數據。
題目中你所描述的這種"你把你要進行什麽操作告訴上帝,上帝把每個人的操作進行運算,然後再告訴你發生了什麽"的同步方式,應該算是同時結合了訊框同步和狀態同步的一種方式。
這種同步方式確實可以很好的解決玩家開穿墻,加速,瞬移之類的作弊,伺服端甚至不需要自己再跑一個遊戲例項做驗證,只需要將每個玩家的操作做整合轉發就可以了,這種同步本地修改遊戲內物理數據沒有意義,因為一旦你的遊戲數據與其它玩家的不同步,那麽你的遊戲就仿佛穿越到了平行宇宙,之後你遊戲裏發生的事情,都和其它玩家的不一樣,在你遊戲場景裏你看對面就像看一個亂創的傻子,當然對面看你也一樣,作弊也就失去了作弊的樂趣了。
但操作訊框同步有幾個非常大的問題,一個是延時,你原生的一些操作打出去以後,必須等待伺服器回應後這個操作才算生效,當然你可以做一些預測幀來緩解這個延遲問題,但是這樣做的難度並不小,因為場景回滾對於訊框同步來說是一個實作起來很麻煩的事情,另一個是運算量,操作幀計算出遊戲場景內的物理結果是一系列非常耗費計算效能的事情,其中可能包括碰撞,空間檢索,AI運算....等等實作,這個也是題目中這種同步面臨的最大問題。最後如果只同步操作不同步狀態,它就需要所以物理引擎是嚴格一致的即同等輸入在不同平台運算的物理結果必須是嚴格的一致的,對於一些需要做不同規範的硬體加速的物理引擎,這個運算一致的效果必須另辟蹊徑來實作,這是工作量大且有不小難度的。
對於一些需要大量物理運算和低延遲要求且能夠跨平台的fps類遊戲,這種開銷是不可接受的。因此這類遊戲往往只同步狀態,伺服器不會同步跑一個遊戲例項。
即發生了什麽當前玩家狀態如何由各個玩家終端來告訴伺服器,比如一枚子彈打出去,有沒有命中對手,是你說的算而不是伺服器說的算,這種穿墻,瞬移可以直接實作---因為根本不需要驗證有沒有障礙物遮擋,你說打中了那就是打中了,一些極端情況下,甚至連開槍都不需要。你說你現在人在哪裏那就在哪裏,至於這個地方你到底到不到的了,也不重要。
對於大多采用狀態同步的網遊來說,作弊能玩的花活兒會比操作訊框同步來說多的多。像是瞬移,自瞄,加速,無敵,無消耗,刷物品...幾乎都是發生在狀態同步的網遊中。
那是不是說訊框同步一定就能避免作弊?
也不是,即使拋開遊戲同步機制,能夠完成的作弊手段也很多。
例如訊框同步同樣很難避免開圖問題,你會發現即使是反作弊做的非常一流的企鵝,在王者和LOL中仍然很難避免開圖作弊,因為操作幀最終還是需要運算成遊戲場景數據的,只要截獲運算的數據,就可以實作隱身透視,消除戰爭迷霧等功能了。
同時在網遊【石器時代】的那段早早期網遊,就已經出現了非常成熟的自動打怪,自動尋路,自動戰鬥等功能,當時的碼農戰鬥力放今天都是妥妥的肌肉猛男,作弊也喜歡粗暴正面剛的方式,在逆向工具鏈缺乏的情況下,透過註入手段和遠端call等方式,實作了上述作弊功能,這些作弊手段不論同步機制如何都是難以避免的,也是國內各種網遊工作室泛濫,遊戲到後期通貨膨脹到經濟崩潰的根本原因。
在各種許可權隔離,反註入,反篡改,反越權讀取等反作弊手段日益成熟的今天,這類直接簡單粗暴的"記憶體掛"也逐年占比減少,各種外掛開始另辟蹊徑。
例如PUBG在前兩年出現了一個"抓包掛"即利用代理或者是廣播技術,從網路流中截取PUBG的通訊封包,然後依據對通訊封包的解包完成對敵方和物品的透視,這個外掛甚至不需要執行在自己電腦上,本地再怎麽做反作弊根本如同隔靴搔癢沒啥用,直到後知後覺的藍洞對封包加密才阻止了這種"中間人"攻擊方式的外掛。
再例如我還碰到過另一個非常騷的外掛,遊戲使用的雖然是訊框同步技術,但大家有沒有想過如何向伺服器證明你是你的問題?因為遊戲伺服端的player ID生成方式不安全可預測且缺乏嚴格的教員機制,導致這個外掛可以直接預測出其它玩家的ID,然後偽裝成其它玩家向伺服器發送幹擾其它玩家操作的操作幀數據,這樣在打團時,對手控制的人物會直接抽搐,簡直把遊戲對戰玩成了CTF。
還有一種更簡單粗暴,使用DoS或DDoS偽裝成對手ID向伺服器發送大量封包觸發伺服端防禦機制導致對方掉線,這種攻擊甚至在一些知名dota類遊戲中都有出現過,一些主播甚至在遊戲直播中"光明正大"用這種方式"懲罰"對手或隊友,在我看來,這和開掛並沒有什麽兩樣。
而近幾年隨著電腦視覺技術的發展,越來越多的外掛用上了YOLO之類的機器學習模型直接從終端影像中檢測目標,實作不需要直接存取行程即可完成自瞄之類的作弊。而操作類的作弊手段,也早已從使用者層軟按鍵模擬到"按鍵精靈"的內核驅動層再到今天的"物理外掛",軟體上再怎麽辨識,看上去也和正常的滑鼠鍵盤並無二致。
因此最近的反外掛也轉換為了"用魔法對抗魔法",用機器學習等統計學習的手段,分析使用者的操作行為來判斷這個人到底是正常玩家還是指令碼機器人或者開了作弊器。
但這種基於機器學習的"反作弊"同樣也有巨大的弊端,因為其訓練的數據大多來自於普通玩家,因此一些頂尖的玩家其操作本身就是異於常人的,因此很容易被模型辨識為作弊,這也是為什麽很內送流量備援容錯機制播秀著秀著就被ban了
當然對於那些真正不作弊的高手玩家來說,被反作弊辨識為作弊,何嘗不也是對自己實力的肯定?