0,4捡物

1 {人物可以捡起的物品最大范围 <=9}
2 跑去捡
 
 
 
{此段代码需要hook的支持}
/// <summary>
/// 捡物
/// </summary>
/// <param name="Id1">物品IDparam>
/// <param name="Id2">系统物品ID/param>
procedure  pickUpGoods ( Id1 : DWORD ; Id2 : DWORD );
begin
   ASM
     MOV  ECX ,[ $924e0c ]
     PUSH  Id1  //4FAA {物品ID}
     PUSH  Id2  //0C01014BD {系统ID}
     MOV  ECX ,[ ECX + $20 ]
     ADD  ECX , $0EC
     MOV  EBX , $00583060
     CALL  EBX
   END ;
end ;

{此段代码需要hook的支持}
/// <summary> 
/// {人物是在游戏当中还是小退} 
/// </summary> 
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_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_id1      := Pointer ( pGds ^+ $110 );  {物品ID}
       Gds_id2      := Pointer ( pGds ^+ $10C );  {系统物品ID}
       Gds_name     := Pointer ( pGds ^+ $164 );
       Gds_name1    := Pointer ( Gds_name ^+ $0 );
       Gds_distance := Pointer ( pGds ^+ $154 );
       for  L := 0  to   ListBox1 . Count - 1  do  {}
       begin            {}
         if  Gds_name1 <> ListBox1 . Items [ L ]  then  continue ;
         Gds_id1tmp := Gds_id1 ^;
         Gds_id2tmp := Gds_id2 ^;
         Gds_distance1 := Gds_distance ^;
       end ;
     end ;
   end ;
    if  Gds_distance1 <= 9  then  pickUpGoods ( Gds_id1tmp , Gds_id2tmp ); {捡物}
end ;
 





附件列表

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值