|
Движение за выбранным персонажем - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
09.05.2012, 22:21
|
#1
|
|
|
|
Пехотинец
|
Регистрация: 06.03.2012
Сообщений: 80
Популярность: 413
Сказал(а) спасибо: 15
Поблагодарили 73 раз(а) в 15 сообщениях
|
Движение за выбранным персонажем
Есть чар в таргете, мы должы следоваьт за ним(всегда).
Как такое реализовать?(C#)
Хоть намек
|
|
|
09.05.2012, 22:48
|
#2
|
|
|
|
Старший сержант
|
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
|
Re: Движение за выбранным персонажем
Берешь исходники FlyWQ и смотришь как там сделано движение по точкам.
Потом переписываешь всё на шарп.
Мои боты в иксах исправно ходили на мной. Могу кинуть код, но он под 1.4.4, я оффсеты еще не правил.
Ну а координаты цели узнаем по оффсетам.
|
|
|
09.05.2012, 23:07
|
#3
|
|
|
|
Разведчик
|
Регистрация: 07.10.2010
Сообщений: 21
Популярность: 90
Сказал(а) спасибо: 14
Поблагодарили 15 раз(а) в 14 сообщениях
|
Re: Движение за выбранным персонажем
|
Цитата: |
|
|
|
|
|
|
|
|
|
Структура / Список игроков рядом:
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. используем координаты для инжекта Walk
Код:
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),@WalkMode,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(aParams));
end;
инжект переделать под (C#)!!!)
________________
если я не ошибаюсь, а могу и ошибаться ...
too many actual parameters
|
|
|
Пользователь сказал cпасибо:
|
|
10.05.2012, 02:26
|
#4
|
|
|
|
Сержант
|
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
|
Re: Движение за выбранным персонажем
У меня вот так. Только тут адрес под 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. Честно говоря, не тестировал на игроках, но я уверен, что прокатит.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
|
|
|
20.05.2012, 15:16
|
#5
|
|
|
|
Пехотинец
|
Регистрация: 29.05.2010
Сообщений: 58
Популярность: 10
Сказал(а) спасибо: 80
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Движение за выбранным персонажем
Код:
procedure Walk(x,y,z:single);
var aParams: TParams;
begin
ReadProcessMemory(aHandle,ptr(BaseWalkMode),@WalkMode,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(aParams));
end;
почему в readwrite показывает ошибку? как его обозначить?
и BaseWalkMode = GA +20 +61C я правильно записал?
Код:
var
WalkMode1,WalkMode2,WalkMode3: dword;
...
ReadProcessMemory(KlientWindow,Pointer($A571E0),@WalkMode1,1,readwrite);
ReadProcessMemory(KlientWindow,Pointer(BUM+$20),@WalkMode2,1,readwrite);
ReadProcessMemory(KlientWindow,Pointer(BUM+$61c),@WalkMod3,1,readwrite);
и когда создаю такую процедуру,показывается ошибка в конце PParams
Код:
procedure WalkCall(aPParams:PParams);Stdcall;
Последний раз редактировалось Meg(0); 20.05.2012 в 15:49.
|
|
|
24.05.2012, 05:25
|
#6
|
|
|
|
Разведчик
|
Регистрация: 01.07.2009
Сообщений: 21
Популярность: 83
Сказал(а) спасибо: 30
Поблагодарили 14 раз(а) в 11 сообщениях
|
Re: Движение за выбранным персонажем
|
Цитата: |
|
|
|
|
|
|
|
|
|
Код:
procedure Walk(x,y,z:single);
var aParams: TParams;
begin
ReadProcessMemory(aHandle,ptr(BaseWalkMode),@WalkMode,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(aParams));
end;
почему в readwrite показывает ошибку? как его обозначить?
и BaseWalkMode = GA +20 +61C я правильно записал?
Код:
var
WalkMode1,WalkMode2,WalkMode3: dword;
...
ReadProcessMemory(KlientWindow,Pointer($A571E0),@WalkMode1,1,readwrite);
ReadProcessMemory(KlientWindow,Pointer(BUM+$20),@WalkMode2,1,readwrite);
ReadProcessMemory(KlientWindow,Pointer(BUM+$61c),@WalkMod3,1,readwrite);
и когда создаю такую процедуру,показывается ошибка в конце PParams
Код:
procedure WalkCall(aPParams:PParams);Stdcall;
|
|
|
|
|
|
readwrite -обычный dword;
ReadProcessMemory(KlientWindow,Pointer(BUM+$ 20),@WalkMode2, 1,readwrite);
- тут не $20 а $34 - начало структуры персонажа
-вместо 1 поставил бы - SizeOf(WalkMode2)
PParams - типы для инжекта
нуно добить это:
TYPE
PParams = ^TParams; //типы инжектов
TParams = packed record
Param4,Param5,Param6:Single;
end;
Вот рабочий Walk с исправленными адрессами
Последний раз редактировалось krysun; 24.05.2012 в 13:29.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 03:41.
|
|