Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Узнать ХП у таргет-моба

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 30.10.2011, 22:56   #1
 Разведчик
Аватар для trixicus
 
trixicus никому не известный тип
Регистрация: 30.10.2011
Сообщений: 1
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Узнать ХП у таргет-моба

Добрый вечер. Помогите пожалуйста реализовать получение ХП у таргет-моба. Пока написал только это:

Код:
function GetMobInfo: TMobInfo;
var
 BytesCount: DWORD;
 Mobs,id: DWORD;
 i,j : integer;
begin
 ReadProcessMemory(hProcess, ptr(GA), @Mobs, sizeof(Mobs), BytesCount);
 ReadProcessMemory(hProcess, ptr(Mobs+$8), @Mobs sizeof(MobsTemp), BytesCount);
 ReadProcessMemory(hProcess, ptr(MobsTemp+$24), @Mobs, sizeof(Mobs), BytesCount);
 ReadProcessMemory(hProcess, ptr(MobsTemp+$18), @Mobs, sizeof(Mobs), BytesCount);
//----------------- Именно здесь и должно быть получение
end;
Так же отдельно получаю TargetID для персонажа:
Код:
ReadProcessMemory(hProcess, ptr(GA+$B68), @ID, sizeof(ID), BytesCount);
  Ответить с цитированием
Старый 30.10.2011, 23:37   #2
 Разведчик
Аватар для HellD
 
HellD на правильном путиHellD на правильном пути
Регистрация: 07.02.2011
Сообщений: 38
Популярность: 143
Сказал(а) спасибо: 5
Поблагодарили 20 раз(а) в 11 сообщениях
Отправить сообщение для HellD с помощью ICQ
 
По умолчанию Re: Узнать ХП у таргет-моба

Код:
ReadProcessMemory(hProcess, ptr(GA), @MobsTemp, sizeof(MobsTemp), BytesCount);
ReadProcessMemory(hProcess, ptr(MobsTemp+$1c), @MobsTemp, sizeof(MobsTemp), BytesCount);
ReadProcessMemory(hProcess, ptr(MobsTemp+$24), @MobsTemp, sizeof(MobsTemp), BytesCount);
ReadProcessMemory(hProcess, ptr(MobsTemp+$18), @MobsTemp, sizeof(MobsTemp), BytesCount);
ReadProcessMemory(hProcess, ptr(MobsTemp+I*4), @MobsTemp, sizeof(MobsTemp), BytesCount);
ReadProcessMemory(hProcess, ptr(MobsTemp+$4), @MobsTemp, sizeof(MobsTemp), BytesCount);
ReadProcessMemory(hProcess, ptr(MobsTemp+$11c), @MobId, sizeof(MobId), BytesCount);
ReadProcessMemory(hProcess, ptr(MobsTemp+$12c), @MobHp, sizeof(MobHp), BytesCount);
ReadProcessMemory(hProcess, ptr(MobsTemp+$16c), @MobMHp, sizeof(MobMHp), BytesCount);

Что бы получить хп конкретного моба, все равно всех перебирать надо... и из них выбирать уже нужного тебе, в твоем случае по WID...



и, кстати, поправь таргет GA+34+B68

Последний раз редактировалось HellD; 30.10.2011 в 23:46.
  Ответить с цитированием
Старый 31.10.2011, 00:06   #3
 Разведчик
Аватар для trixicus
 
trixicus никому не известный тип
Регистрация: 30.10.2011
Сообщений: 1
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Узнать ХП у таргет-моба

Код:
    for j := 0 to 5 do
      for i := 0 to 768 do begin
        ReadProcessMemory(hProcess, ptr(GA), @MobsTemp, sizeof(MobsTemp), BytesCount);
        ReadProcessMemory(hProcess, ptr(MobsTemp+$1c), @MobsTemp, sizeof(MobsTemp), BytesCount);
        ReadProcessMemory(hProcess, ptr(MobsTemp+$24), @MobsTemp, sizeof(MobsTemp), BytesCount);
        ReadProcessMemory(hProcess, ptr(MobsTemp+$18), @MobsTemp, sizeof(MobsTemp), BytesCount);
        ReadProcessMemory(hProcess, ptr(MobsTemp+I*4), @MobsTemp, sizeof(MobsTemp), BytesCount);
        ReadProcessMemory(hProcess, ptr(MobsTemp+$4), @MobsTemp, sizeof(MobsTemp), BytesCount);
        ReadProcessMemory(hProcess, ptr(MobsTemp+$11c), @MobId, sizeof(MobId), BytesCount);
        ShowMessage(IntToStr(MobId));
        ReadProcessMemory(hProcess, ptr(MobsTemp+$12c), @Result.HP, sizeof(Result.HP), BytesCount);
        ReadProcessMemory(hProcess, ptr(MobsTemp+$16c), @Result.MaxHP, sizeof(Result.MaxHP), BytesCount);
      end;
MobID всегда равен 4949149, вне зависимости от того какие мобы (и сколько) находятся рядом.

Вопрос 1:
Код:
ReadProcessMemory(hProcess, ptr(MobsTemp+$1c), @MobsTemp, sizeof(MobsTemp), BytesCount);
Зачем эта строчка, если и так уже используется Game Adress

Вопрос 2:
Код:
GA +8 +24 +18 +[I*4] + (+0)^J +4: (I in [0..300])
Надо ли MobsTemp+$8

Цитата:
и, кстати, поправь таргет GA+34+B68

Сие досадное недоразумение допущено при отправке на форум, в коде все в порядке

Прикрепил файл проекта
Вложения
Тип файла: rar Unit1.rar (1.4 Кб, 57 просмотров)

Последний раз редактировалось trixicus; 31.10.2011 в 00:12.
  Ответить с цитированием
Старый 31.10.2011, 00:38   #4
 Разведчик
Аватар для HellD
 
HellD на правильном путиHellD на правильном пути
Регистрация: 07.02.2011
Сообщений: 38
Популярность: 143
Сказал(а) спасибо: 5
Поблагодарили 20 раз(а) в 11 сообщениях
Отправить сообщение для HellD с помощью ICQ
 
По умолчанию Re: Узнать ХП у таргет-моба

по первому и второму вопросу... ответ один )) +1С теперь вместо +8... как итог, +1С надо(и никакого отношение к BA+1C это не имеет), а +8, наоборот, не надо)
то есть другими словами:

GA +1с +24 +18 +[I*4] + (+0)^J +4: (I in [0..300])


Цитата:
Сообщение от trixicusПосмотреть сообщение
MobID всегда равен 4949149

тут сложно помочь... либо прикрепи обновленный архив.. потому что код в нем и код тут различны... либо сам проверь, что все оффсеты правильно прописал... проектик, честно, не запускал, тока в блокноте пролистал... но WIDы всех вокруг, по твоему коду (от сюда, а не из архива) у меня получил на ура...
  Ответить с цитированием
Старый 31.10.2011, 11:11   #5
 Разведчик
Аватар для trixicus
 
trixicus никому не известный тип
Регистрация: 30.10.2011
Сообщений: 1
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Узнать ХП у таргет-моба

Все, эту проблему решил. Теперь осталось узнать только ХП пета для полного счастья. Точнее максимальное ХП.
Пробовал получить по GA+34+1068+i*4+10+1C (%ХП), но возвращается совсем не то; оффсеты случаем не менялись?

Получение текущего ХП:
Код:
ReadProcessMemory(hProcess, ptr(gamer_addr + $1068), @addr, sizeof(addr), BytesCountOfRead);
ReadProcessMemory(hProcess, ptr(addr + 8), @i, sizeof(i), BytesCountOfRead);
if i <> (-1) then begin
    ReadProcessMemory(hProcess, ptr(addr+i*4+$10), @addr, sizeof(addr), BytesCountOfRead);
    ReadProcessMemory(hProcess, ptr(addr+$38), @addr, sizeof(addr), BytesCountOfRead);
    ShowMessage(IntToStr(addr)) ;
end;
  Ответить с цитированием
Старый 31.10.2011, 12:08   #6
 Разведчик
Аватар для krysun
 
krysun на правильном пути
Регистрация: 01.07.2009
Сообщений: 21
Популярность: 83
Сказал(а) спасибо: 30
Поблагодарили 14 раз(а) в 11 сообщениях
Отправить сообщение для krysun с помощью Skype™
 
Lightbulb Re: Узнать ХП у таргет-моба

Вот мой пример с перебором. Правда я просто получал список мобов, но добавил сравнение с вашим таргетом.
Код:
  
//*****************************************************************************
// Читаем WideString по адресу (имена мобов, ресов etc.)
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;
//*****************************************************************************
procedure GetMobList;
var
  d1,d2,rw,mobFlag:dword;
  N,Key,List:dword;
  i: integer;
  mobnameptr:dword;
  mobNameStr:string;
  CurHP, HP, wID, targetWID: dword;
begin
  //Получаем хэш ключ и начало списков
  form1.CheckListBox1.Clear; //кинем на форму CheckListBox (или Memo, на ваше усмотрение)
  ReadProcessMemory(hProcess, ptr(base_add), @Key, sizeof(Key), rw);
  ReadProcessMemory(hProcess, ptr(Key+$1C), @Key, sizeof(Key), rw);
      //Читаем свой таргет
      ReadProcessMemory(hProcess, ptr(Key+$34), @targetWID, sizeof(targetWID), rw);
      ReadProcessMemory(hProcess, ptr(targetWID+$B68), @targetWID, sizeof(targetWID), 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(Key+$24), @Key, sizeof(Key), rw);
// i:=0;
  for n:=0 to Key-1 do
  begin
  ReadProcessMemory(hProcess, ptr(List+$4*N), @d1, sizeof(d1), rw);
  while d1<>0 do
   begin
     ReadProcessMemory(hProcess, ptr(d1+$4), @d2, sizeof(d2), rw);
     ReadProcessMemory(hProcess, ptr(d2+$B4), @mobFlag, sizeof(mobFlag), rw);
     ReadProcessMemory(hProcess, ptr(d2+$254), @mobnameptr, sizeof(mobnameptr), rw);
     mobNameStr:=GetWideString(hProcess,mobnameptr); //Имя моба/нпс/пета
     {Вывод в CheckListBox}
  {  if (mobFlag=7) then   //Если NPC
      begin
         form1.MobList.Items.Add('[npc] : '+mobNameStr);
      end;   }
    if (mobFlag=6) then  //Если моб
      begin
         ReadProcessMemory(hProcess, ptr(d2+$11C), @wID, sizeof(wID), rw);
         if (wID=TargetWID) then
            begin
               ReadProcessMemory(hProcess, ptr(d2+$12C), @CurHP, sizeof(CurHP), rw);
               ReadProcessMemory(hProcess, ptr(d2+$16C), @HP, sizeof(HP), rw);
               form1.CheckListBox1.Items.Add(mobNameStr+' [HP:'+inttostr(hp)+']');
            end;
         
      end;
  {  if (mobFlag=9) then  //Если пет
      begin
         ReadProcessMemory(hProcess, ptr(d2+$12C), @CurHP, sizeof(CurHP), rw);
         ReadProcessMemory(hProcess, ptr(d2+$16C), @HP, sizeof(HP), rw);
         form1.MobList.Items.Add('[pet] : '+mobNameStr+' [HP:'+inttostr(hp));
      end;    }
    ReadProcessMemory(hProcess, ptr(d1), @d1, sizeof(d1), rw);
   end;
  end;
 end;
Исходник с получением списка мобов, нпс, петов, ресурсов, лута и игроков прикрепляю. Борода, но может пригодится.

По ссылке ниже описан "Доступ к элементам списка БЕЗ Циклов".

[Ссылки могут видеть только зарегистрированные пользователи. ]
Вложения
Тип файла: rar RB_Genesis.rar (47.8 Кб, 60 просмотров)

Последний раз редактировалось krysun; 31.10.2011 в 12:44.
  Ответить с цитированием
Старый 31.10.2011, 14:23   #7
 Разведчик
Аватар для HellD
 
HellD на правильном путиHellD на правильном пути
Регистрация: 07.02.2011
Сообщений: 38
Популярность: 143
Сказал(а) спасибо: 5
Поблагодарили 20 раз(а) в 11 сообщениях
Отправить сообщение для HellD с помощью ICQ
 
По умолчанию Re: Узнать ХП у таргет-моба

Цитата:
Сообщение от trixicusПосмотреть сообщение
Пробовал получить по GA+34+1068+i*4+10+1C (%ХП), но возвращается совсем не то

Оффсеты верные, просто там тип данных single )) скорей всего именно это ты и не учел )) обозначь переменную так же, и получишь то что надо )) 1-пет здоров, 0.99999..9 пета ранили )) ну а как имея текущее и процент получить макс хп, думаю догадаешься )) простая математика ))
  Ответить с цитированием
Старый 01.11.2011, 01:57   #8
 Разведчик
Аватар для trixicus
 
trixicus никому не известный тип
Регистрация: 30.10.2011
Сообщений: 1
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Узнать ХП у таргет-моба

Все написал, спасибо огромное. Кстати, не поможешь исходником инжекта по сбору лута.
А то я ни подбежать ни просто взять не могу. Игра с клиент с критом валится.

Последний раз редактировалось trixicus; 01.11.2011 в 07:43.
  Ответить с цитированием
Старый 01.11.2011, 16:59   #9
 Разведчик
Аватар для HellD
 
HellD на правильном путиHellD на правильном пути
Регистрация: 07.02.2011
Сообщений: 38
Популярность: 143
Сказал(а) спасибо: 5
Поблагодарили 20 раз(а) в 11 сообщениях
Отправить сообщение для HellD с помощью ICQ
 
По умолчанию Re: Узнать ХП у таргет-моба

Цитата:
Сообщение от trixicusПосмотреть сообщение
Все написал, спасибо огромное. Кстати, не поможешь исходником инжекта по сбору лута.
А то я ни подбежать ни просто взять не могу. Игра с клиент с критом валится.

http://zhyk.ru/forum/showpost.php?p=...0&postcount=57

в чем проблема? ))
  Ответить с цитированием
Старый 01.11.2011, 17:39   #10
 Разведчик
Аватар для trixicus
 
trixicus никому не известный тип
Регистрация: 30.10.2011
Сообщений: 1
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Узнать ХП у таргет-моба

хех, совершенно не заметил ее. А проблема в том, что у меня не так работает определение типа лута:
Цитата:
+14C ItemType (1 - Money; 2 - Mine; Other - Item)

1 - все кроме монет
2 - растения и пр.
3 - только монеты

Лут он отображает весь, который найдет. Мне же нужен только свой.
И еще не могу определить, поднял он вещь или нет, и в какой момент уже можно бежать за следующей. Вот

Последний раз редактировалось trixicus; 01.11.2011 в 18:26.
  Ответить с цитированием
Старый 01.11.2011, 18:29   #11
 Разведчик
Аватар для aktivizion15
 
aktivizion15 никому не известный тип
Регистрация: 25.03.2010
Сообщений: 6
Популярность: 16
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
Отправить сообщение для aktivizion15 с помощью ICQ
 
По умолчанию Re: Узнать ХП у таргет-моба

Цитата:
Сообщение от trixicusПосмотреть сообщение
Лут он отображает весь, который найдет. Мне же нужен только свой.
И еще не могу определить, поднял он вещь или нет, и в какой момент уже можно бежать за следующей.

Сделай функцию которая бы возвращала wid лута, конечно отсеивая по координатам смерти моба в определенном радиусе.
И через цикл
Код:
while loot <> 0 then
//и тут собираем его же 
PickWalk(loot)
  Ответить с цитированием
Старый 01.11.2011, 18:37   #12
 Разведчик
Аватар для trixicus
 
trixicus никому не известный тип
Регистрация: 30.10.2011
Сообщений: 1
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Узнать ХП у таргет-моба

Это все безусловно хорошо, если бы не парачка "НО":
- в этом месте где мы убили моба, могут оказаться и чужой лут, который попадет в этот радиус.
Цитата:
while loot <> 0 then PickWalk(loot)

- быстренько все переберет и побежит за последним. Поэтому и нужно определить взяли мы вещь или нет

PS: Скорее всего клиент автоматически выгружает из памяти WID того объекта, который мы взяли. Поэтому можно ждать пока WID не пропадет из списка, но какова вероятность, что он не появится снова от фармящих рядом.

А зная я список только своего лута, я мог бы сравнить просто 2 списка, ДО и После убийства моба, и определить WID-ы того, что мне надо поднять
  Ответить с цитированием
Старый 01.11.2011, 18:44   #13
 Разведчик
Аватар для aktivizion15
 
aktivizion15 никому не известный тип
Регистрация: 25.03.2010
Сообщений: 6
Популярность: 16
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
Отправить сообщение для aktivizion15 с помощью ICQ
 
По умолчанию Re: Узнать ХП у таргет-моба

Цитата:
Сообщение от trixicusПосмотреть сообщение
быстренько все переберет и побежит за последним

Ну у меня возвращает первое найденное соответствие, теотсь пока не возьму его, не пойдет дальше, топорно, но работает, радиус под мобом метров 5-ть, да старается брать и чужой, но это же не сильная проблема, можно решить занося во временный черный список того что неберется в течении некоторого времени, а после удалять
  Ответить с цитированием
Старый 01.11.2011, 19:20   #14
 Разведчик
Аватар для trixicus
 
trixicus никому не известный тип
Регистрация: 30.10.2011
Сообщений: 1
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Узнать ХП у таргет-моба

Сейчас потестил. Действительно собирает по порядку. Цикл отрабатывает моментально, как я и предполагал, но выражаясь вольным языком, "запросы встают в очередь" и бот бегает собирает лут. Осталось только заставить его собирать лут около места смерти моба, но я, признаюсь, понятия не имею как это сделать
  Ответить с цитированием
Старый 01.11.2011, 21:13   #15
 Разведчик
Аватар для aktivizion15
 
aktivizion15 никому не известный тип
Регистрация: 25.03.2010
Сообщений: 6
Популярность: 16
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
Отправить сообщение для aktivizion15 с помощью ICQ
 
По умолчанию Re: Узнать ХП у таргет-моба

Цитата:
Сообщение от trixicusПосмотреть сообщение
Осталось только заставить его собирать лут около места смерти моба, но я, признаюсь, понятия не имею как это сделать

Не буду давать готовое)
У меня сделано так:
Дополнительно крутится поточег на получение координат моба, тоетсь пока моб в таргете пишем его координаты, после смерти запись прерывается и я собираю лут в пределах радиуса этих координат

Код:
 if id = TargetID then
        begin
          ReadProcessMemory(ProcessID, Pointer(struct_ + $3C), @x, 4, num);
          ReadProcessMemory(ProcessID, Pointer(struct_ + $44), @y, 4, num);
          ReadProcessMemory(ProcessID, Pointer(struct_ + $40), @z, 4, num);
          last_x := x;
          last_y := y;
          last_z := z;
        end;
Код:
function getdistanceloot(x2, y2: single): integer;
begin
  getcord;
  result := round(sqrt(sqr(last_x - x2) + sqr(last_y - y2)));
end;

function getdistanceloot3d(x2, y2, z2: single): integer;
begin
  getcord;
  result := round(sqrt(sqr(last_x - x2) + sqr(last_y - y2) + sqr(last_z - z2)));
end;
Код:
...
if getdistanceloot(Loot_x, Loot_y) < {form1.TrackBar3.Position} 5 then
...

Последний раз редактировалось aktivizion15; 01.11.2011 в 21:23.
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Баг] Баг на таргет Consumer123 Общение и обсуждение, архив Lineage 2 1 11.06.2011 21:14
[Помогите!] Для тех кто тграет на тае ДПC Общение и обсуждение, архив Point Blank 0 23.02.2011 20:57

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 00:24.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net