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

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


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

IronPython

Участник портала
Автор темы
38
6
17
Всем привет, возможно подобные статьи уже где-то мелькали здесь.

Сегодня я постараюсь вам показать как создать свой первый ресурс для сервера 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" должна создаться машина

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

Benitez

Участник портала
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

Участник портала
Автор темы
38
6
17
Честно сказать мануал интересный, но как в спойлере к пункту 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

Участник портала
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

Участник портала
Автор темы
38
6
17
Вот, теперь заработало. Но есть еще проблема, в коде с командой создать машину, при компиляции жалуется на Player в строке.

Код:
public void CreateVehicleCommand(Player player , VehicleHash vehicleHash , int color1 , int color2)
Что не находит такой переменной Player, как быть? Если все заработает, мануал у Вас на 5+ будет, а пока что просто 5)
Честно даже не знаю почему у вас компилятор жалеться на то что нет такой переменой, возможно вы как-то не так подключили Bootstrapper.dll, хотя возможно так какая-то другая проблема

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

Pandem

Участник портала
6
1
5
Из всего изложенного осталось непонятным одно, откуда взялось "radi"? В коде его нет, поэтому любопытно. Благодарю за туториал.
 

IronPython

Участник портала
Автор темы
38
6
17
Из всего изложенного осталось непонятным одно, откуда взялось "radi"? В коде его нет, поэтому любопытно. Благодарю за туториал.
Radi - это модель машинки для спавна (это моя любимая машина в гта5), вот список всех моделей машин ТУТ
 
Последнее редактирование:

yungstep

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

IronPython

Участник портала
Автор темы
38
6
17
Переформулирую вопрос, когда прописываешь "dotnet new classlib ", по умолчанию создается проект на основе "dotnet 5.0". После того как меняешь <TargetFramework>netcoreapp3.1</TargetFramework>" в ".csproj", то исполняемая команда в терминале "dotnet new classlib" уже не исполняется.
.csproj нужен для компиляции сборки, для сборки проекта нужно писать "dotnet build"
 
  • Like
Реакции: Winsley