Merge branch 'main' into gitlocalize-35558
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 5.8 MiB |
|
After Width: | Height: | Size: 1.8 MiB |
|
After Width: | Height: | Size: 4.8 MiB |
|
After Width: | Height: | Size: 4.8 MiB |
|
After Width: | Height: | Size: 4.8 MiB |
@@ -0,0 +1,38 @@
|
||||
## Warum muss ich meine Mods deaktivieren?
|
||||
|
||||
In BeamMP stellt der Server, mit dem du dich verbindest, die notwendigen Mods bereit. Diese werden beim Verbinden automatisch heruntergeladen und aktiviert. Sind lokale Mods installiert und aktiviert, funktioniert BeamMP oft nicht richtig, selbst wenn du nur einen zusätzlichen Mod neben BeamMP hast.
|
||||
|
||||
!!! warning
|
||||
|
||||
Entferne alle Mods, die du im Ordner BeamNG.Drive\content\ oder in Unterordnern abgelegt hast. Dieser Speicherort ist NICHT für die Installation von Mods vorgesehen und kann zu Problemen führen, wie in der Datei `DO_NOT_INSTALL_MODS_HERE.txt` im selben Verzeichnis beschrieben.
|
||||
|
||||
!!! quote "DO_NOT_INSTALL_MODS_HERE.txt"
|
||||
|
||||
Kopiere KEINE Mods in diesen Ordner: Dies kann zu beschädigten Mods, einer langsameren Installation von Updates, einem beschädigten Mod-Manager, einem beschädigten abgesicherten Modus und anderen Problemen führen.
|
||||
|
||||
## Wie deaktiviere/entferne ich meine Mods?
|
||||
|
||||
Es gibt drei Möglichkeiten, mögliche Probleme bei der Verwendung von BeamMP zu lösen.
|
||||
|
||||
### 1. Mods deaktivieren
|
||||
|
||||
Bevor du einem Server beitrittst, stelle sicher, dass du außer „multiplayerbeammp“ keine Mods aktiviert hast. Wenn das Spiel einfriert oder weiterhin Probleme auftreten, probiere den nächsten Schritt.
|
||||
|
||||
### 2. Erstellen eines neuen Benutzerordners
|
||||
|
||||
Öffne den Benutzerordner von BeamNG.Drive und benenne den Ordner der neuesten Version (z. B. 0.35) um, z. B. in 0.xx_OLD (0.35_OLD). Schließe BeamNG.drive, bevor du ihn umbenennst.<br>
|
||||
|
||||
### 3. Entfernen von Mods aus dem content Ordnern.
|
||||
|
||||
Um auf den Ordner Beamng.drive\content\ zuzugreifen und ihn von allen Mods zu bereinigen, öffne den Installationsort von BeamNG.drive. Klicke mit der rechten Maustaste auf den Ordner `content` und lösche ihn. Überprüfe anschließend die Spieldateien über Steam oder Epic Games. Dadurch werden die Dateien erneut heruntergeladen.
|
||||
|
||||
Starte anschließend BeamNG.Drive über den BeamMP-Launcher. Im Repository sollte „multiplayerbeammp“ als einziger aktivierter Mod verfügbar sein. Im Hauptmenü findest du außerdem die Schaltfläche zum Aufrufen von BeamMP. Solltest du weiterhin Probleme beim Beitritt zu gemoddeten Servern haben, liegen wahrscheinlich defekte/veraltete Mods vor.
|
||||
|
||||
### 4. BeamMP-Launcher Cache bereinigen
|
||||
|
||||
Um zwischengespeicherte Mods aus den BeamMP-Verzeichnissen zu entfernen, gehe zum Installationsort deines BeamMP-Launchers. Standardmäßig lautet der Pfad „C:\Benutzer\AppData\BeamMP-Launcher“. Dort findest du den Ordner „Ressourcen“. Lösche diesen Ordner, um alle zwischengespeicherten Mods zu löschen. Dies kann hilfreich sein, wenn du mehr Speicherplatz auf deiner Festplatte benötigst oder veraltete BeamNG-Mods entfernen möchtest.
|
||||
|
||||
!!! question "Meine Einstellungen und Konfigurationen sind weg! Wie kann ich sie wiederherstellen?"
|
||||
|
||||
Wenn du den Benutzerordner umbenannt hast, wurde das Spiel gezwungen, einen neuen, sauberen Benutzerordner zu erstellen. Du kannst die beiden Ordner „Einstellungen“ und „Fahrzeuge“ aus dem umbenannten Ordner (z. B. 0.34_OLD) in den neu erstellten Ordner kopieren.
|
||||
Stelle sicher, dass BeamNG.Drive geschlossen ist, und ersetze alle Elemente am Zielort. Alle Konfigurationen und Einstellungen sollten nun wiederhergestellt sein.
|
||||
@@ -5,13 +5,10 @@ hide:
|
||||
|
||||
!!! warning "Diese Seite befindet sich im Aufbau!"
|
||||
|
||||
```
|
||||
Diese Seite steht unter aktiver Bearbeitung.
|
||||
Diese Seite steht unter aktiver Bearbeitung.
|
||||
Denkst du, dass du helfen könntest? Das kannst du tun, indem du auf das Editier Symbol auf der rechten Seite klickst!
|
||||
Das trifft auch auf alle anderen Seiten zu.
|
||||
|
||||
Denkst du, dass du helfen könntest? Das kannst du tun, indem du auf das Editier Symbol auf der rechten Seite klickst!
|
||||
|
||||
Das trifft auch auf alle anderen Seiten zu.
|
||||
```
|
||||
|
||||
# Willkommen bei BeamMP Docs! :tada:
|
||||
|
||||
@@ -30,3 +27,7 @@ Du möchtest deinen eigenen BeamMP-Server erstellen? Unsere umfassende Anleitung
|
||||
Erfahre alles Wissenswerte zur Erstellung von Ressourcen für den BeamMP-Server in unserer [Anleitung zur Ressourcenentwicklung](../guides/mod-creation/server/getting-started.md).
|
||||
|
||||
Aufregende Updates stehen bevor, einschließlich einer brandneuen Homepage, die entwickelt wurde, um dein Browsing-Erlebnis zu verbessern. Bleib dran für weitere Neuigkeiten! :slight_smile:
|
||||
|
||||
## Community Regeln
|
||||
|
||||
Lies dir die [Community-Regeln](https://docs.beammp.com/community/rules/) von BeamMP durch und informiere dich darüber, wie du gegen Bans Einspruch einlegen kannst.
|
||||
|
||||
@@ -28,20 +28,17 @@ Das Aufsetzen besteht aus folgenden Schritten. Du solltest alle davon durchgehen
|
||||
|
||||
!!! info
|
||||
|
||||
Wenn du auf einem VPS (Virtual Private Server), Rotoserver bist, oder planst einen Server lokal zu hosten (mit Spielern im selben Haus wie du), kannst du diesen Schritt überspringen.
|
||||
Dieser Schritt ist jedoch notwendig, wenn Spieler **außerhalb** deines Haushaltes deinem heim-gehosteten Server beitreten sollen (außerhalb von deinem lokalen Netzwerk)
|
||||
Wenn du auf einem VPS (Virtual Private Server), Rotoserver bist, oder planst einen Server lokal zu hosten (mit Spielern im selben Haus wie du), kannst du diesen Schritt überspringen.
|
||||
Dieser Schritt ist jedoch notwendig, wenn Spieler **außerhalb** deines Haushaltes deinem heim-gehosteten Server beitreten sollen (außerhalb von deinem lokalen Netzwerk)
|
||||
|
||||
!!! danger ":material-scale-balance: ACHTUNG:"
|
||||
!!! danger ":material-scale-balance: ACHTUNG:"
|
||||
**Port forwarding ist ein Risiko**.
|
||||
Wenn du Ports weiterleitest, sind dir die Risiken beim öffnen von Ports von deinem Heimnetz ins öffentliche Netz bewusst und verlierst das Recht, BeamMP für **jegliche Schäden**, welche deinem Haushalt passieren könnten, Haften zu lassen.
|
||||
Wir übernehmen keine Haftung für jegliche extern gelinkten Dienste oder Webseiten.
|
||||
|
||||
**Port forwarding ist ein Risiko**.
|
||||
Es wird daher empfohlen, BeamMP Server mit einen unserer Partner Hosting Services zu hosten.
|
||||
|
||||
Wenn du Ports weiterleitest, sind dir die Risiken beim öffnen von Ports von deinem Heimnetz ins öffentliche Netz bewusst und verlierst das Recht, BeamMP für **jegliche Schäden**, welche deinem Haushalt passieren könnten, Haften zu lassen.
|
||||
|
||||
Wir übernehmen keine Haftung für jegliche extern gelinkten Dienste oder Webseiten.
|
||||
|
||||
Es wird daher empfohlen, BeamMP Server mit einen unserer Partner Hosting Services zu hosten.
|
||||
|
||||
*Sieh dir [diese Anleitung zum Port weiterleiten](port-forwarding.md) an*
|
||||
*Sieh dir [diese Anleitung zum Port weiterleiten](port-forwarding.md) an*
|
||||
|
||||
#### Partner Hosting Services (bezahlt):
|
||||
|
||||
@@ -49,13 +46,16 @@ Das Aufsetzen besteht aus folgenden Schritten. Du solltest alle davon durchgehen
|
||||
- [RackGenius](https://rackgeni.us/beammp-plans)
|
||||
- [Connect Hosting](https://connecthosting.net/beammp)
|
||||
- [Assetto Hosting](https://assettohosting.com/en/games/beamng)
|
||||
- [Zap Hosting](https://zap-hosting.com/en/beammp-server-hosting/)
|
||||
- [ZAP-Hosting](https://zap-hosting.com/itsbeammp)
|
||||
- [HostHavoc](https://hosthavoc.com/)
|
||||
- [PedalHost](https://pedal.host/)
|
||||
- [Vyper Hosting](https://vyperhosting.com/r/beammp)
|
||||
- [BisectHosting](https://www.bisecthosting.com/beammp-server-hosting)
|
||||
- [Four Seasons Hosting](https://fourseasonshosting.com)
|
||||
- [Vertuo Hosting](https://vertuohosting.com)
|
||||
- [Winheberg](https://winheberg.fr/offres/gaming/beammp?lang=en)
|
||||
- [Wabbanode](https://wabbanode.com/partner/beammp)
|
||||
- [Iceline Hosting](https://iceline-hosting.com/games/beammp)
|
||||
|
||||
#### 1.1 Firewall
|
||||
|
||||
@@ -63,7 +63,7 @@ Abhängig von deinem Setup musst du den BeamMP-Server möglicherweise durch die
|
||||
|
||||
Dort lässt du den BeamMP-Server durch die Firewall, **sowohl eingehende als auch ausgehende Verbindungen** sowie **TCP und UDP** . Falls die Firewall stattdessen nach einem Port fragt, muss dieser derselbe sein, den du in Schritt „1. Portweiterleitung“ verwendet hast (standartmäßig 30814).
|
||||
|
||||
Solltest du Probleme haben, frage auf unserem [Forum](https://forum.beammp.com) oder auf unserem [Discord server](https://discord.gg/beammp) im `#support` Kanal.
|
||||
Eine detailliertere Anleitung findest du unter [dieser Dokumentationsseite](https://docs.beammp.com/FAQ/Defender-exclusions/) . Bei Problemen kannst du dich an unser [Forum](https://forum.beammp.com) oder auf unseren [Discord-Server](https://discord.gg/beammp) im Kanal `#support` an uns wenden.
|
||||
|
||||
### **2. Authentifizierungsschlüssel**
|
||||
|
||||
@@ -73,40 +73,41 @@ Der Authentifizierungsschlüssel, auch “Authentication Key” oder “AuthKey
|
||||
|
||||
TEILE ODER ZEIGE DEN SCHLÜSSEL NICHT. BEHANDLE IHN WIE EIN PASSWORT.
|
||||
|
||||
|
||||
Um einen Schlüssel zu erwerben ist ein [Discord](https://discord.com) Konto erforderlich. Das ist wichtig um gegen Spam zu schützen.
|
||||
|
||||
#### 2.1. Die Schlüssel-Übersicht öffnen
|
||||
|
||||
Melde dich mit Discord beim [Keymaster](https://beammp.com/keymaster) an. Klicke auf der Keymaster-Homepage links auf dem Bildschirm auf „Keys“:
|
||||
Melde dich mit Discord bei [Keymaster](https://keymaster.beammp.com) an. Klicke auf der Keymaster-Startseite links auf „Schlüssel“.
|
||||
|
||||
|
||||
<figure markdown></figure>
|
||||
<figure markdown=""></figure>
|
||||
|
||||
#### 2.2. Einen Schlüssel erstellen
|
||||
|
||||
Um einen Schlüssel zu erstellen, klicke das grüne ,,+" oben rechts.
|
||||
|
||||
|
||||
<figure markdown></figure>
|
||||
<figure markdown=""></figure>
|
||||
|
||||
#### 2.3. Schlüssel-Informationen eingeben
|
||||
|
||||
Als nächstes, fülle das Feld für den Servernamen (das ist lediglich der Name des Schlüssels, nicht der Name vom Server in der Liste), dann klick ,,Create".<br>Beispiel:
|
||||
|
||||
|
||||
<figure class="image image_resized" style="width:44.84%;" markdown></figure>
|
||||
<figure class="image image_resized" style="width:44.84%;" markdown=""></figure>
|
||||
|
||||
es sollte am Ende wie folgt aussehen:
|
||||
|
||||
|
||||
<figure markdown></figure>
|
||||
<figure markdown=""></figure>
|
||||
|
||||
#### 2.4. Den Schlüssel kopieren
|
||||
|
||||
Kopiere den Text im “Key” Feld. In diesem Beispiel wäre das `3173a2e-6az0-4542-a3p0-ddqq5ff95558`. Klicke das ,,Klemmbrett Symbol" neben dem Schlüssel um diesen zu kopieren.
|
||||
|
||||
|
||||
<figure markdown></figure>
|
||||
<figure markdown=""></figure>
|
||||
|
||||
### **3. Installation**
|
||||
|
||||
@@ -153,31 +154,40 @@ Führe zum Abschluss den Server unbedingt einmal mit `./BeamMP-Server` aus und f
|
||||
Nachdem der Server einmal gestartet wurde, sollte er die nötigen Dateien erstellt haben und einen oder zwei Fehler in die Konsole schreiben. Das ist normal, da wir noch nicht fertig sind.<br>Es sollten nun folgende Dateien vorhanden sein:
|
||||
|
||||
|
||||
<figure markdown></figure>
|
||||
<figure markdown=""></figure>
|
||||
|
||||
Genannt ,,ServerConfig.toml”, ,,Server.log” und ,,BeamMP-Server.exe”! (Je nach deinen Einstellungen, siehst du möglicherweise die [.toml] [.log] [.exe] Erweiterungen nicht)
|
||||
|
||||
Öffne die `ServerConfig.toml` mit einem Texteditor wie zum Beispiel `Notepad` . Dies kannst du mit **[Rechtsklick] → „Öffnen mit…“** und anschließender Auswahl eines Texteditors tun.
|
||||
|
||||
Die Datei sollte ungefähr so aussehen
|
||||
Hier ist eine Beispielkonfiguration:
|
||||
|
||||
```TOML
|
||||
[General]
|
||||
AuthKey = ''
|
||||
Debug = false
|
||||
Description = 'BeamMP Default Description'
|
||||
Map = '/levels/gridmap_v2/info.json'
|
||||
MaxCars = 1
|
||||
MaxPlayers = 10
|
||||
Name = 'BeamMP Server'
|
||||
Port = 30814
|
||||
Private = false
|
||||
ResourceFolder = 'Resources'
|
||||
AuthKey = "auth-key"
|
||||
AllowGuests = false
|
||||
LogChat = false
|
||||
Debug = false
|
||||
IP = "::"
|
||||
Private = true
|
||||
InformationPacket = true
|
||||
Name = "Test Server"
|
||||
Tags = "Freeroam,Modded,Racing,Police"
|
||||
MaxCars = 2
|
||||
MaxPlayers = 10
|
||||
Map = "/levels/ks_nord/info.json"
|
||||
Description = "Total Random Beam MP Server"
|
||||
ResourceFolder = "Resources"
|
||||
```
|
||||
|
||||
Dies ist deine Konfigurationsdatei. Diese verwendet das Format TOML. Weitere Informationen zu dieser Datei findest du im Abschnitt [Serverwartung](server-maintenance.md) .
|
||||
!!! info
|
||||
|
||||
Als erstes kümmern wir uns um den `AuthKey`. Dazu muss der Schlüssel zwischen die Anführungszeichen `" "` eingefügt werden.
|
||||
Dies ist deine Konfigurationsdatei. Sie verwendet das Format TOML. Weitere Informationen zu dieser Datei und den Variablen findest du im Abschnitt [Serverwartung](server-maintenance.md).
|
||||
Der Server wird **NICHT** in der Serverliste angezeigt, solange `Private = true` eingestellt ist. _Wenn_ er in der Liste angezeigt werden soll, setze die Einstellung auf **`Private = false`**.
|
||||
|
||||
|
||||
Fürs Erste ist nur das Feld `AuthKey` relevant. Zwischen den Anführungszeichen `''` fügt man den AuthKey ein, den du im ersten Schritt kopiert hast.
|
||||
|
||||
Für unser Beispiel sollte der Eintrag so aussehen:
|
||||
|
||||
@@ -185,14 +195,10 @@ Für unser Beispiel sollte der Eintrag so aussehen:
|
||||
AuthKey = '3173a2e-6az0-4542-a3p0-ddqq5ff95558'
|
||||
```
|
||||
|
||||
Vergib deinem Server einen Namen im `Name` Feld. Du kannst diesen mit Farben und mehr formatieren. Siehe [diese Sesktion](server-maintenance.md#customize-the-look-of-your-server-name) auf der Server-Wartungsseite.
|
||||
Gib dem Server im Feld `Name` ebenfalls einen Namen. Du kannst diesen mit Farben und weiteren Optionen formatieren. Weitere Informationen findest du [im Abschnitt „Namensanpassung“](server-maintenance.md#customize-the-look-of-your-server-name) auf der Serververwaltungsseite.
|
||||
|
||||
Wenn du einen anderen **Port** als **30814** ausgewählt hast, achte darauf, ihn hier unter `Port` zu ersetzen.
|
||||
|
||||
!!! info
|
||||
|
||||
Dein Server wird **NICHT** in der Serverliste erscheinen, solange `Private = true` ist. _Wenn_ du ihn gelistet haben willst, stell den Parameter auf **`Private = false`**.
|
||||
|
||||
### **5. Validierung**
|
||||
|
||||
Nun führe den Server erneut aus und sieh nach, ob weitere `[ERROR]` oder `[WARN]` Meldungen erscheinen. Der Server sollte nun offen bleiben. In den folgenden Schritten (6.) erfährst du, wie man dem Server beitritt.
|
||||
@@ -201,7 +207,12 @@ Nun führe den Server erneut aus und sieh nach, ob weitere `[ERROR]` oder `[WARN
|
||||
|
||||
#### 5.1 Wie man dem Server Mods hinzufügt
|
||||
|
||||
Fahrzeug und Map Mods werden unterschiedlich im Server installiert, müssen aber beide im Ordner (`Resources/Client`) abelegt werden. Alle Mods die hinzugefügt werden sollen kommen in diesen Ordner.
|
||||
Fahrzeug- und Karten-Mods werden unterschiedlich installiert, müssen aber beide im Serverordner ( `Resources/Client` ) abgelegt werden. Ziehe einfach die gewünschten Mods in diesen Ordner.
|
||||
|
||||
!!! warning
|
||||
|
||||
Solltest du beim Versuch, deinem Server nach dem Hinzufügen von Mods beizutreten, die Meldung „Fertig“ oder „Start“ erhalten, hast du wahrscheinlich eine inkompatible oder fehlerhafte Mod dem Server hinzugefügt.
|
||||
Inkompatibilitäten zwischen zwei oder mehr Mods können ebenfalls auftreten. Falls du Client-Mods installiert hast, lies bitte [diese Anleitung](../../FAQ/How-to-deactivate-mods.md) zum Entfernen von Mods aus deinem Spiel.
|
||||
|
||||
#### 5.2 Allgemeine Mods
|
||||
|
||||
@@ -209,7 +220,7 @@ Wenn du nur modifizierte Fahrzeuge hinzufügen möchtest, lege die Zip-Datei der
|
||||
|
||||
#### 5.3 Karten
|
||||
|
||||
Alle Standardkarten (Karten, die keine Mods sind) funktionieren sofort und müssen nicht installiert werden. Ändere einfach die `Map` in der `ServerConfig.toml` Datei auf eine der [folgenden Optionen](server-maintenance.md#all-vanilla-maps-names) . Für alle anderen modifizierten Karten geht man wie folgt vor:
|
||||
Alle Standardkarten (Karten, die keine Mods sind) funktionieren sofort und müssen nicht installiert werden. Ändere einfach die `Map` in der Datei `ServerConfig.toml` auf eine der [folgenden Optionen](server-maintenance.md#all-vanilla-maps-names) . Für alle anderen modifizierten Karten gehe wie folgt vor:
|
||||
|
||||
1. Legen die `.zip` Datei der Karte in den Ordner `Resources/Client` des Servers.
|
||||
2. Sieh dir als Nächstes in die Zip-Datei der Karte (entpacke sie nicht) und öffne den Ordner „ `levels` “. In diesem Ordner sollte sich lediglich ein weiterer Ordner mit dem Namen der Karte befinden, zum Beispiel „myawesomedriftmap2021“. Achte darauf, diesen Namen *genau so zu kopieren oder zu merken, wie er im Namen dieses Ordners geschrieben ist.*
|
||||
@@ -243,18 +254,30 @@ Du musst anderen Spielern die öffentliche IP Adresse des Servers geben. Sei jed
|
||||
|
||||
#### 6.c. Andere Spieler treten deinem öffentlichen Server bei
|
||||
|
||||
Um deinem öffentlichen Server beizutreten, gehe zur Server Liste und gib den Namen des Servers ein und klicke ,,Connect". Wenn du dir nicht sicher über den Namen des Server bist, es wird der Name sein, welchen du in der `ServerConfig.toml` festlegst. Stelle sicher dass Suchfilter deaktiviert sind und dass die Karte auf "Any" gesetzt ist, wenn du ihn nicht findest. Du kannst auch die [Keymaster](https://beammp.com/keymaster) Webseite für die IP des Servers prüfen.
|
||||
Um einem öffentlichen Server beizutreten, können Benutzer einfach die Serverliste aufrufen, den Servernamen eingeben und auf „Verbinden“ klicken. Falls du/sie den Servernamen nicht kennen, findest du ihn in der Datei `ServerConfig.toml` . Sollte niemand den Server nicht finden, stelle sicher, dass die Suchfilter deaktiviert und die Zuordnung auf „Beliebig“ eingestellt ist. Die IP-Adresse des Servers findest du auch auf der Website von [Keymaster](https://keymaster.beammp.com/) .
|
||||
|
||||
Sollten du oder deine Freunde einen ,,Verbindung Fehlgeschlagen!" Fehler bekommen, prüfe das Launcher Fenster auf Codes wie 10060, 10061 oder 10030. Das bedeutet, dass du entweder eine CGNAT IPv4 hast, oder du hast etwas bei Schritt **1 Port Forwarding** oder **1.1. Firewall** falsch gemacht. Um zu prüfen ob du eine CGNAT IPv4 hast, finde die WAN IP Adresse im Router Interface. Vergleiche diese mit deiner [öffentlichen IP](https://www.whatsmyip.org/). Wenn diese gleich sind, hast du keine CGNAT IP. IPv6 Support ist noch **NICHT** implementiert.
|
||||
|
||||
### **7. So überprüft man die Verbindung deines BeamMP-Servers**
|
||||
|
||||
Gib unten die öffentliche IPv4-Adresse und den Port des Servers ein und klicke dann auf „CheckBeamMP“.
|
||||
|
||||
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
|
||||
<label for="ip">IP Adresse:</label>
|
||||
<input type="text" id="ip" name="ip"><br>
|
||||
<label for="port">Port:</label>
|
||||
<input type="text" id="port" name="port"><br>
|
||||
<input type="submit" value="CheckBeamMP">
|
||||
</form>
|
||||
|
||||
!!! warning "Ich möchte einen VPN wie RadminVPN, Hamachi oder ähnlich verwenden"
|
||||
|
||||
BeamMP unterstützt diese VPNs nicht, weil diese oft Probleme verursachen. Eines davon ist das blockieren von UDP Verkehr. Um dies zu beheben, siehe Sektion 1.
|
||||
|
||||
!!! question "Aber warum hat es vorher funktioniert?"
|
||||
|
||||
BeamMP unterstützt diese VPNs nicht, weil diese oft Probleme verursachen. Eines davon ist das blockieren von UDP Verkehr. Um dies zu beheben, siehe Sektion 1.
|
||||
|
||||
!!! question "Aber warum hat es vorher funktioniert?"
|
||||
|
||||
Das passiert, weil die Entwickler dieser Applikationen updaten und Änderungen implementiere, über welche BeamMP keine Kontroll hat.
|
||||
Es liegt an den Entwicklern diesen Applikationen, um Support für spezifische Fälle wie eines BeamMP-Servers zu unterstützen.
|
||||
Es liegt an den Entwicklern diesen Applikationen, um Support für spezifische Fälle wie eines BeamMP-Servers zu unterstützen.
|
||||
|
||||
## Immer noch Probleme?
|
||||
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
## Why do I need to deactivate my mods?
|
||||
## Why do I have to deactivate/remove my mods?
|
||||
|
||||
In BeamMP, the Server you decide to connect to, provides the necessary mods. These get downloaded and activated automatically upon connecting.
|
||||
Having local mods installed and active often leads to BeamMP not functioning properly, even if you have just one additional mod besides BeamMP.
|
||||
|
||||
!!! warning
|
||||
|
||||
Remove any mods you have placed in the BeamNG.Drive\content\ or sub-folders. That location is NOT meant for the installing mods and can lead to issues as stated in the `DO_NOT_INSTALL_MODS_HERE.txt` file, located in the same directory.
|
||||
|
||||
!!! quote "DO_NOT_INSTALL_MODS_HERE.txt"
|
||||
|
||||
Do NOT copy mods into this folder: it can lead to broken mods, slower installation of updates, a broken mod manager, broken Safe Mode and others.
|
||||
|
||||
|
||||
## How do I deactivate/remove my mods?
|
||||
|
||||
There are 3 options to resolve possible issues when using BeamMP.
|
||||
There are 3 options to resolve possible issues caused by mods with using BeamMP.
|
||||
|
||||
### 1. Deactivate mods
|
||||
Before joining any server, make sure you have no mods besides 'multiplayerbeammp' enabled.
|
||||
If the game freezes or you still have issues, refer to the next option
|
||||
If this method does not work, for example the game freezes / shows a blackscreen, or you still have issues, refer to the next option.
|
||||
|
||||
### 2. Creating a new Userfolder
|
||||
Open the BeamNG.Drive userfolder and rename the `current` folder to for example `current_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 the folder.
|
||||
The result should be a clean new userfolder.
|
||||

|
||||
|
||||
### 3. Removing mods from the content folders.
|
||||
To access the Beamng.drive\content\ folder and clean the folder of any mods, open the installation location of BeamNG.drive.
|
||||
Right click the `content` folder and delete it. Proceed to verify the game files via Steam or Epic Games. This is going to download the files again.
|
||||
??? question "My settings and configs are gone! How can I restore them?"
|
||||
|
||||
If you have 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.
|
||||
|
||||
!!! warning "Be careful when moving back files/folders to the new userfolder.
|
||||
|
||||
If you resolved any issues by renaming the userfolder, moving back the old files may cause any issues you had to possibly re-occur.
|
||||
|
||||
After you are done, start BeamNG.Drive via the BeamMP-Launcher and you should have 'multiplayerbeammp' as your only enabled mod available in the repository as well as the button on the Main Menu to enter BeamMP.
|
||||
If you still have issues joining modded server, they likely provide broken/outdated mods.
|
||||
|
||||
### 4. Cleaning up the BeamMP-Launcher cache
|
||||
### 3. Cleaning up the BeamMP-Launcher cache.
|
||||
To clean up cached mods from the BeamMP directories, go to the installation location of your BeamMP-Launcher. By default, the path would be 'C:\Users\AppData\BeamMP-Launcher\'. In there, you will find a 'Resources' folder.
|
||||
Delete the folder to delete all cached mods. This can be helpful if you need more space on your disk or want to clean out oudated BeamNG mods.
|
||||
|
||||
!!! question "My settings and configs are gone! How can I restore them?"
|
||||
### 4. Removing mods from the content folders.
|
||||
If you have placed mods in the content folder, you should remove them.
|
||||
To access the Beamng.drive\content\ folder and clean the folder of any mods, open the installation location of BeamNG.drive.
|
||||
Right click the `content` folder and delete it. Proceed to verify the game files via Steam or Epic Games. This is going to download the base files again.
|
||||
|
||||
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.
|
||||
??? quote "DO_NOT_INSTALL_MODS_HERE.txt"
|
||||
|
||||
Do NOT copy mods into this folder: it can lead to broken mods, slower installation of updates, a broken mod manager, broken Safe Mode and others.
|
||||
@@ -12,25 +12,37 @@
|
||||
|
||||
We take no responsibility for any content on any externally linked services or websites.
|
||||
|
||||
## 1. Firewall exclusion for the BeamMP-Launcher.
|
||||
## 1. Defender Firewall exclusion for the BeamMP-Launcher.
|
||||
|
||||
1. Open the `Windows Defender Firewall with advanced setting`.
|
||||
2. In the Window, click `Inbound` to open the inbound exclusions tab.
|
||||
3. Click `Create new rule` in the top right to create a new exclusion.
|
||||
4. Select `Program` to create a program specific exclusion.
|
||||
5. Enter the full qualified path towards the `BeamMP-Launcher.exe`. By default, this would be `%appdata%\BeamMP-Launcher\BeamMP-Launcher.exe` without quotes.
|
||||
5. Enter the full qualified path towards the `BeamMP-Launcher.exe`. The default would be `%appdata%\BeamMP-Launcher\BeamMP-Launcher.exe` (without quotes).
|
||||
6. Make sure to allow the connection
|
||||
7. Give the exclusion a name (e.g. "BeamMP-Launcher") and save it.
|
||||
8. Restart your PC.
|
||||
9. Restart your PC.
|
||||
|
||||
## 2. Antivirus exclsuion for the BeamMP-Launcher.
|
||||
## 1.1 Defender Firewwall exclusion for the BeamMP-Server.
|
||||
|
||||
1. Open the `Windows Defender Firewall with advanced setting`.
|
||||
2. In the Window, click `Inbound` to open the inbound exclusions tab.
|
||||
3. Click `Create new rule` in the top right to create a new exclusion.
|
||||
4. Select `Port` to create a program specific exclusion.
|
||||
5. Enter the same port as in the ServerConfig.toml.
|
||||
6. Enter the full qualified path towards the `BeamMP-Server.exe`. The file is located whereever you placed it after downloading it.
|
||||
7. Make sure to allow the connection
|
||||
8. Give the exclusion a name (e.g. "BeamMP-Server") and save it.
|
||||
9. Restart your PC.
|
||||
|
||||
## 2. Defender Antivirus exclsuion for the BeamMP-Launcher/Server.
|
||||
|
||||
1. Open the `Windows Security` app.
|
||||
2. Click the first item `virus and threat protection`.
|
||||
3. Click `Manage settings` beneath "Virus & threat protection settings".
|
||||
4. Scroll down to navigate to the `Exclusions` tab.
|
||||
5. There, click 'Add an exclusion' and select `process`.
|
||||
6. Enter `BeamMP-Launcher.exe` into the field and save it.
|
||||
6. Enter `BeamMP-Launcher.exe` or `BeamMP-Server.exe`into the field and save it.
|
||||
7. Restart your PC.
|
||||
|
||||
## Still facing issues?
|
||||
|
||||
@@ -10,10 +10,11 @@ List of commonly asked questions.
|
||||
There is a full guide on how to install BeamMP on Windows, you can find it [here](https://docs.beammp.com/game/getting-started/).
|
||||
|
||||
---
|
||||
### **Does BeamMP work on a cracked version of BeamNG?**
|
||||
### **Does BeamMP work with pirated / modified versions of BeamNG?**
|
||||
|
||||
BeamMP will not work with pirated or outdated versions of BeamNG.drive.
|
||||
The BeamMP support team does not offer support for issues with pirated / outdated copies.
|
||||
Modifications such as, but not limited to, 3rd party mods, may interfere with BeamMP. (See [How to clear mods](https://github.com/Protogen187/Docs/blob/main/docs/en/FAQ/Clearing-mods.md))
|
||||
The BeamMP support team is unable to provide support for issues related to: pirated, outdated or otherwise modified versions of BeamNG.drive.
|
||||
|
||||
---
|
||||
### **Does BeamMP work on linux?**
|
||||
@@ -23,7 +24,7 @@ The Client is not officially supported on Linux. However, you can follow our [gu
|
||||
---
|
||||
### **Why is the launcher flagged by my antivirus or by Windows Defender**
|
||||
|
||||
Some antivirus programs may flag BeamMP as a threat, due to it interacting with the network and other stuff. There are **no viruses** in any of the code. The code for the launcher, server, and lua client can be found on our [GitHub](https://github.com/BeamMP).
|
||||
Some antivirus programs may flag BeamMP as a threat, due to it interacting with the network and other factors. There are **no viruses** in any of the code. The code for the launcher, server, and lua client can be found on our [GitHub](https://github.com/BeamMP).
|
||||
|
||||
---
|
||||
### **I have poor gameplay performance, what should I do?**
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
!!! warning "This site is under construction!"
|
||||
|
||||
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.
|
||||
|
||||
# BeamNG.drive CEF Code Snippets
|
||||
|
||||
to-do
|
||||
@@ -0,0 +1,275 @@
|
||||
!!! warning "This site is under construction!"
|
||||
|
||||
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.
|
||||
|
||||
# BeamNG.drive CSS Code Snippets
|
||||
|
||||
## Common variables
|
||||
|
||||
=== "BeamNG CEF Orange"
|
||||
|
||||
```css
|
||||
var(--bng-orange) /*Common orange*/
|
||||
var(--bng-orange-shade1) /*70% opacity*/
|
||||
var(--bng-orange-shade2) /*40% opacity*/
|
||||
var(--bng-orange-shade1opaque)
|
||||
var(--bng-orange-shade2opaque)
|
||||
```
|
||||
|
||||
=== "Monochrome"
|
||||
|
||||
```css
|
||||
--- Monochrome
|
||||
var(--bng-black-8) /*80% opacity (duplicate --bng-black-o8)*/
|
||||
var(--bng-black-6) /*60% opacity (duplicate --bng-black-o6)*/
|
||||
var(--bng-black-4) /*40% opacity (duplicate --bng-black-o4)*/
|
||||
var(--bng-black-2) /*20% opacity (duplicate --bng-black-o2)*/
|
||||
|
||||
var(--dark-neutral-grey)
|
||||
var(--neutral-grey)
|
||||
var(--light-neutral-grey)
|
||||
var(--dark-grey)
|
||||
var(--dark-grey-alpha) /*80% opacity*/
|
||||
|
||||
var(--black-1) /*70% opacity*/
|
||||
var(--black-2) /*40% opacity (duplicate --bng-black-o4)*/
|
||||
|
||||
var(--white-1) /*80% opacity*/
|
||||
var(--white-2) /*40% opacity*/
|
||||
var(--white-3) /*20% opacity*/
|
||||
```
|
||||
|
||||
=== "BeamNG Vue UI Color Palette"
|
||||
|
||||
All of these support adding `-rgb` to the end of the variable name to convert them to raw red, green, blue values. Use -rgb like so: `rgba(var(--bng-orange-500-rgb), 0.5)` for 50% opacity bng-orange-500.
|
||||
|
||||
=== "Add Red"
|
||||
|
||||
```css
|
||||
var(--bng-add-red-50)
|
||||
var(--bng-add-red-100)
|
||||
var(--bng-add-red-200)
|
||||
var(--bng-add-red-300)
|
||||
var(--bng-add-red-400)
|
||||
var(--bng-add-red-500)
|
||||
var(--bng-add-red-550)
|
||||
var(--bng-add-red-600)
|
||||
var(--bng-add-red-650)
|
||||
var(--bng-add-red-700)
|
||||
var(--bng-add-red-750)
|
||||
var(--bng-add-red-800)
|
||||
var(--bng-add-red-850)
|
||||
var(--bng-add-red-900)
|
||||
```
|
||||
|
||||
=== "Orange"
|
||||
|
||||
```css
|
||||
var(--bng-orange-50)
|
||||
var(--bng-orange-100)
|
||||
var(--bng-orange-200)
|
||||
var(--bng-orange-300)
|
||||
var(--bng-orange-400)
|
||||
var(--bng-orange-500)
|
||||
var(--bng-orange-550)
|
||||
var(--bng-orange-600)
|
||||
var(--bng-orange-650)
|
||||
var(--bng-orange-700)
|
||||
var(--bng-orange-750)
|
||||
var(--bng-orange-800)
|
||||
var(--bng-orange-850)
|
||||
var(--bng-orange-900)
|
||||
```
|
||||
|
||||
=== "Ter Peach"
|
||||
|
||||
```css
|
||||
var(--bng-ter-peach-50)
|
||||
var(--bng-ter-peach-100)
|
||||
var(--bng-ter-peach-200)
|
||||
var(--bng-ter-peach-300)
|
||||
var(--bng-ter-peach-400)
|
||||
var(--bng-ter-peach-500)
|
||||
var(--bng-ter-peach-550)
|
||||
var(--bng-ter-peach-600)
|
||||
var(--bng-ter-peach-650)
|
||||
var(--bng-ter-peach-700)
|
||||
var(--bng-ter-peach-750)
|
||||
var(--bng-ter-peach-800)
|
||||
var(--bng-ter-peach-850)
|
||||
var(--bng-ter-peach-900)
|
||||
```
|
||||
|
||||
=== "Ter Yellow"
|
||||
|
||||
```css
|
||||
var(--bng-ter-yellow-50)
|
||||
var(--bng-ter-yellow-100)
|
||||
var(--bng-ter-yellow-200)
|
||||
var(--bng-ter-yellow-300)
|
||||
var(--bng-ter-yellow-400)
|
||||
var(--bng-ter-yellow-500)
|
||||
var(--bng-ter-yellow-550)
|
||||
var(--bng-ter-yellow-600)
|
||||
var(--bng-ter-yellow-650)
|
||||
var(--bng-ter-yellow-700)
|
||||
var(--bng-ter-yellow-750)
|
||||
var(--bng-ter-yellow-800)
|
||||
var(--bng-ter-yellow-850)
|
||||
var(--bng-ter-yellow-900)
|
||||
```
|
||||
|
||||
=== "Add Green"
|
||||
|
||||
```css
|
||||
var(--bng-add-green-50)
|
||||
var(--bng-add-green-100)
|
||||
var(--bng-add-green-200)
|
||||
var(--bng-add-green-300)
|
||||
var(--bng-add-green-400)
|
||||
var(--bng-add-green-500)
|
||||
var(--bng-add-green-600)
|
||||
var(--bng-add-green-700)
|
||||
var(--bng-add-green-800)
|
||||
var(--bng-add-green-900)
|
||||
```
|
||||
|
||||
=== "Baby Blue"
|
||||
|
||||
```css
|
||||
var(--bng-add-babyblue-50)
|
||||
var(--bng-add-babyblue-100)
|
||||
var(--bng-add-babyblue-200)
|
||||
var(--bng-add-babyblue-300)
|
||||
var(--bng-add-babyblue-400)
|
||||
var(--bng-add-babyblue-500)
|
||||
var(--bng-add-babyblue-550)
|
||||
var(--bng-add-babyblue-600)
|
||||
var(--bng-add-babyblue-650)
|
||||
var(--bng-add-babyblue-700)
|
||||
var(--bng-add-babyblue-750)
|
||||
var(--bng-add-babyblue-800)
|
||||
var(--bng-add-babyblue-850)
|
||||
var(--bng-add-babyblue-900)
|
||||
```
|
||||
|
||||
=== "Add Blue"
|
||||
|
||||
```css
|
||||
var(--bng-add-blue-50)
|
||||
var(--bng-add-blue-100)
|
||||
var(--bng-add-blue-200)
|
||||
var(--bng-add-blue-300)
|
||||
var(--bng-add-blue-400)
|
||||
var(--bng-add-blue-500)
|
||||
var(--bng-add-blue-600)
|
||||
var(--bng-add-blue-700)
|
||||
var(--bng-add-blue-800)
|
||||
var(--bng-add-blue-900)
|
||||
```
|
||||
|
||||
=== "Indigo Blue"
|
||||
|
||||
```css
|
||||
var(--bng-add-indigoblue-50)
|
||||
var(--bng-add-indigoblue-100)
|
||||
var(--bng-add-indigoblue-200)
|
||||
var(--bng-add-indigoblue-300)
|
||||
var(--bng-add-indigoblue-400)
|
||||
var(--bng-add-indigoblue-500)
|
||||
var(--bng-add-indigoblue-550)
|
||||
var(--bng-add-indigoblue-600)
|
||||
var(--bng-add-indigoblue-650)
|
||||
var(--bng-add-indigoblue-700)
|
||||
var(--bng-add-indigoblue-750)
|
||||
var(--bng-add-indigoblue-800)
|
||||
var(--bng-add-indigoblue-850)
|
||||
var(--bng-add-indigoblue-900)
|
||||
```
|
||||
|
||||
=== "Add Magenta"
|
||||
|
||||
```css
|
||||
var(--bng-add-magenta-50)
|
||||
var(--bng-add-magenta-100)
|
||||
var(--bng-add-magenta-200)
|
||||
var(--bng-add-magenta-300)
|
||||
var(--bng-add-magenta-400)
|
||||
var(--bng-add-magenta-500)
|
||||
var(--bng-add-magenta-550)
|
||||
var(--bng-add-magenta-600)
|
||||
var(--bng-add-magenta-650)
|
||||
var(--bng-add-magenta-700)
|
||||
var(--bng-add-magenta-750)
|
||||
var(--bng-add-magenta-800)
|
||||
var(--bng-add-magenta-850)
|
||||
var(--bng-add-magenta-900)
|
||||
```
|
||||
|
||||
=== "Ter Blue Gray"
|
||||
|
||||
```css
|
||||
var(--bng-ter-blue-gray-50)
|
||||
var(--bng-ter-blue-gray-100)
|
||||
var(--bng-ter-blue-gray-200)
|
||||
var(--bng-ter-blue-gray-300)
|
||||
var(--bng-ter-blue-gray-400)
|
||||
var(--bng-ter-blue-gray-500)
|
||||
var(--bng-ter-blue-gray-550)
|
||||
var(--bng-ter-blue-gray-600)
|
||||
var(--bng-ter-blue-gray-650)
|
||||
var(--bng-ter-blue-gray-700)
|
||||
var(--bng-ter-blue-gray-750)
|
||||
var(--bng-ter-blue-gray-800)
|
||||
var(--bng-ter-blue-gray-850)
|
||||
var(--bng-ter-blue-gray-900)
|
||||
```
|
||||
|
||||
=== "Cool Gray"
|
||||
|
||||
```css
|
||||
var(--bng-cool-gray-50)
|
||||
var(--bng-cool-gray-100)
|
||||
var(--bng-cool-gray-200)
|
||||
var(--bng-cool-gray-300)
|
||||
var(--bng-cool-gray-400)
|
||||
var(--bng-cool-gray-500)
|
||||
var(--bng-cool-gray-550)
|
||||
var(--bng-cool-gray-600)
|
||||
var(--bng-cool-gray-650)
|
||||
var(--bng-cool-gray-700)
|
||||
var(--bng-cool-gray-750)
|
||||
var(--bng-cool-gray-800)
|
||||
var(--bng-cool-gray-850)
|
||||
var(--bng-cool-gray-900)
|
||||
```
|
||||
|
||||
=== "Other"
|
||||
|
||||
```css
|
||||
var(--bng-off-black) /*Used in Vue for buttons and some headers*/
|
||||
var(--bng-off-white) /*Used in Vue for interactable elements*/
|
||||
var(--bng-off-white-brighter) /*Used in Vue for headers*/
|
||||
```
|
||||
|
||||
=== "Extra color presets"
|
||||
|
||||
```css
|
||||
var(--bng-filter-orange) /*Filter preset to force SVGs to use bng-orange*/
|
||||
var(--bng-black-o8) /*80% opacity*/
|
||||
var(--bng-black-o6) /*60% opacity*/
|
||||
var(--bng-black-o4) /*40% opacity*/
|
||||
var(--bng-black-o2) /*20% opacity*/
|
||||
```
|
||||
|
||||
=== "Corner rounding presets"
|
||||
|
||||
```css
|
||||
var(--bng-corners-1) /*0.25rem*/
|
||||
var(--bng-corners-2) /*0.50rem*/
|
||||
var(--bng-corners-3) /*1.00rem*/
|
||||
```
|
||||
@@ -0,0 +1,88 @@
|
||||
!!! warning "This site is under construction!"
|
||||
|
||||
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.
|
||||
# Creating an ImGui Window
|
||||
|
||||
This page covers how to create a basic ImGui window.
|
||||
|
||||
## Setup
|
||||
|
||||
Before using ImGui, some setup is required:
|
||||
|
||||
```lua
|
||||
local im = ui_imgui -- shortcut to prevent lookups all the time. should help with optimization
|
||||
local imguiExampleWindowOpen = im.BoolPtr(true)
|
||||
```
|
||||
|
||||
`imguiExampleWindowOpen` will be used to determine when this example window should be rendered.
|
||||
|
||||
## Window Rendering
|
||||
|
||||
ImGui windows and their contents must be recreated for every frame they should be displayed. This means that some form of onUpdate function is necessary to use ImGui.
|
||||
|
||||
```lua
|
||||
local function onUpdate()
|
||||
if worldReadyState == 2 then
|
||||
if imguiExampleWindowOpen[0] == true then
|
||||
imguiExample()
|
||||
end
|
||||
end
|
||||
end
|
||||
M.onUpdate = onUpdate
|
||||
```
|
||||
|
||||
This will run a function to create this example's window, so long as the level is fully loaded, and that the example window should be displaying.
|
||||
|
||||
## Window Content
|
||||
|
||||
If you're new to writing ImGui, think of it as a distant cousin of HTML:
|
||||
|
||||
* `im.SetNextWindowSize(im.ImVec2(x, y), im.Cond_FirstUseEver)` defines your viewport size if it hasn't already been defined
|
||||
* `im.Begin()` and `im.End()` is your `<body>` and `</body>`
|
||||
* `im.Text()` is your `<p></p>`
|
||||
|
||||
```lua
|
||||
local buttonPresses = 0
|
||||
|
||||
local function imguiExample()
|
||||
im.SetNextWindowSize(im.ImVec2(366, 100), im.Cond_FirstUseEver) -- prepare our window
|
||||
im.Begin("Hello World, I am a window") -- create a window with the title of "Hello World, I am a window"
|
||||
im.Indent() -- a... padding element
|
||||
im.Text("Hello World, I am text.") -- add a line of text, somewhat like a <p> element
|
||||
im.SameLine() -- Not really HTML. This appends the following element to the same line as the previous element.
|
||||
if im.Button("The Hello World Button") then -- Like <button>. This runs Lua when pressed.
|
||||
buttonPresses = buttonPresses + 1
|
||||
end
|
||||
if buttonPresses > 0 then
|
||||
im.Text("The Hello World Button has been pressed " .. buttonPresses .. " times!")
|
||||
else
|
||||
im.Text("The Hello World Button has not been pressed.")
|
||||
end
|
||||
im.Unindent() -- end the "padding element"
|
||||
im.End() -- complete our "canvas" so it can be drawn
|
||||
end
|
||||
```
|
||||
|
||||
You can add the following function to easily toggle visibility of the window:
|
||||
|
||||
```lua
|
||||
local function toggleExampleImgui()
|
||||
imguiExampleWindowOpen[0] = not imguiExampleWindowOpen[0]
|
||||
end
|
||||
```
|
||||
|
||||
## Result
|
||||
|
||||
<figure class="image image_resized" style="width:100%" markdown>
|
||||

|
||||
</figure>
|
||||
|
||||
When the The Hello World Button button is pressed, the counter below it will update to display the amount of times the The Hello World Button button has been pressed.
|
||||
|
||||
## Download
|
||||
|
||||
This tutorial is almost entirely based off of [StanleyDudek](https://github.com/StanleyDudek)'s ImGui example mod. You can download this example mod [here](../../../../assets/content/imguiExample.zip).
|
||||
@@ -0,0 +1,77 @@
|
||||
!!! warning "This site is under construction!"
|
||||
|
||||
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.
|
||||
|
||||
# BeamNG.drive ImGui Code Snippets
|
||||
|
||||
## Setup
|
||||
|
||||
### Setup ImGui
|
||||
|
||||
```lua
|
||||
local im = ui_imgui
|
||||
```
|
||||
|
||||
### Setup Window
|
||||
|
||||
```lua
|
||||
im.SetNextWindowSize(im.ImVec2(366, 100), im.Cond_FirstUseEver)
|
||||
```
|
||||
|
||||
### Create window
|
||||
|
||||
```lua
|
||||
im.Begin("Window Title") -- Create window
|
||||
im.End()
|
||||
```
|
||||
|
||||
## General
|
||||
|
||||
=== "Basic Formatting"
|
||||
|
||||
```lua
|
||||
im.Text("")
|
||||
im.TextWrapped("") -- automatic word wrap
|
||||
im.TextColored(im.ImVec4(0,1,0,1), "") -- R,G,B,A
|
||||
im.TextDisabled("") -- predefined style for disabled text
|
||||
|
||||
im.LabelText("", "")
|
||||
im.BulletText("") -- Bullet point with text
|
||||
im.SeparatorText("") -- Separator with centered text
|
||||
|
||||
im.Separator() -- might want a NewLine before these
|
||||
im.SameLine() -- horizontally append the following element to the previous element
|
||||
im.NewLine()
|
||||
|
||||
im.Spacing() -- small padding
|
||||
im.Indent()
|
||||
im.Unindent()
|
||||
```
|
||||
|
||||
=== "Inputs"
|
||||
|
||||
```lua
|
||||
im.Button("", im.ImVec2(0,0)) -- 0 = fit to content
|
||||
im.SmallButton("") -- Fit to content and slightly less padding
|
||||
im.ArrowButton("", 0) -- arg 1: string is not actually used? arg 2: 0 = left, 1 = right, 2 = up, 3 = down
|
||||
im.InvisibleButton("", im.ImVec2(0,0), ...) -- used for imgui cursor positioning?
|
||||
|
||||
im.Checkbox("", im.BoolPtr(false))
|
||||
|
||||
im.RadioButton1("", im.BoolPtr(false))
|
||||
im.RadioButton2("", im.IntPtr(), 0) -- arg. 3: 0 or 1 for disabled or enabled
|
||||
```
|
||||
|
||||
=== "Other"
|
||||
|
||||
```lua
|
||||
im.Bullet()
|
||||
|
||||
im.ProgressBar(0.5, im.ImVec2(0,0), "") -- arg 2: 0 for default width and/or height
|
||||
|
||||
im.TextUnformatted("", "") -- Second argument seems to crash the game
|
||||
```
|
||||
@@ -4,7 +4,6 @@ This documentation is unofficial and produced by the BeamMP Mod Team and the Bea
|
||||
## Understanding The File Structure
|
||||
...
|
||||
|
||||
|
||||
## Snippets
|
||||
|
||||
Helpful code snippets can be found here: [Snippets](snippets.md)
|
||||
Helpful code snippets can be found here: [Lua Snippets](lua-snippets.md)
|
||||
@@ -0,0 +1,381 @@
|
||||
!!! warning "This site is under construction!"
|
||||
|
||||
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.
|
||||
|
||||
# BeamNG.drive Lua Code Snippets
|
||||
|
||||
## World
|
||||
|
||||
### Drawing a marker & Vehicle detection
|
||||
|
||||
Drawing markers in the map can be one of the best ways to indicate to the user that there is some form of interaction that they can do there.
|
||||
|
||||
Drawing a marker is fairly easy. Here is an example of how the bus route marker is drawn:
|
||||
|
||||
```lua
|
||||
local function createBusMarker(markerName)
|
||||
local marker = createObject('TSStatic')
|
||||
marker:setField('shapeName', 0, "art/shapes/interface/position_marker.dae")
|
||||
marker:setPosition(vec3(0, 0, 0))
|
||||
marker.scale = vec3(1, 1, 1)
|
||||
marker:setField('rotation', 0, '1 0 0 0')
|
||||
marker.useInstanceRenderData = true
|
||||
marker:setField('instanceColor', 0, '1 1 1 0')
|
||||
marker:setField('collisionType', 0, "Collision Mesh")
|
||||
marker:setField('decalType', 0, "Collision Mesh")
|
||||
marker:setField('playAmbient', 0, "1")
|
||||
marker:setField('allowPlayerStep', 0, "1")
|
||||
marker:setField('canSave', 0, "0")
|
||||
marker:setField('canSaveDynamicFields', 0, "1")
|
||||
marker:setField('renderNormals', 0, "0")
|
||||
marker:setField('meshCulling', 0, "0")
|
||||
marker:setField('originSort', 0, "0")
|
||||
marker:setField('forceDetail', 0, "-1")
|
||||
marker.canSave = false
|
||||
marker:registerObject(markerName)
|
||||
scenetree.MissionGroup:addObject(marker)
|
||||
return marker
|
||||
end
|
||||
|
||||
-- this can then be called in a loop to setup your markers.
|
||||
-- NOTE: You should only do this once as part of your setup and not called on each frame.
|
||||
if #markers == 0 then
|
||||
for k,v in pairs(nameMarkers) do
|
||||
local mk = scenetree.findObject(v)
|
||||
if mk == nil then
|
||||
log('I', logTag,'Creating marker '..tostring(v))
|
||||
mk = createBusMarker(v)
|
||||
ScenarioObjectsGroup:addObject(mk.obj)
|
||||
end
|
||||
table.insert(markers, mk)
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
Here is a custom marker example from [BeamNG-FuelStations](https://github.com/BeamMP/BeamNG-FuelStations/tree/master):
|
||||
|
||||
```lua
|
||||
local stations = [
|
||||
{ "location": [ -778.813, 485.973, 23.46 ], "type":"gas" },
|
||||
{ "location": [ 617.164, -192.107, 53.2 ], "type":"ev" },
|
||||
]
|
||||
|
||||
local function IsEntityInsideArea(pos1, pos2, radius)
|
||||
return pos1:distance(pos2) < radius
|
||||
end
|
||||
|
||||
local onUpdate = function (dt)
|
||||
for k, spot in pairs(stations) do -- loop through all spots on the current map
|
||||
local bottomPos = vec3(spot.location[1], spot.location[2], spot.location[3])
|
||||
local topPos = bottomPos + vec3(0,0,2) -- offset vec to get top position (2m tall)
|
||||
|
||||
local spotInRange = false -- is this spot in range? used for color
|
||||
local spotCompatible = false -- is this spot compatible?
|
||||
|
||||
if activeVeh then -- we have a car and its ours (if in mp)
|
||||
local vehPos = activeVeh:getPosition()
|
||||
|
||||
spotInRange = IsEntityInsideArea(vec3(vehPos.x, vehPos.y,vehPos.z), bottomPos, 1.5)
|
||||
|
||||
spotCompatible = activeFuelType == "any" or spot.type == "any" or activeFuelType == spot.type
|
||||
end
|
||||
|
||||
local spotColor = (spotInRange and spotCompatible) and activeColorMap[spot.type] or inactiveColorMap[spot.type] or ColorF(1,1,1,0.5)
|
||||
|
||||
debugDrawer:drawCylinder(bottomPos:toPoint3F(), topPos:toPoint3F(), 1, spotColor) --bottom, top, radius, color
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
## User Interface
|
||||
|
||||
### Toast Notifications, Top right of screen
|
||||
|
||||
<figure class="image image_resized" style="width:75%" markdown>
|
||||

|
||||
</figure>
|
||||
|
||||
```lua
|
||||
--guihooks.trigger('toastrMsg', {type, title, msg, config = {timeOut}})
|
||||
guihooks.trigger('toastrMsg', {type = "info", title = "Info Message:", msg = "Info Message Text Here", config = {timeOut = 5000}})
|
||||
guihooks.trigger('toastrMsg', {type = "warning", title = "Warning Message:", msg = "Warning Message Text Here", config = {timeOut = 5000}})
|
||||
guihooks.trigger('toastrMsg', {type = "error", title = "Error Message:", msg = "Error Message Text Here", config = {timeOut = 5000}})
|
||||
```
|
||||
|
||||
### Message notifications, top left of screen by default in Messages app
|
||||
|
||||
This requires the 'Messages' or 'Messages & Tasks' UI app. Icons can be found at `ui\ui-vue\src\assets\fonts\bngIcons\svg\`
|
||||
|
||||
<figure class="image image_resized" style="width:75%" markdown>
|
||||

|
||||
</figure>
|
||||
|
||||
```lua
|
||||
--guihooks.trigger('Message', {msg, ttl, category, icon})
|
||||
--ui_message(msg, ttl, category, icon)
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_upward", icon = "arrow_upward"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_downward", icon = "arrow_downward"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "flag", icon = "flag"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "check", icon = "check"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "check_circle", icon = "check_circle"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "warning", icon = "warning"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "error", icon = "error"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "directions_car", icon = "directions_car"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "star", icon = "star"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "timeline", icon = "timeline"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "save", icon = "save"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "settings", icon = "settings"})
|
||||
```
|
||||
|
||||
### Center large or small display flash
|
||||
|
||||
<figure class="image image_resized" style="width:75%" markdown>
|
||||

|
||||
</figure>
|
||||
|
||||
<figure class="image image_resized" style="width:75%" markdown>
|
||||

|
||||
</figure>
|
||||
|
||||
```lua
|
||||
--guihooks.trigger('ScenarioFlashMessage', {{msg, ttl, sound, big}} ) -- requires RaceCountdown ui app
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"Message", 5.0, 0, true}} )
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"Message Text Here", 5.0, 0, false}} )
|
||||
|
||||
--countdown example, when all executed at once, the items are queued and will follow eachother after the previous ttl expires
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"3", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown1')", true}})
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"2", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown2')", true}})
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"1", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown3')", true}})
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"GO!", 3.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_CountdownGo')", true}})
|
||||
|
||||
--another sound example
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"Teleported!", 3.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Checkpoint')", false}})
|
||||
```
|
||||
|
||||
### Center mid-size persistent display
|
||||
|
||||
This requires the 'Race Realtime Display' UI app.
|
||||
|
||||
<figure class="image image_resized" style="width:75%" markdown>
|
||||

|
||||
</figure>
|
||||
|
||||
```lua
|
||||
--guihooks.trigger('ScenarioRealtimeDisplay', {msg = msg} ) -- requires Race Realtime Display ui app
|
||||
guihooks.trigger('ScenarioRealtimeDisplay', {msg = "Message Text Here"} )
|
||||
--these messages persist, clear with a blank string
|
||||
--if you are running live data, this is a good one to update rapidly (think timers, distance calcs, et cetera)
|
||||
guihooks.trigger('ScenarioRealtimeDisplay', {msg = ""} )
|
||||
```
|
||||
|
||||
### Confirmation Dialog
|
||||
|
||||
ConfirmationDialog is a simplistic popup with up to two buttons.
|
||||
|
||||
```lua
|
||||
-- Open a ConfirmationDialog with a title, body text, and up to two buttons
|
||||
guihooks.trigger("ConfirmationDialogOpen",
|
||||
"Example Title",
|
||||
"Example Body Text",
|
||||
"Okay",
|
||||
"", --gelua. empty string
|
||||
"Cancel",
|
||||
"" --gelua
|
||||
)
|
||||
|
||||
-- Close any open ConfirmationDialog with the provided title
|
||||
guihooks.trigger("ConfirmationDialogClose", "Example Title")
|
||||
```
|
||||
|
||||
<figure class="image image_resized" style="width:75%" markdown>
|
||||

|
||||
</figure>
|
||||
|
||||
Both fields of a button must be strings in order for the button to appear.
|
||||
|
||||
If the Okay button is provided, pressing the *OK / Primary action* action is equivalent to pressing the Okay button.
|
||||
|
||||
If the Cancel button is provided, pressing the *Menu* action is equivalent to pressing the Cancel button.
|
||||
|
||||
HTML is supported and can be used to add images/icons, for example.
|
||||
|
||||
Multiple can be displayed at once, displayed sequentially.
|
||||
|
||||
!!! bug
|
||||
|
||||
Providing no buttons prevents the player from escaping the dialog without using the console.
|
||||
|
||||
!!! bug
|
||||
|
||||
The SDF parts of the Minimap UI app remain visible while a ConfirmationDialog is active.
|
||||
|
||||
`#!lua guihooks.trigger('ShowApps', false)` to hide UI apps can be used as a hacky workaround.
|
||||
|
||||
<figure class="image image_resized" style="width:75%" markdown>
|
||||

|
||||
</figure>
|
||||
|
||||
### introPopupTutorial
|
||||
|
||||
introPopupTutorial is a highly customizable popup that is largely defined with embedded HTML. It is standard to load from a standalone HTML file located in `/gameplay/tutorials/pages/*/content.html`.
|
||||
|
||||
```lua
|
||||
guihooks.trigger("introPopupTutorial", {
|
||||
{
|
||||
content = readFile("/gameplay/tutorials/pages/template/content.html"):gsub("\r\n",""),
|
||||
flavour = "onlyOk"
|
||||
}
|
||||
})
|
||||
|
||||
guihooks.trigger("introPopupClose")
|
||||
```
|
||||
|
||||
<figure class="image image_resized" style="width:75%" markdown>
|
||||

|
||||
</figure>
|
||||
|
||||
`flavour` controls which buttons are displayed. Four flavours exist:
|
||||
|
||||
* `withLogbook`
|
||||
* Buttons: Career Logbook, Okay
|
||||
* `onlyOk`
|
||||
* Buttons: Okay
|
||||
* `onlyLogbook`
|
||||
* Buttons: Career Logbook
|
||||
* `noButtons`
|
||||
* Provides no buttons
|
||||
|
||||
!!! warning
|
||||
|
||||
When using the noButtons flavour on the page, providing no extra JavaScript in the page content to close the popup causes a softlock. Pages are not combined into one popup in this flavour. It is not recommended to use this flavour.
|
||||
|
||||
If multiple pages are provided, or the hook is triggered multiple times, then the pages are combined into the same popup. If the hook is triggered while a introPopup is active, or when a different introPopup type has already been triggered, then it is displayed in a separate popup after the existing popup is closed.
|
||||
|
||||
### introPopupCareer
|
||||
|
||||
introPopupCareer is an easy to use, but open ended popup that supports embedding HTML, if needed.
|
||||
|
||||
Flavours control which buttons are displayed and the default image aspect ratio. Four flavours exist:
|
||||
|
||||
* `default`
|
||||
* Default image aspect ratio: 16x9
|
||||
* Buttons: Later, Okay
|
||||
* `welcome`
|
||||
* Default image aspect ratio: 16x9
|
||||
* Buttons: Career Logbook, Okay
|
||||
* `branch-info`
|
||||
* Default image aspect ratio: 16x9
|
||||
* Buttons: Career Logbook, Okay
|
||||
* `garage`
|
||||
* Buttons: Later, Okay
|
||||
|
||||
```lua
|
||||
guihooks.trigger("introPopupCareer", {
|
||||
{
|
||||
title = "Example title",
|
||||
text = "Example text",
|
||||
image = "/gameplay/tutorials/pages/template/image.jpg",
|
||||
ratio = "16x9",
|
||||
flavour = "default"
|
||||
}
|
||||
})
|
||||
|
||||
guihooks.trigger("introPopupClose")
|
||||
```
|
||||
|
||||
<figure class="image image_resized" style="width:75%" markdown>
|
||||

|
||||
</figure>
|
||||
|
||||
If multiple pages are provided, or the hook is triggered multiple times, then the pages are combined into the same popup. If the hook is triggered while a introPopup is active, or when a different introPopup type has already been triggered, then it is displayed in a separate popup after the existing popup is closed.
|
||||
|
||||
!!! bug
|
||||
|
||||
The background blur has a minimum height, causing popups with short content to have excess blur below its window. Two main workarounds exist:
|
||||
|
||||
* Repeat `\n` and end with `#!html <div />` until the window covers the blur
|
||||
* Use an empty or missing `image` path and adjust the aspect ratio until the window covers the blur
|
||||
|
||||
### introPopupMission
|
||||
|
||||
introPopupMission is almost identical to introPopupCareer, but needs buttons to be defined rather than picking a preset for buttons.
|
||||
|
||||
Button styles are combined as *bng-button-*`style`. Built-in button styles are:
|
||||
|
||||
* `main` - orange
|
||||
* `secondary` - cyan
|
||||
* `attention` - red
|
||||
* `white` - white
|
||||
* `link` - translucent
|
||||
* `outline` - orange outline
|
||||
|
||||
```lua
|
||||
guihooks.trigger('introPopupMission', {
|
||||
title = "introPopupMission title",
|
||||
text = "introPopupMission description",
|
||||
image = "/gameplay/tutorials/pages/template/image.jpg",
|
||||
ratio = "16x9",
|
||||
buttons = {
|
||||
{ default=true, class="main", label="main button", clickLua="" },
|
||||
{ default=false, class="secondary", label="secondary button", clickLua="" },
|
||||
{ default=false, class="attention", label="attention button", clickLua="" },
|
||||
{ default=false, class="white", label="white button", clickLua="" },
|
||||
{ default=false, class="link", label="link button", clickLua="" },
|
||||
{ default=false, class="outline", label="outline button", clickLua="" }
|
||||
}
|
||||
})
|
||||
|
||||
guihooks.trigger("introPopupClose")
|
||||
```
|
||||
|
||||
<figure class="image image_resized" style="width:75%" markdown>
|
||||

|
||||
</figure>
|
||||
|
||||
If multiple pages are provided, or the hook is triggered multiple times, then the pages are combined into the same popup. If the hook is triggered while a introPopup is active, or when a different introPopup type has already been triggered, then it is displayed in a separate popup after the existing popup is closed.
|
||||
|
||||
!!! bug
|
||||
|
||||
The background blur has a minimum height, causing popups with short content to have excess blur below its window. Two main workarounds exist:
|
||||
|
||||
* Repeat `\n` and end with `#!html <div />` until the window covers the blur
|
||||
* Use an empty or missing `image` path and adjust the aspect ratio until the window covers the blur
|
||||
|
||||
### Dialogue
|
||||
|
||||
Dialogue is used in the *A Rocky Start* campaign to display information about a mission. It is a centered, vertically aligned popup with a specific layout. It does not support embedding HTML.
|
||||
|
||||
```lua
|
||||
ui_missionInfo.openDialogue({
|
||||
title = "Dialogue title",
|
||||
type = "Custom", -- isn't actually displayed
|
||||
typeName = "typeName",
|
||||
data = {
|
||||
{label = "objective", value = "reward"}
|
||||
-- add more...
|
||||
},
|
||||
buttons = {
|
||||
{action = "accept", text = "Accept", cmd = ""},
|
||||
{action = 'decline',text = "Decline", cmd = ""}
|
||||
-- add more...
|
||||
}
|
||||
})
|
||||
|
||||
ui_missionInfo.closeDialogue()
|
||||
```
|
||||
|
||||
<figure class="image image_resized" style="width:75%" markdown>
|
||||

|
||||
</figure>
|
||||
|
||||
Only one Dialogue can be displayed at once. Any existing Dialogue is overridden.
|
||||
|
||||
!!! info
|
||||
|
||||
`#!lua ui_missionInfo.closeDialogue()` must be used to close a dialogue.
|
||||
|
||||
Make sure you call this function when any button is pressed.
|
||||
@@ -1,154 +0,0 @@
|
||||
!!! warning "This site is under construction!"
|
||||
|
||||
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.
|
||||
|
||||
# BeamNG.drive Snippets
|
||||
|
||||
## Lua Code Snippets
|
||||
|
||||
### Drawing a marker & Vehicle detection
|
||||
|
||||
Drawing markers in the map can be one of the best ways to indicate to the user that there is some form of interaction that they can do there.
|
||||
|
||||
Drawing a marker is fairly easy. Here is an example of how the bus route marker is drawn:
|
||||
|
||||
```Lua
|
||||
local function createBusMarker(markerName)
|
||||
local marker = createObject('TSStatic')
|
||||
marker:setField('shapeName', 0, "art/shapes/interface/position_marker.dae")
|
||||
marker:setPosition(vec3(0, 0, 0))
|
||||
marker.scale = vec3(1, 1, 1)
|
||||
marker:setField('rotation', 0, '1 0 0 0')
|
||||
marker.useInstanceRenderData = true
|
||||
marker:setField('instanceColor', 0, '1 1 1 0')
|
||||
marker:setField('collisionType', 0, "Collision Mesh")
|
||||
marker:setField('decalType', 0, "Collision Mesh")
|
||||
marker:setField('playAmbient', 0, "1")
|
||||
marker:setField('allowPlayerStep', 0, "1")
|
||||
marker:setField('canSave', 0, "0")
|
||||
marker:setField('canSaveDynamicFields', 0, "1")
|
||||
marker:setField('renderNormals', 0, "0")
|
||||
marker:setField('meshCulling', 0, "0")
|
||||
marker:setField('originSort', 0, "0")
|
||||
marker:setField('forceDetail', 0, "-1")
|
||||
marker.canSave = false
|
||||
marker:registerObject(markerName)
|
||||
scenetree.MissionGroup:addObject(marker)
|
||||
return marker
|
||||
end
|
||||
|
||||
-- this can then be called in a loop to setup your markers.
|
||||
-- NOTE: You should only do this once as part of your setup and not called on each frame.
|
||||
if #markers == 0 then
|
||||
for k,v in pairs(nameMarkers) do
|
||||
local mk = scenetree.findObject(v)
|
||||
if mk == nil then
|
||||
log('I', logTag,'Creating marker '..tostring(v))
|
||||
mk = createBusMarker(v)
|
||||
ScenarioObjectsGroup:addObject(mk.obj)
|
||||
end
|
||||
table.insert(markers, mk)
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
Here is a custom marker example from [BeamNG-FuelStations](https://github.com/BeamMP/BeamNG-FuelStations/tree/master):
|
||||
|
||||
```Lua
|
||||
local stations = [
|
||||
{ "location": [ -778.813, 485.973, 23.46 ], "type":"gas" },
|
||||
{ "location": [ 617.164, -192.107, 53.2 ], "type":"ev" },
|
||||
]
|
||||
|
||||
local function IsEntityInsideArea(pos1, pos2, radius)
|
||||
return pos1:distance(pos2) < radius
|
||||
end
|
||||
|
||||
local onUpdate = function (dt)
|
||||
for k, spot in pairs(stations) do -- loop through all spots on the current map
|
||||
local bottomPos = vec3(spot.location[1], spot.location[2], spot.location[3])
|
||||
local topPos = bottomPos + vec3(0,0,2) -- offset vec to get top position (2m tall)
|
||||
|
||||
local spotInRange = false -- is this spot in range? used for color
|
||||
local spotCompatible = false -- is this spot compatible?
|
||||
|
||||
if activeVeh then -- we have a car and its ours (if in mp)
|
||||
local vehPos = activeVeh:getPosition()
|
||||
|
||||
spotInRange = IsEntityInsideArea(vec3(vehPos.x, vehPos.y,vehPos.z), bottomPos, 1.5)
|
||||
|
||||
spotCompatible = activeFuelType == "any" or spot.type == "any" or activeFuelType == spot.type
|
||||
end
|
||||
|
||||
local spotColor = (spotInRange and spotCompatible) and activeColorMap[spot.type] or inactiveColorMap[spot.type] or ColorF(1,1,1,0.5)
|
||||
|
||||
debugDrawer:drawCylinder(bottomPos:toPoint3F(), topPos:toPoint3F(), 1, spotColor) --bottom, top, radius, color
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
### guihooks examples
|
||||
#### Toast Notifications, Top right of screen
|
||||

|
||||
|
||||
```lua
|
||||
--guihooks.trigger('toastrMsg', {type, title, msg, config = {timeOut}})
|
||||
guihooks.trigger('toastrMsg', {type = "info", title = "Info Message:", msg = "Info Message Text Here", config = {timeOut = 5000}})
|
||||
guihooks.trigger('toastrMsg', {type = "warning", title = "Warning Message:", msg = "Warning Message Text Here", config = {timeOut = 5000}})
|
||||
guihooks.trigger('toastrMsg', {type = "error", title = "Error Message:", msg = "Error Message Text Here", config = {timeOut = 5000}})
|
||||
```
|
||||
|
||||
#### Message notifications, top left of screen by default in Messages app
|
||||

|
||||
|
||||
```lua
|
||||
--guihooks.trigger('Message', {msg, ttl, category, icon}) --requires Messages app
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_upward", icon = "arrow_upward"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "arrow_downward", icon = "arrow_downward"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "flag", icon = "flag"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "check", icon = "check"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "check_circle", icon = "check_circle"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "warning", icon = "warning"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "error", icon = "error"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "directions_car", icon = "directions_car"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "star", icon = "star"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "timeline", icon = "timeline"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "save", icon = "save"})
|
||||
guihooks.trigger('Message', {msg = "Message Text Here", ttl = 5.0, category = "settings", icon = "settings"})
|
||||
```
|
||||
#### Center large or small display flash
|
||||

|
||||

|
||||
|
||||
```lua
|
||||
--guihooks.trigger('ScenarioFlashMessage', {{msg, ttl, sound, big}} ) -- requires RaceCountdown ui app
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"Message", 5.0, 0, true}} )
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"Message Text Here", 5.0, 0, false}} )
|
||||
|
||||
--countdown example, when all executed at once, the items are queued and will follow eachother after the previous ttl expires
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"3", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown1')", true}})
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"2", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown2')", true}})
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"1", 1.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown3')", true}})
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"GO!", 3.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_CountdownGo')", true}})
|
||||
|
||||
--another sound example
|
||||
guihooks.trigger('ScenarioFlashMessage', {{"Teleported!", 3.0, "Engine.Audio.playOnce('AudioGui', 'event:UI_Checkpoint')", false}})
|
||||
```
|
||||
|
||||
#### Center mid-size persistent display
|
||||

|
||||
```lua
|
||||
--guihooks.trigger('ScenarioRealtimeDisplay', {msg = msg} ) -- requires Race Realtime Display ui app
|
||||
guihooks.trigger('ScenarioRealtimeDisplay', {msg = "Message Text Here"} )
|
||||
--these messages persist, clear with a blank string
|
||||
--if you are running live data, this is a good one to update rapidly (think timers, distance calcs, et cetera)
|
||||
guihooks.trigger('ScenarioRealtimeDisplay', {msg = ""} )
|
||||
```
|
||||
|
||||
## IMGUI Code Snippets
|
||||
|
||||
## CEF UI Code Snippets
|
||||
@@ -20,11 +20,12 @@ hide:
|
||||
9. No advertising Non-BeamMP/BeamNG Content :material-information-outline:{ title="This includes non-BeamMP communities, social media channels or other external links. This applies to posting within the BeamMP community, as well as sending users unsolicited DM's for the purpose of personal advertising." }
|
||||
10. No Impersonating Staff :material-information-outline:{ title="This includes claiming to be a staff member of BeamMP, or claiming to have the abilities associated with being a staff member. This also includes the imitation of staff members." }
|
||||
11. No Exploitation :material-information-outline:{ title="This includes exploiting any bugs or oversights for personal gain or to negatively impact the experience of others." }
|
||||
12. Follow all given TOS :material-information-outline:{ title="This is important as restrictions such as the Discord age restriction (13+) must also be followed to use our Discord server." }
|
||||
13. Respect Everyone :material-information-outline:{ title="This should go unsaid, but you need to have respect for everyone around you and act accordingly." }
|
||||
14. Keep to the topic of the category or channel. :material-information-outline:{ title="This should go unsaid, but keep your content on the topic of the area that you are posting within. E.g. support should helping people or used when seeking support." }
|
||||
15. No excessive CAPS LOCK or Reactions/Emojis :material-information-outline:{ title="Users should refrain from using excessive caps or emojis/reactions as not to obscure the point at hand." }
|
||||
16. Check the [BeamMP FAQ](../../support/player-faq.md) & [BeamMP Community FAQ](https://forum.beammp.com/c/faq/35) before posting in support areas.
|
||||
12. Authkey sharing and using alt-accounts to increase the key count beyond the given free amount is strictly prohibited.
|
||||
13. Follow all given TOS :material-information-outline:{ title="This is important as restrictions such as the Discord age restriction (13+) must also be followed to use our Discord server." }
|
||||
14. Respect Everyone :material-information-outline:{ title="This should go unsaid, but you need to have respect for everyone around you and act accordingly." }
|
||||
15. Keep to the topic of the category or channel. :material-information-outline:{ title="This should go unsaid, but keep your content on the topic of the area that you are posting within. E.g. support should helping people or used when seeking support." }
|
||||
16. No excessive CAPS LOCK or Reactions/Emojis :material-information-outline:{ title="Users should refrain from using excessive caps or emojis/reactions as not to obscure the point at hand." }
|
||||
17. Check the [BeamMP FAQ](../../support/player-faq.md) & [BeamMP Community FAQ](https://forum.beammp.com/c/faq/35) before posting in support areas.
|
||||
|
||||
## Discord Rules
|
||||
|
||||
@@ -37,10 +38,11 @@ hide:
|
||||
7. No Badgering Others (`@'ing`) :material-information-outline:{ title="This includes asking others repeatedly for a response after being ignored or told no." }
|
||||
8. Keep bot commands in command specific channels.
|
||||
10. No Role-Playing :material-information-outline:{ title="This is in place to prevent issues arising due to missing context or to prevent users from circumventing certain rules." }
|
||||
11. Do not offer to remote into other users computers or send malicous files.
|
||||
12. Do not explain/send links on how to pirate, acquire illegal copies of software, hacking accounts (Beaming), or paid mods.
|
||||
13. Do not advertise non-BeamNG/BeamMP content. Sending Media of your own channel is only allowed in the dedicated [media channel](https://discord.com/channels/601558901657305098/705427325646274680).
|
||||
14. Follow the instructions of Staff members. If you think a staff member is abusing their power, direct message their lead or project management.
|
||||
11. Do not ask users to DM you for help. Keep all support-related topics in the designated support area on the BeamMP Discord Server.
|
||||
12. Do not offer to remote into another user's computer and refrain from sending ambiguous/potentially malicious and/or damaging files/extensions.
|
||||
13. Do not explain and/or send links on how to pirate, acquire illegal copies of software, hacking accounts (beaming), or paid mods.
|
||||
14. Do not advertise non-BeamNG/BeamMP content. Sending Media of your own channel is only allowed in the dedicated [media channel](https://discord.com/channels/601558901657305098/705427325646274680).
|
||||
15. Follow the instructions of Staff members. If you think a staff member is abusing their power, direct message their lead or project management.
|
||||
|
||||
## How to appeal actions against you:
|
||||
|
||||
|
||||
@@ -10,18 +10,21 @@ However, both Linux and MacOS are secondary platforms, this means bugs are to be
|
||||
BeamMP will not work with pirated or outdated versions of BeamNG.drive.
|
||||
The BeamMP support team does not offer support for issues with pirated / outdated copies.
|
||||
|
||||
---
|
||||
|
||||
## **2. Installation**
|
||||
|
||||
### **2a. Windows Installation**
|
||||
1. Go to [beammp.com](https://beammp.com/) and click the "Download client" button.
|
||||
2. Extract the `BeamMP_Installer.zip` archive.
|
||||
3. Launch `BeamMP_Installer.exe` and follow the instructions.
|
||||
4. The BeamMP Launcher icon should appear on your desktop. If not, just search for “BeamMP” in the windows search bar.
|
||||
5. Once the launcher has started, you should see a terminal window, shortly after BeamNG.drive should automatically start. **Do not** close the terminal window.
|
||||
6. After BeamNG launched, in the main menu, click the `Repository` button and make sure that `multiplayerbeammp` is **the only** enabled mod.
|
||||
7. Return to the main menu, click on 'More..' and the 'Multiplayer' button to start multiplayer.
|
||||
8. You will be prompted to login or play as a guest (not all servers will allow guests). You can create an account on our [forum](https://forum.beammp.com) and then login to BeamMP with the same credentials.
|
||||
9. Select any server you like, and press `Connect`. Enjoy!
|
||||
|
||||
!!!note
|
||||
|
||||
As of April 1st, 2026, the MSI installer is an "unrecognized app" according to Windows Defender SmartScreen.
|
||||
|
||||
To bypass this warning, click 'More info', then click 'Run anyway'.
|
||||
|
||||
1. Go to [beammp.com](https://beammp.com/) and click the 'Download Now' button.
|
||||
2. Run the `BeamMP_Installer.msi` installer and follow the instructions.
|
||||
3. The BeamMP Launcher icon should appear on your desktop. If not, just search for “BeamMP” in the Windows search bar.
|
||||
|
||||
!!!note
|
||||
|
||||
@@ -64,11 +67,10 @@ Clone the BeamMP-Launcher Repository to your system using `git`, for example:
|
||||
`git clone https://github.com/BeamMP/BeamMP-Launcher.git`
|
||||
[Additional information about cloning a GitHub Repo](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository)
|
||||
|
||||
Checkout the tag that was used for the [latest release](https://github.com/BeamMP/BeamMP-Launcher/releases/latest). For example, if `v2.6.4` is used in the latest release, then do `git checkout v2.6.4`
|
||||
|
||||
|
||||
If you've used the example clone command we provided, you can use `cd BeamMP-Launcher` to go to the project's root directory.
|
||||
|
||||
Checkout the tag that was used for the [latest release](https://github.com/BeamMP/BeamMP-Launcher/releases/latest). For example, if `v2.8.0` is used in the latest release, then do `git checkout v2.8.0`
|
||||
|
||||
In the root directory of the project,
|
||||
|
||||
1.
|
||||
@@ -136,9 +138,39 @@ Note that this assumes you put the launcher's binary you compiled earlier into `
|
||||
|
||||
This can be done for example by adding the [Linux-port of the Windows Segoe-UI emoji font](https://github.com/mrbvrz/segoe-ui-linux)
|
||||
|
||||
### **2d. Updating the Launcher**
|
||||
|
||||
If you already built the launcher and want to update it:
|
||||
|
||||
```bash
|
||||
export VCPKG_ROOT="$(pwd)/vcpkg"
|
||||
cd BeamMP-Launcher
|
||||
git fetch --tags
|
||||
```
|
||||
Checkout the tag that was used for the [latest release](https://github.com/BeamMP/BeamMP-Launcher/releases/latest). For example, if `v2.8.0` is used in the latest release, then do `git checkout v2.8.0`
|
||||
```
|
||||
cmake . -B bin -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux
|
||||
cmake --build bin --parallel
|
||||
cp bin/BeamMP-Launcher ~/beammp-launcher/
|
||||
cd ~/beammp-launcher
|
||||
./BeamMP-Launcher
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
## **3. Known Issues**
|
||||
## **3. Using BeamMP**
|
||||
|
||||
1. Once you have started the launcher, you should see a terminal window. Shortly after, the standard BeamNG launcher should start. **Do not** close the terminal window.
|
||||
2. In the BeamNG.drive main menu, click the `Repository` button and check to make sure that `multiplayerbeammp` is **the only** enabled mod.
|
||||
3. Return to the main menu, click on 'More..' and the 'Multiplayer' button to start multiplayer.
|
||||
4. You will be prompted to login or play as a guest (not all servers will allow guests). You can create an account on our [forum](https://forum.beammp.com) and then login to BeamMP with the same credentials.
|
||||
5. Select any server you like, and press `Connect`. Enjoy!
|
||||
|
||||
---
|
||||
|
||||
## **4. Known Issues**
|
||||
|
||||
- The native linux BeamMP-Launcher currently can only connect to a server once, after disconnecting you need to restart the launcher. You can do that without closing the game inbetween
|
||||
- If you don’t see the “Multiplayer” button. Make sure that the BeamMP mod is present and activated in the “Mod Manager” then try pressing CTRL + L.
|
||||
- VPNs of any type may cause connection issues.
|
||||
|
||||
@@ -1171,14 +1171,419 @@ Triggered when a player sends a chat message. When cancelled, it will not show t
|
||||
Arguments: `player_id: number`, `vehicle_id: number`, `data: string`
|
||||
Cancellable: YES
|
||||
|
||||
Triggered when a player spawns a new vehicle. The `data` argument contains the car's configuration and positional/rotational data for the vehicle as a json string.
|
||||
Triggered when a player spawns a new vehicle. Note that vehicle swaps/replacements instead fire [`onVehicleEdited`](#onvehicleedited). The `data` argument contains the car's configuration and positional/rotational data for the vehicle as a json string.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Example <code>data</code> value</summary>
|
||||
|
||||
The data string begins with a unique vehicle identifier, which is the player's ID, a hyphen, and then the vehicle ID. This is followed by a JSON object containing information about the vehicles configuration and positioning.
|
||||
|
||||
```
|
||||
0-0: {
|
||||
"abs": "realistic",
|
||||
"ign": 3,
|
||||
"jbm": "van",
|
||||
"pid": 0,
|
||||
"pos": [
|
||||
907.93902587891,
|
||||
773.50201416016,
|
||||
238.87800598145
|
||||
],
|
||||
"pro": "0",
|
||||
"rot": [
|
||||
0,
|
||||
0,
|
||||
0.99999994039536,
|
||||
0
|
||||
],
|
||||
"vcf": {
|
||||
"licenseName": "H30 9VV",
|
||||
"mainPartName": "van",
|
||||
"mainPartPath": "/van",
|
||||
"model": "van",
|
||||
"paints": [
|
||||
{
|
||||
"baseColor": [
|
||||
0.21999999880791,
|
||||
0.37000000476837003,
|
||||
0.33000001311302,
|
||||
1.2000000476837
|
||||
],
|
||||
"clearcoat": 0,
|
||||
"clearcoatRoughness": 0,
|
||||
"metallic": 0,
|
||||
"roughness": 0.070000000298023
|
||||
},
|
||||
{
|
||||
"baseColor": [
|
||||
0.62300002574921,
|
||||
0.62300002574921,
|
||||
0.62300002574921,
|
||||
1.2000000476837
|
||||
],
|
||||
"clearcoat": 0.80000001192093,
|
||||
"clearcoatRoughness": 0.070000000298023,
|
||||
"metallic": 0.80000001192093,
|
||||
"roughness": 0.64999997615814
|
||||
},
|
||||
{
|
||||
"baseColor": [
|
||||
0.21999999880791,
|
||||
0.37000000476837003,
|
||||
0.33000001311302,
|
||||
1.2000000476837
|
||||
],
|
||||
"clearcoat": 0,
|
||||
"clearcoatRoughness": 0,
|
||||
"metallic": 0,
|
||||
"roughness": 0.070000000298023
|
||||
}
|
||||
],
|
||||
"partConfigFilename": "vehicles/van/h15_xt_passenger.pc",
|
||||
"parts": {
|
||||
"brakepad_F": "brakepad_F_premium",
|
||||
"brakepad_R": "brakepad_R_premium",
|
||||
"gps": "",
|
||||
"licenseplate_design_2_1": "",
|
||||
"linelock": "",
|
||||
"load_seat_FR": "",
|
||||
"n2o_system": "",
|
||||
"paint_design": "van_skin_twotone",
|
||||
"pickup_engine_v8_ecu": "pickup_engine_v8_ecu",
|
||||
"pickup_engine_v8_internals": "pickup_engine_v8_internals",
|
||||
"pickup_enginemounts": "pickup_enginemounts",
|
||||
"pickup_oilpan_v8": "pickup_oilpan_v8",
|
||||
"pickup_reversewarn": "",
|
||||
"pickup_sparetire": "pickup_sparetire_5l",
|
||||
"pickup_towhitch": "",
|
||||
"skin_glass": "van_skin_glass_tint",
|
||||
"skin_interior": "van_skin_interior_black",
|
||||
"soundscape_horn": "soundscape_horn_115",
|
||||
"tire_F_16x7_alt": "tire_F_225_75_16_alt_standard",
|
||||
"tire_R_16x7_alt": "tire_R_225_75_16_alt_standard",
|
||||
"van_ABS": "van_ABS",
|
||||
"van_ESC": "",
|
||||
"van_ac": "van_ac",
|
||||
"van_body": "van_body_passenger",
|
||||
"van_brake_F": "van_brake_F",
|
||||
"van_brake_R": "van_brake_R_drum",
|
||||
"van_bumper_F": "van_bumper_F_altb",
|
||||
"van_bumper_F_lip": "",
|
||||
"van_bumper_R": "van_bumper_R_altb",
|
||||
"van_bumper_accessory_F": "",
|
||||
"van_bumpersignal_FL": "van_bumpersignal_FL",
|
||||
"van_bumpersignal_FR": "van_bumpersignal_FR",
|
||||
"van_coilover_IFS": "van_coilover_IFS",
|
||||
"van_converter": "van_converter",
|
||||
"van_differential_F": "",
|
||||
"van_differential_R": "van_differential_R",
|
||||
"van_door_FL": "van_door_FL",
|
||||
"van_door_FR": "van_door_FR",
|
||||
"van_doordetent_FL": "van_doordetent_FL",
|
||||
"van_doordetent_FR": "van_doordetent_FR",
|
||||
"van_doordetent_RL": "van_doordetent_RL",
|
||||
"van_doordetent_RR": "van_doordetent_RR",
|
||||
"van_doorglass_L": "van_doorglass_L",
|
||||
"van_doorglass_R": "van_doorglass_R",
|
||||
"van_doorpanel_FL": "van_doorpanel_FL",
|
||||
"van_doorpanel_FR": "van_doorpanel_FR",
|
||||
"van_driveshaft_R": "van_driveshaft_R",
|
||||
"van_engine": "van_engine_v8_4.5",
|
||||
"van_exhaust_v8": "van_exhaust_v8",
|
||||
"van_fascia_F": "van_fascia_F_high",
|
||||
"van_fender_L": "van_fender_L",
|
||||
"van_fender_R": "van_fender_R",
|
||||
"van_fenderflare_FL": "",
|
||||
"van_fenderflare_FR": "",
|
||||
"van_fenderflare_RL": "",
|
||||
"van_fenderflare_RR_sidedoor": "",
|
||||
"van_finaldrive_R": "van_finaldrive_R_355",
|
||||
"van_frame": "van_frame",
|
||||
"van_fueltank": "van_fueltank",
|
||||
"van_header": "van_exhmanifold",
|
||||
"van_headlight_L_high": "van_headlight_L_high",
|
||||
"van_headlight_R_high": "van_headlight_R_high",
|
||||
"van_hood": "van_hood",
|
||||
"van_hub_F": "van_hub_F_5",
|
||||
"van_hub_R": "van_hub_R_5",
|
||||
"van_intake_v8": "van_intake_v8",
|
||||
"van_intcarpet_roof": "van_intcarpet_roof",
|
||||
"van_interior": "van_interior",
|
||||
"van_lettering_doors_F": "van_lettering_doors_F_h15",
|
||||
"van_lettering_reardoor_L": "van_lettering_gavril_reardoor_L",
|
||||
"van_lettering_reardoor_R": "van_lettering_h15_xt_reardoor_R",
|
||||
"van_licenseplate_F": "van_licenseplate_F",
|
||||
"van_licenseplate_R": "van_licenseplate_R",
|
||||
"van_lightbar": "",
|
||||
"van_mirror_L": "van_mirror_L",
|
||||
"van_mirror_R": "van_mirror_R",
|
||||
"van_mod": "",
|
||||
"van_muffler": "van_muffler",
|
||||
"van_power_steering": "",
|
||||
"van_radiator": "van_radiator",
|
||||
"van_radio": "van_radio",
|
||||
"van_reardoor_L": "van_reardoor_L",
|
||||
"van_reardoor_R": "van_reardoor_R",
|
||||
"van_reardoorglass_L": "van_reardoorglass_L",
|
||||
"van_reardoorglass_R": "van_reardoorglass_R",
|
||||
"van_reardoorpanel_L": "van_reardoorpanel_L",
|
||||
"van_reardoorpanel_R": "van_reardoorpanel_R",
|
||||
"van_rollcage": "",
|
||||
"van_roof": "van_roof",
|
||||
"van_roof_accessory": "",
|
||||
"van_runningboard": "",
|
||||
"van_seat_1R": "van_seat_1R",
|
||||
"van_seat_2R": "van_seat_2R",
|
||||
"van_seat_3R": "van_seat_3R",
|
||||
"van_seat_FL": "van_seat_FL",
|
||||
"van_seat_FR": "van_seat_FR",
|
||||
"van_shifter": "van_shifter_A",
|
||||
"van_shock_R": "van_shock_R",
|
||||
"van_sidedoor_FR": "van_sidedoor_FR_alt",
|
||||
"van_sidedoor_RR": "van_sidedoor_RR_alt",
|
||||
"van_sidedoorglass_FR": "van_sidedoorglass_FR",
|
||||
"van_sidedoorglass_RR": "van_sidedoorglass_RR",
|
||||
"van_sidedoorpanel_FR": "van_sidedoorpanel_FR",
|
||||
"van_sidedoorpanel_RR": "van_sidedoorpanel_RR",
|
||||
"van_sideglass_FL": "van_sideglass_FL",
|
||||
"van_sideglass_ML": "van_sideglass_ML",
|
||||
"van_sideglass_RL": "van_sideglass_RL",
|
||||
"van_sideglass_RR": "van_sideglass_RR",
|
||||
"van_snorkel": "",
|
||||
"van_spring_R": "van_spring_R",
|
||||
"van_steer": "van_steer",
|
||||
"van_steering": "van_steering",
|
||||
"van_suspension_F": "van_IFS",
|
||||
"van_suspension_R": "van_axle_R",
|
||||
"van_swaybar_F": "van_swaybar_F",
|
||||
"van_swaybar_R": "",
|
||||
"van_taillight_L": "van_taillight_L",
|
||||
"van_taillight_R": "van_taillight_R",
|
||||
"van_taillightguard_L": "",
|
||||
"van_taillightguard_R": "",
|
||||
"van_transfer_case": "van_transfer_case_RWD",
|
||||
"van_transmission": "van_transmission_4A",
|
||||
"van_tubs": "van_tubs",
|
||||
"van_valance_F": "van_valance_F",
|
||||
"van_wheeldata_F": "van_wheeldata_F",
|
||||
"van_wheeldata_R": "van_wheeldata_R",
|
||||
"van_windshield": "van_windshield",
|
||||
"wheel_F_5": "wheel_25a_16x7_5_F",
|
||||
"wheel_R_5": "wheel_25a_16x7_5_R"
|
||||
},
|
||||
"vars": {}
|
||||
},
|
||||
"vid": 29339
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
##### `onVehicleEdited`
|
||||
|
||||
Arguments: `player_id: number`, `vehicle_id: number`, `data: string`
|
||||
Cancellable: YES
|
||||
|
||||
Triggered when a player edits their vehicle and applies the edit. The `data` argument contains the car's updated configuration as a json string but does **not** include positional or rotational data. You can use [MP.GetPositionRaw](#mpgetpositionrawpid-number-vid-number-tablestring) to get positional and rotational data.
|
||||
Triggered when a player edits or replaces their vehicle. The `data` argument contains the car's updated configuration as a json string but does **not** include positional or rotational data. You can use [MP.GetPositionRaw](#mpgetpositionrawpid-number-vid-number-tablestring) to get positional and rotational data.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Example <code>data</code> value</summary>
|
||||
|
||||
The data string begins with a unique vehicle identifier, which is the player's ID, a hyphen, and then the vehicle ID. This is followed by a JSON object containing information about the vehicles configuration.
|
||||
|
||||
```
|
||||
0-0: {
|
||||
"abs": "realistic",
|
||||
"ign": 3,
|
||||
"jbm": "van",
|
||||
"pid": 0,
|
||||
"pro": "0",
|
||||
"vcf": {
|
||||
"licenseName": "P60 1EP",
|
||||
"mainPartName": "van",
|
||||
"mainPartPath": "/van",
|
||||
"model": "van",
|
||||
"paints": [
|
||||
{
|
||||
"baseColor": [
|
||||
0.40000000596046,
|
||||
0.050000000745058,
|
||||
0.050000000745058,
|
||||
1.2000000476837
|
||||
],
|
||||
"clearcoat": 0,
|
||||
"clearcoatRoughness": 0,
|
||||
"metallic": 0,
|
||||
"roughness": 0.070000000298023
|
||||
},
|
||||
{
|
||||
"baseColor": [
|
||||
0.40000000596046,
|
||||
0.050000000745058,
|
||||
0.050000000745058,
|
||||
1.2000000476837
|
||||
],
|
||||
"clearcoat": 0,
|
||||
"clearcoatRoughness": 0,
|
||||
"metallic": 0,
|
||||
"roughness": 0.070000000298023
|
||||
},
|
||||
{
|
||||
"baseColor": [
|
||||
0.40000000596046,
|
||||
0.050000000745058,
|
||||
0.050000000745058,
|
||||
1.2000000476837
|
||||
],
|
||||
"clearcoat": 0,
|
||||
"clearcoatRoughness": 0,
|
||||
"metallic": 0,
|
||||
"roughness": 0.070000000298023
|
||||
}
|
||||
],
|
||||
"partConfigFilename": "vehicles/van/h15_passenger.pc",
|
||||
"parts": {
|
||||
"brakepad_F": "brakepad_F_premium",
|
||||
"brakepad_R": "brakepad_R_premium",
|
||||
"gps": "",
|
||||
"hubcap_F_16": "hubcap_09c_F_altd",
|
||||
"hubcap_R_16": "hubcap_09c_R_altd",
|
||||
"licenseplate_design_2_1": "",
|
||||
"linelock": "",
|
||||
"load_seat_FR": "",
|
||||
"n2o_system": "",
|
||||
"paint_design": "",
|
||||
"pickup_engine_v8_ecu": "pickup_engine_v8_ecu_late",
|
||||
"pickup_engine_v8_internals": "pickup_engine_v8_internals",
|
||||
"pickup_enginemounts": "pickup_enginemounts",
|
||||
"pickup_oilpan_v8": "pickup_oilpan_v8",
|
||||
"pickup_reversewarn": "",
|
||||
"pickup_sparetire": "pickup_sparetire_6l",
|
||||
"pickup_towhitch": "",
|
||||
"skin_glass": "",
|
||||
"skin_interior": "van_skin_interior_ivory",
|
||||
"soundscape_horn": "soundscape_horn_115",
|
||||
"tire_F_16x7_alt": "tire_F_225_75_16_alt_standard",
|
||||
"tire_R_16x7_alt": "tire_R_225_75_16_alt_standard",
|
||||
"trimring_F_16x7": "",
|
||||
"trimring_R_16x7": "",
|
||||
"van_ABS": "van_ABS",
|
||||
"van_ac": "van_ac",
|
||||
"van_body": "van_body_passenger",
|
||||
"van_brake_F": "van_brake_F",
|
||||
"van_brake_R": "van_brake_R",
|
||||
"van_bumper_accessory_F_late": "",
|
||||
"van_bumper_F": "van_bumper_F_late_alt",
|
||||
"van_bumper_F_lip_late": "",
|
||||
"van_bumper_R": "van_bumper_R_late_alt",
|
||||
"van_coilover_IFS": "van_coilover_IFS",
|
||||
"van_converter": "van_converter",
|
||||
"van_differential_F": "",
|
||||
"van_differential_R": "van_differential_R",
|
||||
"van_door_FL": "van_door_FL",
|
||||
"van_door_FR": "van_door_FR",
|
||||
"van_doordetent_FL": "van_doordetent_FL",
|
||||
"van_doordetent_FR": "van_doordetent_FR",
|
||||
"van_doordetent_RL": "van_doordetent_RL",
|
||||
"van_doordetent_RR": "van_doordetent_RR",
|
||||
"van_doorglass_L": "van_doorglass_L",
|
||||
"van_doorglass_R": "van_doorglass_R",
|
||||
"van_doorpanel_FL": "van_doorpanel_FL",
|
||||
"van_doorpanel_FR": "van_doorpanel_FR",
|
||||
"van_driveshaft_R": "van_driveshaft_R",
|
||||
"van_engine": "van_engine_v8_4.5",
|
||||
"van_ESC": "van_ESC",
|
||||
"van_exhaust_v8": "van_exhaust_v8",
|
||||
"van_fascia_F": "van_fascia_F_late",
|
||||
"van_fender_L": "van_fender_L",
|
||||
"van_fender_R": "van_fender_R",
|
||||
"van_fenderflare_FL": "",
|
||||
"van_fenderflare_FR": "",
|
||||
"van_fenderflare_RL": "",
|
||||
"van_fenderflare_RR_sidedoor": "",
|
||||
"van_finaldrive_R": "van_finaldrive_R_355",
|
||||
"van_frame": "van_frame",
|
||||
"van_fueltank": "van_fueltank",
|
||||
"van_grille_F_late": "van_grille_F_late",
|
||||
"van_header": "van_exhmanifold",
|
||||
"van_headlight_L_late": "van_headlight_L_late",
|
||||
"van_headlight_R_late": "van_headlight_R_late",
|
||||
"van_hood": "van_hood_late",
|
||||
"van_hub_F": "van_hub_F_6",
|
||||
"van_hub_R": "van_hub_R_6",
|
||||
"van_intake_v8": "van_intake_v8_late",
|
||||
"van_intcarpet_roof": "van_intcarpet_roof",
|
||||
"van_interior": "van_interior",
|
||||
"van_lettering_doors_F": "van_lettering_doors_F_h15",
|
||||
"van_lettering_reardoor_L": "van_lettering_gavril_reardoor_L",
|
||||
"van_lettering_reardoor_R": "van_lettering_h15_reardoor_R",
|
||||
"van_licenseplate_F_late": "van_licenseplate_F_late",
|
||||
"van_licenseplate_R_late": "van_licenseplate_R_late",
|
||||
"van_lightbar": "",
|
||||
"van_mirror_L": "van_mirror_L",
|
||||
"van_mirror_R": "van_mirror_R",
|
||||
"van_mod": "",
|
||||
"van_muffler": "van_muffler",
|
||||
"van_power_steering": "",
|
||||
"van_radiator": "van_radiator",
|
||||
"van_radio": "van_radio",
|
||||
"van_reardoor_L": "van_reardoor_L",
|
||||
"van_reardoor_R": "van_reardoor_R",
|
||||
"van_reardoorglass_L": "van_reardoorglass_L",
|
||||
"van_reardoorglass_R": "van_reardoorglass_R",
|
||||
"van_reardoorpanel_L": "van_reardoorpanel_L",
|
||||
"van_reardoorpanel_R": "van_reardoorpanel_R",
|
||||
"van_rollcage": "",
|
||||
"van_roof": "van_roof",
|
||||
"van_roof_accessory": "",
|
||||
"van_runningboard": "",
|
||||
"van_seat_1R": "van_seat_1R",
|
||||
"van_seat_2R": "van_seat_2R",
|
||||
"van_seat_3R": "van_seat_3R",
|
||||
"van_seat_FL": "van_seat_FL",
|
||||
"van_seat_FR": "van_seat_FR",
|
||||
"van_shifter": "van_shifter_A",
|
||||
"van_shock_R": "van_shock_R",
|
||||
"van_sidedoor_FR": "van_sidedoor_FR_alt",
|
||||
"van_sidedoor_RR": "van_sidedoor_RR_alt",
|
||||
"van_sidedoorglass_FR": "van_sidedoorglass_FR",
|
||||
"van_sidedoorglass_RR": "van_sidedoorglass_RR",
|
||||
"van_sidedoorpanel_FR": "van_sidedoorpanel_FR",
|
||||
"van_sidedoorpanel_RR": "van_sidedoorpanel_RR",
|
||||
"van_sideglass_FL": "van_sideglass_FL",
|
||||
"van_sideglass_ML": "van_sideglass_ML",
|
||||
"van_sideglass_RL": "van_sideglass_RL",
|
||||
"van_sideglass_RR": "van_sideglass_RR",
|
||||
"van_snorkel": "",
|
||||
"van_spring_R": "van_spring_R",
|
||||
"van_steer": "van_steer_facelift",
|
||||
"van_steering": "van_steering",
|
||||
"van_suspension_F": "van_IFS",
|
||||
"van_suspension_R": "van_axle_R",
|
||||
"van_swaybar_F": "van_swaybar_F",
|
||||
"van_swaybar_R": "",
|
||||
"van_taillight_L": "van_taillight_L",
|
||||
"van_taillight_R": "van_taillight_R",
|
||||
"van_taillightguard_L": "",
|
||||
"van_taillightguard_R": "",
|
||||
"van_transfer_case": "van_transfer_case_RWD",
|
||||
"van_transmission": "van_transmission_4A",
|
||||
"van_tubs": "van_tubs",
|
||||
"van_valance_F": "van_valance_F_late",
|
||||
"van_wheeldata_F": "van_wheeldata_F",
|
||||
"van_wheeldata_R": "van_wheeldata_R",
|
||||
"van_windshield": "van_windshield",
|
||||
"wheel_F_6": "steelwheel_02b_16x7_F",
|
||||
"wheel_R_6": "steelwheel_02b_16x7_R"
|
||||
},
|
||||
"vars": {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
##### `onVehicleDeleted`
|
||||
|
||||
|
||||
@@ -65,6 +65,7 @@ Depending on your setup, you may need to let BeamMP-Server through your firewall
|
||||
|
||||
There you want to allow the BeamMP-Server through the firewall, **both incoming and outgoing connections**, and **both TCP and UDP**. If your firewall asks for a port instead, that will have to be the same port you used in step “1\. Port Forwarding” (usually 30814).
|
||||
|
||||
For a more detailed guide, refer to [this documentation page](https://docs.beammp.com/FAQ/Defender-exclusions/).
|
||||
If you have issues, also feel free to ask on our [Forum](https://forum.beammp.com) or on our [Discord server](https://discord.gg/beammp) in the `#support` channel.
|
||||
|
||||
### **2. Obtaining an Authentication Key**
|
||||
@@ -81,7 +82,7 @@ You will need a [Discord](https://discord.com) account for this step. This is ne
|
||||
|
||||
#### 2.1. Accessing the keys page
|
||||
|
||||
Login with Discord to the [Keymaster](https://beammp.com/keymaster).
|
||||
Login with Discord to the [Keymaster](https://keymaster.beammp.com).
|
||||
From the Keymaster homepage click on "Keys" on the left of the screen:
|
||||
|
||||
<figure markdown>
|
||||
@@ -191,7 +192,11 @@ Description = "Total Random Beam MP Server"
|
||||
ResourceFolder = "Resources"
|
||||
```
|
||||
|
||||
This is your configuration file. It uses a format called TOML. Refer to the [Server Maintenance](server-maintenance.md) section for more info on this file.
|
||||
!!! info
|
||||
|
||||
This is your configuration file. It uses a format called TOML. Refer to the [Server Maintenance](server-maintenance.md) section for more info on this file and the variables.
|
||||
Your server will **NOT** show in the server list as long as `Private = true`. _If_ you want it to show in the list, set that to **`Private = false`**.
|
||||
|
||||
For now, we only care about the `AuthKey` field. Between the quotes `''`, you want to paste in your AuthKey you copied in the first step.
|
||||
|
||||
For our example key, it should then look like this:
|
||||
@@ -202,10 +207,6 @@ Give your server a name, too, in the `Name` field. You can format this with colo
|
||||
|
||||
If you picked a different **Port** other than **30814**, make sure to replace it here under `Port`.
|
||||
|
||||
!!! info
|
||||
|
||||
Your server will **NOT** show in the server list as long as `Private = true`. _If_ you want it to show in the list, set that to **`Private = false`**.
|
||||
|
||||
### **5. Validation**
|
||||
|
||||
Now run your server again, and see if it spits out any more `[ERROR]` or `[WARN]` messages. The server should stay open now. In the following steps (6.) below you can find out how to join the server.
|
||||
@@ -263,7 +264,7 @@ You have to give other users the public IP Address of your Server. However, be c
|
||||
|
||||
To join your public server they can simply go to the server list, type the name of the server, and click connect. If you are unsure of what your server name is, it will be the name you put in the `ServerConfig.toml`.
|
||||
Make sure search filters are disabled and the Map set to "Any" if you can't find it.
|
||||
You can also check the [Keymaster](https://beammp.com/keymaster) Website for the Servers IP Address.
|
||||
You can also check the [Keymaster](https://keymaster.beammp.com/) Website for the Servers IP Address.
|
||||
|
||||
Should you or your friends experience a "Connection Failed!" Error, check the Launcher Window for codes like 10060, 10061, 10030.
|
||||
This means you eihter have a CGNAT IPv4, or you have done something wrong during Step **1 Port Forwarding** or **1.1. Firewall**.
|
||||
|
||||
@@ -14,16 +14,26 @@ The server config, which is a file called `ServerConfig.toml`, uses the [TOML fo
|
||||
|
||||
The config has one section by default, called `[General]`, which holds the following values:
|
||||
|
||||
| Key | Value Type | Description |
|
||||
|-------------|----------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| AuthKey | AuthKey format `xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` where all x's are alphanumeric characters (numbers and letters) | Used to identify your server with the backend. You should have gotten one while following the installation instructions. |
|
||||
| Debug | true /false | When enabled (true), will show more messages in the log and provide more information. Enable this if you run into issues. Enabling this will drastically increase the size of the log file. |
|
||||
| Private | true/false | When enabled (true), your server will not be shown in the server list. Anyone with the correct IP and port can still connect. |
|
||||
| Description | Any "text" | Shown as the description of the server in the server list (if the server is public). You can use special characters to format this with colors and styles. |
|
||||
| Name | Any "text" | Shown as the name / title of your server in the server list. You can use special characters to format this with colors and styles. |
|
||||
| Map | A valid map location, such as `/levels/gridmap_v2/info.json` | The map your server will host. Has to be installed either by default (a list can be found below) or as a server mod. |
|
||||
| MaxCars | Any number ≥ 1 | The maximum number of cars per player. Any additional cars a player tries to spawn will be deleted instantly. |
|
||||
| Port | 1024-65535 | The networking port on which the server will be accessible. For a player to connect to your server directly, they will need your IP and this port. |
|
||||
| Key | Value Type | Description |
|
||||
|-------------------|----------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Port | 1024-65535 | The networking port on which the server will be reachable. (Must be unique and not be used by another service on the same host). |
|
||||
| AuthKey | AuthKey format `xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` where all x's are alphanumeric characters (numbers and letters) | Used to identify a public set server with the backend. |
|
||||
| AllowGuests | true/false | Determines wether guests are allowed to join the server or not. |
|
||||
| LogChat | true/false | When enabled (true), chat messages are logged in the server.log file. |
|
||||
| Debug | true /false | When enabled (true), will show more messages in the log and provide more information. Enable this if you run into issues. Enabling this will drastically increase the size of the log file. |
|
||||
| IP | A local class address of one of the NICs connected to the host. (Default: "0.0.0.0" or "::" | The server will try to bind to the supplied IP. Please do not mess with the IP field unless you know what you are doing. This value does not need to be changed in order for the server to work. |
|
||||
| Private | true/false | When enabled (true), your server will not be shown in the server list. Anyone with the correct IP and port can still connect. |
|
||||
| InformationPacket | true/false | When enabled (true), the server is going to allow unauthenticated clients to get the same info as on the server listing but directly via the server. |
|
||||
| Name | Any "text" | Shown as the name / title of your server in the server list. You can use special characters to format this with colors and styles. |
|
||||
| Tags | See list of allowed tags further below. | Tags for search e.g. Police, Racing etc... |
|
||||
| MaxCars | Any number ≥ 1 | The maximum number of cars per player. Any additional cars a player tries to spawn will be deleted instantly. |
|
||||
| MaxPlayers | Any Number ≥ 1 | The maximum amount of players per server. This does not affect vehicle count. |
|
||||
| Map | A valid map location, such as `/levels/gridmap_v2/info.json` | The map your server will host. Has to be installed either by default (a list can be found below) or as a server mod. |
|
||||
| Description | Any "text" | Shown as the description of the server in the server list (if the server is public). You can use special characters to format this with colors and styles. |
|
||||
| ResourceFolder | A valid folder location, such as "D:\Server\BeamMP\Resources" | Useful to store the server and the resource folder seperately. |
|
||||
| ImScaredOfUpdates | true/false | This sets the Server to either auto update or not when a new version is released. |
|
||||
| UpdateReminderTime| Any number with s, min, h, d appended. (30s) | Sets the interval of the update reminder message printed in the terminal.
|
||||
|
||||
|
||||
Other sections can and should be used by server plugins (Lua API coming soon), like so: `[MyMod]`.
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
## Pourquoi dois-je désactiver mes mods ?
|
||||
|
||||
Dans BeamMP, le serveur auquel vous vous connectez fournit les mods nécessaires. Ceux-ci sont téléchargés et activés automatiquement lors de la connexion. L'installation et l'activation de mods locaux peuvent souvent entraîner un dysfonctionnement de BeamMP, même avec un seul mod supplémentaire.
|
||||
|
||||
!!! warning
|
||||
|
||||
Supprimez tous les mods placés dans le dossier BeamNG.Drive\content\ ou ses sous-dossiers. Cet emplacement n'est PAS destiné à l'installation de mods et peut entraîner des problèmes, comme indiqué dans le fichier « DO_NOT_INSTALL_MODS_HERE.txt », situé dans le même répertoire.
|
||||
|
||||
!!! quote 'DO_NOT_INSTALL_MODS_HERE.txt"
|
||||
|
||||
NE copiez PAS les mods dans ce dossier : cela peut entraîner des mods cassés, une installation plus lente des mises à jour, un gestionnaire de mods cassé, un mode sans échec cassé et autres.
|
||||
|
||||
## Comment désactiver/supprimer mes mods ?
|
||||
|
||||
Il existe 3 options pour résoudre les problèmes possibles lors de l'utilisation de BeamMP.
|
||||
|
||||
### 1. Désactiver les mods
|
||||
|
||||
Avant de rejoindre un serveur, assurez-vous qu'aucun mod autre que « multiplayerbeammp » n'est activé. Si le jeu se bloque ou si vous rencontrez toujours des problèmes, reportez-vous à l'option suivante.
|
||||
|
||||
### 2. Création d'un nouveau dossier utilisateur
|
||||
|
||||
Ouvrez le dossier utilisateur BeamNG.Drive et renommez le dossier de la dernière version (par exemple 0.35) en 0.xx_OLD (0.35_OLD). Fermez BeamNG.drive avant de le renommer. 
|
||||
|
||||
### 3. Suppression des mods des dossiers de contenu.
|
||||
|
||||
Pour accéder au dossier Beamng.drive\content\ et le vider de tout mod, ouvrez l'emplacement d'installation de BeamNG.drive. Faites un clic droit sur le dossier `content` et supprimez-le. Procédez à la vérification des fichiers du jeu via Steam ou Epic Games. Les fichiers seront alors à nouveau téléchargés.
|
||||
|
||||
Une fois terminé, lancez BeamNG.Drive via le lanceur BeamMP. Le seul mod activé dans le dépôt devrait être « multiplayerbeammp », ainsi que le bouton d'accès à BeamMP dans le menu principal. Si vous rencontrez toujours des difficultés pour rejoindre un serveur moddé, il est probable que des mods défectueux ou obsolètes soient disponibles.
|
||||
|
||||
### 4. Nettoyage du cache de BeamMP-Launcher
|
||||
|
||||
Pour nettoyer les mods en cache des répertoires BeamMP, accédez à l'emplacement d'installation de votre lanceur BeamMP. Par défaut, le chemin est « C:\Users\AppData\BeamMP-Launcher ». Vous y trouverez un dossier « Resources ». Supprimez ce dossier pour supprimer tous les mods en cache. Cela peut être utile si vous avez besoin de plus d'espace disque ou si vous souhaitez supprimer des mods BeamNG obsolètes.
|
||||
|
||||
!!! question "Mes paramètres et configurations ont disparu ! Comment puis-je les restaurer ?"
|
||||
|
||||
Si vous avez renommé le dossier utilisateur, vous avez forcé le jeu à créer un nouveau dossier utilisateur propre. Vous pouvez copier les dossiers « paramètres » et « véhicules » du dossier renommé (par exemple, 0.34_OLD) vers le nouveau dossier créé.
|
||||
Assurez-vous que BeamNG.Drive est fermé et remplacez tous les éléments à l'emplacement où vous souhaitez copier les dossiers. Toutes les configurations et tous les paramètres devraient maintenant être identiques.
|
||||
@@ -0,0 +1,25 @@
|
||||
# Проблема
|
||||
|
||||
Лаунчер не подключается к игре. Это краткое руководство объясняет, как вручную изменить порт лаунчера.
|
||||
|
||||
# Изменение порта вручную
|
||||
|
||||
1. Запустить BeamNG
|
||||
2. В главном меню выберите «Параметры», затем «Мультиплеер»
|
||||
3. В параметрах многопользовательской игры включите `Show advanced options`
|
||||
4. Прокрутите страницу вниз
|
||||
5. В `Launcher port` измените номер порта на другой, например, 4567
|
||||
6. Закрыть BeamNG
|
||||
7. Щелкните правой кнопкой мыши по ярлыку BeamMP-launcher и выберите в контекстном меню `Open file location`
|
||||
8. Откройте файл `launcher.cfg` в текстовом редакторе.
|
||||
9. Измените `"Port": 4444,` номер на тот же, который вы использовали ранее в игровых настройках, в этом примере 4567
|
||||
10. Сохраните изменения и закройте текстовый редактор.
|
||||
11. Запустите BeamMP-лаунчер
|
||||
|
||||
Если соединения все еще нет, попробуйте еще раз с другим портом. Любое число между ~2000 и 65535 является допустимым портом
|
||||
|
||||
## Проблема все еще не решена?
|
||||
|
||||
Создайте заявку в службу поддержки на нашем [Discord Сервере](https://discord.gg/BeamMP).
|
||||
|
||||
Теги: Лаунчер, Ошибка Соединения, Номер Порта
|
||||
@@ -3,38 +3,50 @@
|
||||
!!! информация
|
||||
|
||||
```
|
||||
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).
|
||||
Перед изменением настроек брандмауэра убедитесь, что ваша сеть в параметрах Windows настроена как частная (при условии, что вы действительно находитесь в частной сети).
|
||||
|
||||
!!! danger ":material-scale-balance: DISCLAIMER:"
|
||||
|
||||
**Firewall / Defender exclsuions are a risk**.
|
||||
**Исключения в Firewall / Defender представляют собой риск**.
|
||||
|
||||
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.
|
||||
Создавая исключения, вы осознаёте риски, связанные с разрешением программам на вашем ПК и открытием портов вашей домашней сети для публичного доступа, и, следовательно, лишаете себя права привлекать BeamMP к ответственности за **любые** возможные убытки или ущерб, которые могут возникнуть у вас или вашего домохозяйства.
|
||||
|
||||
We take no responsibility for any content on any externally linked services or websites.
|
||||
Мы не несём ответственности за любой контент, размещённый на внешних сервисах или сайтах, на которые ведут ссылки.
|
||||
```
|
||||
|
||||
## 1. Исключение брандмауэра для BeamMP-Launcher.
|
||||
## 1. Исключение для BeamMP-Launcher в брандмауэре Защитника.
|
||||
|
||||
1. Откройте `Windows Defender Firewall with advanced setting` .
|
||||
2. В окне нажмите `Inbound` , чтобы открыть вкладку исключений для входящих подключений.
|
||||
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` без кавычек.
|
||||
4. Выберите `Program`, чтобы создать исключение для конкретной программы.
|
||||
5. Введите полный путь к файлу `BeamMP-Launcher.exe`. По умолчанию это `%appdata%\BeamMP-Launcher\BeamMP-Launcher.exe` (без кавычек).
|
||||
6. Обязательно разрешите подключение
|
||||
7. Дайте исключению имя (например, «BeamMP-Launcher») и сохраните его.
|
||||
8. Перезагрузите компьютер.
|
||||
|
||||
## 2. Исключение антивируса для BeamMP-Launcher.
|
||||
## 1.1 Исключение сервера BeamMP из списка блокировки брандмауэра Защитника.
|
||||
|
||||
1. Откройте приложение `Windows Security` .
|
||||
2. Нажмите на первый пункт `virus and threat protection` .
|
||||
1. Откройте `Windows Defender Firewall with advanced setting`.
|
||||
2. В окне нажмите `Inbound`, чтобы открыть вкладку «Исключения для входящих».
|
||||
3. Нажмите `Create new rule` в правом верхнем углу, чтобы создать новое исключение.
|
||||
4. Выберите`Port` чтобы создать исключение для конкретной программы.
|
||||
5. Укажите тот же порт, что и в ServerConfig.toml.
|
||||
6. Введите полный путь к файлу `BeamMP-Server.exe`. Файл находится в той папке, в которую вы его поместили после загрузки.
|
||||
7. Убедитесь, что вы разрешили подключения
|
||||
8. Дайте имя исключению (прим. "BeamMP-Server") и сохраните его.
|
||||
9. Перезагрузите компьютер.
|
||||
|
||||
## 2. Исключение BeamMP-Launcher/Server из списка мониторинга Антивируса Защитника.
|
||||
|
||||
1. Откройте приложение `Windows Security`.
|
||||
2. Нажмите на первый пункт `virus and threat protection`.
|
||||
3. Нажмите `Manage settings` в разделе «Параметры защиты от вирусов и угроз».
|
||||
4. Прокрутите страницу вниз, чтобы перейти на вкладку `Exclusions` .
|
||||
5. Там нажмите «Добавить исключение» и выберите `process` .
|
||||
6. Введите `BeamMP-Launcher.exe` в поле и сохраните его.
|
||||
4. Прокрутите страницу вниз, чтобы перейти на вкладку `Exclusions`.
|
||||
5. Там нажмите «Добавить исключение» и выберите `process`.
|
||||
6. Введите `BeamMP-Launcher.exe` или `BeamMP-Server.exe` в поле и сохраните.
|
||||
7. Перезагрузите компьютер.
|
||||
|
||||
## Все еще сталкиваетесь с проблемами?
|
||||
|
||||
Откройте тему на [форуме](https://forum.beammp.com) или на нашем [сервере Discord](https://discord.gg/beammp) в канале `#support` .
|
||||
Откройте тему на [форуме](https://forum.beammp.com) или на нашем [сервере Discord](https://discord.gg/beammp) в канале `#support`.
|
||||
|
||||
@@ -8,19 +8,20 @@
|
||||
|
||||
# Что такое CGNAT?
|
||||
|
||||
Подробное объяснение того, что такое CGNAT и почему это может стать проблемой при попытке размещения сервера дома, можно найти на [этой странице](https://en.wikipedia.org/wiki/Carrier-grade_NAT) .
|
||||
Подробное объяснение того, что такое 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.
|
||||
Откройте командную строку, запустите `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``
|
||||
Первый переход будет вашим роутером/модемом/шлюзом и отличается в зависимости от устройства.
|
||||
Официальные диапазоны для локальных сетей следующие:
|
||||
``10.0.0.xxx`` - ``192.168.xxx.xxx`` - ```172.16.xxx.xxx``
|
||||
```
|
||||
|
||||
## Метод 2:
|
||||
@@ -34,8 +35,8 @@ The official ranges for local networks are as follows: ``10.0.0.xxx`` - ``192.16
|
||||
!!! предупреждение
|
||||
|
||||
```
|
||||
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!
|
||||
Интернет-провайдеры могут предлагать выделенные IP-адреса только как платную услугу.
|
||||
Проверьте цены у наших партнёрских хостинговых сервисов — это может оказаться дешевле этой платы!
|
||||
```
|
||||
|
||||
Пример сети, не являющейся CGNAT:
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
## Зачем мне деактивировать моды?
|
||||
|
||||
В BeamMP сервер, к которому вы решили подключиться, предоставляет необходимые моды. Они загружаются и активируются автоматически при подключении. Наличие установленных и активных локальных модов часто приводит к тому, что BeamMP не работает должным образом, даже если у вас есть всего один дополнительный мод помимо BeamMP.
|
||||
|
||||
!!! предупреждение
|
||||
|
||||
```
|
||||
Удалите все моды, которые вы разместили в папке BeamNG.Drive\content\ или её подпапках. Это место не предназначено для установки модов и может вызвать проблемы, как указано в файле `DO_NOT_INSTALL_MODS_HERE.txt`, находящемся в той же директории.
|
||||
|
||||
!!! quote "DO_NOT_INSTALL_MODS_HERE.txt"
|
||||
|
||||
Ни в коем случае не копируйте моды в эту папку: это может привести к повреждению модов, замедлению установки обновлений, неправильной работе менеджера модов, нарушению работы безопасного режима и другим проблемам.
|
||||
```
|
||||
|
||||
## Как деактивировать/удалить мои моды?
|
||||
|
||||
Существует 3 варианта решения возможных проблем при использовании BeamMP.
|
||||
|
||||
### 1. Отключить моды
|
||||
|
||||
Перед тем, как присоединиться к любому серверу, убедитесь, что у вас нет модов, кроме 'multiplayerbeammp'. Если игра зависает или у вас все еще есть проблемы, обратитесь к следующему варианту
|
||||
|
||||
### 2. Создание новой папки пользователя
|
||||
|
||||
Откройте папку пользователя BeamNG.Drive и переименуйте папку `current`, например, в `current_old`. Перед переименованием закройте BeamNG.drive. 
|
||||
|
||||
### 3. Удаление модов из папок контента.
|
||||
|
||||
Чтобы получить доступ к папке `Beamng.drive\contentЧтобы получить доступ к папке и очистить ее от любых модов, откройте место установки BeamNG.drive. Щелкните правой кнопкой мыши папку `content` и удалите ее. Продолжайте проверять файлы игры через Steam или Epic Games. Это приведет к повторной загрузке файлов.
|
||||
|
||||
После того, как вы закончите, запустите BeamNG.Drive через BeamMP-Launcher, и у вас должен быть 'multiplayerbeammp' как ваш единственный включенный мод, доступный в репозитории, а также кнопка в главном меню для входа в BeamMP. Если у вас все еще есть проблемы с присоединением к модифицированному серверу, они, вероятно, предоставляют сломанные/устаревшие моды.
|
||||
|
||||
### 4. Очистка кэша BeamMP-Launcher
|
||||
|
||||
Чтобы очистить кэшированные моды из каталогов BeamMP, перейдите в место установки вашего BeamMP-Launcher. По умолчанию путь будет <code>C:\Users\AppData\BeamMP-Launcher</code>. Там вы найдете папку 'Resources'. Удалите папку, чтобы удалить все кэшированные моды. Это может быть полезно, если вам нужно больше места на диске или вы хотите очистить устаревшие моды BeamNG.
|
||||
|
||||
!!! вопрос "Мои настройки и конфигурации пропали! Как их восстановить?"
|
||||
|
||||
```
|
||||
Если вы переименовали папку пользователя, вы заставили игру создать новую, чистую папку пользователя. Вы можете скопировать папки "settings" и "vehicles" из папки, которую вы переименовали (например, `current_old`), в новую созданную папку.
|
||||
Убедитесь, что BeamNG.Drive закрыт, и замените все элементы в месте, куда вы копируете папки. Теперь у вас должны быть все настройки и конфигурации, как и раньше.
|
||||
```
|
||||
@@ -5,16 +5,16 @@ Launcher не может обновиться или показывает пус
|
||||
!!! примечание
|
||||
|
||||
```
|
||||
You should have already used or installed BeamMP using the installer provided by [our website](https://beammp.com) before continuing.
|
||||
Ты должен был уже установить или использовать BeamMP с помощью установщика, предоставленного на [нашем сайте](https://beammp.com), прежде чем продолжить.
|
||||
```
|
||||
|
||||
# Загрузка и установка нового лаунчера
|
||||
|
||||
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 как обычно, чтобы проверить его работу.
|
||||
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, скачать,
|
||||
Создайте тикет поддержки на нашем [Сервере Discord](https://discord.gg/BeamMP). Теги: Launcher, скачать
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
### **Как установить BeamMP?**
|
||||
|
||||
Полное руководство по установке BeamMP на Windows можно найти [здесь](https://docs.beammp.com/game/getting-started/) .
|
||||
Полное руководство по установке BeamMP на Windows можно найти [здесь](https://docs.beammp.com/game/getting-started/).
|
||||
|
||||
---
|
||||
|
||||
@@ -28,7 +28,7 @@ BeamMP не будет работать с пиратскими или уста
|
||||
|
||||
### **Почему мой антивирус или Защитник Windows помечает лаунчер?**
|
||||
|
||||
Некоторые антивирусные программы могут помечать BeamMP как угрозу из-за его взаимодействия с сетью и другими вещами. В коде **нет вирусов** . Код для лаунчера, сервера и клиента lua можно найти на нашем [GitHub](https://github.com/BeamMP) .
|
||||
Некоторые антивирусные программы могут помечать BeamMP как угрозу из-за его взаимодействия с сетью и другими вещами. В коде **нет вирусов**. Код для лаунчера, сервера и клиента lua можно найти на нашем [GitHub](https://github.com/BeamMP).
|
||||
|
||||
---
|
||||
|
||||
@@ -44,7 +44,7 @@ BeamMP не будет работать с пиратскими или уста
|
||||
|
||||
### **Где я могу найти код?**
|
||||
|
||||
Весь исходный код можно найти на нашем [GitHub](https://github.com/BeamMP) . Перед внесением любых изменений помните, что код подчиняется нашим [Условиям использования](https://forum.beammp.com/t/terms-of-use-v1-0/43) и лицензиям:
|
||||
Весь исходный код можно найти на нашем [GitHub](https://github.com/BeamMP). Перед внесением любых изменений помните, что код подчиняется нашим [Условиям использования](https://forum.beammp.com/t/terms-of-use-v1-0/43) и лицензиям:
|
||||
|
||||
Код | Лицензия
|
||||
--- | :-:
|
||||
@@ -56,9 +56,9 @@ BeamMP не будет работать с пиратскими или уста
|
||||
|
||||
### **Я нашел ошибку или эксплойт, что мне делать?**
|
||||
|
||||
Если проблема связана с кодом, и вы знаете, как использовать Github, откройте новую «Проблему» в соответствующем репозитории на нашем [GitHub](https://github.com/BeamMP) . Мы используем рабочий процесс, основанный на проблемах, поэтому даже если у вас уже есть исправление ошибки, рассмотрите возможность открытия новой «Проблемы», а затем откройте «Запрос на извлечение» с решениями для проблемы. Более подробную информацию о содействии можно найти [здесь](https://github.com/BeamMP/BeamMP/blob/development/CONTRIBUTING.md) .
|
||||
Если проблема связана с кодом, и вы знаете, как использовать 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) .
|
||||
- Если это не что-то деликатное, вы можете создать сообщение на нашем [форуме BeamMP](https://forum.beammp.com) или сообщить об этом на нашем [официальном Discord](https://discord.gg/beammp).
|
||||
- Если информация конфиденциальная, вы можете напрямую сообщить о проблеме нашему сотруднику в [Discord](https://discord.gg/beammp).
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
# 28 марта 2026 г. FAQ о сбоях BeamMP
|
||||
|
||||
Временный раздел часто задаваемых вопросов (FAQ) в связи с (текущим) сбоем в работе BeamMP, начавшимся 28 марта 2026 года.
|
||||
|
||||
**Последнее обновление: 1 апреля 2026 г.**
|
||||
|
||||
=== Помогите! Мой лаунчер BeamMP не работает! Попробуйте переустановить лаунчер BeamMP. Для этого выполните следующие действия: 1. Перейдите на [сайт beammp.com](https://beammp.com/) 2. Нажмите *«Скачать сейчас»* 3. Запустите установщик и следуйте инструкциям
|
||||
|
||||
```
|
||||
!!! примечание
|
||||
|
||||
По состоянию на 1 апреля 2026 года, согласно Windows Defender SmartScreen, установщик MSI является «неопознанным приложением».
|
||||
|
||||
Чтобы обойти это предупреждение, нажмите *Подробнее*, а затем *Запустить в любом случае*.
|
||||
```
|
||||
|
||||
=== Помогите! Мои ключи авторизации больше не работают! С 1 апреля 2026 года системы управления ключами и авторизации отключены. Это означает, что ваши ключи авторизации работать не будут. Чтобы обойти это, выполните следующие действия: 1. Откройте файл `ServerConfig.toml` или любой другой файл конфигурации вашего сервера. 2. Установите значение `Private` в `true` . Должно получиться примерно так: `Private = true` 3. Это должно решить проблему с ключами авторизации.
|
||||
|
||||
```
|
||||
!!! примечание
|
||||
|
||||
С 1 апреля 2026 года системы аутентификации BeamMP отключены. Доступны только гостевые учетные записи.
|
||||
|
||||
Убедитесь, что ваш официант разрешает вход гостям.
|
||||
```
|
||||
@@ -1,22 +1,22 @@
|
||||
# Часто задаваемые вопросы игроков
|
||||
# Часто Задаваемые Вопросы Игроков
|
||||
|
||||
## Как привязать свой аккаунт Discord?
|
||||
|
||||
Связывание аккаунтов Discord и BeamMP — это новая функция BeamMP. Для этого вам нужно отправить `!link` в виде сообщения боту [BeamMP Accounts](https://discordapp.com/channels/@me/1201234743568634026/) . Бот ответит ссылкой для входа в ваш аккаунт BeamMP. Просто войдите в свой аккаунт BeamMP, после этого вы получите второе сообщение о том, что он успешно связал ваши аккаунты. 🎉
|
||||
Связывание вашего аккаунта Discord с аккаунтом BeamMP — новая функция BeamMP. Для этого перейдите в [Настройки аккаунта на форуме](https://forum.beammp.com/my/preferences/account) и подключите свой аккаунт Discord в разделе «Связанные аккаунты» (это видно только при отключенной двухфакторной аутентификации на форуме).
|
||||
|
||||
## Как получить ранний доступ?
|
||||
|
||||
Ранний доступ (включая фиолетовую метку и другие преимущества) можно получить, поддержав нас финансово на [Patreon](https://patreon.com/BeamMP) , купив уровень, сделав пожертвование или ускорив сервер Discord. Пожертвование **x** суммы в долларах США = **x** дополнительных ключей сервера, включая преимущества EA. Ускорение дает вам +4 ключа сервера в дополнение к преимуществам EA.
|
||||
Ранний доступ (включая фиолетовую метку и другие преимущества) можно получить, поддержав нас финансово на [Patreon](https://patreon.com/BeamMP), купив уровень, сделав пожертвование или ускорив сервер Discord. Пожертвование **x** суммы в долларах США = **x** дополнительных ключей сервера, включая преимущества EA. Ускорение дает вам +4 ключа сервера в дополнение к преимуществам EA.
|
||||
|
||||
## Я подписался на Patreon. Как мне получить свои привилегии?
|
||||
|
||||
Чтобы автоматически получать бонусы, обязательно выполните следующие действия:
|
||||
|
||||
1. Привяжите свой аккаунт Discord к Patreon, чтобы получить роли и доступ на сервере Discord.
|
||||
2. Пожалуйста, убедитесь, что вы используете тот же адрес электронной почты на Patreon, что и для вашей учетной записи BeamMP на [форуме](https://forum.beammp.com/) .
|
||||
1. Свяжите свой аккаунт Discord на [Patreon](https://www.patreon.com/settings/apps/discord), чтобы получить роли и доступ на сервере 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) , где сообщество может задавать вопросы и получать ответы.
|
||||
Если ваш вопрос или проблема связаны с Игрой или процессом, пожалуйста, обратитесь к разделу [FAQ по Играм](game-faq.md). Если ваш вопрос или проблема связаны с запуском Сервера, пожалуйста, обратитесь к разделу [FAQ по Серверу](server-faq.md). В противном случае, пожалуйста, посетите [форумы](https://forum.beammp.com/c/faq/35), где сообщество может задавать вопросы и получать ответы.
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
# Часто задаваемые вопросы и известные проблемы
|
||||
|
||||
Список часто задаваемых вопросов и известных ошибок.
|
||||
|
||||
---
|
||||
|
||||
## **Сервер**
|
||||
|
||||
---
|
||||
|
||||
### **Как мне настроить свои собственные серверы?**
|
||||
|
||||
Всю информацию о настройке собственного сервера можно найти [здесь](https://docs.beammp.com/server/create-a-server/).
|
||||
|
||||
---
|
||||
|
||||
### **Можно ли создать сервер с использованием Linux?**
|
||||
|
||||
Мы предоставляем бинарные файлы для многих дистрибутивов Linux [здесь](https://github.com/BeamMP/BeamMP-Server/releases/latest). Если для вашей операционной системы/дистрибутива нет бинарных файлов, вы можете собрать их самостоятельно, загрузив исходный код на нашем [GitHub](https://github.com/BeamMP/BeamMP-Server), руководство можно найти [здесь](https://github.com/BeamMP/BeamMP-Server#build-instructions).
|
||||
|
||||
---
|
||||
|
||||
### **Каковы минимальные системные требования для запуска сервера BeamMP?**
|
||||
|
||||
- ОЗУ: 50+ МБ полезной памяти (не считая накладных расходов ОС)
|
||||
- Процессор: >1 ГГц, желательно многоядерный
|
||||
- ОС: Windows, Linux (теоретически любая POSIX)
|
||||
- Графический процессор: Нет
|
||||
- HDD: 10 МБ + Моды/Плагины
|
||||
- Пропускная способность: загрузка 5-10 Мбит/с
|
||||
|
||||
---
|
||||
|
||||
## **Игроки за пределами моей сети не могут присоединиться к моему серверу, размещенному на моем собственном сервере.**
|
||||
|
||||
Прочитайте руководство по переадресации портов, которое доступно [здесь](https://docs.beammp.com/server/port-forwarding/). Ниже приведен краткий обзор наиболее важных шагов. Если другие игроки, пытаясь подключиться к вашему серверу, получают код ошибки 10060, 10061 или 10038 в своем лаунчере BeamMP, то вам следует проверить следующие шаги:
|
||||
|
||||
- Перенаправьте порт 30814 (или любой другой порт, указанный в ServerConfig.toml), протоколы TCP и UDP.
|
||||
- Разрешить BeamMP через брандмауэр Windows, разрешить как входящие, так и исходящие соединения. Отключение брандмауэра обычно НЕ работает.
|
||||
- Убедитесь, что вы не используете VPN (это может вызвать проблемы).
|
||||
- Убедитесь, что сервер действительно работает, без ошибок и предупреждений.
|
||||
|
||||
Вы можете проверить, успешно ли выполнен проброс портов, с помощью CheckBeamMP, пока сервер работает.
|
||||
|
||||
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
|
||||
<label for="ip">IP-адрес:</label>
|
||||
<input type="text" id="ip" name="ip"><br>
|
||||
<label for="port">Порт:</label>
|
||||
<input type="text" id="port" name="port"><br>
|
||||
<input type="submit" value="CheckBeamMP">
|
||||
</form>
|
||||
|
||||
Примечания:
|
||||
|
||||
- Некоторые интернет-провайдеры не предоставляют выделенные адреса IPv4 для вашего соединения (CGNAT), поэтому переадресация портов может быть невозможна, несмотря на то, что она доступна в маршрутизаторе.
|
||||
- Переадресация портов невозможна, если вы используете мобильное (4G/5G) интернет-подключение.
|
||||
|
||||
---
|
||||
|
||||
### **Я вижу свой сервер, размещенный на собственном сервере, в списке серверов, но не могу подключиться к нему сам**
|
||||
|
||||
Если сервер запущен на той же машине, что и игра, вам самим придется использовать Direct Connect для присоединения с IP 127.0.0.1 и портом вашего сервера. Чтобы вы могли присоединиться на свой собственный сервер через список серверов, ваш маршрутизатор должен поддерживать NAT-loopback, но эту функцию поддерживают не многие домашние маршрутизаторы.
|
||||
|
||||
---
|
||||
|
||||
## **Разнообразный**
|
||||
|
||||
---
|
||||
|
||||
### **Где я могу найти код?**
|
||||
|
||||
Весь исходный код можно найти на нашем [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/README.md)
|
||||
Клиент Луа | [ЛИЦЕНЗИЯ](https://github.com/BeamMP/BeamMP/blob/development/LICENSE.md)
|
||||
|
||||
---
|
||||
|
||||
### **Я нашел ошибку или эксплойт, что мне делать?**
|
||||
|
||||
Если проблема связана с кодом, и вы знаете, как использовать 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).
|
||||
@@ -0,0 +1,25 @@
|
||||
# Как узнать IP моего Сервера?
|
||||
|
||||
## Для серверов VPS-хостинга
|
||||
|
||||
Если вы размещаете сервер с помощью одного из наших партнерских хостинговых сервисов, IP будет опубликован в соответствующем интерфейсе управления сервером. Вы также можете найти IP для вашего сервера(ов) на веб-сайте [Keymaster](https://keymaster.beammp.com/login).
|
||||
|
||||
## Для домашних серверов
|
||||
|
||||
Для серверов, размещенных дома, откройте [whatsmyip.org](https://whatsmyip.org) в браузере. Это выведет публичный адрес IPv4, с которым с вами связываются из Интернета.
|
||||
|
||||
Обратите внимание, что 127.0.0.1 — это локальный адрес (localhost), и его можно использовать только самому себе, если сервер запущен на том же компьютере. Если у вас всё ещё возникают проблемы с подключением к серверу, размещённому дома, проверьте [проброс портов](https://docs.beammp.com/server/port-forwarding/), а также используйте CheckBeamMP
|
||||
|
||||
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
|
||||
<label for="ip">IP-адрес:</label>
|
||||
<input type="text" id="ip" name="ip"><br>
|
||||
<label for="port">Порт:</label>
|
||||
<input type="text" id="port" name="port"><br>
|
||||
<input type="submit" value="CheckBeamMP">
|
||||
</form>
|
||||
|
||||
## Как проверить наличие CGNAT?
|
||||
|
||||
Взгляните на [эту страницу](https://docs.beammp.com/FAQ/How-to-check-for-CGNAT/) , чтобы определить, можете ли вы разместить сервер дома или нет.
|
||||
|
||||
Теги: IP, Сервер, Сбой Подключения, 10060/10061
|
||||
@@ -0,0 +1,13 @@
|
||||
!!! Внимание! "Сайт находится в стадии разработки!"
|
||||
|
||||
```
|
||||
Работа над этим сайтом активно ведётся.
|
||||
|
||||
Считаете, что можете помочь? Пожалуйста, сделайте это, нажав на страницу с изображением карандаша справа!
|
||||
|
||||
Это можно сделать и на любой странице.
|
||||
```
|
||||
|
||||
# Фрагменты кода CEF для BeamNG.drive
|
||||
|
||||
список дел(to-do)
|
||||
@@ -39,14 +39,14 @@ ui\modules\apps\ExampleApp\app.html
|
||||
|
||||
<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` -->
|
||||
<!-- Кнопка для удаления сообщения, вызывает функцию `deleteMessage` в `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>
|
||||
@@ -56,7 +56,7 @@ ui\modules\apps\ExampleApp\app.html
|
||||
</div>
|
||||
```
|
||||
|
||||
Здесь вы можете увидеть тег `<span>` , отображающий передачу вашего транспортного средства, входные данные, используемые для отправки сообщения функции `sendMessage()` в Javascript, и повторяющийся тег `<li>` использующий <b>ng-repeat</b> для переменной `messages` , расположенной в Javascript.
|
||||
Здесь вы можете увидеть тег `<span>`, отображающий передачу вашего транспортного средства, входные данные, используемые для отправки сообщения функции `sendMessage()` в Javascript, и повторяющийся тег `<li>` использующий <b>ng-repeat</b> для переменной `messages`, расположенной в Javascript.
|
||||
|
||||
ui\modules\apps\ExampleApp\app.js
|
||||
|
||||
@@ -74,7 +74,8 @@ angular.module('beamng.apps')
|
||||
$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)
|
||||
|
||||
@@ -82,16 +83,16 @@ angular.module('beamng.apps')
|
||||
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
|
||||
if (!streams.engineInfo) // Ранний выход... Наверное, ты и без этого бесполезного комментария понял
|
||||
return;
|
||||
|
||||
// `lua/vehicle/controller/vehicleController.lua:538` (or use console.log)
|
||||
// `lua/vehicle/controller/vehicleController.lua:538` (или можно использовать console.log)
|
||||
let gear = streams.engineInfo[5]
|
||||
|
||||
// Update the gear name in HTML if needed
|
||||
// Обновляем название передачи в HTML при необходимости
|
||||
if ($scope.gearName !== gear)
|
||||
$scope.gearName = gear
|
||||
})
|
||||
@@ -103,7 +104,7 @@ angular.module('beamng.apps')
|
||||
if ($scope.message == '')
|
||||
return
|
||||
|
||||
// Forward the message to the Lua extension to modify it
|
||||
// Передаём сообщение в Lua-расширение, чтобы оно его изменило
|
||||
bngApi.engineLua('extensions.exampleMod.modifyMessage("' + $scope.message + '")')
|
||||
$scope.message = ''
|
||||
}
|
||||
@@ -112,7 +113,7 @@ angular.module('beamng.apps')
|
||||
$scope.messages.splice(idx, 1)
|
||||
}
|
||||
|
||||
// The `modifyMessage` function will call this hook with the modified data
|
||||
// Функция `modifyMessage` вызовет этот хук с изменёнными данными
|
||||
$scope.$on('MessageReady', function(_, modifiedMessage) {
|
||||
$scope.messages.push(modifiedMessage)
|
||||
});
|
||||
@@ -121,7 +122,7 @@ angular.module('beamng.apps')
|
||||
}])
|
||||
```
|
||||
|
||||
Обратите внимание на использование <b>$scope{/b0} . Это очень важно, поскольку вам нужно будет определить переменные и функции в {b1}$scope</b> , чтобы иметь возможность доступа к ним из <b>Html</b> внутри любого тега <b>ng-*</b> . Таким образом, в этом примере после выполнения функции `sendMessage()` из <b>Html</b> она отправит его в файл lua, расположенный в каталоге расширений мода, и выполнит функцию `modifyMessage()` внутри этого файла lua.
|
||||
Обратите внимание на использование <b>$scope{/b0}. Это очень важно, поскольку вам нужно будет определить переменные и функции в {b1}$scope</b>, чтобы иметь возможность доступа к ним из <b>Html</b> внутри любого тега <b>ng-*</b>. Таким образом, в этом примере после выполнения функции `sendMessage()` из <b>Html</b> она отправит его в файл lua, расположенный в каталоге расширений мода, и выполнит функцию `modifyMessage()` внутри этого файла lua.
|
||||
|
||||
Пример того, как может выглядеть сторона lua:
|
||||
|
||||
@@ -134,7 +135,7 @@ 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>
|
||||
Основное внимание здесь уделяется использованию <b>guihooks.trigger</b>, который запускает событие AngularJS, определенное с помощью `$scope.$on()`. Как вы можете видеть в самом низу файла Javascript, событие называется MessageReady и будет выполнено функцией <b>guihooks.trigger</b> с полезной нагрузкой сообщения, а затем будет помещено в переменную `$scope.messages` для отображения тегом li с помощью <b>ng-repeat</b> в файле <b>Html</b>.
|
||||
|
||||
Полный файл lua находится ниже
|
||||
|
||||
@@ -144,64 +145,64 @@ lua\ge\extensions\exampleMod.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.
|
||||
Это точка входа нашего расширения — именно её загружает игра из файла `modScript.lua`.
|
||||
В файле modScript можно загружать больше расширений и помещать их в ту же директорию, что и этот файл.
|
||||
|
||||
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)
|
||||
В этом файле мы будем взаимодействовать со следующими компонентами:
|
||||
1. Наше расширение для автомобиля. Оно сообщает этому расширению, когда нужно отправить данные, и мы их отправляем. См. `vehicle/extensions/auto/exampleVehicleExtension.lua`
|
||||
2. Ввод. См. `core/input/actions/myActions.json`. Когда привязанная клавиша нажата, вызывается `onActionKeyDown` (функция, экспортируемая ниже)
|
||||
]]
|
||||
|
||||
-- Game Function Hooks
|
||||
-- Хуки игровых функций
|
||||
--------------------------------------------
|
||||
local function onExtensionLoaded()
|
||||
log('D', "onExtensionLoaded", "Called")
|
||||
log('D', "onExtensionLoaded", "Called")
|
||||
end
|
||||
|
||||
local function onExtensionUnloaded()
|
||||
log('D', "onExtensionUnloaded", "Called")
|
||||
log('D', "onExtensionUnloaded", "Called")
|
||||
end
|
||||
|
||||
-- Custom Functions
|
||||
-- Пользовательские функции
|
||||
--------------------------------------------
|
||||
local function onActionKeyDown()
|
||||
log('D', "onActionKeyDown", "Pressed!")
|
||||
log('D', "onActionKeyDown", "Pressed!")
|
||||
end
|
||||
|
||||
local function onVehicleExtensionLoaded(vehID)
|
||||
log('D', "onVehicleExtensionLoaded", "Sending some data to the vehicle")
|
||||
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 veh = be:getObjectByID(vehID) -- Если у вас нет ID, можно также использовать `be:getPlayerVehicle(0)`, чтобы получить текущий автомобиль.
|
||||
if not veh then return end -- Обычная проверка на ошибки
|
||||
|
||||
local data = {
|
||||
["name"] = "Daniel W"
|
||||
}
|
||||
local data = {
|
||||
["name"] = "Daniel W"
|
||||
}
|
||||
|
||||
veh:queueLuaCommand("extensions.exampleVehicleExtension.onDataReceived('" .. jsonEncode(data) .. "')")
|
||||
veh:queueLuaCommand("extensions.exampleVehicleExtension.onDataReceived('" .. jsonEncode(data) .. "')")
|
||||
end
|
||||
|
||||
local function modifyMessage(message)
|
||||
message = message .. " [Modified!]"
|
||||
guihooks.trigger('MessageReady', message)
|
||||
message = message .. " [Modified!]"
|
||||
guihooks.trigger('MessageReady', message)
|
||||
end
|
||||
|
||||
-- Export Interface
|
||||
-- Экспорт интерфейса
|
||||
--------------------------------------------
|
||||
M.onExtensionLoaded = onExtensionLoaded
|
||||
M.onExtensionUnloaded = onExtensionUnloaded
|
||||
M.onExtensionLoaded = onExtensionLoaded
|
||||
M.onExtensionUnloaded = onExtensionUnloaded
|
||||
|
||||
M.onActionKeyDown = onActionKeyDown
|
||||
M.onActionKeyDown = onActionKeyDown
|
||||
M.onVehicleExtensionLoaded = onVehicleExtensionLoaded
|
||||
M.modifyMessage = modifyMessage
|
||||
M.modifyMessage = modifyMessage
|
||||
|
||||
--[[ Other functions could include:
|
||||
- onPreRender(dtReal, dtSim, dtRaw)
|
||||
- onUpdate(dtReal, dtSim, dtRaw)
|
||||
- onClientPreStartMission(levelPath)
|
||||
- onClientPostStartMission(levelPath)
|
||||
--[[ Другие функции могут включать:
|
||||
- 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(`
|
||||
Чтобы найти все возможные функции, выполните поиск в `BeamNG.Drive/lua` по следующему выражению: `extensions.hook(`
|
||||
--]]
|
||||
|
||||
return M
|
||||
@@ -252,7 +253,7 @@ ui\modules\apps\ExampleApp\app.json
|
||||
}
|
||||
```
|
||||
|
||||
Директива должна быть такой же, как в файле <b>Javascript.</b>
|
||||
Директива должна быть такой же, как в файле <b>Javascript</b>
|
||||
|
||||
# Функции Javascript, предоставляемые BeamNG для UI-приложений
|
||||
|
||||
@@ -260,7 +261,7 @@ ui\modules\apps\ExampleApp\app.json
|
||||
bngApi.engineLua("lua_path.function()")
|
||||
```
|
||||
|
||||
Полезно для запуска функции lua с аргументами или без них.
|
||||
Полезно для запуска функции lua с аргументами или без них
|
||||
|
||||
# Функции Lua, предоставляемые BeamNG для UI-приложений
|
||||
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
hide:
|
||||
- навигация
|
||||
---
|
||||
|
||||
# Добро пожаловать в Сообщество BeamMP!
|
||||
|
||||
{width="450"} {width="450"}
|
||||
|
||||
## Наши страницы в социальных сетях
|
||||
|
||||
!!!сбой ""
|
||||
|
||||
```
|
||||
BeamMP Форум - [https://forum.beammp.com](https://forum.beammp.com)
|
||||
```
|
||||
|
||||
!!!цитата ""
|
||||
|
||||
```
|
||||
X (Twitter) - [https://x.com/BeamMPOfficial](https://x.com/BeamMPOfficial)
|
||||
```
|
||||
|
||||
!!!опасность ""
|
||||
|
||||
```
|
||||
YouTube - [https://www.youtube.com/@BeamMPOfficial](https://www.youtube.com/@BeamMPOfficial)
|
||||
```
|
||||
|
||||
!!!внимание ""
|
||||
|
||||
```
|
||||
Patreon - [https://www.patreon.com/c/BeamMP](https://www.patreon.com/c/BeamMP)
|
||||
```
|
||||
|
||||
!!!примечание ""
|
||||
|
||||
```
|
||||
Discord - [https://discord.com/invite/beammp](https://discord.com/invite/beammp)
|
||||
```
|
||||
|
||||
!!!информация ""
|
||||
|
||||
```
|
||||
BlueSky - [https://bsky.app/profile/beammpofficial.bsky.social](https://bsky.app/profile/beammpofficial.bsky.social)
|
||||
```
|
||||
|
||||
## Наши правила
|
||||
|
||||
Наши правила вы можете найти [здесь](rules.md)
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
hide:
|
||||
- навигация
|
||||
---
|
||||
|
||||
# Правила сообщества BeamMP
|
||||
|
||||
!!! info BeamMP Персонал не обязан строго модерировать эти правила и может действовать по своему усмотрению. В дополнение к этим правилам применяются и соблюдаются [Правила Сообщества](https://discord.com/guidelines/) и [Условия Обслуживания](https://discord.com/terms/) Discord.
|
||||
|
||||
## Общие Правила BeamMP (Применяются к Discord, Форуму и Игре)
|
||||
|
||||
1. Никакой Дискриминации (например, сексизма, расизма и т. д.) :material-information-outline:{ title="Сюда входит использование расовых/сексуальных оскорблений или другой лексики, направленной против отдельного человека или группы людей, как напрямую, так и с намерением сделать это." }
|
||||
2. Никаких Издевательств или Притеснений :material-information-outline:{ title="Сюда входит нацеливание на отдельных лиц с использованием нежелательных действий, непрошеных личных сообщений или нацеливание на них с помощью сообщений, изображений или устного общения." }
|
||||
3. Никакого NSFW, Оскорбительного или Вредоносного Контента :material-information-outline:{ title="Сюда входит контент, содержащий вредоносные ссылки, наготу, порнографию, чрезмерную ненормативную лексику или материалы, которые иным образом являются оскорбительными, вредоносными и/или иным образом не подходят для общественных мест." }
|
||||
4. Запрет на Рассылку Спама в Текстовых/Голосовых Каналах или Сообщениях :material-information-outline:{ title="Сюда входит создание нескольких сообщений или тем, рассылка спама одинаковыми или похожими сообщениями, а также злоупотребление голосовыми каналами связи или другие действия, включающие спам-присоединение/выход из сообщества." }
|
||||
5. Говорите по-Английски :material-information-outline:{ title="Вся коммуникация в BeamMP должна вестись на английском языке, где это возможно, за исключением отдельных областей, обозначенных иным образом." }
|
||||
6. Никаких Ненадлежащих Профилей :material-information-outline:{ title="Сюда входят имена профилей, фотографии, биографии или другой контролируемый пользователем контент, который не соответствует правилам и условиям BeamMP/BeamNG/Discord." }
|
||||
7. Запрет на Доксинг :material-information-outline:{ title="Запрет на публикацию личной информации («доксинг») (включая, помимо прочего, настоящие имена, адреса, адреса электронной почты, пароли, информацию о банковских счетах и кредитных картах и т. д.)" }
|
||||
8. Никакой Политики :material-information-outline:{ title="Сюда входит обсуждение прошлых или текущих мировых событий за пределами BeamMP/BeamNG или игр в целом. Существуют места для обоснованного обсуждения этих тем, но BeamMP не входит в их число." }
|
||||
9. Никакой Рекламы не Относящейся к BeamMP/BeamNG Контенту :material-information-outline:{ title="Сюда входят не относящиеся к BeamMP сообщества, каналы социальных сетей или другие внешние ссылки. Это относится к публикациям в сообществе BeamMP, а также к отправке пользователям незапрошенных DM в целях личной рекламы." }
|
||||
10. Не Выдавайте Себя за Сотрудников :material-information-outline:{ title="Это включает в себя выдачу себя за сотрудника BeamMP или утверждение, что у вас есть способности, связанные с должностью сотрудника. Это также включает в себя имитацию сотрудников." }
|
||||
11. Никакой Эксплуатации :material-information-outline:{ title="Это включает в себя эксплуатацию любых ошибок или упущений для личной выгоды или для оказания негативного влияния на опыт других." }
|
||||
12. Категорически запрещается делиться ключами Authkey и использовать альтернативные учетные записи с целью увеличения количества ключей сверх установленного бесплатного лимита.
|
||||
13. Соблюдайте Все Указанные TOS :material-information-outline:{ title="Это важно, поскольку для использования нашего сервера Discord также необходимо соблюдать такие ограничения, как возрастное ограничение Discord (13+)." }
|
||||
14. Уважайте Всех :material-information-outline:{ title="Этого не стоит говорить, но вам нужно уважать всех вокруг вас и вести себя соответственно." }
|
||||
15. Придерживайтесь темы категории или канала. :material-information-outline:{ title="Это не должно быть сказано, но ваш контент должен соответствовать теме области, в которой вы публикуете информацию. Например, канал поддержки должен помогать людям или использоваться при поиске помощи." }
|
||||
16. Никаких излишних Заглавных Букв или Реакций/Эмодзи :material-information-outline:{ title="Пользователи должны воздерживаться от чрезмерного использования заглавных букв или эмодзи/реакций, чтобы не затемнять суть вопроса." }
|
||||
17. Перед тем, как оставлять сообщение в разделах поддержки, ознакомьтесь с [Часто Задаваемыми Вопросами по BeamMP](../../support/player-faq.md) и [Часто Задаваемыми Вопросами по Сообществу BeamMP](https://forum.beammp.com/c/faq/35).
|
||||
|
||||
## Правила Discord
|
||||
|
||||
1. Все Вышеуказанные Правила Применяются Здесь :material-information-outline:{ title="Все правила, упомянутые в этом документе, применяются к голосовым чатам." }
|
||||
2. Соблюдайте Условия и Правила Discord :material-information-outline:{ title="Соблюдайте все правила, изложенные Discord в Условиях и правилах" }
|
||||
3. Никаких Аудио/Трансляций NSFW :material-information-outline:{ title="Players should not stream any content that violates BeamMP rules and Discord TOS." }
|
||||
4. Вышеуказанное правило распространяется на игорные Сервисы/Веб-сайты.
|
||||
5. Не Используйте Чрезмерный Звук :material-information-outline:{ title="Excessively using soundboards, playing loud music or other uses of audio channels to intentionally agitate or target others is prohibited." }
|
||||
6. Не Спамьте Входами/Выходами :material-information-outline:{ title="Most users will have sound effects enabled, do not join and leave voice-chats rapidly." }
|
||||
7. Не Приставайте к Другим (`@'ing`) :material-information-outline:{ title="Это включает в себя повторные просьбы к другим дать ответ после того, как вас проигнорировали или сказали "нет"." }
|
||||
8. Держите команды для ботов в предназначенных для этого каналах.
|
||||
9. Никакой Ролевой Игры :material-information-outline:{ title="Это сделано для предотвращения проблем, возникающих из-за отсутствия контекста, или для предотвращения обхода пользователями определенных правил." }
|
||||
10. Не просите пользователей обращаться к вам в личные сообщения за помощью. Все вопросы, связанные с поддержкой, обсуждайте в специальном разделе поддержки на сервере BeamMP в Discord.
|
||||
11. Не предлагайте подключиться к компьютеру другого пользователя и воздерживайтесь от отправки неоднозначных, потенциально вредоносных и/или опасных файлов или расширений.
|
||||
12. Не давайте инструкций и/или ссылок о том, как скачивать пиратские версии, приобретать незаконные копии программного обеспечения, взламывать учетные записи (Beaming рус. "биминг") или использовать платные модификации.
|
||||
13. Не рекламируйте контент, не связанный с BeamNG/BeamMP. Отправлять медиа с вашего собственного канала разрешается только в специально предназначенном [медиа-канале](https://discord.com/channels/601558901657305098/705427325646274680).
|
||||
14. Следуйте указаниям сотрудников. Если вы считаете, что сотрудник злоупотребляет своей властью, отправьте личное сообщение их руководителю или менеджеру проекта.
|
||||
|
||||
## Как обжаловать действия против вас:
|
||||
|
||||
### Апелляции по запретам можно подавать на <a href="https://docs.google.com/forms/d/1MaTPKM-MHQU5lUtxeOKz3C7OoI6Xbu5RX5AJdX-UOz4" class="inline-onebox">Ban Appeal - BeamMP</a>.
|
||||
|
||||
Все апелляции на бан тщательно расследуются с участием как минимум двух (2) членов команды персонала/модераторов, которые не были вовлечены в рассматриваемое дело. Выдавший апелляцию сотрудник будет иметь право комментировать, но не будет иным образом участвовать в принятии решения по апелляции. Эти результаты апелляции являются окончательными. BeamMP оставляет за собой право разрешать или не разрешать членам, как они сочтут нужным, в соответствии с Правилами Сообщества BeamMP (см. выше), [Discord ToS](https://discord.com/terms) и другими факторами.
|
||||
|
||||
!!! warning В случае принятия мер против вас запрещено создавать новую учётную запись Discord или BeamMP для обхода бана.
|
||||
@@ -1,6 +1,6 @@
|
||||
# Участие в разработке BeamMP Docs
|
||||
|
||||
BeamMP использует [Material for MkDocs](https://squidfunk.github.io/mkdocs-material) в качестве своей темы. Это тема для [MkDocs](https://www.mkdocs.org) . Полную документацию можно найти на их соответствующих сайтах.
|
||||
BeamMP использует [Material for MkDocs](https://squidfunk.github.io/mkdocs-material) в качестве своей темы. Это тема для [MkDocs](https://www.mkdocs.org). Полную документацию можно найти на их соответствующих сайтах.
|
||||
|
||||
## Начало работы
|
||||
|
||||
@@ -28,7 +28,7 @@ BeamMP использует [Material for MkDocs](https://squidfunk.github.io/mk
|
||||
2. Создайте форк проекта в своей учетной записи GitHub.
|
||||
3. Клонируйте проект локально.
|
||||
4. Настройка материалов для MkDocs в соответствии с их руководством [здесь](https://squidfunk.github.io/mkdocs-material/getting-started/).
|
||||
5. Запустите `mkdocs serve` , чтобы запустить сервер документации с функцией перезагрузки в реальном времени, на который вы клонировали форк.
|
||||
5. Запустите `mkdocs serve`, чтобы запустить сервер документации с функцией перезагрузки в реальном времени, на который вы клонировали форк.
|
||||
6. Внесите изменения, которые считаете нужными.
|
||||
7. Сохраните изменения в своем форке.
|
||||
8. Подайте запрос на включение изменений в наш репозиторий [здесь](https://github.com/BeamMP/Docs).
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Коды ошибок
|
||||
# Коды Ошибок
|
||||
|
||||
На этой странице содержатся все коды ошибок, которые может отображать лаунчер.
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
Код | Описание | Возможное решение
|
||||
--- | --- | ---
|
||||
10048 | Что-то другое уже использует порт запуска | Убедитесь, что одновременно запущен только ОДИН экземпляр BeamMP-Launcher. Попробуйте перезагрузить ПК.
|
||||
10038 / 10060 / 10061 | Ни один сервер не ответил по указанному IP-адресу и/или порту | Если вы являетесь владельцем сервера, проверьте правила переадресации портов и/или брандмауэра, найденные на [BeamMP-Server](https://docs.beammp.com/server/create-a-server) . Если вы не являетесь владельцем сервера, выберите другой сервер или свяжитесь с владельцем, если он вам известен.
|
||||
10038 / 10060 / 10061 | Ни один сервер не ответил по указанному IP-адресу и/или порту | Если вы являетесь владельцем сервера, проверьте правила переадресации портов и/или брандмауэра, найденные на [BeamMP-Server](https://docs.beammp.com/server/create-a-server). Если вы не являетесь владельцем сервера, выберите другой сервер или свяжитесь с владельцем, если он вам известен.
|
||||
10054 | Сброс соединения пиром | Сервер, к которому вы подключаетесь, отключился.
|
||||
Не удалось найти игру, пожалуйста, запустите ее. Сообщите об этом, если проблема сохранится код 3. | Лаунчеру не удалось найти информацию об игре (каталог игры, каталог профиля, версию и т. д.) в записи реестра. | Запустите игру хотя бы один раз, чтобы создать значения реестра.
|
||||
Не удалось найти игру, пожалуйста, запустите ее. Сообщите об этом, если проблема сохранится код 4. | Программа запуска не смогла прочитать информацию об игре (каталог игры, каталог профиля, версию и т. д.) в записи реестра. | Эта ошибка чаще всего появляется у пользователей с **пиратскими копиями** игры. Если вы купили игру, запустите ее хотя бы один раз, чтобы были созданы значения реестра.
|
||||
|
||||
@@ -0,0 +1,163 @@
|
||||
# Начиная
|
||||
|
||||
## **1. Совместимость**
|
||||
|
||||
BeamMP полностью совместим с Windows и Linux, совместимость с MacOS находится в разработке. Однако Linux и MacOS являются вторичными платформами, поэтому следует ожидать ошибок.
|
||||
|
||||
!!!предупреждение
|
||||
|
||||
```
|
||||
BeamMP не будет работать с пиратскими или устаревшими версиями BeamNG.drive.
|
||||
Служба поддержки BeamMP не оказывает помощь по вопросам, связанным с пиратскими/устаревшими копиями.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **2. Установка**
|
||||
|
||||
### **2а. Установка Windows**
|
||||
|
||||
!!!примечание
|
||||
|
||||
```
|
||||
По состоянию на 1 апреля 2026 года, согласно Windows Defender SmartScreen, установщик MSI является «неопознанным приложением».
|
||||
|
||||
Чтобы проигнорировать это предупреждение, нажмите «Подробнее», а затем нажмите «Запустить в любом случае».
|
||||
```
|
||||
|
||||
1. Перейдите на [сайт beammp.com](https://beammp.com/) и нажмите кнопку «Скачать сейчас».
|
||||
2. Запустите установщик `BeamMP_Installer.msi` и следуйте инструкциям.
|
||||
3. Значок BeamMP Launcher должен появиться на рабочем столе. Если нет, просто введите «BeamMP» в строку поиска Windows.
|
||||
|
||||
!!!примечание
|
||||
|
||||
```
|
||||
Поскольку при загрузке на карту с множеством созданных транспортных средств подключение может занять больше времени, чем ожидалось.
|
||||
```
|
||||
|
||||
### **2б. Установка Linux**
|
||||
|
||||
В настоящее время вам необходимо самостоятельно собрать Launcher. Для этого вам необходимо базовое понимание того, как собрать приложение.
|
||||
|
||||
Убедитесь, что у вас установлены базовые инструменты разработки, которые обычно входят в пакеты, например:
|
||||
|
||||
- Debian/Ubuntu: `sudo apt install build-essential`
|
||||
- Fedora: `sudo dnf install cmake gcc gcc-c++ make perl perl-IPC-Cmd perl-FindBin perl-File-Compare perl-File-Copy kernel-headers kernel-devel`
|
||||
- Arch: `sudo pacman -S base-devel`
|
||||
- openSUSE: `zypper in -t pattern devel-basis`
|
||||
- SteamOS (Arch): `sudo pacman -S base-devel linux-api-headers glibc libconfig` (Вам также необходимо выполнить команду `sudo steamos-readonly disable` , но не забудьте включить ее снова после установки пакетов)
|
||||
|
||||
Склонируйте `vcpkg`, выполните его начальную сборку (bootstrap) и добавьте в PATH
|
||||
|
||||
1.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/microsoft/vcpkg.git
|
||||
```
|
||||
|
||||
1.
|
||||
|
||||
```bash
|
||||
./vcpkg/bootstrap-vcpkg.sh
|
||||
```
|
||||
|
||||
1.
|
||||
|
||||
```bash
|
||||
export VCPKG_ROOT="$(pwd)/vcpkg"
|
||||
export PATH=$VCPKG_ROOT:$PATH
|
||||
```
|
||||
|
||||
Клонируйте репозиторий BeamMP-Launcher в свою систему с помощью `git`, например: `git clone https://github.com/BeamMP/BeamMP-Launcher.git` [Дополнительная информация о клонировании репозитория GitHub](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository)
|
||||
|
||||
Переключитесь на тег, который использовался для [последнего релиза](https://github.com/BeamMP/BeamMP-Launcher/releases/latest). Например, если в последнем релизе использовался `v2.6.4`, выполните команду `git checkout v2.6.4`
|
||||
|
||||
Если вы использовали пример команды клонирования, который мы предоставили, вы можете использовать `cd BeamMP-Launcher`, чтобы перейти в корневой каталог проекта.
|
||||
|
||||
В корневом каталоге проекта,
|
||||
|
||||
1.
|
||||
|
||||
```cmake
|
||||
cmake . -B bin -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux
|
||||
```
|
||||
|
||||
1.
|
||||
|
||||
```cmake
|
||||
cmake --build bin --parallel
|
||||
```
|
||||
|
||||
!!!примечание ""
|
||||
|
||||
```
|
||||
Если во время сборки не хватит оперативной памяти, можно исключить параметр --parallel — в этом случае сборка будет выполняться только в одном потоке процессора, что позволит сократить объем используемой оперативной памяти.
|
||||
```
|
||||
|
||||
!!!примечание ""
|
||||
|
||||
```
|
||||
Не указывая `-DCMAKE_BUILD_TYPE=Release`, вы создаете отладочную версию, которая больше по размеру файла, но не содержит ошибки, из-за которой программа запуска может подключиться к серверу только один раз.
|
||||
```
|
||||
|
||||
!!!примечание "Пользователи Fedora" Если vcpkg выдаёт ошибку при компиляции OpenSSL из-за заголовков ядра, убедитесь, что все зависимости установлены: `bash sudo dnf install kernel-headers kernel-devel gcc gcc-c++ make perl` Затем очистите кэш vcpkg: `bash rm -rf $VCPKG_ROOT/buildtrees/openssl` И повторите команду конфигурации cmake.
|
||||
|
||||
Переместите готовое приложение из папки `/bin` в отдельную папку и запустите его оттуда:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/beammp-launcher
|
||||
cp bin/BeamMP-Launcher ~/beammp-launcher/
|
||||
cd ~/beammp-launcher
|
||||
./BeamMP-Launcher
|
||||
```
|
||||
|
||||
Нативный Linux-ланчер BeamMP запустится и будет использовать нативную версию BeamNG.drive для Linux
|
||||
|
||||
### **2c. Использование beamNG.drive с Proton**
|
||||
|
||||
Если вы хотите использовать родной Linux BeamMP-Launcher вместе с BeamNG.drive, работающим через Proton, вы можете сделать это:
|
||||
|
||||
Запустите BeamMP-Launcher, используя аргумент `--no-launch` (Это не позволит Launcher запустить собственный Linux BeamNG.drive). Дополнительную информацию об аргументах Launcher можно найти в [разделе Настройка среды разработки](../guides/beammp-dev/beammp-dev.md)
|
||||
|
||||
Измените расположение пользовательской папки Proton-BeamNG.drive на расположение Linux-BeamNG.drive (поскольку собственный Linux BeamMP-Launcher в настоящее время записывает только в пользовательскую папку Linux-BeamNG.drive)
|
||||
|
||||
Это можно сделать, например, создав символическую ссылку
|
||||
|
||||
- Запомните местоположение пользовательской папки Linux-BeamNG.drive (обычно она находится в `~/.local/share/BeamNG.drive`) и переименуйте ее, например, в `BeamNG.drive_old`
|
||||
- Обратите внимание на расположение пользовательской папки Proton-BeamNG.drive (обычно она находится в `~/.local/share/Steam/steamapps/compatdata/284160/pfx/drive_c/users/steamuser/AppData/Local/BeamNG.drive`)
|
||||
- Создайте символическую ссылку между обеими папками пользователей `ln -s ~/.local/share/Steam/steamapps/compatdata/284160/pfx/drive_c/users/steamuser/AppData/Local/BeamNG.drive ~/.local/share`
|
||||
|
||||
После установки символической ссылки между пользовательскими папками и скомпилированным лаунчером вы можете заставить Steam запустить игру через Proton, при этом лаунчер автоматически запустится со следующей заменой параметров запуска для оригинальной игры, которые можно найти в окне «Свойства» игры в ее записи в Steam:
|
||||
|
||||
- `~/BeamMP/BeamMP-Launcher --no-launch & %command% ; killall BeamMP-Launcher`
|
||||
|
||||
Обратите внимание, что это предполагает, что вы поместили скомпилированный ранее двоичный файл лаунчера в `/home/user/BeamMP/`, поэтому измените его так, чтобы он соответствовал месту, куда вы поместили готовый двоичный файл, и вам придется перекомпилировать лаунчер с правильной веткой git каждый раз при выпуске обновления лаунчера.
|
||||
|
||||
!!! совет "Добавление шрифта эмодзи для получения эмодзи в тексте"
|
||||
|
||||
```
|
||||
Для того чтобы эмодзи отображались в списке серверов (как часть пользовательского имени сервера) или во внутриигровом чате, вам нужен шрифт, содержащий эмодзи.
|
||||
|
||||
Это можно сделать, например, добавив [Linux-версию шрифта эмодзи Segoe-UI для Windows](https://github.com/mrbvrz/segoe-ui-linux)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **3. Использование BeamMP**
|
||||
|
||||
1. После запуска лаунчера вы увидите окно терминала. Вскоре после этого должен запуститься стандартный лаунчер BeamNG. **Не** закрывайте окно терминала.
|
||||
2. В главном меню BeamNG.drive нажмите кнопку `Repository` и убедитесь, что включен <strong>только</strong> мод <code>multiplayerbeammp</code> .
|
||||
3. Выйдите в главное меню, нажмите «Ещё..», затем кнопку «Мультиплеер», чтобы начать игру по сети.
|
||||
4. Вам будет предложено войти или играть в качестве гостя (не все серверы допускают гостей). Вы можете создать учетную запись на нашем [форуме](https://forum.beammp.com), а затем войти в BeamMP с теми же учетными данными.
|
||||
5. Выберите любой понравившийся вам сервер и нажмите `Connect`. Наслаждайтесь!
|
||||
|
||||
---
|
||||
|
||||
## **4. Известные проблемы**
|
||||
|
||||
- Нативный linux BeamMP-Launcher в настоящее время может подключиться к серверу только один раз, после отключения вам нужно перезапустить лаунчер. Вы можете сделать это, не закрывая игру между
|
||||
- Если вы не видите кнопку «Мультиплеер». Убедитесь, что мод BeamMP присутствует и активирован в «Менеджере модов», затем попробуйте нажать CTRL + L.
|
||||
- VPN любого типа могут вызывать проблемы с подключением.
|
||||
- Если Launcher сообщает о каких-либо ошибках, прочтите [FAQ](https://forum.beammp.com/c/faq/35).
|
||||
|
||||
Если вам потребуется дополнительная помощь с установкой, вы можете создать сообщение на нашем [форуме](https://forum.beammp.com) или задать вопрос на нашем [сервере Discord](https://discord.gg/beammp).
|
||||
@@ -0,0 +1,323 @@
|
||||
# Настройки Мультиплеера
|
||||
|
||||
## **1. Общие**
|
||||
|
||||
??? setting "Продвинутые настройки"
|
||||
|
||||
```
|
||||
Если включено, будут видны все настройки многопользовательской игры
|
||||
|
||||
Если выключено, видны только базовые настройки
|
||||
```
|
||||
|
||||
??? setting "Включить защиту от клонирования конфигурации"
|
||||
|
||||
```
|
||||
Если включено, конфигурация вашего транспортного средства будет защищена от сохранения другими игроками
|
||||
|
||||
Если выключено, другие игроки смогут сохранить вашу конфигурацию
|
||||
```
|
||||
|
||||
??? setting "Отключить паузу из-за нестабильностей"
|
||||
|
||||
```
|
||||
Если включено, физические нестабильности не будут останавливать игру
|
||||
|
||||
Если выключено, нестабильности будут вызывать паузу
|
||||
|
||||
!!! note ""
|
||||
|
||||
Рекомендуется оставить выключенным, так как повторяющиеся нестабильности могут привести к крашу игры
|
||||
```
|
||||
|
||||
??? setting "Использовать упрощённые транспортные средства, если доступны"
|
||||
|
||||
```
|
||||
Если включено, транспортные средства других игроков будут заменяться упрощёнными моделями (как в AI-трафике), если они доступны
|
||||
|
||||
Если выключено, будут использоваться оригинальные модели
|
||||
```
|
||||
|
||||
??? setting "Новое меню чата"
|
||||
|
||||
```
|
||||
Если включено, чат отображается в окне [IMGUI](https://github.com/ocornut/imgui), которое можно, например, переместить на другой монитор
|
||||
|
||||
Если выключено, чат отображается в стандартном UI приложении
|
||||
|
||||
!!! note ""
|
||||
|
||||
Перетаскивание IMGUI окон может снизить производительность и сбивать программы записи экрана, записывая окно чата вместо основного окна игры
|
||||
```
|
||||
|
||||
??? setting "Включить сглаживание положения автомобиля"
|
||||
|
||||
```
|
||||
Если включено, BeamMP будет использовать алгоритм для сглаживания обновлений позиции транспортного средства через регулярные интервалы. Это может быть полезно для игроков с высоким пингом или при высокой потере пакетов
|
||||
|
||||
Если выключено, BeamMP будет обновлять позиции транспортных средств по мере их получения
|
||||
```
|
||||
|
||||
??? setting "Пропускать предупреждение безопасности модов"
|
||||
|
||||
```
|
||||
Если включено, всплывающее окно с предупреждением о безопасности модов не будет отображаться при подключении к серверу с модами
|
||||
|
||||
Если выключено, предупреждение будет показываться каждый раз при подключении к серверу с модами
|
||||
```
|
||||
|
||||
??? setting "Включить очередь обновлений/редактирования"
|
||||
|
||||
```
|
||||
Если включено, спавн и изменения транспортных средств других игроков будут помещаться в очередь. Подробнее см. раздел `2. Очередь событий`
|
||||
|
||||
Если выключено, спавн и изменения транспортных средств других игроков будут загружаться мгновенно
|
||||
```
|
||||
|
||||
??? setting "Включить автоматическую синхронизацию деталей"
|
||||
|
||||
```
|
||||
Если включено, детали вашего транспортного средства автоматически синхронизируются с другими игроками через несколько секунд
|
||||
|
||||
Если выключено, необходимо вручную нажимать кнопку синхронизации деталей в меню выбора деталей для отправки синхронизации другим игрокам
|
||||
```
|
||||
|
||||
??? setting "Выключить переключение на машины других игроков"
|
||||
|
||||
```
|
||||
Если включено, переключение между транспортными средствами пропустит машины других игроков
|
||||
|
||||
Если выключено, переключение будет происходить по всем доступным транспортным средствам
|
||||
```
|
||||
|
||||
??? setting "Сделать машины прозрачными при приближении"
|
||||
|
||||
```
|
||||
Если включено, другие машины будут постепенно исчезать по мере приближения
|
||||
|
||||
Если выключено, другие машины будут полностью видимы независимо от расстояния
|
||||
|
||||
!!! note ""
|
||||
|
||||
Это влияет только на видимую 3D-модель машины, а не на физическую mesh-сетку. Чтобы также отключить физику, необходимо включить `Упрощённая физика столкновений` в настройках игры
|
||||
```
|
||||
|
||||
??? setting "Показывать ID игроков"
|
||||
|
||||
```
|
||||
Если включено, в списке игроков появится дополнительная колонка с ID каждого игрока. Полезно для разработки или модерации
|
||||
|
||||
Если выключено, список игроков будет показывать только имя игрока и пинг
|
||||
```
|
||||
|
||||
??? setting "Разрешить обновление списка серверов в игре"
|
||||
|
||||
```
|
||||
Если включено, список серверов будет обновляться с регулярными интервалами во время игры. Это может вызвать лаги
|
||||
|
||||
Если выключено, список серверов обновляется только при открытии главного меню
|
||||
```
|
||||
|
||||
## **2. Очередь событий**
|
||||
|
||||
??? setting "Выделить игроков в очереди"
|
||||
|
||||
```
|
||||
Если включено, игроки с ожидающими событиями будут выделены в списке игроков
|
||||
|
||||
Если выключено, игроки не будут выделяться индивидуально
|
||||
```
|
||||
|
||||
??? setting "Выделять игроков с очередью"
|
||||
|
||||
```
|
||||
Если установлено `Левая кнопка мыши`, клик по имени игрока в списке левой кнопкой мыши загрузит ожидающие события, правая кнопка — позволит наблюдать за игроком
|
||||
|
||||
Если установлено `Правая кнопка мыши`, клик правой кнопкой мыши загрузит ожидающие события, левая кнопка — позволит наблюдать
|
||||
```
|
||||
|
||||
??? setting "Автоматизировать очередь"
|
||||
|
||||
```
|
||||
Если включено, события из очереди будут автоматически загружены после того, как ваш транспорт опустится ниже порога скорости на установленное время таймаута
|
||||
|
||||
Если выключено, события загружаются вручную, через кнопку `События` в верхней части экрана или клик по имени игрока в списке
|
||||
```
|
||||
|
||||
??? setting "Порог скорости для срабатывания очереди"
|
||||
|
||||
```
|
||||
Этот параметр определяет порог скорости для автоматической загрузки событий из очереди. Ваш транспорт должен быть медленнее этого порога дольше, чем `Таймаут срабатывания очереди`, чтобы события были загружены
|
||||
```
|
||||
|
||||
??? setting "Таймаут срабатывания очереди"
|
||||
|
||||
```
|
||||
Этот параметр определяет задержку времени для автоматической загрузки событий из очереди. Ваш транспорт должен быть медленнее `Порог скорости для срабатывания очереди` в течение этого времени, чтобы события были загружены
|
||||
```
|
||||
|
||||
??? setting "Не использовать очередь в режиме наблюдения"
|
||||
|
||||
```
|
||||
Если включено, событие будет загружено мгновенно, если вы наблюдаете за другим игроком
|
||||
|
||||
Если выключено, событие будет помещено в очередь, как при фокусе на вашем транспортном средстве
|
||||
```
|
||||
|
||||
??? setting "Не использовать очередь с Юнициклами (Снеговиками/Бимлингсами)"
|
||||
|
||||
```
|
||||
Если включено, событие, связанное с снеговиком или бимлингом, будет загружено мгновенно
|
||||
|
||||
Если выключено, снеговики/бимлинги будут помещены в очередь, как и другие машины
|
||||
```
|
||||
|
||||
## **3. Настройка стандартного Юницикла**
|
||||
|
||||
??? setting "Конфигурация Юницикла по Умолчанию"
|
||||
|
||||
```
|
||||
Этот параметр определяет вариант юницикла, который будет загружаться по умолчанию. Можно выбрать между готовыми конфигурациями или своими сохранёнными настройками
|
||||
```
|
||||
|
||||
??? setting "Автоматически сохранять последний использованный Юницикл"
|
||||
|
||||
```
|
||||
Если включено, последний использованный юницикл автоматически сохранится и загрузится при следующем спавне
|
||||
|
||||
Если выключено, будет спавниться конфигурация по умолчанию
|
||||
```
|
||||
|
||||
## **4. Капли**
|
||||
|
||||
??? setting "Использовать капли для незаспавнившегося автомобиля"
|
||||
|
||||
```
|
||||
Если включено, вместо незаспавненного транспортного средства будет отображаться placeholder-объект (капля)
|
||||
|
||||
Если выключено, незаспавненный транспорт будет невидим
|
||||
```
|
||||
|
||||
??? setting "Изменить цвет"
|
||||
|
||||
```
|
||||
??? setting "Видимость"
|
||||
|
||||
Если включено, капля будет нарисована с использованием выбранного цвета.
|
||||
|
||||
Если выключено, капля отображаться не будет.
|
||||
|
||||
??? setting "RGB HEX значения"
|
||||
|
||||
Ожидаемый транспорт: цвет капли при очереди на спавн, стандарт #FF6400
|
||||
|
||||
Незаконный транспорт: цвет капли для запрещенного транспорта (например, через сторонний мод), стандарт #000000
|
||||
|
||||
Удалённый транспорт: цвет капли для удалённого пользователем транспорта, стандарт #333333
|
||||
```
|
||||
|
||||
## **5. Ники**
|
||||
|
||||
??? setting "Скрыть ники игроков"
|
||||
|
||||
```
|
||||
Если включено, ники игроков не отображаются
|
||||
|
||||
Если выключено, ники игроков отображаются в зависимости от позиции их машин
|
||||
```
|
||||
|
||||
??? setting "Показывать дистанцию до других игроков"
|
||||
|
||||
```
|
||||
Если включено, к нику будет добавлено расстояние до соответствующего транспортного средства
|
||||
|
||||
Если выключено, расстояние отображаться не будет
|
||||
```
|
||||
|
||||
??? setting "Включить/выключть исчезновение ников"
|
||||
|
||||
```
|
||||
Если включено, ники будут появляться/исчезать в зависимости от `Дистанция исчезновения ников` и `Инвертировать направление исчезновения`
|
||||
|
||||
Если выключено, ники будут отображаться с обычной непрозрачностью вне зависимости от расстояния
|
||||
```
|
||||
|
||||
??? setting "Дистанция исчезновения ников/Инвертировать направление исчезновения"
|
||||
|
||||
```
|
||||
!!! setting "Исчезновение"
|
||||
|
||||
Ники становятся менее видимыми, чем дальше находится игрок
|
||||
|
||||
`Дистанция исчезновения ников` определяет расстояние, на котором ник отображается с минимальной непрозрачностью
|
||||
|
||||
!!! setting "Появление"
|
||||
|
||||
Ники становятся более видимыми, чем дальше находится игрок
|
||||
|
||||
`Дистанция исчезновения ников` определяет расстояние, на котором ник отображается с максимальной непрозрачностью
|
||||
```
|
||||
|
||||
??? setting "Не скрывать ники полностью"
|
||||
|
||||
```
|
||||
Если включено, ники не могут быть полностью невидимыми, сохраняется минимальная непрозрачность вне зависимости от расстояния
|
||||
|
||||
Если выключено, ники могут стать полностью невидимыми
|
||||
```
|
||||
|
||||
??? setting "Обрезать длинные никнеймы и роли"
|
||||
|
||||
```
|
||||
Если включено, `Лимит длины ника` обрежет ники и роли до установленного числа символов
|
||||
|
||||
Если выключено, ники и роли отображаются полностью
|
||||
```
|
||||
|
||||
??? setting "Показать наблюдателей под ником автомобиля"
|
||||
|
||||
```
|
||||
Если включено, под ником игрока будет отображаться имя наблюдателя
|
||||
|
||||
Если выключено, имена наблюдателей не отображаются
|
||||
```
|
||||
|
||||
??? setting "Показывать никнеймы наблюдателей серым цветом независимо от их роли"
|
||||
|
||||
```
|
||||
Если включено, ник наблюдателя всегда будет окружён серым фоном
|
||||
|
||||
Если выключено, фон будет отражать роль наблюдателя цветом
|
||||
```
|
||||
|
||||
## **6. Другие**
|
||||
|
||||
??? setting "Показывать сетевую активность в консоле"
|
||||
|
||||
```
|
||||
Если включено, активность сети BeamMP будет отображаться в консоле
|
||||
|
||||
Если выключено, активность сети не будет отображаться
|
||||
|
||||
!!! danger ""
|
||||
|
||||
Будьте осторожны с этой настройкой, так как весь вывод консоли также записывается в лог-файлы
|
||||
|
||||
При включении эта настройка может привести к росту файлов логов на сотни мегабайт за считанные минуты
|
||||
```
|
||||
|
||||
??? setting "Порт лаунчера"
|
||||
|
||||
```
|
||||
Этот параметр определяет порт для связи с лаунчером
|
||||
|
||||
Изменять следует только если стандартный порт 4444 использовать нельзя
|
||||
|
||||
Не забудьте также изменить его в конфигурации лаунчера `launcher.cfg`
|
||||
|
||||
!!! tip ""
|
||||
|
||||
Указанный порт — первый из двух. Второй порт используется сразу после него, то есть порт + 1
|
||||
|
||||
Первый порт передаёт основные сетевые пакеты, второй — игровые пакеты, оба через TCP
|
||||
```
|
||||
@@ -0,0 +1,75 @@
|
||||
# Начало работы
|
||||
|
||||
Чтобы начать разработку для BeamMP вам понадобится как минимум:
|
||||
|
||||
- BeamNG.drive, установленный локально
|
||||
- BeamMP, установленный локально; как минимум лаунчер, дополнительно также сервер
|
||||
- Git, установленный локально, и учетная запись GitHub.com
|
||||
- Редактор кода, например VSCode или notepad++
|
||||
|
||||
---
|
||||
|
||||
# Разница между модом, лаунчером и сервером
|
||||
|
||||
BeamMP разделен на три основные части:
|
||||
|
||||
- Мод загружается BeamNG, как и любой другой мод транспортного средства или пользовательского интерфейса для игры. Его основная функция — установить локальное соединение с лаунчером и отобразить элементы многопользовательского пользовательского интерфейса. Он в основном написан на Lua, с некоторым количеством JavaScript, HTML и CSS для элементов пользовательского интерфейса. Его репозиторий — [https://github.com/BeamMP/BeamMP](https://github.com/BeamMP/BeamMP)
|
||||
- Основная функция лаунчера — установить постоянное соединение с модом, а при необходимости — и с выбранным сервером, а также обрабатывать вход пользователя с помощью бэкенда BeamMP. Он написан на C++, предварительно скомпилирован BeamMP и его можно найти по адресу [https://github.com/BeamMP/BeamMP-Launcher](https://github.com/BeamMP/BeamMP-Launcher)
|
||||
- Сервер устанавливает соединения между одним или несколькими лаунчерами, а также «пульсирует» бэкенд BeamMP, предоставляя такую информацию, как IP, порт, версия, количество игроков и т. д. Кроме того, он управляет и запускает серверные плагины Lua. Он написан на C++, предварительно скомпилирован BeamMP для нескольких различных архитектур ОС и ЦП и может быть найден по адресу [https://github.com/BeamMP/BeamMP-Server](https://github.com/BeamMP/BeamMP-Server)
|
||||
|
||||
---
|
||||
|
||||
# Настройка среды разработки для работы над модом
|
||||
|
||||
## Использование распакованной папки для BeamNG
|
||||
|
||||
Для эффективной работы с модами в BeamNG рекомендуется использовать `unpacked` папку, а не упаковывать zip-архивы после каждого изменения.
|
||||
|
||||
Откройте папку пользователя BeamNG, перейдя в `%appdata%/Local/BeamNG.drive/0.xx/mods`, где `xx` — последняя версия BeamNG. Создайте папку с именем `unpacked` внутри папки `mods`.
|
||||
|
||||
Дополнительную информацию о папке пользователя можно найти по адресу [https://documentation.beamng.com/support/userfolder/](https://documentation.beamng.com/support/userfolder/)
|
||||
|
||||
## Включение режима разработчика в лаунчере BeamMP
|
||||
|
||||
Чтобы предотвратить удаление вашего локального клона git автоматическим обновлением, необходимо отключить его с помощью `--no-download`. Если вы также не хотите, чтобы лаунчер запускал BeamNG, и хотели бы видеть отладочные распечатки, то рекомендуется использовать `--dev`.
|
||||
|
||||
Аргумент | Примечание
|
||||
:-- | :--
|
||||
`--help` или `-h` | Выведет следующий список аргументов
|
||||
`--port <port>` или `-p` | Измените порт прослушивания по умолчанию на `<port>`. Это также должно быть настроено в игре
|
||||
`--verbose` или `-v` | Подробный режим, выводит отладочные сообщения
|
||||
`--no-download` | Пропустить загрузку и установку мода BeamMP Lua
|
||||
`--no-update` | Пропустить применение обновлений лаунчера (необходимо выполнить обновление вручную)
|
||||
`--no-launch` | Пропустить запуск игры (игру необходимо запустить вручную)
|
||||
`--dev` | Режим разработчика, то же самое, что и --verbose --no-download --no-launch --no-update
|
||||
`--game <args...>` или `-- <args...>` | Передает аргументы в игру
|
||||
|
||||
## Клонирование репозитория BeamMP в распакованную папку
|
||||
|
||||
Хотя вы можете вручную скопировать файлы модов BeamMP из нашего репозитория github, настоятельно рекомендуется использовать систему управления исходным кодом, например git. Сначала создайте форк [https://github.com/BeamMP/BeamMP](https://github.com/BeamMP/BeamMP)
|
||||
|
||||
Наиболее эффективным было бы клонировать репозиторий непосредственно в `unpacked` папку.
|
||||
|
||||
Для `git` запустите `git clone https://github.com/yourName/BeamMP` из PowerShell или окна CMD, запущенного из `unpacked` папки. Находясь в папке userfolder, убедитесь, что в `mods` не осталось папки `multiplayer` и что теперь есть `unpacked/beammp`.
|
||||
|
||||
Теперь попробуйте режим разработчика. Запустите лаунчер BeamMP, запустите BeamNG вручную, после входа в игру убедитесь, что BeamMP — единственный активный мод. Вы должны иметь возможность использовать BeamMP как обычно.
|
||||
|
||||
Используя редактор кода, вы теперь можете добавлять или изменять код непосредственно в `unpacked` папке. Затем вы можете попробовать изменения, перезагрузив Lua в игре, нажав `Ctrl+L` (и `F5` если вы внесли изменения в пользовательский интерфейс).
|
||||
|
||||
Как только вы будете довольны своими изменениями, вы можете зафиксировать их через git. Посетите [веб-сайт Git-SCM](https://git-scm.com/doc) для получения руководств и документации по использованию Git. Как только ваши изменения будут зафиксированы и отправлены (в ваш форк), вы можете сделать запрос на извлечение.
|
||||
|
||||
Если у вас возникнут какие-либо проблемы, смело задавайте их на канале #scripting в нашем [Discord](https://discord.gg/beammp).
|
||||
|
||||
---
|
||||
|
||||
# Настройка локального сервера
|
||||
|
||||
При работе с BeamMP может быть полезно использовать локальный сервер. Вы можете следовать общей [установке сервера](../../server/create-a-server.md) , пропуская первые два шага для чисто локальных подключений.
|
||||
|
||||
Установите сервер как закрытый в `serverConfig.toml`, используя любую строку в качестве `AuthKey`.
|
||||
|
||||
---
|
||||
|
||||
# Правила Внесения Вклада
|
||||
|
||||
Подробную информацию о формате кода, формате сообщения о коммите, общих рекомендациях по разработке и т. д. см. в файле `CONTRIBUTING.md` в каждом репозитории. Этот файл содержит более подробную информацию о том, как внести свой вклад. Файл `README.md` в каждом репозитории обычно также содержит шаги сборки (для скомпилированных проектов).
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: Руководства
|
||||
description: Этот набор страниц содержит некоторые основные руководства по BeamMP.
|
||||
status: новый
|
||||
---
|
||||
|
||||
!!! внимание "Этот сайт находится в стадии разработки!"
|
||||
|
||||
```
|
||||
Над этим сайтом ведется активная работа.
|
||||
|
||||
Чувствуете, что можете помочь? Пожалуйста, сделайте это, нажав на страницу с карандашом справа!
|
||||
|
||||
Это можно сделать на любой странице.
|
||||
```
|
||||
|
||||
# Руководства по Разработке BeamMP
|
||||
|
||||
Эта страница будет представлять собой введение и предисловие к созданию клиентского и серверного контента.
|
||||
|
||||
Эту страницу еще нужно доработать.
|
||||
@@ -21,7 +21,7 @@ Resources/
|
||||
└─ further.lua
|
||||
```
|
||||
|
||||
Серверный lua — это необходимый минимум, если вы хотите добавлять пользовательские события, вам также понадобится как минимум клиентский lua, а также modscript.lua.
|
||||
Серверный lua — это необходимый минимум, если вы хотите добавлять пользовательские события, вам также понадобится как минимум клиентский lua, а также modscript.lua
|
||||
|
||||
Папка Server должна содержать подпапки, по одной для каждого серверного мода. Хорошей практикой является наличие только одного основного файла lua и добавление дополнительных файлов lua в подпапки. Однако вам не обязательно это делать, сервер загрузит файлы lua в алфавитном порядке, если их несколько.
|
||||
|
||||
@@ -62,11 +62,11 @@ function onPlayerAuth(playerName, playerRole, isGuest, identifiers)
|
||||
end
|
||||
```
|
||||
|
||||
Дополнительную информацию о серверных функциях, предоставляемых BeamMP, можно найти в [последнем справочнике по серверу.](../../../scripting/server/latest-server-reference.md)
|
||||
Дополнительную информацию о серверных функциях, предоставляемых BeamMP, можно найти в [последнем справочнике по серверу](../../../scripting/server/latest-server-reference.md)
|
||||
|
||||
## Клиентская часть lua
|
||||
|
||||
Это в значительной степени соответствует [расширениям BeamNG.](https://documentation.beamng.com/modding/programming/extensions/)
|
||||
Это в значительной степени соответствует [расширениям BeamNG](https://documentation.beamng.com/modding/programming/extensions/)
|
||||
|
||||
```lua
|
||||
local M = {}
|
||||
@@ -81,7 +81,7 @@ return M
|
||||
|
||||
Выводит на консоль информацию о том, что examplePlugin был загружен
|
||||
|
||||
Более подробную информацию см. в [документации beamNG по отладочным распечаткам.](https://documentation.beamng.com/modding/programming/debugging/#a-add-a-log)
|
||||
Более подробную информацию см. в [документации BeamNG по отладочным распечаткам](https://documentation.beamng.com/modding/programming/debugging/#a-add-a-log)
|
||||
|
||||
## modScript.lua
|
||||
|
||||
@@ -92,7 +92,7 @@ load('examplePlugin')
|
||||
setExtensionUnloadMode('examplePlugin', 'manual')
|
||||
```
|
||||
|
||||
Вы можете добавить вывод журнала, если хотите видеть в журналах, когда ваш modScript обрабатывается BeamNG.
|
||||
Вы можете добавить вывод журнала, если хотите видеть в журналах, когда ваш modScript обрабатывается BeamNG
|
||||
|
||||
```lua
|
||||
load('examplePlugin')
|
||||
|
||||
@@ -1,29 +1,36 @@
|
||||
---
|
||||
hide:
|
||||
- navigation
|
||||
- навигация
|
||||
---
|
||||
!!! warning "Этот сайт находится в стадии разработки!"
|
||||
|
||||
Над этим сайтом активно ведется работа.
|
||||
!!! внимание "Этот сайт находится в стадии разработки!"
|
||||
|
||||
Вы считаете, что можете помочь? Пожалуйста, нажмите на страницу с карандашом справа!
|
||||
```
|
||||
Над этим сайтом ведется активная работа.
|
||||
|
||||
Это также можно сделать на любой другой странице.
|
||||
Чувствуете, что можете помочь? Пожалуйста, сделайте это, нажав на страницу с карандашом справа!
|
||||
|
||||
Это можно сделать на любой странице.
|
||||
```
|
||||
|
||||
# Добро пожаловать в BeamMP Docs! :tada:
|
||||
|
||||
Добро пожаловать в новый и улучшенный центр документации для BeamMP! Независимо от того, являетесь ли вы игроком, владельцем сервера или разработчиком, у нас есть все необходимые ресурсы, чтобы улучшить ваш опыт многопользовательской игры в BeamNG.drive.
|
||||
Добро пожаловать в новый и улучшенный центр документации для BeamMP! Независимо от того, являетесь ли вы игроком, владельцем сервера или разработчиком, у нас есть ресурсы, необходимые для улучшения вашего опыта многопользовательской игры BeamNG.drive.
|
||||
|
||||
## Для Игроков
|
||||
## Для игроков
|
||||
|
||||
Новичок в BeamMP? Ознакомьтесь с нашим [Руководством по Началу](../game/getting-started.md), чтобы помочь вам стартовать и получить максимум удовольствия от многопользовательских приключений.
|
||||
Впервые в BeamMP? Ознакомьтесь с нашей страницей [Начало работы](../game/getting-started.md), которая поможет вам быстро начать и получить максимум от игры по сети. По общим вопросам и проблемам, пожалуйста, ознакомьтесь с [Часто задаваемыми вопросами игроков](../FAQ/player-faq.md).
|
||||
|
||||
## Для Владельцев Серверов
|
||||
## Для владельцев серверов
|
||||
|
||||
Хотите создать свой собственный сервер BeamMP? Наше подробное руководство [здесь](../server/create-a-server.md) проведет вас через процесс, обеспечивая вас всеми необходимыми инструментами и знаниями для эффективной настройки сервера.
|
||||
Думаете о создании собственного сервера BeamMP? Наше подробное [руководство](../server/create-a-server.md) проведет вас через весь процесс, гарантируя, что у вас будут все инструменты и знания для эффективной настройки сервера.
|
||||
|
||||
## Для Разработчиков
|
||||
## Для разработчиков
|
||||
|
||||
Узнайте все тонкости создания ресурсов для сервера BeamMP в нашем [Руководстве по Разработке Ресурсов](../guides/mod-creation/server/getting-started.md).
|
||||
Откройте для себя тонкости создания ресурсов для сервера BeamMP в нашем [Руководстве по разработке ресурсов](../guides/mod-creation/server/getting-started.md) .
|
||||
|
||||
Мы готовим для вас захватывающие обновления, включая новую главную страницу, разработанную для улучшения вашего опыта просмотра. Следите за новостями! :slight_smile:
|
||||
На горизонте нас ждут захватывающие обновления, включая совершенно новую домашнюю страницу, разработанную для улучшения вашего опыта просмотра. Оставайтесь с нами, чтобы узнать больше! :slight_smile:
|
||||
|
||||
## Правила Cообщества
|
||||
|
||||
Ознакомьтесь с [Правилами Cообщества](https://docs.beammp.com/community/rules/) BeamMP и узнайте, как обжаловать блокировку.
|
||||
|
||||
@@ -8,7 +8,7 @@ Feel you could help? Please do by clicking on the page with a pencil on the righ
|
||||
This can be done any page too.
|
||||
```
|
||||
|
||||
# Справочник по модам/внутриигровым скриптам
|
||||
# Справочник по Модам/Внутриигровым Скриптам
|
||||
|
||||
BeamMP также позволяет вам создавать собственные плагины на стороне клиента. Мы предоставили несколько функций, которые вы можете использовать для связи с другими многопользовательскими модами и другими игроками через сервер.
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
Это можно сделать на любой странице.
|
||||
```
|
||||
|
||||
# Справочник по серверным скриптам
|
||||
# Справочник по Серверным Скриптам
|
||||
|
||||
## Версия сервера 3.X
|
||||
|
||||
@@ -16,13 +16,13 @@
|
||||
|
||||
Выпуск BeamMP-Server v3.0.0 вносит радикальные изменения в работу системы плагинов Lua. Нет возможности использовать старый lua с новым сервером, поэтому вам придется мигрировать.
|
||||
|
||||
Система плагинов сервера использует [Lua 5.3](https://www.lua.org/manual/5.3/) . В этом разделе подробно описывается, как начать писать плагины, изучаются некоторые базовые концепции и начинается работа с вашим первым плагином. **Рекомендуется прочитать этот раздел, даже если вы знакомы с системой до версии 3.0.0, так как некоторые вещи кардинально изменились** .
|
||||
Система плагинов сервера использует [Lua 5.3](https://www.lua.org/manual/5.3/). В этом разделе подробно описывается, как начать писать плагины, изучаются некоторые базовые концепции и начинается работа с вашим первым плагином. **Рекомендуется прочитать этот раздел, даже если вы знакомы с системой до версии 3.0.0, так как некоторые вещи кардинально изменились**.
|
||||
|
||||
Руководство по миграции с lua до версии 3.0.0 см. в разделе [«Миграция со старой версии Lua»](#migrating-from-old-lua) .
|
||||
Руководство по миграции с lua до версии 3.0.0 см. в разделе [«Миграция со старой версии Lua»](#migrating-from-old-lua).
|
||||
|
||||
### Структура каталога
|
||||
|
||||
Серверные плагины, в отличие от модов, располагаются (по умолчанию) в `Resources/Server` , тогда как моды, которые пишутся для BeamNG.drive и отправляются клиентам, находятся в `Resources/Client` . Каждый плагин должен иметь свою собственную подпапку в `Resources/Server` , например, для плагина с именем "MyPlugin" структура будет следующей:
|
||||
Серверные плагины, в отличие от модов, располагаются (по умолчанию) в `Resources/Server`, тогда как моды, которые пишутся для BeamNG.drive и отправляются клиентам, находятся в `Resources/Client`. Каждый плагин должен иметь свою собственную подпапку в `Resources/Server`, например, для плагина с именем "MyPlugin" структура будет следующей:
|
||||
|
||||
```
|
||||
Resources
|
||||
@@ -35,13 +35,13 @@ Resources
|
||||
|
||||
Здесь мы также отображаем другой плагин под названием "SomeOtherPlugin", чтобы проиллюстрировать, как ваша папка `Resources/Server` может иметь несколько различных папок плагинов. Мы продолжим использовать эту структуру каталогов в качестве примера на протяжении всего этого руководства.
|
||||
|
||||
Вы также заметите `main.lua` . У вас может быть столько файлов Lua `.lua` , сколько вам нужно. Все файлы Lua в главном каталоге вашего плагина загружаются в *алфавитном порядке* (поэтому `aaa.lua` запускается перед `bbb.lua` ).
|
||||
Вы также заметите `main.lua`. У вас может быть столько файлов Lua `.lua`, сколько вам нужно. Все файлы Lua в главном каталоге вашего плагина загружаются в *алфавитном порядке* (поэтому `aaa.lua` запускается перед `bbb.lua`).
|
||||
|
||||
### Файлы Lua
|
||||
|
||||
Каждый файл Lua `.lua` в папке плагина загружается при запуске сервера. Это означает, что операторы вне функций оцениваются («запускаются») немедленно.
|
||||
|
||||
Файлы Lua в подпапках игнорируются, но могут быть `require()` .
|
||||
Файлы Lua в подпапках игнорируются, но могут быть `require()`.
|
||||
|
||||
Например, наш `main.lua` выглядит так:
|
||||
|
||||
@@ -53,7 +53,7 @@ end
|
||||
print("What's up!")
|
||||
```
|
||||
|
||||
Когда сервер запустится и загрузится `main.lua` , он *немедленно* запустит `print("What's up!")` , но пока **НЕ** *вызовет* функцию `PrintMyName` (потому что она не была вызвана)!
|
||||
Когда сервер запустится и загрузится `main.lua`, он *немедленно* запустит `print("What's up!")`, но пока **НЕ** *вызовет* функцию `PrintMyName` (потому что она не была вызвана)!
|
||||
|
||||
### События
|
||||
|
||||
@@ -81,7 +81,7 @@ MP.RegisterEvent("onChatMessage", "MyChatMessageHandler")
|
||||
|
||||
Это фактически гарантирует, что любое сообщение, которое в точности равно "darn", не будет отправлено и не будет показано в чате (обратите внимание, что для настоящего фильтра ненормативной лексики вам нужно будет проверить, *содержит* ли сообщение "darn", а не *является* ли оно "darn"). Отмена события приводит к тому, что оно не происходит, например, сообщение чата не будет показано никому другому, транспортное средство не будет создано и т. д.
|
||||
|
||||
### Пользовательские события
|
||||
### Пользовательские События
|
||||
|
||||
Вы можете зарегистрироваться на любое понравившееся вам мероприятие, например:
|
||||
|
||||
@@ -125,11 +125,11 @@ MP.CreateEventTimer("EverySecond", 1000)
|
||||
|
||||
Это приведет к тому, что "CountSeconds" будет вызываться каждую секунду. Вы также можете отменить таймеры событий с помощью `MP.CancelEventTimer` (см. справочник API).
|
||||
|
||||
С консоли сервера вы можете запустить `status` , чтобы увидеть, сколько таймеров событий запущено в данный момент, а также информацию об ожидающих обработчиках событий. Эта команда покажет больше информации в будущем.
|
||||
С консоли сервера вы можете запустить `status`, чтобы увидеть, сколько таймеров событий запущено в данный момент, а также информацию об ожидающих обработчиках событий. Эта команда покажет больше информации в будущем.
|
||||
|
||||
### Отладка
|
||||
|
||||
Lua трудно отлаживать. К сожалению, для встроенного Lua не существует отладчика промышленного уровня, такого как `gdb` .
|
||||
Lua трудно отлаживать. К сожалению, для встроенного Lua не существует отладчика промышленного уровня, такого как `gdb`.
|
||||
|
||||
В общем случае вы, конечно, можете в любое время просто `print()` значения, которые хотите проверить.
|
||||
|
||||
@@ -147,9 +147,9 @@ Lua трудно отлаживать. К сожалению, для встро
|
||||
lua @MyPlugin>
|
||||
```
|
||||
|
||||
Как видите, мы перешли в состояние Lua для `MyPlugin` . С этого момента и до тех пор, пока мы не войдем в `exit()` (с версии 3.1.0 `:exit` ), мы будем в `MyPlugin` и сможем выполнить Lua там.
|
||||
Как видите, мы перешли в состояние Lua для `MyPlugin`. С этого момента и до тех пор, пока мы не войдем в `exit()` (с версии 3.1.0 `:exit`), мы будем в `MyPlugin` и сможем выполнить Lua там.
|
||||
|
||||
Например, если у нас есть глобальный объект с именем `MyValue` , мы можем вывести это значение следующим образом:
|
||||
Например, если у нас есть глобальный объект с именем `MyValue`, мы можем вывести это значение следующим образом:
|
||||
|
||||
```
|
||||
lua @MyPlugin> print(MyValue)
|
||||
@@ -159,13 +159,13 @@ lua @MyPlugin> print(MyValue)
|
||||
|
||||
Начиная с версии 3.1.0: Вы можете нажать клавишу TAB для автодополнения функций и переменных.
|
||||
|
||||
ВНИМАНИЕ: К сожалению, если состояние Lua в данный момент занято выполнением другого кода (например, цикла `while` ), это может полностью повесить консоль до тех пор, пока она не завершит эту работу, поэтому будьте очень осторожны, переключаясь на состояния, которые могут ожидать чего-то.
|
||||
ВНИМАНИЕ: К сожалению, если состояние Lua в данный момент занято выполнением другого кода (например, цикла `while`), это может полностью повесить консоль до тех пор, пока она не завершит эту работу, поэтому будьте очень осторожны, переключаясь на состояния, которые могут ожидать чего-то.
|
||||
|
||||
Кроме того, вы можете запустить `status` в обычной консоли ( `>` ), которая покажет вам, среди прочего, некоторую статистику о Lua.
|
||||
Кроме того, вы можете запустить `status` в обычной консоли (`> `), которая покажет вам, среди прочего, некоторую статистику о Lua.
|
||||
|
||||
### Пользовательские команды
|
||||
### Пользовательские Команды
|
||||
|
||||
Для реализации пользовательских команд для консоли сервера можно использовать событие `onConsoleInput` . Это может быть полезно, когда вы хотите добавить способ для владельца сервера подать сигнал на ваш плагин или отобразить внутреннее состояние пользовательским способом.
|
||||
Для реализации пользовательских команд для консоли сервера можно использовать событие `onConsoleInput`. Это может быть полезно, когда вы хотите добавить способ для владельца сервера подать сигнал на ваш плагин или отобразить внутреннее состояние пользовательским способом.
|
||||
|
||||
Вот пример:
|
||||
|
||||
@@ -190,7 +190,7 @@ MP.RegisterEvent("onConsoleInput", "handleConsoleInput")
|
||||
hello, world
|
||||
```
|
||||
|
||||
Мы реализовали собственную `print` . В качестве упражнения попробуйте создать функцию, подобную `say` , которая отправляет сообщение чата всем игрокам или даже конкретному игроку (с помощью `MP.SendChatMessage` ).
|
||||
Мы реализовали собственную `print`. В качестве упражнения попробуйте создать функцию, подобную `say`, которая отправляет сообщение чата всем игрокам или даже конкретному игроку (с помощью `MP.SendChatMessage`).
|
||||
|
||||
**Внимание:** для ваших собственных плагинов обычно рекомендуется "пространство имен". Наш пример `print` в плагине с именем `mystuff` может называться `mystuff.print` или `ms.print` или что-то подобное.
|
||||
|
||||
@@ -198,11 +198,11 @@ hello, world
|
||||
|
||||
Формат документации: `function_name(arg_name: arg_type, arg_name: arg_type) -> return_types`
|
||||
|
||||
### Встроенные функции
|
||||
### Встроенные Функции
|
||||
|
||||
#### `print(...)` , `printRaw(...)`
|
||||
#### `print(...)`, `printRaw(...)`
|
||||
|
||||
Выводит сообщение на консоль сервера с префиксом `[DATE TIME] [LUA]` . Если вам не нужен этот префикс, вы можете использовать `printRaw(...)` .
|
||||
Выводит сообщение на консоль сервера с префиксом `[DATE TIME] [LUA]`. Если вам не нужен этот префикс, вы можете использовать `printRaw(...)`.
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -217,15 +217,15 @@ print("Hello, I'm", name, "and I'm", 32)
|
||||
|
||||
#### `exit()`
|
||||
|
||||
Корректно завершает работу сервера. Вызывает срабатывание события `onShutdown` .
|
||||
Корректно завершает работу сервера. Вызывает срабатывание события `onShutdown`.
|
||||
|
||||
### Функции МП
|
||||
|
||||
#### `MP.CreateTimer() -> Timer`
|
||||
|
||||
Создает объект таймера, который можно использовать для отслеживания того, сколько времени заняло что-то / сколько времени прошло. Он запускается после создания и может быть сброшен/перезапущен с помощью `mytimer:Start()` .
|
||||
Создает объект таймера, который можно использовать для отслеживания того, сколько времени заняло что-то / сколько времени прошло. Он запускается после создания и может быть сброшен/перезапущен с помощью `mytimer:Start()`.
|
||||
|
||||
Текущее прошедшее время в секундах можно получить с помощью `mytimer:GetCurrent()` .
|
||||
Текущее прошедшее время в секундах можно получить с помощью `mytimer:GetCurrent()`.
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -239,11 +239,11 @@ print(mytimer:GetCurrent()) -- print how much time elapsed
|
||||
|
||||
#### `MP.GetOSName() -> string`
|
||||
|
||||
Возвращает имя текущей ОС: `Windows` , `Linux` или `Other` .
|
||||
Возвращает имя текущей ОС: `Windows`, `Linux` или `Other`.
|
||||
|
||||
#### `MP.GetServerVersion() -> number,number,number`
|
||||
|
||||
Возвращает текущую версию сервера в формате major, minor, patch. Например, версия v3.0.0 вернет `3, 0, 0` .
|
||||
Возвращает текущую версию сервера в формате major, minor, patch. Например, версия v3.0.0 вернет `3, 0, 0`.
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -260,13 +260,13 @@ print(major, minor, patch)
|
||||
|
||||
#### `MP.RegisterEvent(event_name: string, function_name: string)`
|
||||
|
||||
Запоминает функцию с именем Имя `Function Name` как обработчик события с именем `Event Name` .
|
||||
Запоминает функцию с именем Имя `Function Name` как обработчик события с именем `Event Name`.
|
||||
|
||||
Вы можете зарегистрировать столько обработчиков события, сколько захотите.
|
||||
|
||||
Список событий, предоставляемых сервером, можно посмотреть [здесь](#events-1) .
|
||||
Список событий, предоставляемых сервером, можно посмотреть [здесь](#events-1).
|
||||
|
||||
Если событие с таким именем не существует, оно создается, и, таким образом, RegisterEvent не может завершиться неудачей. Это можно использовать для создания пользовательских событий. Подробнее см. в разделах [Пользовательские события](#custom-events) и [События](#events) .
|
||||
Если событие с таким именем не существует, оно создается, и, таким образом, RegisterEvent не может завершиться неудачей. Это можно использовать для создания пользовательских событий. Подробнее см. в разделах [Пользовательские события](#custom-events) и [События](#events).
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -285,7 +285,7 @@ MP.RegisterEvent("onChatMessage", "ChatHandler")
|
||||
|
||||
Запускает таймер внутри сервера, который запускает событие `event_name` каждые `interval_ms` миллисекунд.
|
||||
|
||||
Таймеры событий можно отменить с помощью `MP.CancelEventTimer` .
|
||||
Таймеры событий можно отменить с помощью `MP.CancelEventTimer`.
|
||||
|
||||
Интервалы <25 мс не рекомендуются, так как несколько таких интервалов, скорее всего, не будут обслуживаться вовремя надежно. Хотя несколько таймеров могут быть запущены для одного и того же события, рекомендуется создавать как можно меньше таймеров событий. Например, если вам нужно одно событие, которое запускается каждые полсекунды, и одно, которое запускается каждую секунду, рассмотрите возможность создания просто события каждые полсекунды и запуска триггера every-second-functiosecond.
|
||||
|
||||
@@ -296,7 +296,7 @@ MP.RegisterEvent("onChatMessage", "ChatHandler")
|
||||
Необязательный `CallStrategy` может быть указан в качестве третьего аргумента. Это может быть:
|
||||
|
||||
- `MP.CallStrategy.BestEffort` (по умолчанию): попытается запустить событие с указанным интервалом, но откажется ставить обработчики в очередь, если выполнение обработчика займет слишком много времени.
|
||||
- `MP.CallStrategy.Precise` : будет ставить обработчики событий в очередь с точным указанным интервалом. Может привести к заполнению очереди, если обработчику требуется больше времени, чем интервал. Используйте только если вам НУЖЕН точный интервал.
|
||||
- `MP.CallStrategy.Precise`: будет ставить обработчики событий в очередь с точным указанным интервалом. Может привести к заполнению очереди, если обработчику требуется больше времени, чем интервал. Используйте только если вам НУЖЕН точный интервал.
|
||||
|
||||
#### `MP.CancelEventTimer(event_name: string)`
|
||||
|
||||
@@ -308,7 +308,7 @@ MP.RegisterEvent("onChatMessage", "ChatHandler")
|
||||
|
||||
Запускает локальное событие, которое приводит к вызову всех обработчиков этого события *в текущем состоянии lua* (обычно в текущем плагине, если состояние не было передано через PluginConfig.toml).
|
||||
|
||||
Вы можете передать этой функции аргументы ( `...` ), которые копируются и отправляются всем обработчикам как аргументы функции.
|
||||
Вы можете передать этой функции аргументы (`...`), которые копируются и отправляются всем обработчикам как аргументы функции.
|
||||
|
||||
Этот вызов является синхронным и вернет управление после завершения всех обработчиков событий.
|
||||
|
||||
@@ -327,16 +327,16 @@ print(Results)
|
||||
|
||||
Запускает глобальное событие, которое приводит к вызову всех обработчиков этого события *во всех плагинах* (включая *этот* плагин).
|
||||
|
||||
Вы можете передать этой функции аргументы ( `...` ), которые копируются и отправляются всем обработчикам как аргументы функции.
|
||||
Вы можете передать этой функции аргументы (`...`), которые копируются и отправляются всем обработчикам как аргументы функции.
|
||||
|
||||
Этот вызов асинхронный и возвращает объект, подобный будущему. Локальные обработчики (обработчики в том же плагине, что и вызывающий) запускаются синхронно и немедленно.
|
||||
|
||||
Возвращаемая таблица имеет две функции:
|
||||
|
||||
- `IsDone() -> boolean` сообщает, все ли обработчики завершились. Вы можете подождать, пока это не станет правдой, проверив это и `MP.Sleep` -ing на некоторое время в цикле.
|
||||
- `IsDone() -> boolean` сообщает, все ли обработчики завершились. Вы можете подождать, пока это не станет правдой, проверив это и `MP.Sleep`-ing на некоторое время в цикле.
|
||||
- `GetResults() -> table` возвращает неаннотированную неименованную таблицу со всеми возвращаемыми значениями всех обработчиков. Это практически массив.
|
||||
|
||||
Обязательно вызывайте их с помощью синтаксиса `Obj:Function()` ( `:` , NOT `.` ).
|
||||
Обязательно вызывайте их с помощью синтаксиса `Obj:Function()` (`:`, NOT `.`).
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -362,9 +362,9 @@ print(Results)
|
||||
|
||||
#### `MP.SendChatMessage(player_id: number, message: string)`
|
||||
|
||||
Отправляет сообщение чата, которое может видеть только указанный игрок (или все, если идентификатор `-1` ). В игре это не будет отображаться как направленное сообщение.
|
||||
Отправляет сообщение чата, которое может видеть только указанный игрок (или все, если идентификатор `-1`). В игре это не будет отображаться как направленное сообщение.
|
||||
|
||||
Вы можете использовать это, например, чтобы сообщить игроку *, почему* вы отменили появление его транспортного средства, отправить сообщение в чате или что-то подобное, или чтобы отобразить некоторую информацию о вашем сервере.
|
||||
Вы можете использовать это, например, чтобы сообщить игроку, *почему* вы отменили появление его транспортного средства, отправить сообщение в чате или что-то подобное, или чтобы отобразить некоторую информацию о вашем сервере.
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -406,11 +406,11 @@ end
|
||||
|
||||
Вызовет указанное событие с указанными данными на указанном клиенте (-1 для трансляции). Это событие затем может быть обработано в клиентском lua mod, см. документацию "Client Scripting" для этого.
|
||||
|
||||
Вернет `true` если сообщение удалось отправить (для `id = -1` , поэтому для трансляций это всегда `true` ), и `false` если игрок с таким идентификатором не существует или отключен, но у него все еще есть идентификатор (это известная проблема).
|
||||
Вернет `true` если сообщение удалось отправить (для `id = -1`, поэтому для трансляций это всегда `true`), и `false` если игрок с таким идентификатором не существует или отключен, но у него все еще есть идентификатор (это известная проблема).
|
||||
|
||||
Если возвращается `false` , нет смысла повторять это событие, и не следует ожидать ответа (если таковой ожидался).
|
||||
Если возвращается `false`, нет смысла повторять это событие, и не следует ожидать ответа (если таковой ожидался).
|
||||
|
||||
Начиная с версии 3.1.0, второе возвращаемое значение содержит сообщение об ошибке, если функция не удалась. Также, начиная с этой версии, версия функции `*Json` принимает таблицу в качестве аргумента данных и преобразует ее в json. Это просто сокращение для `MP.TriggerClientEvent(..., Util.JsonEncode(mytable))` .
|
||||
Начиная с версии 3.1.0, второе возвращаемое значение содержит сообщение об ошибке, если функция не удалась. Также, начиная с этой версии, версия функции `*Json` принимает таблицу в качестве аргумента данных и преобразует ее в json. Это просто сокращение для `MP.TriggerClientEvent(..., Util.JsonEncode(mytable))`.
|
||||
|
||||
#### `MP.GetPlayerCount() -> number`
|
||||
|
||||
@@ -624,7 +624,7 @@ end
|
||||
|
||||
Является ли игрок гостем. Гость — это тот, кто не вошел в систему, а вместо этого решил играть как гость. Обычно его имя — `guest` за которым следует длинный номер.
|
||||
|
||||
Поскольку гости анонимны, вы можете запретить им присоединяться. В этом случае рекомендуется использовать аргумент [`onPlayerAuth`](#onplayerauth) `is_guest` .
|
||||
Поскольку гости анонимны, вы можете запретить им присоединяться. В этом случае рекомендуется использовать аргумент [`onPlayerAuth`](#onplayerauth) `is_guest`.
|
||||
|
||||
#### `MP.DropPlayer(player_id: number, [reason: string])`
|
||||
|
||||
@@ -653,7 +653,7 @@ end
|
||||
|
||||
Возвращает таблицу с информацией об игроке, такой как идентификатор форума BeamMP, IP-адрес и идентификатор учетной записи Discord. Discord ID будет возвращен только в том случае, если пользователь связал его со своей учетной записью форума.
|
||||
|
||||
Вы можете найти идентификатор форума пользователя, перейдя по адресу `https://forum.beammp.com/u/USERNAME.json` и выполнив поиск по запросу `"user": {"id": 123456}` . Идентификатор BeamMP уникален для проигрывателя и не может быть изменен в отличие от имени пользователя.
|
||||
Вы можете найти идентификатор форума пользователя, перейдя по адресу `https://forum.beammp.com/u/USERNAME.json` и выполнив поиск по запросу `"user": {"id": 123456}`. Идентификатор BeamMP уникален для проигрывателя и не может быть изменен в отличие от имени пользователя.
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -676,7 +676,7 @@ print(MP.GetPlayerIdentifiers(player_id))
|
||||
|
||||
#### `MP.Set(setting: number, ...)`
|
||||
|
||||
Временно устанавливает параметр ServerConfig. Для этого полезна таблица `MP.Settings` .
|
||||
Временно устанавливает параметр ServerConfig. Для этого полезна таблица `MP.Settings`.
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -712,9 +712,9 @@ print(MP.Settings)
|
||||
|
||||
#### `Util.Json*`
|
||||
|
||||
Начиная с BeamMP-Server `v3.1.0` .
|
||||
Начиная с BeamMP-Server `v3.1.0`.
|
||||
|
||||
Это встроенная библиотека JSON, которая обычно намного быстрее любой библиотеки Lua JSON. За кулисами используется библиотека C++ `nlohmann::json` , которая совместима с JSON, полностью протестирована и постоянно подвергается фаззингу.
|
||||
Это встроенная библиотека JSON, которая обычно намного быстрее любой библиотеки Lua JSON. За кулисами используется библиотека C++ `nlohmann::json`, которая совместима с JSON, полностью протестирована и постоянно подвергается фаззингу.
|
||||
|
||||
#### `Util.JsonEncode(table: table) -> string`
|
||||
|
||||
@@ -786,7 +786,7 @@ print(Util.JsonPrettify(myjson))
|
||||
|
||||
#### `Util.JsonMinify(json: string) -> string`
|
||||
|
||||
Удаляет отступы, переносы строк и любые другие пробелы. Не обязательно, если вы не вызвали `Util.JsonPrettify` , так как весь вывод из `Util.Json*` уже минифицирован.
|
||||
Удаляет отступы, переносы строк и любые другие пробелы. Не обязательно, если вы не вызвали `Util.JsonPrettify`, так как весь вывод из `Util.Json*` уже минифицирован.
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -804,7 +804,7 @@ print(Util.JsonMinify(pretty))
|
||||
|
||||
#### `Util.JsonFlatten(json: string) -> string`
|
||||
|
||||
Создает объект JSON, ключи которого сводятся к указателям JSON в соответствии с RFC 6901. Вы можете восстановить оригинал с помощью `Util.JsonUnflatten()` . Чтобы это работало, все значения должны быть примитивами.
|
||||
Создает объект JSON, ключи которого сводятся к указателям JSON в соответствии с RFC 6901. Вы можете восстановить оригинал с помощью `Util.JsonUnflatten()`. Чтобы это работало, все значения должны быть примитивами.
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -831,11 +831,11 @@ flattened pretty: {
|
||||
|
||||
#### `Util.JsonUnflatten(json: string) -> string`
|
||||
|
||||
Восстанавливает произвольную вложенность значения JSON, которое было сглажено перед использованием функции `Util.JsonFlatten()` .
|
||||
Восстанавливает произвольную вложенность значения JSON, которое было сглажено перед использованием функции `Util.JsonFlatten()`.
|
||||
|
||||
#### `Util.JsonDiff(a: string, b: string) -> string`
|
||||
|
||||
Создает разницу JSON в соответствии с RFC 6902 (http://jsonpatch.com/). Затем эту разницу можно применить как патч через `Util.JsonDiffApply()` . Возвращает разницу.
|
||||
Создает разницу JSON в соответствии с RFC 6902 (http://jsonpatch.com/). Затем эту разницу можно применить как патч через `Util.JsonDiffApply()`. Возвращает разницу.
|
||||
|
||||
#### `Util.JsonDiffApply(base: string, diff: string) -> string`
|
||||
|
||||
@@ -843,7 +843,7 @@ flattened pretty: {
|
||||
|
||||
### `Util.Random*`
|
||||
|
||||
Начиная с BeamMP-Server `v3.1.0` .
|
||||
Начиная с BeamMP-Server `v3.1.0`.
|
||||
|
||||
#### `Util.Random() -> float`
|
||||
|
||||
@@ -914,7 +914,7 @@ Util.LogDebug("hi")
|
||||
[19/04/24 11:06:50.142] [Test] [DEBUG] hi
|
||||
```
|
||||
|
||||
Поддерживает ту же самую печать/сброс данных, что и `print()` .
|
||||
Поддерживает ту же самую печать/сброс данных, что и `print()`.
|
||||
|
||||
#### `Util.DebugExecutionTime() -> table`
|
||||
|
||||
@@ -979,15 +979,15 @@ MP.CreateEventTimer("printStuff", 5000)
|
||||
|
||||
### Функции ФС
|
||||
|
||||
Функции `FS` — это функции **файловой** **системы** , которые стремятся превзойти возможности Lua по умолчанию.
|
||||
Функции `FS` — это функции **файловой** **системы**, которые стремятся превзойти возможности Lua по умолчанию.
|
||||
|
||||
Пожалуйста, всегда используйте `/` в качестве разделителя при указании путей, так как это кроссплатформенно (windows, linux, macos, ...).
|
||||
|
||||
#### `FS.CreateDirectory(path: string) -> bool,string`
|
||||
|
||||
Создает указанный каталог и любые родительские каталоги, если они не существуют. Поведение примерно эквивалентно обычной команде linux `mkdir -p` .
|
||||
Создает указанный каталог и любые родительские каталоги, если они не существуют. Поведение примерно эквивалентно обычной команде linux `mkdir -p`.
|
||||
|
||||
В случае успеха возвращает `true` и `""` . Если создание каталога не удалось, возвращается `false` и сообщение об ошибке ( `string` ).
|
||||
В случае успеха возвращает `true` и `""`. Если создание каталога не удалось, возвращается `false` и сообщение об ошибке (`string`).
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -1010,7 +1010,7 @@ end
|
||||
|
||||
Удаляет указанный файл или папку.
|
||||
|
||||
Возвращает `true` , если произошла ошибка, с сообщением об ошибке во втором возвращаемом значении.
|
||||
Возвращает `true`, если произошла ошибка, с сообщением об ошибке во втором возвращаемом значении.
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -1024,15 +1024,15 @@ end
|
||||
|
||||
#### `FS.Rename(pathA: string, pathB: string) -> bool,string`
|
||||
|
||||
Переименовывает (или перемещает) `pathA` в `pathB` .
|
||||
Переименовывает (или перемещает) `pathA` в `pathB`.
|
||||
|
||||
Возвращает `true` , если произошла ошибка, с сообщением об ошибке во втором возвращаемом значении.
|
||||
Возвращает `true`, если произошла ошибка, с сообщением об ошибке во втором возвращаемом значении.
|
||||
|
||||
#### `FS.Copy(pathA: string, pathB: string) -> bool,string`
|
||||
|
||||
Копирует `pathA` в `pathB` .
|
||||
Копирует `pathA` в `pathB`.
|
||||
|
||||
Возвращает `true` , если произошла ошибка, с сообщением об ошибке во втором возвращаемом значении.
|
||||
Возвращает `true`, если произошла ошибка, с сообщением об ошибке во втором возвращаемом значении.
|
||||
|
||||
#### `FS.GetFilename(path: string) -> string`
|
||||
|
||||
@@ -1078,11 +1078,11 @@ input -> output
|
||||
|
||||
#### `FS.IsDirectory(path: string) -> bool`
|
||||
|
||||
Возвращает `true` , если указанный путь является каталогом, `false` если нет. Обратите внимание, что `false` НЕ подразумевает, что путь является файлом (см. `FS.IsFile()` ).
|
||||
Возвращает `true`, если указанный путь является каталогом, `false` если нет. Обратите внимание, что `false` НЕ подразумевает, что путь является файлом (см. `FS.IsFile()`).
|
||||
|
||||
#### `FS.IsFile(path: string) -> bool`
|
||||
|
||||
Возвращает `true` , если указанный путь является обычным файлом (не символической ссылкой, жесткой ссылкой, блочным устройством и т. д.), `false` если нет. Обратите внимание, что `false` НЕ подразумевает, что путь является каталогом (см. `FS.IsDirectory()` ).
|
||||
Возвращает `true`, если указанный путь является обычным файлом (не символической ссылкой, жесткой ссылкой, блочным устройством и т. д.), `false` если нет. Обратите внимание, что `false` НЕ подразумевает, что путь является каталогом (см. `FS.IsDirectory()`).
|
||||
|
||||
#### `FS.ListDirectories(path: string) -> table`
|
||||
|
||||
@@ -1138,7 +1138,7 @@ FS.ConcatPaths("a", "b", "/c/d/e/", "/f/", "g", "h.txt")
|
||||
a/b/c/d/e/f/g/h.txt
|
||||
```
|
||||
|
||||
Также разрешает `..` , если он существует в пути в любой точке. Эта функция безопаснее, чем конкатенация строк в lua, и учитывает разделители платформы.
|
||||
Также разрешает `..`, если он существует в пути в любой точке. Эта функция безопаснее, чем конкатенация строк в lua, и учитывает разделители платформы.
|
||||
|
||||
Пожалуйста, всегда используйте `/` в качестве разделителя при указании путей, так как это кроссплатформенно (windows, linux, macos, ...).
|
||||
|
||||
@@ -1147,7 +1147,7 @@ a/b/c/d/e/f/g/h.txt
|
||||
#### Объяснение
|
||||
|
||||
- Аргументы: Список аргументов, переданных обработчикам этого события.
|
||||
- Отменяемое: Можно ли отменить событие. Если его можно отменить, обработчик может сделать это, вернув `1` , например `return 1` .
|
||||
- Отменяемое: Можно ли отменить событие. Если его можно отменить, обработчик может сделать это, вернув `1`, например `return 1`.
|
||||
|
||||
#### Краткое изложение событий
|
||||
|
||||
@@ -1178,13 +1178,13 @@ a/b/c/d/e/f/g/h.txt
|
||||
|
||||
Срабатывает при отключении сервера. В настоящее время происходит после того, как все игроки были выгнаны.
|
||||
|
||||
#### События, связанные с игрой
|
||||
#### События, Связанные с Игрой
|
||||
|
||||
##### `onPlayerAuth`
|
||||
|
||||
Аргументы: `player_name: string` , `player_role: string` , `is_guest: bool` , `identifiers: table -> beammp, ip` Возможность отмены: ДА
|
||||
Аргументы: `player_name: string`, `player_role: string`, `is_guest: bool`, `identifiers: table -> beammp, ip` Возможность отмены: ДА
|
||||
|
||||
Первое событие, которое срабатывает, когда игрок хочет присоединиться. Игроку может быть отказано в присоединении, если вернуть `1` или причину ( `string` ) из функции-обработчика.
|
||||
Первое событие, которое срабатывает, когда игрок хочет присоединиться. Игроку может быть отказано в присоединении, если вернуть `1` или причину (`string`) из функции-обработчика.
|
||||
|
||||
```lua
|
||||
function myPlayerAuthorizer(name, role, is_guest, identifiers)
|
||||
@@ -1197,13 +1197,13 @@ MP.RegisterEvent("onPlayerAuth", "myPlayerAuthorizer")
|
||||
|
||||
Аргументы: `player_id: number` Возможность отмены: НЕТ
|
||||
|
||||
Срабатывает, когда игрок впервые начинает подключение, после `onPlayerAuth` .
|
||||
Срабатывает, когда игрок впервые начинает подключение, после `onPlayerAuth`.
|
||||
|
||||
##### `onPlayerJoining`
|
||||
|
||||
Аргументы: `player_id: number` Возможность отмены: НЕТ
|
||||
|
||||
Срабатывает, когда игрок завершил загрузку всех модов, после `onPlayerConnecting` .
|
||||
Срабатывает, когда игрок завершил загрузку всех модов, после `onPlayerConnecting`.
|
||||
|
||||
##### `onPlayerDisconnect`
|
||||
|
||||
@@ -1213,33 +1213,33 @@ MP.RegisterEvent("onPlayerAuth", "myPlayerAuthorizer")
|
||||
|
||||
##### `onChatMessage`
|
||||
|
||||
Аргументы: `player_id: number` , `player_name: string` , `message: string` Возможность отмены: ДА
|
||||
Аргументы: `player_id: number`, `player_name: string`, `message: string` Возможность отмены: ДА
|
||||
|
||||
Срабатывает, когда игрок отправляет сообщение в чате. При отмене сообщение в чате не будет показано никому, даже игроку, который его отправил.
|
||||
|
||||
##### `onVehicleSpawn`
|
||||
|
||||
Аргументы: `player_id: number` , `vehicle_id: number` , `data: string` Возможность отмены: ДА
|
||||
Аргументы: `player_id: number`, `vehicle_id: number`, `data: string` Возможность отмены: ДА
|
||||
|
||||
Срабатывает, когда игрок создает новое транспортное средство. Аргумент `data` содержит конфигурацию автомобиля и данные о положении/вращении для транспортного средства в виде строки json.
|
||||
|
||||
##### `onVehicleEdited`
|
||||
|
||||
Аргументы: `player_id: number` , `vehicle_id: number` , `data: string` Возможность отмены: ДА
|
||||
Аргументы: `player_id: number`, `vehicle_id: number`, `data: string` Возможность отмены: ДА
|
||||
|
||||
Срабатывает, когда игрок редактирует свое транспортное средство и применяет редактирование. Аргумент `data` содержит обновленную конфигурацию автомобиля в виде строки json, но **не** включает данные о положении или вращении. Вы можете использовать [MP.GetPositionRaw](#mpgetpositionrawpid-number-vid-number-tablestring) для получения данных о положении и вращении.
|
||||
|
||||
##### `onVehicleDeleted`
|
||||
|
||||
Аргументы: `player_id: number` , `vehicle_id: number` Возможность отмены: НЕТ
|
||||
Аргументы: `player_id: number`, `vehicle_id: number` Возможность отмены: НЕТ
|
||||
|
||||
Срабатывает, когда игрок удаляет свое транспортное средство.
|
||||
|
||||
##### `onVehicleReset`
|
||||
|
||||
Аргументы: `player_id: number` , `vehicle_id: number` , `data: string` Возможность отмены: НЕТ
|
||||
Аргументы: `player_id: number`, `vehicle_id: number`, `data: string` Возможность отмены: НЕТ
|
||||
|
||||
Срабатывает, когда игрок сбрасывает свое транспортное средство. `data` — это обновленное положение и вращение автомобиля, однако **не** включают конфигурацию транспортных средств. Вы можете использовать [MP.GetPlayerVehicles](#mpgetplayervehiclesplayer_id-number-table) , чтобы получить конфигурацию транспортных средств.
|
||||
Срабатывает, когда игрок сбрасывает свое транспортное средство. `data` — это обновленное положение и вращение автомобиля, однако **не** включают конфигурацию транспортных средств. Вы можете использовать [MP.GetPlayerVehicles](#mpgetplayervehiclesplayer_id-number-table), чтобы получить конфигурацию транспортных средств.
|
||||
|
||||
##### `onFileChanged`
|
||||
|
||||
@@ -1249,13 +1249,13 @@ MP.RegisterEvent("onPlayerAuth", "myPlayerAuthorizer")
|
||||
|
||||
Срабатывает при изменении файла в каталоге `Resources/Server` *или любом его подкаталоге* .
|
||||
|
||||
Любое изменение файла в каталоге `Resources/Server/<plugin>` (не в его подпапке) вызовет перезагрузку состояния Lua и событие `onFileChanged` .
|
||||
Любое изменение файла в каталоге `Resources/Server/<plugin>` (не в его подпапке) вызовет перезагрузку состояния Lua и событие `onFileChanged`.
|
||||
|
||||
Любой файл в подпапках `Resources/Server/<plugin>` , например `Resources/Server/<plugin>/lua/stuff.lua` , не вызовет перезагрузку состояния, а только вызовет событие `onFileChanged` . Таким образом, вы можете перезагрузить его самостоятельно правильным образом (или не перезагружать).
|
||||
Любой файл в подпапках `Resources/Server/<plugin>`, например `Resources/Server/<plugin>/lua/stuff.lua`, не вызовет перезагрузку состояния, а только вызовет событие `onFileChanged`. Таким образом, вы можете перезагрузить его самостоятельно правильным образом (или не перезагружать).
|
||||
|
||||
Это относится ко всем файлам, а не только к файлам `.lua` .
|
||||
Это относится ко всем файлам, а не только к файлам `.lua`.
|
||||
|
||||
`path` указывается относительно корня сервера, например `Resources/Server/myplugin/myfile.txt` . Вы можете выполнить дальнейшую обработку этой строки с помощью семейства функций `FS.*` , например, извлечь имя или расширение ( `FS.GetExtension(...)` , `FS.GetFilename(...)` , ...).
|
||||
`path` указывается относительно корня сервера, например `Resources/Server/myplugin/myfile.txt`. Вы можете выполнить дальнейшую обработку этой строки с помощью семейства функций `FS.*`, например, извлечь имя или расширение ( `FS.GetExtension(...)`, `FS.GetFilename(...)`, ...).
|
||||
|
||||
Примечание: файлы, добавленные после запуска сервера, *не* отслеживаются, начиная с версии 3.1.0.
|
||||
|
||||
@@ -1269,7 +1269,7 @@ MP.RegisterEvent("onPlayerAuth", "myPlayerAuthorizer")
|
||||
|
||||
#### Найти и заменить
|
||||
|
||||
Сначала вам следует выполнить поиск и замену всех функций MP. Подстановка должна добавить `MP.` перед всеми функциями MP, за исключением `print()` .
|
||||
Сначала вам следует выполнить поиск и замену всех функций MP. Подстановка должна добавить `MP.` перед всеми функциями MP, за исключением `print()`.
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -1287,7 +1287,7 @@ print(#players) -- note how print() doesn't change
|
||||
|
||||
#### Прощайте, темы, привет, таймеры событий!
|
||||
|
||||
Как обсуждалось во введении, потоки — это таймеры событий. Для любых вызовов `CreateThread` замените его вызовом `CreateEventTimer` . Внимательно проверьте время, которое имел ваш старый CreateThread (число было X в секунду), и подумайте о том, какое значение тайм-аута таймера событий для этого (которое указывается в миллисекундах). Также имейте в виду, что вместо имени функции он принимает имя события, поэтому вам придется также зарегистрировать событие.
|
||||
Как обсуждалось во введении, потоки — это таймеры событий. Для любых вызовов `CreateThread` замените его вызовом `CreateEventTimer`. Внимательно проверьте время, которое имел ваш старый CreateThread (число было X в секунду), и подумайте о том, какое значение тайм-аута таймера событий для этого (которое указывается в миллисекундах). Также имейте в виду, что вместо имени функции он принимает имя события, поэтому вам придется также зарегистрировать событие.
|
||||
|
||||
Пример:
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ Feel you could help? Please do by clicking on the page with a pencil on the righ
|
||||
This can be done any page too.
|
||||
```
|
||||
|
||||
# Справочник по серверным скриптам
|
||||
# Справочник по Серверным Скриптам
|
||||
|
||||
## Версия сервера 2.X
|
||||
|
||||
@@ -21,17 +21,17 @@ 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}
|
||||
> Это скрипт 2.x. Обращайтесь к нему только если ваш сервер старый/устаревший (версия 2.xx). Для получения последней документации см. [здесь](https://docs.beammp.com/scripting/server/latest-server-reference). {.is-warning}
|
||||
|
||||
### Примечания
|
||||
|
||||
Чтобы получить вывод функции в консоли сервера, вам нужно обернуть его в оператор `print()` . Например: `print(GetPlayerName(0))` вернет имя первого игрока вашего сервера.
|
||||
Чтобы получить вывод функции в консоли сервера, вам нужно обернуть его в оператор `print()`. Например: `print(GetPlayerName(0))` вернет имя первого игрока вашего сервера.
|
||||
|
||||
`<PlayersServerID>` начинается с 0.
|
||||
|
||||
### Список доступных функций для написания скриптов
|
||||
|
||||
#### GetPlayerName(идентификатор_сервера_игроков)
|
||||
#### GetPlayerName(playersServerID)
|
||||
|
||||
Возвращает имя игрока в Discord в виде строки
|
||||
|
||||
@@ -53,7 +53,7 @@ function onPlayerJoin(playerID)
|
||||
end
|
||||
```
|
||||
|
||||
#### GetPlayerHWID(идентификатор_сервера_игроков)
|
||||
#### GetPlayerHWID(playersServerID)
|
||||
|
||||
Возвращает идентификатор игрока в Discord в виде строки
|
||||
|
||||
@@ -64,7 +64,7 @@ function onPlayerJoin(playerID)
|
||||
end
|
||||
```
|
||||
|
||||
#### GetPlayerVehicles(идентификатор_сервера_игроков)
|
||||
#### GetPlayerVehicles(playersServerID)
|
||||
|
||||
Возвращает транспортные средства игрока в виде объекта/массива.
|
||||
|
||||
@@ -78,7 +78,7 @@ function onChatMessage(playerID, senderName, message)
|
||||
end
|
||||
```
|
||||
|
||||
#### DropPlayer(идентификатор_сервера_игроков)
|
||||
#### DropPlayer(playersServerID)
|
||||
|
||||
Сбрасывает соединение для определенного игрока. По сути выгоняет его
|
||||
|
||||
@@ -113,9 +113,9 @@ function onInit()
|
||||
end
|
||||
```
|
||||
|
||||
#### Выход()
|
||||
#### exit()
|
||||
|
||||
Закрою сервер.
|
||||
Закроет сервер
|
||||
|
||||
```lua
|
||||
function onInit()
|
||||
@@ -124,7 +124,7 @@ function onInit()
|
||||
end
|
||||
```
|
||||
|
||||
#### CreateThread(имя_функции, интервал_вызова)
|
||||
#### CreateThread(functionName, callInterval)
|
||||
|
||||
Функция будет выполняться в выделенном потоке, и она будет запускать callInterval раз в секунду. 1 = Она будет запускаться каждую секунду.
|
||||
|
||||
@@ -150,7 +150,7 @@ end
|
||||
CreateThread("yourFunction", 30)
|
||||
```
|
||||
|
||||
#### StopThread(имя_функции)
|
||||
#### StopThread(functionName)
|
||||
|
||||
Прекратит попытки вызвать функцию потока текущего скрипта.
|
||||
|
||||
@@ -170,7 +170,7 @@ end
|
||||
|
||||
```
|
||||
|
||||
#### Сон (миллисек) - ИЗНОС
|
||||
#### Sleep(миллисек) - УСТАРЕЛО
|
||||
|
||||
Приостановит выполнение на указанное время (предупреждение: это приведет к приостановке всего сервера, если вы не создали поток)
|
||||
|
||||
@@ -184,7 +184,7 @@ end
|
||||
CreateThread("countdown", 10)
|
||||
```
|
||||
|
||||
#### ПолучитьPlayerCount()
|
||||
#### GetPlayerCount()
|
||||
|
||||
Вернет количество подключенных игроков
|
||||
|
||||
@@ -196,7 +196,7 @@ end
|
||||
|
||||
#### RemoveVehicle(playerServerID, VehicleID)
|
||||
|
||||
Исчезнет транспортное средство.
|
||||
Деспавнит транспортное средство
|
||||
|
||||
```lua
|
||||
function onVehicleSpawn(playerID, vehicleID, vehicleData)
|
||||
@@ -206,7 +206,7 @@ function onVehicleSpawn(playerID, vehicleID, vehicleData)
|
||||
end
|
||||
```
|
||||
|
||||
#### ПолучитьИгроков()
|
||||
#### GetPlayers()
|
||||
|
||||
Вернет таблицу идентификаторов с именами
|
||||
|
||||
@@ -221,9 +221,9 @@ local function onPlayerJoin(joinedPlayerID)
|
||||
end
|
||||
```
|
||||
|
||||
#### RegisterEvent(имя_события, имя_функции)
|
||||
#### RegisterEvent(eventName, functionName)
|
||||
|
||||
Зарегистрирует эту функцию для указанного события. Оба должны быть строками
|
||||
Зарегистрирует эту функцию в указанном событии. Оба варианта должны быть строками
|
||||
|
||||
```lua
|
||||
function anyEvent()
|
||||
@@ -234,7 +234,7 @@ end
|
||||
TriggerLocalEvent("onAnyEventHappen")
|
||||
```
|
||||
|
||||
#### TriggerLocalEvent(имя_события)
|
||||
#### TriggerLocalEvent(eventName)
|
||||
|
||||
Будет вызывать каждую зарегистрированную функцию в той же папке плагина.
|
||||
|
||||
@@ -247,7 +247,7 @@ end
|
||||
TriggerLocalEvent("onAnyEventHappen")
|
||||
```
|
||||
|
||||
#### TriggerGlobalEvent(имя_события)
|
||||
#### TriggerGlobalEvent(eventName)
|
||||
|
||||
Будет вызывать каждую зарегистрированную функцию с этим именем события.
|
||||
|
||||
@@ -275,7 +275,7 @@ end
|
||||
RegisterEvent("onAnyEventHappen", "anyEvent")
|
||||
```
|
||||
|
||||
#### Установить(configID, newValue)
|
||||
#### Set(configID, newValue)
|
||||
|
||||
установит настройку конфигурации на новое указанное значение из таблицы ниже|
|
||||
|
||||
@@ -293,10 +293,10 @@ end
|
||||
|
||||
> Обратите внимание, что они не будут сохранены в файле конфигурации.
|
||||
|
||||
Идентификатор конфигурации | Имя | Приму только
|
||||
Идентификатор конфигурации | Имя | Примет только
|
||||
--- | --- | ---
|
||||
`0` | Настройка отладки | правда или ложь
|
||||
`1` | Частная обстановка | правда или ложь
|
||||
`1` | Настройка приватности | правда или ложь
|
||||
`2` | Макс. количество автомобилей на игрока | число
|
||||
`3` | Макс. количество игроков | число
|
||||
`4` | Карта | нить
|
||||
@@ -306,7 +306,7 @@ end
|
||||
|
||||
### Список доступных событий для написания сценариев
|
||||
|
||||
#### События по умолчанию
|
||||
#### События по Умолчанию
|
||||
|
||||
Пример использования события:
|
||||
|
||||
@@ -343,11 +343,11 @@ end
|
||||
`onPlayerJoin` | Идентификатор игрока | Игрок присоединился и загрузился
|
||||
`onPlayerDisconnect` | Идентификатор игрока | Игрок отключился
|
||||
`onChatMessage` | Идентификатор отправителя, имя и сообщение чата | Сообщение чата было отправлено. Это было бы хорошо для создания системы команд
|
||||
`onVehicleSpawn` | Идентификатор игрока, идентификатор транспортного средства и данные транспортного средства | Это называется, когда кто-то создает транспортное средство.
|
||||
`onVehicleEdited` | Идентификатор игрока, идентификатор транспортного средства и данные транспортного средства | Это называется, когда кто-то редактирует транспортное средство или заменяет существующее.
|
||||
`onVehicleDeleted` | Идентификатор игрока и идентификатор транспортного средства | Это называется, когда кто-то удаляет принадлежащее ему транспортное средство.
|
||||
`onVehicleSpawn` | Идентификатор игрока, идентификатор транспортного средства и данные транспортного средства | Это вызывается, когда кто-то создает транспортное средство
|
||||
`onVehicleEdited` | Идентификатор игрока, идентификатор транспортного средства и данные транспортного средства | Это происходит, когда кто-то редактирует транспортное средство или заменяет существующее
|
||||
`onVehicleDeleted` | Идентификатор игрока и идентификатор транспортного средства | Это происходит, когда кто-то удаляет принадлежащее ему транспортное средство
|
||||
|
||||
#### Пользовательские события
|
||||
#### Пользовательские События
|
||||
|
||||
Пользовательские события также могут быть созданы для вашего собственного использования. Это делается примерно так же, как и события по умолчанию.
|
||||
|
||||
@@ -375,7 +375,7 @@ end
|
||||
|
||||
ТИП ИДЕНТИФИКАТОРА | ПЛЮСЫ | МИНУСЫ | ФУНКЦИЯ ДЛЯ ПОЛУЧЕНИЯ
|
||||
--- | --- | --- | :-:
|
||||
имя | легко получить, просто | не безопасно | ПолучитьИмяИгрока()
|
||||
имя | легко получить, просто | не безопасно | GetPlayerName()
|
||||
DiscordID | довольно безопасно | неудобно | GetPlayerDiscordID()
|
||||
HWID | чрезвычайно безопасно | трудно получить | GetPlayerHWID()
|
||||
|
||||
|
||||
@@ -0,0 +1,295 @@
|
||||
# Установка Сервера
|
||||
|
||||
## **Создание Сервера**
|
||||
|
||||
Основы настройки серверного приложения
|
||||
|
||||
---
|
||||
|
||||
### **Обзор**
|
||||
|
||||
**Создание домашнего сервера бесплатно, размещение его на VPS проще и безопаснее**
|
||||
|
||||
Серверы являются неотъемлемой частью BeamMP; игроки подключаются друг к другу через сервер. Они работают нативно на Windows и Linux.
|
||||
|
||||
Вы можете создавать частные серверы, к которым смогут присоединиться только приглашенные вами люди, или публичные серверы, которые будут отображаться в нашем официальном списке серверов.
|
||||
|
||||
Запуск сервера — это процесс из нескольких шагов! Если у вас возникнут какие-либо проблемы, смело задавайте их на нашем [форуме](https://forum.beammp.com) или на нашем [сервере Discord](https://discord.gg/beammp) в канале `#support`. Также обратитесь к разделу [«Обслуживание сервера»](server-maintenance.md) для получения дополнительной информации.
|
||||
|
||||
Перед использованием обязательно прочтите [ЛИЦЕНЗИЮ](https://raw.githubusercontent.com/BeamMP/BeamMP-Server/master/LICENSE) сервера.
|
||||
|
||||
Примечание: *сервер поддерживает только IPv4. Если вы не знаете, какой у вас IPv4, посмотрите на IP-адрес, который вы видите на [*whatsmyip.org*](https://www.whatsmyip.org/) — если он содержит* двоеточия `_:_` *, это **IPv6**. В этом случае вам следует дополнительно выяснить, есть ли у вас IPv4. Вы можете позвонить своему интернет-провайдеру, чтобы узнать это, или спросить кого-то, кто живет с вами (если они разбираются в технологиях, они могут знать!). Поддержка IPv6 планируется.*
|
||||
|
||||
## Настройка Сервера
|
||||
|
||||
Настройка состоит из следующих шагов, вам следует выполнить их все.
|
||||
|
||||
### **1. Переадресация портов**
|
||||
|
||||
!!! информация
|
||||
|
||||
```
|
||||
Если вы используете VPS (виртуальный частный сервер), корневой сервер или планируете разместить этот сервер локально (с игроками в одном доме с вами), вы можете пропустить этот шаг.
|
||||
Этот шаг необходим, если вы хотите, чтобы кто-то **вне** вашего домохозяйства присоединился к вашему домашнему серверу (за пределами вашей локальной сети).
|
||||
|
||||
!!! опасность ":material-scale-balance: ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:"
|
||||
|
||||
**Переадресация портов — это риск**.
|
||||
|
||||
Переадресуя порты, вы осознаете риски открытия портов в вашей домашней сети для публики и, следовательно, лишаете себя права привлекать BeamMP к ответственности за **любой** ущерб, который может быть причинен вам или вашему домохозяйству.
|
||||
|
||||
Мы не несем ответственности за какой-либо контент на любых внешних связанных сервисах или веб-сайтах.
|
||||
|
||||
Поэтому рекомендуется разместить сервер на одном из наших партнерских сервисов!
|
||||
|
||||
*Пожалуйста, ознакомьтесь с [этим руководством по переадресации портов](port-forwarding.md)*
|
||||
```
|
||||
|
||||
#### Партнерские услуги хостинга (платные):
|
||||
|
||||
- [Хостинг Горизонта](https://hrzn.link/beammp)
|
||||
- [RackGenius](https://rackgeni.us/beammp-plans)
|
||||
- [Подключить хостинг](https://connecthosting.net/beammp)
|
||||
- [Хостинг Assetto](https://assettohosting.com/en/games/beamng)
|
||||
- [ZAP-Хостинг](https://zap-hosting.com/itsbeammp)
|
||||
- [HostHavoc](https://hosthavoc.com/)
|
||||
- [PedalHost](https://pedal.host/)
|
||||
- [Хостинг Vyper](https://vyperhosting.com/r/beammp)
|
||||
- [BisectHosting](https://www.bisecthosting.com/beammp-server-hosting)
|
||||
- [Хостинг Four Seasons](https://fourseasonshosting.com)
|
||||
- [Vertuo Хостинг](https://vertuohosting.com)
|
||||
- [Винхеберг](https://winheberg.fr/offres/gaming/beammp?lang=en)
|
||||
- [Ваббанод](https://wabbanode.com/partner/beammp)
|
||||
- [Айcлайн Хостинг](https://iceline-hosting.com/games/beammp)
|
||||
|
||||
#### 1.1 Брандмауэр
|
||||
|
||||
В зависимости от настроек вам может потребоваться разрешить BeamMP-Server проходить через ваш брандмауэр. Это касается Windows (отключение брандмауэра обычно **не** работает) и многих предустановленных серверов Linux.
|
||||
|
||||
Там вы хотите разрешить BeamMP-Server через брандмауэр, **как входящие, так и исходящие соединения**, и **как TCP, так и UDP**. Если ваш брандмауэр запрашивает порт вместо этого, это должен быть тот же порт, который вы использовали на шаге «1. Переадресация портов» (обычно 30814).
|
||||
|
||||
Для более детализированного руководства, обратитесь к [этой странице документации](https://docs.beammp.com/FAQ/Defender-exclusions/). Если у вас остались проблемы, вы можете спросить о них на [Форуме](https://forum.beammp.com) или нашем [Discord сервере](https://discord.gg/beammp) в `#support` канале.
|
||||
|
||||
### **2. Получение ключа аутентификации**
|
||||
|
||||
«Ключ аутентификации», часто называемый «AuthKey», необходим для того, чтобы сделать **общедоступный** сервер доступным для списка серверов. Хотя рекомендуется добавлять authkey и к частным серверам. У вас есть ограниченное количество ключей. Один ключ может использоваться на одном сервере одновременно, поэтому вы не можете запустить два сервера одновременно с одним и тем же ключом. Дополнительные ключи можно получить, поддержав проект. Прочитайте [эту статью](https://docs.beammp.com/support/player-faq/) для получения дополнительной информации.
|
||||
|
||||
!!! предупреждение
|
||||
|
||||
```
|
||||
НИКОГДА НЕ ДЕЛИТЕСЬ ЭТИМ КЛЮЧОМ И НЕ ПОКАЗЫВАЙТЕ ЕГО НИКОМУ. ОТНОСИТЕСЬ К НЕМУ КАК К ПАРОЛЮ.
|
||||
```
|
||||
|
||||
Для этого шага вам понадобится учетная запись [Discord](https://discord.com). Это необходимо для предотвращения спама.
|
||||
|
||||
#### 2.1. Доступ к странице ключей
|
||||
|
||||
Войдите в [Keymaster](https://beammp.com/keymaster) через Discord. На домашней странице Keymaster нажмите «Ключи» в левой части экрана:
|
||||
|
||||
|
||||
<figure markdown=""></figure>
|
||||
|
||||
#### 2.2 Создание ключа
|
||||
|
||||
Чтобы создать свой ключ, нажмите на зеленую кнопку «+» в правом верхнем углу.
|
||||
|
||||
|
||||
<figure markdown=""></figure>
|
||||
|
||||
#### 2.3. Заполнение ключевой информации
|
||||
|
||||
Далее заполните поле Имя сервера (это просто имя ключа, а не фактическое имя сервера в списке), затем нажмите «Создать». Пример:
|
||||
|
||||
|
||||
<figure class="image image_resized" style="width:44.84%;" markdown=""></figure>
|
||||
|
||||
В конечном итоге это должно выглядеть примерно так:
|
||||
|
||||
|
||||
<figure markdown=""></figure>
|
||||
|
||||
#### 2.4 Копирование ключа
|
||||
|
||||
Теперь скопируйте текст в поле «Ключ», в этом примере это `3173a2e-6az0-4542-a3p0-ddqq5ff95558` и сохраните его для следующего шага. Вы можете сделать это, щелкнув по буферу обмена справа от ключа:
|
||||
|
||||
|
||||
<figure markdown=""></figure>
|
||||
|
||||
### **3. Установка**
|
||||
|
||||
BeamMP-Server доступен для Windows и Linux. Следующие два раздела посвящены Windows и Linux.
|
||||
|
||||
#### 3.а. Установка на Windows
|
||||
|
||||
Для установки Linux см. следующий шаг.
|
||||
|
||||
Пожалуйста, убедитесь, что у вас перенаправлены порты, прежде чем пытаться разместить сервер дома! Без перенаправления портов вы не сможете разместить сервер для общественности!
|
||||
|
||||
1. Для запуска сервера убедитесь, что у вас установлены [Visual C++ Redistributables](https://aka.ms/vs/17/release/vc_redist.x64.exe).
|
||||
2. Загрузите исполняемый файл сервера с [beammp.com](https://www.beammp.com/). У вас должен получиться исполняемый файл, который называется примерно так: `BeamMP-Server.exe`.
|
||||
3. После загрузки создайте где-нибудь папку и поместите туда `BeamMP-Server.exe`. Это то место, где будет находиться ваш сервер.
|
||||
4. Запустите сервер один раз, дважды щелкнув по нему. Это сгенерирует все необходимые файлы для вас, как только вы увидите текст, вы можете закрыть его и перейти к следующему шагу. Вы должны увидеть файл `ServerConfig.toml` рядом с вашим `BeamMP-Server.exe`.
|
||||
5. (необязательно) Для быстрого доступа в будущем вы можете легко создать ярлык на рабочем столе для `BeamMP-Server.exe` используя **[Щелкните правой кнопкой мыши]** > **Отправить на** > **Рабочий стол (создать ярлык).**
|
||||
|
||||
Теперь перейдите к шагу [4. Конфигурация](#4-configuration).
|
||||
|
||||
#### 3.б. Установка на Linux
|
||||
|
||||
##### Использование нашей сборки (рекомендуется)
|
||||
|
||||
Этот шаг будет работать на всех дистрибутивах, для которых мы предоставляем [здесь](https://github.com/BeamMP/BeamMP-Server/releases/latest) файлы. Если у вас другой дистрибутив или архитектура, обратитесь к шагу «Сборка из исходного кода» ниже.
|
||||
|
||||
1. Убедитесь, что у вас установлены зависимости, перечисленные [здесь](https://github.com/BeamMP/BeamMP-Server#runtime-dependencies).
|
||||
2. Перейдите на сайт [beammp.com](https://beammp.com/) и нажмите кнопку «Загрузить сервер», вы будете перенаправлены на страницу релиза сервера на GitHub.
|
||||
3. Загрузите правильную версию для вашего дистрибутива. Для простоты с этого момента она будет называться `BeamMP-Server-xxx`, где `xxx` обозначает версию для используемого вами дистрибутива.
|
||||
4. После загрузки вы должны увидеть один файл с именем `BeamMP-Server-xxx`, среди прочих, которые вы можете пока проигнорировать. Создайте где-нибудь папку и поместите туда `BeamMP-Server-xxx`. Это то место, где будет находиться ваш сервер.
|
||||
5. Откройте терминал, перейдите в папку, в которую вы поместили `BeamMP-Server-xxx`, и выполните `chmod +x BeamMP-Server-xxx`. Это гарантирует, что у вас есть разрешения на его запуск.
|
||||
6. Запустите сервер один раз, запустив его с помощью `./BeamMP-Server-xxx`. Это сгенерирует все необходимые файлы для вас, как только вы увидите текст, вы можете закрыть его и перейти к следующему шагу. Вы должны увидеть файл `ServerConfig.toml` рядом с вашим `BeamMP-Server-xxx`.
|
||||
7. (необязательно) Настоятельно рекомендуется настроить пользователя с именем `beammpserver` (или похожим), поскольку мы НЕ рекомендуем запускать сервер как root, sudo или с вашей личной учетной записью пользователя. Затем вам следует предпринять шаги, чтобы убедиться, что вы запускаете сервер только как этот пользователь.
|
||||
|
||||
Теперь перейдите к шагу «4. Конфигурация».
|
||||
|
||||
##### Сборка из источника
|
||||
|
||||
Другие дистрибутивы в дополнение к тем, которые уже имеют [здесь](https://github.com/BeamMP/BeamMP-Server/releases/latest) двоичный файл, вероятно, тоже будут работать, но официально не поддерживаются. Если вы хотите собрать его самостоятельно, вы можете сделать это, загрузив исходный код на нашем [GitHub](https://github.com/BeamMP/BeamMP-Server), руководство можно найти [здесь](https://github.com/BeamMP/BeamMP-Server#build-instructions).
|
||||
|
||||
В конце обязательно запустите свой сервер один раз с помощью `./BeamMP-Server`, а затем переходите к следующему шагу.
|
||||
|
||||
### **4. Конфигурация**
|
||||
|
||||
Теперь, когда вы запустили сервер один раз, он должен был создать некоторые файлы и, вероятно, выдать одну или две ошибки. Это потому, что мы еще не закончили. В вашей папке должны быть эти файлы:
|
||||
|
||||
|
||||
<figure markdown=""></figure>
|
||||
|
||||
Они называются «ServerConfig.toml», «Server.log» и «BeamMP-Server.exe»! (В зависимости от ваших настроек вы можете не увидеть расширения [.toml] [.log] [.exe])
|
||||
|
||||
Откройте `ServerConfig.toml` с помощью текстового редактора, например `Notepad`. Это можно сделать с помощью [Правый клик] → «Открыть с помощью…» и выбора текстового редактора.
|
||||
|
||||
Вот пример конфигурации:
|
||||
|
||||
```TOML
|
||||
[General]
|
||||
Port = 30814
|
||||
AuthKey = "auth-key"
|
||||
AllowGuests = false
|
||||
LogChat = false
|
||||
Debug = false
|
||||
IP = "::"
|
||||
Private = true
|
||||
InformationPacket = true
|
||||
Name = "Test Server"
|
||||
Tags = "Freeroam,Modded,Racing,Police"
|
||||
MaxCars = 2
|
||||
MaxPlayers = 10
|
||||
Map = "/levels/ks_nord/info.json"
|
||||
Description = "Total Random Beam MP Server"
|
||||
ResourceFolder = "Resources"
|
||||
```
|
||||
|
||||
!!! информация
|
||||
|
||||
```
|
||||
Это ваш файл конфигурации. Он использует формат TOML. Дополнительную информацию об этом файле и переменных см. в разделе [Обслуживание сервера](server-maintenance.md).
|
||||
Ваш сервер **НЕ** будет отображаться в списке серверов, пока установлено значение `Private = true`. _Если_ вы хотите, чтобы он отображался в списке, установите значение **`Private = false`**.
|
||||
```
|
||||
|
||||
Пока что нас интересует только поле `AuthKey`. В кавычки `"` нужно вставить свой AuthKey, скопированный на первом шаге.
|
||||
|
||||
Для нашего примера ключ должен выглядеть следующим образом:
|
||||
|
||||
```TOML
|
||||
AuthKey = '3173a2e-6az0-4542-a3p0-ddqq5ff95558'
|
||||
```
|
||||
|
||||
Присвойте своему серверу имя в поле `Name`. Вы можете форматировать его с помощью цветов и других средств; подробности см. в [этом разделе о настройке имени](server-maintenance.md#customize-the-look-of-your-server-name) на странице обслуживания сервера.
|
||||
|
||||
Если вы выбрали другой **порт**, отличный от **30814**, обязательно замените его здесь в разделе `Port`.
|
||||
|
||||
### **5. Проверка**
|
||||
|
||||
Теперь снова запустите сервер и посмотрите, выдает ли он еще сообщения `[ERROR]` или `[WARN]`. Теперь сервер должен оставаться открытым. В следующих шагах (6.) ниже вы можете узнать, как присоединиться к серверу.
|
||||
|
||||
---
|
||||
|
||||
#### 5.1 Как добавить моды на свой сервер
|
||||
|
||||
Моды транспортных средств и моды карт устанавливаются по-разному, но оба требуют, чтобы вы поместили их в папку вашего сервера (`Resources/Client`). Просто перетащите любой мод, который вы хотите добавить, в эту папку.
|
||||
|
||||
!!! предупреждение
|
||||
|
||||
```
|
||||
Если вы получили сообщение «Готово» или «Начало» при попытке присоединиться к серверу после добавления модов, скорее всего, вы добавили на сервер несовместимый или сломанный мод.
|
||||
Несовместимость модов может также возникнуть между 2 или более модами. Если у вас установлены клиентские моды, проверьте [это руководство](../../FAQ/How-to-deactivate-mods.md) об удалении модов из вашей игры.
|
||||
```
|
||||
|
||||
#### 5.2 Общие моды
|
||||
|
||||
Если вы хотите добавить только модифицированные транспортные средства, вы можете поместить zip-файл мода в папку `Resources/Client`. Они будут автоматически загружены любым, кто присоединится к вашему серверу.
|
||||
|
||||
#### 5.3 Карты
|
||||
|
||||
Все стандартные карты (карты, которые не являются модами) работают сразу «из коробки» и не требуют установки. Вам нужно лишь изменить параметр `Map` в файле `ServerConfig.toml` на любое из [этих](server-maintenance.md#all-vanilla-maps-names). Для любых других, модифицированных карт, сделайте следующее:
|
||||
|
||||
1. Поместите `.zip`-файл вашей карты в папку вашего сервера (`Resources/Client`).
|
||||
2. Далее, загляните в zip-файл карты (не извлекайте его) и откройте папку `levels`. В этой папке должна быть просто еще одна папка с названием карты, например, «myawesomedriftmap2021». Обязательно скопируйте или запомните это название *точно так, как оно написано в названии этой папки.*
|
||||
3. Откройте `ServerConfig.toml`. В настройках `Map` вы должны увидеть `/levels/MAPNAME/info.json`, где `MAPNAME`, скорее всего, что-то вроде `gridmap_v2`. Теперь вам нужно заменить `MAPNAME` на имя папки из последнего шага, в том примере это было `myawesomedriftmap2021`. В итоге это должно выглядеть так (для этого примера) и ***должно*** иметь `/info.json` в конце.
|
||||
|
||||
```TOML
|
||||
Map = '/levels/myawesomedriftmap2021/info.json'
|
||||
```
|
||||
|
||||
Теперь, когда кто-то присоединится к вашему серверу, он должен автоматически загрузить карту и работать так, как и ожидалось.
|
||||
|
||||
**Если это НЕ работает**, установите карту в одиночную игру BeamNG.drive, запустите ее и войдите в карту. Затем откройте консоль, нажав клавишу `~` (*тильда*) (если у вас не американская раскладка клавиатуры, посмотрите на действие **Toggle System Console** в меню **Options > Controls > Bindings** в разделе **General Debug**), и запустите `print(getMissionFilename())`. Это должно показать вам имя для использования.
|
||||
|
||||
Вот и все! Ваша модифицированная карта теперь должна быть доступна для присоединения!
|
||||
|
||||
### **6. Как присоединиться к вашему серверу**
|
||||
|
||||
Как вы и другие игроки можете присоединиться к вашему серверу.
|
||||
|
||||
#### 6.a. Присоединение к собственному серверу (как частному, так и публичному)
|
||||
|
||||
Если ваш сервер размещен на том же ПК, на котором работает игра, вы должны присоединиться к серверу с помощью прямого подключения, для этого нажмите **вкладку Direct Connect** слева от списка серверов. Оставьте там информацию по умолчанию (должно быть 127.0.0.1 и соответствующий порт), затем нажмите Connect.
|
||||
|
||||
Если ваш сервер размещен на другом ПК в вашей локальной сети, вам необходимо найти локальный IP-адрес этой машины и напрямую подключиться, используя этот локальный IP-адрес.
|
||||
|
||||
Если ваш сервер размещен за пределами вашего дома (например, VPS), вам необходимо найти [публичный IP-адрес](https://whatismyipaddress.com/) этой машины и подключиться напрямую через него.
|
||||
|
||||
#### 6.б. Присоединение других людей к вашему приватному серверу
|
||||
|
||||
Вам необходимо предоставить другим пользователям публичный IP-адрес вашего сервера. Однако будьте осторожны, сообщая свой публичный IP-адрес незнакомцам! Чтобы присоединиться к вашему частному серверу, игроки должны перейти на **вкладку Direct Connect** в BeamMP, затем ввести свой IP и порт.
|
||||
|
||||
#### 6.c. Присоединение других людей к вашему публичному серверу
|
||||
|
||||
Чтобы присоединиться к вашему публичному серверу, они могут просто перейти к списку серверов, ввести имя сервера и нажать «подключиться». Если вы не уверены в имени своего сервера, это будет имя, которое вы указали в `ServerConfig.toml`. Убедитесь, что фильтры поиска отключены, а Карта установлена на «Любая», если вы не можете ее найти. Вы также можете проверить веб-сайт [Keymaster](https://beammp.com/keymaster) на предмет IP-адреса сервера.
|
||||
|
||||
Если вы или ваши друзья столкнулись с ошибкой «Сбой подключения!», проверьте окно запуска на наличие кодов вроде 10060, 10061, 10030. Это означает, что у вас либо есть CGNAT IPv4, либо вы сделали что-то неправильно на шаге **1 Переадресация портов** или **1.1. Межсетевой экран**. Чтобы проверить, есть ли у вас CGNAT IPv4, найдите WAN IP-адрес на интерфейсе маршрутизатора. Сравните его с вашим [публичным IP-адресом](https://www.whatsmyip.org/). Если они одинаковы, вы не находитесь за CGNAT. Поддержка IPv6 пока **НЕ** реализована.
|
||||
|
||||
### **7. Как проверить подключение вашего сервера BeamMP**
|
||||
|
||||
Введите публичный IPv4-адрес и порт сервера ниже, затем нажмите «CheckBeamMP».
|
||||
|
||||
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
|
||||
<label for="ip">IP-адрес:</label>
|
||||
<input type="text" id="ip" name="ip"><br>
|
||||
<label for="port">Порт:</label>
|
||||
<input type="text" id="port" name="port"><br>
|
||||
<input type="submit" value="CheckBeamMP">
|
||||
</form>
|
||||
|
||||
!!! предупреждение «Я хочу использовать VPN, например RadminVPN, Hamachi или аналогичный».
|
||||
|
||||
```
|
||||
BeamMP не поддерживает эти VPN, так как они часто вызывают проблемы. Одна из этих проблем — непереадресация трафика UDP. Чтобы решить эту проблему, обратитесь к разделу 1.
|
||||
|
||||
!!! вопрос «Но почему это работало в прошлом?»
|
||||
|
||||
Это происходит из-за того, что разработчики этих приложений обновляют свое программное обеспечение и вносят изменения, которые BeamMP не контролирует.
|
||||
Разработчики этих приложений должны обеспечить поддержку конкретных вариантов использования, таких как BeamMP-Server.
|
||||
```
|
||||
|
||||
## Все еще сталкиваетесь с проблемами?
|
||||
|
||||
Откройте тему на [форуме](https://forum.beammp.com) или на нашем [сервере Discord](https://discord.gg/beammp) в канале `#support`.
|
||||
@@ -0,0 +1,20 @@
|
||||
# Коды Ошибок
|
||||
|
||||
На этой странице содержатся все коды ошибок, которые может отображать сервер.
|
||||
|
||||
---
|
||||
|
||||
Код | Описание | Возможное решение
|
||||
--- | --- | ---
|
||||
10022 | Возникла проблема с привязкой к порту | Проверьте, не используется ли порт сервера другой службой, если да, используйте другую.
|
||||
10048 | Адрес уже используется | На этом порту запущен другой сервер или программа BeamMP, используйте другой.
|
||||
10051 | Сеть недоступна | Неправильная переадресация портов или аналогичные проблемы. Проверьте, что все настроено правильно.
|
||||
10052 | Сброс сети | Происходит, если сеть обрывает соединение во время установки соединения. Повторите попытку соединения.
|
||||
10053 | Соединение прервано | Вызвано тайм-аутом или ошибкой сети. Повторите попытку подключения.
|
||||
10054 | Сброс соединения пиром | Клиент отключился от вашего сервера.
|
||||
10060 | Время ожидания соединения истекло | Возникла проблема с переадресацией портов. Ознакомьтесь с [пошаговыми инструкциями](create-a-server.md#1-port-forwarding) .
|
||||
10061 | В соединении отказано | Возникла проблема с переадресацией портов. Ознакомьтесь с [пошаговыми инструкциями](create-a-server.md#1-port-forwarding) .
|
||||
10064 | Хост недоступен | Маловероятная ошибка, но она означает, что хост вышел из строя из-за его отключения или закрытия портов.
|
||||
10065 | Хост недостижим | Нет интернета или плохая переадресация портов, пожалуйста, следуйте [инструкциям руководства](create-a-server.md#1-port-forwarding) .
|
||||
|
||||
!!! Примечание. Если вы немного знаете, как работают сети/сокеты, для любого другого кода, не указанного в этом списке, вы можете обратиться к [https://learn.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2](https://learn.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2) .
|
||||
@@ -0,0 +1,87 @@
|
||||
# Руководство Сервера
|
||||
|
||||
# Окружение
|
||||
|
||||
На сервер влияет состояние различных внешних параметров:
|
||||
|
||||
- Папка «Ресурсы»
|
||||
- ENV (переменные среды)
|
||||
- Аргументы командной строки
|
||||
- Файл ServerConfig.toml
|
||||
- Рабочий каталог
|
||||
|
||||
## Папка Ресурсов
|
||||
|
||||
Папка ресурсов создается при запуске сервера вместе с подкаталогами "Client" и "Server". Подкаталог "Server" принимает папки внутри себя, каждая из которых содержит как минимум один файл `.lua`. Каждая из этих папок в подкаталоге "Server" называется «плагином». Файлы `.lua`, содержащиеся в каталоге корневом каталоге плагина, перезагружаются на ходу при изменении. Подкаталог "Client" принимает *только* файлы `.zip`, которые загружаются при запуске сервера и, как предполагается, не изменяются во время выполнения.
|
||||
|
||||
## ОКРУЖАЮЩАЯ СРЕДА
|
||||
|
||||
### Общие Настройки
|
||||
|
||||
Начиная с версии Server v3.2.0, сервер BeamMP принимает переменные среды, которые **переопределяют** настройки в ServerConfig.toml. Все переменные ServerConfig, которые существуют в категории/разделе "General", имеют PascalCase, переменные среды имеют ALL_CAPS и префикс `BEAMMP_`. Например, настройка `MaxPlayers`, преобразованная в ALL_CAPS, имеет вид `MAX_PLAYERS` (обратите внимание на `_`, где начинается новое слово), а с префиксом она становится `BEAMMP_MAX_PLAYERS`. Это формат, который используется для всех настроек "General". Существуют следующие переменные ENV:
|
||||
|
||||
- `BEAMMP_DEBUG`
|
||||
- `BEAMMP_PRIVATE`
|
||||
- `BEAMMP_PORT`
|
||||
- `BEAMMP_MAX_CARS`
|
||||
- `BEAMMP_MAX_PLAYERS`
|
||||
- `BEAMMP_MAP`
|
||||
- `BEAMMP_NAME`
|
||||
- `BEAMMP_DESCRIPTION`
|
||||
- `BEAMMP_TAGS`
|
||||
- `BEAMMP_RESOURCE_FOLDER`
|
||||
- `BEAMMP_AUTH_KEY`
|
||||
- `BEAMMP_LOG_CHAT`
|
||||
|
||||
Любые переменные среды, соответствующие параметрам конфигурации, которые являются строками или числами, должны быть строками, например `BEAMMP_NAME="Cool Server"`, `BEAMMP_NAME=Server1`, `BEAMMP_PORT=12345`. Переменные среды, соответствующие параметрам конфигурации, которые являются логическими значениями (true/false, on/off), должны быть либо `true`, либо `1` (оба означают ON), либо любым другим значением (означающим OFF).
|
||||
|
||||
### Настройки Провайдера
|
||||
|
||||
Эти переменные среды позволяют хостинг-провайдерам (и другим пользователям с большим количеством серверов), далее именуемым «провайдерами», перезаписывать определенные настройки, специфичные для провайдера.
|
||||
|
||||
#### `BEAMMP_PROVIDER_PORT_ENV` (начиная с версии 3.3.0)
|
||||
|
||||
Если задана непустая строка, это заменяет переменную `BEAMMP_PORT` на другую, чтобы прочитать переменную из существующего ENV. Например, Pterodactyl может выставлять `SERVER_PORT` как ENV. Чтобы использовать его с BeamMP-Server, вам придется сделать `BEAMMP_PORT=${SERVER_PORT}`, что немного глупо.
|
||||
|
||||
Вместо этого теперь можно использовать `BEAMMP_PROVIDER_PORT_ENV="SERVER_PORT"`, что заставит BeamMP-Server прочитать порт из переменной ENV `SERVER_PORT`.
|
||||
|
||||
#### `BEAMMP_PROVIDER_DISABLE_CONFIG` (начиная с версии 3.3.0)
|
||||
|
||||
Если установлено значение `1` или `true`, `ServerConfig.toml` **не создаётся** и **не считывается**, даже если существует. Для работы сервера необходимо установить `BEAMMP_AUTH_KEY`.
|
||||
|
||||
#### `BEAMMP_PROVIDER_UPDATE_MESSAGE` (начиная с версии 3.2.2)
|
||||
|
||||
Если задано непустое значение, это заменяет все сообщение об обновлении, которое по умолчанию выглядит как "НОВАЯ ВЕРСИЯ ВЫШЛА! Пожалуйста, обновитесь до новой версии..." и т. д. **ОБЯЗАТЕЛЬНО**, чтобы предоставленное вами сообщение об обновлении содержало `{}` где-то, что сервер заменит на новый номер версии. Например, ваше сообщение об обновлении может выглядеть так:
|
||||
|
||||
```sh
|
||||
BEAMMP_PROVIDER_UPDATE_MESSAGE="NEW VERSION of the BeamMP-Server has been released: {}! Please follow the update guide here: https://example.com/update-guide"
|
||||
```
|
||||
|
||||
Что приведет к появлению сообщения об обновлении, например:
|
||||
|
||||
```
|
||||
NEW VERSION of the BeamMP-Server has been released: v5.0.2! Please follow the update guide here: https://example.com/update-guide
|
||||
```
|
||||
|
||||
Пожалуйста, постарайтесь четко разъяснить пользователям необходимость обновления и объясните, как это сделать.
|
||||
|
||||
## Аргументы командной строки
|
||||
|
||||
Запустите BeamMP Server с аргументом `--help` , чтобы узнать больше. Например: `./BeamMP-Server --help` .
|
||||
|
||||
## ServerConfig.toml
|
||||
|
||||
Этот файл генерируется при первом запуске. Комментарии внутри файла — самый современный способ понять, что делает каждая настройка.
|
||||
|
||||
## Рабочий каталог
|
||||
|
||||
Решающим фактором при определении места создания ServerConfig.toml, файлов журналов сервера и папки Resources является рабочий каталог сервера, а не местоположение исполняемого файла сервера.
|
||||
|
||||
# Ограничения
|
||||
|
||||
В Бэкэнде BeamMP действуют следующие ограничения, которые влияют на Серверы:
|
||||
|
||||
- Имя ограничено 250 символами
|
||||
- Описание ограничено 1000 символами
|
||||
- Карта ограничена 100 символами
|
||||
- Теги ограничены 100 символами
|
||||
@@ -0,0 +1,228 @@
|
||||
# Переадресация Портов
|
||||
|
||||
!!! опасность ":material-scale-balance: ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:"
|
||||
|
||||
```
|
||||
**Переадресация портов — это риск**.
|
||||
|
||||
Используя переадресацию портов, вы осознаете риски открытия портов в вашей домашней сети для публики и, следовательно, лишаете себя права привлекать BeamMP к ответственности за **любой** ущерб, который может быть причинен вам или вашему домохозяйству.
|
||||
|
||||
Мы не несем ответственности за какой-либо контент на любых внешних связанных сервисах или веб-сайтах.
|
||||
|
||||
<u>**Если вы не понимаете это руководство, рассмотрите возможность обращения к одному из наших партнеров.**</u>
|
||||
```
|
||||
|
||||
!!! предупреждение
|
||||
|
||||
```
|
||||
Пожалуйста, убедитесь, что ваш маршрутизатор не является устройством исключительно 4G/5G. Если это гибридное устройство, обязательно выберите адаптер с кабельным подключением далее в разделе 3 этого руководства!
|
||||
```
|
||||
|
||||
## Как настроить переадресацию портов.
|
||||
|
||||
Создание правила переадресации портов включает несколько подробных сетевых терминов. Будьте готовы записать несколько заметок по мере прохождения процесса.
|
||||
|
||||
В этом руководстве 4 основных шага.
|
||||
|
||||
## Краткое руководство. (Более подробное руководство приведено ниже)
|
||||
|
||||
<div class="grid cards" markdown>
|
||||
</div>
|
||||
<ul data-md-type="list" data-md-list-type="unordered" data-md-list-tight="false">
|
||||
<li data-md-type="list_item" data-md-list-type="unordered">
|
||||
<p data-md-type="paragraph">:material-dns:{ .lg .middle } <strong data-md-type="double_emphasis">Назначьте статический IP-адрес вашему компьютеру или устройствам</strong></p>
|
||||
<hr data-md-type="hrule">
|
||||
<p data-md-type="paragraph">Это необходимо для предотвращения изменения IP-адреса вашего устройства и нарушения правила переадресации портов.</p>
|
||||
<p data-md-type="paragraph"><a href="https://portforward.com/router.htm#1" data-md-type="link">:octicons-arrow-right-24: Просмотр информации о вашем маршрутизаторе</a></p>
|
||||
</li>
|
||||
<li data-md-type="list_item" data-md-list-type="unordered">
|
||||
<p data-md-type="paragraph">:material-router-wireless:{ .lg .middle } <strong data-md-type="double_emphasis">Войдите в свой маршрутизатор</strong></p>
|
||||
<hr data-md-type="hrule">
|
||||
<p data-md-type="paragraph">Обычно это можно сделать, найдя IP-адрес «шлюза по умолчанию», который можно найти, выполнив <code data-md-type="codespan">ipconfig</code> в командной строке и введя его в адресную строку веб-браузера.</p>
|
||||
</li>
|
||||
<li data-md-type="list_item" data-md-list-type="unordered">
|
||||
<p data-md-type="paragraph">:material-lan-connect:{ .lg .middle } <strong data-md-type="double_emphasis">Перенаправьте порты на ваш компьютер</strong></p>
|
||||
<hr data-md-type="hrule">
|
||||
<p data-md-type="paragraph">Найдите раздел переадресации портов в веб-интерфейсе маршрутизатора. Большинство маршрутизаторов перечисляют раздел переадресации портов в разделе «Сеть», «Дополнительно» или «Локальная сеть».</p>
|
||||
</li>
|
||||
<li data-md-type="list_item" data-md-list-type="unordered">
|
||||
<p data-md-type="paragraph">:material-test-tube:{ .lg .middle } <strong data-md-type="double_emphasis">Проверьте, что ваш порт правильно перенаправлен</strong></p>
|
||||
<hr data-md-type="hrule">
|
||||
<p data-md-type="paragraph">Используйте такой инструмент, как CheckBeamMP, чтобы проверить, работает ли правило.</p>
|
||||
<div data-md-type="block_html">
|
||||
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
|
||||
<label for="ip">IP-адрес:</label>
|
||||
<input type="text" id="ip" name="ip"><br>
|
||||
<label for="port">Порт:</label>
|
||||
<input type="text" id="port" name="port"><br>
|
||||
<input type="submit" value="CheckBeamMP">
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div data-md-type="block_html"></div>
|
||||
|
||||
## Подробное руководство
|
||||
|
||||
### 1. Назначение статического IP-адреса
|
||||
|
||||
### Метод 1: настройка статического IP-адреса с использованием резервирования DHCP
|
||||
|
||||
Другой способ задать статический IP-адрес в локальной сети — использовать функцию резервирования DHCP вашего маршрутизатора. Не все маршрутизаторы имеют эту функцию, поэтому это может быть неподходящим вариантом для вас. Пожалуйста, найдите в Интернете модель вашего маршрутизатора, чтобы найти руководство.
|
||||
|
||||
Если вам удалось это сделать, перейдите сразу к [шагу 2.](port-forwarding.md#2-log-in-to-your-router)
|
||||
|
||||
### Метод 2: Назначение статического IP-адреса в Windows
|
||||
|
||||
#### 1.1. Найдите свой текущий IP-адрес, шлюз и DNS-серверы:
|
||||
|
||||
Прежде чем мы сможем настроить статический IP-адрес, нам нужно знать ваши текущие сетевые настройки. Вам нужно будет записать их, поэтому приготовьте блокнот. Для этого шага мы воспользуемся командной строкой.
|
||||
|
||||
Откройте командную строку. 3 основных способа:
|
||||
|
||||
- Нажмите клавишу Windows, затем начните вводить фразу «cmd», затем нажмите Enter, когда увидите выделенную строку «Командная строка».
|
||||
|
||||
|
||||
<figure class="image image_resized" style="width:62%;" markdown=""></figure>
|
||||
|
||||
После того, как вы окажетесь в командной строке, выполните следующую команду:
|
||||
|
||||
```
|
||||
ipconfig /all
|
||||
```
|
||||
|
||||
Вы увидите много данных. Если у вас есть виртуальные или несколько сетевых адаптеров, то вы увидите еще больше данных. Обычно можно увидеть много виртуальных адаптеров, если у вас установлен Hyper-V или Docker.
|
||||
|
||||
|
||||
<figure class="image image_resized" style="width:62%;" markdown=""></figure>
|
||||
|
||||
Рекомендуется использовать проводное сетевое соединение, которое будет запускать этот сервер, однако он будет работать и через беспроводное соединение. Вам нужно будет найти в этом списке адаптер, который имеет активное подключение к Интернету. Прокрутите список и найдите тот, которому назначен шлюз по умолчанию. Многие из виртуальных адаптеров не будут иметь шлюза по умолчанию.
|
||||
|
||||
Ниже приведены примеры локальных адресов IPv4, которые должен иметь хотя бы один из адаптеров. Вам нужно будет записать информацию о вашем адаптере.
|
||||
|
||||
- 192.168.xx
|
||||
- 10.xxx
|
||||
- 172.16.xx - 172.31.xx
|
||||
|
||||
Маска подсети (скорее всего 255.255.255.0) Основной шлюз (скорее всего 192.168.0.1 или 192.168.1.1)
|
||||
|
||||
!!! info "Обратите внимание" BeamMP в настоящее время не поддерживает IPv6 для хостинга сервера.
|
||||
|
||||
#### 1.2.Изменение настроек адаптера
|
||||
|
||||
Теперь нам нужно изменить настройки вашего сетевого адаптера, чтобы ваш ПК сохранил текущую конфигурацию IP. Чтобы получить доступ к настройкам вашей сети, самый быстрый способ:
|
||||
|
||||
- Нажмите один раз клавишу Windows.
|
||||
- Введите фразу «сетевые подключения», пока не увидите «Просмотр сетевых подключений».
|
||||
- Нажмите клавишу Enter.
|
||||
|
||||
|
||||
<figure class="image image_resized" style="width:62%;" markdown=""></figure>
|
||||
|
||||
Вы должны увидеть список сетевых подключений на вашем компьютере. Если у вас установлены Hyper-V или Docker, их может быть много. Найдите все адаптеры, которые не называются "Hyper-V".
|
||||
|
||||
|
||||
<figure class="image image_resized" style="width:62%;" markdown=""></figure>
|
||||
|
||||
Щелкните правой кнопкой мыши по вашему адаптеру и выберите свойства. Если `Internet Protocol Version 4` не отмечен, то это неправильный адаптер. Выберите другой.
|
||||
|
||||
|
||||
<figure class="image image_resized" style="width:62%;" markdown=""></figure>
|
||||
|
||||
Дважды щелкните по `Internet Protocol Version 4` Измените `Obtain an IP address automatically` на `Use the following IP address` .
|
||||
|
||||
Заполните поля IP-адрес, маска подсети, шлюз по умолчанию и предпочитаемый DNS-сервер, используя информацию из командной строки (ipconfig /all).
|
||||
|
||||
В качестве альтернативы вместо использования своих DNS-серверов вы можете использовать DNS-серверы CloudFlare или Google:
|
||||
|
||||
- CloudFlare DNS: 1.1.1.1, 1.0.0.1
|
||||
- Google DNS: 8.8.8.8, 8.8.4.4
|
||||
|
||||
|
||||
<figure class="image image_resized" style="width:62%;" markdown=""></figure>
|
||||
|
||||
Нажмите Ok, затем нажмите Ok еще раз, и ваш адаптер теперь изменен с DHCP на статический. Поищите в Интернете, чтобы убедиться, что у вас все еще есть подключение к Интернету. Если нет, то измените настройки обратно на Получить IP-адрес автоматически и попробуйте следующий метод.
|
||||
|
||||
### 2. Войдите в свой маршрутизатор.
|
||||
|
||||
Теперь, когда на вашем устройстве есть статический IP-адрес, вы готовы перенаправить порт для BeamMP!
|
||||
|
||||
Для начала нам нужно войти в ваш роутер. Ранее одна из настроек, которую вы записали, это ваш Default Gateway. Это IP-адрес вашего роутера.
|
||||
|
||||
Большинство маршрутизаторов используют локально размещенную веб-страницу для управления. Чтобы просмотреть меню и настройки маршрутизатора:
|
||||
|
||||
- Откройте веб-браузер. Firefox, Chrome или Edge должны работать нормально.
|
||||
- В адресной строке введите IP-адрес вашего шлюза по умолчанию, например 192.168.0.1 или 192.168.1.1, и нажмите Enter.
|
||||
|
||||
Теперь вы должны увидеть экран входа в систему вашего маршрутизатора. Не все маршрутизаторы требуют входа в систему, но большинство требуют. Вам необходимо знать имя пользователя и пароль вашего маршрутизатора. Если вы никогда не входили в систему раньше, ваши имя пользователя и пароль, скорее всего, установлены на заводские значения по умолчанию или, в некоторых случаях, написаны на наклейке вашего маршрутизатора.
|
||||
|
||||
Ниже перечислены некоторые из наиболее распространенных заводских имен пользователей и паролей:
|
||||
|
||||
Имя пользователя | Пароль
|
||||
--- | ---
|
||||
админ | админ
|
||||
админ | пароль
|
||||
{пустой} | админ
|
||||
{пустой} | пароль
|
||||
|
||||
Попробуйте различные комбинации admin, password и оставьте записи пустыми. *Там, где написано blank, попробуйте оставить значение пустым.*
|
||||
|
||||
### 3. Создайте правила пересылки!
|
||||
|
||||
#### 3.1. Найдите раздел пересылки
|
||||
|
||||
Найдите раздел переадресации портов в веб-интерфейсе маршрутизатора. Перемещайтесь по маршрутизатору, нажимая вкладки или ссылки в верхней или левой части каждой страницы. Большинство маршрутизаторов перечисляют раздел переадресации портов в разделе «Сеть», «Дополнительно» или «Локальная сеть». Найдите его по следующим ключевым словам:
|
||||
|
||||
- Переадресация портов
|
||||
- Пересылка
|
||||
- Переадресация диапазона портов
|
||||
- Виртуальные серверы
|
||||
- Приложения и игры
|
||||
- Расширенные настройки/параметры
|
||||
- НАТ
|
||||
|
||||
#### 3.2. Введите данные
|
||||
|
||||
Как только вы найдете раздел переадресации портов вашего маршрутизатора, вы готовы ввести необходимую информацию. На вашем маршрутизаторе будет место для ввода портов, которые нужно переадресовать, и IP-адрес назначения, чтобы указать эти переадресованные порты. Если на вашем маршрутизаторе указаны как внутренние, так и внешние порты, сделайте их одинаковыми.
|
||||
|
||||
Для BeamMP требуются как UDP-, так и TCP-порт 30814 (если вы не изменили это в [ServerConfig.toml](create-a-server.md#4-configuration) ).
|
||||
|
||||
!!! info "Примечание" Хотя **порт** по умолчанию - **30814** , вы можете выбрать любой другой номер больше 1024, но меньше 65535, но вам нужно записать, что вы выбрали, если это не 30814. Вам нужно перенаправить как **TCP** , так и **UDP** . Рекомендуется придерживаться порта по умолчанию, так как он вряд ли будет использоваться другой службой на вашем ПК. Однако, если вы размещаете несколько серверов на одной машине, каждому серверу нужен свой порт. Например, сервер 1: 30814, сервер 2: 30815.
|
||||
|
||||
На некоторых маршрутизаторах вам может потребоваться создать два правила: одно для UDP и одно для TCP, в то время как другие удобны и позволяют сделать и то, и другое с помощью одного правила!
|
||||
|
||||
На большинстве маршрутизаторов есть кнопка «Сохранить», а на некоторых маршрутизаторах требуется перезапуск или перезагрузка, чтобы изменения вступили в силу.
|
||||
|
||||
### 4. Время тестировать!
|
||||
|
||||
Есть несколько способов проверить соединение.
|
||||
|
||||
Наш рекомендуемый способ — использовать наш инструмент **CheckBeamMP**, так как он проверяет проблемы и протоколы, специфичные для BeamMP.
|
||||
|
||||
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
|
||||
<label for="ip">IP-адрес:</label>
|
||||
<input type="text" id="ip" name="ip"><br>
|
||||
<label for="port">Порт:</label>
|
||||
<input type="text" id="port" name="port"><br>
|
||||
<input type="submit" value="CheckBeamMP">
|
||||
</form>
|
||||
|
||||
Это можно сделать, получив свой публичный IPv4-адрес, это опять же можно сделать несколькими способами. Основной способ — использовать веб-сайт [whatsmyip.org](https://whatsmyip.org/) . Это простой веб-сайт, который отображает ваш публичный IP-адрес. Вам следует искать IP-адрес в формате: xxx.xxx.xxx.xxx
|
||||
|
||||
Перейдите по следующей ссылке и замените «IP» на ваш реальный адрес IPv4, а «Port» на порт вашего сервера. Не оставляйте пробелов. https://check.beammp.com/api/v2/beammp/ip/port
|
||||
|
||||
!!! успех "статус:ok"
|
||||
|
||||
```
|
||||
Если вы получили результат, аналогичный приведенному выше, то теперь вы можете присоединиться к своему серверу!
|
||||
Присоединиться можно двумя способами: либо напрямую, используя данные, введенные вами в «Вероятно UP», либо, если ваш сервер настроен как «публичный», через список серверов.
|
||||
Поскольку вы размещаете сервер локально, используйте 127.0.0.1 (localhost), если сервер работает на том же компьютере, что и вы, или LAN IPv4 локальной машины, на которой работает сервер.
|
||||
```
|
||||
|
||||
!!! сбой "статус:ошибка"
|
||||
|
||||
```
|
||||
Если соединение полностью отсутствует, ваш интернет-провайдер может использовать CGNAT (трансляцию сетевых адресов операторского класса). Для получения более подробной информации, пожалуйста, проверьте [Как проверить наличие CGNAT?](../FAQ/How-to-check-for-CGNAT.md),
|
||||
или откройте тикет в службу поддержки сервера на нашем [сервере Discord](https://discord.gg/beammp) в канале `#support`, и один из наших сотрудников займется вашим тикетом!
|
||||
Если вы видите, что работает только TCP, а UDP не работает, еще раз проверьте правила брандмауэра и переадресации портов.
|
||||
```
|
||||
@@ -1,31 +1,39 @@
|
||||
# Обслуживание сервера
|
||||
# Обслуживание Сервера
|
||||
|
||||
Руководства, советы и рекомендации по настройке и обслуживанию сервера BeamMP.
|
||||
|
||||
## Как установить
|
||||
|
||||
Инструкции по установке см. в разделе [Установка сервера](create-a-server.md) .
|
||||
Инструкции по установке см. в разделе [Установка сервера](create-a-server.md).
|
||||
|
||||
## Файл ServerConfig
|
||||
|
||||
Конфигурация сервера, представляющая собой файл `ServerConfig.toml` , использует [формат TOML](https://toml.io/en/) .
|
||||
Конфигурация сервера, представляющая собой файл `ServerConfig.toml`, использует [формат TOML](https://toml.io/en/).
|
||||
|
||||
*ПРИМЕЧАНИЕ* : *Старый* файл конфигурации сервера назывался `Server.cfg` , но он больше не используется, и сервер выдаст предупреждение, если он все еще присутствует. Также обратите внимание, что два формата конфигурации **несовместимы** друг с другом.
|
||||
*ПРИМЕЧАНИЕ*: *Старый* файл конфигурации сервера назывался `Server.cfg`, но он больше не используется, и сервер выдаст предупреждение, если он все еще присутствует. Также обратите внимание, что два формата конфигурации **несовместимы** друг с другом.
|
||||
|
||||
По умолчанию в конфигурации есть один раздел, называемый `[General]` , который содержит следующие значения:
|
||||
По умолчанию в конфигурации есть один раздел, называемый `[General]`, который содержит следующие значения:
|
||||
|
||||
Ключ | Тип значения | Описание
|
||||
--- | --- | ---
|
||||
AuthKey | Формат AuthKey `xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` где все x — буквенно-цифровые символы (цифры и буквы) | Используется для идентификации вашего сервера с бэкэндом. Вы должны были получить его, следуя инструкциям по установке.
|
||||
Порт | 1024-65535 | Сетевой порт, по которому сервер будет доступен. (Должен быть уникальным и не использоваться другим сервисом на том же хосте).
|
||||
AuthKey | Формат AuthKey `xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` где все x — буквенно-цифровые символы (цифры и буквы) | Используется для идентификации публичного сервера в бэкенде.
|
||||
AllowGuests | правда/ложь | Определяет, разрешено ли гостям подключаться к серверу или нет.
|
||||
LogChat | правда/ложь | Если включено (true), сообщения чата записываются в файл server.log.
|
||||
Отлаживать | правда/ложь | При включении (true) будет отображаться больше сообщений в журнале и предоставляться больше информации. Включите это, если у вас возникнут проблемы. Включение этого параметра значительно увеличит размер файла журнала.
|
||||
Частный | правда/ложь | Если включено (true), ваш сервер не будет отображаться в списке серверов. Любой с правильным IP и портом все равно сможет подключиться.
|
||||
Описание | Любой "текст" | Отображается как описание сервера в списке серверов (если сервер публичный). Вы можете использовать специальные символы для форматирования с помощью цветов и стилей.
|
||||
InformationPacket | правда/ложь | Если включено (true), сервер будет позволять неаутентифицированным клиентам получать ту же информацию, что и в списке серверов, но напрямую с сервера.
|
||||
Имя | Любой "текст" | Отображается как имя/заголовок вашего сервера в списке серверов. Вы можете использовать специальные символы для форматирования с помощью цветов и стилей.
|
||||
Карта | Допустимое местоположение на карте, например `/levels/gridmap_v2/info.json` | Карта, которую будет размещать ваш сервер. Должна быть установлена либо по умолчанию (список можно найти ниже), либо как серверный мод.
|
||||
Tags | См. список разрешённых тегов ниже. | Теги для поиска, например: Police, Racing и т.д.
|
||||
МаксКарс | Любое число ≥ 1 | Максимальное количество машин на игрока. Любые дополнительные машины, которые игрок попытается создать, будут мгновенно удалены.
|
||||
Порт | 1024-65535 | Сетевой порт, на котором будет доступен сервер. Чтобы игрок мог напрямую подключиться к вашему серверу, ему понадобится ваш IP и этот порт.
|
||||
MaxPlayers | Любое число ≥ 1 | Максимальное количество игроков на сервере. Это не влияет на количество транспортных средств.
|
||||
Карта | Допустимое местоположение на карте, например `/levels/gridmap_v2/info.json` | Карта, которую будет размещать ваш сервер. Должна быть установлена либо по умолчанию (список можно найти ниже), либо как серверный мод.
|
||||
Описание | Любой "текст" | Отображается как описание сервера в списке серверов (если сервер публичный). Вы можете использовать специальные символы для форматирования с помощью цветов и стилей.
|
||||
ResourceFolder | Корректный путь к папке, например: "D:\Server\BeamMP\Resources" | Полезно хранить сервер и папку ресурсов отдельно.
|
||||
ImScaredOfUpdates | правда/ложь | Определяет, будет ли сервер автоматически обновляться при выходе новой версии.
|
||||
UpdateReminderTime | Любое число с суффиксом s, min, h или d (например, 30s). | Задаёт интервал напоминаний об обновлении, выводимых в терминал.
|
||||
|
||||
Другие разделы могут и должны использоваться серверными плагинами (скоро появится API Lua), например: `[MyMod]` .
|
||||
Другие разделы могут и должны использоваться серверными плагинами (скоро появится API Lua), например: `[MyMod]`.
|
||||
|
||||
AuthKey **ДОЛЖЕН** быть установлен вами. Он будет пустым по умолчанию и должен быть заполнен вашим AuthKey с шага установки ранее. Не делитесь этим ключом ни с кем и на снимках экрана полностью размывайте его.
|
||||
|
||||
@@ -79,9 +87,9 @@ AuthKey **ДОЛЖЕН** быть установлен вами. Он будет
|
||||
|
||||
### Настройте теги вашего сервера
|
||||
|
||||
Теги могут использоваться для того, чтобы позволить людям искать определенный тип сервера. Ваш serverConfig.toml будет сгенерирован с тегом freeroam `Tags = "Freeroam"` .
|
||||
Теги могут использоваться для того, чтобы позволить людям искать определенный тип сервера. Ваш serverConfig.toml будет сгенерирован с тегом freeroam `Tags = "Freeroam"`.
|
||||
|
||||
Вы можете добавить несколько тегов, разделенных запятой `Tags = "Events,Offroad,lang:english"` , регистр не учитывается.
|
||||
Вы можете добавить несколько тегов, разделенных запятой `Tags = "Events,Offroad,lang:english"`, регистр не учитывается.
|
||||
|
||||
Вы можете выбрать из следующего списка:
|
||||
|
||||
@@ -165,7 +173,7 @@ AuthKey **ДОЛЖЕН** быть установлен вами. Он будет
|
||||
- `Vanilla`
|
||||
- `Moderated`
|
||||
|
||||
Если тег отсутствует в этом списке, вы можете отправить запрос на его добавление [здесь.](https://forum.beammp.com/t/introducing-server-tags/1320081)
|
||||
Если тег отсутствует в этом списке, вы можете отправить запрос на его добавление [здесь](https://forum.beammp.com/t/introducing-server-tags/1320081)
|
||||
|
||||
## Файл Server.log
|
||||
|
||||
@@ -182,15 +190,15 @@ AuthKey **ДОЛЖЕН** быть установлен вами. Он будет
|
||||
- `$DATE` — дата сообщения, например 21/07/2021
|
||||
- `$TIME` — время сообщения, например 11:05:23
|
||||
- `$CONTEXT` (виден только в режиме отладки и в основном актуален для разработчиков) — контекст сообщения, который может быть:
|
||||
- `(Player ID) “Player Name”` , где ID игрока полезен для модерации
|
||||
- `(Player ID) “Player Name”`, где ID игрока полезен для модерации
|
||||
- Короткое имя, например «HeartbeatThread»
|
||||
- `$LOG_LEVEL` — один из уровней важности сообщения:
|
||||
- `DEBUG` : отображается только в режиме отладки, обычно является спамом и важен только для разработчиков.
|
||||
- `INFO` : Общая информация
|
||||
- `LUA` : Сообщение от плагина Lua
|
||||
- `WARN` : Описывает то, что не должно происходить, обычно
|
||||
- `ERROR` : Что-то пошло не так или произошло очень неожиданно.
|
||||
- `FATAL` : Произошло что-то, что привело к отключению сервера.
|
||||
- `DEBUG`: отображается только в режиме отладки, обычно является спамом и важен только для разработчиков.
|
||||
- `INFO`: Общая информация
|
||||
- `LUA`: Сообщение от плагина Lua
|
||||
- `WARN`: Описывает то, что не должно происходить, обычно
|
||||
- `ERROR`: Что-то пошло не так или произошло очень неожиданно.
|
||||
- `FATAL`: Произошло что-то, что привело к отключению сервера.
|
||||
- `$MESSAGE` само сообщение, обычно то, на что следует обратить внимание и что следует понять. В некоторых случаях это может быть зашифровано, но общее правило заключается в том, что пока нет видимых проблем с сервером и нет ОШИБОК, все хорошо.
|
||||
|
||||
## Обновление сервера
|
||||
@@ -199,7 +207,7 @@ AuthKey **ДОЛЖЕН** быть установлен вами. Он будет
|
||||
|
||||
Всякий раз, когда выходит новое обновление, вам рекомендуется обновить свой сервер. Обычно это включает исправления ошибок, улучшения стабильности и безопасности, наряду с общими новыми функциями и т. д., которые вводятся.
|
||||
|
||||
Чтобы получать новости об обновлениях по мере их выхода, подпишитесь на канал «обновления» сервера Discord, ищите его на форумах или посетите/спросите на [странице релизов GitHub](https://github.com/BeamMP/BeamMP-Server/releases) .
|
||||
Чтобы получать новости об обновлениях по мере их выхода, подпишитесь на канал «обновления» сервера Discord, ищите его на форумах или посетите/спросите на [странице релизов GitHub](https://github.com/BeamMP/BeamMP-Server/releases).
|
||||
|
||||
### Как обновить
|
||||
|
||||
@@ -215,23 +223,23 @@ AuthKey **ДОЛЖЕН** быть установлен вами. Он будет
|
||||
|
||||
#### В Windows
|
||||
|
||||
1. Для запуска сервера убедитесь, что у вас установлены [распространяемые компоненты Visual C++](https://aka.ms/vs/17/release/vc_redist.x64.exe) .
|
||||
1. Для запуска сервера убедитесь, что у вас установлены [Visual C++ Redistributables](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` ). Мы будем называть его «старым исполняемым файлом».
|
||||
3. После загрузки вы должны увидеть один файл с именем `BeamMP-Server.exe`. Мы назовем его «новый исполняемый файл».
|
||||
4. Перейдите в папку, где находится ваш текущий исполняемый файл `BeamMP-Server.exe` (обычно это та же папка, где находится ваш `ServerConfig.toml`). Мы будем называть его «старым исполняемым файлом».
|
||||
5. Замените старый исполняемый файл новым исполняемым файлом (например, скопировав или переместив новый исполняемый файл в папку).
|
||||
|
||||
#### На Линуксе
|
||||
|
||||
1. Перейдите на [BeamMP.com](https://beammp.com/) и нажмите кнопку «Загрузить сервер», вы будете перенаправлены на страницу релиза сервера на Github.
|
||||
2. Загрузите правильную версию для вашего дистрибутива. Для простоты теперь он будет называться `BeamMP-Server-xxx` , где `xxx` обозначает версию для используемого вами дистрибутива.
|
||||
2. Загрузите правильную версию для вашего дистрибутива. Для простоты теперь он будет называться `BeamMP-Server-xxx`, где `xxx` обозначает версию для используемого вами дистрибутива.
|
||||
3. После загрузки вы должны увидеть один файл с именем `BeamMP-Server-xxx` в зависимости от версии, которую вы скачали. Мы назовем его «новый исполняемый файл».
|
||||
4. Перейдите в папку, где находится ваш текущий исполняемый файл `BeamMP-Server-xxx` (обычно это та же папка, где находится ваш `ServerConfig.toml` ). Мы будем называть его «старым исполняемым файлом».
|
||||
4. Перейдите в папку, где находится ваш текущий исполняемый файл `BeamMP-Server-xxx` (обычно это та же папка, где находится ваш `ServerConfig.toml`). Мы будем называть его «старым исполняемым файлом».
|
||||
5. Замените старый исполняемый файл новым исполняемым файлом (например, скопировав или переместив новый исполняемый файл в папку).
|
||||
6. Откройте терминал в той папке, где вы только что заменили исполняемый файл, и выполните `sudo chmod +x BeamMP-Server-xxx` . Это позволит убедиться, что сервер может быть запущен.
|
||||
6. Откройте терминал в той папке, где вы только что заменили исполняемый файл, и выполните `sudo chmod +x BeamMP-Server-xxx`. Это позволит убедиться, что сервер может быть запущен.
|
||||
|
||||
### Автоматические обновления
|
||||
|
||||
Сервер не поддерживает автоматические обновления или уведомления об обновлениях (пока).
|
||||
|
||||
Однако вы можете запросить API GitHub для получения последней версии, проверив версию сервера по тегам. Вы можете получить это с помощью GET из `https://api.github.com/repos/BeamMP/BeamMP-Server/git/refs/tags` .
|
||||
Однако вы можете запросить API GitHub для получения последней версии, проверив версию сервера по тегам. Вы можете получить это с помощью GET из `https://api.github.com/repos/BeamMP/BeamMP-Server/git/refs/tags`.
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
# 如何在Windows Defender防火墙和防病毒软件中创建白名单?
|
||||
|
||||
!!! info
|
||||
|
||||
```
|
||||
在修改防火墙之前,请确保将windows网络设置中的网络设置为专用(假设您在私有网络中)。
|
||||
|
||||
!!! 免责声明:"
|
||||
|
||||
**防火墙/防御器关闭具有风险**。
|
||||
|
||||
通过创建排除条款,您了解允许在PC上运行程序并向公众开放家庭网络端口的风险,从而使BeamMP对可能发生在您或您的家庭中的任何和所有损害负责的权利无效。
|
||||
|
||||
我们对任何外部链接服务或网站上的任何内容不承担任何责任。
|
||||
```
|
||||
|
||||
## 为 BeamMP-Launcher 添加 Windows Defender 防火墙例外规则
|
||||
|
||||
1. 打开带有高级设置的`Windows Defender防火墙。`
|
||||
2. 在窗口中,单击`入站`以打开入站规则选项卡。
|
||||
3. 点击 `新建规则` 在右上方创建一个新的规则。
|
||||
4. 选择`程序`以创建特定于程序的规则。
|
||||
5. 请输入 `BeamMP-Launcher.exe` 的完整限定路径。<br>默认路径为 `%appdata%\BeamMP-Launcher\BeamMP-Launcher.exe`(请勿包含引号)。
|
||||
6. 确保允许连接
|
||||
7. 给排除项起一个名字(例如:“BeamMP-Launcher”)并保存它。
|
||||
8. 重启电脑
|
||||
|
||||
## 1.1 为 BeamMP-Launcher 添加 Windows Defender 防火墙例外规则
|
||||
|
||||
1. 打开 `Windows Defender高级防火墙设置`.
|
||||
2. 在窗口中,点击 `入站` 以打开入站规则选项卡。
|
||||
3. 在右上角点击 `新建规则` 以创建一条新的规则。
|
||||
4. 选择 `端口` 以创建针对特定程序的规则。
|
||||
5. 输入与 ServerConfig.toml 中配置的相同的端口号。
|
||||
6. 请输入 `BeamMP-Server.exe` 的完整限定路径。<br>该文件位于你下载后自行放置的位置。
|
||||
7. 确保允许连接
|
||||
8. 为该排除规则命名(例如 “BeamMP-Server”),然后保存规则。
|
||||
9. 重启电脑
|
||||
|
||||
## 2. BeamMP-Launcher 与 BeamMP-Server 的 Windows Defender 病毒防护排除设置
|
||||
|
||||
1. 打开 `Windows 安全中心` 应用.
|
||||
2. 单击第一个项目`病毒和威胁防护`。
|
||||
3. 单击“病毒和威胁防护设置”下方的`管理设置`。
|
||||
4. 向下滚动以导航到`排除项`选项卡。
|
||||
5. 在那里,单击“添加排除项”并选择`进程`。
|
||||
6. 在字段中输入 `BeamMP-Launcher.exe` 或 `BeamMP-Server.exe`,然后保存。
|
||||
7. 重启电脑。
|
||||
|
||||
## 还有问题吗?
|
||||
|
||||
在[论坛](https://forum.beammp.com)或我们的[Discord服务器](https://discord.gg/beammp) `#support`频道中打开一个频道。
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 我如何链接我的Discord帐户?
|
||||
|
||||
连接你的Discord和BeamMP帐户是BeamMP的一个新功能。为此,您需要发送`!link`作为消息到[BeamMP Accounts](https://discordapp.com/channels/@me/1201234743568634026/) bot。机器人会回复一个链接,让你登录到你的BeamMP账户。只需登录你的BeamMP帐户,一旦完成,你会收到第二条消息,说它已经成功地链接了你的帐户。 🎉
|
||||
将你的 Discord 账号与 BeamMP 账号关联是 BeamMP 的一项新功能。<br>要进行此操作,请前往你的 [论坛账户偏好设置](https://forum.beammp.com/my/preferences/account),在 “关联账户(Associated Accounts)” 下连接你的 Discord 账号。(只有当论坛的双重验证(2FA)被禁用时,此选项才会显示。)
|
||||
|
||||
## 我如何获得抢先体验资格?
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
请确保您完成以下操作以自动获得您的福利:
|
||||
|
||||
1. 在Patreon上链接您的Discord帐户,以获得Discord服务器中的角色和访问权限。
|
||||
1. 在 [Patreon](https://www.patreon.com/settings/apps/discord) 上关联你的 Discord 账号,以在 Discord 服务器中获得相应的角色和访问权限。
|
||||
2. 请确保您在Patreon上使用的电子邮件地址与您在[论坛](https://forum.beammp.com/)上使用的BeamMP帐户的电子邮件地址相同。
|
||||
|
||||
请耐心等待,系统同步可能需要几个小时,有时长达12个小时。如果您在完成上述步骤12小时后仍未收到专属福利,请联系BeamMP支持。
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
# lua-mods.md
|
||||
|
||||
此页面需要创建。
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
hide:
|
||||
- 导航
|
||||
---
|
||||
|
||||
# BeamMP 社区规则
|
||||
|
||||
!!!BeamMP员工不受这些规则的严格约束,可以自行决定操作。除这些规则外,Discord的[社区指南](https://discord.com/guidelines/)和[服务条款](https://discord.com/terms/)也适用并强制执行。
|
||||
|
||||
## BeamMP通用规则(适用于Discord、论坛和游戏内)
|
||||
|
||||
1. 禁止歧视(如性别歧视、种族主义等):material-information-outline:{title=“这包括直接或有意使用种族/性侮辱或其他词汇来针对个人或群体。”}
|
||||
2. 禁止欺凌或骚扰:material-information-outline:{title=“这包括使用不必要的行为、未经请求的DM或使用信息、图像或口头交流针对个人。”}
|
||||
3. 无NSFW、冒犯性或恶意内容:material-information-outline:{title=“这包括包含恶意链接、裸露、色情、过度亵渎或其他冒犯性、恶意和/或不适合在公共场所出现的内容。”}
|
||||
4. 禁止发送垃圾邮件文本/语音渠道或帖子:material-information-outline:{title=“这包括生成多个帖子或线程,发送相同或类似的消息,滥用语音通信渠道或其他行为,包括加入/离开垃圾邮件。”}
|
||||
5. 请说英语:material-information-outline:{title=“在可能的情况下,BeamMP内部的所有通信都应使用英语,除非另有指定的特定区域。”}
|
||||
6. 禁止不适当的个人资料:material-information-outline:{title=“这包括个人资料名称,照片,bios或其他不符合BeamMP/BeamNG/Discord规则和ToS的用户控制内容。”}
|
||||
7. material-information-outline:{title=“禁止发布个人信息(” doxing ")(包括但不限于真实姓名、地址、电子邮件、密码、银行账户和信用卡信息等)。}
|
||||
8. material-information-outline:{title=“这包括讨论BeamMP/BeamNG或整个游戏之外的过去或当前世界事件。有一些地方可以对这些话题进行有效的讨论,但BeamMP不是其中之一。”}
|
||||
9. 非BeamMP/BeamNG内容:material-information-outline:{title="这包括非BeamMP社区、社交媒体渠道或其他外部链接。这适用于在BeamMP社区内发帖,以及以个人广告为目的主动向用户发送DM。”}
|
||||
10. 禁止冒充工作人员:material-information-outline:{title="这包括声称自己是BeamMP的工作人员,或声称拥有与工作人员相关的能力。这也包括模仿工作人员。”}
|
||||
11. 禁止利用:material-information-outline:{title=“这包括利用任何漏洞或疏忽来谋取个人利益或对他人的体验产生负面影响。”}
|
||||
12. 禁止分享 Authkey,禁止用小号刷免费密钥数量,违者永久封禁。
|
||||
13. 遵循所有给定的TOS:material-information-outline:{title=“这很重要,因为使用我们的Discord服务器也必须遵循诸如Discord年龄限制(13+)之类的限制。”}
|
||||
14. 尊重每个人:material-information-outline:{title=“有些话不该说出口,你需要尊重你周围的每个人,并相应地行动。”}
|
||||
15. 关注类别或频道的主题。:material-information-outline:{title="这应该不说出来,但要保持你的内容在你发布的区域的主题上。例如,支持应该帮助人们或在寻求支持时使用。”}
|
||||
16. 不要使用过多的大写锁定或表情符号:material-information-outline:{title=“用户应该避免使用过多的大写符号或表情符号/表情符号,以免混淆手头的重点。”}
|
||||
17. 在支持区域发布之前,请检查[BeamMP FAQ](../../support/player-faq.md) & [BeamMP社区FAQ](https://forum.beammp.com/c/faq/35)。
|
||||
|
||||
## Discord 规则
|
||||
|
||||
1. 以上规则适用于这里:material-information-outline:{title=“本文档中提到的所有规则适用于语音聊天。”}
|
||||
2. 遵循Discord的使用条款和指南:material-information-outline:{title=“遵循Discord在其使用条款和指南中列出的所有规则”}
|
||||
3. 禁止NSFW音频/流:material-information-outline:{title=“玩家不应该流任何违反BeamMP规则和Discord TOS的内容。”}
|
||||
4. 上述规则包括赌博服务/网站。
|
||||
5. material-information-outline:{title=“禁止过度使用响板、大声播放音乐或使用其他音频通道故意煽动或针对他人。”}
|
||||
6. 禁止加入/离开滥用:material-information-outline:{title=“大多数用户可能启用声音效果,不要快速加入和离开语音聊天。”}
|
||||
7. 不要纠缠他人(`@'ing`):material-information-outline:{title=“这包括在被忽视或拒绝后反复要求他人回应。”}
|
||||
8. 将bot命令保存在特定于命令的通道中。
|
||||
9. 禁止角色扮演:material-information-outline:{title=“这是为了防止由于缺少上下文或防止用户规避某些规则而引起的问题。”}
|
||||
10. 请勿要求用户通过私信(DM)向你寻求帮助。所有与支持相关的话题均应在 BeamMP Discord 服务器的指定支持频道中进行讨论。
|
||||
11. 严禁发送任何可疑的、潜在恶意或具有破坏性的文件及附件(包括但不限于可疑扩展名)。
|
||||
12. 不要教/发链接教别人怎么盗版、破解软件、骇入账号、破解付费mod。
|
||||
13. 不要发布非BeamNG /BeamMP内容。只允许在专用的[媒体通道](https://discord.com/channels/601558901657305098/705427325646274680)中发送您自己通道的媒体。
|
||||
14. 听从工作人员的指示。如果你认为某位员工滥用职权,直接通知他们的领导或项目管理人员。
|
||||
|
||||
## 如何对您被实施的封禁进行申诉:
|
||||
|
||||
### 封禁上诉可在<a href="https://docs.google.com/forms/d/1MaTPKM-MHQU5lUtxeOKz3C7OoI6Xbu5RX5AJdX-UOz4" class="inline-onebox">封禁上诉- BeamMP</a>提交。
|
||||
|
||||
所有禁令申诉都经过彻底调查,涉及至少两(2)名与本案无关的工作人员/审核小组成员。发出申诉的工作人员将被允许发表评论,但不会以其他方式参与申诉决定。这些上诉结果是最终的。BeamMP保留根据BeamMP社区规则(如上所述)、[Discord ToS](https://discord.com/terms)和其他因素允许或不允许成员的权利。
|
||||
|
||||
!!! 如果对您采取行动,您将被禁止创建新的Discord或BeamMP帐户来规避禁令。
|
||||
@@ -37,8 +37,8 @@ BeamMP支持团队不提供盗版/过期副本问题的支持。
|
||||
|
||||
确保你已经安装了基本的开发工具,通常可以在包中找到,例如:
|
||||
|
||||
- Debian: `sudo apt install build-essential`
|
||||
- Fedora: `sudo dnf install cmake gcc-c++ perl-IPC-Cmd perl-FindBin perl-File-Compare perl-File-Copy`
|
||||
- Debian/Ubuntu: `sudo apt install build-essential`
|
||||
- Fedora: `sudo dnf install cmake gcc gcc-c++ make perl perl-IPC-Cmd perl-FindBin perl-File-Compare perl-File-Copy kernel-headers kernel-devel`
|
||||
- Arch: `sudo pacman -S base-devel`
|
||||
- openSUSE: `zypper in -t pattern devel-basis`
|
||||
- SteamOS (Arch): `sudo pacman -S base-devel linux-api-headers glibc libconfig` (You also need to do `sudo steamos-readonly disable` but make sure to enable it again after installing the packages)
|
||||
@@ -68,6 +68,8 @@ export PATH=$VCPKG_ROOT:$PATH
|
||||
|
||||
检出[最新发布版本](https://github.com/BeamMP/BeamMP-Launcher/releases/latest)所使用的标签。例如,若最新版本使用`v2.6.4`,则执行`git checkout v2.6.4`
|
||||
|
||||
如果你使用了我们提供的示例克隆命令,你可以使用以下命令进入项目的根目录: <br>`cd BeamMP-Launcher`
|
||||
|
||||
在项目的根目录中,
|
||||
|
||||
1.
|
||||
@@ -94,9 +96,18 @@ cmake --build bin --parallel
|
||||
通过不指定‘ -DCMAKE_BUILD_TYPE=Release ’,您正在编译一个调试版本,该版本的文件大小较大,但不包含launcher-can-only-connect-to- server-once错误
|
||||
```
|
||||
|
||||
将完成的应用程序从`/bin`文件夹移到它自己的文件夹中,并从那里运行它
|
||||
!!!注意 "Fedora 用户" 如果 vcpkg 在编译 OpenSSL 时因内核头文件(kernel headers)错误而失败,请确保已安装所有依赖项: `bash sudo dnf install kernel-headers kernel-devel gcc gcc-c++ make perl ` 然后清理 vcpkg 缓存:`bash rm -rf $VCPKG_ROOT/buildtrees/openssl `最后重新运行 cmake 配置命令。
|
||||
|
||||
本机linux BeamMP-Launcher将启动并使用本机linux beammp .drive
|
||||
将已编译完成的应用程序从`/bin`移出,放到它自己的文件夹中,然后从该文件夹运行它:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/beammp-launcher
|
||||
cp bin/BeamMP-Launcher ~/beammp-launcher/
|
||||
cd ~/beammp-launcher
|
||||
./BeamMP-Launcher
|
||||
```
|
||||
|
||||
原生的 Linux 版 BeamMP 启动器将会启动,并使用原生的 Linux 版 BeamNG.drive。
|
||||
|
||||
### **2c. 在Proton兼容层上游玩BeamNG.drive**
|
||||
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
# 开始
|
||||
|
||||
为了开始开发BeamMP,你至少需要:
|
||||
|
||||
- 安装在本地的BeamNG.drive
|
||||
- 安装在本地的BeamMP; 至少是启动器,另外还有服务器
|
||||
- 安装在本地的Git, 和一个 GitHub.com 账号
|
||||
- 一个代码编辑器, 例如VSCode或notepad++
|
||||
|
||||
---
|
||||
|
||||
# 模组,启动器和服务器之间的区别
|
||||
|
||||
BeamMP分为三个主要部分:
|
||||
|
||||
- 该模组与游戏中的其他载具模组或界面模组相同,均通过BeamNG引擎加载运行。其核心功能包括与启动器建立本地通信链路,以及渲染多人联机界面组件。技术架构方面,主体逻辑采用Lua脚本语言实现,界面层则基于JavaScript、HTML与CSS的复合式开发框架进行构建。相关代码仓库详见[https://github.com/BeamMP/BeamMP](https://github.com/BeamMP/BeamMP)。
|
||||
- 本启动器核心功能集包括:与模组维持持续通信、在需要时建立目标服务器连接,以及通过BeamMP后端系统执行用户登录认证流程。该程序基于C++语言开发,部署前已由BeamMP团队完成预编译处理,完整源代码参见[https://github.com/BeamMP/BeamMP-Launcher](https://github.com/BeamMP/BeamMP-Launcher)。
|
||||
- 服务端核心功能涵盖:与多个启动器实例建立通信链路、向BeamMP后端系统发送"心跳"信号同步IP/端口/版本/玩家数量等运行参数,并管理与调度服务端Lua插件运行。底层架构基于C++语言实现,已由BeamMP针对多操作系统平台及CPU指令集进行预编译生成,完整源码仓库位于[https://github.com/BeamMP/BeamMP-Server](https://github.com/BeamMP/BeamMP-Server)。
|
||||
|
||||
---
|
||||
|
||||
# 配置适用于模组开发的运行环境
|
||||
|
||||
## 为BeamNG使用未打包文件
|
||||
|
||||
为实现BeamNG模组开发的高效迭代,建议开发者采用`非打包目录`的实时更新工作流模式,避免每次代码变更后执行重复的压缩打包操作。
|
||||
|
||||
请通过文件管理器访问BeamNG用户目录:`%appdata%/Local/BeamNG.drive/0.xx/mods`,其中`xx`对应当前最新的BeamNG版本号。在`mods`目录内创建名为`unpacked`的专用开发文件夹。
|
||||
|
||||
有关用户目录的技术规范细则,请参阅BeamNG官方文档中心:[https://documentation.beamng.com/support/userfolder/](https://documentation.beamng.com/support/userfolder/)
|
||||
|
||||
## 在BeamMP启动器中启用开发模式
|
||||
|
||||
为防止自动更新机制覆盖本地Git仓库副本,请通过添加运行参数`--no-download`强制停用该功能;若需同时禁止启动器自动运行BeamNG主程序,并获取实时调试日志,推荐配置方案为附加开发调试参数`--dev`。
|
||||
|
||||
命令行参数 | 说明
|
||||
:-- | :--
|
||||
`--help` or `-h` | 该指令将输出下列标准化参数清单
|
||||
`--port <port>` or `-p` | 请将服务端默认监听端口修改为`<port>`,该项变更需同时在游戏客户端内进行同步配置。
|
||||
`--verbose` or `-v` | 详细日志模式,输出调试级系统信息
|
||||
`--no-download` | 强制禁用BeamMP Lua模组自动部署流程
|
||||
`--no-update` | 激活维护模式锁定更新通道(需采用手动升级方式)
|
||||
`--no-launch` | 强制解耦启动器与游戏进程链路(需进行独立启动流程)
|
||||
`--dev` | 开发者模式,与 --verbose --no-download --no-launch --no-update相同
|
||||
`--game <args...>` or `-- <args...>` | 实现运行参数向游戏进程的透传桥接
|
||||
|
||||
## 执行仓库克隆操作至目标解压目录
|
||||
|
||||
虽然您可手动从GitHub仓库(a0)https://github.com/BeamMP/BeamMP复制BeamMP模组文件,但强烈建议使用Git版本控制系统进行规范操作。请首先执行分叉(fork)操作。
|
||||
|
||||
最有效的方式是直接将存储库克隆到`unpacked`文件夹中。
|
||||
|
||||
在`git`环境配置下,请遵循以下部署流程:<br>从`解压根目录`启动PowerShell/CMD终端<br>执行克隆操作:`git clone https://github.com/yourName/BeamMP`
|
||||
|
||||
现在试试开发模式吧。启动BeamMP启动器,手动启动BeamNG,一旦进入游戏,确保BeamMP是唯一有效的模组。你应该能够像往常一样使用BeamMP。
|
||||
|
||||
使用代码编辑器,您现在可以直接在`unpacked`文件夹中添加或更改代码。然后你可以通过按`Ctrl+L`重新加载Lua来尝试更改(如果你做了UI更改,则按`F5`)。
|
||||
|
||||
一旦您对更改满意,就可以通过git提交它们。有关如何使用Git的教程和文档,请参阅Git- scm网站。一旦您的更改被提交并推送(到您的分支),您就可以发出拉取请求。
|
||||
|
||||
如果您遇到任何问题,请在[Discord](https://discord.gg/beammp)的#scripting频道中提问。
|
||||
|
||||
---
|
||||
|
||||
# 设置本地服务器
|
||||
|
||||
在使用BeamMP时,使用本地服务器可能是有益的。您可以遵循常规的[服务器安装](../../server/create-a-server.md),同时省略纯本地连接的前两个步骤。
|
||||
|
||||
在`serverConfig`中将服务器设置为私有。使用任意字符串作为`AuthKey`。
|
||||
|
||||
---
|
||||
|
||||
# 贡献指南
|
||||
|
||||
有关代码格式、提交信息格式、通用开发最佳实践等详细信息,请参阅各仓库中的`CONTRIBUTING.md`文件。该文件包含更详细的贡献指南,各仓库中的`README.md`文件通常也会提供具体的构建步骤说明(针对需要编译的项目)。
|
||||
@@ -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格式模组包,当客户端接收后会自动以模组形式加载。该目录若存在其他类型文件会导致服务器启动时报错(但不会阻断服务运行),不过这些无关文件仅会被服务端忽略。核心配置脚本modScript.lua由BeamNG游戏引擎解析,用于指引游戏加载指定插件模块。
|
||||
|
||||
!!!范例 "" [Download the 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")
|
||||
```
|
||||
@@ -0,0 +1,45 @@
|
||||
!!! 警告 "这个网站正在建设中!"
|
||||
|
||||
```
|
||||
这个网站正在积极建设中。
|
||||
|
||||
觉得你能帮上忙吗?请用铅笔在右侧点击页面!
|
||||
|
||||
这也可以在任何页面上完成。
|
||||
```
|
||||
|
||||
# 模组/游戏内脚本参考
|
||||
|
||||
BeamMP允许您创建自己的客户端插件。我们提供了一些功能,你可以用它来与其他多人模式和其他玩家通过服务器进行通信。
|
||||
|
||||
# 函数列表
|
||||
|
||||
脚本可用函数列表:
|
||||
|
||||
函数 | 说明
|
||||
--- | ---
|
||||
`TriggerServerEvent("eventName", "data")` | 在服务器lua环境中触发事件,两个参数都是字符串。
|
||||
`TriggerClientEvent("eventName", "data")` | 在本地lua环境中触发事件,两个参数都是字符串。有利于插件之间的通信。
|
||||
`AddEventHandler("eventName", Function)` | 当`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
|
||||
```
|
||||
@@ -0,0 +1,220 @@
|
||||
# 端口转发
|
||||
|
||||
!!! 风险 ":material-scale-balance: 免责声明:"
|
||||
|
||||
```
|
||||
“端口转发存在风险”。
|
||||
|
||||
通过端口转发,你理解将家庭网络端口向公众开放的风险,因此无权追究 BeamMP 对你或你家庭可能发生的 任何 损害负责。
|
||||
|
||||
我们对任何外部链接服务或网站上的内容不承担任何责任。
|
||||
|
||||
<u>如果你不理解本指南,请考虑使用我们的合作伙伴提供的服务。</u>
|
||||
```
|
||||
|
||||
!!! 警告
|
||||
|
||||
```
|
||||
请确保你的路由器不是仅支持 4G/5G 的设备。如果是混合设备,请在本指南第 3 节中选择有线连接的适配器!
|
||||
```
|
||||
|
||||
## 怎么设置端口转发
|
||||
|
||||
创建端口转发规则涉及一些详细的网络术语。在操作过程中,请准备记录一些笔记。
|
||||
|
||||
本指南共有 4 个主要步骤。
|
||||
|
||||
## 快速指南(更详细的指南见下文)
|
||||
|
||||
<div class="grid cards" markdown>
|
||||
</div>
|
||||
<ul data-md-type="list" data-md-list-type="unordered" data-md-list-tight="false">
|
||||
<li data-md-type="list_item" data-md-list-type="unordered">
|
||||
<p data-md-type="paragraph">:material-dns:{ .lg .middle } <strong data-md-type="double_emphasis">为你的电脑或设备分配一个静态 IP 地址</strong></p>
|
||||
<hr data-md-type="hrule">
|
||||
<p data-md-type="paragraph">这是为了防止你的设备 IP 发生变化,从而导致端口转发规则失效。</p>
|
||||
<p data-md-type="paragraph"><a href="https://portforward.com/router.htm#1" data-md-type="link">:octicons-arrow-right-24: 查看你的路由器信息</a></p>
|
||||
</li>
|
||||
<li data-md-type="list_item" data-md-list-type="unordered">
|
||||
<p data-md-type="paragraph">:material-router-wireless:{ .lg .middle } <strong data-md-type="double_emphasis">登录你的路由器</strong></p>
|
||||
<hr data-md-type="hrule">
|
||||
<p data-md-type="paragraph">通常可以通过查找‘默认网关’IP 来完成,此 IP 可在命令提示符执行 <code data-md-type="codespan">ipconfig</code> 时找到,然后将其输入浏览器地址栏。</p>
|
||||
</li>
|
||||
<li data-md-type="list_item" data-md-list-type="unordered">
|
||||
<p data-md-type="paragraph">:material-lan-connect:{ .lg .middle } <strong data-md-type="double_emphasis">将端口转发到你的电脑</strong></p>
|
||||
<hr data-md-type="hrule">
|
||||
<p data-md-type="paragraph">在路由器的网页界面中找到端口转发部分。大多数路由器会将端口转发部分列在网络(Network)、高级(Advanced)或局域网(LAN)下。</p>
|
||||
</li>
|
||||
<li data-md-type="list_item" data-md-list-type="unordered">
|
||||
<p data-md-type="paragraph">:material-test-tube:{ .lg .middle } <strong data-md-type="double_emphasis">测试端口是否已正确转发</strong></p>
|
||||
<hr data-md-type="hrule">
|
||||
<p data-md-type="paragraph">使用像 CheckBeamMP 这样的工具测试规则是否生效。</p>
|
||||
<div data-md-type="block_html">
|
||||
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
|
||||
<label for="ip">IP address:</label>
|
||||
<input type="text" id="ip" name="ip"><br>
|
||||
<label for="port">端口:</label>
|
||||
<input type="text" id="port" name="port"><br>
|
||||
<input type="submit" value="CheckBeamMP">
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div data-md-type="block_html"></div>
|
||||
|
||||
## 详细指南
|
||||
|
||||
### 1. 分配静态 IP 地址
|
||||
|
||||
### 方法 1:通过 DHCP 保留设置静态 IP 地址
|
||||
|
||||
在本地网络中设置静态 IP 地址的另一种方法是使用路由器的 DHCP 保留功能。并非所有路由器都具备此功能,因此这可能不适用于你。请使用你的路由器型号在网上搜索使用手册。
|
||||
|
||||
如果你已经完成此操作,请直接跳到 [第 2 步](port-forwarding.md#2-log-in-to-your-router)。
|
||||
|
||||
### 方法 2:在 Windows 中分配静态 IP 地址
|
||||
|
||||
#### 1.1. 查找您当前的IP地址、网关和DNS服务器:
|
||||
|
||||
在设置静态IP地址之前,我们需要先了解您当前的网络设置。您可能需要记下这些信息,因此请提前打开记事本窗口备用。这一步我们将使用命令提示符进行操作。
|
||||
|
||||
打开命令提示符。主要有以下三种方式:
|
||||
|
||||
- 按下Windows键,然后输入“cmd”,当看到“命令提示符”高亮显示时按Enter键。
|
||||
|
||||
<figure class="image image_resized" style="width:62%;" markdown="">  </figure>
|
||||
|
||||
一旦您进入了命令提示符,运行以下命令:
|
||||
|
||||
```
|
||||
ipconfig /all
|
||||
```
|
||||
|
||||
你会看到大量数据。如果你有虚拟或多个网络适配器,那么你会看到更多数据。如果安装了 Hyper-V 或 Docker,通常会出现许多虚拟适配器。
|
||||
|
||||
<figure class="image image_resized" style="width:62%;" markdown="">  </figure>
|
||||
|
||||
建议使用有线网络连接来运行此服务器,但无线连接也可正常工作。您需要在此列表中寻找具有活跃互联网连接的适配器。滚动列表并找到已分配默认网关的适配器,许多虚拟适配器通常没有默认网关。
|
||||
|
||||
以下是本地IPv4地址示例,至少有一个适配器应具备这些地址。您需要记下适配器的信息。
|
||||
|
||||
- 192.168.x.x
|
||||
- 10.x.x.x.
|
||||
- 172.16.x.x - 172.31.x.x
|
||||
|
||||
子网掩码(常见取值为255.255.255.0) <br>默认路由地址(典型配置为192.168.0.1或192.168.1.1)
|
||||
|
||||
!!! info "请注意" BeamMP 目前不支持使用 IPv6 协议托管服务器。
|
||||
|
||||
#### 1.2. 修改适配器设置
|
||||
|
||||
现在我们需要更改网络适配器的设置,以便您的计算机能够维持当前分配的IP配置。访问网络设置的最快捷途径是:
|
||||
|
||||
- 单击Windows键
|
||||
- 输入“网络连接”,直到您看到“查看网络连接”。
|
||||
- 按下回车键
|
||||
|
||||
<figure class="image image_resized" style="width:62%;" markdown="">  </figure>
|
||||
|
||||
你会看到电脑上的网络连接列表。如果你安装了 Hyper-V 或 Docker,可能会有很多适配器。请寻找任何不命名为 "Hyper-V" 的适配器。
|
||||
|
||||
<figure class="image image_resized" style="width:62%;" markdown="">  </figure>
|
||||
|
||||
右键点击您的适配器并选择属性。如果`互联网协议版本4`未被勾选,则表明此适配器选择有误,请更换其他适配器。
|
||||
|
||||
<figure class="image image_resized" style="width:62%;" markdown="">  </figure>
|
||||
|
||||
双击`互联网协议版本4`。将`自动获取IP地址`更改为`使用以下IP地址`。
|
||||
|
||||
使用命令提示符(ipconfig /all)中的信息填写IP地址、子网掩码、默认网关和首选DNS服务器。
|
||||
|
||||
或者,您也可以不使用当前DNS服务器,而选择CloudFlare或Google提供的DNS服务器:
|
||||
|
||||
- CloudFlare DNS: 1.1.1.1, 1.0.0.1
|
||||
- Google DNS: 8.8.8.8, 8.8.4.4
|
||||
|
||||
<figure class="image image_resized" style="width:62%;" markdown="">  </figure>
|
||||
|
||||
点击确定,然后再次点击确定,您的适配器现在已从DHCP更改为静态IP配置。请上网浏览以确认是否仍然保持互联网连接。如果无法连接,请将设置改回自动获取IP地址,并尝试下一种方法。
|
||||
|
||||
### 2. 登录您的路由器
|
||||
|
||||
既然您的设备已设置静态IP地址,现在可以开始为BeamMP配置端口转发。
|
||||
|
||||
首先,我们需要登录到您的路由器。之前您记录下来的设置中包括默认网关,该地址即为您路由器的IP地址。
|
||||
|
||||
大多数路由器通过本地网页界面进行管理。要访问路由器的管理菜单和设置:
|
||||
|
||||
- 打开一个浏览器,Firefox, Chrome 或 Edge应该都可以正常工作
|
||||
- 在地址栏中,输入您的默认网关IP地址,例如 192.168.0.1 或 192.168.1.1,然后按回车键。
|
||||
|
||||
现在您应该能看到路由器的登录界面。并非所有路由器都需要登录,但大多数都需要。您需要知道路由器的用户名和密码。如果是首次登录,用户名和密码很可能仍为出厂默认值,或者在某些情况下会印在路由器的贴纸标签上。
|
||||
|
||||
以下是部分最常见的出厂默认用户名与密码列表:
|
||||
|
||||
用户名 | 密码
|
||||
--- | ---
|
||||
admin | admin
|
||||
admin | password
|
||||
{blank} | admin
|
||||
{blank} | password
|
||||
|
||||
尝试使用admin、password等不同组合,或直接留空输入框。*若提示留空,请尝试不填写任何内容。*
|
||||
|
||||
### 3. 创建转发规则
|
||||
|
||||
#### 3.1. 查找端口转发设置的地方
|
||||
|
||||
在路由器网页界面中找到端口转发设置区域。请通过点击页面顶部或左侧的选项卡或链接来浏览路由器菜单。大多数路由器会将端口转发功能列在"网络"、"高级"或"局域网"等分类下。留意查找以下关键词来定位该功能:
|
||||
|
||||
- 端口转发
|
||||
- 转发
|
||||
- 端口范围转发
|
||||
- 虚拟服务器
|
||||
- 应用程序 & 游戏
|
||||
- 高级配置/设置
|
||||
- NAT
|
||||
|
||||
#### 3.2. 填写详细信息
|
||||
|
||||
找到路由器的端口转发设置后,即可开始输入必要信息。路由器会提供输入区域用于填写需要转发的端口号以及对应的目标IP地址。若路由器同时显示内部端口和外部端口选项,请确保填写相同的端口号以保持一致。
|
||||
|
||||
BeamMP 需要同时开放 UDP 和 TCP 协议的 30814 端口(除非您已在 [ServerConfig.toml](create-a-server.md#4-configuration) 配置文件中修改过此端口)。
|
||||
|
||||
!!! info "注意" <br>虽然默认端口为 **30814**,您也可以选择1024至65535之间的其他端口号(若使用非默认端口需自行记录)。需要同时转发 **TCP** 和 **UDP** 协议。 <br>建议保持使用默认端口,因此端口被本机其他服务占用的可能性极低。若需在同一台机器上部署多个服务器,则每个服务器需使用不同端口(例如:服务器1使用30814,服务器2使用30815)。
|
||||
|
||||
在某些路由器中,您可能需要创建两条规则(一条用于UDP,另一条用于TCP),而有些路由器则更便捷,允许您通过单条规则同时设置两种协议!
|
||||
|
||||
绝大多数路由器都设有“保存”按钮,而部分机型在更改生效前还需重启或复位系统。
|
||||
|
||||
### 4. 测试一下!
|
||||
|
||||
连接测试可通过以下几种不同方式进行。
|
||||
|
||||
我们推荐的方式是使用我们的工具 **CheckBeamMP**,因为它能够检测BeamMP特有的问题和协议。
|
||||
|
||||
<form action="https://check.beammp.com/api/v2/beammp" method="get" target="_blank">
|
||||
<label for="ip">IP address:</label>
|
||||
<input type="text" id="ip" name="ip"><br>
|
||||
<label for="port">Port:</label>
|
||||
<input type="text" id="port" name="port"><br>
|
||||
<input type="submit" value="CheckBeamMP">
|
||||
</form>
|
||||
|
||||
可通过获取您的公网IPv4地址来实现,该方法同样有几种不同的操作方式。主要方法是访问名为 [whatsmyip.org](https://whatsmyip.org/) 的网站,这是一个能直接显示您公网IP地址的简易网站。您需要找到格式为 xxx.xxx.xxx.xxx 的IP地址。
|
||||
|
||||
访问以下链接,并将“IP”替换为您的实际IPv4地址,“Port”替换为您的服务器端口。请确保不留空格。https://check.beammp.com/api/v2/beammp/ip/port
|
||||
|
||||
!!! 成功 "status: ok"
|
||||
|
||||
```
|
||||
若获得上述输出结果,即可加入您的服务器! 有两种连接方式:既可通过在端口转发工具中配置的详细信息直接连接,也可在服务器设置为"公开"状态下通过服务器列表加入。 由于您采用的是本地托管服务器,若服务器与游戏运行在同一台电脑上,请使用 127.0.0.1(本地主机);若服务器运行在局域网内的其他机器上,则使用该服务器的局域网IPv4地址。
|
||||
```
|
||||
|
||||
!!! 失败 "status: error"
|
||||
|
||||
```
|
||||
|
||||
|
||||
如果连接完全失败,您的ISP可能正在使用CGNAT(运营商级网络地址转换)。有关更多详细信息,请查看[如何检查CGNAT?](../FAQ/How-to-check-for-CGNAT.md),或者在我们的[Discord服务器](https://discord.gg/beammp)的`#support`频道中提交服务器支持工单,我们的工作人员会处理您的工单!如果您只看到TCP工作而UDP失败,请再次检查防火墙和端口转发规则。
|
||||
```
|
||||
@@ -0,0 +1,245 @@
|
||||
# 服务器维护
|
||||
|
||||
有关如何配置和维护 BeamMP 服务器的指南、提示和技巧。
|
||||
|
||||
## 怎么安装
|
||||
|
||||
有关安装说明,请查看 [服务器安装](create-a-server.md).
|
||||
|
||||
## ServerConfig文件
|
||||
|
||||
服务器配置,即一个名为`ServerConfig.toml`的文件, 使用了 [TOML 格式](https://toml.io/en/).
|
||||
|
||||
*注意*:*旧的*服务器配置文件名为`Server.cfg`,但该文件已不再使用,若其仍存在服务器将发出警告。另请注意,两种配置格式**不**相互兼容。
|
||||
|
||||
该配置文件默认包含一个名为`[General]`的节,该节包含以下值:
|
||||
|
||||
Key | 值类型 | 描述
|
||||
--- | --- | ---
|
||||
Port | 1024-65535 | 服务器可访问的网络端口。(必须是唯一的,且不能被同一主机上的其他服务占用)
|
||||
AuthKey | 认证密钥格式为`xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`,其中所有x代表字母数字字符(数字和字母)。 | 用于通过后端识别公共集合服务器。
|
||||
AllowGuests | true/false | 决定游客是否可以加入服务器。
|
||||
LogChat | true/false | 当启用(设置为“true”)时,聊天消息会被记录在 server.log 文件中。
|
||||
Debug | true /false | 当启用(true)时,将在日志中显示更多消息并提供更多信息。如果遇到问题,请启用此选项。启用此选项将显著增加日志文件的大小。
|
||||
Private | true/false | 当启用(true)时,您的服务器将不会显示在服务器列表中。任何拥有正确IP地址和端口的人仍然可以连接。
|
||||
InformationPacket | true/false | 当启用(true)时,服务器将允许未经身份验证的客户端直接通过服务器获取与服务器列表中相同的信息。
|
||||
Name | Any "text" | 在服务器列表中显示为您的服务器名称/标题。您可以使用特殊字符来为其添加颜色和样式。
|
||||
Tags | 请参见下方允许的标签列表。 | 标签用于搜索 e.g. Police, Racing etc...
|
||||
MaxCars | 数字永远 ≥ 1 | 每位玩家的最大车辆数量。玩家尝试生成的额外车辆将被立即删除。
|
||||
MaxPlayers | 数字永远 ≥ 1 | 每个服务器的最大玩家数量。这不影响车辆数量。
|
||||
Map | 需要一个有效的地图位置,例如`/levels/gridmap_v2/info.json` | 你的服务器将要托管的地图。必须默认安装(下方可找到列表)或作为服务器模组安装。
|
||||
Description | 永远只能填写 "文本" | 在服务器列表中显示为服务器的描述(如果服务器是公开的)。你可以使用特殊字符来格式化这个描述,包括颜色和样式。
|
||||
ResourceFolder | 有效的文件夹位置,例如 "D:\Server\BeamMP\Resources" | 便于将服务器和资源文件夹分开存储。
|
||||
ImScaredOfUpdates | true/false | 这设置服务器在新版本发布时是否自动更新。
|
||||
UpdateReminderTime | 任何带有s、min、h、d后缀的数字(例如30s)。 | 设置在终端中打印的更新提醒消息的间隔。
|
||||
|
||||
其他部分可以并且应该由服务器插件使用(Lua API 即将推出),例如:`[MyMod]`。
|
||||
|
||||
AuthKey **必须**由你自己来设置。<br>默认情况下它是空的,需要填入你之前安装步骤中获得的 AuthKey。<br>请勿将此密钥分享给任何人,在截图时要完全模糊处理此密钥。
|
||||
|
||||
### 所有原版地图名称
|
||||
|
||||
以下是所有原版地图:
|
||||
|
||||
- /levels/gridmap_v2/info.json
|
||||
- /levels/johnson_valley/info.json
|
||||
- /levels/automation_test_track/info.json
|
||||
- /levels/east_coast_usa/info.json
|
||||
- /levels/hirochi_raceway/info.json
|
||||
- /levels/italy/info.json
|
||||
- /levels/jungle_rock_island/info.json
|
||||
- /levels/industrial/info.json
|
||||
- /levels/small_island/info.json
|
||||
- /levels/smallgrid/info.json
|
||||
- /levels/utah/info.json
|
||||
- /levels/west_coast_usa/info.json
|
||||
- /levels/driver_training/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` | 白色
|
||||
|
||||
### 自定义您的服务器标签
|
||||
|
||||
标签可用于让人们搜索特定类型的服务器。 <br>你的 serverConfig.toml 将会自动生成带有 freeroam 标签的配置: <br>`Tags = "Freeroam"`
|
||||
|
||||
你可以添加多个标签,用逗号分隔 <br>`Tags = "Events,Offroad,lang:english"`, <br>标签不区分大小写。
|
||||
|
||||
你可以从以下列表中选择:
|
||||
|
||||
- 年龄/内容:
|
||||
|
||||
- `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 文件
|
||||
|
||||
此文件将在服务器运行时生成。它是你在运行服务器时控制台中看到的日志的镜像。 <br>每次需要向我们的支持人员寻求帮助时,都应附上此文件,而且它永远不会显示你的 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` 消息本身,通常是你需要注意并理解的内容。 <br>在某些情况下它可能显得比较隐晦,但一般规则是:只要服务器表面上没有任何明显问题,也没有出现 ERROR,那就一切正常。
|
||||
|
||||
## 更新服务器
|
||||
|
||||
### 为什么要更新服务器
|
||||
|
||||
每次发布新更新时,建议你更新服务器。通常这包括错误修复、稳定性提升和安全性改进,同时还会引入新的通用功能等。
|
||||
|
||||
要接收更新发布时的新闻,你可以:<br>关注 Discord 服务器的“update”频道 <br>在论坛上留意相关信息 <br>查看或询问 [GitHub releases 页面](https://github.com/BeamMP/BeamMP-Server/releases)
|
||||
|
||||
### 怎么更新服务器
|
||||
|
||||
#### 如果你正在使用 BeamMP 合作的托管服务提供商
|
||||
|
||||
如果你正在使用 BeamMP 合作的托管服务提供商,下面的说明很可能不适用。 <br>我们建议你等待托管服务提供商提供更多详细信息,或者直接联系他们寻求帮助。
|
||||
|
||||
#### 管理自己的服务器
|
||||
|
||||
服务器通过将旧的可执行文件替换为新的来更新。 <br>如果你不确定如何操作,下面提供了 Windows 和 Linux 的分步说明。
|
||||
|
||||
如果你是从源代码构建的,只需重新构建即可。 <br>在重新构建之前,请确保运行以下命令: <br>`git submodule update --init --recursive`
|
||||
|
||||
#### 在Windows中
|
||||
|
||||
1. 确保你已安装 [Visual C++ Redistributables](https://aka.ms/vs/17/release/vc_redist.x64.exe),以便运行服务器。
|
||||
2. 前往 [BeamMP.com](https://beammp.com/) 并点击“Download Server”按钮。
|
||||
3. 下载完成后,你应该会看到一个名为 `BeamMP-Server.exe` 的文件。我们将这个文件称为“新可执行文件”。
|
||||
4. 前往你的当前 `BeamMP-Server.exe` 可执行文件所在的文件夹(通常也是 `ServerConfig.toml` 所在的同一文件夹)。我们将这个文件称为“旧可执行文件”。
|
||||
5. 将旧的可执行文件替换为新的可执行文件(例如,通过复制或移动新可执行文件到该文件夹中)。
|
||||
|
||||
#### 在Linux中
|
||||
|
||||
1. 前往 [BeamMP.com](https://beammp.com/) 并点击“Download Server”按钮,你将被重定向到服务器的 GitHub Releases 页面。
|
||||
2. 下载适用于你发行版的正确版本。为方便起见,从现在起我们将它称为 `BeamMP-Server-xxx`,其中 `xxx` 表示你所使用发行版的对应版本。
|
||||
3. 下载完成后,你应该会看到一个名为 `BeamMP-Server-xxx` 的文件(具体名称取决于你下载的版本)。 <br>我们将这个文件称为“新可执行文件”。
|
||||
4. 前往你的当前 `BeamMP-Server-xxx` 可执行文件所在的文件夹(通常也是 `ServerConfig.toml` 所在的同一文件夹)。 <br>我们将这个文件称为“旧可执行文件”。
|
||||
5. 将旧的可执行文件替换为新的可执行文件(例如,通过复制或移动新可执行文件到该文件夹中)。
|
||||
6. 在你刚刚替换可执行文件的那个文件夹中打开终端,然后运行以下命令: <br>`sudo chmod +x BeamMP-Server-xxx` <br>这将确保服务器可以被运行。
|
||||
|
||||
### 自动更新
|
||||
|
||||
服务器(目前)不支持自动更新或更新通知。
|
||||
|
||||
不过,你可以通过向 GitHub API 查询最新 release 来检查服务器版本与标签的对比。 <br>你可以通过 GET 请求从以下地址获取: <br>`https://api.github.com/repos/BeamMP/BeamMP-Server/git/refs/tags`
|
||||