Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Perfect World
You last visited: Today at 11:43

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Rus. server

Discussion on Rus. server within the Perfect World forum part of the MMORPGs category.

Reply
 
Old 02/15/2010, 13:02   #1456
 
BuBucekTop's Avatar
 
elite*gold: 0
Join Date: Nov 2007
Posts: 160
Received Thanks: 28
Quote:
Originally Posted by AlexGD View Post
Есть дикое подозрение, что координаты точки - те же самые, что и для нашего инжекта. А автопилот следит исключительно только за высотой...
Тут всё оказалось гораздо сложнее и в китайском стиле. Итого, для перемещения мы имеем:
1. координаты точки назначения (известны и кладутся через вызов Walk_Call_2)
2. Координаты точки , к которой прокладывается трасса на карте и миникарте
3. "Звёздочка" на миникарте
4. "Звёздочка" на большой карте

и все эти вещи ВООБЩЕ не связаны....
С пунктами 1 и 3 всё понятно, но меня интересуют как раз таки пункты 2 и 4. Особенно пункт 2.

Что касается автопилота - автопилот не обновляет координаты точек из п.2, п.3 и п.4

Он тупо показывает последнюю введенную через Alt+M "Звёздочку" и к ней же прибиты координаты конечного пункта трассы. В итоге я наблюдаю печальную картину - чар летит куда надо, но трасса от него тянется куда-то в жёппу =(((

Так что для полного счастья мне нужно раскопать адреса в памяти и адреса для инжекта для п.2 и п.4.
BuBucekTop is offline  
Old 02/15/2010, 13:08   #1457
 
BuBucekTop's Avatar
 
elite*gold: 0
Join Date: Nov 2007
Posts: 160
Received Thanks: 28
Quote:
Originally Posted by Barmank View Post
2BuBucekTop
Можно поподробней как ты нашел масив?
Точнее как его распознать в Асме?
А то у меня есть одна переменная и теперь я подозреваю, что это массив.
Элементарно, Ватсон - ставим брэйкпоинт на интересующую тебя функцию, выполняем действие в игре и когда бряк срабатывает - смотрим, что запихнуто в стек.
Если в стеке лежит много-много интересных и главное знакомых цыферек, а судя по дампу функция принимает только один аргумент - значит то, что лежит в стеке и есть массив.
BuBucekTop is offline  
Old 02/15/2010, 14:48   #1458
 
elite*gold: 0
Join Date: Dec 2009
Posts: 31
Received Thanks: 3
РАБОЧАЯ ПРОДАЖА
Предмет должен лежать в 1й ячейки трейд окна.

Quote:
procedure SellCall(buf:Pointer); stdcall;
var
Address, addres2: pointer;
begin
Address:=Pointer(PW_Sell_Call);
asm
pushad
push buf
push 1
call Address
add esp, $8
popad
end;
end;

procedure Sell();
var
aParamsSize: DWORD;
p1,p2,p3WORD;
buf : array [0..2] of DWORD;
begin
p1:= getDWORD(hProcess, PW_BASE_ADDRESS);
p1:= getDWORD(hProcess, p1 + $1C);
p1:= getDWORD(hProcess, p1 + $20);
p1:= getDWORD(hProcess, p1 + $C34);
p3:= getDWORD(hProcess, p1 + $C);
p2:= getDWORD(hProcess, p3 + $0);
p2:= getDWORD(hProcess, p2 + $8);
buf[0] := p2; // ID
p2:= getDWORD(hProcess, p1 + $24);
buf[1] := getDWORD(hProcess, p2); // Num ячеки инвентаря
p2:= getDWORD(hProcess, p2 + $4);
buf[2] := p2; // количество
aParamsSize:=SizeOf(buf);
InjectFunc(hProcess, @SellCall, @buf, aParamsSize);
putDWORD(hProcess, p3 + $0, 0); // обнуляем адрес
end;
Теперь тестируем на вылет

Есть мысль что инжект может срабатывать и без перекладывания в трейд окно!
Barmank is offline  
Old 02/17/2010, 09:21   #1459
 
elite*gold: 0
Join Date: Sep 2009
Posts: 13
Received Thanks: 13
Smile

Code:
procedure Sell();
var
aParamsSize: DWORD;
p1,p2, i : WORD;
buf : array [0..2] of DWORD;
begin
p1:= getDWORD(hProcess, PW_BASE_ADDRESS);
p1:= getDWORD(hProcess, p1 + $1C);
p1:= getDWORD(hProcess, p1 + $20);
p1:= getDWORD(hProcess, p1 + [B]$C1C[/B]);
p1:= getDWORD(hProcess, p1 + $C);

i:= 0;// Ячейка инвентаря

p2:= getDWORD(hProcess, p1 + (i*4)); // итем
buf[0] := getDWORD(hProcess, p2 + $8); // ID
buf[1] := i; // Ячека инвентаря
buf[2] := getDWORD(hProcess, p2 + $10);// количество в ячейке
aParamsSize:=SizeOf(buf);
InjectFunc(hProcess, @SellCall, @buf, aParamsSize);
end;
так должно работать
slavapil is offline  
Old 02/17/2010, 11:43   #1460
 
elite*gold: 0
Join Date: Dec 2009
Posts: 31
Received Thanks: 3
Как я и писал выше покупка вещей похожа

Quote:
procedure BuyCall(buf:Pointer); stdcall;
var
Address, addres2: pointer;
begin
Address:=Pointer(pw_buy_call);
asm
pushad
push buf
push 1
call Address
add esp, $8
popad
end;
end;

procedure Buy();
var
aParamsSize: DWORD;
p1,p2,p3WORD;
buf : array [0..2] of DWORD;
begin
p1:= getDWORD(hProcess, PW_BASE_ADDRESS);
p1:= getDWORD(hProcess, p1 + $1C);
p1:= getDWORD(hProcess, p1 + $20);
p1:= getDWORD(hProcess, p1 + $C30);
p3:= getDWORD(hProcess, p1 + $C);
p2:= getDWORD(hProcess, p3 + $0);
p2:= getDWORD(hProcess, p2 + $8);
buf[0] := p2; // id
p2:= getDWORD(hProcess, p1 + $24);
buf[1] := getDWORD(hProcess, p2); // номер ячейки у продавца
p2:= getDWORD(hProcess, p2 + $4);
buf[2] := p2; // количество
aParamsSize:=SizeOf(buf);
InjectFunc(hProcess, @BuyCall, @buf, aParamsSize);
putDWORD(hProcess, p3 + $0, 0);
end;
Как и ожидалось покупка работает без перетаскивания в поля для покупки, главное знать номер ячейки у продавца, где лежит нужный предмет.
Структура должна быть похожа на инвентарь, кто знает или наталкивался, пожалуйста выложите.
Barmank is offline  
Old 02/17/2010, 11:49   #1461
 
elite*gold: 0
Join Date: Dec 2009
Posts: 31
Received Thanks: 3
Quote:
Originally Posted by slavapil View Post
Code:
procedure Sell();
var
aParamsSize: DWORD;
p1,p2, i : WORD;
buf : array [0..2] of DWORD;
begin
p1:= getDWORD(hProcess, PW_BASE_ADDRESS);
p1:= getDWORD(hProcess, p1 + $1C);
p1:= getDWORD(hProcess, p1 + $20);
p1:= getDWORD(hProcess, p1 + [B]$C1C[/B]);
p1:= getDWORD(hProcess, p1 + $C);

i:= 0;// Ячейка инвентаря

p2:= getDWORD(hProcess, p1 + (i*4)); // итем
buf[0] := getDWORD(hProcess, p2 + $8); // ID
buf[1] := i; // Ячека инвентаря
buf[2] := getDWORD(hProcess, p2 + $10);// количество в ячейке
aParamsSize:=SizeOf(buf);
InjectFunc(hProcess, @SellCall, @buf, aParamsSize);
end;
так должно работать
Верно я сам потом это заметил, и теперь буду упрощать
Таким образом не надо будет перемещать предмет в трейд окно что очень удобно
Таким же образом можно и покупать , вот тока кто бы выложил бы смещения для инвентаря НПЦ
Barmank is offline  
Old 02/18/2010, 19:57   #1462
 
muzhig's Avatar
 
elite*gold: 0
Join Date: Sep 2009
Posts: 85
Received Thanks: 27
А я движение к точке разбиваю на кучу маленьких движений.
Это позволяет облетать сложные траектории, при этом движение производится довольно мягко.

Кстати, у инжекта движения есть минус- при подлете к точке он начинает плавно сбавлять скорость.

Например, подлетая к ресурсу, он начинает тупо тормозить так, вообще некрасиво.
Кто нибудь с этим боролся?

Есть идея как сделать через задницу: ставить движение дальше чем рес, а потом когда ресурс рядом- обрубать движение. Отсюда опять старый вопрос:
Кто знает как грамотно обрубить движение? И каст скила хорошо бы тоже отменять научиться- но самое главное движение.
muzhig is offline  
Old 02/18/2010, 22:37   #1463
 
elite*gold: 0
Join Date: Dec 2009
Posts: 57
Received Thanks: 24
Code:
		////если надо поддерживать высоту	или срочно остановится
		//DWORD tt2=1; //0-текущая высота  1- автовысота 3-срочная остановка
	ReadProcessMemory(Proc,(LPCVOID)(Base),	&tempOffset,  4,0);	//
	ReadProcessMemory(Proc,(LPCVOID)(tempOffset+0x20),	&tempOffset,  4,0);	//
	ReadProcessMemory(Proc,(LPCVOID)(tempOffset+0xDDC),	&tempOffset,  4,0);	// 
	ReadProcessMemory(Proc,(LPCVOID)(tempOffset+0x30),	&tempOffset,  4,0);	// 
	ReadProcessMemory(Proc,(LPCVOID)(tempOffset+0x4),	&tempOffset,  4,0);	//
	WriteProcessMemory(Proc,(LPVOID)(tempOffset+0x2C),&m_Param,4,0);

if(m_Param==3) return true;
в свою очередь прошу инжект юзания скила. нашел адрес 45А060 , но вот что заносить в регистры?
gen-ostr is offline  
Old 02/18/2010, 22:51   #1464
 
elite*gold: 0
Join Date: Dec 2009
Posts: 57
Received Thanks: 24
Quote:
Originally Posted by muzhig View Post
Я тоже не нашел что то. ТАк что если найдешь, выложи плиз.
решил просто -заюзал инжект, чтобы банки прямо с инвентаря лопал. орать в чат перестал.(но в окно действий все-равно орет)
gen-ostr is offline  
Old 02/19/2010, 10:14   #1465
 
elite*gold: 0
Join Date: Sep 2009
Posts: 18
Received Thanks: 16
Если кому интересно вот инжект выполненный на C#.
Может кто подсказать функцию вызова питомца?
Attached Files
File Type: rar VisualStudio2008.rar (5.7 KB, 34 views)
johnic is offline  
Thanks
3 Users
Old 02/19/2010, 13:45   #1466
 
elite*gold: 0
Join Date: Nov 2009
Posts: 4
Received Thanks: 0
muzhig тормозит скорее всего из-за того что неправильно разбиваете путь на короткие (это если путь не прямая) =) попробуйте интерполяцию пути кубическим сплайном





Тут есть примеры на c++ и C#
SergXD is offline  
Old 02/19/2010, 15:41   #1467
 
elite*gold: 0
Join Date: Feb 2008
Posts: 2
Received Thanks: 0
Кстати кто может дать пример получение имени локации на Автоите, а то пытаюсь в всегда возвращается "0"?
diahellfire is offline  
Old 02/19/2010, 17:40   #1468
 
elite*gold: 0
Join Date: Dec 2009
Posts: 57
Received Thanks: 24
Quote:
Originally Posted by muzhig View Post

Кстати, у инжекта движения есть минус- при подлете к точке он начинает плавно сбавлять скорость.
это не минус, а алгоритм работы. даже если не использовать инжект, а запись в память-при подлете тоже замедление
gen-ostr is offline  
Old 02/19/2010, 22:34   #1469
 
elite*gold: 0
Join Date: Jan 2010
Posts: 6
Received Thanks: 0
Ребят, ну подскажите! я уже писал что я не программист, но для себя читаю умные книги пытаюсь выучить С++! Вот инжект который выложил johnic, его как использовать? просто добавить в проект и включать в исполняемый файл инклудами и вызывать нужные функции? и если да то надо ли менять переменные тапа ИД процесса-"processID" на мой "Pid" в боте? Visual C++ 2008
getres is offline  
Old 02/20/2010, 10:47   #1470
 
elite*gold: 0
Join Date: Sep 2009
Posts: 18
Received Thanks: 16
Quote:
Originally Posted by getres View Post
Ребят, ну подскажите! я уже писал что я не программист, но для себя читаю умные книги пытаюсь выучить С++! Вот инжект который выложил johnic, его как использовать? просто добавить в проект и включать в исполняемый файл инклудами и вызывать нужные функции? и если да то надо ли менять переменные тапа ИД процесса-"processID" на мой "Pid" в боте? Visual C++ 2008
Вот готовый инжект выполненный на С++, думаю как включить в проект разберешься.


Никто не нашел функцию вызова питомца из клетки? А то я что-то совсем запарился, голова не работает
Attached Files
File Type: rar Injection.rar (537.7 KB, 50 views)
johnic is offline  
Thanks
2 Users
Reply




All times are GMT +1. The time now is 11:44.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.