同樣是後台建主,同樣是全圖掛,為什麼dota2可以做到幾乎杜絕外掛,而守望先鋒卻外掛泛濫?

我不知道我提這個問題的噴點在哪裡?我一直是dota2死忠粉,去過ti4現場。暴雪遊戲也衝過幾千塊錢,最近玩守望遇到掛,覺得遊戲體驗不太好,對遊戲背後的機制問題不太清楚,但是知道dota2是後台建主機,就想問問這兩個遊戲外掛問題怎麼差別這麼大。

有人說我弱智我也就不去計較了,鍵盤俠一般爭論從來不走邏輯直接攻擊人格的。

還有人說我是敵對勢力?引戰? exo me?

我是dota2最早一批玩家,現在5300分。暴雪全家桶不說全有,但是國服歐服號都衝過不少錢。從來沒玩過南極企業代言的某moba和某fps。你說我是哪個敵對勢力?


「守望先鋒是FPS遊戲」。

雖然一句話就能解決,但是秉著知乎多碼字才能拿到贊的原則,我還是瞎聊一些。

FPS遊戲因為對延遲要求很高,所以很多彈道模型計算都放在本地進行(想想DotA不就是這樣嘛),這樣就給很多外掛從業者可乘之機,這也FPS遊戲外掛屢禁不止的原因。DOTA2這種做什麼都要和伺服器來一遍PY交易的,當然外掛製作難度要大很多。

我工作的兩年里報道過的DOTA2外掛或者腳本印象里只有三起,14年末有個高級外掛,包括了看敵方英雄技能CD,天火白虎箭的軌跡,殘血秒殺等等反正是叼得飛起,據當時報道說國外論壇有幾千人下載了這個掛,這件事後DOTA2嚴重的外掛基本就銷聲匿跡了。

15年有個全圖掛,原理其實很有趣,也虧那個人想的出來,DOTA2中的眼也是攻擊朝向(仇恨?不知道怎麼說清楚),所以在敵方在視野內的時候用兩個眼鎖定他,等他進入戰爭陰影后,眼的朝向也會跟隨敵人,兩條直線交叉確定一個點。

16年最近的一個PA無限S暴擊掛,這種暴擊腳本原理應該是,腳本讀取PA攻擊前搖是否有暴擊動畫效果,如果前搖的一瞬間沒有出暴擊動畫可以S住繼續A,直到砍出暴擊。

上述的外掛基本是見光死,每次報道剛寫完,隔天一個更新就修復(每次有Bug都要趕緊寫,生怕修復了當不了新聞),所以除了遊戲類型方面外,V社對外掛也看的很重。


之前正好要回答另一個同樣的問題,草稿就發這裡好了

以下為了避免衝突,同時便於分析,就拿同引擎(不同版本)的CSGO和DOTA2做例子

首先,造成兩者巨大區別的根本原因,在於遊戲機制的不同。

根據外掛功能類型的不同,分兩類進行討論(不討論封包類、服務端邏輯放在本地計算和BUG)

一、顯示類

也就是FPS遊戲中的「透視」、RTS中的「全圖」。

此類將服務端與客戶端已同步但未顯示的數據,提供給作弊玩家

比如圖中使用作弊指令渲染出的敵人模型(線框),注意左上角的實體同步狀態,1號是玩家,2號是敵人。

而實際上玩家被牆擋住,根本看不到敵人

換個位置,伺服器判斷玩家不應該收到同步數據,同步停止。

而在RTS中,由於是俯視視角(上帝視角),玩家的視野完全由伺服器決定,伺服器只要計算好戰爭迷霧就可以了,玩家的視野範圍是一個圓,而能遮擋視野範圍的地形都是固定的,很容易計算迷霧的範圍。

FPS高實時性的遊戲機制決定了伺服器必須預先,甚至是在玩家看不到的時候將數據同步到客戶端,對延遲的容忍也要遠小於RTS遊戲,這決定了伺服器在數據同步策略上,必須對客戶端做出讓步。要實時並嚴格計算出玩家的視野範圍是很難的,舉個不太恰當的例子,一塊帶有反射性質的材質就可能毀了整個判定邏輯(比如鏡子),而音效更是使整個情況更為棘手,實際的判定邏輯總是比想像中要複雜得多。

二、操作類

也就是FPS遊戲中的「自動瞄準」、RTS中的「一鍵XX」,「自動XX」

同樣由於遊戲性質的不同,FPS遊戲對反應力的要求是遠遠大於RTS遊戲的,所以這種類型的外掛往往是致命性的,同時,此類還可能結合第一類進行作弊。

這類往往比較難以禁止,因為外掛本身並不修改任何數據,只是對讀取的內存中的數據進行分析,並反饋到操作上(當然也有直接內存調用的)。

舉例來說,外掛從內存中讀取敵人數據,根據坐標和玩家攝像機矩陣進行計算,最後移動玩家的準星,於是乎,爆頭。

如果說第一類中還有迴旋的餘地(比如優化策略,特定情況下不發送數據到客戶端),第二類確實無能為力,只能從用戶的操作特徵中分析是否使用了作弊,在CSGO中,開發商採用的是人工審核策略。

同樣的引擎,不同的業務需求,導致了客戶端儲存的數據量變化。

起源引擎由於向社區開放,在福利了社區的同時實際上也加劇了外掛的開發,比如高票答案中所提到的插眼開圖掛,思路確實犀利

它的開發思路可能是這樣的

外掛開發者拿到了網路傳輸表(用於定義客戶端與服務端在同步某實體時,需要同步的變數表、是公開的……)。

根據引擎結構找到調用點,加鉤子捕捉數據。(結構文檔里也有寫……)

由於服務端是公開的,自己架設伺服器進行測試。

讓敵人在視野外活動,篩查仍在同步的實體信息(也就是變數有變化的信息),比如說眼。

CDOTA_Item_ObserverWard (type DT_DOTA_Item_ObserverWard)

Table: baseclass (offset 0) (type DT_DOTA_Item)

Table: baseclass (offset 0) (type DT_DOTABaseAbility)

Table: baseclass (offset 0) (type DT_BaseEntity)

Table: AnimTimeMustBeFirst (offset 0) (type DT_AnimTimeMustBeFirst)

Member: m_flAnimTime (offset 112) (type integer) (bits 8)

......

雖然尚不確定錯誤的數據同步定義發生在眼的類還是它的父類,但根據表來查只是時間問題了(連數據類型和偏移都給出了)。

Source作為一個老牌引擎,這確實是它的軟肋。

在這個外掛之前,其實還出現過一個提醒白牛(裂魂人)沖人的掛,以及熊戰士的吼聲音範圍不正常的BUG,實際上原理也是大同小異,都是在編寫網路傳輸表中,加入了本來不必要的信息,錯誤的將數據同步到了客戶端。


贊同數第一的回答已經說的很在點上了:「守望先鋒是FPS遊戲」。

我就在這裡再詳細說一下。

幀同步和CS同步:

玩過Dota1/2的朋友應該都知道,當你的網在很卡的時候,你發出一個指令,明顯過很久後才會有效果。但是守望先鋒、CS、COD、戰地這類FPS遊戲就不是。你按左鍵發出開槍指令,不管你卡不卡立刻就開槍了。這種立刻看到表現的網路交互方式叫做幀同步。

這是為什麼呢?

Dota這種RTS遊戲中(別爭是不是RTS這不是重點-。-),你發出一個指令比如在地圖上點了一下右鍵之後,客戶端直接給伺服器發送:『向(x,y)移動』。但是此時客戶端不直接執行這條指令,而是等待伺服器廣播給所有玩家的:『玩家A移動到(x,y)』。此時所有玩家都會收到這條消息,然後一起移動。這種網路交互方式叫做CS同步。(有些RTS不是CS同步,例如星際1。感謝評論區 @周笑宇 提出)

玩家覺得所謂的卡頓就是因為網速慢,在發出指令和接收指令之間已經過了好久。

大部分FPS遊戲不同,因為這類遊戲太需要實時交互了。就算只有50ms的延遲如果採用CS同步(即你每次轉身/瞄準的操作都要伺服器廣播返回)的話也是噩夢一般的體驗。想試試?全境封鎖歡迎你。按了換彈夾,播放換彈夾動畫,換好了,從掩體後天出來想打人發現打不出去。為啥呢?因為伺服器還沒告訴你你彈夾換好了!

為啥要說這兩個東西呢?因為看機制就能看出來,CS同步可以規避大部分的外掛。

說實話,早年間CS1.6的驗證機制其實我也不是很懂,但是相信大家都碰到過那種暴力加速外掛,開場1秒衝到對方家裡挨個拿刀爆頭。這是怎麼做到的呢?即客戶端時刻告訴伺服器:我現在在往幾點鐘方向走,速度是多少。因為我還沒見過CS里有外掛可以瞬移的,頂多是加速跑。但是移動的速度伺服器沒有驗證,那就是多塊都可以咯。所以一秒走到對方家裡。然後:

客戶端:我現在對著我的(x,y,z)方向開一槍。

伺服器:HEADSHOT。

客戶端:我加速跑到下一個人跟前(筆者省略了步驟),對著我的(x,y,z)方向開一槍。

伺服器:HEADSHOT。

客戶端:我加速跑到下一個人跟前,對著我的(x,y,z)方向開一槍。

伺服器:HEADSHOT。

客戶端:我加速跑到下一個人跟前,對著我的(x,y,z)方向開一槍。

伺服器:HEADSHOT。

客戶端:我加速跑到下一個人跟前,對著我的(x,y,z)方向開一槍。

伺服器:HEADSHOT。

伺服器:Terrorist Win。

SEE?

但是到了CS同步伺服器上,這種方法作弊可就不好使了。

Dota2:

客戶端(外掛):我要瞬移到(x,y)!

伺服器:瞬移你妹,老實走過去。

客戶端(外掛):我要以522的極限速度走到(x,y)!

伺服器:522你妹,你的速度是我控制的。

客戶端:那好吧我要走到(x,y)。

伺服器:乖,慢慢走過去吧。

敵法(外掛):老子要B到(x,y)!(超出施法範圍)

伺服器:B你妹,你施法距離不夠。

敵法(外掛):老子要連著B好幾下!

伺服器:B你妹,你的CD好沒好我有驗證。

敵法:好吧那我就B一下。

PA(外掛):老子A的這下要出暴擊!

伺服器:出你妹,我說你出暴擊你才能出。

同理有好多就不一一列舉了。

先寫這些吧。具體可擴展閱讀dota 類遊戲是如何解決網路延遲同步的? - 胡帆的回答

評論區的小夥伴給出了硬貨:《守望先鋒》技術分享視頻:如何處理網路同步與減少網路遲疑

程序員小夥伴可以學習一個。再次感謝 @周笑宇

-----------------------------update 2016年7月8日 0點半左右_(:з」∠)_-----------------------------

看到你們這麼熱情,我一句話不加也不好。

孟書記在評論中指出,全景封(suo)鎖(shui)的這種機制,對透視是無效的。我對這一點再稍微說一點。

為啥全境封鎖機制這麼好(大霧),還是會有透視?

其實透視跟加速啊瞬移啊這種作弊機制根本不是一碼事。為什麼呢?加速瞬移是對上發伺服器的數據進行修改,而透視是把伺服器下發給你,但本來不想讓你在你不應該看到的時候看到的東西讓你能隨時看到。

這句話好像有點繞……

好,我們再拿CS舉例。

Dust2地圖,開局警匪出生在自己家。這時伺服器會告訴你地圖上所有(?)玩家的信息,包括對面敵人的。他們的位置,武器等等一系列信息。但是這個時候因為有牆擋著,你是看不到對方玩家的。

透視作弊器:咦,這些數據是什麼,好像是敵對的人耶。我們把他們高亮在攝像機上顯示出來。

作弊成功√

-------------------------------------------------------------------------------

再多寫點兒吧,有童鞋問,為啥Dota1現在這麼多掛?

首先是開全圖,這個跟上面舉的CS透視那個例子差不多,就不贅述了。

敵人金錢顯示也一樣,很明顯伺服器下發的玩家數據中是有金錢這一項的。外掛把它拿到顯示出來了而已。

自動躲技能……這個……

我曾經目睹我一個玩lol的朋友開自動躲技能的輔助……敵方在放技能的時候,你的地圖上會框起來一個區域,表示這個技能的覆蓋區域。如果這個技能是帶彈道的話還會顯示出現在技能判定點的位置。這些都很好說,伺服器當然會發給你這些信息啦,要不你怎麼顯示技能效果。

至於怎麼躲技能……這個外掛會控制你的英雄自動往技能不覆蓋的區域走,走出去之後剛好停下繼續輸出。至於外掛是怎麼控制你的英雄移動的,這個方法就很多了。最保險的就是模擬你滑鼠的點擊,這樣就算有人來查也查不到。只會看到你做出了驚天地泣鬼神的操作。

-------------------------------------------------------------------------------

特別說明:我沒有說幀同步的機制就省略了伺服器驗證步驟,沒有任何這個意思。將來報道上出了偏差你們要負責的。識得唔識得啊?


技術方面道理其實挺複雜,簡單說說。

其實就是因為Dota2數據要發回終端伺服器,你在本地沒法改變核心數據。Dota2不是沒有過外掛,只是基本都是什麼顯血顯藍,滑鼠一秒多按這種,而且V社也查過一批了。要弄出什麼天輝基地飛天的外掛,你就得把中心伺服器黑了。然而你要是有這個能耐,幹嘛要黑遊戲,這不是閑的蛋疼嗎。。。

FPS遊戲許多數值處理是本地化的,這給了外掛技術上的可行性。比如自瞄,用比較外行的話說,我可以在屏幕上進行圖像檢索,把數據反饋回來,讓滑鼠指針追蹤,這是很Low的技術,很容易實現。

你想想,上面這種方法在Dota中並不太實用。比如你檢索圖像沒啥用,自動鎖定殘血單位然後無縫接火槍的暗殺?好像也沒什麼太屌的。。。

Ow畢竟是一個策略戰術見長的FPS,外掛的破壞性其實小於CS這樣的遊戲。比如自瞄,你槍槍打頭,面對大鎚舉盾是沒用的,面對Dva沖臉效果也是有限的


同樣是v社遊戲,csgo的外掛也是泛濫,而且vac封號機制比守望的嚴的多,既是如此,開掛的照樣多


其實同樣都是v社的遊戲、csgo有掛、禁止不了、而dota2可以就能想像一定是技術層面的問題、而不是v社監管不嚴

同樣道理,連v社對於作弊這麼嚴查的都禁止不了、更不用說別的fps了!


因為不會數3啊,這樣數:一個外掛,兩個外掛,再來一個就不會數了,只能幹掉第一個把第三個喊做第二個


雖然不專業,但是我覺得是因為moba遊戲俯視視角,視野外的敵方單位信息伺服器完全可以不發送給客戶端,只有在即將出現在你視野內後再發送。比如你視野600,只有在650以內的敵方角色信息會發送到你客戶端。

而fps,牆後的敵方角色雖然你不應該看到,但是因為該角色已經離你很近,如果客戶端不預先渲染,很可能角色閃身出來了,你能看到的只是一個紫黑相間的奇怪方塊。更何況屁股自帶外掛,只要你隊伍里有寡婦,伺服器就得把敵方所有的位置信息發送到你客戶端,讓你的客戶端預渲染。這樣就給了外掛可乘之機。


旁的不說,dead2做個兩倍視距和按鍵腳本還是不難的。


外掛泛濫不泛濫我不知道,前幾天老E玩半藏被別人噴用外掛了。。。。

對了順便給打守望先鋒的各位說一下,舉報不僅能舉報外掛,還能舉報惡意辱罵。


對比一下csgo,知道為嘛csgo每周銷量幾乎都是steam周榜穩定前十嘛,因為除了真的有部分新人還有一批是上一個號被封了再買的 (●˙ε˙●)


朋友們 DOTA2不是沒有外掛

是很少人願意用

RTS遊戲的衍生物

開個全圖掛不是很簡單?

還有N多什麼自動拉野、到血量自動秒殺,卡爾的自動連招,地卜師的自動飛狗,等等。

謠傳的刀刀烈火不知道是不是真的。

但是你開掛有什麼用嗎?

大號被封,庫存全無,STEAM其他遊戲都沒了。。

小號?對不起,你打到能匹配需要打N多小時。開著掛搞不好已經被封了。

就算沒被封。。出分還是高不到哪裡去。

而開小號打,本來就是碾壓全場的水平,要什麼外掛?

整個過程外掛毫無存在感。

那麼有的人要說了,我先打到出分,再開外掛!

- - 就問你累不累。哪怕是買號都沒那麼方便的。搞到最後封了IP就爆炸了。

至於FPS遊戲嘛,外掛太容易做,而且又太強力。

RTS裡面你開掛都不一定能贏比你強一檔次的人,這也導致了開掛人數的減少,想要開掛爽的人不會把RTS作為第一選擇。FPS就玩全不一樣,開個掛不是隨便殺?


確實如大家所說,遊戲類型是很大的因素,但是這些年來暴雪的『划水』,才是根源所在。從每個遊戲都有的毒瘤總監,到各種腦殘制度(為什麼這樣,因為這樣很酷),暴雪,已經早就不是玩家所謂的那個爸爸了。還記得wcs上作弊的矢澤金額可蘿,暴雪竟然查不出來,還是中國人在淘寶上買了這個掛給暴雪,偉大的暴雪總部才承認了這個外掛,更令人無法接受的是,作弊id竟然在事後依然師國服宗師組,竟然沒有封號!!!大家可以問問周圍的星際玩家,舉報作弊有用嗎?沒有。暴雪根本不管,這就是現在的暴雪,這就是為何ow現在外掛橫行的真正原因。


如果比較補丁更新速度最快的遊戲,dota2說自己是第二,沒有遊戲敢稱第一。


同樣是後台建主,同樣是全圖掛,為什麼風暴英雄可以做到幾乎杜絕外掛,而csgo卻外掛泛濫?


以前打cs 我的顯卡有個版本的顯卡驅動有問題,木門材質的貼圖變成透明,然後很多地方都成了透視。


樓上說得好,主要是裁決的東西以及同步的方式不同,所以在防外掛能力上有不同的感覺。

話說

我這個做遊戲的表示寫個防外掛一不小心比寫遊戲本身還累。

憑什麼,我就是來做遊戲而已,你們好好玩不行嗎。

大學的時候有個同學開外掛玩某某撞球

各種花樣角度進球

問他為什麼要開外掛

他說「玩遊戲不就是為了開心嗎」

說得好有道理,我竟無言以對。


你應該拿守望先鋒跟CSGO比 ,DOTA2不是一個類型的,FPS遊戲 開掛屢禁不止。


因為moba類遊戲不像fps,在戰鬥中總是有一個通用的最優解 --&>爆丫的頭!


dota2天天更新,雖然有時候是在更新飾品。


推薦閱讀:

如何理解風暴峽灣希爾瓦娜斯任務過場動畫:女王vs狼王?
如何評價克爾蘇加德?
星際爭霸中的神族和魔獸世界中的德萊尼有什麼聯繫么??
如何評價WCS2016星際爭霸2年終總決賽Dark VS Byun的6場對局?
為什麼阿塔尼斯的眼睛會發光,裝了燈泡嗎?

TAG:暴雪娛樂Blizzard | Valve | Steam | 刀塔DOTA2 | 守望先鋒? |