целевой имя delphi - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок
29.12.2013, 07:04
#1
Разведчик
Регистрация: 27.12.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
целевой имя delphi
Привет люди,
Я пытаюсь показать имя цели в идеальном мире.
но я не получаю результатов.
Следуйте мой код ниже:
Код:
ReadProcessMemory(hProcess, ptr(ga), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$1C), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$24), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$18), @List, sizeof(List), rw);
ReadProcessMemory(hProcess, ptr(List+$4*N), @d1, sizeof(d1), rw);
ReadProcessMemory(hProcess, ptr(d1+$4), @d2, sizeof(d2), rw);
ReadProcessMemory(hProcess, ptr(d2+$274), @mobnameptr, sizeof(mobnameptr), rw);
mobNameStr:=GetWideString(hProcess,mobnameptr);
Label3.Caption:=mobNameStr;
также не смог показать определенный идентификатор
Код:
ReadProcessMemory(hProcess, ptr(GA),@addr,sizeof(addr),BytesCountOfRead);
ReadProcessMemory(hProcess, ptr(addr + $34), @gamer_addr, sizeof(gamer_addr), BytesCountOfRead);
ReadProcessMemory(hProcess, ptr(gamer_addr + $c88), @Result.TargetID, sizeof(Result.TargetID), BytesCountOfRead);
Label4.Caption:=strtoint(result.targetid);
Благодарю Вас за внимание
29.12.2013, 11:19
#2
Рыцарь-капитан
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
Re: целевой имя delphi
имена - ники читаются через переменную с типо Char, причем его массивом, то есть nick: array[0..255] of char;
с получением ID вроде бы все нормально, посмотрите через дебагер, находит ли вообще окно и получает ли его свойства
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
29.12.2013, 11:58
#3
Рыцарь-лейтенант
Регистрация: 31.01.2011
Сообщений: 413
Популярность: 14489
Золото Zhyk.Ru: 300
Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
Re: целевой имя delphi
Я уверен, что автор темы - не русский. Поэтому лучше отвечать либо на его родном языке, либо писать очень грамотно по-русски, чтобы переводчик смог правильно перевести
Цитата:
ReadProcessMemory(hProcess, ptr(ga), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$1C), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$24), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$18), @List, sizeof(List), rw);
ReadProcessMemory(hProcess, ptr(List+$4*N), @d1, sizeof(d1), rw);
ReadProcessMemory(hProcess, ptr(d1+$4), @d2, sizeof(d2), rw);
ReadProcessMemory(hProcess, ptr(d2+$274), @mobnameptr, sizeof(mobnameptr), rw);
mobNameStr:=GetWideString(hProcess,mobnameptr);
Label3.Caption:=mobNameStr;
Чему равно N? Перед этим нужно перебрать структуру ближайших игроков (или монстров, смотря кто нужен) для того, чтобы найти N, которое соответствует таргету.
Цитата:
ReadProcessMemory(hProcess, ptr(GA),@addr,sizeof(addr),BytesCountOfRead);
ReadProcessMemory(hProcess, ptr(addr + $34), @gamer_addr, sizeof(gamer_addr), BytesCountOfRead);
ReadProcessMemory(hProcess, ptr(gamer_addr + $c88), @Result.TargetID, sizeof(Result.TargetID), BytesCountOfRead);
Label4.Caption:=strtoint(result.targetid);
Код похож на правильный, хотя я не знаю дельфи. Если оффсеты правильные, то нужно проверять подключение к процессу, как написали выше
________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3 .
P.S. Но я всё такой же добрый модератор раздела PW.
29.12.2013, 12:53
#4
Разведчик
Регистрация: 27.12.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Re: целевой имя delphi
полный код:
Код:
const
GA = $C392CC;
implementation
{$R *.dfm}
function getWideString(hProc, data: dword): string;
var
i,rw: dword;
ch: widechar;
wch: array [0..255] of widechar;
str: string;
begin
i:=0;
repeat
ReadProcessMemory(hProc,ptr(data),@ch,2,rw);
data:=data+2;
wch[i]:=ch;
inc(i);
until (ord(ch)=0) or (i>=255);
//Ïåðåãîíÿåì èìÿ ñ ìàññèâà â ñòðîêó
i:=0;
str:='';
repeat
str:=str+wch[i];
inc(i);
until wch[i]='';
//âîçâðàùàåì ñòðîêó
Result:= str;
end;
function ConnectToClient: boolean;
begin
try
hw := FindWindow('ElementClient Window', nil);
pidw := GetWindowThreadProcessId(hw, PID);
hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
Result := hProcess <> 0;
except
Result := False;
end;
end;
function ConnectedToClient: boolean;
begin
Result := hProcess <> 0;
end;
function GetGamerInfo: TGamerInfo;
var
BytesCountOfRead: DWORD;
addr, rw: DWORD;
i: integer;
d1,d2,mobFlag:dword;
ch: WideChar;
N,Key,List:dword;
mobnameptr:dword;
mobNameStr:string;
st: string;
begin
ZeroMemory(@Result, SizeOf(Result));
if ConnectedToClient then begin
ReadProcessMemory(hProcess, ptr(GA),@addr,sizeof(addr),BytesCountOfRead);
ReadProcessMemory(hProcess, ptr(addr + $1c), @gamer_addr, sizeof(gamer_addr), BytesCountOfRead);
ReadProcessMemory(hProcess, ptr(addr + $34), @gamer_addr, sizeof(gamer_addr), BytesCountOfRead);
ReadProcessMemory(hProcess, ptr(gamer_addr + $c88), @Result.TargetID, sizeof(Result.TargetID), BytesCountOfRead);
ReadProcessMemory(hProcess, ptr(ga), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$1C), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$24), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$18), @List, sizeof(List), rw);
ReadProcessMemory(hProcess, ptr(List+$4*N), @d1, sizeof(d1), rw);
ReadProcessMemory(hProcess, ptr(d1+$4), @d2, sizeof(d2), rw);
ReadProcessMemory(hProcess, ptr(d2+$274), @mobnameptr, sizeof(mobnameptr), rw);
mobNameStr:=GetWideString(hProcess,mobnameptr);
form2.Label3.Caption:=mobNameStr;
end;
end;
29.12.2013, 14:57
#5
Разведчик
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
Re: целевой имя delphi
Цитата:
ReadProcessMemory(hProcess, ptr(Key+$18 ), @List, sizeof(List), rw);
Вместо $18 используй $1C
mobnameptr2:array [0..128] of WideChar;
ReadProcessMemory(hProcess, ptr(ga), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$1C), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$24), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+
$1C ), @List, sizeof(List), rw);
ReadProcessMemory(hProcess, ptr(List+$4*N), @d1, sizeof(d1), rw);
ReadProcessMemory(hProcess, ptr(d1+$4), @d2, sizeof(d2), rw);
ReadProcessMemory(hProcess, ptr(d2+$274), @mobnameptr, sizeof(mobnameptr), rw);
ReadProcessMemory(hProcess,ptr(mobnameptr+$0), @mobnameptr2,128,rw);
mobNameStr:=WideCharToString(mobnameptr2);
form2.Label3.Caption:=mobNameStr;
29.12.2013, 21:25
#6
Разведчик
Регистрация: 27.12.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Re: целевой имя delphi
my client offsets and pointers:
Мой клиент смещения и указатели:
Код:
[Perfect_World_Base_Address_In_Decimal]
Application_Title=Perfect World International
Base_Address=12817100
Real_Base_Address=12815212
Base_AddressFZ=12818304
Base_AddressEXP=12820136
SendPacket_Adress=7296480
ChatBase_Address=12836624
LastChat_Address=12836636
Base_Zoom=4230706
Base_Emot=5347358
NPCSTRUCT1_OffSet=28
NPCSTRUCT1_OffSet=36
NPCBase_Offset=88
NPCPAI_Offset=752
NPCCount_Offset=20
NPCID_Offset=288
NPCName_Offset=628
NPCLVL_Offset=296
NPCHP_Offset=304
NPCMAXHP_Offset=376
NPCSpecial_Offset=616
TARSTARGET_OffSet=768
My code does not work, does not show the names.
Мой код не работает:
Код:
procedure TForm2.Button2Click(Sender: TObject);
var
addr, rw: DWORD;
d1,d2:dword;
N,Key,List:dword;
mobnameptr:dword;
mobNameStr:string;
mobnameptr2:array [0..128] of WideChar;
begin
ReadProcessMemory(hProcess, ptr($C38B6C), @Key, sizeof(Key), rw); //my real pointer
ReadProcessMemory(hProcess, ptr(Key+$1C), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$24), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$1C), @List, sizeof(List), rw);
ReadProcessMemory(hProcess, ptr(List+$4*N), @d1, sizeof(d1), rw);
ReadProcessMemory(hProcess, ptr(d1+$4), @d2, sizeof(d2), rw);
ReadProcessMemory(hProcess, ptr(d2+$274), @mobnameptr, sizeof(mobnameptr), rw); //my pointer name
ReadProcessMemory(hProcess,ptr(mobnameptr+$0), @mobnameptr2,128,rw);
mobNameStr:=WideCharToString(mobnameptr2);
form2.Label8.Caption:=mobNameStr;
end;
29.12.2013, 22:50
#7
Разведчик
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
Re: целевой имя delphi
lokosthe , you need do that:
Код:
procedure TForm2.Button2Click(Sender: TObject);
var addr, rw: DWORD;
d1,d2:dword;
N,Key,List:dword;
mobnameptr:dword;
mobNameStr:string;
mobnameptr2:array [0..128] of WideChar;
begin
for N:=1 to 768 do
begin
ReadProcessMemory(hProcess, ptr($00C392CC ), @Key, sizeof(Key), rw); //my real pointer
ReadProcessMemory(hProcess, ptr(Key+$1C), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$24), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$1C), @List, sizeof(List), rw);
ReadProcessMemory(hProcess, ptr(List+$4*N), @d1, sizeof(d1), rw);
ReadProcessMemory(hProcess, ptr(d1+$4), @d2, sizeof(d2), rw);
ReadProcessMemory(hProcess, ptr(d2+$274), @mobnameptr, sizeof(mobnameptr), rw); //my pointer name
ReadProcessMemory(hProcess,ptr(mobnameptr+$0), @mobnameptr2,128,rw);
mobNameStr:=WideCharToString(mobnameptr2);//insert mobnameptr2 in some Memo or ListBox, it`s will be better, e.g. ListBox1.Items.Add(mobnameptr2);
form2.Label8.Caption:=mobNameStr;
end;
end;
Последний раз редактировалось fds255; 29.12.2013 в 23:09 .
30.12.2013, 02:25
#8
Разведчик
Регистрация: 27.12.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Re: целевой имя delphi
happens that only appears random characters and not the name of the npc.
code:
Код:
procedure TForm2.Button2Click(Sender: TObject);
var addr, rw: DWORD;
d1,d2:dword;
N,Key,List:dword;
mobnameptr:dword;
mobNameStr:string;
mobnameptr2:array [0..128] of WideChar;
begin
for N:=1 to 768 do
begin
ReadProcessMemory(hProcess, ptr($00C392CC), @Key, sizeof(Key), rw); //my real pointer
ReadProcessMemory(hProcess, ptr(Key+$1C), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$24), @Key, sizeof(Key), rw);
ReadProcessMemory(hProcess, ptr(Key+$1C), @List, sizeof(List), rw);
ReadProcessMemory(hProcess, ptr(List+$4*N), @d1, sizeof(d1), rw);
ReadProcessMemory(hProcess, ptr(d1+$4), @d2, sizeof(d2), rw);
ReadProcessMemory(hProcess, ptr(d2+$274), @mobnameptr, sizeof(mobnameptr), rw); //my pointer name
ReadProcessMemory(hProcess,ptr(mobnameptr+$0), @mobnameptr2,128,rw);
mobNameStr:=WideCharToString(mobnameptr2);//insert mobnameptr2 in some Memo or ListBox, it`s will be better, e.g.
ListBox1.Items.Add(mobnameptr2);
form2.Label8.Caption:=mobNameStr;
end;
end;
SS:
[
Ссылки могут видеть только зарегистрированные пользователи. ]
thanks .-.
30.12.2013, 10:27
#9
Рыцарь-лейтенант
Регистрация: 31.01.2011
Сообщений: 413
Популярность: 14489
Золото Zhyk.Ru: 300
Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
Re: целевой имя delphi
lokosthe , one of 768 names must be name of npc, else you should check offsets
________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3 .
P.S. Но я всё такой же добрый модератор раздела PW.
30.12.2013, 11:45
#10
Рыцарь-капитан
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
Re: целевой имя delphi
Нет нет, все куда хуже. Я вообще не увидел подключения к какому-либо процессу, идет сразу считывание.
No no, it's much worse. I do not see any connection to the process goes directly reading.
Add in your code before the cycle next line:
wnd:=FindWindow('ElementClient Window', nil);
GetWindowThreadProcessId(wnd,@pid);
hProcess:=OpenPeocess(PROCESS_ALL_ACCES,False,pid) ;
and set variables
wnd: Thandle;
Pid: Dword;
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
30.12.2013, 13:31
#11
Разведчик
Регистрация: 27.12.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Re: целевой имя delphi
I appreciate everyone's help,
Is listing all the monsters in my region with the right name.
But I want to show just what I'm clicking.
Ie demonstrate only the target npc.
Я ценю помощь каждого,
Является ли список всех монстров в моем регионе с неверными названиями.
Но я хочу показать, что я нажатия.
Т.е. продемонстрировать только целевой NPC.
30.12.2013, 14:55
#12
Старший сержант
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
Re: целевой имя delphi
В структуре персонажа есть поле TargetWID, где хранится WID текущей цели. Тебе надо его получить и сравнивать со списком мобов/нпц рядом. Как только найдешь совпадение - значит этот моб/нпц находится в таргете.
There is a field TargetWID in HostPlayer structure, which contains target's WID. You'll have to do the following:
1) Get surrounding NPCs
2) Compare each NPC's WID with TargetWID. If NPC's WID equals TargetWID then this NPC is in player's target.
I don't know autoit, so I can't help with the code
Pseudocode might looks like this:
Код:
var mobs = PW.GetMobs(); //array of mobs nearby;
var target = PW.Player.GetTargetWID(); //WID's of player's target
foreach(var mob in mobs) // cycling through mobs
{
if (mob.WID == target) //Maybe this mob is in target?
{
//OK, we found target mob.
}
}
________________
[
Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
Последний раз редактировалось N00bSa1b0t; 30.12.2013 в 14:59 .
30.12.2013, 19:59
#13
Разведчик
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
Re: целевой имя delphi
Following code is working 100%
Код:
procedure TForm2.Button2Click(Sender: TObject);
var
addr, rw,TargetID,MobWID,
d1,d2,N,Key,List,
gamer_addr,mobnameptr:dword;
mobNameStr:string;
mobnameptr2:array [0..128] of WideChar;
begin
ReadProcessMemory(hProcess, ptr($00C392CC),@addr,4,rw);
ReadProcessMemory(hProcess, ptr(addr + $34), @gamer_addr, 4, rw);
ReadProcessMemory(hProcess, ptr(gamer_addr + $C88), @TargetID, 4, rw);
for N:=0 to 768 do
begin
ReadProcessMemory(hProcess, ptr($00C392CC), @Key, 4, rw);
ReadProcessMemory(hProcess, ptr(Key+$1C), @Key, 4, rw);
ReadProcessMemory(hProcess, ptr(Key+$24), @Key, 4, rw);
ReadProcessMemory(hProcess, ptr(Key+$1C), @List, 4, rw);
ReadProcessMemory(hProcess, ptr(List+$4*N), @d1, 4, rw);
ReadProcessMemory(hProcess, ptr(d1+$4), @d2, 4, rw);
if d2<>0 then
begin
ReadProcessMemory(hProcess, ptr(d2+$120), @MobWID, 4, rw);
if MobWID=TargetID then
begin
ReadProcessMemory(hProcess, ptr(d2+$274), @mobnameptr, 4, rw);
ReadProcessMemory(hProcess,ptr(mobnameptr+$0), @mobnameptr2,128,rw);
mobNameStr:=WideCharToString(mobnameptr2);
form2.Label8.Caption:=mobNameStr;
end;
end;
end;
end;
If it's don't work, then see Ginrey's post №10
30.12.2013, 21:28
#14
Разведчик
Регистрация: 27.12.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Re: целевой имя delphi
understand how it works right.
I appreciate everyone's attention, I apologize but I am beginner in the field of bots in delphi.
Not intend to win everything ready.
But I would take one more doubt.
Well chosen attack a mob?
And get the drop?
Thanks people
Спасибо люди
30.12.2013, 21:35
#15
Рыцарь-лейтенант
Регистрация: 31.01.2011
Сообщений: 413
Популярность: 14489
Золото Zhyk.Ru: 300
Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
Re: целевой имя delphi
________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3 .
P.S. Но я всё такой же добрый модератор раздела PW.
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 09:06 .