0,5挖矿

  0,5挖矿_第1张图片
1 范围___
2 跑去挖
 
 
{此段代码需要hook的支持}
/// 
/// 挖矿
/// 

/// 矿铲所在包裹的位置/param>
/// 地面系统物品ID/param>
procedure  wakuang ( _EDX : DWORD ; _ECX : DWORD );
begin
    ASM
      PUSH  0
      PUSH  $0C01  //矿产ID号  
      PUSH  _EDX   // 包裹ID号(矿铲所在包裹的位置)
      PUSH  0
      PUSH  _ECX   //石矿 地面系统物品ID  EDX=00000000 
      MOV  EBX , $005A73A0
      CALL  EBX
      ADD  ESP , $14
    END ;
end ;

{此段代码需要hook的支持}
///  
/// {人物是在游戏当中还是小退} 
/// 
 

function  InGame (): Boolean ; 
var  gameretn : DWORD ; 
begin 
   asm 
    mov  eax ,[ $00924D48 ] 
    mov  gameretn , eax 
   end ; 
   if  gameretn = 0   then  Result := true {在游戏当中} 
   else  if  gameretn >= 1  then   Result := False ;  {人物在角色选择界面} 
end ; 

procedure  TForm1 . Button1Click ( Sender :  TObject ); 
{采集材料,需要排序否则程序挖的不是最近那个和 和选怪一样 捡物}
var
   I : Integer ;
   L : Integer ;
   pGds            : PDWORD ;
   gdsTmp          : DWORD ;
   Gds_id1         : PDWORD ;
   Gds_id2         : PDWORD ;
   Gds_distance    : PSingle ;
   Gds_name        : PDWORD ;
   Gds_name1       : PWideChar ;
   gds_posx        : PSingle ;
   gds_posy        : PSingle ;
   gds_posz        : PSingle ;
   Gds_A_B         : Single ;
   Gds_id1tmp      : DWORD ;
   Gds_id2tmp      : DWORD ;
   Gds_distance0   : PSingle ;
   Gds_id3         : PDWORD ; //
   Gds_id3tmp      : DWORD ; //用于挖框
   Gds_distance2   : Single ;  //用于挖框
   Gds_distance1   : Single ;
begin
    if  InGame = False  then   Exit ;
   asm
    mov  eax ,[ $924E0C ]
    mov  eax ,[ eax + $1c ]
    mov  eax ,[ eax + $8 ]
    mov  eax ,[ eax + $28 ]
    mov  ecx ,[ eax + $18 ]
    mov  gdsTmp , ecx
   end ;
   for  I := 0  to  768  do
   begin
     pGds := pointer ( gdsTmp + I * 4 );
     if  pGds ^> 0  then
     begin
       pGds          := Pointer ( pGds ^+ $4 );
       Gds_id3       := Pointer ( pGds ^+ $10C );  {系统物品ID}
       Gds_name      := Pointer ( pGds ^+ $164 );
       Gds_name1     := Pointer ( Gds_name ^);
       Gds_distance  := Pointer ( pGds ^+ $154 );
       for  L := 0  to   ListBox1 . Count - 1  do   {}
       begin                {}
         if  Gds_name1 <> ListBox1 . Items [ L ]  then  continue ;
         Gds_id3tmp := Gds_id3 ^;
         Gds_distance1 := Gds_distance ^;
         //  Memo1.Lines.Add(Format('%x',[Gds_id3tmp]));
       end ;
     end ;
   end ;
  if  Gds_distance1 <= 8  then  wakuang ( pckId , Gds_id3tmp );
end ;



procedure  TForm1 . Timer1Timer ( Sender :  TObject );
{返回 矿铲 所在包裹的ID号}
var
   I :  Integer ;
   packsack   : PDWORD ;
   pckTmp     : DWORD ;
   pck_amount : DWORD ;
   pck_kind   : PDWORD ;
   pckObjId   : PDWORD ;
   pck_name   : PDWORD ;
   pck_name1  : PWideChar ;
begin
  if  InGame = False  then   Exit ;
   asm
     mov  eax ,[ $924E0C ]
     mov  eax ,[ eax + $1c ]
     mov  eax ,[ eax + $20 ]
     mov  eax ,[ eax + $b4c ]
     mov  ecx ,[ eax + $10 ]
     mov  pck_amount , ecx //
     mov  ecx ,[ eax + $c ]
     mov  pckTmp , ecx  //
   end ;
   for  I  :=  0  to  pck_amount  -  1  do
   begin
     packsack  :=  pointer ( pckTmp  +  I * 4 );
     pck_kind  :=  Pointer ( packsack ^  +  $4 );
     pckObjId  :=  Pointer ( packsack ^  +  $8 );
     if  packsack ^  >  0  then
     begin
      if  pckObjId ^  =  $C01  then  pckId := I ; {返回 矿铲 所在包裹的ID号} {pckID需要公共声明}
      {如果包里没有发现矿铲,...}
     end ;
   end ;
end ;
 



通过 Wiz 发布



附件列表

 

转载于:https://www.cnblogs.com/xe2011/archive/2012/05/29/2524195.html

你可能感兴趣的:(0,5挖矿)