|
Ткните носом пожалуйста - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
18.05.2013, 18:01
|
#16
|
|
|
|
Рыцарь-капитан
|
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
|
Re: Ткните носом пожалуйста
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
Последний раз редактировалось Ginrey; 18.05.2013 в 18:04.
|
|
|
20.05.2013, 16:52
|
#17
|
|
|
|
Разведчик
|
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
А можете мне на пальцах рассказать алгоритм действий по автоматизации бота?
Вот у меня есть функция взятия в таргет моба и атака его обычной атакой ( все это пока забито на нажатие кнопки, т.е. я нажимаю кнопку у себя в программе - бот выделяет ближайшего моба и бьет, далее опять надо нажать кнопку, чтобы повторить процесс).
Объясните мне пожалуйста как его автоматизировать, что бы можно было запустить на бесконечное выполнение и остановить в любое время. (Сразу оговорюсь, что тему по созданию бота №2 читал, но пока не дошел до понимания). Спасибо.
Как узнать, если в тергете у перса моб или нет? Как я понимаю, за это должен отвечать какой-то оффсет, и если я не ошибаюсь - это FullTarget 00693D60, или я ошибаюсь? А что возвращает это значение? Я сейчас считал с памяти значение из этого адреса, и там какое-то ничего не говорящее число... А надо перед этим ставить смещение, я так понял, что не надо...
Последний раз редактировалось Xantrax2150198; 20.05.2013 в 21:39.
Причина: Добавлено сообщение
|
|
|
20.05.2013, 22:18
|
#18
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Ткните носом пожалуйста
Xantrax2150198,
Здесь в разных темах уже все разжевали, а ты проглотить даже не хочешь, извиняюсь за оффтоп.
Теперь по теме:
1)
|
Цитата: |
|
|
|
|
Сообщение от Xantrax2150198 |
|
|
|
|
|
|
|
FullTarget
|
|
|
|
|
|
- это адрес функции взятия в таргет, не важно кого, моба, NPC или другого перса, в функцию передается WID.
2)
|
Цитата: |
|
|
|
|
Сообщение от Xantrax2150198 |
|
|
|
|
|
|
|
Как узнать, если в таргете у перса моб или нет?
|
|
|
|
|
|
Читаешь структуру
BA +0x1C +0x1C +0x24 +0x18 +(i*0x4) +0x4 /i = 0 - 0x300/
+0x0B4 Type, dword /Тип моба/
Значение: 6 - моб, 7 - NPC, 9 - Pet
Соответственно если 6 то это моб, если другое значение, то нет
Вообще здесь есть все необходимые структуры и офсеты: http://zhyk.ru/forum/showthread.php?t=287321
|
|
|
20.05.2013, 22:33
|
#19
|
|
|
|
Разведчик
|
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
|
Цитата: |
|
|
|
|
|
|
|
|
Читаешь структуру
BA +0x1C +0x1C +0x24 +0x18 +(i*0x4) +0x4 /i = 0 - 0x300/
+0x0B4 Type, dword /Тип моба/
Значение: 6 - моб, |
|
|
|
|
|
Если в структуре Type = 6, то это не значит, что у меня в таргете моб, это всего лишь значит что в струтуре по такому-то адресу моб...
А как узнать что у меня есть таргет?
Может быть я не правильно задал вопрос, перефразирую так: Как узнать есть ли у меня кто-то в таргете?
Последний раз редактировалось Xantrax2150198; 20.05.2013 в 22:44.
|
|
|
20.05.2013, 22:46
|
#20
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Ткните носом пожалуйста
Xantrax2150198,
1) Здесь:
BaseAdress +0x1C +0x34
+0BF8 Target, dword
считываешь WID твоего таргета
2)Как уже писал:
Читаешь структуру
BA +0x1C +0x1C +0x24 +0x18 +(i*0x4) +0x4 /i = 0 - 0x300/
+0x0B4 Type, dword /Тип моба/
Значение: 6 - моб, 7 - NPC, 9 - Pet
Если Type=6 то читаешь
+0x120 WID, dword
3) Сравниваешь эти значения!!!
|
|
|
20.05.2013, 23:10
|
#21
|
|
|
|
Разведчик
|
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
|
Цитата: |
|
|
|
|
|
|
|
|
1) Здесь:
BaseAdress +0x1C +0x34
+0BF8 Target, dword
считываешь WID твоего таргета |
|
|
|
|
|
Ага, теперь вроде понятно! Просто не увидел я этого оффсета(+0BF8 Target, dword) в структуре перса.
Добавлено через 14 часов 14 минут
Ммм, клиент обновился, оффсеты обновились или я не прав?
Нет скорее всего у меня руки не из того места растут....(( Столько всего нагородил в программе теперь глаза в кучку...
Добавлено через 22 часа 13 минут
Добавлено через 22 часа 20 минут
Хочу-таки организовать подбор лута, начал с самого пока простого - это отсылка окну игры нажатия клавиши на которую забинден подбор лута, для этого, как уже говорилось выше нужно разморозить окно...
Переписал функцию любезно предоставленную мне Ginrey (выше), получилось вот что:
void CNewBotDlg::UnfreezeWindow(DWORD pid)
{
DWORD on = 1;
HWND N = ::FindWindow("ElementClient Window",NULL);
if(N!=0)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
if(pid!=0)
{
WriteProcessMemory(hProcess,(void*)Unfreeze1,&on,s izeof(DWORD),NULL);
WriteProcessMemory(hProcess,(void*)Unfreeze2,&on,s izeof(DWORD),NULL);
}
else
{
MessageBox("pid = 0","WARNING",MB_OK);
}
CloseHandle(hProcess);
}
else
{
MessageBox("Error","",MB_OK);
}
//PostMessageW(Wnd,VK_TAB,0,0); //До отправки нажатия пока не дошло поэтому закомментировано
/*SendDlgItemMessageW(N,0,VK_TAB,0,0);*/
}
Но у меня клиент игры виснет, а через продолжительно время завершается без выдачи каких либо ошибок.
Есть какие либо соображения по этому поводу?
Опять я где-то что-то недописал или нужно было предварительно еще что-то сделать?
Последний раз редактировалось Xantrax2150198; 21.05.2013 в 21:33.
Причина: Добавлено сообщение
|
|
|
21.05.2013, 21:58
|
#22
|
|
|
|
Пехотинец
|
Регистрация: 17.09.2010
Сообщений: 66
Популярность: 701
Сказал(а) спасибо: 32
Поблагодарили 63 раз(а) в 46 сообщениях
|
Re: Ткните носом пожалуйста
по поводу разморозки
Visual С++ не юзал, но по идее так
DWORD Unfreeze1 = 0x00436986;
DWORD Unfreeze2 = 0x00B9070C;
WORD unfreeze_word = $01B0;
WORD unfreeze_flag = $01;
WriteProcessMemory(hProcess, (void*)Unfreeze1, &unfreeze_word, sizeof(unfreeze_word), NULL);
WriteProcessMemory(hProcess, (void*)Unfreeze2, &unfreeze_flag, sizeof(unfreeze_flag), NULL);
________________
© Mel
Последний раз редактировалось _DVD_; 22.05.2013 в 08:32.
|
|
|
21.05.2013, 23:39
|
#23
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Ткните носом пожалуйста
Xantrax2150198,
Зачем так все усложнять, если делаешь бота, по-любому есть хоть один таймер, просто добавляешь в него строку(Пример на Дельфи):
WriteProcessMemory(hProcess,ptr($00B9070C),@unfree ze,1,temp);
Типы переменных такие:
Const
unfreeze: DWord=1;
var
temp: DWord;
hProcess:Cardinal;
Последний раз редактировалось fds255; 21.05.2013 в 23:41.
|
|
|
22.05.2013, 00:07
|
#24
|
|
|
|
Разведчик
|
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
|
|
|
22.05.2013, 00:18
|
#25
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Ткните носом пожалуйста
Xantrax2150198,
Каждый делает так, как ему удобно )
|
|
|
22.05.2013, 00:21
|
#26
|
|
|
|
Разведчик
|
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
_DVD_
|
Цитата: |
|
|
|
|
|
|
|
|
по поводу разморозки |
|
|
|
|
|
Вот так написал с вашей подсказкой:
void CNewBotDlg::UnfreezeWindow(DWORD pid)
{
DWORD Unfreeze1 = 0x00436988;
DWORD Unfreeze2 = 0x00B9070C;
WORD unfreeze_word = 0x01B0 ;
WORD unfreeze_flag = 0x01;
HWND N = ::FindWindow("ElementClient Window",NULL);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
if(pid!=0)
{
WriteProcessMemory(hProcess,(void*)Unfreeze1,&unfr eeze_word,sizeof(unfreeze_word),NULL);
WriteProcessMemory(hProcess,(void*)Unfreeze2,&unfr eeze_flag,sizeof(unfreeze_flag),NULL);
}
else
{
MessageBox("pid = 0","WARNING",MB_OK);
}
CloseHandle(hProcess);
}
Эффект тот же... Приложение зависает(заступоривается, ошибок не выдает)....
Сейчас попробуем с таймером...
Таки добился я своего, вот рабочий код с таймером:
void CNewBotDlg::OnTimer(UINT C)
{
/*MessageBox("Таймер работает(запущен)","",MB_OK);*/
DWORD unfreeze = 1;
DWORD A = 0x00B9070C;
HWND hWnd = ::FindWindow((LPCSTR)"ElementClient Window",NULL);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
if(pid!=0)
{
WriteProcessMemory(hProcess,(void*)A,&unfreeze,1,N ULL);
}
else
{
MessageBox("pid=0","",MB_OK);
}
::PostMessage(hWnd,WM_KEYDOWN,VK_TAB,0);
}
Однако по таймеру мне не надо, а как мне лут то собирать? Мне нужна отдельная функция сбора лута (виртуального нажатия на клавишу сбора лута), что бы ее подставить ко всем остальным...
//************************************************** *************************************************
Хм, я вот что-то не пойму, кто какие адреса дает... В Оффсетах одни адреса:
Unfreeze 00436986 (84 C0 > B0 01 > B0 00)
Unfreeze 00436988 (88...75 > C6...01) со странными значениями в скобках, не поясненными
_DVD_ дает другие:
DWORD Unfreeze1 = 0x00436988;
DWORD Unfreeze2 = 0x00B9070C;
WORD unfreeze_word = $01B0;
WORD unfreeze_flag = $01;
Тоже с какой-то магией записи в память...
Вы, fds255, предлагаете просто воспользоваться одним адресом( 0x00B9070C, который вообще отмечен в оффсетах как UnfreezeData), причем он работает как при запихивании его в таймер, так и в обычной функции. Спасибо, по крайней мере Tab он переключает отлично!
А у всех остальных предложивших свои варианты работают функции, в память значения пишутся?
В игре я так понимаю иногда по три вещи лута бывает выпадает, т.е. с каждым убийством моба 3 раза (на всякий случай) запускать эту функцию?
Последний раз редактировалось Xantrax2150198; 22.05.2013 в 01:15.
|
|
|
22.05.2013, 01:45
|
#27
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Ткните носом пожалуйста
|
|
|
22.05.2013, 08:38
|
#28
|
|
|
|
Пехотинец
|
Регистрация: 17.09.2010
Сообщений: 66
Популярность: 701
Сказал(а) спасибо: 32
Поблагодарили 63 раз(а) в 46 сообщениях
|
Re: Ткните носом пожалуйста
Xantrax2150198, прошу прощения опечатался. в конце 6 - DWORD Unfreeze1 = 0x00436986;
тут смысл такой - по этому адресу патчится функция
а в 0x00B9070C записываем флаг 0х01
и после этого смена фокуса уже не влияет на отрисовку окна
для теста сделайте функцию разморозки отдельной кнопкой, убрав все лишнее. когда будет работать, добавите нужные строки.
________________
© Mel
|
|
|
22.05.2013, 13:17
|
#29
|
|
|
|
Разведчик
|
Регистрация: 12.05.2013
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
|
Цитата: |
|
|
|
|
|
|
|
|
посмотри на следующий скрин и ты поймешь |
|
|
|
|
|
Если честно, не силен в asm коде, и поэтому мне скрин ничего не сказал... (Простите).
|
Цитата: |
|
|
|
|
|
|
|
|
для теста сделайте функцию разморозки отдельной кнопкой |
|
|
|
|
|
Сделал, вот:
void CNewBotDlg:: UnfreezeWindow(DWORD pid)
{
DWORD unfreeze = 1;
DWORD A = 0x00B9070C;
HWND hWnd = ::FindWindow((LPCSTR)"ElementClient Window",NULL);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
if(pid!=0)
{
WriteProcessMemory(hProcess,(void*)A,&unfreeze,1,N ULL);
}
else
{
MessageBox("pid=0","",MB_OK);
}
::PostMessage(hWnd,WM_KEYDOWN,VK_F3,0);
}
Вызываем функцию в нажатии кнопки:
void CNewBotDlg::OnBnClickedOk()
{
UnfreezeWindow(pid);
}
Не пойму, зачем патчить функцию, если достаточно в адрес памяти записать 1 вместо 0...
|
|
|
22.05.2013, 13:51
|
#30
|
|
|
|
Разведчик
|
Регистрация: 06.07.2010
Сообщений: 30
Популярность: 364
Сказал(а) спасибо: 1
Поблагодарили 16 раз(а) в 9 сообщениях
|
Re: Ткните носом пожалуйста
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Гм Инновы у нас под носом О_о
|
.NextTarget |
Общение и обсуждение, архив Point Blank |
4 |
10.03.2011 13:16 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 18:39.
|
|