同樣是後台建主,同樣是全圖掛,為什麼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,直到砍出暴擊。
之前正好要回答另一個同樣的問題,草稿就發這裡好了
以下為了避免衝突,同時便於分析,就拿同引擎(不同版本)的CSGO和DOTA2做例子首先,造成兩者巨大區別的根本原因,在於遊戲機制的不同。
根據外掛功能類型的不同,分兩類進行討論(不討論封包類、服務端邏輯放在本地計算和BUG)
一、顯示類也就是FPS遊戲中的「透視」、RTS中的「全圖」。此類將服務端與客戶端已同步但未顯示的數據,提供給作弊玩家比如圖中使用作弊指令渲染出的敵人模型(線框),注意左上角的實體同步狀態,1號是玩家,2號是敵人。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 | 守望先鋒? |