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

📄 unit1.pas

📁 完美国际辅助代码..很好用用易语言.自己下载
💻 PAS
📖 第 1 页 / 共 2 页
字号:
           end;
        end;

    if (WorkIndex = 0) and (WorkStart = False) then Closehandle(ProcessID);
  end;

end;

procedure TfrmMain.WMHotKey(var Msg : TWMHotKey);
begin
  if msg.HotKey = id then
    begin
    jc := 2;
    WorkIndex := 1;
  //  nocall(pTest);
    end;
end;

function NoCall(pDaima: cardinal):Cardinal;
var
  TempppHandle: Thandle;
  Num: Cardinal;
begin
  frmMain.SkillWork := True;
  ProcessID := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);
  TempppHandle := CreateRemoteThread(ProcessID, nil, 0, Pointer(pDaima), nil, 0, num);
  WaitForSingleObject(TempppHandle, INFINITE);
  CloseHandle(TempppHandle);
  CloseHandle(ProcessID);
  frmMain.SkillWork := False;
  Result := 0;
end;

procedure TfrmMain.FunIn(FunName:Pointer;Param:pointer;ParamSize:DWORD);
//Func: Pointer; Param: Pointer; ParamSize: DWORD
var
 TAdd,PAdd: Pointer;
 TmpHandle: THandle;
begin
  jc := 1;
  ProcessID := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);
  TAdd := VirtualAllocEx(ProcessID, nil, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  PAdd := VirtualAllocEx(ProcessID, nil, ParamSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

  WriteProcessMemory(ProcessID, TAdd, FunName, 4096 , WriteCount);
  WriteProcessMemory(ProcessID ,PAdd, param, ParamSize, WriteCount);
  TmpHandle := CreateRemoteThread(ProcessID, nil, 0, TAdd, PAdd, 0, WriteCount);
  WaitForSingleObject(TmpHandle, INFINITE);
  VirtualFreeEx(ProcessID, TAdd, 4096, MEM_RELEASE);
  VirtualFreeEx(ProcessID, PAdd, ParamSize, MEM_RELEASE);
  CloseHandle(TmpHandle);
  CloseHandle(ProcessID);
  jc := 2;
end;

//选怪call
function GetGwCall(p: PGetGwCallParam):DWORD; Stdcall;
var
  edx1: DWORD;
  address:Pointer;
begin
  address:=Pointer($57C760);
  edx1 := p^.EDX;
  asm
    pushad
    mov esi, edx1
    push esi
    mov ecx, dword ptr [$91CC34]
    mov ecx, dword ptr [ecx+$20]
    add ecx,$D4
    call address
    popad;
  end;
result:=0;
end;


procedure TfrmMain.GetGw(a_gID: Cardinal);
var
  tmpID1,tmpID2 : integer;
  tmpID: cardinal;
  CallParam:TGetgwCallParam;
begin
    if jc <> 1 then
      begin
      if (a_gId = 0) and (frmMain.lstGID.Items.Count >0) then
        begin
        tmpID1 := strtoint(rightstr(frmMain.lstGID.items[0],5));
        tmpID2 := strtoint(leftstr(frmMain.lstGID.items[0],Length(frmMain.lstGID.items[0])-5));
        tmpID := tmpID2 * 100000 + tmpID1;
        //  tmpID := strtoint(frmMain.LstGID.Items[0]);
        callparam.EDX := tmpID;
        frmmain.LstGID.Items.Delete(0);
        funin(@GetGwCall,@CallParam,SizeOf(CallParam));
        SLEEP(500);
        end
      else
        begin
        callparam.EDX := a_gID;
        funin(@GetGwCall,@CallParam,SizeOf(CallParam));
        SLEEP(500);
      end;
    end;
    WorkStart := False;
end;

//使用技能call
function UseSkillCall(p: PGetGwCallParam):DWORD; Stdcall;
var                                                                                  //ok
  edx1: DWORD;
  address:Pointer;
begin
  address:=Pointer($465730);
  edx1 := p^.EDX;
  asm
    pushad
    mov eax, edx1
    mov ecx, dword ptr [$91CC34]
    mov ecx, dword ptr [ecx + $1C]
    mov ecx, dword ptr [ecx + $28]
    push -1
    push 0
    push 0
    push eax
    call address
    popad;
end;
  result:=0;
end;


function dati1(p: PGetGwCallParam):DWORD; Stdcall;
var                                                                                  //答题
  edx1: DWORD;
  addr1, addr2:Pointer;
begin
  arr1=Pointer($4AF770);
  arr2=Pointer($581EC0);
  id := p^.EDX;
  asm
  pushad
  MOV EAX,DWORD PTR DS:[$91cc34]  //基地址
  MOV EAX,[EAX+$1c]
  MOV EAX,[EAX+$4]
  MOV EAX,[EAX+$8]
  MOV ESI,[EAX+$290]
  
  MOV EDX,DWORD PTR DS:[ESI+188]
  MOV ECX,DWORD PTR DS:[ESI+180]
  PUSH id    
  PUSH 1      
    PUSH q_id
  PUSH 1
  MOV ECX,ESI
  CALL arr1 
  
  MOV ECX,EAX  
  CALL arr2
  
  popad;
end;
  result:=0;
end;

procedure TfrmMain.dati;
var
  CallParam:TGetgwCallParam;
begin
  //  frmMain.SkillWork := True;
  //  if jc <> 1 then
    begin
    //2 清风破
    //78 回城术
    callparam.EDX :=4;
    funin(@dati1,@CallParam,SizeOf(CallParam));
    SLEEP(500);
    end;
  //  frmMain.SkillWork := False;
end;





procedure TfrmMain.UseSkill;
var
  CallParam:TGetgwCallParam;
begin
    frmMain.SkillWork := True;
    if jc <> 1 then
    begin
    //2 清风破
    //78 回城术
    callparam.EDX :=218;
    funin(@useskillCall,@CallParam,SizeOf(CallParam));
    SLEEP(500);
    end;
    frmMain.SkillWork := False;
end;

//拾取物品call
function PickCall(p: PGetGwCallParam):DWORD; Stdcall;
var
  edx1, eax1: DWORD;
  address:Pointer;
begin
  address:=Pointer($57C6F0);
  edx1 := p^.EDX;
  eax1 := p^.EAX;
  asm
    pushad
    mov ecx, dword ptr [$91CC34]                       //ok
    mov edx, edx1
    push edx 
    mov ecx, dword ptr [ecx+$20]
    mov eax, eax1
    push eax 
    add  ecx, $D4
    call address
    popad
  end;
result:=0;
end;


procedure TfrmMain.PickUp; //捡物品
var
  Num: Cardinal;
  wID,wNID,wBase: Cardinal;
  pDname: Integer;
  pn: Cardinal;
  //wg_Local: Cardinal;
  w_X,w_Y: Single;
  dName: array[0..16] of WideChar;
  dWupin1: array[1..16] of Cardinal;
  dWupin2: array[1..16] of Cardinal;
  pWupin: Integer;
  CallParam: TGetgwCallParam;
begin
  ProcessID:= OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);
  if ProcessID <>0 then
    begin
    lstDw.Clear;
    ReadProcessMemory(ProcessID, Pointer(FirstAdr), @ECXI, 4, Num);
    ReadProcessMemory(ProcessID, Pointer(ECXI + $8), @ECXI, 4, Num);
    ReadProcessMemory(ProcessID, Pointer(ECXI + $24), @ECXI, 4, Num);
    ReadProcessMemory(ProcessID, Pointer(ECXI + $14), @d_Max, 4, Num);           //地上所有物品数量
    LabGWS.Caption := inttostr(d_Max);
    pWupin:= 0;
    if d_Max<>0 then
      begin
      for pn:= 0 to 768 do
        begin
        ReadProcessMemory(ProcessID, Pointer(ECXI + $18), @wBase, 4, Num);
        ReadProcessMemory(ProcessID, Pointer(wBase + pn * 4), @wBase, 4, Num);
        if wBase >0 then
          begin
          ReadProcessMemory(ProcessID, Pointer(wBase + $4), @wBase, 4, Num);
          ReadProcessMemory(ProcessID, Pointer(wBase + $168), @pdName, 4, Num);
          ReadProcessMemory(ProcessID, Pointer(pdName), @dName, 32, Num);
          ReadProcessMemory(ProcessID, Pointer(wBase + $110), @wID, 4, Num);
          ReadProcessMemory(ProcessID, Pointer(wBase + $10C), @wNID, 4, Num);
          ReadProcessMemory(ProcessID, Pointer(wBase + $3C), @w_X, 4, Num);
          ReadProcessMemory(ProcessID, Pointer(wBase + $44), @w_Y, 4, Num);
          lstDW.Items.Add(dName);
          if pos(ItemFliter,dName) = 0 then
            begin
            pWupin:= pWupin + 1;
            dWupin1[pWupin]:= wID;
            dWupin2[pWupin]:= wNID;
            end;
          end;
        end;
      end;
    end;
    frmMain.LabNwS.Caption := inttostr(pWupin);
    for pn:= 1 to pWupin do
      begin
      frmMain.LabNwS.Caption := inttostr(pWupin - pn);
      CallParam.EDX:=dWupin1[pn];
      CallParam.EAX:=dWupin2[pn];
      funin(@PickCall,@CallParam,SizeOf(CallParam));
      sleep(500);
      end;
    frmMain.GetWork := False;
    frmMain.WorkStart := False;
    frmMain.WorkIndex := 1;
end;

procedure TfrmMain.SkillGet;
var
  sBase,skill_Max,s_Skill,sEax,s_ID: Cardinal;
  pn,Num: Cardinal;
  psName: Integer;
  sName: array[0..16] of WideChar;
  stName: string;
begin
  ProcessID := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);

  if ProcessID <> 0 then
  begin
    lstSkill.Clear;
    ReadProcessMemory(ProcessID, Pointer(FirstAdr), @sBase, 4, Num);
    ReadProcessMemory(ProcessID, Pointer(sBase + $28), @sBase, 4, Num);
    ReadProcessMemory(ProcessID, Pointer(sBase + $91c), @skill_Max, 4, Num);
    frmMain.LabSkillNS.Caption := inttostr(skill_Max);
    for pn := 0 to skill_Max-1 do
    begin
      ReadProcessMemory(ProcessID, Pointer(sBase + $918), @s_skill, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(s_skill + 4 * pn), @s_skill, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(s_skill + $8), @s_ID, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(s_skill + $4), @sEax, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(sEax + $4), @sEax, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(sEax + $6e), @sEax, 4, Num);
      ReadProcessMemory(ProcessID, Pointer(sEax + $0), @sName, 32, Num);
    //  ReadProcessMemory(ProcessID, Pointer(psName), @sName, 32, Num);
      stName := sName;
      frmMain.LstSkill.Items.Add(inttostr(s_ID) + ' ' + stName);
    end;
  end;
  CloseHandle(ProcessID);
end;

procedure TfrmMain.cmdSkillClick(Sender: TObject);
begin
  skillGet;
end;

procedure TfrmMain.TWorkCTimer(Sender: TObject);
begin
  if tCheck > 0 then
    begin
    tCheck:= tCheck - 1;
    end
  else
    begin
    frmMain.TWorkC.Enabled := False;
    frmMain.WorkStart:= False;
    frmMain.WorkIndex:= 1;
    end;
end;

procedure TfrmMain.Button1Click(Sender: TObject);
begin
UseSkill;
end;

end.

⌨️ 快捷键说明

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