 |
Реализация вертикального взлета - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
08.11.2013, 23:26
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 23.06.2012
 Сообщений: 43
 Популярность: 427
 Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Реализация вертикального взлета
Всем доброго времени суток.
В данной теме, хотелось бы увидеть примеры функций вертикального взлета персонажа на определенную высоту.
В идеале, хотел бы сделать взлет так же, как в MegaBot 5.0. Скорее всего реализация в нем идет инжектами. Пробовал проводить трассировку, но сказывается недостаток опыта. Также пробовал использовать пакеты, но выше 1 метра вверх перс так и не поднялся.
Так, что буду очень рад увидеть примеры как с использованием инжекта функций, так и отправкой пакетов.
Заранее благодарю!
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
11.11.2013, 11:21
|
#2
|
|
|
|
Старший сержант
|
 Регистрация: 21.09.2009
 Сообщений: 189
 Популярность: 578
 Сказал(а) спасибо: 27
Поблагодарили 145 раз(а) в 36 сообщениях
|
Re: Реализация вертикального взлета
Любой рабочий инжект движения. Перед ним читаешь координаты, к Z прибавляешь столько, на сколько перс должен подняться вертикально вверх. X и Y остаются без изменений. Если перс "стоит на земле", перед движением передача пакета на взлет или инжект взлета, контроль по WalkMode. Инжекты есть в "[Руоф] Код для инжекта в память".
|
|
|
Пользователь сказал cпасибо:
|
|
12.11.2013, 17:32
|
#3
|
|
|
|
Разведчик
|
 Регистрация: 23.06.2012
 Сообщений: 43
 Популярность: 427
 Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Реализация вертикального взлета
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
14.11.2013, 20:48
|
#4
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 14.06.2012
 Сообщений: 511
 Популярность: 7566
 Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
|
Re: Реализация вертикального взлета
а вы используйте инжект WalkTo где задаются точные параметры х,у,z
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо" Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
|
|
|
27.11.2013, 00:18
|
#5
|
|
|
|
Пехотинец
|
 Регистрация: 11.12.2009
 Сообщений: 83
 Популярность: -270
 Сказал(а) спасибо: 7
Поблагодарили 26 раз(а) в 9 сообщениях
|
Re: Реализация вертикального взлета
подсмотрев в ГЕОботе на АНК сначало переделал под AutoIT
Код:
Func MoveTo($X, $Y, $Z, $height, $pid )
local $process_information = _MemoryOpen($pid)
local $baseAddress = _MemoryRead ( $REAL_BASE_ADDRESS, $process_information)
local $structurePointer = _MemoryRead ($baseAddress + $BASE_OFFSET, $process_information)
local $playerPointer = _MemoryRead($structurePointer + $PLAYER_OFFSET, $process_information)
local $actionStruct = _MemoryRead($playerPointer + $PLAYER_ACTION_STRUCT_OFFSET, $process_information)
local $actionList = _MemoryRead($actionStruct+0x30,$process_information)
local $MoveAction = _MemoryRead($actionList+0x4,$process_information)
_MemoryWrite($MoveAction+0x8, $process_information, 0) ;Action finished = 0
_MemoryWrite($MoveAction+0x14, $process_information, 1) ;Action Start = 1
_MemoryWrite($MoveAction + 0x20, $process_information, $X)
_MemoryWrite($MoveAction + 0x24, $process_information, $Y)
_MemoryWrite($MoveAction + 0x28, $process_information, $Z)
_MemoryWrite($MoveAction + 0x68, $process_information, $height)
_MemoryWrite($MoveAction + 0x64, $process_information, 26625)
_MemoryWrite($MoveAction + 0x6C, $process_information, 256)
_MemoryWrite($MoveAction + 0x2C, $process_information, 0) ;Вот здесь если записать вместо 0, 1 то персонаж обязательно наберет высоту
_MemoryWrite($actionStruct+0xC, $process_information, $MoveAction)
_MemoryWrite($actionStruct+0x18, $process_information, 1)
_MemoryWrite($actionStruct+0x14, $process_information, $MoveAction)
Sleep (500)
EndFunc
потом это все допилил на C# т.к. перестал программить на AutoIT.
Оффсеты в примере возможно неактуальны, лень проверять. Но на шарпе у меня вертикальный взлет организован благодаря выделенной красным строчке. Пример на C# выкладывать не буду т.к. он довольно большой и без пол литра в моем коде там сложно разобраться  к томуже код не коментировал
|
|
|
14.05.2014, 20:17
|
#6
|
|
|
|
Разведчик
|
 Регистрация: 13.07.2011
 Сообщений: 22
 Популярность: 20
 Сказал(а) спасибо: 16
Поблагодарили 7 раз(а) в 6 сообщениях
|
Re: Реализация вертикального взлета
Вертикальный взлет на шарпе.
Код:
/// <param name="IsFly">0 - пешком, 1 - в полете</param>
public void Walk(float x, float y, float z, int IsFly = 0)
{
var CallAddress1 = 0x484690;
var CallAddress2 = 0x4889B0;
var CallAddress3 = 0x484B00;
ASM asm = new ASM(memory);
asm.Pushad();
asm.Mov_EAX_DWORD_Ptr(GameOffsets.game_address);
asm.Mov_ESI_DWORD_Ptr_EAX_Add(0x34);
asm.Mov_ECX_DWORD_Ptr_ESI_Add(0x1290);
asm.Push6A(1);
asm.Mov_EDX(CallAddress1);
asm.Call_EDX();
asm.Mov_EDI_EAX();
asm.Asmcode += "8d442418"; //asm.Lea_EAX_DWORD_Ptr_ESP_Add(0x18);
asm.Push_EAX();
asm.Push6A(IsFly); //flying
asm.Mov_ECX_EDI();
asm.Mov_EDX(CallAddress2);
asm.Call_EDX();
asm.Mov_ECX_DWORD_Ptr_ESI_Add(0x1290);
asm.Push6A(0);
asm.Push6A(1);
asm.Push_EDI();
asm.Push6A(1);
asm.Mov_EDX(CallAddress3);
asm.Call_EDX();
asm.Mov_EAX_DWORD_Ptr(GameOffsets.game_address);
asm.Mov_EAX_DWORD_Ptr_EAX_Add(0x34);
asm.Mov_EAX_DWORD_Ptr_EAX_Add(0x1290);
asm.Mov_EAX_DWORD_Ptr_EAX_Add(0x30);
asm.Mov_ECX_DWORD_Ptr_EAX_Add(0x4);
asm.Mov_EAX(x);
asm.Asmcode += "894120"; //mov dword ptr[ecx+$20], eax
asm.Mov_EAX(z);
asm.Asmcode += "894124"; //mov dword ptr[ecx+$24], eax
asm.Mov_EAX(y);
asm.Asmcode += "894128"; //mov dword ptr[ecx+$28], eax
asm.Mov_EAX(1);
asm.Asmcode += "89412C"; //mov dword ptr[ecx+$2C], eax
asm.Popad();
asm.Ret();
asm.RunAsm();
}
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 02:25.
|
 |