Все игры
Загрузка...
Календарь
    Январь 2018    →
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
293031 
Лучшие пользователи
У вас есть игровая приставка?

Пишем простой ASI плагин для GTA San Andreas

13 мая 2016
Сразу предупреждаю будет сложно, но не все так страшно, как кажется.
Давайте напишем простой плагин, функцией которого будет: по нажатию клавиши, даем нашему игроку кучу баксов, для богатой и счастливой жизни! smile
Статья для новичков, опытным кодерам она будет бесполезна.

Ближе к делу! Для начала скачайте интегрированную среду для разработки, а простыми словами - программу, в которой программисты творят свои чудеса. Я выбрал бесплатную и довольно удобную, а самое главное простую - Dev C++ 5.11.
Скачать ее можно здесь
Вы можете выбрать, что угодно, например Code Blocks, или Visual Studio C++, дело вкуса, рекомендую Code Blocks.


Заранее предупреждаю, если вы не смогли установить себе данную программу, или скачать, то дальше вам не стоит читать эту статью.

Запускаем программу, щелкаем в меню - создать ---> проект и выбираем DLL.
Пишем простой ASI плагин


Сохраняем наш проект в любую, заранее созданную папку, под именем AsiPlugin.
Перед нами открывается исходный код проекта, ничего не трогаем, все что вам сейчас нужно - это функция под названием DllMain.
Пишем простой ASI плагин


Что такое 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++, иначе наш плагин работать не будет.
Смотрите картинку, как это сделать и что нажать для компиляции.
Пишем простой ASI плагин


Получилось без ошибок? Если да, то идем в папку с нашим проектом и находим файл DLL, который у нас получился. Переименовываем расширение в ASI и кидаем в папку с игрой. Важно! Не забудьте установить AsiLoader, или CLEO 4.
Вот и все. Запускайте игру и жмите G. Все работает? Молодцы, поздравляю!
Спросите что дальше? Отвечу: изучайте программирование, быть может из вас получится гуру моддинга, а может быть и круче. smile
Тем у кого не получилось, дарю плагин AsiPlugin.rar и исходник проекта lesson.rar.

Полезные ссылки:
Книги по программированию можно скачать здесь.
Адреса и функции Gta San Andreas, там же можно найти базу для IDA, в которой много чего интересного. Как пользоваться IDA боюсь, нужна отдельная статья.


Спасибо за внимание, надеюсь статья понравилась! Всем удачи!
p.s: Если статья вызовет интерес, то в следующей статье научу пользоваться функциями GTA и к примеру спавнить машины.

Статья эксклюзивна для сайта Gamemodding.net, при копировании материала необходимо указать ссылку на сайт.
Опубликовал: smalloff Скачиваний: 60 Комментарии: 7
29
Похожие моды
  • Mod Loader  v0.2.4

    Mod Loader v0.2.4

    ASI плагин для Grand Theft Auto San Andreas, который существенно упрощает установку любых...

  • Мыть пол

    Мыть пол

    Теперь в доме Джонсонов (Первый дом CJ'я) можно будет вымыть пол! Для этого вам необходимо взять...

  • Пишем скрипт для смены скина игрока...

    Продолжение серии статей по CLEO скриптингу для начинающих. В этой статье вы научитесь менять скин...

  • Пишем свой первый CLEO скрипт

    Эта статья предназначена для тех, кто хочет освоить программирование под библиотеку CLEO в GTA San...

Комментарии
    Информация

    Для того, чтобы оставлять комментарии к данной публикации необходимо зарегистрироваться.