能夠利用JAVA來編遊戲外掛,這真的是一個讓人高度興趣的話題。
在討論這個題目之前,我們首先來給不玩網路遊戲的人補一下課,首先網路遊戲的概念大家應該都是知道了,從蝦米最早接觸的文字MUD《重出江湖》,一直到現在大紅大紫的魔獸世界等遊戲,都是網遊。如果更精確的說,蝦米認為應該是那些通過廣域網路來進行的遊戲,沒人會把區域網路裡的紙牌叫做是網遊吧。那麼所謂的外掛就是針對網路遊戲開發的一款軟體,功能是截獲從用戶端發往伺服器的資料,類比玩家的操作,以達到更快升級、更塊賺錢的目的。外掛從遊戲類型來說,可以分為兩種,一種是用於本機資料修改的。相信地球上的程式員都玩過《暗黑破壞神》也都用過修改器。其實修改器就可以叫做外掛。因為它修改了本地的資料;另一種是用於網路資料修改的,最常見的手段就是截獲、修改資料包以欺騙伺服器。例如,一個1級的菜鳥本來傷害只有10點,但是可以修改發往伺服器的資料包,把傷害修改為任意值,玩拳皇的人也許碰到過這種情況,被對方一個輕拳就打廢了,很有可能就是這個原因。(所舉的例子理論上可行,大多數情況你的外掛還沒開發完成就會被官方封號了)。
簡單的知識我們先講到這裡,在討論用java編外掛之前,還有一個話題要討論,那就是外掛的工作原理或方式。上面的講的那個例子其實已經把外掛的工作原理和盤托出:1、類比玩家操作;2、分析並擷取本地記憶體中遊戲的資料;3、將修改的資料發往伺服器(針對網路遊戲而言)。但是現在各個電訊廠商防外掛的水平都很高,如果是修改過的資料包那麼伺服器會不接受,甚至會被判定為使用非法外掛而封號的。在這裡舉一個情境例子:你在打怪的時候,你的血會不斷的減少,怪物被殺死後還會掉落物品,那麼外掛就應該擷取到你的血值和是否有物品掉落以及掉落的座標,然後觸發相應的滑鼠時間去喝藥或撿東西。注意,在這裡我們沒有討論利用按鍵精靈去實現外掛。因為我一直認為單純依靠介面座標去定位操作的程式不能稱之為外掛
現在我們來討論一下用JAVA開發外掛。開發過外掛的人都知道,開發外掛所使用的一般都是VC,VB,語言方面大多是c++,vb,dephl,這是因為中國的網路遊戲99.9%都是運行在windows環境下的,因此就要調用windows的api,在這方面,上述開發語言有著得天獨厚的優勢。另一方面,用vc,vb開發的外掛,可以直接在windows宿主下運行,但是java卻不行,JAVA是需要JRE才能啟動並執行。我相信沒人原因為了使用一款幾十KB的外掛去裝一個幾十M的JAVA運行環境吧。但是從技術上,我認為JAVA是完全可以用於開發外掛的。
首先,JAVA完全具備分析記憶體的功能,不過我還不知道怎麼做(汗一下)。JAVA程式啟動並執行效率和效能可能是低於C++,但是目前的主流配置跑遊戲的時候再跑個JAVA虛擬機器是不成問題的。甚至利用JAVA讀取記憶體的資料,還可以發揮JAVA本身的優勢。其次,JAVA的網路編程功能強大,擷取資料封包不是什麼難題,但是要解析封包那就不一樣了,這屬於另一個領域的知識。也許有人會問,JAVA能調用WINDOWS的API嗎。其實我也不確定能不能或者是否可以做到完全調用,但是我相信,這跟人的實力有關係,跟語言是沒關係的。
今天就寫到這裡吧,還有好多想說的話慢慢再補充,現在我的手指頭敲得都疼了。