Как сделать лаунчер rust

Обновлено: 07.07.2024


В этом руководстве расскажу как создать свой сервер в расте и как его настроить


2


1


1


1,741 уникальных посетителей
55 добавили в избранное








И так у нас есть два способа создать свой сервер
1. Это арендовать хостинг и не парится
2. Это создать его на своей ПК

Ну в этом руководстве расскажу как сделать сервер на своём ПК

_______________________________________________________
Ну в этом руководстве расскажу как сделать сервер на своём ПК
Для этого нужен пк который будет тянуть сервер.

МИНИМАЛЬНЫЕ ТРЕБОВАНИЯ ПК ДЛЯ СЕРВЕРА

Процессор: Intel Core i7-3770 / AMD FX-9590
Оперативная память: 10 GB ОЗУ
Сеть: Широкополосное подключение к интернету

После того как вы перейдёте по ссылке откроется страница FAQ

НАЖИМАЕМ НА ЭТУ ССЫЛКУ

У вас скачается zip файл - Rust_Server.zip
__________________________________________________
Далее переходим на сайт SteamCMD ТЫК

Нам нужно скачать SteamCMD
Выбираем вашу операционную систему и скачиваем

У вас скачается zip файл - steamcmd.zip

Распаковываем zip файл в папку где будет у вас сервер
Запускаем exe файл

При запуске начнётся скачивание файлов, необходимых для сервера RUST

После завершения загрузки у вас должно быть так

Далее в консоле пишем :
login anonymous и app_update 258550

И ждём пока CMD установит нужные файлы

По завершению установки у вас будет это -

Теперь можно закрыть CMD

После этого заходим в zip файл - Rust_Server.zip, далее папка Server
В папке Server нам нужно вырезать файл Run_DS.bat и вставить в папку которая скачала CMD

steamapps\common\rust_dedicated

Нажимаем правой кнопкой мышки по файлу Rust_DS.bat, нажимаем изменить,удаляем всё что там написано, вставляем вот это -

RustDedicated.exe -batchmode +server.ip 0.0.0.0 +server.port 28015 +server.level "Barren" +server.seed 44 +server.tickrate 10 +server.hostname "Rust server" +server.description "Welcome!" +server.identity "Server1" +server.maxplayers 100 +server.worldsize 3000 +server.saveinterval 600 +rcon.ip 0.0.0.0 +rcon.port 28016 +rcon.password "123456" +rcon.web 1 -logfile "rust.log"

Затем сохраняем и запускаем
Всё сервер готов

После запуска батника сервер начинает загружаться

Когда он загрузится у вас будет это -

Всё сервер готов к нему можно подключится через консоль в расте написав - client.connect

Так теперь мы переходим к настройки сервера
Для начала мы выдадим админку

Мы должны узнать свой steamid64
Для этого переходим на сайт ТЫК [steamid.io]

Вставляем свою стим ссылку сюда

И нажимаем lookup

Нам нужен steamid64

Копируем его и пишем в консоль - ownerid и ваш steamid64

У вас должно получится вот так

Если вы были на сервере когда прописывали эту команду,просто перезайдите и у вас появятся админские права

Админские команды(их нужно прописывать на сервере в консоли f1)
status - кто на сервере

find * список команд

kick «nickname» выкинуть игрока с ником nickname с сервера

ban «nickname@» или «steam_id» бан игрока с ником nickname или по steam_id

banid «steam_id» бан игрока по steam_id

unbanall разбанить всех

save.all сохраняет состояние сервера (мир, инвентари игроков)

teleport.toplayer «nickname1″ «nickname2″ перемещает игрока nickname1 к игроку nickname2

teleport.toplayer «nickname1″ «X» «Y» («Z»?) перемещает игрока nickname1 на координату
XY(Z?)

inv.giveplayer «nickname» «item» «count» даёт игроку nickname предмет item в количестве count

inv.giveall «item» «count» даёт всем игрокам предмет item в количестве count

dmg.godmode true/false режим Бога

crafting.instant true/false включает/отключает мгновенный крафт на сервере

crafting.instant_admins true/false то же самое, но только для админов

crafting.timescale «time« задаёт время time крафта на сервере

airdrop.drop вызывает самолет (дропы)

airdrop.min_players «count» задает количество count игроков, при которых начинает летать
самолет

vehicle.spawn создает машину (не ездит, только скатывается)

server.hostname задает имя серверу

server.pvp true/false включает/выключает режим PvP (игроки против игроков)

server.maxplayers «count» задает максимальное количество count игроков

sleepers.on true/false включает/выключает остающиеся тела игроков после выхода с
сервера

env.timescale «number» задает цикл смены дня и ночи (по умолчанию 0.0066666667)

falldamage.enabled true/false включает/выключает урон от падений

truth.enforce true/false включает автокик за странное поведение на сервере

censor.nudity true/false включает/выключает цензуру

noclip админский полёт

Настройка сервера т.е - названия сервера, максимум игроков, карты
Всё это настраивается в файле Run_DS.bat

+server.ip 0.0.0.0 - это вы задаёте своему серверу ip адрес по которому будут люди подключатся

+server.port 28015 - это вы задаёте своему серверу port(через него тоже люди будут подключатся)

т.е если вы поставите +server.ip 129.21.23.15 а +server.port 28015
то ip адрес вашего сервера будет выглядить вот так - 129.21.23.15:28015

+server.level "Barren" - этим вы задаёте карту серверу есть два типа карт Barren и Procedural map

Barren карта для слабых пк, Procedural map для мощных.

+server.seed 44 - этим вы задаёте разновидность карт

Таким способом на сервер можно добавить любую карту
Вот галерея карт ТЫК [playrust.io]

2700 это - +server.worldsize,а 5 это +server.seed

+server.worldsize 3000 - этим вы задаёте размер карты(Максимум 6000)

+server.hostname "Rust server" - этим вы задаёте как будет называться ваш сервер

+server.description "Welcome!" - этим вы задаёте описание серверу(Если нужно опуститься на строчку ниже нужно поставить \)

+server.maxplayers 100 - этим вы задаёте максимальное количество игроков на сервере

На этом пока что всё!🌛

Со временем добавлю раздел, как сделать сервер модефецированным, и как добавлять туда
плагины

Шаг шестой: rustc-middle

Куда ты завёл нас? Не видно ни зги! Простите, ребята, не варят мозги. Вернее, мозг начинает вариться. Сложность процесса увеличивается настолько, что просто читая коды дальше ходить страшно. Ладно, обратимся к инструкции для разработчиков - смотрим. Видим что после того как у нас появился AST мы можем заняться приведением его в приличный вид. Вернее, в HIR.

Этим как раз и занимается rustc-middle. Вернее, не только этим. Залезаем в исходники и видим что тут у нас есть HIR, MIR и Types.

Что же происходит в реальности? Ну, для начала мы начинаем обработку AST. Этим, кстати занимается ещё один модуль, rust_ast_lowering . Смотрим туда и находим достаточно длинный файл, в котором и происходит преобразование каждого элемента AST в HIR.

Здесь весь синтаксический сахар растворяется в чае и перестаёт быть сахаром. Так моя любимая for node in data превращается в

А вот здесь, как раз, всеми любимый оператор ? первращается в Try::into_result :

С HIR теперь можно работать…

Шаг четвёртый: rustc-parse и rustc-lexer

Далее по тексту вы найдёте простую логику всех этих запросов. "Простая" логика заключается в вызове крейтов, которые её обрабатывают. Например, rustc-parse. Это крейт, который использует rustc-lexer. Лексер читает строки из файлов и преобразовывает их в очень простые токены. Токены передаются парсеру, который превращает их в Span и продолжает работу с кодом. Основной момент этого Span заключается в том, что к каждому элементу в дереве кода будет добавлена информация о том, в каком конкретно месте этот элемент записан в исходном файле. Когда компилятор будет сообщать об ошибке, вы увидите, где именно эта ошибка произошла.

Основная часть парсера запускается через вызов parse_crate_mod в rustc_parse\src\parser\item.rs . А дальше по тексту вы найдёте невероятное количество проверок синтаксиса, который этот парсер делает. Вот, например:

Постскриптум

А почему бинарник такой-то большой? Ну, на этот вопрос можно ответить легко. Залезаем вашим любимым дебаггером в .pdb файл и смотрим на указатели функций, которые тянутся в наш бинарник. Их много. Подсистема работы со строками, макросами и памятью. Плюс система ввода-вывода. Что, считаете что 150 килобайт - слишком много?

Делаем свой сервер Rust: немного о настройке и установке + моды

Делаем свой сервер Rust: немного о настройке и установке + моды

Итак, на сайте есть замечательное Руководство запуска Rust по сети. Но в нем запуску и настройке сервера уделено всего пару строчек.
Постараюсь помочь пользователям, которые хотели бы поиграть на своем локальном сервере Rust с друзьями и с собственными настройками. В этой небольшой статье я постараюсь показать весь процесс: от установки сервера до его настройки, в том числе с помощью модов.

1. Первое, что нам потребуется - это перейти на страницу с руководством запуска Rust по сети и скачать архив, содержащий все необходимые инструменты, и распаковать в любое место.

2. Теперь переходим к установке. Запускаем файл Update-Rust-Server.bat из папки SteamCMD и ждём пока наш сервер скачивается. Серверы будут загружаться в папку RustServer.

Всё, мы установили сервер, переходим к следующим шагам.

3. Теперь мы будем запускать сервер, настраивать его и приглашать друзей. Для того, чтобы подключиться к созданному серверу, выполняем следующие шаги:

4. Ну, и теперь, если у Вас все получилось, и Вам понравилось, можно поиграться с настройками сервера.
К примеру, в последнем обновлении разработчики добавили такую интересную вещь как износ оружия (сразу вспомнилась серия Dead island), а также износ одежды и инвентаря.
Многих это не устроило, и вот есть возможность отключить эту функцию.

Для этого надо:
> Залогиниться на сервере под правами админа. Для этого в игре открываем консоль клавишей F1 и вписываем команду Rcon.login ваш пароль (Ваш пароль задается в файле server.cfg и по умолчанию имеет вид 123456). После ввода должна появиться надпись (в консоли) "logged as admin", которая означает что Вы вошли как админ. Теперь вписываем команды:
- Для отключения износа одежды: conditionloss.armorhealthmult "0.0"
- Для отключения износа оружия/инвентаря: conditionloss.damagemultiplier "0.0"

С помощью различных модов также можно отключить или включить разные вещи. К примеру, отключить распад на сервере или настроить интервал пролета самолётиков. В сети уже есть как доступные, так и не очень доступные моды. Я рекомендую воспользоваться свободно распространяемым модом Magma, из-за его легкости в настройке и большого количества плагинов.

Делаем свой сервер Rust: немного о настройке и установке + моды

Пример отключения распада на сервере с помощью мода Magma

Шак одиннадцатый: прощай, rust!

Полученный оптимизированный MIR можно теперь переделать в LLVM IR. Поехали. rustc-codegen-llvm создаёт LLVM-IR на базе MIR, который мы сгенерировали на предыдущем этапе. Здесь заканчивается rust и начинается llvm. Хотя, мы ещё не закончили с сорцами компилятора.

Тут можно найти пару интересных моментов, например rust-master\compiler\rustc_codegen_llvm\src\asm.rs содержит код для компилирования ассемблера напрямую из rust. Даже не замечал этого. Смотрим в документацию - есть такая поддержка в этом компиляторе!

Копаемся чуть глубже и находим rustc-target в котором видим различные дополнительные классы для работы с определённым ассемблером.

После того как кодогенерация завершена, мы можем передать IR в сам LLVM. rustc_llvm нам в помощь.

Вот, собственно говоря, и всё, ребята! LLVM за пределами нашей видимости. На моей операционной системе Visual Studio Build Tools берут на себя контроль и перегоняют LLVMIR в обычный бинарник.

Процесс компиляции в rust - это вам не мешки ворочать. Надо проверить неимоверное количество разных вещей. Вот что происходит с вашим кодом:

Он парсится из текста в AST.

AST обрабатывается и оптимизируется в HIR

HIR обрабатывается и оптимизируется в MIR.

MIR делает проверки заимствования и оптимизацию и перегоняется в LLVMIR.

LLVMIR компилируется на конечной платформе.

Шак третий: rustc-interface

Ага. Тут мы уже ближе к самому процессу компиляции. Все конфиги подъедены, файлы тоже замеплены. Смотрим на исходники интерфейса. Их хоть и не так-то много, но это наш центральный вокзал, где куча других крейтов собирается воедино.

Так, осматриваемся и находим

Кстати тут же, недалеко, мы можем найти настройку механизма кодогенерации.

Быстренько посмотрим на наши сорцы и увидим что у нас прямо в сорцах есть 3 различных модуля кодогенерации. Что они делают? Превращают MIR в конечный код для системы компиляции. Открываем rustc-codegen-llvm и смотрим в README:

Ок, ну тут всё понятно, мы берём MIR и переделываем его в LLVM IR. После этого LLVM может скомпилировать код в конечный бинарник. Но погодите, помимо LLVM бекенда у нас есть ещё два других! Смотрим туда. rustc-codegen-ssa согласно документации, позволяет генерировать низкоуровневый код, который не будет привязан к определённому бекэнду (например, LLVM) и позволит в дальнейшем использовать другие системы компиляции.

Собственно говоря, прямо там же вы найдёте rustc-codegen-cranelift. То есть MIR в будущем может компилироваться через cranelift, который в идеале ускорит процесс компиляции. Ну это в будущем, пока что проект в процессе тестирования и работает не лучше, чем Газель без мотора.

Открываем модуль и смотрим, что происходит внутри:

Ага, вот тут мы берём быка за рога и начинаем разбирать исходный код на части. Далее, создаём и проверяем AST

И вот тут у нас начинается полное мясо. Прикол вот в чём, обычно компиляторы делают достаточно простую вещь - берёшь сорцы, проходишься по ним несколько раз, парсишь синтаксис, находишь ошибки, разбираешь на куски макросы, всё хорошо. rust в стародавние времена начинал именно так же. Но, со временем, была предложена новая модель компиляции. Запросы. Вместо того чтобы делать всю работу несколько раз подряд, давайте просто превратим проходы в запросы. Результат запроса можно сохранить в кеш. Если пользователь (программист) не менял ничего в определённом файле, то и компилировать его не надо. Если мы видим что делать это не надо, мы просто возвращаем данные из кеша запроса.

Даже если вы и поменяли что-то в каком-либо файле, то благодаря системе запросов вы сможете избежать ненужной перекомпиляции. Что если вы изменили только одну линию в комментариях к файлу? Пересобирать такой не придётся.

Давайте посмотрим на запросы, которые создаёт компилятор:

Парсинг, создание крейта, сбор HIR - всё это делается через запросы. Один момент про который полезно знать, это то что ещё не всё переписано на запросах.

В итоге у нас на выходе получается большая и толстая структура:

И как раз её можно дёргать для выполнения необходимых запросов.

Шаг восьмой: rustc_mir и rustc_mir_build

Теперь наш HIR можно преобразовать в MIR. Берём ранее созданный TyCtxt и начинаем преобразовывать его в

И так далее по всем нодам. MIR это намного более генерализированная версия HIR. Она очень близка к тому что требует от нас LLVM для компиляции. В результате этой генерализации мы можем намного более эффективно работать над оптимизацией написанного вами кода и заниматься проверками заимствований и оптимизацией.

Словарь

Далее по тексту я буду разбрасываться следующими терминами без удержи. Если вы знаете что это всё значит - хорошо. Если нет, убедитесь что подтянули свои знания, перед тем как заныривать.

LLVM - система компиляции которая состоит из компилятора и набора инструментов, позволяющая создавать фронт-энд для любого языка и компилировать его на множество различных платформ.

AST - (abstract syntax tree) древовидная репрезентация семантической структуры исходного кода. Каждый узел обычно показывает конструкцию, встречающуюся в коде.

IR (intermediate representation) - Структура данных, обычно используемая в кишках компилятора или виртуальной машины, для представления исходного кода программы. Такую структуру обычно оптимизируют и перегоняют в конечный код.

HIR (High Level IR) - IR высокого уровня. Это основная репрезентация кода, используемая в rust. Фактически это представление AST, которым компилятору удобно пользоваться.

MIR (Mid Level IR) - Это репрезентация HIR, которая намного ближе к LLVMIR.

LLVMIR (Language Independent IR) - фактически это высокоуровневый ассемблер, который не привязан к определённому языку или системе. Такой код удобно оптимизировать и после он передаётся компилятору.

Крейт, crate - Это то, что будет скомпилировано либо в библиотеку или бинарник. На выходе будет одна библиотека или бинарник, вне зависимости от того, сколько файлов входят в крейт.

ICE (Internal compiler error), ошибка компилятора.

Дальнейший текст подразумевает, что вы умеете программировать. Можно и не на rust.

Погружаемся в логово ржавчины. Как работает компилятор rust


В моей предыдущей статье о rust я попытался рассказать об истории языка, и показать откуда он пришёл. В статье было сделано множество упрощений. Просто нереальное множество. Народу не понравилось. Но в опросе, в конце статьи вы сказали, что надо бы показать кишки компилятора. Ну что же, под катом вы найдёте разбор исходных кодов компилятора rust. Мы проследим путь программы, начиная из исходного файла, прямиком к бинарнику.

Шаг пятый: rustc-expand

В результате работы парсера мы получаем наш самый великий и могучий AST.

Всё это создаётся огромным макросом astfragments! в \compiler\rustcexpand\src\expand.rs

AST используется для дальнейшей генерации кода и приведения его в нужный вид. Про это можно писать отдельную книгу. Но мы пока удовольствуемся там, что AST можно разобрать до HIR.

Начало

Поехали. Мы будем лезть нашими ручками в сам компилятор и смотреть на его исходники. Для начала нам понадобятся кое-какие инструменты. Ставим чистую виртуальную машину с Windows 10. Идём в интернеты и льём следующее:

Сорцы компилятора. Достаются с github. Можно лить просто zip, ибо обратно коммитить мы ничего не будем.

Установщик компилятора. Любая свежая стабильная версия подойдёт.

Не будем мучиться, давайте, заодно, установим nightly компилятор.
rustup toolchain install nightly --allow-downgrade --profile minimal --component clippy rustup default nightly

Guide to Rustc Development. Инструкция по разработке компилятора. 460 страниц. Не хило. Сохраняем pdf.

Ну и хорошо. Этого, для начала достаточно. Отключаемся от проводного интернета, хватаем ноутбук и идём на веранду, сидеть и погружаться. Начинаем погружаться, понимаем что будет глупо говорить о компиляторе, если мы не скомпилируем хоть что-то. Ок, так и сделаем.

Ок, это было просто. Но мы не будем использовать cargo для самой компиляции. Используем компилятор напрямую. Но я же на надо cargo издеваюсь, так ведь?

Отступление по теме

Как не надо устанавливать rust

Как не надо устанавливать rust

Чего? Так, сам по себе компилятор всё собрал, но ругается на отсутствие линкера. От жеж, зараза. То есть, линкер ему нужен внешний. Ругаемся на компилятор, встаём с удобного кресла и идём обратно, подключаться к проводному интернету, потому что палить 5 гигов установщика Visual Studio Build Tools не хочется на хотспоте.

Билдим всё ещё раз и смотрим.

Ширина и жирина файлов.

Ширина и жирина файлов.

Ах, ты, ржавая банка! Какого чёрта?? Я уже как две недели рассказываю всем обитателям Хабра о том, какой ты прекрасный компилятор, и как хорошо ты собираешь минимальные бинарники, а ты. 150 килобайт исполняемого кода из-за одной только линии текста на экране?

Пытаемся скомпилировать с -C opt-level=3 и получаем то же самое. Что случилось с бинарником? Сейчас на этот вопрос отвечать не будем. Мотаем на Ус и едем дальше.

Копирайт - сдесь же.

Копирайт - сдесь же.

Ус недоволен. На него и так уже много чего намотано, он не понимает, почему ему надо разбираться с исходниками раста теперь.

Ладно, что мы знаем? Компилятор не работает без внешнего линкера и исходник для вывода одной строки текста раздувается до 150 килобайт. Ну, по крайней мере мы это можем скомпилировать. Давайте пока распакуем исходники компилятора и начнём рыться. (Собирать компилятор я не собираюсь. Если вам очень хочется - это можно сделать, но процесс это долгий и утомительный.)

Шаг девятый: Проверка заимствования

Самая "страшная" функция rust это всем известный borrow cheker. Сам он живёт в

В rust-master\compiler\rustc_mir\src\borrow_check\mod.rs . Да, сам модуль такой же огромный и страшный, как и borrow checker. А вот тут, например, можно найти всю логику проверки заимствования при перемещении переменных rust-master\compiler\rustc_mir\src\borrow_check\diagnostics\move_errors.rs

Шаг второй: rustc-driver

Ладно, всё выглядит слишком уж просто. Погружаемся дальше. rustc тянет за собой rustc-driver. Ныряем туда.

Тут мы найдём небольшой readme, который расскажет нам о том, что компилятора в самом драйвере мы не найдём. Эта программа собирает конфигурацию из аргументов и запускает сам процесс компиляции из других крейтов. После изучения исходников находим функцию для запуска процесса компиляции.

Да, в этом крейте файлов не так-то много, но что бы тут не творилось, на самом деле всё сводится к вызову методов в крейте под названием interface. Вышеприведённый код это и показывает. interface::run_compiler и поехали.

Что же произошло в rustc-driver? Мы собрали все конфиги. Подгрузили все файлы и нашли их местоположение в файловой системе. Создали замыкание, которое следит за процессом компиляции и запускает линкер после успешной компиляции. Запустили линтеры (если такие имелись) и приготовили сам компилятор к запуску. Давайте запускать.

Пробуем ручками

Ну что же, напоследок осталось написать простенькую программку, типа этого:

И начать её компилировать, только показывая все внутренности. Для начала есть замечательная опция компилятора, которая работает на любой версии:

Значит, запуская компиляцию следующим образом:

Мы получаем на выходе мириады различных форматов, включая сгенерированный ассемблеровский код, байткод и IR для LLVM, и даже челвоеко-читаемый MIR.

А если у вас есть nightly компилятор, то вы можете запустить

И полюбоваться вашим HIR, в то время как

Даст вам возможность посмотреть на то, как выглядит AST.

Управляем сервером Rust с помощью модов, учимся делать собственные плагины

Управляем сервером Rust с помощью модов, учимся делать собственные плагины

Итак, чуть раннее мы сделали свой сервер Rust и поиграли на нем с друзьями. А теперь мы пойдем чуть дальше и займемся настройкой сервера уже с помощью модов и плагинов. Для этого мы будем использовать Magma.

Хочу сразу определиться, почему Magma. Я выбираю его, потому что остальные моды не так доступны и не обладают такой легкостью настройки. Например, мод Oxide очень трудно найти, да и к пиратским серверам и хостингам он не очень дружелюбен, а также трудно настраивается, если вы не знакомы со всеми нюансами. К тому же Magma свободно распространяем, постоянно обновляется и имеет большое количество плагинов. Ставится на неофициальную версию на ура, а редактировать настройки может даже новичок. Итак, довольно прелюдий, приступаем!

1. Устанавливаем сам мод Magma
Скачиваем архив: magma-v1.1.3.rar [1.15 Mb] (cкачиваний: 2855)
Распаковываем его и получаем две папки.

Управляем сервером Rust с помощью модов, учимся делать собственные плагины

Данные папки мы перемещаем в корневую папку с установленным сервером. Таким образом, после всех манипуляций мы должны получить:

Управляем сервером Rust с помощью модов, учимся делать собственные плагины

Из папки rust_server_DataManaged копируем 4 файла в одноименную папку

Управляем сервером Rust с помощью модов, учимся делать собственные плагины

Всё, сам мод установлен и мы можем приступить к его первоначальной настройке.

2. Управление и первоначальная настройка
Управление происходит посредством редактирования файла Rust++.cfg, который находится в папке save/Magma/Rust++ (не удивляйтесь названию, Магму делают создатели Rust++). Открываем файл блокнотом и получаем доступ к редактированию. Все редактирование происходит в основном с помощью изменения разрешений параметров (false и true), а также изменению количества. Давайте немного детально остановимся на некоторых параметрах:

Управляем сервером Rust с помощью модов, учимся делать собственные плагины

Управляем сервером Rust с помощью модов, учимся делать собственные плагины

Управляем сервером Rust с помощью модов, учимся делать собственные плагины

Управляем сервером Rust с помощью модов, учимся делать собственные плагины

Как видите, параметров очень много, Вы сами сможете настроить очень многое.

3. Дополнительные параметры и плагин Airdrops & Co
А теперь давайте зайдем еще дальше и настроим больше параметров с помощью замечательного плагина Airdrops & Co. 1.5. С его помощью мы настроим точки спавна, домов и другие инструменты.

Итак, скачиваем архив: airdropsco-1.5.rar [16.14 Kb] (cкачиваний: 668)
Извлекаем содержимое в папку save/magma . На этом установка завершена.

Теперь в игре мы можем сделать следующее:

>Настроить телепорт в свой дом.
Для этого пишем в игровой чат


Я, например, сделал так: находясь в доме вписал команду /sethome porosenkadom. Все, телепорт установлен на ваш дом. Теперь, если Вы заблудились, достаточно ввести команду

и Вы окажитесь в дома.

>Остальные команды приведу для краткости без пояснений (и так все понятно).

/time day - Переключение на дневное время.
/time night - Переключение на ночное время.
/time set [значение] - Произвольная установка времени. Значение - часы, от 0 до 23.
/time say - Вывести текущее время в чат.

/summon help - Посмотреть список ID объектов и зверей.
/summon [название] [ID] [количество] - Заспавнить предмет или зверя.

/home название дома - Телепортироваться домой.
/sethome название дома - Установить точку телепорта в дом.
/delhome название дома - Удалить точку телепорта в дом.
/delhome all - Удалить все точки телепорта домой.

Точки спавна в этом плагине не общие. У каждого игрока будет своя точка спавна. Точки спавна отличаются от домов тем, что вы там будете появляться после смерти. Так что просто установите свою точку спавна в одном из ваших домов.
/spawn - Телепорт на точку спавна.
/setspawn - Установить точку спавна.
/delspawn - Удалить точку спавна.

Плагин легко настраивается с помощью конфигурационного файла. Вы сможете выключить один из модулей данного плагина. К примеру, если вам не нужна система кланов, то вы сможете отключить её изменив всего одну строку в конфиге.
Конфиг файл находится в папке save/Magma/AirdropsCo . Открываем файл AirdropsCo.cfg и редактируем.

Настраиваем время пролета,количество мешков и дистанцию до игрока эйрдропа

Управляем сервером Rust с помощью модов, учимся делать собственные плагины

Как видите, настроить можно очень многое, одним лишь редактированием cfg файлов обычным блокнотом.

4. Свои плагины
Ну, а если Вы захотите пойти еще дальше и попробовать создавать сами плагины, то сейчас мы разберем небольшой урок.

Переходим к написанию кода .
Открываем .js и начинаем писать:

Эта часть кода будет выводить в чат приветствие.

Внимание! Приветствие выводится каждому игроку зашедшему на сервер отдельно.
То есть если на сервере уже есть 10 человек, они это не увидят при входе 11 игрока.

Уйдем чуть дальше и расширим это, сделав нормальное не статичное приветствие.
Будем выводить это: Привет, *ник-игрока*.
Пишем


Player.Name отвечает за вывод ника игрока.
И не забываем, что после текста "Привет, " нужен пробел.
Иначе будет вот так: "Привет,Порось".
Вы также могли заметить, что после каждой строки стоит ";".
Это закрывает строку. Ставят только после внутренних строк (на примере видно).
Теперь закрываем нашу функцию (>)
Итог:

Сохраняем наш файл .js (кодировка utf-8).

Запускаем сервер и смотрим в игре что же происходит.
Это простейший пример создания плагина, который у меня получилось сделать с первого раза, не вникая во все тонкости. Для создания более сложных плагинов воспользуйтесь wiki, которая есть на форуме Magma.
(используйте онлайн переводчик промт, так как гугл транслит отказался у меня переводить технический сленг).

Всё что есть в этой статье, я почерпнул из собственного опыта, а также с помощью ребят с других сайтов и форумов, которые мне помогали разобраться во всем, за что им огромное Спасибо.

На этом всё, Надеюсь данная статься будет полезна. С Вами был Порось

Шаг первый: rustc

Открываем сорцы и наслаждаемся. Всё выглядит очень прилично и чисто. Тут, понятное дело, можно учиться тому как правильно разделять свой проект на куски и как правильно управлять кодом на rust. Собственно говоря, сразу понятно куда идти. Забираемся в compiler/rustc/src/main.rs и смотрим.

Всё только начинается. Держитесь.

Всё только начинается. Держитесь.

Хм. То есть точка входа в программу просто тянет jemalloc вызовы и запускает ещё две функции. Ну вот, всё. Теперь понятно как работает компилятор rust. Делов-то! Кстати, jemalloc это специальный менеджер памяти, изначально разработанный для FreeBSD в 2005 году. Основной упор был сделан на то, чтобы избежать фрагментации памяти при работе с этим аллокатором. В оригинальной версии он просто заменяет malloc. В 2007 году Firefox начал использовать этот менеджер для снижения расхода памяти, а ещё через пару лет он попал в Facebook.

Шаг седьмой: rustc_ty

И .\rust-master\compiler\rustc_middle\src\ty\mod.rs . Одна из самых больших частей компилятора занимается проверками системы типов после того, как у нас есть HIR. Какой тип будет у let mut a = 5; ? Вот на этот вопрос и ответит наша система работы с типами. Две основных структуры здесь:

Последняя тянется через весь процесс компиляции.

Файл просто огромный. Нам надо вычислить типы каждой переменной, замыкания и трейта. Сам модуль занимает более 3000 строк, не считая остальные файлы в директории.

Кстати, смотрим в rust-master\compiler\rustc_typeck\src\check\expr.rs

Хмм.. Если мы натыкаемся на брейк, после которого есть только один лейбл - rust то нужно запустить функцию fatally_break_rust .

Компилируем и запускаем:

Пасхалки они выглядят именно вот так.

Так, вычислили типы и теперь можем проверить что никто не пытается запихнуть строку в Int. Хорошо. Можно идти дальше.

Напоследок

Понятно? Ну и хорошо.

Шаг десятый: Оптимизации

Про систему оптимизаций в rust можно писать отдельную книгу. Всё аккуратно сложено в rust-master\compiler\rustc_mir\src\transform . LLVM сам по себе не сможет оптимизировать некоторые высокоуровневые примитивы, о которых знает только rust. И вот тут мы как раз и занимаемся оптимизацией этих примитивов.

Читайте также: