⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 完美国际辅助代码..很好用用易语言.自己下载
💻 PAS
📖 第 1 页 / 共 2 页
字号:
//外挂饭馆www.wgum.net
//中国最大的专业免费外挂教学,外挂研究,技术交流网站
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Math, ComCtrls,StrUtils;

type
    TfrmMain = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    gBoxinfo: TGroupBox;
    LabHPS: TLabel;
    LabMP: TLabel;
    LabMPS: TLabel;
    LabLevel: TLabel;
    LabLevelS: TLabel;
    LabExp: TLabel;
    LabExpS: TLabel;
    LabXY: TLabel;
    LabXYS: TLabel;
    LabMoney: TLabel;
    LabMoneyS: TLabel;
    LabName: TLabel;
    LabNameS: TLabel;
    LabHP: TLabel;
    gBoxBag: TGroupBox;
    LabBagN: TLabel;
    LabBagNS: TLabel;
    LstBag: TListBox;
    gBoxMoster: TGroupBox;
    LabGnumber: TLabel;
    LabGNS: TLabel;
    LabNowGID: TLabel;
    LabGID: TLabel;
    LablstG: TLabel;
    LabDGfw: TLabel;
    LabGName: TLabel;
    LabGNameS: TLabel;
    LabGHP: TLabel;
    LabGHPS: TLabel;
    LstGname: TListBox;
    LstGID: TListBox;
    TxtDGfw: TEdit;
    gBoxDw: TGroupBox;
    LabGW: TLabel;
    LabGWS: TLabel;
    LabWGl: TLabel;
    LstDW: TListBox;
    LstGL: TListBox;
    Tinfo: TTimer;
    LabSkillN: TLabel;
    LabSkillNS: TLabel;
    LstSkill: TListBox;
    cmdSkill: TButton;
    LabState: TLabel;
    LabWork: TLabel;
    LabNw: TLabel;
    LabNwS: TLabel;
    TWorkC: TTimer;
    Button1: TButton;

    procedure FormCreate(Sender: TObject);
    procedure TinfoTimer(Sender: TObject);
    procedure cmdSkillClick(Sender: TObject);
    procedure PickUp;
    procedure TWorkCTimer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure dati;
  private

  public
    id,jc:integer;
    ItemFliter: String;
    WorkStart: Boolean;
    WorkIndex: integer; // 1表示空闲;2表示打怪中;3表示拾取中;4表示运气中
    SkillWork: Boolean;
    GetWork: Boolean;
    tCheck: Integer;
    procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
    procedure FunIn(FunName:Pointer;Param:pointer;ParamSize:DWORD);
    procedure GetGw(a_gID: Cardinal);
    procedure SkillGet;
    procedure UseSkill;
  end;

  type
    PGetGwCallParam = ^TGetGwCallParam;
    TGetGwCallParam = packed record
    EDX, EAX: DWORD;
  end;

  function NoCall(pDaima: cardinal):cardinal;
  function GetGwCall(p: PGetGwCallParam):DWORD; Stdcall;
  function PickCall(p: PGetGwCallParam):DWORD; Stdcall;
var
  frmMain: TfrmMain;
  wTime: Integer;
  ProcessID: Thandle;
  ProcID: Thandle;
  Ghwnd: Thandle;
  Ecxi: Cardinal;
  r_HP,r_MaxHP,r_MP,r_MaxMP,r_Level,r_Exp,r_UpExp,r_Money: Cardinal;
  r_X,r_Y,r_OldX,r_OldY: Single;
  r_BaoN: Cardinal;
  r_Name:array[0..16] of WideChar;
  r_Name1:integer;
  d_Max: Cardinal;
  WriteCount: DWORD;

  g_ID,g_oleID,g_HP,g_MaxHP: Cardinal;
  g_X,g_Y: Single;
  g_N,g_Max: Cardinal;

  Const FirstAdr = $00920724;
  Const r_BagAdr = FirstAdr + $884 + $C;
  Const r_ExpAdr = $008F630C;

  Const pAttack = $005a7c20;
  Const pYunqi = $005a8260;
  Const pTest = $0056ED00;
  Const pUnYunqi = $005a82a0;
implementation

{$R *.dfm}

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  Ghwnd := FindWindow(nil, 'Element Client');
  if Ghwnd = 0 then begin
    ShowMessage('游戏未启动');
    Application.Terminate();
  end;
  GetWindowThreadProcessId(Ghwnd, ProcID);
  ProcessID := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);
  if ProcessID = 0 then begin
    showMessage('无法打开线程');
    Application.Terminate();
  end;
  CloseHandle(ProcessID);

  id:=GlobalAddAtom('Hotkey');
  RegisterHotKey(frmMain.handle,id,MOD_ALT,VK_F9);

  wTime := 0;
  WorkIndex := 0;
  WorkStart := False;
  skillget;
  frmMain.ItemFliter:= '';
  Tinfo.Enabled :=True;
end;

procedure TfrmMain.TinfoTimer(Sender: TObject);
var
  Num,gEcxi,gStart,gEax: Cardinal;
  bEcxi,bBase,wID: Cardinal;
  pWname,pGname: Integer;
  pd,pn: Cardinal;
  rg_Local: Single;
  g_nowID: Cardinal;
  wName,gName: array[0..16] of WideChar;
  tName,tgName: string;
 // tmpID1,tmpID2 : integer;
 // tmpID: cardinal;
 star:dword;
begin
  if wTime = 31 then begin
    wTime := 0;
    end
  else begin
    wTime := wTime + 1;
  end;
  ProcessID := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);
  if ProcessID <>0 then begin
      // 人物基本信息
          ReadProcessMemory(hProcess, pointer($922AEC), @star, 4, Num);            //**
      ReadProcessMemory(ProcessID, Pointer(FirstAdr), @ECXI, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $28), @ECXI, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $254), @r_HP, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $26c), @r_MaxHP, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $258), @r_MP, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $270), @r_MaxMP, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $260), @r_Exp, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $24c), @r_Level, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $3a4), @r_Name1, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(r_Name1), @r_Name, 34, Num);
      ReadProcessMemory(ProcessID, Pointer(r_ExpAdr + 4 * r_Level), @r_UpExp, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $3d8), @r_X, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $3e0), @r_Y, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $2D4), @r_Money, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(ECXI + $7c4), @g_nowID, 4, Num);

      if str=1 then
      begin
         sleep(1000);
         dati;
      end;






      LabNameS.Caption := r_Name;
      LabHPS.Caption := inttostr(r_HP) + '/' + inttostr(r_MaxHP);
      LabMPS.Caption := inttostr(r_MP) + '/' + inttostr(r_MaxMP);
      LablevelS.Caption := inttostr(r_Level);
      LabExpS.Caption := inttostr(r_Exp) + '/' + inttostr(r_UpExp);
      If r_X < 0 Then begin
        If Abs(floor(r_X)) <> Abs(r_X) Then
          r_X := floor(r_X) + 1;
       end
      else begin
        r_X := floor(r_X);
      end;
      If r_Y < 0 Then begin
        If Abs(floor(r_Y)) <> Abs(r_Y) Then
          r_Y := floor(r_Y) + 1;
        end
      else begin
        r_Y := floor(r_Y);
      end;
      LabXYS.Caption := '(' + inttostr(floor(r_X)) + ',' + inttostr(floor(r_Y)) + ')';
      LabMoneys.Caption := inttostr(floor(r_Money / 10000)) + '金 ' + inttostr(floor((r_Money Mod 10000) / 100)) + '银 ' + inttostr(floor(r_Money Mod 100)) + '铜';
      LabGID.Caption := inttostr(g_nowID);

      //包裹基本信息
      If wTime = 1 Then begin
        lstBag.Clear;
        ReadProcessMemory(ProcessID, Pointer(ECXI + $880), @bEcxi, 4, Num);
        ReadProcessMemory(ProcessID, Pointer(bEcxi + $10), @r_BaoN, 4, Num);
        ReadProcessMemory(ProcessID, Pointer(bEcxi + $C), @bEcxi, 4, Num);
        for pn := 0 to r_BaoN -1 do
        begin
          ReadProcessMemory(ProcessID, Pointer(bEcxi + pn * 4), @bBase, 4, Num);
          ReadProcessMemory(ProcessID, Pointer(bBase + $14), @pd, 4, Num);
          if pd > 0 then begin
            ReadProcessMemory(ProcessID, Pointer(bBase + $8), @wID, 4, Num);
          //  ReadProcessMemory(ProcessID, Pointer(bBase + $44), @wName, 32, Num);
         //   ReadProcessMemory(ProcessID, Pointer(pwName + $E), @wName, 32, Num);
        //    tName := wName;
         //   if pos('\r',tName)>0 then tName := leftstr(tName,pos('\r',tName)-1);
            lstbag.Items.Add(inttostr(wid));
          end;
        //pwName := 0;
          pd := 0;
        end;
        LabBagNS.Caption := inttostr(lstBag.Items.Count);

        //身边怪基本信息
        lstGName.Clear;
        lstGID.Clear;
        ReadProcessMemory(ProcessID, Pointer(FirstAdr), @gEcxi, 4, Num);
        ReadProcessMemory(ProcessID, Pointer(gEcxi + $8), @gEcxi, 4, Num);
        ReadProcessMemory(ProcessID, Pointer(gEcxi + $20), @gEcxi, 4, Num);
        ReadProcessMemory(ProcessID, Pointer(gEcxi + $14), @g_N, 4, Num);         //数量
        ReadProcessMemory(ProcessID, Pointer(gEcxi + $24), @g_Max, 4, Num);       //最大值
        ReadProcessMemory(ProcessID, Pointer(gEcxi + $18), @gStart, 4, Num);      //首地址
        for pn := 0 to g_Max do
        begin
          ReadProcessMemory(ProcessID, Pointer(gStart + 4 * pn), @gEax, 4, Num);
          if gEax > 0 then begin
            ReadProcessMemory(ProcessID, Pointer(gEax + $4), @gEax, 4, Num);
            ReadProcessMemory(ProcessID, Pointer(gEax + $11C), @g_ID, 4, Num);
            ReadProcessMemory(ProcessID, Pointer(gEax + $134), @g_HP, 4, Num);
            ReadProcessMemory(ProcessID, Pointer(gEax + $14C), @g_MaxHP, 4, Num);
            ReadProcessMemory(ProcessID, Pointer(gEax + $3C), @g_X, 4, Num);
            ReadProcessMemory(ProcessID, Pointer(gEax + $44), @g_Y, 4, Num);
            ReadProcessMemory(ProcessID, Pointer(gEax + $22c), @rg_Local, 4, Num);     //距离
            if rg_Local < 10 then begin
              ReadProcessMemory(ProcessID, Pointer(gEax + $208), @pgName, 4, Num);      //名称
              ReadProcessMemory(ProcessID, Pointer(pgName), @gName, 32, Num);
              tgName := gName;
              lstGname.Items.Add(tgName + ' ' + inttostr(floor(rg_Local)));
              lstGID.Items.Add(inttostr(g_id));
              LabGNS.Caption := inttostr(lstGID.Items.Count);
            end;
          end;
        end;
      end;

      
    if workstart = False then
      begin
      case workIndex of
        0:
        begin
        frmMain.LabWork.Caption := '空闲';
        end;
        1:
        begin
        if (strtoint(leftstr(frmMain.LabGID.Caption,1)) = 0) and (strtoint(frmMain.LabNwS.Caption) = 0) then
          begin
          if lstGID.Items.Count >0 then
            begin
            WorkStart := True;
            frmMain.LabWork.Caption := '寻怪中';
            GetGw(0);
            end;
          end
        else if strtoint(leftstr(frmMain.LabGID.Caption,1)) <> 0 then
          begin
          WorkIndex := 2;
          end
        end;
        2:
        begin
        WorkStart := True;
        frmMain.LabWork.Caption := '打怪中';
        tCheck:=15;
        TWorkC.Enabled := True;
        UseSkill;
       // Nocall(pAttack);
        end;
        3:
        //地面物品
        begin
        if frmMain.GetWork = False then
          begin
          frmMain.LabWork.Caption := '拣物品';
          frmMain.GetWork:= True;
          PickUP;
          end;
        end;
      end;
    end;

       if (WorkIndex = 2) and (WorkStart = True) then
        begin
         if strtoint(leftstr(frmMain.LabGID.Caption,1)) = 0 then
           begin
           frmMain.LabWork.Caption := '怪死了';
           if strtoint(frmMain.LabBagNS.Caption)<24 then
             begin
             WorkStart := False;
             WorkIndex := 3;
             end
           else
             begin
             WorkStart:= False;
             WorkIndex:= 1;
             end;
           end
         else
           begin
           if SkillWork = False then Nocall(pAttack);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -