Merge branch 'main' into fix/fedora-build-instructions

This commit is contained in:
Protogen187
2025-10-23 20:41:23 +02:00
committed by GitHub
22 changed files with 2749 additions and 2 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

@@ -0,0 +1,50 @@
---
hide:
- navigation
---
# Willkommen im BeamMP Gemeinschafts-Bereich!
![BeamMP mehrfarbig-weiß](../../assets/content/BeamMP-Multi-WhtLtr-crop.png#only-dark){width="450"} ![BeamMP mehrfarbig-schwarz](../../assets/content/BeamMP-Multi-BlkLtr-crop.png#only-light){width="450"}
## Unsere Social Media-Links
!!!failure ""
```
BeamMP Forum - [https://forum.beammp.com](https://forum.beammp.com)
```
!!!quote ""
```
X (Twitter) - [https://x.com/BeamMPOfficial](https://x.com/BeamMPOfficial)
```
!!!danger ""
```
YouTube - [https://www.youtube.com/@BeamMPOfficial](https://www.youtube.com/@BeamMPOfficial)
```
!!!warning ""
```
Patreon - [https://www.patreon.com/c/BeamMP](https://www.patreon.com/c/BeamMP)
```
!!!note ""
```
Discord - [https://discord.com/invite/beammp](https://discord.com/invite/beammp)
```
!!!info ""
```
BlueSky - [https://bsky.app/profile/beammpofficial.bsky.social](https://bsky.app/profile/beammpofficial.bsky.social)
```
## Regeln
Unsere Regeln findest du [hier](rules.md)

View File

@@ -21,7 +21,7 @@ Before joining any server, make sure you have no mods besides 'multiplayerbeammp
If the game freezes or you still have issues, refer to the next option
### 2. Creating a new Userfolder
Open the BeamNG.Drive userfolder and rename the folder of the latest version (e.g. 0.35) to for example 0.xx_OLD (0.35_OLD). Close BeamNG.drive before renaming it.
Open the BeamNG.Drive userfolder and rename the `current` folder to for example `current_old`. Close BeamNG.drive before renaming it.
![image](../../assets/content/new-userfolder.png)
### 3. Removing mods from the content folders.
@@ -37,5 +37,5 @@ Delete the folder to delete all cached mods. This can be helpful if you need mor
!!! question "My settings and configs are gone! How can I restore them?"
If you renamed the userfolder, you forced the game to create a new, clean userfolder. You may copy the 'settings' and 'vehicles' folder from the folder you renamed (e.g. 0.34_OLD) to the new folder it created.
If you renamed the userfolder, you forced the game to create a new, clean userfolder. You may copy the 'settings' and 'vehicles' folder from the folder you renamed (e.g. `current_old`) to the new folder it created.
Make sure BeamNG.Drive is closed and replace all elements in the location you want to copy the folders to. You should now have all configs and settings as they were before.

View File

@@ -0,0 +1,40 @@
# Как создать исключения в брандмауэре и антивирусе Защитника Windows?
!!! информация
```
Before tampering with the firewall, make sure that your network within the windows networking settings is set to private (assuming you are in a private network).
!!! danger ":material-scale-balance: DISCLAIMER:"
**Firewall / Defender exclsuions are a risk**.
By creating exclsuions, you understand the risks of allowing programs on your PC and opening up ports on your home network to the public and therefore void the right to hold BeamMP accountable for **any and all** damages that may happen to you or your household.
We take no responsibility for any content on any externally linked services or websites.
```
## 1. Исключение брандмауэра для BeamMP-Launcher.
1. Откройте `Windows Defender Firewall with advanced setting` .
2. В окне нажмите `Inbound` , чтобы открыть вкладку исключений для входящих подключений.
3. Нажмите `Create new rule` в правом верхнем углу, чтобы создать новое исключение.
4. Выберите `Program` , чтобы создать исключение для конкретной программы.
5. Введите полный путь к `BeamMP-Launcher.exe` . По умолчанию это будет `%appdata%\BeamMP-Launcher\BeamMP-Launcher.exe` без кавычек.
6. Обязательно разрешите подключение
7. Дайте исключению имя (например, «BeamMP-Launcher») и сохраните его.
8. Перезагрузите компьютер.
## 2. Исключение антивируса для BeamMP-Launcher.
1. Откройте приложение `Windows Security` .
2. Нажмите на первый пункт `virus and threat protection` .
3. Нажмите `Manage settings` в разделе «Параметры защиты от вирусов и угроз».
4. Прокрутите страницу вниз, чтобы перейти на вкладку `Exclusions` .
5. Там нажмите «Добавить исключение» и выберите `process` .
6. Введите `BeamMP-Launcher.exe` в поле и сохраните его.
7. Перезагрузите компьютер.
## Все еще сталкиваетесь с проблемами?
Откройте тему на [форуме](https://forum.beammp.com) или на нашем [сервере Discord](https://discord.gg/beammp) в канале `#support` .

View File

@@ -0,0 +1,45 @@
Как проверить наличие CGNAT?
## Проблема
Все исключения брандмауэра и правила переадресации портов настроены правильно, но никто не может подключиться к вашему домашнему серверу?
Если у вас проблемы с подключением и вы используете Hosting-Service, обратитесь к ним за помощью. Если вы хотите использовать VPS или не можете разместить сервер дома, взгляните на наш [список партнерских хостинговых услуг](../../server/create-a-server/#partnered-hosting-services-paid) (Документация по настройке сервера).
# Что такое CGNAT?
Подробное объяснение того, что такое CGNAT и почему это может стать проблемой при попытке размещения сервера дома, можно найти на [этой странице](https://en.wikipedia.org/wiki/Carrier-grade_NAT) .
# Как проверить наличие CGNAT?
## Метод 1:
Откройте командную строку, запустите `tracert -4 beammp.com` . Это выведет серию сетевых переходов. Дождитесь завершения операции (может занять до 30 переходов). Проверьте первые несколько IP-адресов после IP вашего маршрутизатора/модема/шлюза. Если после первого перехода появляется несколько IP-адресов в диапазоне `100.64.xx` - `100.127.xx` или `10.xx.xx.xx` , скорее всего, вы находитесь за CGNAT.
!!!примечание
```
The first hop will be your Router/Modem/Gateway and differs between Devices.
The official ranges for local networks are as follows: ``10.0.0.xxx`` - ``192.168.xxx.xxx`` - ```172.16.xxx.xxx``
```
## Метод 2:
Узнайте WAN IP на вашем маршрутизаторе, посмотрев его на его интерфейсе. Сравните его с IP, опубликованным, например, на https://whatsmyip.org. Если они НЕ совпадают, вы находитесь за CGNAT.
## Метод 3/Решение:
Обратитесь за помощью к своему интернет-провайдеру. В зависимости от вашего интернет-провайдера, они могут не предлагать выделенные *динамические* IP-адреса. Помните, что статический IP-адрес не является обязательным.
!!! предупреждение
```
Internet Service Providers may only offer dedicated IP addresses as a **paid option**.
Please check the prices of our partnered hosting services as they could be cheaper than this fee!
```
Пример сети, не являющейся CGNAT:
![изображение](https://github.com/user-attachments/assets/fee21a50-cbb0-4322-9c26-d9f04f88ae37)
Теги: Сервер, 10060 10061, CGNAT, Сбой подключения, Переадресация портов, Брандмауэр

View File

@@ -0,0 +1,20 @@
# Проблема
Launcher не может обновиться или показывает пустой экран? Это краткое руководство объясняет, как вручную обновить Launcher.
!!! примечание
```
You should have already used or installed BeamMP using the installer provided by [our website](https://beammp.com) before continuing.
```
# Загрузка и установка нового лаунчера
1. Загрузите последнюю версию Launcher напрямую с [GitHub](https://github.com/BeamMP/BeamMP-Launcher/releases/latest/download/BeamMP-Launcher.exe) .
2. Перейдите в каталог BeamMP-Launcher.exe. По умолчанию эта папка находится в `C:\Users\<username>\AppData\Roaming\` . Заменить<username> с именем пользователя вашего Windows. Если вы установили BeamMP в другом месте, например <code>D:\BeamMP-Launcher</code> , то поместите Launcher в соответствующую папку BeamMP-Launcher.</username>
3. Если применимо, замените существующий Launcher новым в папке BeamMP-Launcher.
4. Запустите BeamMP-Launcher как обычно, чтобы проверить его работу.
## Проблема все еще не решена?
Создайте тикет поддержки на нашем [сервере Discord](https://discord.gg/BeamMP) . Теги: Launcher, скачать,

64
docs/ru/FAQ/game-faq.md Normal file
View File

@@ -0,0 +1,64 @@
# Часто задаваемые вопросы
Список часто задаваемых вопросов.
---
## **Клиент**
---
### **Как установить BeamMP?**
Полное руководство по установке BeamMP на Windows можно найти [здесь](https://docs.beammp.com/game/getting-started/) .
---
### **Работает ли BeamMP на взломанной версии BeamNG?**
BeamMP не будет работать с пиратскими или устаревшими версиями BeamNG.drive. Команда поддержки BeamMP не предлагает поддержку по проблемам с пиратскими / устаревшими копиями.
---
### **Работает ли BeamMP на Linux?**
Клиент официально не поддерживается в Linux. Однако вы можете следовать нашему [руководству по использованию BeamMP в Linux](../game/getting-started/#2b-linux-installation)
---
### **Почему мой антивирус или Защитник Windows помечает лаунчер?**
Некоторые антивирусные программы могут помечать BeamMP как угрозу из-за его взаимодействия с сетью и другими вещами. В коде **нет вирусов** . Код для лаунчера, сервера и клиента lua можно найти на нашем [GitHub](https://github.com/BeamMP) .
---
### **У меня плохая производительность игрового процесса. Что мне делать?**
Мы прилагаем все усилия, чтобы сделать многопользовательский режим максимально стабильным. Если вы уже снизили графические настройки, а производительность все еще низкая, рассмотрите возможность игры на сервере с меньшим количеством игроков. Игра в основном зависит от CPU, когда вы играете с большим количеством людей, поэтому старые CPU (даже четырехъядерные) будут страдать, если людей больше, чем горстка. (Общее практическое правило: 1 машина на поток CPU)
---
## **Разнообразный**
---
### **Где я могу найти код?**
Весь исходный код можно найти на нашем [GitHub](https://github.com/BeamMP) . Перед внесением любых изменений помните, что код подчиняется нашим [Условиям использования](https://forum.beammp.com/t/terms-of-use-v1-0/43) и лицензиям:
Код | Лицензия
--- | :-:
Сервер | [ЛИЦЕНЗИЯ](https://github.com/BeamMP/BeamMP-Server/blob/master/LICENSE)
Пусковая установка | [ЛИЦЕНЗИЯ](https://github.com/BeamMP/BeamMP-Launcher/blob/master/LICENSE)
Клиент Луа | [ЛИЦЕНЗИЯ](https://github.com/BeamMP/BeamMP/blob/development/LICENSE)
---
### **Я нашел ошибку или эксплойт, что мне делать?**
Если проблема связана с кодом, и вы знаете, как использовать Github, откройте новую «Проблему» в соответствующем репозитории на нашем [GitHub](https://github.com/BeamMP) . Мы используем рабочий процесс, основанный на проблемах, поэтому даже если у вас уже есть исправление ошибки, рассмотрите возможность открытия новой «Проблемы», а затем откройте «Запрос на извлечение» с решениями для проблемы. Более подробную информацию о содействии можно найти [здесь](https://github.com/BeamMP/BeamMP/blob/development/CONTRIBUTING.md) .
Если у вас нет учетной записи GitHub, вы не знаете, как пользоваться GitHub, или у вас есть другие вопросы, вы можете связаться с нами следующими способами:
- Если это не что-то деликатное, вы можете создать сообщение на нашем [форуме BeamMP](https://forum.beammp.com) или сообщить об этом на нашем [официальном Discord](https://discord.gg/beammp) .
- Если информация конфиденциальная, вы можете напрямую сообщить о проблеме нашему сотруднику в [Discord](https://discord.gg/beammp) .

22
docs/ru/FAQ/player-faq.md Normal file
View File

@@ -0,0 +1,22 @@
# Часто задаваемые вопросы игроков
## Как привязать свой аккаунт Discord?
Связывание аккаунтов Discord и BeamMP — это новая функция BeamMP. Для этого вам нужно отправить `!link` в виде сообщения боту [BeamMP Accounts](https://discordapp.com/channels/@me/1201234743568634026/) . Бот ответит ссылкой для входа в ваш аккаунт BeamMP. Просто войдите в свой аккаунт BeamMP, после этого вы получите второе сообщение о том, что он успешно связал ваши аккаунты. 🎉
## Как получить ранний доступ?
Ранний доступ (включая фиолетовую метку и другие преимущества) можно получить, поддержав нас финансово на [Patreon](https://patreon.com/BeamMP) , купив уровень, сделав пожертвование или ускорив сервер Discord. Пожертвование **x** суммы в долларах США = **x** дополнительных ключей сервера, включая преимущества EA. Ускорение дает вам +4 ключа сервера в дополнение к преимуществам EA.
## Я подписался на Patreon. Как мне получить свои привилегии?
Чтобы автоматически получать бонусы, обязательно выполните следующие действия:
1. Привяжите свой аккаунт Discord к Patreon, чтобы получить роли и доступ на сервере Discord.
2. Пожалуйста, убедитесь, что вы используете тот же адрес электронной почты на Patreon, что и для вашей учетной записи BeamMP на [форуме](https://forum.beammp.com/) .
Пожалуйста, будьте терпеливы, синхронизация системы может занять несколько часов, иногда до 12. Если вы не получили свои бонусы в течение 12 часов и выполнили вышеуказанные шаги, обратитесь в службу поддержки BeamMP.
## У меня есть еще вопросы!
Если ваш вопрос или проблема связаны с Игрой или процессом, пожалуйста, обратитесь к разделу [FAQ по Играм](game-faq.md) . Если ваш вопрос или проблема связаны с запуском Сервера, пожалуйста, обратитесь к разделу [FAQ по Серверу](server-faq.md) . В противном случае, пожалуйста, посетите [форумы](https://forum.beammp.com/c/faq/35) , где сообщество может задавать вопросы и получать ответы.

View File

@@ -0,0 +1,21 @@
!!! внимание "Этот сайт находится в стадии разработки!"
```
Над этим сайтом ведется активная работа.
Чувствуете, что можете помочь? Пожалуйста, сделайте это, нажав на страницу с карандашом справа!
Это можно сделать на любой странице.
```
# Создание карты для BeamNG.drive
...
## Введение
...
## Начало работы
...

View File

@@ -0,0 +1,21 @@
!!! внимание "Этот сайт находится в стадии разработки!"
```
Над этим сайтом ведется активная работа.
Чувствуете, что можете помочь? Пожалуйста, сделайте это, нажав на страницу с карандашом справа!
Это можно сделать на любой странице.
```
# Создание пропсов для BeamNG.drive
...
## Введение
...
## Начало работы
...

View File

@@ -0,0 +1,21 @@
!!! внимание "Этот сайт находится в стадии разработки!"
```
Над этим сайтом ведется активная работа.
Чувствуете, что можете помочь? Пожалуйста, сделайте это, нажав на страницу с карандашом справа!
Это можно сделать на любой странице.
```
# Создание автомобиля для BeamNG.drive
...
## Введение
...
## Начало работы
...

View File

@@ -0,0 +1,11 @@
!!! внимание "Этот сайт находится в стадии разработки!"
```
Над этим сайтом ведется активная работа.
Чувствуете, что можете помочь? Пожалуйста, сделайте это, нажав на страницу с карандашом справа!
Это можно сделать на любой странице.
```
# Введение в разработку BeamNG.drive

View File

@@ -0,0 +1,3 @@
# imgui-windows.md
Эту страницу нужно заполнить

View File

@@ -0,0 +1,3 @@
# lua-mods.md
Эту страницу нужно заполнить

View File

@@ -0,0 +1,273 @@
# Создание UI-приложения
Для создания UI-приложения вам понадобятся некоторые знания фреймворка AngularJS, основную документацию можно найти здесь: [AngularJS docs](https://docs.angularjs.org/guide)
## Структура файла
Для работы UI-приложения необходимы четыре важных файла:
- app.js | Содержит основной код, используемый [документацией UI-приложения Javascript](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
- app.html | Код, который отображает [HTML-документы](https://developer.mozilla.org/fr/docs/Web/HTML) вашего приложения
- app.json | Содержит информацию о UI-приложении
- app.png | Файл изображения, отображаемый в селекторе приложений
### Стиль UI-приложения
Мы рекомендуем использовать тег `<style>` для стилизации вашего приложения. Файл .css тоже подойдет, но вы не сможете видеть изменения в режиме реального времени.
## Пример
Этот пример от DanielW. Отдельная ему благодарность
ui\modules\apps\ExampleApp\app.html
```html
<div style="width: 100%; height: 100%;" class="bngApp">
<link type="text/css" rel="stylesheet" href="/ui/modules/apps/ExampleApp/app.css" />
<div id="exampleAppContainer">
<span>Gear: <span>{{ gearName }}</span></span>
<div layout="row" layout-align="center center">
<md-input-container flex>
<label>Input</label>
<input ng-model="message" ng-keydown="sendMessage($event)">
</md-input-container>
<md-button md-no-ink class="md-warn" ng-disabled="!message" ng-click="sendMessage()">Send</md-button>
</div>
<span style="display: block">Messages:</span>
<!-- Scroll Area -->
<ul bng-nav-scroll style="margin: 0; padding: 0; overflow-y: auto; width: 100%; height: 100%; background-color: #37373740;">
<!-- Iterate over the messages and display them -->
<li ng-repeat="message in messages track by $index" style="display: flex; align-items: center; height: 35px;">
<span style="padding: 0 0.2em; width: 100%;">{{ message }}</span>
<!-- Button to delete the message, this calls the `deleteMessage` function in `app.js` -->
<md-button md-no-ink class="md-icon-button md-warn" ng-click="deleteMessage($index)">
<md-icon class="material-icons">delete</md-icon>
</md-button>
</li>
</ul>
</div>
</div>
```
Здесь вы можете увидеть тег `<span>` , отображающий передачу вашего транспортного средства, входные данные, используемые для отправки сообщения функции `sendMessage()` в Javascript, и повторяющийся тег `<li>` использующий <b>ng-repeat</b> для переменной `messages` , расположенной в Javascript.
ui\modules\apps\ExampleApp\app.js
```js
angular.module('beamng.apps')
.directive('exampleApp', [function() {
return {
templateUrl: '/ui/modules/apps/ExampleApp/app.html',
replace: true,
restrict: 'EA',
scope: true,
controller: ['$scope', function($scope) {
$scope.gearName = '0'
$scope.message = ''
$scope.messages = []
// Setup the streams we want. For now, we only want the engine information. You can add more, you'll just have to look around to find the different streams
let steamList = ['engineInfo']
StreamsManager.add(steamList)
$scope.$on('destroy', function() {
StreamsManager.remove(steamList)
})
// Do I even need to put this comment here explaining what this function does?
// Well, I have done it for a lot of other things when they weren't needed. I'll leave this one be...
$scope.$on('streamsUpdate', function(event, streams) {
if (!streams.engineInfo) // Early return... You probably noticed that without this useless comment though
return;
// `lua/vehicle/controller/vehicleController.lua:538` (or use console.log)
let gear = streams.engineInfo[5]
// Update the gear name in HTML if needed
if ($scope.gearName !== gear)
$scope.gearName = gear
})
$scope.sendMessage = function(event) {
if (event && event.key !== 'Enter')
return
if ($scope.message == '')
return
// Forward the message to the Lua extension to modify it
bngApi.engineLua('extensions.exampleMod.modifyMessage("' + $scope.message + '")')
$scope.message = ''
}
$scope.deleteMessage = function(idx) {
$scope.messages.splice(idx, 1)
}
// The `modifyMessage` function will call this hook with the modified data
$scope.$on('MessageReady', function(_, modifiedMessage) {
$scope.messages.push(modifiedMessage)
});
}]
}
}])
```
Обратите внимание на использование <b>$scope{/b0} . Это очень важно, поскольку вам нужно будет определить переменные и функции в {b1}$scope</b> , чтобы иметь возможность доступа к ним из <b>Html</b> внутри любого тега <b>ng-*</b> . Таким образом, в этом примере после выполнения функции `sendMessage()` из <b>Html</b> она отправит его в файл lua, расположенный в каталоге расширений мода, и выполнит функцию `modifyMessage()` внутри этого файла lua.
Пример того, как может выглядеть сторона lua:
```lua
local function modifyMessage(message)
message = message .. " [Modified!]"
guihooks.trigger('MessageReady', message)
end
```
^ Это упрощенная версия lua, просто показывающая функцию.
Основное внимание здесь уделяется использованию <b>guihooks.trigger</b> , который запускает событие AngularJS, определенное с помощью `$scope.$on()` . Как вы можете видеть в самом низу файла Javascript, событие называется MessageReady и будет выполнено функцией <b>guihooks.trigger</b> с полезной нагрузкой сообщения, а затем будет помещено в переменную `$scope.messages` для отображения тегом li с помощью <b>ng-repeat</b> в файле <b>Html.</b>
Полный файл lua находится ниже
lua\ge\extensions\exampleMod.lua
```lua
local M = {}
--[[
This is the entry point of our extension, this is what the game loads from our `modScript.lua`.
In the modScript file, you can load more extensions and put them in the same directory as this file.
In this file, we will communicate with the following:
1. Our vehicle extension. That extension tells this extension when to send it data, and we send it. Take a look at `vehicle/extensions/auto/exampleVehicleExtension.lua`
2. Input. Take a look at `core/input/actions/myActions.json`. When the bounded key is pressed, it will call `onActionKeyDown` (a function we export below)
]]
-- Game Function Hooks
--------------------------------------------
local function onExtensionLoaded()
log('D', "onExtensionLoaded", "Called")
end
local function onExtensionUnloaded()
log('D', "onExtensionUnloaded", "Called")
end
-- Custom Functions
--------------------------------------------
local function onActionKeyDown()
log('D', "onActionKeyDown", "Pressed!")
end
local function onVehicleExtensionLoaded(vehID)
log('D', "onVehicleExtensionLoaded", "Sending some data to the vehicle")
local veh = be:getObjectByID(vehID) -- If you don't have the ID, you can also use `be:getPlayerVehicle(0)` to get the current vehicle.
if not veh then return end -- The usual error checking
local data = {
["name"] = "Daniel W"
}
veh:queueLuaCommand("extensions.exampleVehicleExtension.onDataReceived('" .. jsonEncode(data) .. "')")
end
local function modifyMessage(message)
message = message .. " [Modified!]"
guihooks.trigger('MessageReady', message)
end
-- Export Interface
--------------------------------------------
M.onExtensionLoaded = onExtensionLoaded
M.onExtensionUnloaded = onExtensionUnloaded
M.onActionKeyDown = onActionKeyDown
M.onVehicleExtensionLoaded = onVehicleExtensionLoaded
M.modifyMessage = modifyMessage
--[[ Other functions could include:
- onPreRender(dtReal, dtSim, dtRaw)
- onUpdate(dtReal, dtSim, dtRaw)
- onClientPreStartMission(levelPath)
- onClientPostStartMission(levelPath)
To find all of these, search the following in `BeamNG.Drive/lua`: `extensions.hook(`
--]]
return M
```
Обратите внимание, что очень важно вернуть переменную M (модуль) с необходимыми функциями внутри! Например, без строки `M.modifyMessage = modifyMessage` функция `bngApi.engineLua('extensions.exampleMod.modifyMessage("' + $scope.message + '")')` не сможет найти функцию modifyMessage()
ui\modules\apps\ExampleApp\app.css
```css
#exampleAppContainer {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
align-content: center;
}
#exampleAppContainer > * {
margin: 0;
padding: 0;
}
```
ui\modules\apps\ExampleApp\app.json
```json
{
"domElement": "<example-app></example-app>",
"name": "Example App",
"types": [
"ui.apps.categories.debug"
],
"description": "example-app",
"css": {
"left": "0px",
"height": "auto",
"width": "270px",
"min-width": "200px",
"min-height": "90px",
"top": "0px"
},
"author": "Daniel W",
"version": "0.1",
"directive": "exampleApp"
}
```
Директива должна быть такой же, как в файле <b>Javascript.</b>
# Функции Javascript, предоставляемые BeamNG для UI-приложений
```js
bngApi.engineLua("lua_path.function()")
```
Полезно для запуска функции lua с аргументами или без них.
# Функции Lua, предоставляемые BeamNG для UI-приложений
```lua
guihooks.trigger("EventName", Payload)
```
Полезная нагрузка может быть любого типа, но лучше хранить ее в виде массива/объекта или строки, чтобы она не потерялась.
<b>ВАЖНО</b> : Иногда может случиться так, что имя события, которое вы используете, уже используется внутри чего-то другого, и это вызовет проблемы, поэтому, например, если ваше приложение называется Nickel, хорошей практикой будет называть каждое событие Angular как NKEventName вместо EventName.

43
docs/ru/contributing.md Normal file
View File

@@ -0,0 +1,43 @@
# Участие в разработке BeamMP Docs
BeamMP использует [Material for MkDocs](https://squidfunk.github.io/mkdocs-material) в качестве своей темы. Это тема для [MkDocs](https://www.mkdocs.org) . Полную документацию можно найти на их соответствующих сайтах.
## Начало работы
Чтобы внести свой вклад в эти документы, вы можете воспользоваться одним из двух подходов, изложенных ниже:
### 1. Редактировать необработанные файлы разметки
Редактирование необработанных файлов markdown — самый быстрый подход, который лучше всего подходит для быстрых правок, таких как орфография, грамматика или новые фрагменты контента. Однако этот подход требует предварительного знания markdown, поскольку вам нужно будет понимать, что даст ваш вклад.
Если вы предпочитаете именно этот подход, выполните следующие действия:
1. Нажмите «Изменить» на странице, которую вы хотите отредактировать.
2. Создайте форк проекта в своей учетной записи GitHub.
3. Внесите необходимые изменения.
4. Сохраните изменения в своем форке.
5. Подайте запрос на включение изменений в наш репозиторий [здесь](https://github.com/BeamMP/Docs).
После того, как вы создали свой pull request, один из руководителей BeamMP Mod Team рассмотрит ваш pull request и либо одобрит его, либо запросит некоторые изменения. Если изменения были запрошены и вы их выполнили, мы повторно рассмотрим ваш pull request. Затем ваши изменения будут объединены в репозиторий и автоматически развернуты в рамках нашей непрерывной интеграции.
### 2. Вносите изменения с предварительным просмотром в реальном времени
Редактирование наших документов таким способом по-прежнему будет осуществляться по тому же принципу, что и в варианте 1, однако вы сможете предварительно просмотреть свои изменения.
1. Нажмите «Изменить» на странице, которую вы хотите отредактировать.
2. Создайте форк проекта в своей учетной записи GitHub.
3. Клонируйте проект локально.
4. Настройка материалов для MkDocs в соответствии с их руководством [здесь](https://squidfunk.github.io/mkdocs-material/getting-started/).
5. Запустите `mkdocs serve` , чтобы запустить сервер документации с функцией перезагрузки в реальном времени, на который вы клонировали форк.
6. Внесите изменения, которые считаете нужными.
7. Сохраните изменения в своем форке.
8. Подайте запрос на включение изменений в наш репозиторий [здесь](https://github.com/BeamMP/Docs).
## Макет проекта
```
mkdocs.yml # The configuration file.
docs/
index.md # The documentation homepage.
... # Other markdown pages, images and other files.
```

View File

@@ -0,0 +1,24 @@
# Коды ошибок
На этой странице содержатся все коды ошибок, которые может отображать лаунчер.
---
Код | Описание | Возможное решение
--- | --- | ---
10048 | Что-то другое уже использует порт запуска | Убедитесь, что одновременно запущен только ОДИН экземпляр BeamMP-Launcher. Попробуйте перезагрузить ПК.
10038 / 10060 / 10061 | Ни один сервер не ответил по указанному IP-адресу и/или порту | Если вы являетесь владельцем сервера, проверьте правила переадресации портов и/или брандмауэра, найденные на [BeamMP-Server](https://docs.beammp.com/server/create-a-server) . Если вы не являетесь владельцем сервера, выберите другой сервер или свяжитесь с владельцем, если он вам известен.
10054 | Сброс соединения пиром | Сервер, к которому вы подключаетесь, отключился.
Не удалось найти игру, пожалуйста, запустите ее. Сообщите об этом, если проблема сохранится код 3. | Лаунчеру не удалось найти информацию об игре (каталог игры, каталог профиля, версию и т. д.) в записи реестра. | Запустите игру хотя бы один раз, чтобы создать значения реестра.
Не удалось найти игру, пожалуйста, запустите ее. Сообщите об этом, если проблема сохранится код 4. | Программа запуска не смогла прочитать информацию об игре (каталог игры, каталог профиля, версию и т. д.) в записи реестра. | Эта ошибка чаще всего появляется у пользователей с **пиратскими копиями** игры. Если вы купили игру, запустите ее хотя бы один раз, чтобы были созданы значения реестра.
Не удалось запустить игру! Лаунчер скоро закроется | Лаунчеру не удалось найти исполняемый файл игры. | Запустите игру хотя бы один раз, прежде чем снова запускать лаунчер.
Игра закрыта! Лаунчер скоро закроется | Игра была закрыта. | Это сообщение появится при закрытии игры или если игра не запустится.
Обновление лаунчера не удалось! | Лаунчеру не удалось загрузить новую версию | Проверьте подключение к Интернету и правила брандмауэра/антивируса, чтобы лаунчер не был заблокирован.
Ошибка инициализации файла регистратора | Лаунчер не имеет возможности создавать файлы | Запустите лаунчер от имени администратора.
Пожалуйста, закройте игру и попробуйте еще раз. | Игра уже открыта и лаунчер не может очистить папку `multiplayer/mods` | Закройте игру и повторите попытку.
Пожалуйста, запустите игру хотя бы один раз. | Программа запуска пыталась, но не смогла изменить каталог игры. | Запустите игру хотя бы один раз, прежде чем снова запускать лаунчер.
Основные серверы офлайн! Извините за неудобства! | Лаунчеру не удалось проверить наличие обновления | Проверьте подключение к интернету и правила брандмауэра. Если с вашей стороны проблем нет, проверьте [канал обновлений BeamMP](https://discord.com/channels/601558901657305098/697596153943949352) на нашем Discord.
Извините, произошел сбой в работе системы бэкэнда! Не волнуйтесь, скоро все заработает! | Бэкэнд BeamMP не ответил | Проверьте подключение к интернету и правила брандмауэра. Если с вашей стороны проблем нет, проверьте [канал обновлений BeamMP](https://discord.com/channels/601558901657305098/697596153943949352) на нашем Discord.
Застрял при обновлении | Лаунчер завис на этапе обновления и не переходит к следующему шагу. | Запустите лаунчер от имени администратора и проверьте правила антивируса, чтобы лаунчер не блокировался.
Если лаунчер сразу закрывается, проверьте файл `Launcher.log` в папке, куда вы установили BeamMP.

View File

@@ -0,0 +1,101 @@
# Создание многопользовательских модов
## Структура папок и основы файлов
Базовая структура папок и файлов должна выглядеть следующим образом:
```
Resources/
├─ Client/
│ └─ examplePlugin.zip/
│ ├─ scripts/
│ │ └─ modScript.lua
│ └─ lua/
│ └─ ge/
│ └─ extensions/
│ └─ examplePlugin.lua
└─ Server/
└─ examplePlugin/
├─ examplePlugin.lua
└─ further_lua/
└─ further.lua
```
Серверный lua — это необходимый минимум, если вы хотите добавлять пользовательские события, вам также понадобится как минимум клиентский lua, а также modscript.lua.
Папка Server должна содержать подпапки, по одной для каждого серверного мода. Хорошей практикой является наличие только одного основного файла lua и добавление дополнительных файлов lua в подпапки. Однако вам не обязательно это делать, сервер загрузит файлы lua в алфавитном порядке, если их несколько.
Папка Client содержит zip-файлы, которые отправляются клиенту, который затем загружает их как мод. Любые другие файлы в папке Client вызовут ошибку при запуске сервера, но за исключением этого будут игнорироваться сервером. ModScript.lua будет прочитан BeamNG и укажет игре, какой плагин загружать.
!!!example "" [Загрузите examplePlugin.zip](../../../../assets/content/ResourcesForExamplePlugin.zip)
## Серверный lua
В examplePlugin есть и другие примеры, но вот самый простой, выводящий идентификаторы игроков:
```lua
function onInit() --runs when plugin is loaded
MP.RegisterEvent("onPlayerAuth", "onPlayerAuth") --Provided by BeamMP
print("examplePlugin loaded")
end
--A player has authenticated and is requesting to join
--The player's name (string), forum role (string), guest account (bool), identifiers (table -> ip, beammp)
function onPlayerAuth(player_name, role, isGuest, identifiers)
local ip = identifiers.ip
local beammp = identifiers.beammp or "N/A"
print("onPlayerAuth: player_name: " .. player_name .. " | role: " .. role .. " | isGuest: " .. tostring(isGuest) .. " | identifiers: ip: " .. ip .. " - beammp: " .. beammp)
end
```
`onPlayerAuth` срабатывает, как только игрок хочет присоединиться, см. также [onPlayerAuth в справочнике по скриптам](../../../scripting/server/latest-server-reference/#onplayerauth)
Еще один пример использования onPlayerAuth, но он запретит гостям присоединяться к серверу, отправив клиенту ответное сообщение, которое затем будет показано игроку:
```lua
function onPlayerAuth(playerName, playerRole, isGuest, identifiers)
if isGuest then
return "No guests allowed, please use a BeamMP account"
end
end
```
Дополнительную информацию о серверных функциях, предоставляемых BeamMP, можно найти в [последнем справочнике по серверу.](../../../scripting/server/latest-server-reference.md)
## Клиентская часть lua
Это в значительной степени соответствует [расширениям BeamNG.](https://documentation.beamng.com/modding/programming/extensions/)
```lua
local M = {}
if extensions.isExtensionLoaded("examplePlugin") then
log("E", "examplePlugin", "examplePlugin loaded on client side")
return
end
return M
```
Выводит на консоль информацию о том, что examplePlugin был загружен
Более подробную информацию см. в [документации beamNG по отладочным распечаткам.](https://documentation.beamng.com/modding/programming/debugging/#a-add-a-log)
## modScript.lua
Обычно содержит только две строки
```lua
load('examplePlugin')
setExtensionUnloadMode('examplePlugin', 'manual')
```
Вы можете добавить вывод журнала, если хотите видеть в журналах, когда ваш modScript обрабатывается BeamNG.
```lua
load('examplePlugin')
setExtensionUnloadMode('examplePlugin', 'manual')
log('I', 'modScript', "examplePlugin loaded")
```

View File

@@ -0,0 +1,45 @@
!!! предупреждение "Этот сайт находится в стадии разработки!"
```
This site is being actively worked on.
Feel you could help? Please do by clicking on the page with a pencil on the right!
This can be done any page too.
```
# Справочник по модам/внутриигровым скриптам
BeamMP также позволяет вам создавать собственные плагины на стороне клиента. Мы предоставили несколько функций, которые вы можете использовать для связи с другими многопользовательскими модами и другими игроками через сервер.
# Функции
Список доступных функций для написания скриптов:
Функция | Примечания
--- | ---
`TriggerServerEvent("eventName", "data")` | Запускает событие в серверной среде lua, оба параметра являются строками.
`TriggerClientEvent("eventName", "data")` | Запускает событие в локальной среде lua, оба параметра — строки. Хорошо подходит для связи между плагинами.
`AddEventHandler("eventName", Function)` | Добавляет 2-й параметр в таблицу, который будет вызываться при получении `eventName` (локально или с сервера). `Function` получит 1 параметр — строку, содержащую данные события.
# Фрагменты кода
Например, для анализа чата используйте включенное событие `ChatMessageIncluded` следующим образом:
```lua
local function chatReceived(msg) -- Receive event with parameters
print("chat received: "..msg)
local i = string.find(s, ":") -- Find where our first ':' is, used to separate the sender and message
if i == nil then
print("error parsing message: separator could not be found!")
return -- Could not find separator, cancel function
end
print("index of separator: "..tostring(i))
local sender = string.sub(msg, 1, i-1) -- Substring our input to separate its 2 parts
local message = string.sub(msg, i+1, -1) -- Do whatever you want to with the message
print("sender: " .. sender)
print("message: ".. message)
end
AddEventHandler("ChatMessageReceived", chatReceived) -- Add our event handler to the list managed by BeamMP
```

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,384 @@
!!! предупреждение "Этот сайт находится в стадии разработки!"
```
This site is being actively worked on.
Feel you could help? Please do by clicking on the page with a pencil on the right!
This can be done any page too.
```
# Справочник по серверным скриптам
## Версия сервера 2.X
!!! предупреждение
```
BeamMP server version 2.X is now unsupported. This documentation is provided as a reference only.
Please update to the latest version for maintenance and support.
```
---
> Это скрипт 2.x. Обращайтесь к нему только если ваш сервер старый/устаревший (версия 2.xx). Для получения последней документации см. [здесь](https://docs.beammp.com/scripting/server/latest-server-reference) . {.is-warning}
### Примечания
Чтобы получить вывод функции в консоли сервера, вам нужно обернуть его в оператор `print()` . Например: `print(GetPlayerName(0))` вернет имя первого игрока вашего сервера.
`<PlayersServerID>` начинается с 0.
### Список доступных функций для написания скриптов
#### GetPlayerName(идентификатор_серверагроков)
Возвращает имя игрока в Discord в виде строки
```lua
function onPlayerJoin(playerID)
local name = GetPlayerName(playerID)
-- Do something
end
```
#### GetPlayerDiscordID(playersServerID)
Возвращает имя игрока в Discord в виде строки
```lua
function onPlayerJoin(playerID)
local name = GetPlayerDiscordID(playerID)
-- Do something
end
```
#### GetPlayerHWID(идентификатор_серверагроков)
Возвращает идентификатор игрока в Discord в виде строки
```lua
function onPlayerJoin(playerID)
local name = GetPlayerHWID(playerID)
-- Do something
end
```
#### GetPlayerVehicles(идентификатор_серверагроков)
Возвращает транспортные средства игрока в виде объекта/массива.
```lua
function onChatMessage(playerID, senderName, message)
local vehicleList = GetPlayerVehicles(playerID)
for vehicleID, vehicleData in pairs(vehicleList) do
-- Do something
-- Could also be used to check how many vehicles a player have
end
end
```
#### DropPlayer(идентификатор_серверагроков)
Сбрасывает соединение для определенного игрока. По сути выгоняет его
```lua
function onVehicleSpawn(playerID, vehicleID, vehicleData)
-- Do something
DropPlayer(playerID)
end
```
#### SendChatMessage(playersServerID, сообщение)
Отправляет сообщение по сети указанному пользователю. Используйте -1 для всех
```lua
function onPlayerJoin(playerID)
SendChatMessage(-1, "Someone just joined!")
end
```
#### CancelEvent() -- УСТАРЕЛО
Отменяет событие. Это может произойти скоро. Используйте `return 1` чтобы отменить событие.
#### onInit()
Если объявлено в файле lua, оно будет вызвано после того, как C++ успешно завершит загрузку текущего файла lua.
```lua
function onInit()
print("Server ready")
end
```
#### Выход()
Закрою сервер.
```lua
function onInit()
print("Server Ready. But who needs a server which is running")
exit() -- Stops the server
end
```
#### CreateThread(имя_функции, интервал_вызова)
Функция будет выполняться в выделенном потоке, и она будет запускать callInterval раз в секунду. 1 = Она будет запускаться каждую секунду.
```lua
function yourFunction()
for i = 1,10 do
SendChatMessage(-1, "Countdown: "..i)
Sleep(1000)
end
end
CreateThread("yourFunction", 30)
```
УСТАРЕВШИЙ ПРИМЕР Функция будет выполняться в выделенном потоке
```lua
function yourFunction()
for i = 1,10 do
SendChatMessage(-1, "Countdown: "..i)
Sleep(1000)
end
end
CreateThread("yourFunction", 30)
```
#### StopThread(имя_функции)
Прекратит попытки вызвать функцию потока текущего скрипта.
```lua
function yourFunction()
delayExpired = false
Sleep(10000)
delayExpired = true
end
CreateThread("yourFunction", 30)
-- Do something
if not delayExpired then
StopThread("yourFunction")
else
-- Do something
end
```
#### Сон (миллисек) - ИЗНОС
Приостановит выполнение на указанное время (предупреждение: это приведет к приостановке всего сервера, если вы не создали поток)
```lua
function countdown()
for i = 1,10 do
SendChatMessage(-1, "Countdown: "..i)
Sleep(1000)
end
end
CreateThread("countdown", 10)
```
#### ПолучитьPlayerCount()
Вернет количество подключенных игроков
```lua
function onPlayerJoin(playerID)
SendChatMessage(playerID, "You are the "..GetPlayerCount().."th player!"
end
```
#### RemoveVehicle(playerServerID, VehicleID)
Исчезнет транспортное средство.
```lua
function onVehicleSpawn(playerID, vehicleID, vehicleData)
if --[[ Vehicle data equal something it shouldn't be ]] then
RemoveVehicle(playerID, vehicleIID)
end
end
```
#### ПолучитьИгроков()
Вернет таблицу идентификаторов с именами
```lua
local function onPlayerJoin(joinedPlayerID)
local players = GetPlayers()
for playerID, playerName in pairs(players) do
if playerID == joinedPlayerID then
-- Do something
end
end
end
```
#### RegisterEvent(имя_события, имя_функции)
Зарегистрирует эту функцию для указанного события. Оба должны быть строками
```lua
function anyEvent()
-- Do something
end
RegisterEvent("onAnyEventHappen", "anyEvent")
-- Do something
TriggerLocalEvent("onAnyEventHappen")
```
#### TriggerLocalEvent(имя_события)
Будет вызывать каждую зарегистрированную функцию в той же папке плагина.
```lua
function anyEvent()
-- Do something
end
RegisterEvent("onAnyEventHappen", "anyEvent")
-- Do something
TriggerLocalEvent("onAnyEventHappen")
```
#### TriggerGlobalEvent(имя_события)
Будет вызывать каждую зарегистрированную функцию с этим именем события.
```lua
-- File A
function anyEvent()
-- Do something
end
RegisterEvent("onAnyEventHappen", "anyEvent")
```
```lua
-- File B
TriggerGlobalEvent("onAnyEventHappen")
```
#### TriggerClientEvent(playerServerID, eventName, data)
Вызовет это событие с указанными данными на указанном клиенте (-1 для широковещательной передачи)
```lua
function onPlayerJoin(playerServerID)
TriggerClientEvent(playerServerID, "anyEvent", "You just joined the server")
end
RegisterEvent("onAnyEventHappen", "anyEvent")
```
#### Установить(configID, newValue)
установит настройку конфигурации на новое указанное значение из таблицы ниже|
```lua
function onChatMessage(playerID, senderName, message)
if playerID == adminPlayer then
if message == --[[ anything ]] then
Set(3, 10)
end
end
end
```
#### Список доступных настроек конфигурации для команды `Set()`
> Обратите внимание, что они не будут сохранены в файле конфигурации.
Идентификатор конфигурации | Имя | Приму только
--- | --- | ---
`0` | Настройка отладки | правда или ложь
`1` | Частная обстановка | правда или ложь
`2` | Макс. количество автомобилей на игрока | число
`3` | Макс. количество игроков | число
`4` | Карта | нить
`5` | Имя | нить
`6` | Описание | нить
любой другой идентификатор приведет к появлению предупреждения на консоли | |
### Список доступных событий для написания сценариев
#### События по умолчанию
Пример использования события:
```lua
function onInit()
RegisterEvent("onPlayerJoin", "onPlayerJoin")
end
function onPlayerJoin(playerServerID)
-- Do something
end
```
Если вы не хотите, чтобы на вашем сервере были гости:
```lua
function onInit()
print("noGuests Ready")
RegisterEvent("onPlayerAuth","onPlayerAuth")
end
function onPlayerAuth(name, role, isGuest)
if isGuest then
return "You must be signed in to join this server!"
end
end
```
Событие | Параметры | Описание
--- | --- | ---
`onPlayerAuth` | Имя игрока, роль на форуме, гостевая учетная запись (bool) | Игрок прошел аутентификацию и запрашивает присоединение
`onPlayerConnecting` | Идентификатор игрока | Игрок загружается (до загрузки карты)
`onPlayerJoining` | Идентификатор игрока | Игрок загружает карту и скоро присоединится
`onPlayerJoin` | Идентификатор игрока | Игрок присоединился и загрузился
`onPlayerDisconnect` | Идентификатор игрока | Игрок отключился
`onChatMessage` | Идентификатор отправителя, имя и сообщение чата | Сообщение чата было отправлено. Это было бы хорошо для создания системы команд
`onVehicleSpawn` | Идентификатор игрока, идентификатор транспортного средства и данные транспортного средства | Это называется, когда кто-то создает транспортное средство.
`onVehicleEdited` | Идентификатор игрока, идентификатор транспортного средства и данные транспортного средства | Это называется, когда кто-то редактирует транспортное средство или заменяет существующее.
`onVehicleDeleted` | Идентификатор игрока и идентификатор транспортного средства | Это называется, когда кто-то удаляет принадлежащее ему транспортное средство.
#### Пользовательские события
Пользовательские события также могут быть созданы для вашего собственного использования. Это делается примерно так же, как и события по умолчанию.
Пример использования пользовательского события:
```lua
function onInit()
RegisterEvent("myCustomEvent", "myCustomEvent")
end
function myCustomEvent(playerServerID, customData)
-- Do something
end
```
Затем его можно вызвать либо со стороны клиента, либо со стороны сервера, используя соответствующие функции.
### Игроки
Когда игрок подключается к вашему серверу, ему назначается serverID, начиная с 0 и далее. serverID используются повторно; если игрок покидает сервер и снова присоединяется, ему не будет назначен новый serverID, он просто получит другой доступный. Когда сервер перезапустится, serverID будут сброшены.
#### Статические идентификаторы
У игроков в BeamMP есть 3 статических идентификатора, которые можно получить из их serverID: имя, discordID и hardwareID или HWID. (Хотя последний из вышеупомянутых не реализован, мы будем действовать так, как будто он реализован). Каждый из трех типов идентификаторов имеет свое собственное происхождение и сильные/слабые стороны при использовании их для идентификации игрока.
ТИП ИДЕНТИФИКАТОРА | ПЛЮСЫ | МИНУСЫ | ФУНКЦИЯ ДЛЯ ПОЛУЧЕНИЯ
--- | --- | --- | :-:
имя | легко получить, просто | не безопасно | ПолучитьИмяИгрока()
DiscordID | довольно безопасно | неудобно | GetPlayerDiscordID()
HWID | чрезвычайно безопасно | трудно получить | GetPlayerHWID()
### Транспортные средства
У транспортных средств в beamMP есть 3 атрибута, на которые обращает внимание сервер: serverID владельца, vehicleID транспортного средства и его данные. ServerID владельца прост, это serverID, у каждого транспортного средства также есть ID, идентификаторы транспортных средств не уникальны для транспортного средства; два транспортных средства могут иметь одинаковый ID, если они принадлежат разным владельцам. В отличие от serverID, vehicleID используются повторно, например, если у меня есть 4 транспортных средства, их идентификаторы — 0, 1, 2 и 3, если я удалю транспортное средство в vehicleID 2, у меня будут 0, 1 и 3, когда я создам новое транспортное средство, новое транспортное средство будет помещено в слот ID 2. Наконец, последний атрибут, который есть у транспортных средств, — это data, data содержит транспортное средство, название, детали и другие данные; как следует из названия. data хранится в виде необработанной строки JSON, поэтому вам понадобится библиотека JSON. В качестве альтернативы вы можете вручную пройти по строке и извлечь необходимую информацию.

View File

@@ -0,0 +1,237 @@
# Обслуживание сервера
Руководства, советы и рекомендации по настройке и обслуживанию сервера BeamMP.
## Как установить
Инструкции по установке см. в разделе [Установка сервера](create-a-server.md) .
## Файл ServerConfig
Конфигурация сервера, представляющая собой файл `ServerConfig.toml` , использует [формат TOML](https://toml.io/en/) .
*ПРИМЕЧАНИЕ* : *Старый* файл конфигурации сервера назывался `Server.cfg` , но он больше не используется, и сервер выдаст предупреждение, если он все еще присутствует. Также обратите внимание, что два формата конфигурации **несовместимы** друг с другом.
По умолчанию в конфигурации есть один раздел, называемый `[General]` , который содержит следующие значения:
Ключ | Тип значения | Описание
--- | --- | ---
AuthKey | Формат AuthKey `xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` где все x — буквенно-цифровые символы (цифры и буквы) | Используется для идентификации вашего сервера с бэкэндом. Вы должны были получить его, следуя инструкциям по установке.
Отлаживать | правда/ложь | При включении (true) будет отображаться больше сообщений в журнале и предоставляться больше информации. Включите это, если у вас возникнут проблемы. Включение этого параметра значительно увеличит размер файла журнала.
Частный | правда/ложь | Если включено (true), ваш сервер не будет отображаться в списке серверов. Любой с правильным IP и портом все равно сможет подключиться.
Описание | Любой "текст" | Отображается как описание сервера в списке серверов (если сервер публичный). Вы можете использовать специальные символы для форматирования с помощью цветов и стилей.
Имя | Любой "текст" | Отображается как имя/заголовок вашего сервера в списке серверов. Вы можете использовать специальные символы для форматирования с помощью цветов и стилей.
Карта | Допустимое местоположение на карте, например `/levels/gridmap_v2/info.json` | Карта, которую будет размещать ваш сервер. Должна быть установлена либо по умолчанию (список можно найти ниже), либо как серверный мод.
МаксКарс | Любое число ≥ 1 | Максимальное количество машин на игрока. Любые дополнительные машины, которые игрок попытается создать, будут мгновенно удалены.
Порт | 1024-65535 | Сетевой порт, на котором будет доступен сервер. Чтобы игрок мог напрямую подключиться к вашему серверу, ему понадобится ваш IP и этот порт.
Другие разделы могут и должны использоваться серверными плагинами (скоро появится API Lua), например: `[MyMod]` .
AuthKey **ДОЛЖЕН** быть установлен вами. Он будет пустым по умолчанию и должен быть заполнен вашим AuthKey с шага установки ранее. Не делитесь этим ключом ни с кем и на снимках экрана полностью размывайте его.
### Все названия ванильных карт
Вот все карты акций:
- /levels/gridmap_v2/info.json
- /levels/johnson_valley/info.json
- /levels/automation_test_track/info.json
- /levels/восточное_побережье_США/info.json
- /levels/hirochi_raceway/info.json
- /уровни/италия/info.json
- /levels/jungle_rock_island/info.json
- /уровни/промышленный/info.json
- /levels/маленький_остров/info.json
- /уровни/smallgrid/info.json
- /levels/юта/info.json
- /levels/западное_побережье_США/info.json
- /уровни/обучениеодителей/info.json
- /levels/derby/info.json
### Настройте внешний вид имени вашего сервера
Используйте эти специальные символы перед текстом, и к этому тексту в списке серверов будет применен эффект:
Ценить | Описание
:-: | ---
`^r` | Перезагрузить
`^p` | Новая строка (только описания)
`^n` | Подчеркнуть
`^l` | Смелый
`^m` | Зачеркивание
`^o` | Курсив
`^0` | Черный
`^1` | Синий
`^2` | Зеленый
`^3` | светло-голубой
`^4` | Красный
`^5` | Розовый
`^6` | Апельсин
`^7` | Серый
`^8` | Темно-серый
`^9` | Светло-фиолетовый
`^a` | Светло-зеленый
`^b` | светло-голубой
`^c` | Темно-оранжевый
`^d` | светло-розовый
`^e` | Желтый
`^f` | Белый
### Настройте теги вашего сервера
Теги могут использоваться для того, чтобы позволить людям искать определенный тип сервера. Ваш serverConfig.toml будет сгенерирован с тегом freeroam `Tags = "Freeroam"` .
Вы можете добавить несколько тегов, разделенных запятой `Tags = "Events,Offroad,lang:english"` , регистр не учитывается.
Вы можете выбрать из следующего списка:
- Возраст/Содержание:
- `Mature/18+`
- Типы игрового процесса:
- `Freeroam`
- `Roleplay`
- `Economy`
- `Traffic`
- Категории гонок:
- `Racing`
- `Racing:NASCAR`
- `Racing:Track`
- `Racing:Drag`
- `Racing:Rally`
- `Touge`
- Бездорожье и испытания:
- `Offroad`
- `Crawling`
- `Dakar`
- `Challenge`
- События разрушения:
- `Derby`
- `Arena`
- Погодные и временные условия:
- `Snow/Ice`
- `Rain`
- `Night`
- `Weather`
- Режимы игры:
- `Gamemode`
- `Gamemode:Racing`
- `Gamemode:Rally`
- `Gamemode:Drag`
- `Gamemode:Derby`
- `Gamemode:Infection`
- `Gamemode:Cops-Robbers`
- `Gamemode:Delivery`
- `Gamemode:Sumo`
- Сообщество и события:
- `Scenarios`
- `Events`
- `Leaderboard`
- Модификации:
- `Modded`
- `Mod:BeamPaint`
- `Mod:BeamJoy`
- `Mod:CEI`
- Языки:
- `Lang:English`
- `Lang:Russian`
- `Lang:French`
- `Lang:Spanish`
- `Lang:Portuguese`
- `Lang:German`
- `Lang:Polish`
- `Lang:Arabic`
- Другой:
- `Vanilla`
- `Moderated`
Если тег отсутствует в этом списке, вы можете отправить запрос на его добавление [здесь.](https://forum.beammp.com/t/introducing-server-tags/1320081)
## Файл Server.log
Этот файл будет сгенерирован при запуске сервера. Это зеркало сообщений, которые вы видите в консоли при запуске сервера. Вам следует прикреплять этот файл каждый раз, когда вам нужна поддержка от нашей службы поддержки, и он никогда не покажет ваш AuthKey, поэтому вы обычно можете отправить его без изменений.
Формат следующий (префикс $ означает «переменная», пояснение ниже):
```
[$DATE $TIME] $CONTEXT [$LOG_LEVEL] $MESSAGE
```
Где:
- `$DATE` — дата сообщения, например 21/07/2021
- `$TIME` — время сообщения, например 11:05:23
- `$CONTEXT` (виден только в режиме отладки и в основном актуален для разработчиков) — контекст сообщения, который может быть:
- `(Player ID) “Player Name”` , где ID игрока полезен для модерации
- Короткое имя, например «HeartbeatThread»
- `$LOG_LEVEL` — один из уровней важности сообщения:
- `DEBUG` : отображается только в режиме отладки, обычно является спамом и важен только для разработчиков.
- `INFO` : Общая информация
- `LUA` : Сообщение от плагина Lua
- `WARN` : Описывает то, что не должно происходить, обычно
- `ERROR` : Что-то пошло не так или произошло очень неожиданно.
- `FATAL` : Произошло что-то, что привело к отключению сервера.
- `$MESSAGE` само сообщение, обычно то, на что следует обратить внимание и что следует понять. В некоторых случаях это может быть зашифровано, но общее правило заключается в том, что пока нет видимых проблем с сервером и нет ОШИБОК, все хорошо.
## Обновление сервера
### Зачем обновлять
Всякий раз, когда выходит новое обновление, вам рекомендуется обновить свой сервер. Обычно это включает исправления ошибок, улучшения стабильности и безопасности, наряду с общими новыми функциями и т. д., которые вводятся.
Чтобы получать новости об обновлениях по мере их выхода, подпишитесь на канал «обновления» сервера Discord, ищите его на форумах или посетите/спросите на [странице релизов GitHub](https://github.com/BeamMP/BeamMP-Server/releases) .
### Как обновить
#### Если вы пользуетесь услугами хостинг-провайдера, являющегося партнером BeamMP
Если вы используете хостинг-провайдера, партнера BeamMP, инструкции ниже, скорее всего, не сработают. Мы рекомендуем дождаться более подробной информации от вашего хостинг-провайдера или связаться с ним для получения помощи.
#### Самостоятельное управление сервером
Сервер обновляется путем замены старого исполняемого файла на новый. Если вы не уверены, как это сделать, ниже приведены пошаговые инструкции для Windows и Linux.
Если вы собрали из исходников, просто пересоберите. Убедитесь, что выполнили `git submodule update --init --recursive` перед пересборкой.
#### В Windows
1. Для запуска сервера убедитесь, что у вас установлены [распространяемые компоненты Visual C++](https://aka.ms/vs/17/release/vc_redist.x64.exe) .
2. Перейдите на [BeamMP.com](https://beammp.com/) и нажмите кнопку «Загрузить сервер».
3. После загрузки вы должны увидеть один файл с именем `BeamMP-Server.exe` . Мы назовем его «новый исполняемый файл».
4. Перейдите в папку, где находится ваш текущий исполняемый файл `BeamMP-Server.exe` (обычно это та же папка, где находится ваш `ServerConfig.toml` ). Мы будем называть его «старым исполняемым файлом».
5. Замените старый исполняемый файл новым исполняемым файлом (например, скопировав или переместив новый исполняемый файл в папку).
#### На Линуксе
1. Перейдите на [BeamMP.com](https://beammp.com/) и нажмите кнопку «Загрузить сервер», вы будете перенаправлены на страницу релиза сервера на Github.
2. Загрузите правильную версию для вашего дистрибутива. Для простоты теперь он будет называться `BeamMP-Server-xxx` , где `xxx` обозначает версию для используемого вами дистрибутива.
3. После загрузки вы должны увидеть один файл с именем `BeamMP-Server-xxx` в зависимости от версии, которую вы скачали. Мы назовем его «новый исполняемый файл».
4. Перейдите в папку, где находится ваш текущий исполняемый файл `BeamMP-Server-xxx` (обычно это та же папка, где находится ваш `ServerConfig.toml` ). Мы будем называть его «старым исполняемым файлом».
5. Замените старый исполняемый файл новым исполняемым файлом (например, скопировав или переместив новый исполняемый файл в папку).
6. Откройте терминал в той папке, где вы только что заменили исполняемый файл, и выполните `sudo chmod +x BeamMP-Server-xxx` . Это позволит убедиться, что сервер может быть запущен.
### Автоматические обновления
Сервер не поддерживает автоматические обновления или уведомления об обновлениях (пока).
Однако вы можете запросить API GitHub для получения последней версии, проверив версию сервера по тегам. Вы можете получить это с помощью GET из `https://api.github.com/repos/BeamMP/BeamMP-Server/git/refs/tags` .