Разберем вкратце, что же за такой подхват переменных в GTA Vice City. Например мы просто объявляем некую переменную в нашем коде C++ и просто присваиваем ей тот адрес, где и будет наше нужное нам игровое значение. Теперь же разберем это на реальном примере, ну и конечно же для примера возьмем тот адрес, по которому расположено значения игровых денег. Процесс будет весьма простым, мы напишем обработчик, из системных функций API. Наш готовы код будет выглядеть вот так:
#include "stdafx.h"
auto pMoney = (DWORD*)0x094ADC8;
//DWORD * ppMoney = (DWORD*)0x094ADC8;
//Код обработки нажатия
void Update() {
if (GetKeyState(0x4D) > 0)
*pMoney += 10;
};
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
SetTimer(0,0, 100, (TIMERPROC)Update);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Теперь, давайте для понимания, разберем данный код, как он работает. Сперва вы объявляем типизированные указатель, которым присваиваем адрес где находиться значение игровых денег GTA Vice City:
auto pMoney = (DWORD*)0x094ADC8; //Первый вариант объявления с автоматическим приведением
или можно объявить так:
DWORD * ppMoney = (DWORD*)0x094ADC8; //Второй вариант чистый C++ код
Затем мы пишем обычную свою процедуру, в которой будем проверять нажатия клавиши “M”, как только нажмем, мы прибавим значение, к текущему балансу денег, 10 игровых долларов прям в игре.
//Код обработки нажатия
void Update() {
if (GetKeyState(0x4D) > 0)
*pMoney += 10;
};
GetKeyState(0x4D) – это Api функция, и параметр это номер клавиши, об этом подробно можно найти в интернете.
case DLL_PROCESS_ATTACH:
SetTimer(0,0, 100, (TIMERPROC)Update);
break;
Тут также API функция, которая вешает таймер на процедуру, получается как только плагин загружается, сразу вешаем таймер, на нашу процедуру, с интервалом 100 миллисекунд об этой функции также есть доступная справка, если хотите узнать по подробней. Теперь подведем итоги этого нашего творения:
*pMoney += 10;
С этим методом, теперь не нужно, делать так, как мы делали чтение и запись в предыдущих уроках, для таких задач, этот урок вам пригодиться. Достаточно объявить правильно типизированный указатель с нужным размером и затем присвоить ему адрес. Использовать потом, переменную легко, разыменовывать * этим и спокойно присваивать или считывать значение в дальнейшем. Вот такая вот простая и в тоже время удобная логика кода, для различных целей.
Скачать исходник примера ASI [22,22 Kb] (cкачиваний: 46)