• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в 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/ru/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


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

Урок (С#) Создание и настройка клиентской части сервера для RAGEMP

Продолжать серию подробных текстовых мануалов


  • Всего проголосовало
    19

IronPython

Специалист
Автор темы
high coder
7 Ноя 2020
169
64
82
Всем привет, не нашел подобных статей на этом портале, и решил сделать свою :)

Сегодня я постараюсь вам показать как писать клиентскую часть для RAGEMP на C#
Сегодня мы создадим и настроим C# проект для разработки клиентской части, а именно подключим сборку rage-sharp.dll для подсказок и копирования всех *.cs файлов после успешного билда в папку client_packages/cs_packages

Что вам понадобиться, для того чтобы понять этот урок

1- Мозг
2- Прямые руки (но это не обязательно)
3- Ну и желательно не быть Питонистмом
4- Также предполагается что до этого вы прошли два предыдущих урока

Предыдущие Уроки
  1. Настройка окружения
  2. Настройка серверной части

Создания и настройка проекта где будем хранить все исходники
1-В папке с сервером создайте папку src(source) где будут храниться все исходники нашего мода
2-Внутри папки src создайте папку client где будут храниться исходники для клиента
3-Дальше откройте терминал и перейдите в src, и напишете команду "dotnet new classlib -f netcoreapp2.1" где аргумент -f указывает на версию .net которая будет использоваться в этом проекте в нашем случае это .NET Core 2.1
4-Дальше вам надо найти сборку rage-sharp.dll которая лежит где-то в папке dotnet клиента ragemp, в моём случае это "F:\RAGEMP\dotnet\rage-sharp.dll" и скопировать её в папку libs которую надо создать рядом с папкой client
5-Теперь добавьте этот код в файл *.csproj
XML:
<ItemGroup>
    <Reference Include="rage-sharp">
        <HintPath>../libs/rage-sharp.dll</HintPath>
    </Reference>
</ItemGroup>
6-После этого добавьте этот код в тот же *.csproj файл (Этот код берёт все *.cs файлы из client и копирует их в папку с клиентскими скриптам которые в итоге будут компилироваться на стороне клиента, если хотите -> могу как-то сделать урок где разберу основные команды msbuild и покажу как писать простые конфигурации)
XML:
<Target Name="CopyBuildFiles" AfterTargets="build">
    <ItemGroup>
        <AllOutputFiles Include="./**/*.cs" Exclude="./obj/**/*.*;./bin/**/*.*" />
    </ItemGroup>

    <Copy SourceFiles="@(AllOutputFiles)" DestinationFiles="@(AllOutputFiles->'../../client_packages/cs_packages/%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="false" />
</Target>

Создания первого скрипта
1-Рядом с файлом *.csproj создайте файл с любым именем (например: Client.cs)
2-И вставьте туда этот код
C#:
using RAGE;

namespace Client
{
    public class Client : Events.Script //Для того чтобы указать что это скрип надо унаследовать этот класс от абстрактного класса RAGE.Events.Script
    {
        public Client()
        {
            Events.OnPlayerSpawn += OnPlayerSpawn; //Здесь мы добавляем Обработчик события спавна игрока
        }

        public void OnPlayerSpawn(Events.CancelEventArgs cancel) //Этот метод будет обрабатывать сам спавн игрока
        {
            Chat.Output("Player successfully spawned"); //Этот метод выводит сообщение в дефолтный чат
        }
    }
}

3- Теперь откройте терминал -> перейдите в папку src/client -> и запустите dotnet build после чего файл Client.cs должен был появиться в папке client_packages/cs_packages
4- А теперь запустить сервер и подключитесь к нем, если все ОК то чат должен выглядеть примерно ТАК
]


Взаимодействие между Сервером и Клиентом

В этом разделе мы создадим несколько клиентских и серверных событий, а именно ->
  • Для сервера это будет событие, которое будет создавать машину и помещать туда игрока.
  • А для клиента это будет событие, которое будет просто выводить сообщение в чат
1- Откройте файл Server.cs который создали ранее в одном из предыдущих уроков и вставьте туда этот код
C#:
[RemoteEvent("Vehicle:Create")]
public void CreateVehicle(GTANetworkAPI.Player player, string hash, int color1 = 0, int color2 = 0)
{
    VehicleHash vehicleHash = NAPI.Util.VehicleNameToModel($"{hash}");

    var vehicle = NAPI.Vehicle.CreateVehicle(
        vehicleHash,
        player.Position,
        player.Rotation,
        color1,
        color2);

    player.SetIntoVehicle(vehicle , 0);

    player.TriggerEvent("Chat:Push" , $"Successfully spawned {hash} car!"); // Этот метод тригерит событие на клиенте (первый аргумент это имя события)
        }
}

2-Откройте файл Client.cs который создали ранее и вставьте туда этот код
C#:
using RAGE;

namespace Client
{
    public class Client : Events.Script
    {
        public Client()
        {
            Events.Add("Chat:Push" , PushMsgToChat); //Регистрируем событие
            Events.OnPlayerSpawn += OnPlayerSpawn;
        }

        public void OnPlayerSpawn(Events.CancelEventArgs cancel)
        {
            Chat.Output("Player successfully spawned");

            RAGE.Events.CallRemote("Vehicle:Create" , "Issi5" , 1 , 5); // Этот метод тригерит событие на сервере (первый аргумент это имя события)
        }

        public void PushMsgToChat(object[] args)
        {
            Chat.Output($"{args[0]}"); // В массиве args лежат все аргументы переданные с сервера
        }
    }
}

Если все ОК, то при спавне на карте должна спавниться машина

Буду надеяться что я вам как-то помог, также желаю вам удачи в жизни и разработке
Если есть какие-то пожелание, рекомендации, или замечания, то пишите их ниже в ответах к данному посту
Также вы можете писать свои отзывы в комментариях под этим уроком
 
Последнее редактирование:

Harland David Sanders

Куратор портала
Команда форума
Куратор портала
VIP
high coder
media
10 Сен 2020
3,058
2,443
219
Уважение!
 
  • Like
Реакции: IronPython

koltr

Гуру
high coder
14 Сен 2020
154
114
120
Там вроде и Shared можно сделать, и хранить некоторые данные одновременно на двух сайдах. Например это удобно для Remote эвентов
 

IronPython

Специалист
Автор темы
high coder
7 Ноя 2020
169
64
82
Там вроде и Shared можно сделать, и хранить некоторые данные одновременно на двух сайдах. Например это удобно для Remote эвентов
Насколько я понимаю для того чтобы это работало на клиенте надо забросить клиенту в папку дотнет свою дллку чтобы это все в рантайме работало(этот способ я не тестил , просто предположил) или забрасывать общее модели просто cs файлами в cs_packages , но тут прикол в другом если бы клиенту можно было забрасывать сборки а не исходники то это можно было бы реализовать в несколько кликов , но получается что нужно мсбилдом подтягивать трогать файлы которые находятся за пределами папки с проектом

Есть ещё несколько способов это реализовать , нужно будет как-то протестить их все
 

Vitalik70

Начинающий специалист
9 Июл 2021
373
39
69
Очень полезный урок для начинающих. В частности для меня и многих других. Основы програмирования так сказать. Продолжай!!! Для всех новичков в этом деле это очень большая помощ. Ждём с нетерпением продолжения уроков!!!! Лайк и респект а так жа почёт и уважение к тебе за твои труды!!!!!
 
  • Like
Реакции: IronPython

Vitalik70

Начинающий специалист
9 Июл 2021
373
39
69
Как я раньше был не внимательным и не видел первый урок??? Лошара......
От простого к сложному. Однозначно жду продолжения.....
 

Vitalik70

Начинающий специалист
9 Июл 2021
373
39
69
Лошара, да. А еще и гражданин СССР. Вдвойне лошара
Не внимательный. А вот ты мог бы и по другому сказать и пожалеть меня сказав что всё будет хорошо и всему по тихоньку научишся... А так сразу лошара..... Гражданин не тоько ссср но и ещё одной не признанной республики.
 

UchihaMadara

Гуру
high coder
27 Окт 2020
512
225
101
Не внимательный. А вот ты мог бы и по другому сказать и пожалеть меня сказав что всё будет хорошо и всему по тихоньку научишся... А так сразу лошара..... Гражданин не тоько ссср но и ещё одной не признанной республики.
Втройне тогда)
 
  • Haha
Реакции: Inoi