Сразу предупреждаю будет сложно, но не все так страшно, как кажется.
Давайте напишем простой плагин, функцией которого будет: по нажатию клавиши, даем нашему игроку кучу баксов, для богатой и счастливой жизни! <!--smile:smile-->
<!--/smile-->
Статья для новичков, опытным кодерам она будет бесполезна.
Ближе к делу! Для начала скачайте интегрированную среду для разработки, а простыми словами - программу, в которой программисты творят свои чудеса. Я выбрал бесплатную и довольно удобную, а самое главное простую - Dev C++ 5.11.
Скачать ее можно
здесьВы можете выбрать, что угодно, например Code Blocks, или Visual Studio C++, дело вкуса, рекомендую Code Blocks.
Заранее предупреждаю, если вы не смогли установить себе данную программу, или скачать, то дальше вам не стоит читать эту статью.
Запускаем программу, щелкаем в меню - создать ---> проект и выбираем DLL.
Сохраняем наш проект в любую, заранее созданную папку, под именем AsiPlugin.
Перед нами открывается исходный код проекта, ничего не трогаем, все что вам сейчас нужно - это функция под названием DllMain.
Что такое DllMain? Это функция, которая может быть вызвана игрой при запуске и соответственно, все, что вы задумали выполнится в этом участке кода. Для нашего маленького эксперимента нам понадобится следующий участок кода:
case DLL_PROCESS_ATTACH:
{
// сюда мы запишем наше действие и оно выполнится.
break;
}
Что нам нужно для того чтобы пополнить счет игрока? Правильно, сначала узнать когда мы нажали на клавишу!
Я дам вам шаблон данной функции и им можно будет пользоваться в дальнейшем.
void OnTimer(HWND hwnd, UINT msg, UINT idTimer, DWORD dwTime)
{
if (GetAsyncKeyState(0x47) & 0x8000) // если нажали на G, 0x47 - код клавиши
{
// то тут выполняем наш код
}
}
Коды для клавиатуры можно найти
здесь.
Данный участок кода, постоянно будет повторяться и каждый раз будет проверяться состояние клавиши G.
Далее самое сложное. Нам нужен адрес переменной, которая хранит в себе количество денег игрока. При помощи этого адреса мы считаем деньги в нашу переменную и запишем новую сумму.
Заходим
сюда (здесь вы найдете основные адреса перменных игры)
Видим наш адрес: 0xB7CE50 - [dword] Деньги.
Как этим пользоваться спросите вы? Объясняю!
Что-бы прочитать количество денег в переменную, вам нужно объявить переменную и проделать следующий фокус с указателем на этот адрес:
DWORD Many = *(DWORD*)0xB7CE50; // получаем деньги.
*(DWORD*)0xB7CE50 = 1000000; // даем денег игроку
В итоге получим следующий код:
DWORD Many = *(DWORD*)0xB7CE50; // сколько денег у игрока?
if(Many<99999999) // если меньше 99999999
{
*(DWORD*)0xB7CE50 = 99999999; // то берем себе кругленькую сумму
}
Далее нам необходимо запустить таймер, который будет выполнять нашу функцию и каждый раз спрашивать: нажали ли мы клавишу?
Делается это так - SetTimer(0, 0, 200, (TIMERPROC)OnTimer); // 200 интервал в миллисекундах
В итоге получим следующий код:
void OnTimer(HWND hwnd, UINT msg, UINT idTimer, DWORD dwTime)
{
if (GetAsyncKeyState(0x47) & 0x8000) // если нажали G
{
DWORD Many = *(DWORD*)0xB7CE50; // получаем количетсво денег
if(Many<99999999) // если денег меньше 99999999
{
*(DWORD*)0xB7CE50 = 99999999; // то забираем себе кучу баксов
}
}
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
{
SetTimer(0, 0, 200, (TIMERPROC)OnTimer); // запускаем наш таймер
break;
}
case DLL_PROCESS_DETACH:
{
break;
}
case DLL_THREAD_ATTACH:
{
break;
}
case DLL_THREAD_DETACH:
{
break;
}
}
return TRUE;
}
Теперь нам осталось скомпилировать нашу программу и попробовать ее в игре. Сразу хочу обратить внимание. Выберите 32 битный компилятор в Dev C++, иначе наш плагин работать не будет.
Смотрите картинку, как это сделать и что нажать для компиляции.
Получилось без ошибок? Если да, то идем в папку с нашим проектом и находим файл DLL, который у нас получился. Переименовываем расширение в ASI и кидаем в папку с игрой. Важно! Не забудьте установить
AsiLoader, или
CLEO 4.
Вот и все. Запускайте игру и жмите G. Все работает? Молодцы, поздравляю!
Спросите что дальше? Отвечу: изучайте программирование, быть может из вас получится гуру моддинга, а может быть и круче. <!--smile:smile-->
<!--/smile-->
Тем у кого не получилось, дарю плагин
AsiPlugin.rar и исходник проекта
lesson.rar.
Полезные ссылки:Книги по программированию можно скачать
здесь.
Адреса и функции Gta San Andreas, там же можно найти базу для IDA, в которой много чего интересного. Как пользоваться IDA боюсь, нужна отдельная статья.
Спасибо за внимание, надеюсь статья понравилась! Всем удачи!
p.s: Если статья вызовет интерес, то в следующей статье научу пользоваться функциями GTA и к примеру спавнить машины.
Статья эксклюзивна для сайта Gamemodding.net, при копировании материала необходимо указать ссылку на сайт.
Комментарии (7)