一個計算機愛好者的不完整回憶(四十)做過的一些“外掛”

  上個月末出差回家,女兒很高興。由於處在暑假期間,她的冰姐姐也不用上學,所以女兒也就不去幼兒園了,和她冰姐姐在家玩。還好,我家有三臺電腦,一臺我的筆記本,一臺剛配的臺式機,還有一臺快8年了的臺式機,正好一人玩一臺。女兒和她冰姐姐玩一個遊戲叫摩爾莊園2,回家好幾天我都沒陪女兒玩電腦,所以那天女兒讓我陪她玩摩爾莊園2我就答應了。摩爾莊園2、摩爾莊園跟洛克王國之類的應該差不多,大遊戲裏面會包含很多小遊戲以及寵物養成,女兒玩小遊戲前幾關還可以,後面就略有一點難了,我就幫她過了好幾關。第二天,她和她冰姐姐就給我註冊了一個賬號,主要是爲了我回到大連後可以和她一起在網上玩做迷藏——我女兒發明的玩法,一個人隨便躲到某個場景中,另一個人去找。
  既然女兒給註冊了,那就玩玩吧。摩爾莊園2剛剛上線兩三個月,上面遊戲很少,我花了幾天把一個類似泡泡龍的遊戲打翻了,後來女兒打電話指點我,一步一步讓我申請成爲畫家,培養畫家的遊戲主要是找不同(類似於找茬遊戲)和根據提示圖片在場景中找到該物品(提示圖片就是縮小版的物品圖片)。既然女兒讓我玩,我就玩玩吧,發現想得高分還真不太容易,看得眼睛都花了。於是,發揮計算機愛好者的優勢,做一個輔助軟件吧。
  當天就做了一個初級版本,可以根據左側的提示找到場景中的物品了,算是一個半自動的版本——當時我沒打算做成全自動的版本,我只需要按1~5幾個數字鍵(左側同時最多提示五個物品),程序會自動根據我按的數字去找對應的物品。這個半自動版本主要功能就是完成了數據的錄入,會根據玩家自己尋找到的物品記錄位置,下次就會自動找到。當我把數據收集全了,基本上這關也玩過了好多遍了,最後完全收集全了之後我就玩一次完美的,拿到最高分就換到下一關。過了沒兩天,摩爾莊園搞活動,經驗翻倍,於是,決定做一個全自動的版本,只需要把程序運行後什麼就都不用管了,程序會自動判斷當前關卡是那一關,自動調取數據完成。這個改造其實不難,一天搞定,整個軟件實際花費的時間加一起也就兩天左右。
  之所以這個“外掛”做得這麼快,是因爲其中用到的技術都是現成的。首先是獲取當前窗口的位置,然後抓圖,然後判斷這張圖是在整個遊戲流程的哪一步,根據不同步驟取不同位置的圖案進行比對,執行相應的操作。所謂的操作也就是控制鼠標移動點擊或者鍵盤輸入,這些技術都是好多年前我就用過的,直接拿來用就可以了。包括根據截取的圖片尋找特徵點生成腳本命令以及執行這些腳本命令的代碼都是現成的。
  細想一下,這類控制鼠標鍵盤的程序我做過還真不少,我一直不覺得我做的算是外掛,跟真正的外掛相比差得太遠,只能算是一個鼠標鍵盤控制程序,不過爲了說起來方便,後面還是用外掛來稱呼。我做過的第一個外掛應該是針對一個flash遊戲——動物園管理員,跟寶石迷陣一樣,可以交換兩個圖案,如果交換後形成三個相同圖案在一條直線上就會消掉。當時用的是Delphi做的,應該說我的大部分這類外掛都是用Delphi做的。第一次做的時候沒有任何借鑑,完全是自己想的,先把抓圖、獲取窗口位置、控制鼠標鍵盤的技術搞定,然後就是如何判斷圖案是什麼,最後我就用一個點或者幾個點的顏色來判斷——如果高手做外掛應該是直接獲取內存中的數據,更準確快捷——但我沒這個實力。反正最後是把這個外掛給做出來了,雖然實現的方式自己覺得不那麼帥,但是最終效果非常完美。這直接奠定了我以後所有這類外掛的形式,就是全都是抓圖,然後根據抓取的圖片進行分析,然後控制鍵盤鼠標進行模擬人的操作,也就直接導致了我不可能做出大型遊戲的外掛。很多人見到我做的小遊戲外掛都讓我幫他們做一個他們玩的網遊的外掛,我都是跟他們講我做不出來——一是我自己不玩網遊,二是知道做這類外掛極度需要技術,要做好的外掛至少得會加密解密封包的數據,這不是俺擅長的。可能我花個一兩年好好研究一下也許有可能入門,不過我覺得我堅持不下去,也許覺得研究這個性價比太低:)
  第二個這類的外掛應該是阿達連連看3.0,唯一增加了一點讓我有興趣的代碼就是如何判斷某兩個圖片是否只折轉兩次相連。
  後來姐夫玩聯衆上面的拼圖,當時聯衆提供了一個單人版本,玩這個單人可以獲取經驗值,於是又做了一個玩這個單人版本的外掛,不過這個實在沒啥技術含量,連智能都沒有,就是拿起一個圖片挨個位置嘗試,成功就換下個。
  去年建行搞了一個E路通遊戲,很無聊的類似於大富翁的遊戲,主要是做廣告,宣傳他們的網絡銀行,每天大概要重複近百次遊戲才能達到當日積分上限,所以就做了一個自動玩這個遊戲的軟件,這個外掛是用C#做的,就學習C#來說,這些技術大部分都算是新的——至少代碼都是要重新寫,而且Delphi的代碼基本上都沒有什麼借鑑作用。
  算上剛剛做完的這個摩爾莊園2的,一共應該是五個遊戲的外掛。實際上,針對遊戲我做的鍵盤鼠標控制程序不多,而針對平時工作或某些繁瑣操作所做的鍵盤鼠標控制程序則非常多。比如,我們單位民品用了一個他們開發的文檔管理系統,但是操作非常麻煩,填個曬圖單還得一個一個輸入,我們經常一出就是幾十張圖紙文件,一個一個填寫非常累,而且他們那個系統還不穩定,如果你操作時間超過20分鐘幾90%機率會出錯。於是我就做了一個軟件,可以自動提取文件名和文件編號,然後自動填寫到他們那個系統中,人工一個小時的工作用我的這個軟件5分鐘就搞定。其中用到的主要就是鍵盤和鼠標控制的技術。我做的很多人一起玩windows自帶的空檔接龍,其實主要也是靠控制鍵盤鼠標來完成的選關、開始、結束的。
  應該說控制鍵盤和鼠標是我從用VB開始就很需要的一個功能,能控制鼠標和鍵盤操作那麼就可以模擬人的操作了,在很多時候很有用,很有用。
  說到外掛了,還應該說到我做過的一個網頁觸發器,也是由一個網頁遊戲的外掛開始的。
  原來在雷傲論壇中有一個插件叫百萬富翁,就是類似於開心辭典的答題應用。我不是爲了賺論壇中的虛擬錢幣做這個外掛的,純屬研究技術——因爲當時論壇中有一個比武插件有bug,想賺錢太容易了,簡直就是想賺多少就賺多少。而且我也說過,我對各種積分都不太感冒。言歸正傳,這個外掛其實技術上也沒多複雜,用了一個Webbrowser控件,在這個控件中去打開論壇,這樣就可以獲得整個html的代碼了,然後就很容易提取到題目,然後到題庫中找到正確答案,根據正確答案所在的選項發送一個該單選框的點擊的消息就OK了。當然了,也跟抓圖類似,你得找到這個網頁的特徵來判斷當前處於什麼頁面,這樣才能準確的執行相應的命令。
  後來,同事在單位的局域網中也架設了一個論壇,裏面有一個寵物遊戲,可以打怪升級,升級後獲得能力點數,可以升級到體力、力量、速度等,升到一定等級後還可以轉生。於是我就想做一個外掛。不過這時候我就想了,我不能遇到一個這樣的需求就單獨做一個外掛,應該做一個通用的基礎的外掛,於是就做了網頁觸發器。Delphi有一個非常好的控件——PascalScript,這是一個腳本控件,你可以在程序運行後在文本框中輸入代碼由程序解釋運行,難能可貴的是這些腳本代碼可以訪問已經編譯完的函數以及窗體中的控件等,算是可以與靜態編譯的代碼完全融爲一體。於是,我就寫了訪問網頁中各種元素的過程、函數,以及一些可能用到的鍵盤、鼠標、窗體等相關的函數,針對不同的應用只需要寫一些很簡單的腳本就可以完成各種操作。大概只需要幾十行的腳本就可以完成根據級別去不同的地點打怪、升級、升級後點數分配、吃藥療傷等操作。算是很成功的完成了這個寵物遊戲的外掛。後來爲了玩開心網註冊馬甲,我還用這個網頁控制器自動幫我註冊信箱——需要自己輸入驗證碼,其餘的都自動完成。這個網頁控制器其實還遠未完善,但是後來沒有什麼需求了,也就扔在那裏了,也還真有些可惜。
  說到開心網,忽然想到還做過一個開心網停車的外掛,不過這個外掛的核心代碼不是我寫的,是網上有人公佈的,我只是改了改,並且做了一個比較好看的界面而已。
  在用Delphi的時候,還做過一個鍵盤鼠標記錄器,就是把用戶操作的步驟都記錄下來,然後可以回放回去,也可以修改記錄下來的數據,結合上一些控制的函數完成很多功能。我做這個軟件的時候還不知道有按鍵精靈,後來我接觸到早期版本的按鍵精靈功能還不如我這個軟件多呢,當時的想法其實跟現在的按鍵精靈所做的很是一致,不過這就是差距啦,人家可以做到現在這樣,我就絕對做不到,不是技術的問題。

  不管怎麼說,鍵盤鼠標的控制是我做的軟件中應用很廣的一類。
  我做了這麼多所謂的外掛,除了給姐夫用的那個外,剩下的都是我自己用的,而且基本上爽了兩天後就不玩了,做外掛編程有樂趣,用外掛玩遊戲只不過爲了看一下成果自己得意一下。其實大家看完後就知道,這也算不得什麼真正外掛,沒啥技術含量。不過能解決問題,總還是不錯的。

發佈了130 篇原創文章 · 獲贊 419 · 訪問量 58萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章