|
В ботоводы я б пошел - пусть меня научат... - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
19.08.2011, 11:42
|
#1
|
|
|
|
Пехотинец
|
Регистрация: 17.05.2010
Сообщений: 53
Популярность: 204
Сказал(а) спасибо: 11
Поблагодарили 15 раз(а) в 6 сообщениях
|
В ботоводы я б пошел - пусть меня научат... Научился и сделал что хотел. Ыыы
Ну все, бота закончил наконец то. Спасибо всем кто мне помогал.
Код:
Здравствуйте уважаемые. Вот решил серьезно заняться написанием бота для пв. Будет куча вопросов и если не сложно то помогите плиз. Думаю эта инфа поможет еще кому нить.
--------------------------------
Может кому пригодится
1.Функция для шприца открывает кота, естественно надо находиться рядом с ним.
Код:
MOV EDI, P1 // P1 = WID кота
MOV EBX, $00606E40
MOV EAX,DWORD PTR DS:[$A5B90C]
PUSH EDI
MOV ECX,DWORD PTR DS:[EAX+$20]
ADD ECX,$0EC
CALL EBX
Инфу о том как её использовать вы найдете тут
2. Офсет проверки в коте ли персонаж IsCat = 0x5D8, выдает либо 2 (кот) либо 0.
3. Скоро доработаю и вылажу функцию определения названия предметов в инвентаре(еще чутка офсетов найти).
Последний раз редактировалось Jok3r666; 01.10.2011 в 09:04.
|
|
|
19.08.2011, 12:06
|
#2
|
|
|
|
Сержант
|
Регистрация: 07.09.2010
Сообщений: 124
Популярность: 147
Сказал(а) спасибо: 22
Поблагодарили 87 раз(а) в 18 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
а что, pwlab заработал?
|
|
|
19.08.2011, 12:10
|
#3
|
|
|
|
Пехотинец
|
Регистрация: 17.05.2010
Сообщений: 53
Популярность: 204
Сказал(а) спасибо: 11
Поблагодарили 15 раз(а) в 6 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
|
|
|
19.08.2011, 13:44
|
#4
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
|
Цитата: |
|
|
|
|
|
|
|
|
|
приведите плиз к вот такому виду
|
|
|
|
|
|
Наверное так будет:
Линейный массив игроков рядом:
GA +20 +380 +14 - Count
GA +20 +380 +88 + [4*i], i=0..Count-1 - адреса структур персонажей
Структура совпадает со структурой игрока, только некоторые поля не активны.
GA +20 +380 +74С - id активного пета
Хэштейбл игроков рядом:
GA +8 +20 +14 - количество
GA +8 +20 +24 - хэш-ключ
GA +8 +20 +18 - начало массива списков
элемент списка:
GA +8 +20 +0 - следующий элемент списка
GA +8 +20 +4 - адрес структуры персонажа
GA +8 +20 +8 - id игрока
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
Последний раз редактировалось VeTaL_UA; 19.08.2011 в 13:47.
|
|
|
19.08.2011, 14:00
|
#5
|
|
|
|
Пехотинец
|
Регистрация: 17.05.2010
Сообщений: 53
Популярность: 204
Сказал(а) спасибо: 11
Поблагодарили 15 раз(а) в 6 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
|
Цитата: |
|
|
|
|
|
|
|
|
|
GA +20 +380 +88 + [4*i]
|
|
|
|
|
|
Эта шняга не правильная у мя на офе работает с
GA +8 +20 +18 +[i*4]
вернее сказать не то что бы не правильная просто не то что мне нужно.
Теперь беда в другом
Код:
procedure alluser(hProcess,ipbuf:dword);
var i:integer;
adress_pst:cardinal;
s:string;
pl,bytesCount:dword;
buf32: array [0..32] of WideChar;
ss:integer;
begin
Bot.label1.Caption:='';
for i:=0 to 768 do begin
ReadProcessMemory(hProcess, ptr(ipbuf+$8), @pl, sizeof(pl), BytesCount);
ReadProcessMemory(hProcess, ptr(pl+$20), @pl, sizeof(pl), BytesCount);
//kol
ReadProcessMemory(hProcess, ptr(pl+$14), @ss, sizeof(ss), BytesCount);
//names
ReadProcessMemory(hProcess, ptr(pl+$18), @pl, sizeof(pl), BytesCount);
ReadProcessMemory(hProcess, ptr(pl+(4*i)), @pl, sizeof(pl), BytesCount);
ReadProcessMemory(hProcess, ptr(pl+4), @pl, sizeof(pl), BytesCount);
if pl<>0 then begin
bot.Memo1.Lines.add(inttostr(pl));
ReadProcessMemory(hProcess, ptr(pl+$618), @pl, sizeof(pl), BytesCount);
ReadProcessMemory(hProcess, ptr(pl+$0), @buf32, 32, BytesCount);
s:=buf32;
Bot.memo1.Lines.Add(s);
end;
Bot.label1.Caption:=inttostr(ss);
end;
Bot.Timeinfa.Enabled:=false;
end;
в мемо пишется не только имена но и пустые строки, но pl при этом не равен 0 по этому проверка проходится.
Раскажите что за фигня?
Может то что я все пишу в 32 байта а некоторые ники в 16 пишутся? или я бред несу
Последний раз редактировалось Jok3r666; 19.08.2011 в 14:05.
|
|
|
19.08.2011, 14:02
|
#6
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
|
|
|
19.08.2011, 14:07
|
#7
|
|
|
|
Пехотинец
|
Регистрация: 17.05.2010
Сообщений: 53
Популярность: 204
Сказал(а) спасибо: 11
Поблагодарили 15 раз(а) в 6 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
|
Цитата: |
|
|
|
|
|
|
|
|
|
Ну это же не я виноват
|
|
|
|
|
|
ну надеюсь
Добавлено через 2 минуты
|
Цитата: |
|
|
|
|
|
|
|
|
|
GA +20 +380+14 - Count
|
|
|
|
|
|
Странно ведь ga+20 = структура своего перса, причем тут игроки рядом? Паря косячник с пв лаба походу. Мозг мне зря запудрил.
Добавлено через 2 часа 11 минут
Блин видел вопрос про повторы имен игроков вокруг, было в теме "пишем флайхак" он так и остался без ответа, у меня та же беда, хотя код взял с исправления Dinmate от сюда только подставил свое и чутка переделал.
вот собстна и сам код с моими переделками:
Код:
procedure alluser(hProcess,ipbuf:dword);
var i,j:integer;
curname,s:string;
pl,bytesCount:dword;
buf32: array [0..32] of WideChar;
userkol,allnames,ss:integer;
begin
//ipbuf peredaetca iz dr proced. = [[ba]+1c]
readprocessmemory(hprocess,ptr(ipbuf+$8),@pl,sizeof(pl),bytescount);
readprocessmemory(hprocess,ptr(pl+$20),@pl,sizeof(pl),bytescount);
readprocessmemory(hprocess,ptr(pl+$14),@userkol,sizeof(userkol),bytescount);
bot.Label1.Caption:=inttostr(userkol);
allnames:=0;
j:=0;
while userkol>=allnames do
begin
for i:=0 to 768 do
begin
//ipbuf peredaetca iz dr proced. i = [[ba]+1c]
Readprocessmemory(hprocess, ptr(ipbuf+$8),@pl,sizeof(pl),bytescount);
Readprocessmemory(hprocess, ptr(pl+$20),@pl,sizeof(pl),bytescount);
Readprocessmemory(hprocess, ptr(pl+$18),@pl,sizeof(pl),bytescount);
Readprocessmemory(hprocess, ptr(pl+(i*4)),@pl,sizeof(pl),bytescount);
for j :=1 to j do
readprocessmemory(hprocess,ptr(pl+$0),@pl,sizeof(pl),bytescount);
Readprocessmemory(hprocess, ptr(pl+$4),@pl,sizeof(pl),bytescount);
ReadProcessMemory(hProcess, ptr(pl+$618), @pl, sizeof(pl), BytesCount);
ReadProcessMemory(hProcess, ptr(pl+$0), @buf32, 32, BytesCount);
curname:=buf32;
if curname<>'' then
begin
bot.Memo1.Lines.add(curname);
allnames:=allnames+1;
end;
end;
inc(j);
if j>5 then begin bot.Label1.Caption:='j'; break; end;
end;
end;
башка уже болит
Последний раз редактировалось Jok3r666; 19.08.2011 в 16:18.
Причина: Добавлено сообщение
|
|
|
19.08.2011, 18:54
|
#8
|
|
|
|
Пехотинец
|
Регистрация: 27.02.2010
Сообщений: 72
Популярность: 71
Сказал(а) спасибо: 27
Поблагодарили 35 раз(а) в 16 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
|
Цитата: |
|
|
|
|
|
|
|
|
|
Странно ведь ga+20 = структура своего перса, причем тут игроки рядом? Паря косячник с пв лаба походу. Мозг мне зря запудрил.
|
|
|
|
|
|
Всё верно. BA+1C+20 - структура Вашего чара. +380 - Вы, как бы, проходите дальше получая доступ к персонажам вокруг, от имени своего чара. +14 - это вы смотрите количество игроков рядом.
|
Цитата: |
|
|
|
|
|
|
|
|
|
в мемо пишется не только имена но и пустые строки, но pl при этом не равен 0 по этому проверка проходится.
Раскажите что за фигня?
|
|
|
|
|
|
Вы замечали, что иногда игроки не определяются по именам, а за место ника, скажем, Р-165466. Если нажмёте Т в игре, то там будут пустые поля.
Добавлено через 3 минуты
Прошу прощения за идиотский вопрос (у самого голова болит ), а Вы что хотите сделать? запихнуть в TMemo список всех игроков рядом поимённо?
Последний раз редактировалось DAcorp; 19.08.2011 в 19:01.
Причина: Добавлено сообщение
|
|
|
19.08.2011, 20:42
|
#9
|
|
|
|
Пехотинец
|
Регистрация: 17.05.2010
Сообщений: 53
Популярность: 204
Сказал(а) спасибо: 11
Поблагодарили 15 раз(а) в 6 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
|
|
|
20.08.2011, 00:04
|
#10
|
|
|
|
Пехотинец
|
Регистрация: 27.02.2010
Сообщений: 72
Популярность: 71
Сказал(а) спасибо: 27
Поблагодарили 35 раз(а) в 16 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
|
Цитата: |
|
|
|
|
|
|
|
|
|
Для проверки просто, вообще в идеале хочу сделать что то вроде отчета по котам и шмоткам в них. А пока изучаю что да как.
На счет повторений не подскажете в чем беда?
|
|
|
|
|
|
Ммм... Задумка очень интересная!
Чесно говоря не знаю, но у меня есть теория, насколько оправданная не знаю, что всётаки пока вы сканируете оперативную память процесса, она меняется, а соответственно и меняется порядок идентификаторов персонажей в массиве. Мне кажется именно в следствии этого и возникает данный баг. В любом случае для избежания этого Вы можете поставить фильтр, который будет сканировать список по CharID и если он уже встречался, то не давать записывать новую позицию. Собственно для наглядности я бы использовал 2 способа:
1: 2 компонента классов TMemo (в котором вы будете выводить ники) и TListBox. Грубый пример:
Код:
repeat
...
ListBox1.Perform(LB_SelectString,-1,LongInt(pChar(' '+IntToStr(NewCharID)+' '))); //Ищем ID персонажа в уже добавленных
if ListBox1.ItemIndex=-1 then begin //если такого ID нет, то...
ListBox1.Items.Add(' '+IntTiStr(CharID)+' '); //добавляем ID персонажа в список ID
Memo1.Lines.Add(CharName); //Добавляем имя в список имён
end;
...
I:=I+1;
until I=CharsNearCount;
Это очень грубый пример, но визуально зато будет всё видно. Дальше думайте сами и совершенствуйте Кстати, маленький совет, вычисление имени персонажа лучше производить непосредственно перед добавлением в список, а не раньше. Программа будет работать шустрее, если не будет лишний раз обрабатывать информацию, которую Вы не будете добавлять.
Добавлено через 9 минут
Немного расскажу, как у меня сделано в EnemyDetect, надеюсь будет Вам полезно.
Код:
Function TfMain.GetCharsCount: Integer; //определение количество персонажей
var
Buf, Process, PId: integer;
wr: cardinal;
begin
process:=OpenProcess(PROCESS_ALL_ACCESS, false, ClientProcessID);
if process<>0 then begin
readprocessmemory(process, ptr(GameAdress), @Buf, sizeof(Buf), wr);
readprocessmemory(process, ptr(Buf+$20), @Buf, sizeof(Buf), wr);
readprocessmemory(process, ptr(Buf+$380), @Buf, sizeof(Buf), wr);
readprocessmemory(process, ptr(Buf+$14), @buf, sizeof(Buf), wr);
end;
Result:=Buf;
CloseHandle(process);
end;
end;
procedure TfMain.GetCharsNear;
var
Buf,Buf2, Process, PId, Step, Step2, CharID, CharsNearCount: integer;
wr: cardinal;
Dat: array [0..500] of Char;
CharName: String;
begin
CharsNearCount:=GetCharsCount;
process:=OpenProcess(PROCESS_ALL_ACCESS, false, GetClientListPID);
if (process<>0) and (CharsNear>0) then begin
Step:=0;
repeat
readprocessmemory(process, ptr(GameAdress), @Buf, sizeof(Buf), wr);
readprocessmemory(process, ptr(Buf+$20), @Buf, sizeof(Buf), wr);
readprocessmemory(process, ptr(Buf+$380), @Buf, sizeof(Buf), wr);
readprocessmemory(process, ptr(Buf+$88+(0*4)), @buf, sizeof(Buf), wr);
readprocessmemory(process, ptr(Buf+(Step*4)), @buf, sizeof(Buf), wr);
readprocessmemory(process, ptr(Buf+CharIdAdress), @CharID, sizeof(CharID), wr);
readprocessmemory(process, ptr(Buf+CharNameAdress), @buf2, sizeof(buf2), wr);
readprocessmemory(process, ptr(Buf2+$0), @dat, sizeof(Dat), wr);
...
CharName:='';
Step2:=0;
Repeat
CharName:=CharName+String(Dat[Step2]);
Step2:=Step2+1;
until Ord(Dat[Step2])=0;
...
Step:=Step+1;
until Step=CharsNearCount;
...
Всего кода естественно не указываю, но думаю данное будет Вам полезно в ваших изысканиях Удачи в написании!
Последний раз редактировалось DAcorp; 20.08.2011 в 00:15.
Причина: Добавлено сообщение
|
|
|
Пользователь сказал cпасибо:
|
|
20.08.2011, 09:28
|
#11
|
|
|
|
Пехотинец
|
Регистрация: 17.05.2010
Сообщений: 53
Популярность: 204
Сказал(а) спасибо: 11
Поблагодарили 15 раз(а) в 6 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
Спасибо ща буду ковырять, может что получится
Добавлено через 54 минуты
Уря уря, спасибо большое вашим способом получилось.
Терь остался вопрос, как можно получить статус чара в коте он или нет?
+B2A; - NPCActiveStatus (1b) (1 - active; 0 - inactive, ща буду проверять оно или нет.увы не то
добавлено:
определил статус по наименованию шопа +70C +0 - соответственно если пустая строка то не в коте //ну мало ли кому пригодится
Как думаете лучше создать процедуру в которой за один конект делается как можно больше действий и дисконектится или же лучше на каждую процедуру конектиться и дисконектиться по новой?
Последний раз редактировалось Jok3r666; 21.08.2011 в 07:51.
Причина: Добавлено сообщение
|
|
|
21.08.2011, 16:47
|
#12
|
|
|
|
Сержант
|
Регистрация: 07.09.2010
Сообщений: 124
Популярность: 147
Сказал(а) спасибо: 22
Поблагодарили 87 раз(а) в 18 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
|
|
|
23.08.2011, 08:54
|
#13
|
|
|
|
Пехотинец
|
Регистрация: 17.05.2010
Сообщений: 53
Популярность: 204
Сказал(а) спасибо: 11
Поблагодарили 15 раз(а) в 6 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
Можете натолкнуть на путь просветления? Как бы мне инфу из котов вытянуть?
Обязательно ли для этого вскрывать кота? \\я думаю что да, врядли сервер будет посылать столько левой инфы клиенту
Даже понятия не имею как получить офсеты на предметы в коте... Реально ли это через СЕ или тут свои хитрости?
Последний раз редактировалось Jok3r666; 23.08.2011 в 08:58.
|
|
|
23.08.2011, 11:06
|
#14
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
|
|
|
23.08.2011, 16:54
|
#15
|
|
|
|
Пехотинец
|
Регистрация: 17.05.2010
Сообщений: 53
Популярность: 204
Сказал(а) спасибо: 11
Поблагодарили 15 раз(а) в 6 сообщениях
|
Re: В ботоводы я б пошел - пусть меня научат...
Последний раз редактировалось Jok3r666; 23.08.2011 в 16:58.
Причина: Добавлено сообщение
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 16:07.
|
|