|
Показатель жизненной силы(Помогите) - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
20.01.2014, 19:19
|
#1
|
|
|
|
Разведчик
|
Регистрация: 18.08.2011
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Показатель жизненной силы персонажа
Все я разобрался, этот код вам поможет показать ХП и Максимальное ХП своего персонажа.
Для этого вам нужно Button(2 кнопки) и Label(2 штуки).
Button1. - Связь с процессором
Button2. - Считать и показать значения в Label1 и Label2.
Код:
var
Form1: TForm1;
KlientWindow:HWND; //Handle клиента
ProcessId:Integer;
hProcess:Integer; //Идентификатор объекта
WHP:Integer;
WHPMax:Integer;
HP:Integer;
HPMax:Integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
KlientWindow := FindWindow(nil, PChar('Perfect World')); //Находим Handle окна
GetWindowThreadProcessId(KlientWindow,@ProcessId); //Получаем И.П.
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); //Открываем процесс с возможностью записи
end;
procedure TForm1.Button2Click(Sender: TObject);
var
HP,HPMax:Integer;
WHP,WHPMax,NoB:DWord;
begin
try
ReadProcessMemory (hProcess, Pointer($C38B6C), @WHP, sizeof(WHP), NoB); //BaseAdress
ReadProcessMemory (hProcess, Pointer(WHP+$1C), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$34), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$4A8), @WHP, sizeof(WHP), NoB); //Читаем значение HP
HP := Integer(WHP); //Переводим Integer
Label1.Caption := IntToStr(HP); //Вывести знанчение ХП
ReadProcessMemory (hProcess, Pointer($C38B6C), @WHPMax, sizeof(WHPMax), NoB); //BaseAdress
ReadProcessMemory (hProcess, Pointer(WHPMax+$1C), @WHPMax, sizeof(WHPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WHPMax+$34), @WHPMax, sizeof(WHPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WHPMax+$4F0), @WHPMax, sizeof(WHPMax), NoB); //Читаем значение MaxHP
HPMax := Integer(WHPMax); //Переводим Integer
Label2.Caption := IntToStr(HPMax); //Вывести Максимальное значение ХП
EXCEPT
end;
end;
end.
Спасибо fds255 за оффсеты!))
Последний раз редактировалось Foreworld; 21.01.2014 в 03:06.
Причина: Идеалист((
|
|
|
20.01.2014, 20:59
|
#2
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Показатель жизненной силы(Помогите)
строку:
ReadProcessMemory (hProcess, Pointer(WHP+ $494), @ HP, sizeof( HP), NoB);
перепиши так:
ReadProcessMemory (hProcess, Pointer(WHP+ $4A8), @ WHP, sizeof( WHP), NoB);
строку:
ReadProcessMemory (hProcess, Pointer(WHPMax+ $4DC), @ HPMax, sizeof( HPMax), NoB);
перепиши так:
ReadProcessMemory (hProcess, Pointer(WHPMax+ $4F0), @ WHPMax, sizeof( WHPMax), NoB);
Офсеты здесь:
http://zhyk.ru/forum/showpost.php?p=...postcount=1016
|
|
|
22.01.2014, 11:27
|
#3
|
|
|
|
Разведчик
|
Регистрация: 25.01.2013
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 7
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Показатель жизненной силы(Помогите)
неужели компилятор вам не выдает кучу криков, что глобальные и локальные переменные с одним именем)
Ну и если будете переходить на новые версии Делфи, то переменную NoB надо будет менять в тип SIZE_T, мало ли пригодится.
|
|
|
22.01.2014, 13:59
|
#4
|
|
|
|
Разведчик
|
Регистрация: 18.08.2011
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Показатель жизненной силы(Помогите)
Не, не орет))) Спасибо!
|
|
|
22.01.2014, 16:52
|
#5
|
|
|
|
Пехотинец
|
Регистрация: 02.08.2009
Сообщений: 57
Популярность: 417
Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
|
Re: Показатель жизненной силы персонажа
|
Цитата: |
|
|
|
|
|
|
|
|
|
неужели компилятор вам не выдает кучу криков, что глобальные и локальные переменные с одним именем)
|
|
|
|
|
|
И заметили же.... либо я так отстал что у меня нет глобальных переменных с именами короче символов 8-10, либо ТС так преуспел в сокращении имен...
Еще момент, если делать так:
Код:
var
Form1: TForm1;
PWWindow : Record
KlientWindow:HWND; //Handle клиента
ProcessId:Integer;
hProcess:Integer; //Идентификатор объекта
HostPlayer : record
WHP:Integer;
WHPMax:Integer;
HP:Integer;
HPMax:Integer;
end;
end;
Код становится чуть длинше, но более читаем... и со временем быстрей дойдете до ООП...
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 18:01.
|
|