陰陽師將大量伺服器運算放在客戶端完成是否可能?

如題


2017年1月13日更新:

今天陰陽師版本更新,推出的新副本"紅葉"又"疑似大概(好怕黃易告我造謠)"出現了類似的bug。玩家無限刷獎勵,現在已經停服維護。吃一塹長一智啊大哥,伺服器做個驗證吧。

——————分割線——————以下是原答案

曾經做過遊戲客戶端開發,現在也在玩陰陽師的不邀自答一下。

先說結論:

1.陰陽師戰鬥確實有部分放在客戶端進行。

2.這次業原火的bug,主要是伺服器的鍋。

3.耗電的原因很複雜,不能證明戰鬥是放在客戶端。

理由:

1.陰陽師刷副本是可以通過燒餅修改器/葫蘆俠等工具(外掛)來修改式神的數值的,網上各種低級式神秒殺boss的圖就是這樣來的。

但是鬥技這種就很難改了,因為鬥技時候玩家在客戶端發出的指令會先經過伺服器計算,再把結果傳回客戶端。你把本地攻擊什麼調成999999,伺服器又不用你這個值來算,所以沒什麼用。

2.業原火副本的Bug,首先它具體操作是這樣:點擊業原火副本挑戰→利用客戶端loading瞬間點擊普通御魂副本。

大概原理就是:客戶端發送業原火副本挑戰消息→伺服器進行處理→客戶端發送普通御魂挑戰消息→伺服器沒有進行驗證和互斥,返回普通副本開啟消息→客戶端進行普通副本挑戰,挑戰勝利發送消息→伺服器判定挑戰成功→業原火獎勵發放。

處理的辦法其實有兩個客戶端這邊做一個互斥,點了這個副本,其他地方不能點了,馬上來個loading界面,防止玩家誤點。但是只是治標。

治本的辦法就是伺服器進行互斥處理和驗證處理,玩家不能同時挑戰兩個副本,驗證玩家到底挑戰什麼副本,驗證該發放的獎勵,驗證消耗品(門票體力等)是否扣除。

3.耗電這個,跟引擎和遊戲機制等都有關係。也許人家不是戰鬥計算多,而是戰鬥時候各種粒子光效、動畫等表現太多呢?畢竟戰鬥結果伺服器可以幫你算,畫面表現還是你客戶端自己來吧。

甚至可能引擎有bug或者缺陷,自己在那裡無腦循環計算或者進行冗餘計算,這些都說不準的。


陰陽師這樣的遊戲,回合制 ,沒有動作性操作手感的要求 ,而且賣的是數值成長,核心功能完全沒必要放在客戶端,還給外掛留下可乘之機。戰鬥計算其實消耗很低的,耗電估計還是和渲染效果相關。

如果是強調打擊感,射擊及時性高,戰鬥反饋要求高,場景地形碰撞複雜的遊戲才會考慮放一部分在客戶端。也只是一部分。


作為一個資淺的遊戲行業從業者,對LZ 圖片的問題,只能呵呵一笑。

好吧,畢竟外行人,不懂程序,伺服器,手機耗電量相關的問題,也算可以理解。

這裡就簡單說明個人的一些見解吧。

1. 陰陽師的耗電量。

手游的耗電量,和運算的關係問題,這個要看你說的運算是什麼運算。

計算機處理運算,主要有兩個東西,CPU 和 GPU。

CPU 負責各種基本運算,GPU主要負責圖形圖像渲染。

屏幕上看到各種絢麗的圖案,特效,打鬥場景,這些都是需要圖形渲染的。

圖形渲染特別吃資源。所以你看到,買電腦如果要玩高特效的遊戲,需要配備顯卡比較好的。

手機里,硬體運行都是要耗電的。

於是你運行這種,需要大量吃顯卡渲染的,於是,GPU運算耗盡了大量電力。

結論:大部分畫面精緻,動作酷炫,特效華麗的手游,都是比較耗電的。

而你玩個2048,flappy bird, 這種就不會那麼耗電。

2.網遊的運算,放在伺服器還是客戶端的問題。

和上面問題一樣,我們要區分,這個運算是什麼運算。

網遊和單機的區別,簡單來說,就是要聯網。

聯網,主要是為了和其他玩家通信,讓你看到,你旁邊有另一個玩家,他在打怪,她在升級。

你們可以搭訕,交談,然後,一起打怪,一起升級,然後擦出愛情的火花ヽ(●-`Д′-)ノ 跑題了。

嗯,社交是網遊的一個重要特性。

但隨之而來會有一個很嚴峻的問題,防作弊。

你看到他在打怪,1級把一個50級的怪秒了,這不科學吧。他1級身上瞬間多了幾千萬元寶,全身超級豪華裝備,然而他沒有在充值排行榜上,這不科學吧。

那麼,怎麼避免這個問題發生呢?

把運算和校驗放在伺服器上!!!

就算陰陽師有玩家可以修改自己手機里的程序,那也得按照基本法,對不。

你和伺服器說,我抽了個符卡,來個大天狗。 伺服器說,滾,給你再來個雪女,知足了(ノ`Д)ノ

你說,不行,寶寶生氣了,我把本地我的貨幣改成1000萬,給我來個1W次的大禮包。

伺服器說,呵呵,你再怎麼改,你看到的1000萬也是假的。我這你只有100,抽個毛線。

改客戶端數據,就好像你在自己存摺的存款上多加幾個零,給自己餘額寶存款PS個幾個億一樣。

別人不會認的。

所以,安全的網遊,涉及你獲得物品和消耗物品的,一定是經過伺服器驗證的。

你獲得什麼東西,都是伺服器認為,嗯,打這個本,給你3個勾玉,那麼你身上原來有20個,現在應該有23個了。 你要花,最多也只能花23個。

包括打怪,也是伺服器知道,嗯,你這個式神 10級,攻擊65,暴擊率0.1,命中XXX。。。算下來,這下攻擊就打 70點傷害吧。 那麼對方原來血量 500, 現在剩下430。好的繼續。

在這種邏輯下,作弊基本上除了把別人家的伺服器黑掉之外,你怎麼改客戶端也沒用的。

—— 伺服器就和銀行一樣,準確的直到你所有的精確數據,甚至知道你打別人一下傷害是多少。

然而,這種方式安全是安全,弊端就是,和伺服器通信很頻繁。

畢竟伺服器有可能在北京,有可能在深圳,你有可能wifi 信號很弱,室友可能在用迅雷。或者你在地鐵上,信號時好時壞。 那麼你打一下,就停住,說,伺服器還沒告訴我,這下傷害打多少呢。

那玩家就很火大了。信號好才能玩,每打一下都有延遲,這玩個毛啊。。。

所以,手游為了保證遊戲流暢性,不會把所有東西,每一步都通過伺服器驗證。

而是客戶端有一定的自主權,比如,這下打多少傷害,客戶端你自己算吧,我伺服器懶得管你了。

這就會讓運行流暢了,畢竟打鬥傷害,伺服器不參與通信了,但問題是,客戶端容易修改作弊。

比如,本來打出來傷害是 10的,改一下,改成1000, 怪物就打死了。

然後報告伺服器。我打贏啦,快發獎勵。。。。

伺服器如果不管不問怎麼打贏的,就照常發獎勵。那麼這就有作弊的漏洞了。

應對,也一般就是加上一些驗證,比如客戶端要報告,打贏了,那麼伺服器問,打的每一下傷害是多少,戰報給我一份,我檢查你是不是真的打得過。

這就是防作弊的一種簡單驗證。防作弊還有很多方式,我也不是很了解,所以不展開說了。

網遊,在保證流暢性的基礎上,怎樣防作弊,一直是一個大難題。

所以,總結,

手機大型遊戲很耗電,純粹只是,圖像,特效,畫面效果好的問題。你玩華麗的單機遊戲一樣很費電。

和伺服器通信,主要是為了交互和防作弊。這對耗電影響不大。

作弊漏洞的產生,有很多可能性,為了流暢性將部分決策交給客戶端,導致驗證不完善,是一種可能。另外伺服器或者客戶端邏輯本身有漏洞,也是有可能的。

打個比方。開個寶箱,要消耗100元寶。執行的流程,是先開寶箱,把獎品放到背包。然後扣元寶,發現沒有100個元寶,扣除失敗。 然而獎品已經發到背包了。玩家就可以發現,元寶不夠也能開這個寶箱,而且可以無限開。 那麼漏洞就產生了,這個就是最基礎的校驗不嚴格的刷物品漏洞。

陰陽師這次的bug,雖然我沒玩,沒深究其產生的原因。但應該也就是邏輯上有漏洞。

我來做個猜想

比如,打完某個副本,告訴伺服器我要領獎啦,伺服器之前知道你進了A副本,OK,扣掉A副本需要的體力,發個獎勵,完事。

然而這時候,你又切到另一個副本B,客戶端如果發送了我也打完B副本啦,伺服器發個B副本的獎勵唄。 伺服器暈乎乎的,哦,對,之前你是打副本了,發個B副本的獎勵,然後一看,咦你之前說要打A副本啊,怎麼怪怪的,算了,就這樣吧,估計出錯了,體力不扣了。這就白白多發了一個B副本的獎勵。。。(僅個人毫無理由猜想,有錯大家可以一起討論)


陰陽師耗電主要是各種動態元素的使用過於鋪張,伺服器的那點校驗運算不會耗什麼電的。


十五年前就已經是業內常識的問題覺得網易現在會犯?進遊戲公司做網遊超過一個月的技術都不可能不知道這個常識……


之前看朋友圈有發各種聯網棋牌各種外掛的, 大多都是只會客戶端的程序員把核心邏輯都放客戶端, 伺服器只是幫你開房間, 聊天啥的

後面西米出的聯網棋牌瞬間秒殺各種山寨棋牌

然而, 陰陽師居然把重要的計算放在客戶端, 伺服器也不驗證. 這也太山寨了吧

那點計算有多大? 伺服器會因為這點計算崩掉?

也是醉了


2d卡牌類的就是把戰鬥放在客戶端啊,戰鬥完把結果發送給伺服器校驗一遍,沒問題就可以給你發獎勵了。

再說了,計算戰鬥數值能耗多少電,耗電的還是美術這一塊。


客戶端有最大運算需要處理,就是處理圖像,相比之下數值計算在遊戲中就那點東西,哪裡需要交給客戶端去處理哦,伺服器處理綽綽有餘


雖然陰陽師的伺服器很。。。。但是耗電應該不是邏輯處理放在客戶端還是服務端的問題


說把核心邏輯放在客戶端、完全信任客戶端、服務端不做必要驗證的,都洗洗睡吧

你們太低估網易了吧

這是基本常識好嗎


耗電在於渲染,遊戲邏輯運算耗費不了多少電。伺服器肯定有校驗數據的。沒校驗多半是bug


雖然不是網易開發,但是可以很明確的告訴你業內把計算放客戶端的基本都被刷死了。


當然是可以的。實際上也是這麼乾的,因為可以減緩網路不穩定和延遲帶來的卡頓。

那麼是不是就能改客戶端隨便作弊呢?當然不是。客戶端返回的不只是戰鬥結果,還要返回一些反映遊戲過程的數據供伺服器校驗。特別是陰陽師這種簡單的卡牌遊戲,完全可以把整個副本的用戶輸入和狀態變化完整地記錄下來並傳給伺服器。例如AI的隨機種子,上了什麼式神,什麼時刻按了屏幕什麼位置,發了什麼招等等,原則上可以將整場戰鬥在伺服器正確的邏輯上重現,和你怎麼改客戶端完全無關。至於實際中伺服器校驗的程度可能有粗細之分,但有日誌記錄的話必要時完全可以秋後算賬。

如果在線玩家很多的話精細的校驗很耗的話,理論上還有猥瑣的辦法:把數據傳給隨機挑選的其他客戶端(很有可能是未經修改的)校驗…

PS:微博中說遊戲耗電是因為在本地計算戰鬥。其實與渲染相關的計算量相比遊戲邏輯狀態的計算量是九牛一毛。

PS2:現在微博上有人拿調試器修改幾個數值就以為自己破解遊戲了。其實遊戲畫面也在內存(顯存)啊,為什麼不直接用PS改呢 …


難道不是為了先達成賺他個幾億的小目標。達成後,隨玩家鬧去吧的節奏?


網易自己做的遊戲沒有這樣做的


不太可能,先不說網易畢竟還是一家大體量的公司,不會有這種低級處理方式,何況邏輯運算根本就占不了多少電量,大頭應該是在圖形處理上。

而且最顯而易見的一點,如果把大部分邏輯寫在客戶端,改一下代碼就得上傳一下版本太浪費時間了,初期開發根本就沒辦法測試,基本上懂點開發的都不會這麼干。


絕對不可能把重要的數據放在客戶端計算啊,稍微有點工作經驗的都不會這麼搞,何況這還是網易,別瞎猜了。


推薦閱讀:

雜談 Web 前端編程範式
Webpack構建library時的踩坑經歷
2017年零基礎轉行前端還能找到工作么?
你會用CSS實現垂直居中嗎?
2016 這一年啊~

TAG:前端開發 | 手機遊戲 | 遊戲伺服器 | 網易遊戲 |