1 {人物可以捡起的物品最大范围 <&#61;9}
2 跑去捡
{此段代码需要hook的支持}
///
/// 捡物
///
/// 物品IDparam>
/// 系统物品ID/param>
procedure pickUpGoods(Id1:DWORD;Id2:DWORD);
begin
ASM
MOV ECX,[$924e0c]
PUSH Id1 //4FAA {物品ID}
PUSH Id2 //0C01014BD {系统ID}
MOV ECX,[ECX&#43;$20]
ADD ECX,$0EC
MOV EBX,$00583060
CALL EBX
END;
end;
{此段代码需要hook的支持}
///
/// {人物是在游戏当中还是小退}
///
function InGame():Boolean;
var gameretn:DWORD;
begin
asm
mov eax,[$00924D48]
mov gameretn,eax
end;
if gameretn&#61;0 then Result:&#61;true{在游戏当中}
else if gameretn>&#61;1 then Result:&#61;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&#61;False then Exit;
asm
mov eax,[$924E0C]
mov eax,[eax&#43;$1c]
mov eax,[eax&#43;$8]
mov eax,[eax&#43;$28]
mov ecx,[eax&#43;$18]
mov gdsTmp,ecx
end;
for I:&#61;0 to 768 do
begin
pGds:&#61;pointer(gdsTmp&#43;I*4);
if pGds^>0 then
begin
pGds :&#61;Pointer(pGds^&#43;$4);
Gds_id1 :&#61;Pointer(pGds^&#43;$110); {物品ID}
Gds_id2 :&#61;Pointer(pGds^&#43;$10C); {系统物品ID}
Gds_name :&#61;Pointer(pGds^&#43;$164);
Gds_name1 :&#61;Pointer(Gds_name^&#43;$0);
Gds_distance:&#61;Pointer(pGds^&#43;$154);
for L:&#61;0 to ListBox1.Count-1 do {}
begin {}
if Gds_name1<>ListBox1.Items[L] then continue;
Gds_id1tmp:&#61;Gds_id1^;
Gds_id2tmp:&#61;Gds_id2^;
Gds_distance1:&#61;Gds_distance^;
end;
end;
end;
if Gds_distance1<&#61;9 then pickUpGoods(Gds_id1tmp,Gds_id2tmp);{捡物}
end;
///
/// 捡物
///
/// 物品IDparam>
/// 系统物品ID/param>
procedure pickUpGoods(Id1:DWORD;Id2:DWORD);
begin
ASM
MOV ECX,[$924e0c]
PUSH Id1 //4FAA {物品ID}
PUSH Id2 //0C01014BD {系统ID}
MOV ECX,[ECX&#43;$20]
ADD ECX,$0EC
MOV EBX,$00583060
CALL EBX
END;
end;
{此段代码需要hook的支持}
///
/// {人物是在游戏当中还是小退}
///
function InGame():Boolean;
var gameretn:DWORD;
begin
asm
mov eax,[$00924D48]
mov gameretn,eax
end;
if gameretn&#61;0 then Result:&#61;true{在游戏当中}
else if gameretn>&#61;1 then Result:&#61;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&#61;False then Exit;
asm
mov eax,[$924E0C]
mov eax,[eax&#43;$1c]
mov eax,[eax&#43;$8]
mov eax,[eax&#43;$28]
mov ecx,[eax&#43;$18]
mov gdsTmp,ecx
end;
for I:&#61;0 to 768 do
begin
pGds:&#61;pointer(gdsTmp&#43;I*4);
if pGds^>0 then
begin
pGds :&#61;Pointer(pGds^&#43;$4);
Gds_id1 :&#61;Pointer(pGds^&#43;$110); {物品ID}
Gds_id2 :&#61;Pointer(pGds^&#43;$10C); {系统物品ID}
Gds_name :&#61;Pointer(pGds^&#43;$164);
Gds_name1 :&#61;Pointer(Gds_name^&#43;$0);
Gds_distance:&#61;Pointer(pGds^&#43;$154);
for L:&#61;0 to ListBox1.Count-1 do {}
begin {}
if Gds_name1<>ListBox1.Items[L] then continue;
Gds_id1tmp:&#61;Gds_id1^;
Gds_id2tmp:&#61;Gds_id2^;
Gds_distance1:&#61;Gds_distance^;
end;
end;
end;
if Gds_distance1<&#61;9 then pickUpGoods(Gds_id1tmp,Gds_id2tmp);{捡物}
end;
通过 Wiz 发布
附件列表