0,2使用红,蓝

 
 
/// <summary>
/// 吃红/蓝
/// </summary>
/// <param name="objType">物品类型/param>
/// <param name="packId">包裹ID号/param>
procedure RecoverMe(objType:DWORD;packId:Integer);//吃红/蓝
/// 使用药水的条件
///  1 checkbox.checked
///  1 HPmin<=编辑框
///  2 Hpmin>0人物没有死亡  // if role_MpMin=0 then Exit;
///  3 药品冷却时间=0
begin
  ASM
    PUSH 1
    PUSH objType        {EDX=包裹里的物品的类型}
    PUSH packId         {EAX背包格子ID号}
    PUSH 0
    MOV ECX,[$924e0c]
    MOV ECX,[ECX+$20]
    LEA ECX,[ECX+$0EC]
    MOV EBX,$00582E70
    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;
          I1:Integer;
  _idtmp    :DWORD;
  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);
    if packsack^ > 0 then //当对象数组列表不为0的时候才添加
    begin
     if pck_kind^ <> 9 then  Continue; {9=药水类}
        pckObjId  := Pointer(packsack^+$8);
        pck_name  := Pointer(packsack^ + $54);
        pck_name1 := Pointer(pck_name^ + $C);
     if (pck_name1<>'大瓶活血散')  then  Continue;  {ComboBox_MP.Text}
         _idtmp:=pckObjId^;
         I1:=i; {红,蓝所在的包裹位置}
    end;
  end;
    RecoverMe(_idtmp,I1);
end;
 





附件列表

 

posted @ 2012-05-29 16:44  XE2011  阅读(191)  评论(0编辑  收藏  举报