 |
WalkCall (поправте) - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
24.05.2012, 05:39
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 01.07.2009
 Сообщений: 23
 Популярность: 83
 Сказал(а) спасибо: 33
Поблагодарили 14 раз(а) в 11 сообщениях
|
WalkCall (поправте)
procedure WalkCall(aPParams: PWalkParams);Stdcall;
var
GameAddr, CallAddress1,CallAddress2,CallAddress3: Pointer;
x,y,z: single;
flying: DWORD;
begin
GameAddr := aPParams.GameAddr;
CallAddress1:=aPParams.CallAddress1; // Pointer($00494620);
CallAddress2:=aPParams.CallAddress2; // Pointer($00498290);
CallAddress3:=aPParams.CallAddress3; // Pointer($00494EC0);
x:=aPParams.x;
y:=aPParams.y;
z:=aPParams.z;
flying:=aPParams.flying;
asm
pushad
mov eax, GameAddr //00A57ACC
mov eax, dword ptr [eax]
mov esi, dword ptr [eax+$20]
mov ecx, dword ptr [esi+$FF4]
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+$FF4]
push 0
push 1
push edi
push 1
call CallAddress3
mov eax, GameAddr //00A57ACC
mov eax, dword ptr [eax]
mov eax, dword ptr [eax+$20]
mov eax, dword ptr [eax+$FF4]
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;
Интересует выделение зелёным. Если еще что не так, поправьте плиз.
А вообще инжект Walk'a не поменялся случайно? А то ну никак не робить =(
|
|
|
24.05.2012, 10:14
|
#2
|
|
|
|
Пехотинец
|
 Регистрация: 11.11.2010
 Сообщений: 67
 Популярность: 16
 Сказал(а) спасибо: 58
Поблагодарили 8 раз(а) в 5 сообщениях
|
Re: WalkCall (поправте)
mov eax, dword ptr [eax+$20] смени на 34
mov eax, dword ptr [eax+$FF4] на 10BC
lea eax, dword ptr [esp+$0C] на 18
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
24.05.2012, 13:23
|
#3
|
|
|
|
Разведчик
|
 Регистрация: 01.07.2009
 Сообщений: 23
 Популярность: 83
 Сказал(а) спасибо: 33
Поблагодарили 14 раз(а) в 11 сообщениях
|
Re: WalkCall (поправте)
Поменял. Работает. Лови спасибку!
Вот мой код:
Код:
PParams = ^TParams;
TParams = packed record
Packet: array [0..100] of byte;
Param1,Param2,Param3: DWord;
x,y,z:single;
Param4: array [1..100] of widechar;
end;
CONST
GAME_ADD=$00A57ACC;
Код:
procedure WalkCall(aPParams:PParams);Stdcall;
var CallAddress1,CallAddress2,CallAddress3:Pointer;
x,y,z:single;
flying:DWORD;
begin
CallAddress1:=Pointer($00494620);
CallAddress2:=Pointer($00498290);
CallAddress3:=Pointer($00494EC0);
x:=aPParams^.x;
y:=aPParams^.y;
z:=aPParams^.z;
flying:=aPParams^.Param1;
asm
pushad
mov eax, dword ptr [GAME_ADD]
mov esi, dword ptr [eax+$34]
mov ecx, dword ptr [esi+$10BC]
push 1
call CallAddress1
mov edi, eax
lea eax, dword ptr [esp+$18]
push eax
push flying
mov ecx, edi
call CallAddress2
mov ecx, dword ptr [esi+$10BC]
push 0
push 1
push edi
push 1
call CallAddress3
mov eax, dword ptr [GAME_ADD]
mov eax, dword ptr [eax+$34]
mov eax, dword ptr [eax+$10BC]
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(aHandle:dword;x,y,z:single;WalkMode:dword);
var aParams: TParams;
begin
aParams.Param1:=WalkMode;
aParams.x:=x;
aParams.y:=y;
aParams.z:=z;
InjectFunc(aHandle,@WalkCall,@aParams,SizeOf(aParams));
end;
Вызываю так (перс взлетает на высоту +20, должен быть на крыльях).
Может кому и пригодится.
Код:
procedure PristWalkUp;
var x,y,z:single;
bc,temp:dword;
begin
readprocessmemory(hProcess1,ptr(game_add),@temp,sizeof(temp),bc);
readprocessmemory(hProcess1,ptr(temp+OfPersPtr),@temp,sizeof(temp),bc);
readprocessmemory(hProcess1,ptr(temp+OfPersX),@x,sizeof(x),bc);
form1.sEdit1.Text:=formatfloat('0.0000',x);
readprocessmemory(hProcess1,ptr(temp+OfPersY),@y,sizeof(y),bc);
form1.sEdit2.Text:=formatfloat('0.0000',y);
readprocessmemory(hProcess1,ptr(temp+OfPersZ),@z,sizeof(z),bc);
form1.sEdit3.Text:=formatfloat('0.0000',z);
walk(hProcess1,x,y,z+20,1);
end;
|
|
|
Пользователь сказал cпасибо:
|
|
24.05.2012, 17:11
|
#4
|
|
|
|
Пехотинец
|
 Регистрация: 29.05.2010
 Сообщений: 58
 Популярность: 10
 Сказал(а) спасибо: 80
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: WalkCall (поправте)
почему персонаж делает вид,что бежит,но остаётся на своём месте??
Код:
procedure WalkCall(aPParams:PParams);Stdcall;
var CallAddress1,CallAddress2,CallAddress3:Pointer;
x,y,z:single;
flying:DWORD;
begin
CallAddress1:=Pointer($00494620);
CallAddress2:=Pointer($00498290);
CallAddress3:=Pointer($00494EC0);
x:=aPParams^.x;
y:=aPParams^.y;
z:=aPParams^.z;
flying:=aPParams^.Param1;
asm
pushad
mov eax, dword ptr [PW_GAMERUN_ADDR]
mov esi, dword ptr [eax+$34]
mov ecx, dword ptr [esi+$10BC]
push 1
call CallAddress1
mov edi, eax
lea eax, dword ptr [esp+$18]
push eax
push flying
mov ecx, edi
call CallAddress2
mov ecx, dword ptr [esi+$10BC]
push 0
push 1
push edi
push 1
call CallAddress3
mov eax, dword ptr [PW_GAMERUN_ADDR]
mov eax, dword ptr [eax+$34]
mov eax, dword ptr [eax+$10BC]
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 TForm1.Button1Click(Sender: TObject);
var
FlyPar:Dword;
X:Single;
Y:Single;
Z:Single;
v:HWND;
ProcessId:integer;
aparams:TParams;
begin
v:=FindWindow(nil, PChar(edit1.text));
GetWindowThreadProcessId(v,@ProcessId);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,processid);
aparams.X:=20;
aParams.Y:=54;
aParams.Z:=36;
InjectFunc(hProcess,@WalkCall,@aParams,SizeOf(aParams));
end;
|
|
|
24.05.2012, 17:28
|
#5
|
|
|
|
Пехотинец
|
 Регистрация: 11.11.2010
 Сообщений: 67
 Популярность: 16
 Сказал(а) спасибо: 58
Поблагодарили 8 раз(а) в 5 сообщениях
|
Re: WalkCall (поправте)
Потому что, не в полете.
|
|
|
24.05.2012, 17:36
|
#6
|
|
|
|
Пехотинец
|
 Регистрация: 29.05.2010
 Сообщений: 58
 Популярность: 10
 Сказал(а) спасибо: 80
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: WalkCall (поправте)
|
|
|
24.05.2012, 22:39
|
#7
|
|
|
|
Разведчик
|
 Регистрация: 17.09.2009
 Сообщений: 46
 Популярность: 1187
 Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
|
Re: WalkCall (поправте)
Имитировать полёт нельзя - это не оргазм. Нужно чётко передавать флаг - на крыльях/под водой перс или стоит на земле.
Это важно, потому что в воде/в воздухе движение по Z - свободно, при движении по земле, клиент сам "прибивает" твою Z координату к нужному уровню высоты, соответственно передав своё Z в этм случае движения не будет.
Добавлено через 2 минуты
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
lea eax, dword ptr [esp+$18]
|
|
 |
|
 |
|
Не удивляйтесь потом, если у вас клиент будет внезапно выбивать...
Почему будет выбивать - спросите у гугла зачем используется регистр esp. =)))
Последний раз редактировалось vogel; 24.05.2012 в 22:41.
Причина: Добавлено сообщение
|
|
|
24.05.2012, 23:00
|
#8
|
|
|
|
Пехотинец
|
 Регистрация: 29.05.2010
 Сообщений: 58
 Популярность: 10
 Сказал(а) спасибо: 80
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: WalkCall (поправте)
он как раз ИМИТИРУЕТ бежит просто на месте или летит на месте...
|
|
|
24.05.2012, 23:14
|
#9
|
|
|
|
Разведчик
|
 Регистрация: 17.09.2009
 Сообщений: 46
 Популярность: 1187
 Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
|
Re: WalkCall (поправте)
Ещё раз ВНИМАТЕЛЬНО прочитай мой пост - там написано почему такое происходит.
|
|
|
24.05.2012, 23:28
|
#10
|
|
|
|
Пехотинец
|
 Регистрация: 29.05.2010
 Сообщений: 58
 Популярность: 10
 Сказал(а) спасибо: 80
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: WalkCall (поправте)
я убрал Z всёравно тоже самое происходит
|
|
|
25.05.2012, 02:31
|
#11
|
|
|
|
Разведчик
|
 Регистрация: 17.09.2009
 Сообщений: 46
 Популярность: 1187
 Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
|
Re: WalkCall (поправте)
Какое слово в фразе "Нужно чётко передавать флаг - на крыльях/под водой перс или стоит на земле" тебе не понятно ?
|
|
|
25.05.2012, 03:20
|
#12
|
|
|
|
Разведчик
|
 Регистрация: 01.07.2009
 Сообщений: 23
 Популярность: 83
 Сказал(а) спасибо: 33
Поблагодарили 14 раз(а) в 11 сообщениях
|
Re: WalkCall (поправте)
При вызове walk(hProcess1,x,y,z+20,1);
1 - Лететь (если на крыльях)
0 - Плыть, бежать (если стоит на ногах, или в воде)
|
|
|
Пользователь сказал cпасибо:
|
|
25.05.2012, 09:54
|
#13
|
|
|
|
Главнокомандующий
|
 Регистрация: 20.01.2010
 Сообщений: 1,539
 Популярность: 22780
 Золото Zhyk.Ru: 600
 Сказал(а) спасибо: 43
Поблагодарили 1,717 раз(а) в 538 сообщениях
|
Re: WalkCall (поправте)
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Быстрое снятие и загрузка скриншотов на хостинг.
|
|
|
25.05.2012, 23:36
|
#14
|
|
|
|
Пехотинец
|
 Регистрация: 29.05.2010
 Сообщений: 58
 Популярность: 10
 Сказал(а) спасибо: 80
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: WalkCall (поправте)
krysun, я поставил "1" и он у меня и в полёте и на земле работает))
|
|
|
31.05.2012, 02:03
|
#15
|
|
|
|
Старший сержант
|
 Регистрация: 07.11.2011
 Сообщений: 197
 Популярность: 15877
 Сказал(а) спасибо: 335
Поблагодарили 330 раз(а) в 151 сообщениях
|
Re: WalkCall (поправте)
Walk Call
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 07:24.
|
 |