krysun
17.09.2011, 10:30
Перевел с туташнего автоита, работает стабильно.
Пример только показывает принцип, смещается вверх. Остальное не писал.
unit wallhack;
interface
uses Windows;
procedure TravelUp(_hProcess: DWORD); //Вверх
procedure TravelDown(_hProcess: DWORD); //Вниз
procedure TravelNorth(_hProcess: DWORD); //Север
procedure TravelSouth(_hProcess: DWORD);//Юг
procedure TravelEast(_hProcess: DWORD); //Восток
procedure TravelWest(_hProcess: DWORD); //Запад
implementation
CONST
base_main = $A571E0;
off_jump1 = $34;
off_jump2 = $CD0;
off_cLocX = $3C;
off_cLocY = $44;
off_cLocZ = $40;
off_pLocX = $69C;
off_pLocY = $6A4;
off_pLocZ = $6A0;
travel_ms = 100;
timeleft_ms = 2000;
speed_x = 0.4;
speed_y = 0.4;
speed_z = 1.5;
VAR
p_cc: DWORD;
p_cLocX: SINGLE;
p_cLocY: SINGLE;
p_cLocZ: SINGLE;
p_pLocX: SINGLE;
p_pLocY: SINGLE;
p_pLocZ: SINGLE;
timeleft: integer;
procedure GetCurrCoords(_hProcess: dword);
var
rw: dword;
begin
ReadProcessMemory(_hProcess,ptr(base_main),@p_cc,s izeof(p_cc),rw);
ReadProcessMemory(_hProcess,ptr(p_cc+$20),@p_cc,si zeof(p_cc),rw);
ReadProcessMemory(_hProcess,ptr(p_cc+off_cLocX),@p _cLocX,sizeof(p_cLocX),rw);
ReadProcessMemory(_hProcess,ptr(p_cc+off_cLocY),@p _cLocY,sizeof(p_cLocY),rw);
ReadProcessMemory(_hProcess,ptr(p_cc+off_cLocZ),@p _cLocZ,sizeof(p_cLocZ),rw);
End;
procedure WriteJump(_hProcess:dword);
var
rw:dword;
_flag: byte;
begin
WriteProcessMemory(_hProcess,ptr(p_cc + off_jump2),@_flag,4,rw);
End;
procedure TravelUp(_hProcess: DWORD); //Вверх
var
rw: dword;
temp, final: single;
const
value = 6;
begin
temp:=0;
Sleep(100);
GetCurrCoords(_hProcess);
temp := p_cLocZ;
final := temp + value;
timeleft := timeleft_ms;
While (temp < final) and (timeleft > 0) do
begin
temp := temp + speed_z;
WriteJump(_hProcess);
WriteProcessMemory(_hProcess,ptr(p_cc + off_pLocZ),@temp,sizeof(temp),rw);
WriteProcessMemory(_hProcess,ptr(p_cc + off_cLocZ),@temp,sizeof(temp),rw);
Sleep(travel_ms);
GetCurrCoords(_hProcess);
temp := p_cLocZ;
timeleft := timeleft - travel_ms;
end;
End;
procedure TravelDown(_hProcess: DWORD); // Вниз
var
rw: dword;
temp, final: single;
const
value = 5;
begin
Sleep(100);
GetCurrCoords(_hProcess);
temp := p_cLocZ;
final := temp - value;
timeleft := timeleft_ms;
While temp > final do
begin
temp := temp - speed_z;
WriteJump(_hProcess);
WriteProcessMemory(_hProcess,ptr(p_cc + off_pLocZ),@temp,sizeof(temp),rw);
WriteProcessMemory(_hProcess,ptr(p_cc + off_cLocZ),@temp,sizeof(temp),rw);
Sleep(travel_ms);
GetCurrCoords(_hProcess);
temp := p_cLocZ;
timeleft := timeleft - travel_ms;
end;
End;
procedure TravelNorth(_hProcess: DWORD); //Север
var
rw: dword;
temp, final: single;
const
value = 5;
begin
Sleep(100);
GetCurrCoords(_hProcess);
temp := p_cLocY;
final := temp + value;
timeleft := timeleft_ms;
While temp < final do
begin
temp := temp + speed_y;
WriteJump(_hProcess);
WriteProcessMemory(_hProcess,ptr(p_cc + off_pLocY),@temp,sizeof(temp),rw);
WriteProcessMemory(_hProcess,ptr(p_cc + off_cLocY),@temp,sizeof(temp),rw);
Sleep(travel_ms);
GetCurrCoords(_hProcess);
temp := p_cLocY;
timeleft := timeleft - travel_ms;
end;
End;
procedure TravelSouth(_hProcess: DWORD); //Юг
var
rw: dword;
temp, final: single;
const
value = 5;
begin
Sleep(100);
GetCurrCoords(_hProcess);
temp := p_cLocY;
final := temp - value;
timeleft := timeleft_ms;
While temp > final do
begin
temp := temp - speed_y;
WriteJump(_hProcess);
WriteProcessMemory(_hProcess,ptr(p_cc + off_pLocY),@temp,sizeof(temp),rw);
WriteProcessMemory(_hProcess,ptr(p_cc + off_cLocY),@temp,sizeof(temp),rw);
Sleep(travel_ms);
GetCurrCoords(_hProcess);
temp := p_cLocY;
timeleft := timeleft - travel_ms;
end;
End;
procedure TravelEast(_hProcess: DWORD); // Восток
var
rw: dword;
temp, final: single;
const
value = 5;
begin
Sleep(100);
GetCurrCoords(_hProcess);
temp := p_cLocX;
final := temp + value;
timeleft := timeleft_ms;
While temp < final do
begin
temp := temp + speed_x;
WriteJump(_hProcess);
WriteProcessMemory(_hProcess,ptr(p_cc + off_pLocX),@temp,sizeof(temp),rw);
WriteProcessMemory(_hProcess,ptr(p_cc + off_cLocX),@temp,sizeof(temp),rw);
Sleep(travel_ms);
GetCurrCoords(_hProcess);
temp := p_cLocX;
timeleft := timeleft - travel_ms;
end;
End;
procedure TravelWest(_hProcess: DWORD); // Запад
var
rw: dword;
temp, final: single;
const
value = 5;
begin
Sleep(100);
GetCurrCoords(_hProcess);
temp := p_cLocX;
final := temp - value;
timeleft := timeleft_ms;
While temp > final do
begin
temp := temp - speed_x;
WriteJump(_hProcess);
WriteProcessMemory(_hProcess,ptr(p_cc + off_pLocX),@temp,sizeof(temp),rw);
WriteProcessMemory(_hProcess,ptr(p_cc + off_cLocX),@temp,sizeof(temp),rw);
Sleep(travel_ms);
GetCurrCoords(_hProcess);
temp := p_cLocX;
timeleft := timeleft - travel_ms;
end;
End;
end.
; Доделал остальные функции и поставил ограничение выполнения по времени. А то столкнулся с тем, что заклинивает иногда.
; Исправил адреса под "Земли Духов"
Пример только показывает принцип, смещается вверх. Остальное не писал.
unit wallhack;
interface
uses Windows;
procedure TravelUp(_hProcess: DWORD); //Вверх
procedure TravelDown(_hProcess: DWORD); //Вниз
procedure TravelNorth(_hProcess: DWORD); //Север
procedure TravelSouth(_hProcess: DWORD);//Юг
procedure TravelEast(_hProcess: DWORD); //Восток
procedure TravelWest(_hProcess: DWORD); //Запад
implementation
CONST
base_main = $A571E0;
off_jump1 = $34;
off_jump2 = $CD0;
off_cLocX = $3C;
off_cLocY = $44;
off_cLocZ = $40;
off_pLocX = $69C;
off_pLocY = $6A4;
off_pLocZ = $6A0;
travel_ms = 100;
timeleft_ms = 2000;
speed_x = 0.4;
speed_y = 0.4;
speed_z = 1.5;
VAR
p_cc: DWORD;
p_cLocX: SINGLE;
p_cLocY: SINGLE;
p_cLocZ: SINGLE;
p_pLocX: SINGLE;
p_pLocY: SINGLE;
p_pLocZ: SINGLE;
timeleft: integer;
procedure GetCurrCoords(_hProcess: dword);
var
rw: dword;
begin
ReadProcessMemory(_hProcess,ptr(base_main),@p_cc,s izeof(p_cc),rw);
ReadProcessMemory(_hProcess,ptr(p_cc+$20),@p_cc,si zeof(p_cc),rw);
ReadProcessMemory(_hProcess,ptr(p_cc+off_cLocX),@p _cLocX,sizeof(p_cLocX),rw);
ReadProcessMemory(_hProcess,ptr(p_cc+off_cLocY),@p _cLocY,sizeof(p_cLocY),rw);
ReadProcessMemory(_hProcess,ptr(p_cc+off_cLocZ),@p _cLocZ,sizeof(p_cLocZ),rw);
End;
procedure WriteJump(_hProcess:dword);
var
rw:dword;
_flag: byte;
begin
WriteProcessMemory(_hProcess,ptr(p_cc + off_jump2),@_flag,4,rw);
End;
procedure TravelUp(_hProcess: DWORD); //Вверх
var
rw: dword;
temp, final: single;
const
value = 6;
begin
temp:=0;
Sleep(100);
GetCurrCoords(_hProcess);
temp := p_cLocZ;
final := temp + value;
timeleft := timeleft_ms;
While (temp < final) and (timeleft > 0) do
begin
temp := temp + speed_z;
WriteJump(_hProcess);
WriteProcessMemory(_hProcess,ptr(p_cc + off_pLocZ),@temp,sizeof(temp),rw);
WriteProcessMemory(_hProcess,ptr(p_cc + off_cLocZ),@temp,sizeof(temp),rw);
Sleep(travel_ms);
GetCurrCoords(_hProcess);
temp := p_cLocZ;
timeleft := timeleft - travel_ms;
end;
End;
procedure TravelDown(_hProcess: DWORD); // Вниз
var
rw: dword;
temp, final: single;
const
value = 5;
begin
Sleep(100);
GetCurrCoords(_hProcess);
temp := p_cLocZ;
final := temp - value;
timeleft := timeleft_ms;
While temp > final do
begin
temp := temp - speed_z;
WriteJump(_hProcess);
WriteProcessMemory(_hProcess,ptr(p_cc + off_pLocZ),@temp,sizeof(temp),rw);
WriteProcessMemory(_hProcess,ptr(p_cc + off_cLocZ),@temp,sizeof(temp),rw);
Sleep(travel_ms);
GetCurrCoords(_hProcess);
temp := p_cLocZ;
timeleft := timeleft - travel_ms;
end;
End;
procedure TravelNorth(_hProcess: DWORD); //Север
var
rw: dword;
temp, final: single;
const
value = 5;
begin
Sleep(100);
GetCurrCoords(_hProcess);
temp := p_cLocY;
final := temp + value;
timeleft := timeleft_ms;
While temp < final do
begin
temp := temp + speed_y;
WriteJump(_hProcess);
WriteProcessMemory(_hProcess,ptr(p_cc + off_pLocY),@temp,sizeof(temp),rw);
WriteProcessMemory(_hProcess,ptr(p_cc + off_cLocY),@temp,sizeof(temp),rw);
Sleep(travel_ms);
GetCurrCoords(_hProcess);
temp := p_cLocY;
timeleft := timeleft - travel_ms;
end;
End;
procedure TravelSouth(_hProcess: DWORD); //Юг
var
rw: dword;
temp, final: single;
const
value = 5;
begin
Sleep(100);
GetCurrCoords(_hProcess);
temp := p_cLocY;
final := temp - value;
timeleft := timeleft_ms;
While temp > final do
begin
temp := temp - speed_y;
WriteJump(_hProcess);
WriteProcessMemory(_hProcess,ptr(p_cc + off_pLocY),@temp,sizeof(temp),rw);
WriteProcessMemory(_hProcess,ptr(p_cc + off_cLocY),@temp,sizeof(temp),rw);
Sleep(travel_ms);
GetCurrCoords(_hProcess);
temp := p_cLocY;
timeleft := timeleft - travel_ms;
end;
End;
procedure TravelEast(_hProcess: DWORD); // Восток
var
rw: dword;
temp, final: single;
const
value = 5;
begin
Sleep(100);
GetCurrCoords(_hProcess);
temp := p_cLocX;
final := temp + value;
timeleft := timeleft_ms;
While temp < final do
begin
temp := temp + speed_x;
WriteJump(_hProcess);
WriteProcessMemory(_hProcess,ptr(p_cc + off_pLocX),@temp,sizeof(temp),rw);
WriteProcessMemory(_hProcess,ptr(p_cc + off_cLocX),@temp,sizeof(temp),rw);
Sleep(travel_ms);
GetCurrCoords(_hProcess);
temp := p_cLocX;
timeleft := timeleft - travel_ms;
end;
End;
procedure TravelWest(_hProcess: DWORD); // Запад
var
rw: dword;
temp, final: single;
const
value = 5;
begin
Sleep(100);
GetCurrCoords(_hProcess);
temp := p_cLocX;
final := temp - value;
timeleft := timeleft_ms;
While temp > final do
begin
temp := temp - speed_x;
WriteJump(_hProcess);
WriteProcessMemory(_hProcess,ptr(p_cc + off_pLocX),@temp,sizeof(temp),rw);
WriteProcessMemory(_hProcess,ptr(p_cc + off_cLocX),@temp,sizeof(temp),rw);
Sleep(travel_ms);
GetCurrCoords(_hProcess);
temp := p_cLocX;
timeleft := timeleft - travel_ms;
end;
End;
end.
; Доделал остальные функции и поставил ограничение выполнения по времени. А то столкнулся с тем, что заклинивает иногда.
; Исправил адреса под "Земли Духов"