• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    Ошибка: Ваша версия Grand Theft Auto V не поддерживается RAGE Multiplayer.
    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Урок Простой способ взаимодействия через колшейп (C#)

DaVilka

Гуру
16 Сен 2020
682
255
128
В этом уроке я покажу один из простейших способов реализации взаимодействия с колшейпом.
И так начнем.

Первым делом создадим два подготовительных класса расширения, который позволят не заморачиваться с setdata/getdata

C#:
 public static class colshape_exceptions
    {
        public static void SetInteraction(this ColShape shape, Action<Player, ColShape> action)
        {
            shape.SetData<Action<Player,ColShape >> ("colShapeInteraction", action);
        }
        public static void Interaction(this ColShape shape, Player player)
        {
            if (shape.HasData("colShapeInteraction")) shape.GetData<Action<Player, ColShape>>("colShapeInteraction")?.Invoke(player, shape);
        }
    }

C#:
public static class player_exceptions
    {
        public static void SetPlayerColShape(this Player player, ColShape shape)
        {
            player.SetData<ColShape>("playerColShape", shape);
        }
        public static ColShape GetPlayerColShape(this Player player)
        {
            if (player.HasData("playerColShape")) return player.GetData<ColShape>("playerColShape");
            else return null;
        }
    }

Первый класс расширения добавляет две функции в колшейп, с помощью первой мы установим функцию, которая будет срабатывать при нажатии клавиши,
вторая - будет вызывать ее.
Второй класс расширит класс персонажа и добавит в него две функции, первая установит колшейп в который вошел персонаж,
а вторая будет возвращать его, если он будет.

Теперь приступим непосредственно к реализации взаимодействия.
Создадим какой то колшейп.

C#:
ColShape shape1 = NAPI.ColShape.CreateCylinderColShape(new Vector3(-425.32864, 1133.908, 325.90396), 2f, 2f, 0);

Создадим функцию взаимодействия, которая будет срабатывать в этом колшейпе

C#:
private void playerShapeInteraction1( Player player, ColShape shape)
        {
            player.SendChatMessage("Interact ColShape 1");
        }

Где то в конструкторе присвоим эту функцию колшейпу

C#:
shape1.SetInteraction(playerShapeInteraction1);

Подпишемся на два события, вход плеера в колшейп и выход из него

C#:
[ServerEvent(Event.PlayerEnterColshape)]
        public void OnPlayerEnterColshape(ColShape colShape, Player player)
        {
            player.SetPlayerColShape(colShape);
        }
        [ServerEvent(Event.PlayerExitColshape)]
        public void OnPlayerExitColshape(ColShape colShape, Player player)
        {
            player.SetPlayerColShape(null);
        }

Когда персонаж войдет в колшейп мы с помощью нашего метода расширения сохраним в персонажа этот колшейп, а когда выйдет - удалим.
Следующим шагом нам надо подписаться на нажатие клавиши.

C#:
[GTANetworkAPI.RemoteEvent("pressKeyE")]
        public void OnPressKeyE(Player player)
        {
            player.GetPlayerColShape()?.Interaction(player);
        }

Когда персонаж нажмет нужную клавишу сработает этот ивент. Внутри происходит проверка стоит ли персонаж в колшейпе, и если стоит то вызовет прописанную
нами функцию которую вы указали при создании колшейпа. Профит.
Теперь, что бы создать колшейп с которым можно взаимодействовать достаточно просто инициализировать новый экземпляр колшейпа, и присвоить ему функцию.

Пример реализации на GitHub

Демонстрация работы:

 
Последнее редактирование модератором:

Рикардо

Специалист
15 Сен 2020
147
68
82
Молодцом! Про код не чего не могу сказать, так как в C# Я не силен, но в целом, то что вклад вносишь это хорошо ну и лайк! ))

P.S: В отличии от "ХайКодеров" рельный вклад внес в ресурс ))
 
  • Like
Реакции: Tony и DaVilka

UchihaMadara

Гуру
high coder
27 Окт 2020
516
228
121
Молодцом! Про код не чего не могу сказать, так как в C# Я не силен, но в целом, то что вклад вносишь это хорошо ну и лайк! ))

P.S: В отличии от "ХайКодеров" рельный вклад внес в ресурс ))
Ты не только в C# не силен, ты во всём не силен.

А про твой вклад всем известно
1640187172280.png
 

IronPython

Специалист
high coder
7 Ноя 2020
169
65
82
А типа так и надо чтобы клас с extension назвался exceptions ?
 

DaVilka

Гуру
16 Сен 2020
682
255
128
Не, это специально так назвал, я так захотел