其實我是游戲開發小白,這兩天突然想了解下關于網路游戲怪物掉落方面的知識。
我希望有誰能給我講一下
“怪物被擊殺→系統選取物品→掉落物品→玩家拾取物品”
這一系列程序中服務器是怎么接收和回傳游戲資料,客戶端是有什么樣的操作,以及在資料互動的時候如何避免被第三方程式攔截修改等問題。
uj5u.com熱心網友回復:
玩家發出攻擊(普攻、放技能等等),客戶端將相應的動作通過協議(一般包括攻擊型別、目標ID等等)發送到服務器,服務器進行相應的計算,然后將結果回傳給客戶端,結果就包括掉血,死亡。客戶端收到訊息后作出掉血、死亡等動作的表現。 服務器判斷怪物死亡后,根據怪物ID查找掉落的相關配置,然后經過計算(一般都是根據概率隨機),得出掉落的物品,然后通知客戶端在某某坐標放上道具。 客戶端受到訊息后,做相應的表現。玩家看到物品,點擊拾取道具。客戶端又構造拾取道具的訊息,發送到服務器,服務器做相應判斷,一般就是判斷玩家坐標、道具坐標、當前玩家是否可以拾取,檢測通過后便拾取物品,將結果回傳客戶端,客戶端作出相應表現,一般情況下,這個回傳的通知結果,就分為從世界中洗掉指定物件,在玩家包裹中增加指定物件兩部。
uj5u.com熱心網友回復:
關于安全方面,不可能百分之百地避免網路訊息被截取篡改,只能盡可能加大截取篡改的難度。一般都是通過訊息加密來實作的。經過加密處理后,一般不會被破解,要破解這種自定義協議的難度是相當大的,或者說幾乎沒人可以實作這種協議的破解,除非有內鬼,而且就算將協議破解了,若服務器沒有明顯的漏洞,也不是那么好搞出來有用的外掛的。所以一般的RPG類游戲,邏輯運算都是服務器,客戶端只做表現,這類游戲一般是不可能出現真正意義上的外掛。uj5u.com熱心網友回復:
恩,看著很詳細,受教了,分給你了,但我還想問幾個問題。那有沒有這種情況,在其中一次掉落種我截取了加密資料,在下次掉落后我繼續攔截資料,但是我不需要解密,只是把上次的密文回傳給客戶端,會不會出現獲得兩種相同物品的情況?還是說只是表現改變,道具本身是無法改變的?
uj5u.com熱心網友回復:
恩,看著很詳細,受教了,分給你了,但我還想問幾個問題。
那有沒有這種情況,在其中一次掉落種我截取了加密資料,在下次掉落后我繼續攔截資料,但是我不需要解密,只是把上次的密文回傳給客戶端,會不會出現獲得兩種相同物品的情況?還是說只是表現改變,道具本身是無法改變的?
uj5u.com熱心網友回復:
對于這種情況,只是會讓客戶端表現上的道具與上次一樣,而且只是會影響你篡改了訊息的客戶端,其他客戶端與服務器不受影響。至于拾取道具的具體實作邏輯都是在服務器,客戶端資料與服務器資料不一致,玩家點擊拾取,服務器也會判斷不成功,也就拾取不起來。
uj5u.com熱心網友回復:
物品跌落的時候服務器已經有記錄了。。。。基本拾取之前,服務器還是要做判斷檢測
做法就各家不同,沒見過2個公司是同一種做法的,就算是A公司抄B公司也不可能抄完全
我們要是從A公司跳到B公司,基本都會感覺的很大不同,2個團隊的做法不可能完全一樣
但這些基本元素的必須要有考慮的,要是這些邏輯都沒有?我!……%……%@……@@ ,再做個2年吧,你就有了。。。。。
(程式員的基本修養)
所謂的漏洞都是人為的,對的就是你做出來
舉個例子吧,一般我不想比喻的。。。。
你寫檢測的時候通過ID檢測,一般的重復提交不會被接受了,但是少了時間戳或者ID可能被重復,破解者(我是排不上號),分析出你這個ID得規律,就不停復制這個ID做攻擊,你服務器吃不消
(基本上,我不會去搞你一個賬號或者一個物品,當然也不排除老板出錢請我去搞某個賬號,但我建議老板有錢怎么不整個服務器買下來??)
你寫的檢測ID的代碼不完善,就可能被我分析到和利用。。。。。你把代碼寫好,寫對了,就沒問題了,想多沒用,但你得不斷除錯
程式員都不是想出來的。。。。。
uj5u.com熱心網友回復:
恩,看著很詳細,受教了,分給你了,但我還想問幾個問題。
那有沒有這種情況,在其中一次掉落種我截取了加密資料,在下次掉落后我繼續攔截資料,但是我不需要解密,只是把上次的密文回傳給客戶端,會不會出現獲得兩種相同物品的情況?還是說只是表現改變,道具本身是無法改變的?
感覺你就是拿到個二進制代碼就以為這是加密了吧,幾乎我看到很多原始碼也是不加密的,也沒那時間去搞這些花里胡哨的,我自己做的會有加密,但不是重點,真的只是隨手做的,關鍵是服務器的健壯性,代碼要寫好,測驗好,
因為我看過很多原始碼都是不加密的,所以人家不加密總有人家不加密的理由
也不見得說加密就是無敵了,你自己認為是這樣而已,那些不加密的報文,也不見得拿到了就能黑服務器什么的
再舉大家都懂,肯定沒人說錯的一個例子吧。。。。。。。。。。
馬云其實真不怕把他那發家致富的方法告訴你,他還對13億全中國人說了很多,但真正發財的也只有他一個而已
他說的那些方法,說了很多屁話,都不是重點,他其實是說了大部分,但有小部分他沒說的。。。。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/62844.html
標籤:Unity3D
上一篇:請問下 各位大佬, 用unity的networkview寫的服務器, 為什么無法在visual用c#寫的客戶端去連接? 總是報錯:由于目標計算機積極拒絕,無法
