Опрос на сайте
Что вы делаете с GTA?

Популярные новости

Magic - TXD Builder 0.9.1

Magic - TXD Builder 0.9.1
Полезная программа для сборки TXD файлов, которая важные параметры, такие как mip map, DXT сжатие... Кроме того, программа

Vertex Alpha в Vice City

Vertex Alpha в Vice City
То, что некогда было доступно лишь в GTA: San Andreas и выше: Vertex Alpha, а потенциально - и физический бленд текстур в

Main Menu Scene

Main Menu Scene
"Main Menu Scene" дает вам возможность создавать собственные сцены в "Главном Меню" игры с кастомными картой и скриптом, при

Rollerskates Mod

Rollerskates Mod
Модификация позволяет кататься на роликах, прямо как пляжные девушки.

RwD3D9 - Расширение от The Hero

RwD3D9 - Расширение от The Hero
В данном материале мы рассмотрим, один замечательный плагин RwD3D9, который позволяет перенести серию игр GTA на DirectX 9,

03 ноябрь 2014

Вызов функций и процедур в GTA Vice City


Вся игра состоит на самом деле из функций и процедур а также методов различных классов, о которых мы поговорим позднее. Данный урок покажет как написать правильно код, для того что-бы вызывать какую-то функцию и что для этого вам нужно будет. Для этого нам как обычно понадобиться база GTA Vice City для IDA pro что-бы, находить там функции игры, а затем их вызывать. Все доступные функции можно найти в этом списке:

Вызов функций и процедур в GTA Vice City


Обратите внимание на то, что есть как функции с именами sub так и есть с нормальными номерами. Изначально когда игру открыли программой IDA pro, то получили на самом деле все функции с названием sub и прочие участки. Дело в том что игра была написана на C++ и после компиляции, были утеряны все названия функций, классов, переменных, а знаете почему? Да потому-что они в процессорных командах вообще не нужны, игра будет исполнится не на именных функциях и во все. Единственно вы будете находить, строки которые оставили разработчики, например различные параметры, названия для отладки и прочее такое. Ну так вообщем имена всяких функций, классов, переменных, в языках высокого уровня, являться лишь, абстрактной вещью, это сделано лишь для человека, что-бы тот смог, строить программную логику в удобном виде. Конечно же человеку, размышлять легче в словах, чем в процессорных командах, по этому вам придется еще познакомиться с ассемблером по глубже. Ладно это была краткая теория, сейчас приступим к нашему примеру, для этого мы возьмем функцию спавна транспорта и вывозим ее, через свой плагин. Вот она как выглядит:

Вызов функций и процедур в GTA Vice City


Что-бы быстро перейти к этой функции в базе, как я уже говорил ранее нажмите клавишу G, и затем вбейте адрес 004AE8F0 который я пометил на скрине, а это и есть адрес нашей функции в памяти. Так посмотрели, что к чему теперь можно приступать к разработке кода:

#include "stdafx.h"

//Объявляем прототип спавна
auto _spawnCarAtPlayerLocation = (void (__cdecl*)(signed int modelIndex))0x04AE8F0;

//Для клавиши
bool isPress = false;

//Код обработки нажатия M
void Update() {

if (!GetKeyState(0x4D) > 0 )
isPress = false;

if ( (GetKeyState(0x4D) > 0 ) && (isPress == false) )
{
isPress = true;
_spawnCarAtPlayerLocation(162);
}

};

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:

//Тут установим таймер
SetTimer(0,0, 16, (TIMERPROC)Update);

break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}


Теперь разберем самый интересный момент, это наш прототип функции, как же он работает?

auto _spawnCarAtPlayerLocation = (void (__cdecl*)(signed int modelIndex))0x04AE8F0;


Все на самом то деле, просто сперва объявляем auto – это автоматический позволяет привести тип, переменной, он значительно сокращает на код. Далее открывается первая скобка мы пишем void это подобно тому как мы объявляем процедуру в C++, если это функция, которая возвращает параметр, то там мы пишем результат. Дальше метод передачи параметров, в нашем случае это – (__cdecl*), также надо учитывать его соответственно, иначе мы в своих разработках, можем все вызывать ошибочно имейте это введу. Далее еще открываться скобка, в ней мы прописываем наши передаваемые параметры, все точно также как мы объявляем обычную функцию, ну и затем закрываем. Теперь закрывается первая скобка, ну и рядом пишется наш адрес. Таким образом вы просто объявили прототип, якобы эта функция у нас находиться по адресу, теперь мы можем ее вызывать где нам захочется. Если мы сделали все правильно, то зайдя в игру, мы сможем накидать танки на букву “M” :

Вызов функций и процедур в GTA Vice City


Да-да, конечно же танка, мы передаем этой функции _spawnCarAtPlayerLocation параметр ID 162, а это и есть танк. Таким образом вы сможете делать spawn любых транспортных средств в игре, даже вертолеты и лодки. Конечно это уже можно назвать читерство, но не забывайте что мы просто это пробовали ради примера. Таким образом вы сможете объявлять теперь прототипы, на любые вам известные функции и процедуры в базе, а затем их вызывать.

Скачать пример вызова функций [21,98 Kb] (cкачиваний: 34)

Рекомендация:
Тренируйтесь, на различных функциях, которые есть уже в базе, лишь таким образом только вы хорошо освоите этот материал.

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
6 марта 2016 00:05
Андрей написал:
Гости
Комментариев: 0 Новостей: 0
Можно ли это сделать через оконное приложение, например по нажатию кнопки?

(Цитировать)

Добавить свой комментарий

Полужирный Наклонный текст Подчёркнутый текст Зачёркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Вставка ссылкиВставка защищённой ссылки Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Другие материалы

Вывод на экран GXT текста в GTA VC

Вывод на экран GXT текста в GTA VC
Настала пора поработать не много с текстами в GTA Vice City, а это значит что в этом уроке мы научимся выводить текст GXT,

Замена функций GTA Vice City на свою

Замена функций GTA Vice City на свою
После того как мы в предыдущих статьях, научились уже более менее хоть к чему-то. Теперь же мы перейдем к тому вопросу как

Вызов методов класса в GTA Vice City

Вызов методов класса в GTA Vice City
После того как мы разобрались в предыдущей статье, как вызывать функцию по адресу, теперь можно переходить к вызову методов

Подхват переменных в GTA Vice City

Подхват переменных в GTA Vice City
Сейчас в начале разберем вкратце, что же за такой подхват переменных в GTA Vice City. Например мы просто объявляем некую
Ads

Группа GTA Builder
Наши партнеры

GTA FreeRunning Story