PDA

Просмотр полной версии : Движение за выбранным персонажем


Spyware
09.05.2012, 22:21
Есть чар в таргете, мы должы следоваьт за ним(всегда).
Как такое реализовать?(C#)
Хоть намек :)

N00bSa1b0t
09.05.2012, 22:48
Берешь исходники FlyWQ и смотришь как там сделано движение по точкам.
Потом переписываешь всё на шарп.
Мои боты в иксах исправно ходили на мной. Могу кинуть код, но он под 1.4.4, я оффсеты еще не правил.

Ну а координаты цели узнаем по оффсетам.

zaparca
09.05.2012, 23:07
Структура / Список игроков рядом:
GA +8 +20 +18 +[I*4] + (+0)^J +4: (I in [0..300])

GA +8 +20 +14: - Players count
+3C PlayerLocX (float)
+40 PlayerLocZ (float)
+44 PlayerLocY (float)
+35C + [I*2] PlayerBuffs (I in [0..N]) (1b)
+360 PlayerBuffs Number
+458 PlayerId
+464 PlayerLvl
+46C PlayerHP
+470 PlayerMP
+4A4 PlayerMaxHP
+4A8 PlayerMaxMP
+5D4 PlayerClanID
+608 +0 PlayerName (UText / Unicode String)
+610 PlayerClassID
+614 PlayerGender
+61C PlayerWalkMode
+620 RunMode (1b) (0 - Walk; 1 - Run)
+6С8 PlayerMTargetID

адреса старые


1. ищем имя перса или ID
2. узнаем координаты перса
3. используем координаты для инжекта
procedure WalkCall(aPParams:PParams);Stdcall;
var CallAddress1,CallAddress2,CallAddress3:Pointer;
x,y,z:single;
flying:DWORD;
begin
CallAddress1:=Pointer($00468070);
CallAddress2:=Pointer($0046BCB0);
CallAddress3:=Pointer($00468470);
x:=aPParams^.Param4;
y:=aPParams^.Param5;
z:=aPParams^.Param6;
flying:=aPParams^.Param1;
asm
pushad
mov eax, dword ptr [PW_GAMERUN_ADDR]
mov esi, dword ptr [eax+$20]
mov ecx, dword ptr [esi+$FE0]
push 1
call CallAddress1
mov edi, eax
lea eax, dword ptr [esp+$0C]
push eax
push flying
mov ecx, edi
call CallAddress2
mov ecx, dword ptr [esi+$FE0]
push 0
push 1
push edi
push 1
call CallAddress3
mov eax, dword ptr [PW_GAMERUN_ADDR]
mov eax, dword ptr [eax+$20]
mov eax, dword ptr [eax+$FE0]
mov eax, dword ptr [eax+$30]
mov ecx, dword ptr [eax+$4]
mov eax, x
mov dword ptr[ecx+$20], eax
mov eax, z
mov dword ptr[ecx+$24], eax
mov eax, y
mov dword ptr[ecx+$28], eax
popad
end;
end;

procedure Walk(x,y,z:single);
var aParams: TParams;
begin
ReadProcessMemory(aHandle,ptr(BaseWalkMode),@WalkM ode,1,readwrite); //BaseWalkMode = GA +20 +61C
if WalkMode = 0 then aParams.Param1:=0 else aParams.Param1:=1;
aParams.Param3:=x;
aParams.Param4:=y;
aParams.Param5:=z;
InjectFunc(aHandle,@WalkCall,@aParams,SizeOf(aPara ms));
end; инжект переделать под (C#)!!!)

BritishColonist
10.05.2012, 02:26
У меня вот так. Только тут адрес под 1.4.4.

void CHostPlayer::MoveToTarget(DWORD WorldId)
{
DWORD Function = 0x42EEE0;
__asm {
mov ecx,dword ptr [BA]
push 0
push WorldId
mov ecx,dword ptr [ecx+0x1C]
mov ecx,dword ptr [ecx+0x1C]
call Function
}
}

Бег к NPC. Честно говоря, не тестировал на игроках, но я уверен, что прокатит.

Meg(0)
20.05.2012, 15:16
procedure Walk(x,y,z:single);
var aParams: TParams;
begin
ReadProcessMemory(aHandle,ptr(BaseWalkMode),@WalkM ode,1,readwrite); //BaseWalkMode = GA +20 +61C
if WalkMode = 0 then aParams.Param1:=0 else aParams.Param1:=1;
aParams.Param3:=x;
aParams.Param4:=y;
aParams.Param5:=z;
InjectFunc(aHandle,@WalkCall,@aParams,SizeOf(aPara ms));
end;

почему в readwrite показывает ошибку? как его обозначить?

и BaseWalkMode = GA +20 +61C я правильно записал?

var
WalkMode1,WalkMode2,WalkMode3: dword;
...
ReadProcessMemory(KlientWindow,Pointer($A571E0),@W alkMode1,1,readwrite);
ReadProcessMemory(KlientWindow,Pointer(BUM+$20),@W alkMode2,1,readwrite);
ReadProcessMemory(KlientWindow,Pointer(BUM+$61c),@ WalkMod3,1,readwrite);

и когда создаю такую процедуру,показывается ошибка в конце PParams
procedure WalkCall(aPParams:PParams);Stdcall;

krysun
24.05.2012, 05:25
procedure Walk(x,y,z:single);
var aParams: TParams;
begin
ReadProcessMemory(aHandle,ptr(BaseWalkMode),@WalkM ode,1,readwrite); //BaseWalkMode = GA +20 +61C
if WalkMode = 0 then aParams.Param1:=0 else aParams.Param1:=1;
aParams.Param3:=x;
aParams.Param4:=y;
aParams.Param5:=z;
InjectFunc(aHandle,@WalkCall,@aParams,SizeOf(aPara ms));
end;

почему в readwrite показывает ошибку? как его обозначить?

и BaseWalkMode = GA +20 +61C я правильно записал?

var
WalkMode1,WalkMode2,WalkMode3: dword;
...
ReadProcessMemory(KlientWindow,Pointer($A571E0),@W alkMode1,1,readwrite);
ReadProcessMemory(KlientWindow,Pointer(BUM+$20),@W alkMode2,1,readwrite);
ReadProcessMemory(KlientWindow,Pointer(BUM+$61c),@ WalkMod3,1,readwrite);

и когда создаю такую процедуру,показывается ошибка в конце PParams
procedure WalkCall(aPParams:PParams);Stdcall;

readwrite -обычный dword;
ReadProcessMemory(KlientWindow,Pointer(BUM+$20),@W alkMode2,1,readwrite);
- тут не $20 а $34 - начало структуры персонажа
-вместо 1 поставил бы - SizeOf(WalkMode2)

PParams - типы для инжекта

нуно добить это:
TYPE
PParams = ^TParams; //типы инжектов
TParams = packed record
Param4,Param5,Param6:Single;
end;

Вот рабочий Walk с исправленными адрессами ([Ссылки могут видеть только зарегистрированные и активированные пользователи])