Всем привет, не нашел подобных статей на этом портале, и решил сделать свою 
Сегодня я постараюсь вам показать как писать клиентскую часть для RAGEMP на C#
Сегодня мы создадим и настроим C# проект для разработки клиентской части, а именно подключим сборку rage-sharp.dll для подсказок и копирования всех *.cs файлов после успешного билда в папку client_packages/cs_packages
Что вам понадобиться, для того чтобы понять этот урок
1- Мозг
2- Прямые руки (но это не обязательно)
3- Ну и желательно не быть Питонистмом
4- Также предполагается что до этого вы прошли два предыдущих урока
Предыдущие Уроки
Создания и настройка проекта где будем хранить все исходники
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
6-После этого добавьте этот код в тот же *.csproj файл (Этот код берёт все *.cs файлы из client и копирует их в папку с клиентскими скриптам которые в итоге будут компилироваться на стороне клиента, если хотите -> могу как-то сделать урок где разберу основные команды msbuild и покажу как писать простые конфигурации)
Создания первого скрипта
1-Рядом с файлом *.csproj создайте файл с любым именем (например: Client.cs)
2-И вставьте туда этот код
3- Теперь откройте терминал -> перейдите в папку src/client -> и запустите dotnet build после чего файл Client.cs должен был появиться в папке client_packages/cs_packages
4- А теперь запустить сервер и подключитесь к нем, если все ОК то чат должен выглядеть примерно ТАК
]
Взаимодействие между Сервером и Клиентом
В этом разделе мы создадим несколько клиентских и серверных событий, а именно ->
2-Откройте файл Client.cs который создали ранее и вставьте туда этот код
Если все ОК, то при спавне на карте должна спавниться машина
Буду надеяться что я вам как-то помог, также желаю вам удачи в жизни и разработке
Если есть какие-то пожелание, рекомендации, или замечания, то пишите их ниже в ответах к данному посту
Также вы можете писать свои отзывы в комментариях под этим уроком
Сегодня я постараюсь вам показать как писать клиентскую часть для RAGEMP на C#
Сегодня мы создадим и настроим C# проект для разработки клиентской части, а именно подключим сборку rage-sharp.dll для подсказок и копирования всех *.cs файлов после успешного билда в папку client_packages/cs_packages
Что вам понадобиться, для того чтобы понять этот урок
1- Мозг
2- Прямые руки (но это не обязательно)
3- Ну и желательно не быть Питонистмом
4- Также предполагается что до этого вы прошли два предыдущих урока
Предыдущие Уроки
Создания и настройка проекта где будем хранить все исходники
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>
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- А теперь запустить сервер и подключитесь к нем, если все ОК то чат должен выглядеть примерно ТАК
]
Взаимодействие между Сервером и Клиентом
В этом разделе мы создадим несколько клиентских и серверных событий, а именно ->
- Для сервера это будет событие, которое будет создавать машину и помещать туда игрока.
- А для клиента это будет событие, которое будет просто выводить сообщение в чат
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 лежат все аргументы переданные с сервера
}
}
}
Если все ОК, то при спавне на карте должна спавниться машина
Буду надеяться что я вам как-то помог, также желаю вам удачи в жизни и разработке
Если есть какие-то пожелание, рекомендации, или замечания, то пишите их ниже в ответах к данному посту
Также вы можете писать свои отзывы в комментариях под этим уроком
Последнее редактирование: