procedure Wait(MSecs: Integer);
var
FirstTickCount, Now: Longint;
begin
FirstTickCount := GetTickCount();
repeat
Application.ProcessMessages;
sleep(1);
Now := GetTickCount();
until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount);
end;
procedure bugviewer;
var
ListItem: TListItem;
i:integer;
Gamehwnd:cardinal;
GameHandle:Cardinal;
num:cardinal;
BugName:array[0..32]of wideChar;
//TargetName:array[0..32]of wideChar;
BugBase,BugArrayBase,BugNameBase:dword;//人物基址{(DNF幻影官网
WWW.DNFHUAYING.COM)}
BugArrayCount:cardinal;
TargetID:longint;
TargetHP,TargetMaxHP:cardinal ;
bugx,bugy,Bugjuli:single;
pid:cardinal;
begin
try
Gamehwnd:=findwindow(nil,'Element Client');
GetWindowThreadProcessId(Gamehwnd,@pid); //获取PID;
GameHandle:=openprocess(process_all_access,false,pid); //最高权限打开游戏;
ReadProcessMemory(gamehandle,pointer(base),@BugBase, 4, Num);//一级基址
ReadProcessMemory(gamehandle,pointer(BugBase+$8),@BugBase, 4, Num);//
ReadProcessMemory(gamehandle,pointer(BugBase+$20),@BugBase, 4, Num);//怪物基址
ReadProcessMemory(gamehandle,pointer(BugBase+$24),@BugArrayCount, 4, Num);//怪物数组最大值
ReadProcessMemory(gamehandle,pointer(BugBase+$18),@BugArrayBase, 4, Num);//怪物数组首地址
{=========================怪物列表=======================}
form1.ListView1.Items.Clear;//清空列表
For i:= 0 to BugArrayCount-1 do
begin
ReadProcessMemory(gamehandle, Pointer(BugArrayBase+4*i),@BugBase,4,Num);
if BugBase>0 then
begin
ReadProcessMemory(gamehandle, Pointer(BugBase+$4), @BugBase, 4, Num);
ReadProcessMemory(gamehandle, Pointer(BugBase+$11c), @TargetID, 4, Num);//怪物ID
ReadProcessMemory(gamehandle, Pointer(BugBase+$130), @TargetHP, 4, Num);//怪物HP
ReadProcessMemory(gamehandle, Pointer(BugBase+$148), @TargetMaxHP, 4, Num);//怪物HP上限
ReadProcessMemory(gamehandle, Pointer(BugBase+$3c), @bugx, 4, Num);//怪物X坐标
ReadProcessMemory(gamehandle, Pointer(BugBase+$44), @bugY, 4, Num);//怪物Y坐标
ReadProcessMemory(gamehandle,pointer(BugBase+$208),@BugNameBase, 4, Num); //怪物名称地址
ReadProcessMemory(gamehandle,pointer(BugNameBase),@BugName[0], 32, Num); //怪物名称地址
ReadProcessMemory(gamehandle,pointer(BugBase+$22c),@Bugjuli, 4, Num);
//ReadProcessMemory(gamehandle, Pointer(BugBase+$208), @BugName, 4, Num);//怪物名称
//ReadProcessMemory(gamehandle, Pointer(BugName+0), @BugName, 32, Num);
//ReadProcessMemory(gamehandle, Pointer(BugBase+$208), @BugName, 4, Num);//怪物名称
//ReadProcessMemory(gamehandle, Pointer(BugName+0), @TargetName, 32, Num);
//tempname:=String(TargetName);
with form1.ListView1 do
begin
ListItem := TListView(form1.ListView1).Items.Add;
ListItem.Caption := ( BugName);
listitem.SubItems.Add(inttostr(targetid));
ListItem.SubItems.Add(inttostr(TargetHP)+'/'+inttostr(TargetMaxHP));
listitem.SubItems.Add(inttostr(trunc(bugx))+','+IntToStr(Trunc(bugY)));
listitem.SubItems.Add(inttostr(trunc(Bugjuli)));
end;
end;
end;
//end;
except
//
end;
CloseHandle(gamehandle);
end;
procedure tform1.xuanguai;
var
i:integer;
myarray:Array of longint;
minvalue:longint;
s: string;
zxhwnd:hwnd;
begin
bugviewer;
setlength(myarray,form1.ListView1.Items.Count - 1);
for i := 0 to form1.ListView1.Items.Count - 1 do
begin
myarray[i]:=strtoint(form1.ListView1.Items[i].SubItems[3]);
//stringlist.Add(ListView1.Items[i].SubItems[3]);
end;
minvalue:=minIntValue((myarray));
for i := 0 to form1.ListView1.Items.Count - 1 do
begin
if form1.ListView1.Items[i].SubItems[3]= inttostr(minvalue) then
begin
s := form1.ListView1.Items[i].SubItems[0];
zxhwnd:= findwindow(nil,'Element Client');
if zxhwnd<>0 then postmessage(zxhwnd,sendmsg.wm_idxuanguai,0,strtoint(s));
end;
end;
end;
procedure useskill(skillid: Cardinal);
var
zxhwnd:hwnd;
begin
zxhwnd:=findwindow(nil,'Element Client');
if zxhwnd<>0 then postmessage(zxhwnd,sendmsg.WM_JinengGongJi,skillid,0);
end;
procedure getskill(var skill:ATSkill);
var
i,skillnum:integer;
Gamehwnd:cardinal;
GameHandle:Cardinal;
myskilladdr,skillFirst:cardinal;
num:cardinal;
baseman:cardinal;
pid:cardinal;
begin
Gamehwnd:=findwindow(nil,'Element Client');
if Gamehwnd<>0 then
Begin
GetWindowThreadProcessId(Gamehwnd,@pid); //获取PID;
GameHandle:=openprocess(process_all_access,false,pid); //最高权限打开游戏;
ReadProcessMemory(gamehandle,pointer(BASE),@BaseMan, 4, Num);//一级基址
ReadProcessMemory(gamehandle,pointer(baseman + $28), @BaseMan, 4, Num);//人物基址
readprocessmemory(gamehandle,pointer(baseman+$910),@skillnum,4,num);
readprocessmemory(gamehandle,pointer(baseman+$90c),@myskilladdr,4,num);
setlength(skill,skillNum);
for i:=0 to skillNum-1 do
begin
ReadProcessMemory(GameHandle,pointer(myskilladdr + i*$4), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $8), @skill[i].id, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $4), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $4), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $63), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst), @skill[i].name[0], 20, Num);
SkillFirst:=0;
end;
closehandle(GameHandle);
end;
end;
procedure readmyleveexp;
var
myinifile:Tinifile;
path:pchar;
i:integer;
total:integer;
section:string;
begin
path:=pchar('.\data\level.ini');
section:='level';
myinifile:=Tinifile.Create(path);
total:=myinifile.ReadInteger(section,'total',0);
setlength(leaveArray,total);
for i:=0 to high(leaveArray) do
begin
leaveArray[i]:=myinifile.ReadInteger(section,inttostr(i),0);
end;
myinifile.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
readmyleveexp;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
try
if viewthread<>nil then terminatethread(viewthread.Handle,0);
if autoattack<>nil then terminatethread(autoattack.Handle,0);
if viewerhp<>nil then terminatethread(viewerhp.Handle,0);
finally
end;
//unhook;
end;
procedure TForm1.RzBitBtn1Click(Sender: TObject);
var
i:integer;
begin
RzComboBox1.Items.Clear;
RzComboBox2.Items.Clear;
RzComboBox3.Items.Clear;
RzComboBox4.Items.Clear;
RzComboBox5.Items.Clear;
getskill(skills);
for i:=0 to high(skills) do
begin
RzComboBox1.Items.Add(skills[i].name);
RzComboBox2.Items.Add(skills[i].name);
RzComboBox3.items.Add(skills[i].name);
RzComboBox4.items.Add(skills[i].name);
RzComboBox5.items.Add(skills[i].name);
//self.ComboBox_skilladd.Items.Add(skills[i].name);
end;
if high(skills)>0 then
begin
RzComboBox1.ItemIndex:=0;
RzComboBox2.ItemIndex:=0;
RzComboBox3.ItemIndex:=0;
RzComboBox4.ItemIndex:=0;
RzComboBox5.ItemIndex:=0;
end;
end;
procedure TForm1.RzBitBtn2Click(Sender: TObject);
var
i:integer;
begin
RzListBox1.Items.Add(RzEdit1.text);
setlength(itemFilter,RzListBox1.Items.Count);
for i:=0 to high(itemFilter) do
begin
itemFilter[i].name:=RzListBox1.Items.Strings[i];
end;
end;
procedure TForm1.RzBitBtn3Click(Sender: TObject);
var
i:integer;
begin
for I := 0 to RzListBox1.Count - 1 do
begin
if RzListBox1.Selected[i] then rzlistbox1.Items[i]:=rzedit1.Text;
end;
end;
procedure TForm1.RzBitBtn4Click(Sender: TObject);
begin
RzListBox1.DeleteSelectedItems;
end;
procedure TForm1.RzBitBtn5Click(Sender: TObject);
var
zxhandle:hwnd;
begin
zxhandle:=findwindow(nil,'Element Client');
sitdown:=false;
//form1.mypostmsg(sendmsg.WM_quxiaodazuo);
sethook(zxhandle);
if viewthread<>nil then terminatethread(viewthread.Handle,0);
viewthread:=TviewMemory.Create(false);
if autoattack<>nil then terminatethread(autoattack.Handle,0);
autoattack:=Tautoattack.create(false);
if viewerhp<>nil then terminatethread(viewerhp.Handle,0);
viewerhp:=Tviewerhp.Create(false);
if pdingdiandaguai<>nil then terminatethread(pdingdiandaguai.Handle,0);
pdingdiandaguai:=Tdingdiandaguai.Create(false);
end;
procedure TForm1.RzBitBtn6Click(Sender: TObject);
begin
if viewthread<>nil then terminatethread(viewthread.Handle,0);
if autoattack<>nil then terminatethread(autoattack.Handle,0);
if viewerhp<>nil then terminatethread(viewerhp.Handle,0);
if pdingdiandaguai<>nil then terminatethread(pdingdiandaguai.Handle,0);
end;
procedure TForm1.RzBitBtn7Click(Sender: TObject);
begin
RzListBox1.Clear;
end;
procedure TForm1.RzCheckBox7Click(Sender: TObject);
begin
RzNumericEdit3.Enabled:= not RzCheckBox7.Checked;
RzNumericEdit4.Enabled:= not RzCheckBox7.Checked;
RzNumericEdit5.Enabled:= not RzCheckBox7.Checked;
if RzCheckBox7.Checked then
begin
pdingdiandaguai:=Tdingdiandaguai.Create(false);
end else if pdingdiandaguai<>nil then terminatethread(pdingdiandaguai.Handle,0);
end;
procedure TForm1.RzListBox1Click(Sender: TObject);
begin
rzedit1.Text:=RzListBox1.SelectedItem;
end;