Опрос на сайте
Как вам движок Vice Lua?

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

Magic - TXD Builder 0.9.1

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

Main Menu Scene

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

Vertex Alpha в Vice City

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

[CLEO]CarRec(plus ObjRec)

[CLEO]CarRec(plus ObjRec)
"CarRec" дает вам возможность записывать движения автомобиля в файл ".cr" для воспроизведения их позднее в ваших скриптах и

Rollerskates Mod

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

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качиваний: 40)

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

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
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