• Из-за обновления 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

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


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

IronPython

Специалист
Автор темы
high coder
7 Ноя 2020
169
64
82
Всем привет, возможно подобные статьи уже где-то мелькали здесь.

Сегодня я постараюсь вам показать как создать свой первый ресурс для сервера RAGEMP на языке C#
Сегодня мы создадим и настроим свой сервер и первый ресурс, также создадим команду(veh -> vehicle) для создания транспорта

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

Настройка и создания сервера
1 - Для начала вам нужно перейти в папку где у вас установлен RAGEMP, найти там папку server-files
2 - Скопировать все её содержимое в любое удобное для вам место на вашем ПК
3 - И запустить файл
ragemp-server.exe, после этого у вас в папке сервера появиться куча других файлов и папок
4 - Теперь откройте файл conf.json, и в значении ключа
"
csharp" вместо "disabled" напишите "enabled"
JSON:
{
    "maxplayers" : 100,
    "name" : "RAGE:MP Unofficial server",
    "gamemode" : "freeroam",
    "stream-distance" : 500.0,
    "announce" : false,
    "csharp" : "enabled",
    "port": 22005
}

Создание ресурса
1 - В папке dotnet создайте папку resources
2 - Дальше в папке resources создайте папку с названием вашего ресурса -> например: "Server"
3 - Перейдите в папку которую вы создали ранее и создайте там файл "meta.xml"
4 - Дальше откройте терминал и перейдите в директорию где у вас лежит meta.xml, и напишете команду "dotnet new classlib"
5 - После этого у вас сгенерируется шаблон проекта который представляет "библиотеку классов dotnet"
6 - Потом откройте файл *.csproj, и вставьте туда этот текст
XML:
<ItemGroup>
  <Reference Include="Bootstrapper">
    <!-- путь к файлу Bootstrapper.dll который находить по пути ./dotnet/runtime/ -->
    <HintPath>.\.\runtime\Bootstrapper.dll</HintPath>
  </Reference>
</ItemGroup>

7 - Дальше вам нужно собрать проект командой "dotnet build --configuration Release"
8 - Потом в файл meta.xml вставьте данный текст

XML:
<meta>
    <!--Информация про ресурс-->
    <info name="Server" description="Server description" />

    <!--Путь к .dll файлу, который называется так же как и ваша папка-->
    <script src="./bin/Release/netcoreapp3.1/Server.dll" />
</meta>
8.1 - В файл settings.xml нужно вставить данную строку, где в src должно быть указанно имя вашего ресурса, после чего файл settings.xml должен выглядеть примерно так

XML:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!--src - имя вашего ресурса -->
  <resource src="Server" />
  <acl_enabled>true</acl_enabled>
  <log_console>true</log_console>
  <log_chat>true</log_chat>
</config>

9 - Сохраните все файлы и повторите 7 пункт, и запустите сервер, после чего у вас должен быть примерно такой вывод
Screenshot_1.png

10 - Если у вас работает, значит пора приступить к написаю первого вашего скрипта
11 - Вставьте этот код ваш главный .cs файл -> описание того что там происходит, написано в комментариях

C#:
using System.Reflection;
using GTANetworkAPI;

namespace Server
{
    public class Server : Script // Наследуется от класса Script , для того чтобы RAGE MP мог распознать наш класс как сприпт
    {
        [ServerEvent(Event.ResourceStart)]//Атрибут, указывающий на то, что метод, который будет находиться ниже, будет играть роль обработчика для события ResourceStart
        public void ResourceStarEventHandler()
        {
            NAPI.Util.ConsoleOutput($"Starting SERVER Resource");//ConsoleOutput - Вставляет любой текст в консоль сервера, эквивалентен методу WriteLine
        }

        [Command("veh")]// Атрибут, указывающий на то, что метод, который будет находиться ниже, будет играть роль обработчика для команды veh
        public void CreateVehicleCommand(Player player , VehicleHash vehicleHash , int color1 , int color2) // Любой обработчик команды на вход автоматически получает игрока, который ввёл эту команду
                                                                                                            // Все что идёт после Player player, это уже параметры которые может ввести игрок , их может быть неограниченное количество
                                                                                                            // /veh radi 2 1
        {
            NAPI.Vehicle.CreateVehicle(vehicleHash, player.Position , player.Rotation , color1 , color2); // Этот метод создаёт какой-либо транспорт на сервер , на место координат мы передаём позицию игрока
                                                                                                                // На место ротации передаём ротацию игрока
                                                                                                                // хеш транспортного средства у нас берется из аргументов
                                                                                                                // цвет транспортного средства берется из аргументов
        }
   }
}

12 - В итоге у вас при ведении в чат подобного текста "/veh radi 1 2" должна создаться машина

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

Benitez

Участник портала
7 Янв 2021
2
2
12
Честно сказать мануал интересный, но как в спойлере к пункту 9 не появилось надписи, что ресурс загружен!.
Запутался в пунктах 1-3 с папками:
1 - В папке dotnet создайте папку resources
2 - Дальше в папке resources создайте папку с названием вашего ресурса -> например: "Server"
3 - Перейдите в папку которую вы создали ранее и создайте там файл "meta.xml"

"3 - Перейдите в папку которую вы создали ранее" - Я создал 2 папки "resources" и "Server", конкретней можно указать в какой папке создать meta.xml? - Это мой вопрос!

P.S. Знаю, вопрос глупый. Так как я питонист с кривыми руками и мозг остался за дверью, когда начал изучать python)

Вот что выдает, после 7 пунктов:
1610102880290.png
 
Последнее редактирование:
  • Like
Реакции: Etader и IronPython

IronPython

Специалист
Автор темы
high coder
7 Ноя 2020
169
64
82
Честно сказать мануал интересный, но как в спойлере к пункту 9 не появилось надписи, что ресурс загружен!.
Запутался в пунктах 1-3 с папками:
1 - В папке dotnet создайте папку resources
2 - Дальше в папке resources создайте папку с названием вашего ресурса -> например: "Server"
3 - Перейдите в папку которую вы создали ранее и создайте там файл "meta.xml"

"3 - Перейдите в папку которую вы создали ранее" - Я создал 2 папки "resources" и "Server", конкретней можно указать в какой папке создать meta.xml? - Это мой вопрос!

P.S. Знаю, вопрос глупый. Так как я питонист с кривыми руками и мозг остался за дверью, когда начал изучать python)

Вот что выдает, после 7 пунктов:
Посмотреть вложение 832
Спасибо, это мой завтык, вам еще в файл settings.xml, который лежит в папке dotnet нужно вставить данную строчку "<resource src="Server" />", где в src должно быть указанно имя вашего ресурса
 

Benitez

Участник портала
7 Янв 2021
2
2
12
Спасибо, это мой завтык, вам еще в файл settings.xml, который лежит в папке dotnet нужно вставить данную строчку "<resource src="Server" />", где в src должно быть указанно имя вашего ресурса
Вот, теперь заработало. Но есть еще проблема, в коде с командой создать машину, при компиляции жалуется на Player в строке.

Код:
public void CreateVehicleCommand(Player player , VehicleHash vehicleHash , int color1 , int color2)

Что не находит такой переменной Player, как быть? Если все заработает, мануал у Вас на 5+ будет, а пока что просто 5)
 

IronPython

Специалист
Автор темы
high coder
7 Ноя 2020
169
64
82
Вот, теперь заработало. Но есть еще проблема, в коде с командой создать машину, при компиляции жалуется на Player в строке.

Код:
public void CreateVehicleCommand(Player player , VehicleHash vehicleHash , int color1 , int color2)

Что не находит такой переменной Player, как быть? Если все заработает, мануал у Вас на 5+ будет, а пока что просто 5)
Честно даже не знаю почему у вас компилятор жалеться на то что нет такой переменой, возможно вы как-то не так подключили Bootstrapper.dll, хотя возможно так какая-то другая проблема

У меня вот все нормально собирается
Screenshot_1.png
 
Последнее редактирование:

Pandem

Участник портала
30 Дек 2020
17
4
15
Из всего изложенного осталось непонятным одно, откуда взялось "radi"? В коде его нет, поэтому любопытно. Благодарю за туториал.
 

IronPython

Специалист
Автор темы
high coder
7 Ноя 2020
169
64
82
Из всего изложенного осталось непонятным одно, откуда взялось "radi"? В коде его нет, поэтому любопытно. Благодарю за туториал.
Radi - это модель машинки для спавна (это моя любимая машина в гта5), вот список всех моделей машин ТУТ
 
Последнее редактирование:

yungstep

Участник портала
11 Янв 2021
14
1
5
Radi - это модель машинки для спавна (это моя любимая машина в гта5), вот список всех моделей машин ТУТ
Как изменить версию dotnet, у меня в visual studio по умолчанию стоит версия 5.0. Как поставить netcoreapp3.1?
 

IronPython

Специалист
Автор темы
high coder
7 Ноя 2020
169
64
82

yungstep

Участник портала
11 Янв 2021
14
1
5
В ".csproj" есть секция TargetFramework
<TargetFramework>netcoreapp3.1</TargetFramework>
Переформулирую вопрос, когда прописываешь "dotnet new classlib ", по умолчанию создается проект на основе "dotnet 5.0". После того как меняешь " <TargetFramework>netcoreapp3.1</TargetFramework>" в ".csproj", то исполняемая команда в терминале "dotnet new classlib" уже не исполняется.
 

IronPython

Специалист
Автор темы
high coder
7 Ноя 2020
169
64
82
Переформулирую вопрос, когда прописываешь "dotnet new classlib ", по умолчанию создается проект на основе "dotnet 5.0". После того как меняешь <TargetFramework>netcoreapp3.1</TargetFramework>" в ".csproj", то исполняемая команда в терминале "dotnet new classlib" уже не исполняется.
.csproj нужен для компиляции сборки, для сборки проекта нужно писать "dotnet build"
 
  • Like
Реакции: Winsley

vladimkrug87

Участник портала
8 Окт 2020
5
0
11
Чет бредовая инструкция... где-то увидел, тут выложил и сам видимо не понимает что как работает..
Особенно понравился 6й пункт:
6 - Потом откройте файл *.csproj, и вставьте туда этот текст


XML:

<ItemGroup>
<Reference Include="Bootstrapper">
<!-- путь к файлу Bootstrapper.dll который находить по пути ./dotnet/runtime/ -->
<HintPath>.\.\runtime\Bootstrapper.dll</HintPath>
</Reference>
</ItemGroup>

Вот результат следующей команды для компиляции:

C:\RAGEMP\server-files\dotnet\resources\Server\Server.csproj(1,1): error MSB4068: элемент <ItemGroup> не опознан или не поддерживается в этом контексте.

Ошибка сборки.

C:\RAGEMP\server-files\dotnet\resources\Server\Server.csproj(1,1): error MSB4068: элемент <ItemGroup> не опознан или не поддерживается в этом контексте.
Предупреждений: 0
Ошибок: 1
 

IronPython

Специалист
Автор темы
high coder
7 Ноя 2020
169
64
82
Чет бредовая инструкция... где-то увидел, тут выложил и сам видимо не понимает что как работает..
Особенно понравился 6й пункт:
6 - Потом откройте файл *.csproj, и вставьте туда этот текст


XML:

<ItemGroup>
<Reference Include="Bootstrapper">
<!-- путь к файлу Bootstrapper.dll который находить по пути ./dotnet/runtime/ -->
<HintPath>.\.\runtime\Bootstrapper.dll</HintPath>
</Reference>
</ItemGroup>

Вот результат следующей команды для компиляции:

C:\RAGEMP\server-files\dotnet\resources\Server\Server.csproj(1,1): error MSB4068: элемент <ItemGroup> не опознан или не поддерживается в этом контексте.

Ошибка сборки.

C:\RAGEMP\server-files\dotnet\resources\Server\Server.csproj(1,1): error MSB4068: элемент <ItemGroup> не опознан или не поддерживается в этом контексте.
Предупреждений: 0
Ошибок: 1
А почему же у других работает ? И хотелось бы узнать почему вы думаете что я эту инструкцию откуда-то скопировал :)
 

IronPython

Специалист
Автор темы
high coder
7 Ноя 2020
169
64
82
Чет бредовая инструкция... где-то увидел, тут выложил и сам видимо не понимает что как работает..
Особенно понравился 6й пункт:
6 - Потом откройте файл *.csproj, и вставьте туда этот текст


XML:

<ItemGroup>
<Reference Include="Bootstrapper">
<!-- путь к файлу Bootstrapper.dll который находить по пути ./dotnet/runtime/ -->
<HintPath>.\.\runtime\Bootstrapper.dll</HintPath>
</Reference>
</ItemGroup>

Вот результат следующей команды для компиляции:

C:\RAGEMP\server-files\dotnet\resources\Server\Server.csproj(1,1): error MSB4068: элемент <ItemGroup> не опознан или не поддерживается в этом контексте.

Ошибка сборки.

C:\RAGEMP\server-files\dotnet\resources\Server\Server.csproj(1,1): error MSB4068: элемент <ItemGroup> не опознан или не поддерживается в этом контексте.
Предупреждений: 0
Ошибок: 1
И вообще инструкция была написана для тех кто знаком с платформой dotnet , и знает что такое MSBuild
 

IronPython

Специалист
Автор темы
high coder
7 Ноя 2020
169
64
82
Чет бредовая инструкция... где-то увидел, тут выложил и сам видимо не понимает что как работает..
Особенно понравился 6й пункт:
6 - Потом откройте файл *.csproj, и вставьте туда этот текст


XML:

<ItemGroup>
<Reference Include="Bootstrapper">
<!-- путь к файлу Bootstrapper.dll который находить по пути ./dotnet/runtime/ -->
<HintPath>.\.\runtime\Bootstrapper.dll</HintPath>
</Reference>
</ItemGroup>

Вот результат следующей команды для компиляции:

C:\RAGEMP\server-files\dotnet\resources\Server\Server.csproj(1,1): error MSB4068: элемент <ItemGroup> не опознан или не поддерживается в этом контексте.

Ошибка сборки.

C:\RAGEMP\server-files\dotnet\resources\Server\Server.csproj(1,1): error MSB4068: элемент <ItemGroup> не опознан или не поддерживается в этом контексте.
Предупреждений: 0
Ошибок: 1
И поверьте в программировании не все так просто как вам кажется , и если вы не можете решить элементарную проблему msb , то вам лучше туда не лезть
 

vladimkrug87

Участник портала
8 Окт 2020
5
0
11
И поверьте в программировании не все так просто как вам кажется , и если вы не можете решить элементарную проблему msb , то вам лучше туда не лезть
Ну вот с шарпом я дружу, а вот по вашей инструкции ниче не получилось сделать, сделал все по-своему все загрузилось отлично, но RAGE какая-то вообше галимая платформа, то вылетает постоянно, то даже не подключается на localhost, грузится , переподключается, в консоли даже логов нету о подключении... Как вообще можно было выпускать в свет галимый RAGE....