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

Скиньте руководство.

-

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

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

Ответ
 
Опции темы
Старый 28.04.2012, 09:54   #16
 Разведчик
Аватар для (Giga)
 
(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен
Регистрация: 14.04.2012
Сообщений: 24
Популярность: 492
Сказал(а) спасибо: 20
Поблагодарили 14 раз(а) в 13 сообщениях
 
По умолчанию Re: Скиньте руководство.

Цитата:
Сообщение от BritishColonistПосмотреть сообщение
(Giga), есть функция FindWindow, которая постарается найти окно с нужным заголовком или классом.
Класс окна - это тоже что-то типа имени, как в заголовке.

Так что ищем окно игры и меняем его заголовок. А для этого потребуется функция SetWindowText.

Где можно посмотреть все эти функции? Думаю это есть в программе, но хотелось бы с примерами. Может быть есть какой-то сайт, где описаны все функции?!

Добавлено через 46 минут
Цитата:
Сообщение от BritishColonistПосмотреть сообщение
(Giga), есть функция FindWindow, которая постарается найти окно с нужным заголовком или классом.
Класс окна - это тоже что-то типа имени, как в заголовке.

Так что ищем окно игры и меняем его заголовок. А для этого потребуется функция SetWindowText.

Миссия выполнена VT почему-то ужасно грязный.
Если хотите посмотреть, что я сделала: [Ссылки могут видеть только зарегистрированные пользователи. ] | [Ссылки могут видеть только зарегистрированные пользователи. ]
Код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
if FindWindow(nil, 'Perfect World') = 0 then
  ShowMessage('Окно не найдено.')
else
    SetWindowText(FindWindow(nil, 'Perfect World'),  'by (Giga)');
    end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if FindWindow(nil, 'by (Giga)') = 0 then
  ShowMessage('Возможно вы ещё не переименовали клиент.')
else
    SetWindowText(FindWindow(nil, 'by (Giga)'), 'Perfect World');
    end;


end.

Последний раз редактировалось (Giga); 28.04.2012 в 11:08. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 28.04.2012, 12:20   #17
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Скиньте руководство.

(Giga), а Вам и не нужны все функции WinAPI. Их очень-очень много.
Я же говорю, ставим цель - гуглим тему, ищем функции для этого. Вот и всё.
Надо переименовать окно - гуглим "переименовать окно delphi". Там и функции будут и темы на различных форумах и т.д.

Попробуйте теперь работать с памятью процесса игры.
Как известно, функция FindWindow возвращает значение типа HWND. HWND окна это его хендл или дескриптор (можно сказать, некий идентификатор окна). Если FindWindow возвращает nil (или 0, точно не помню), то окно не было найдено. Ну так вот, зная хендл окна, можно получить идентификатор процесса (он имеет целый беззнаковый тип, то есть значения от нуля и больше, 4 байта - тип DWORD).

Код:
var 
  pId: DWORD;
  .. // остальные переменные
begin
  .. // тут поиск окна
  GetWindowThreadProcessId(WindowHandle, @pId);
  if (pId > 0) then // если успешно получили pId
   begin
     .. // тут работаем с идентификатором процесса
   end;
end;
Что можно сделать с pId? Используя функцию OpenProcess, можно открыть хендл процесса для работы с его памятью. После открытия хендла процесса можно использовать функции ReadProcessMemory и WriteProcessMemory, а так же прочие подобные функции (например, VirtualAllocEx). По окончании работы с памятью процесса его хендл должен быть закрыт через функцию CloseHandle.

Дерзайте и делитесь успехами.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Пользователь сказал cпасибо:
(Giga) (28.04.2012)
Старый 28.04.2012, 14:17   #18
 Разведчик
Аватар для (Giga)
 
(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен
Регистрация: 14.04.2012
Сообщений: 24
Популярность: 492
Сказал(а) спасибо: 20
Поблагодарили 14 раз(а) в 13 сообщениях
 
По умолчанию Re: Скиньте руководство.

Решила действительно попробовать поработать с процессом PW. Результаты так-себе. Помогите найти ошибку. Хочу выводить в форму текущий показатель ХП. Однако ничего не выводит. Вот код:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
KlientWindow:HWND;
ProcessId:Integer;
Text:Integer;
HP,MP:Integer;
hProcess,WHP,WMP,NoB:DWord;
begin
KlientWindow := FindWindow(nil, PChar('Perfect World'));
GetWindowThreadProcessId(KlientWindow,@ProcessId);
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
try
ReadProcessMemory (hProcess, Pointer($A571E0), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$1C), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$34), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$494), @WHP, sizeof(WHP), NoB);
HP := Integer(WHP);
ReadProcessMemory (hProcess, Pointer($A571E0), @WHP, sizeof(WMP), NoB);
ReadProcessMemory (hProcess, Pointer(WMP+$1C), @WHP, sizeof(WMP), NoB);
ReadProcessMemory (hProcess, Pointer(WMP+$34), @WHP, sizeof(WMP), NoB);
ReadProcessMemory (hProcess, Pointer(WMP+$498), @WHP, sizeof(WMP), NoB);
MP := Integer(WMP);
Label1 := TLabel(HP);
Label2 := TLabel(MP);
except
end;

end;
P.S. Из сообщений в теме выше, вы можете понять, что я неопытна. Могут быть нелепые ошибки
P.S.S. Сама нашла пару ошибок. В коде исправила, ничего не работает*(

Последний раз редактировалось (Giga); 28.04.2012 в 14:20.
  Ответить с цитированием
Старый 28.04.2012, 14:28   #19
 Разведчик
Аватар для (Giga)
 
(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен
Регистрация: 14.04.2012
Сообщений: 24
Популярность: 492
Сказал(а) спасибо: 20
Поблагодарили 14 раз(а) в 13 сообщениях
 
По умолчанию Re: Скиньте руководство.

Цитата:
Сообщение от genz.Посмотреть сообщение
develop studio можно?

Простите, что?! Какая-же я нубка
  Ответить с цитированием
Старый 28.04.2012, 16:36   #20
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Скиньте руководство.

(Giga), блок try и except я бы убрал. В этом нет особого смысла.
HP и MP должны быть тоже типа DWORD, но это не критично на самом деле.

Цитата:
Сообщение от (Giga)Посмотреть сообщение
ReadProcessMemory (hProcess, Pointer($A571E0), @WHP, sizeof(WMP), NoB);
ReadProcessMemory (hProcess, Pointer(WMP+$1C), @WHP, sizeof(WMP), NoB);
ReadProcessMemory (hProcess, Pointer(WMP+$34), @WHP, sizeof(WMP), NoB);
ReadProcessMemory (hProcess, Pointer(WMP+$498), @WHP, sizeof(WMP), NoB);
MP := Integer(WMP);

А тут Вы читаете результат в переменную WHP, но MP делаете равным WMP.
Не в этом ли ошибки?
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Старый 28.04.2012, 16:54   #21
 Разведчик
Аватар для (Giga)
 
(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен
Регистрация: 14.04.2012
Сообщений: 24
Популярность: 492
Сказал(а) спасибо: 20
Поблагодарили 14 раз(а) в 13 сообщениях
 
По умолчанию Re: Скиньте руководство.

Цитата:
Сообщение от BritishColonistПосмотреть сообщение
(Giga), блок try и except я бы убрал. В этом нет особого смысла.
HP и MP должны быть тоже типа DWORD, но это не критично на самом деле.



А тут Вы читаете результат в переменную WHP, но MP делаете равным WMP.
Не в этом ли ошибки?

Эту ошибку я забыла исправить тут, в моем коде ошибки данной не было. И я сделала это. Вот мое изобретение:
[Ссылки могут видеть только зарегистрированные пользователи. ] | [Ссылки могут видеть только зарегистрированные пользователи. ]
Код:


Добавлено через 46 минут
Попыталась дописать координаты, ничего не получилось. Выводит далеко не координаты.
Вот код моего изобретения:
Есть ещё пара вопросов:
1) Как вывести например хп моего персонажа в форму Label?
2)
Цитата:
Сообщение от sumikotПосмотреть сообщение
+003C LocX, float /Координата X/ +007C /Повтор/
+0040 LocZ, float /Координата Z/ +0080 /Повтор/
+0044 LocY, float /Координата Y/ +0084 /Повтор/

Что значит float?(знаю про неё в CE, но на что показывает в плане кодинга не понимаю). Так-же мне интересно, что значит "Повтор"?
3) Что значит "Идентификатор объекта"?

Последний раз редактировалось (Giga); 28.04.2012 в 17:51. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 28.04.2012, 18:35   #22
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: Скиньте руководство.

Цитата:
Сообщение от (Giga)Посмотреть сообщение
Попыталась дописать координаты, ничего не получилось. Выводит далеко не координаты

Это потому что координаты внутри процесса выглядят немного не в том виде, как показаны игроку.
Функции преобразования координат процесса в игровые(на с++)
Код:
float GameX(float px){return(px+4000)/10;}
float GameY(float py){return(py+5500)/10;}
float GameZ(float pz){return pz/10;}
Добавлено через 6 минут
Цитата:
Сообщение от (Giga)Посмотреть сообщение
Что значит float?(знаю про неё в CE, но на что показывает в плане кодинга не понимаю). Так-же мне интересно, что значит "Повтор"?
3) Что значит "Идентификатор объекта"?

Float - тип данных с плавающей(float) точкой, то-есть дробные числа, например 13.234. В памяти занимает 4 байта.
"Повтор" тут видимо автор сказал о том, что по данным адресам координаты дублируются повторно, если не ошибаюсь
Идентификатор объекта - это число типа DWORD который уникальный для каждого персонажа, лута, реса, игрока, вобщем всех обьектов. сделанно это для того, чтобы программа по ID (идентификатор) могла выбрать(идентифицыровать) только один обьект из множества одинаковых (мобы например), и никакой другой обьект не имеет такой же WID)
WID - World ID тоесть мировой идентификатор, то о чём я говорил. Есть ещё просто ID. Например ID типа вещи, ID npc'а, но в основном используется уникальный мировой идентификатор WID
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝

Последний раз редактировалось dwa83; 28.04.2012 в 18:48. Причина: Добавлено сообщение
  Ответить с цитированием
Пользователь сказал cпасибо:
(Giga) (28.04.2012)
Старый 28.04.2012, 18:47   #23
 Разведчик
Аватар для (Giga)
 
(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен
Регистрация: 14.04.2012
Сообщений: 24
Популярность: 492
Сказал(а) спасибо: 20
Поблагодарили 14 раз(а) в 13 сообщениях
 
По умолчанию Re: Скиньте руководство.

Код:
float GameX(float px){return(px+4000)/10;}
float GameY(float py){return(py+5500)/10;}
float GameZ(float pz){return pz/10;}
Что это? Как работает? Куда вставлять?
За остальное спасибо.
P.S. Как я понимаю ответа на этот вопрос ты не знаешь?! Или просто не увидел?
Цитата:
1) Как вывести например хп моего персонажа в форму Label?


Последний раз редактировалось (Giga); 28.04.2012 в 18:53.
  Ответить с цитированием
Старый 29.04.2012, 09:56   #24
 Разведчик
Аватар для (Giga)
 
(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен
Регистрация: 14.04.2012
Сообщений: 24
Популярность: 492
Сказал(а) спасибо: 20
Поблагодарили 14 раз(а) в 13 сообщениях
 
По умолчанию Re: Скиньте руководство.

Цитата:
Сообщение от genz.Посмотреть сообщение
я понел кому надо пишите в лс

А почему бы тебе не скинуть это сюда?!
  Ответить с цитированием
Старый 29.04.2012, 10:09   #25
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: Скиньте руководство.

Цитата:
Сообщение от (Giga)Посмотреть сообщение
Что это? Как работает? Куда вставлять?

Это функции преобразования координат в клиенте в привычные игроку, показанные на миникарте. Вставляются куда душе угодно, лишь бы были видны в программе. Это для с++, в делфи вместо фигурных скобок begin, end. Я для компактности так записал, можно и так
float GameX(float px)
{
return (px+4000)/10;
}

float GameY(float py)
{
return (py+5500)/10;
}

float GameZ(float pz)
{
return pz/10;
}

Добавлено через 7 минут
Цитата:
Сообщение от (Giga)Посмотреть сообщение
1) Как вывести например хп моего персонажа в форму Label?

Как я понимаю HP уже считанно в переменную. Дальше можно разместить на форме таймер, поставить интервал времени для него например 200мс. В обработке события таймера написать Label1.Caption:=IntToStr(HP); или просто Label1.Caption=HP; (должно само преобразоваться в string)

Ведь это основы..
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝

Последний раз редактировалось dwa83; 29.04.2012 в 10:17. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 29.04.2012, 10:53   #26
 Разведчик
Аватар для (Giga)
 
(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен
Регистрация: 14.04.2012
Сообщений: 24
Популярность: 492
Сказал(а) спасибо: 20
Поблагодарили 14 раз(а) в 13 сообщениях
 
По умолчанию Re: Скиньте руководство.

Цитата:
Сообщение от dwa83Посмотреть сообщение
Это функции преобразования координат в клиенте в привычные игроку, показанные на миникарте. Вставляются куда душе угодно, лишь бы были видны в программе. Это для с++, в делфи вместо фигурных скобок begin, end. Я для компактности так записал, можно и так
float GameX(float px)
{
return (px+4000)/10;
}

float GameY(float py)
{
return (py+5500)/10;
}

float GameZ(float pz)
{
return pz/10;
}

Все-равно не поняла... Можно пример кода Delphi для преобразования координат в нормальный вид?
  Ответить с цитированием
Старый 29.04.2012, 11:47   #27
 Разведчик
Аватар для zaparca
 
zaparca на правильном пути
Регистрация: 07.10.2010
Сообщений: 21
Популярность: 90
Сказал(а) спасибо: 14
Поблагодарили 15 раз(а) в 14 сообщениях
 
По умолчанию Re: Скиньте руководство.

CX := FloatToStr((LocX + 4000) / 10); CX := Copy(CX, 1, Pos(',', CX) - 1);
CY := FloatToStr((LocY + 5500) / 10); CY := Copy(CY, 1, Pos(',', CY) - 1);
CZ := FloatToStr((LocZ) / 10); CZ := Copy(CZ, 1, Pos(',', CZ) - 1);
LabXYZ.Caption := CX + ', ' + CY + ' ' + CZ;
________________
если я не ошибаюсь, а могу и ошибаться ...
too many actual parameters
  Ответить с цитированием
Пользователь сказал cпасибо:
(Giga) (29.04.2012)
Старый 29.04.2012, 12:04   #28
 Разведчик
Аватар для (Giga)
 
(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен
Регистрация: 14.04.2012
Сообщений: 24
Популярность: 492
Сказал(а) спасибо: 20
Поблагодарили 14 раз(а) в 13 сообщениях
 
По умолчанию Re: Скиньте руководство.

Цитата:
Сообщение от zaparcaПосмотреть сообщение
CX := FloatToStr((LocX + 4000) / 10); CX := Copy(CX, 1, Pos(',', CX) - 1);
CY := FloatToStr((LocY + 5500) / 10); CY := Copy(CY, 1, Pos(',', CY) - 1);
CZ := FloatToStr((LocZ) / 10); CZ := Copy(CZ, 1, Pos(',', CZ) - 1);
LabXYZ.Caption := CX + ', ' + CY + ' ' + CZ;

эм... Это уже похоже на Delphi, но ничего не работает... Просьба, объясните, зачем вы прибавляете 5500 и делите на 10 координаты Y? Что значит переменная LocY\X\Z?
  Ответить с цитированием
Старый 29.04.2012, 12:52   #29
 Разведчик
Аватар для zaparca
 
zaparca на правильном пути
Регистрация: 07.10.2010
Сообщений: 21
Популярность: 90
Сказал(а) спасибо: 14
Поблагодарили 15 раз(а) в 14 сообщениях
 
По умолчанию Re: Скиньте руководство.

LocY\X\Z
Цитата:
+003C LocX, float /Координата X/ +007C /Повтор/
+0040 LocZ, float /Координата Z/ +0080 /Повтор/
+0044 LocY, float /Координата Y/ +0084 /Повтор/

CX := FloatToStr((LocX + 4000) / 10)
Цитата:
так как у нас LocX получаемая из памяти примерно равна ~2.546232532...
выполняем с действие FloatToStr((LocX + 4000) / 10)
получаем что то типа 245,43223232432...
выполняем с действие Copy(CX, 1, Pos(',', CX) - 1);
т.е. копирование строки до ","
и получаем 245

________________
если я не ошибаюсь, а могу и ошибаться ...
too many actual parameters
  Ответить с цитированием
Пользователь сказал cпасибо:
(Giga) (29.04.2012)
Старый 29.04.2012, 13:09   #30
 Разведчик
Аватар для (Giga)
 
(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен(Giga) скоро будет известен
Регистрация: 14.04.2012
Сообщений: 24
Популярность: 492
Сказал(а) спасибо: 20
Поблагодарили 14 раз(а) в 13 сообщениях
 
По умолчанию Re: Скиньте руководство.

Посмотри, в чем ошибка?
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
KlientWindow:HWND;
ProcessId:Integer;
Text:Integer;
HP,MP,MPMax,HPMax,kx,ky,kz:Integer;
hProcess,WHP,WMP,NoB,WHPMax,WMPMax:DWord;
wkx,wky,wkz:DWord;
x,y,z:string;
begin
KlientWindow := FindWindow(nil, PChar('Perfect World'));
GetWindowThreadProcessId(KlientWindow,@ProcessId);
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
If  (KlientWindow > 0) then
try
ReadProcessMemory (hProcess, Pointer($A571E0), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$1C), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$34), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$494), @WHP, sizeof(WHP), NoB);
HP := Integer(WHP);
ReadProcessMemory (hProcess, Pointer($A571E0), @WHPMax, sizeof(WHPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WHPMax+$1C), @WHPMax, sizeof(WHPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WHPMax+$34), @WHPMax, sizeof(WHPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WHPMax+$4DC), @WHPMax, sizeof(WHPMax), NoB);
HPMax := Integer(WHPMax);
ReadProcessMemory (hProcess, Pointer($A571E0), @WMP, sizeof(WMP), NoB);
ReadProcessMemory (hProcess, Pointer(WMP+$1C), @WMP, sizeof(WMP), NoB);
ReadProcessMemory (hProcess, Pointer(WMP+$34), @WMP, sizeof(WMP), NoB);
ReadProcessMemory (hProcess, Pointer(WMP+$498), @WMP, sizeof(WMP), NoB);
MP := Integer(WMP);
ReadProcessMemory (hProcess, Pointer($A571E0), @WMPMax, sizeof(WMPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WMPMax+$1C), @WMPMax, sizeof(WMPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WMPMax+$34), @WMPMax, sizeof(WMPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WMPMax+$4E0), @WMPMax, sizeof(WMPMax), NoB);
MPMax := Integer(WMPMax);
ReadProcessMemory (hProcess, Pointer($A571E0), @wkz, sizeof(wkz), NoB);
ReadProcessMemory (hProcess, Pointer(wkz+$1C), @wkz, sizeof(wkz), NoB);
ReadProcessMemory (hProcess, Pointer(wkz+$34), @wkz, sizeof(wkz), NoB);
ReadProcessMemory (hProcess, Pointer(wkz+$040), @wkz, sizeof(wkz), NoB);
kz := integer(wkz);
ReadProcessMemory (hProcess, Pointer($A571E0), @wky, sizeof(wky), NoB);
ReadProcessMemory (hProcess, Pointer(wky+$1C), @wky, sizeof(wky), NoB);
ReadProcessMemory (hProcess, Pointer(wky+$34), @wky, sizeof(wky), NoB);
ReadProcessMemory (hProcess, Pointer(wky+$03C), @wky, sizeof(wky), NoB);
ky := integer(wky);
ReadProcessMemory (hProcess, Pointer($A571E0), @wkx, sizeof(wkx), NoB);
ReadProcessMemory (hProcess, Pointer(wkx+$1C), @wkx, sizeof(wkx), NoB);
ReadProcessMemory (hProcess, Pointer(wkx+$34), @wkx, sizeof(wkx), NoB);
ReadProcessMemory (hProcess, Pointer(wkx+$044), @wkx, sizeof(wkx), NoB);
kx := integer(wkx);
X := FloatToStr((kx + 4000) / 10); X := Copy(X, 1, Pos(',', X) - 1);
Y := FloatToStr((ky + 5500) / 10); Y := Copy(Y, 1, Pos(',', Y) - 1);
Z := FloatToStr((kz) / 10); Z := Copy(Z, 1, Pos(',', Z) - 1);
Edit1.text := IntToStr(HP);
Edit2.text := IntToStr(MP);
Gauge1.Progress := round(HP * 100 / HPMax);
Gauge2.Progress := round(MP * 100 / MPMax);
Edit3.text :=  x + y + z;
except

end;

end;
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Статья] Руководство по ВПЕ! maxxx Читы, баги и статьи по WoW 143 08.11.2015 11:24
[Руководство] Руководство по разводу remcoms R2 Online 4 30.01.2012 00:13
руководство по Assassin Mr.RiSs Статьи и руководства по Aion 0 28.01.2011 00:14

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

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

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