• Из-за обновления 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) последний раз были обновлены:

Урок (С#) Делаем Shared сборку на C#

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


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

IronPython

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

Сегодня я постараюсь вам показать как сделать проект, который будет содержать разные общее типы, классы и тд. Которые после билда клиента будут вбрасываться в cs_packages

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

Предыдущие Уроки
  1. Настройка окружения
  2. Настройка серверной части
  3. Создание и настройка клиентской части сервера для RAGEMP
  4. Использование CEF в RAGEMP
Типа Теория
Зачем вам это нужно ? Предоставим что у вас есть событие для выдачи денег юзеру которое в параметрах принимает много разных параметров плюс имеет очень страшное название, и тут вам захотелось изменить название событие. Если у вас не будет чего-то подобного, то вам нужно будет править название этого всего во всех местах где они используются, а не только в одном. Плюс это убирает дублирование

Практика
1- Внутри папки src создадим папку shared
2- Откроем терминал и перейдем в ранее созданную папку и выполним данную команду -> dotnet new classlib -f netcoreapp2.1
3- Вставим в *.csproj файл этот код в котором мы подключаем клиентскую библиотеку RAGE
XML:
<ItemGroup>
    <Reference Include="rage-sharp">
        <HintPath>../libs/rage-sharp.dll</HintPath>
    </Reference>
</ItemGroup>
5- Далее создадим папку Server, а внутри этой папки создадим файл Server.cs
6- Внутрь этого файла вставим следующий код
C#:
namespace Shared
{
    public static class Server
    {
        public static void CreateVehicle(string model = "Issi5" , int color1 = 1 , int color2 = 1)
        {
            RAGE.Events.CallRemote("Vehicle:Create", model, color1, color2); 
        }
    }
}
7- Теперь возьмём и подключим этот проект к проекту клиента
XML:
<ItemGroup>
    <ProjectReference Include="../shared/shared.csproj" />
</ItemGroup>
8- Настроим копирование файлов всех нужных нам для клиента файлов, в моём случае я буду копировать только файлы из папки Server. Для этого в client.csproj в секцию Target(с именем CopyBuildFiles)/ItemGroup добавим поле
XML:
<AllSharedOutputFiles Include="../shared/**/*.cs" Exclude="../shared/obj/**/*.*;../shared/bin/**/*.*" />
А в Target(с именем CopyBuildFiles) добавим
XML:
<Copy SourceFiles="@(AllSharedOutputFiles)" DestinationFiles="@(AllSharedOutputFiles->'../../client_packages/cs_packages/Shared/%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="false" />
В итоге ваша секция Target должна иметь примерно такой вид
XML:
<Target Name="CopyBuildFiles" AfterTargets="build">
    <ItemGroup>
        <AllOutputFiles Include="./**/*.cs" Exclude="./obj/**/*.*;./bin/**/*.*" />
        <AllSharedOutputFiles Include="../shared/**/*.cs" Exclude="../shared/obj/**/*.*;../shared/bin/**/*.*" />

    </ItemGroup>

    <Copy SourceFiles="@(AllSharedOutputFiles)" DestinationFiles="@(AllSharedOutputFiles->'../../client_packages/cs_packages/Shared/%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="false" />
    <Copy SourceFiles="@(AllOutputFiles)" DestinationFiles="@(AllOutputFiles->'../../client_packages/cs_packages/%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="false" />
</Target>
9- Дальше везде где вы тригерите событие Vehicle:Create, вы можете заменить предыдущий код который выглядел примерно так
C#:
RAGE.Events.CallRemote("Vehicle:Create", "Issi5", 1, 5);
На
C#:
Shared.Server.CreateVehicle("Issi5" , 1 , 5);

10- Ну а теперь зайдите в игру и если все работает так же как и раньше то вы МОЛОДЕЦ

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