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

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

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
Модификация позволяет кататься на роликах, прямо как пляжные девушки.

13 июнь 2023

Нативные функции в GTA 5


В данной статье мы расскажем, как вызывать нативные функции из C++ напрямую в вашем скрипте, применять их в качестве условий, а также использовать необработанные хэши функций. Этот материал предназначен для новичков, кто прежде не создавал скрипты для GTA 5, но уже знаком с синтаксисом языка C#.


Когда необходимо вызывать нативные функции напрямую

Если ScriptHookVDotNet не поддерживает функции, которые вы хотите использовать, их придется вызывать напрямую. Например, класс Vehicle в SHVDN в настоящее время не имеет свойства Radio, позволяющего изменять радиостанцию или включать/выключать радио.

Чтобы вызвать нативную функцию, используйте метод Function.Call(), передав в нем хэш-код и параметры. Найти информацию обо всех функциях GTA 5 можно в базе от моддера alloc8or. На сегодняшний день она является самой подробной и актуальной.

Для примера возьмем функцию SET_VEHICLE_RADIO_ENABLED, которая принимает два параметра: хэндл транспортного средства и значение переключения радио.

Function.Call(Hash.SET_VEHICLE_RADIO_ENABLED, Game.Player.Character.CurrentVehicle, false);



Возвращение чего-либо из нативной функции

Если вы хотите вернуть что-то при вызове нативной функции, добавьте к Function.Call тип значения, который вы хотите вернуть, поместив тип внутри угловых скобок:

var test = Function.Call<int>(GTA.Native.Hash.CREATE_SYNCHRONIZED_SCENE, Game.Player.Character.Position.X, Game.Player.Character.Position.Y, Game.Player.Character.Position. - 1, 0, 0, 180, 2);

В данном примере нам нужно получить идентификатор синхронизированной сцены, поэтому мы привели Function.Call к значению int.

Аналогичные действия проводятся и с условным вызовом нативных функций:

if (!Function.Call<bool>(Hash.IS_PED_A_PLAYER, ped)
{
    // Код сработает, если ped не является игроком
}



Необработанные хэш-значения

GTA 5 регулярно обновляется, и апдейты GTA Online привносят в игру новые нативные функции, которые можно использовать в том числе и в одиночной игре. Если в SHVDN нет нужной вам функции, её можно вызвать напрямую по её хэш-значению.

Function.Call((Hash)0x9A9D1BA639675CF1, "HeistIsland", true);


Данная функция загружает и выгружает остров Кайо-Перико. В базе нативных функций она числится как SET_ISLAND_ENABLED, но в SHVDN её ещё не добавили.

А вот полный пример кода, который позволит вам оказаться на острове Кайо-Перико:

using System.Windows.Forms;
using GTA;
using GTA.Math;
using GTA.Native;


namespace CayoPericoLoad
{

    public class Basics : Script
    {
        public Basics()
        {
            KeyUp += Basics_KeyUp;
        }

        private void Basics_KeyUp(object sender, KeyEventArgs e)
        {
         
            if (e.KeyCode == Keys.NumPad1) 
            {

                Function.Call((Hash)0x0888C3502DBBEEF5);
		//void ON_ENTER_MP() // 0x0888C3502DBBEEF5 0xC65586A9 b323

                Function.Call((Hash)0x9A9D1BA639675CF1, "HeistIsland", true);
                //void SET_ISLAND_ENABLED(const char* name, BOOL toggle) // 0x9A9D1BA639675CF1 b2189

                Function.Call((Hash)0xB96B00E976BE977F, 0.0f);
		// _SET_CURRENT_INTENSITY OCEAN WAVES

		GTA.UI.Screen.FadeOut(1000);//Game.FadeScreenOut(1000);
		Wait(1000);
                Function.Call(Hash.SET_ENTITY_COORDS, Game.Player.Character, 4840.571, -5174.425, 2.0, 0, 0, 1);
		GTA.UI.Screen.FadeIn(1000);//Game.FadeScreenOut(1000);

            }
        }
    }
}


На этом цикл вводных статей закончен. В следующий раз мы рассмотрим работу с внутриигровым интерфейсом и известными фреймворками к нему. Следите за выходом новых материалом в разделе «Уроки по программированию».

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

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

Полужирный Наклонный текст Подчёркнутый текст Зачёркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Вопрос: Введите первые 3 (Русские) буквы сайта (заглавные).
Ответ:*
Другие материалы

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

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

Вывод на экран TXD GTA

Вывод на экран TXD GTA
После того как мы научились в предыдущих статьях по программированию хорошо работать с памятью игры, то можно уже приступить

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

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

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

Вызов функций и процедур в GTA Vice City
Вся игра состоит на самом деле из функций и процедур а также методов различных классов, о которых мы поговорим позднее.
Ads

Группа GTA Builder