close
上節只講了最初級外掛製作,利<SPAN class="t_tag" onclick=tagshow(event) 
href="tag.php?name=%A4u%A8%E3">工具,我們可以根據遊戲的特,製作出相應的簡單外掛。
這一節以 
武林外傳助顏色版 為例,分析如何利用顏色判斷製作初級外掛。
工具: VB6.0 <SPAN class="t_tag" 
onclick=tagshow(event) 
href="tag.php?name=%A4%A4%A4%E5">中文版  環境: Windows 
XP


先來分析下遊戲:
       
我們看遊戲裡的血條和藍條,很容易看出,在遊戲口不改變位置和大小時,血條和藍條的位置是不會改變的,血和藍減少時,血條和藍條的背景色改變並不是很大。選定一個<SPAN 
class=t_tag onclick=tagshow(event) 
href="tag.php?name=%A9%C7%AA%AB">怪物,在取消選擇,再選擇一個怪物,怪物血條和藍條也是在固定的位置,這就為我們設計顏色掛提供了最有利的條件。

設計思路:
  
     我們知道了遊戲的血值和藍值條位置後,就可以開始設計算法了,首先,先明確一下思路

  
     假如我們獲取了<SPAN class="t_tag" onclick=tagshow(event) 
href="tag.php?name=%A4H%AA%AB">人物血值的點,藍值的點,怪物血值的點
     
  判斷人物的血的顏色點是否到達我們取的點,如低於則吃紅藥或打坐。
       
判斷人物的藍的顏色點是否到達我們取的點,如果低於則吃藍藥或打坐。
       
判斷血或者藍的顏色點是否到達人物滿血或滿藍 顏色點,如果等於或高於,則繼續打怪。
       
判斷怪物信息部分是否是指定顏色點,如果不是,則選怪,如果是,就打怪。
       
判斷怪物血值顏色點是否低於我們取的點,如果低於,且怪物信息部分顏色點改變,則怪物死亡。

       
來看看武林我們要取的顏色點:
           
  
     上面是人物的顏色取點圖,圖中色的點,就是我們需要取點的地方
     
人物的血減少後,血條會往左邊減少,紅色變成深黑色,如果背景透明,則顏色改變,不再是紅色,我們可以利用此方法檢測人物的血值,藍值也是同樣道理。  
    
       這是怪物取點圖,只需要取兩個點
  
   
怪物的血減少後,如果紅色到達最左邊,直到血為空,那麼第個點取到的顏色就不會再是紅色,第一個點的顏色也會改變,這就可以用來判斷怪物是否死亡。


那麼如何取的這幾個點的坐標呢。
遊戲裡的這些小窗口,相對遊戲的窗口,位置不會改變,那麼我們只要知道遊戲窗口在桌面上的絕對坐標,再加上一定的數值,就可以取到這些點的坐標,從而獲取點的顏色。
一個Windows的窗口坐標是從左上角的點開始計算的,往右是X 
坐標增加,往下是 Y 
坐標增加。


開始設計:
這裡我們用VB設計這個外掛。所以,你需要先熟悉VB,如果用其他工具,也需要先熟悉工具。
在VB裡,獲取一個窗口的API函數是:  GetClientRect  
,這個函數的功能就是獲取一個窗口的矩形坐標信息,相對桌面的 Left,Top,和自的寬Right,高 Bottom 
。我們只需要獲取它的Left和Top 
就可以了。
我們先來獲取一下遊戲的窗口大小信息:

我們定義個全局變量:  GameFormHwnd  '遊戲窗口的句柄

GameFormHwnd 
= FindWindow("QElementClient Window", "Element Client")
利用FindWindow  
API函數獲取遊戲窗口的句柄, QElementClient Window 是遊戲窗口的類名,Element Client 
是遊戲窗口的標題。

我們在一個新的模塊裡定義一個函數 GetWinRect  ,作用是獲取窗口的矩形信息
Public 
Function GetWinRect() As RECT
On Error Resume Next
    Dim mrect 
As RECT  '矩形變量
    GetClientRect GameFormHwnd, 
mrect   '調用API,獲取遊戲窗口矩形信息
    GetWinRect = mrect  
  '函數值返回
End Function


我們在外掛的窗口啟動<SPAN class="t_tag" 
onclick=tagshow(event) 
href="tag.php?name=%A5N%BDX">代碼裡加入調用

WinRect=GetWinRect  
    '獲得遊戲窗口Rect
假設 WinRect 
我們已經定義,是一個全局變量,保存這窗口的矩形信息。

到此,我們已經獲取了遊戲窗口的 
坐標信息。如果窗口不在左上角,那麼此時的坐標信息可能是
Left=300,Top=150,Right=800,Bottom=600
 
 
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 UM程式研究日誌 的頭像
    UM程式研究日誌

    UM程式研究日誌

    UM程式研究日誌 發表在 痞客邦 留言(0) 人氣()