{"config":{"lang":["en","es","de","fr","it","ru"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":"
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 on any page, too.
"},{"location":"#welcome-to-beammp-docs","title":"Welcome to BeamMP Docs!","text":"Welcome to the new and improved documentation hub for BeamMP! Whether you're a player, server owner, or developer, we have the resources you need to enhance your BeamNG.drive multiplayer experience.
"},{"location":"#for-players","title":"For Players","text":"New to BeamMP? Check out our Getting Started page to help you hit the road running and make the most out of your multiplayer adventures. For general questions and issues please check out the Players FAQ.
"},{"location":"#for-server-owners","title":"For Server Owners","text":"Thinking about creating your own BeamMP server? Our comprehensive guide here will walk you through the process, ensuring you have all the tools and knowledge to set up your server efficiently.
"},{"location":"#for-developers","title":"For Developers","text":"Discover the ins and outs of creating resources for the BeamMP Server in our Resource Development Guide.
Exciting updates are on the horizon, including a brand-new homepage designed to enhance your browsing experience. Stay tuned for more!
"},{"location":"#community-rules","title":"Community Rules","text":"Read through the BeamMP Community rules and how to appeal bans.
"},{"location":"contributing/","title":"Contributing to the BeamMP Docs","text":"BeamMP is using Material for MkDocs as its theme. This is a theme for MkDocs. Full documentation can be found at their respective sites.
"},{"location":"contributing/#getting-started","title":"Getting Started","text":"To help contribute to these docs you can take one of two approaches as set out below:
"},{"location":"contributing/#1-edit-the-raw-markdown-files","title":"1. Edit the raw markdown files","text":"Editing the raw markdown files is the fastest approach and best for quick edits such as spelling, grammar or new snippets of content. This approach does require a prior knowledge of markdown however as you will need to understand what your contribution will produce.
If this is the approach you wish to take then please follow these steps:
Once you have created your pull request one of the BeamMP Mod Team will review your Pull Request and either approve it or request some changes. If changes were requested and you have completed them we will re-review your Pull Request. Then your changes will be merged into the repository and automatically deployed as part of our continuous integration.
"},{"location":"contributing/#2-make-edits-with-live-preview","title":"2. Make edits with live preview","text":"Editing our docs this way will still take a similar approach as in option 1 however you will be able to preview your changes this way.
mkdocs serve
to start the live-reloading docs server from where you cloned the fork to.mkdocs.yml # The configuration file.\ndocs/\n index.md # The documentation homepage.\n ... # Other markdown pages, images and other files.\n
"},{"location":"FAQ/Change-launcher-port/","title":"Issue","text":"The Launcher is not connecting to the game. This quick guide explains how to manually change the launcher port.
"},{"location":"FAQ/Change-launcher-port/#changing-the-port-manually","title":"Changing the port manually","text":"Show advanced options
Launcher port
change the port number to something else, for example 4567Open file location
in the context menulauncher.cfg
file in a text editor\"Port\": 4444,
number to the same you used earlier in the ingame options, in this example 4567If theres still no connection, try again with another port. Any number between ~2000 and 65535 is a valid port
"},{"location":"FAQ/Change-launcher-port/#still-facing-issue","title":"Still facing issue?","text":"Create a support ticket on our Discord Server.
Tags: Launcher, Connection Failed, Port Number
"},{"location":"FAQ/Defender-exclusions/","title":"How to create exclusions in the Windows Defender Firewall and Antivirus?","text":"Info
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).
DISCLAIMER:
Firewall / Defender exclsuions are a risk.
By creating exclsuions, you understand the risks of allowing programs on your PC and opening up ports on your home network to the public and therefore void the right to hold BeamMP accountable for any and all damages that may happen to you or your household.
We take no responsibility for any content on any externally linked services or websites.
"},{"location":"FAQ/Defender-exclusions/#1-firewall-exclusion-for-the-beammp-launcher","title":"1. Firewall exclusion for the BeamMP-Launcher.","text":"Windows Defender Firewall with advanced setting
.Inbound
to open the inbound exclusions tab.Create new rule
in the top right to create a new exclusion.Program
to create a program specific exclusion.BeamMP-Launcher.exe
. By default, this would be %appdata%\\BeamMP-Launcher\\BeamMP-Launcher.exe
without quotes.Windows Security
app.virus and threat protection
.Manage settings
beneath \"Virus & threat protection settings\".Exclusions
tab.process
.BeamMP-Launcher.exe
into the field and save it.Open a Thread on the Forum or on our Discord server in the #support
channel.
How to check for CGNAT?
"},{"location":"FAQ/How-to-check-for-CGNAT/#issue","title":"Issue","text":"All Firewall exclusions and Port forwarding rules are set up correctly, yet nobody can join your home-hosted Server?
If you have connection problems and you are using a Hosting-Service, contact them for assistance. If you want to use a VPS or cannot host a server at home, take a look at our list of Partnered hosting services (Server setup documentation).
"},{"location":"FAQ/How-to-check-for-CGNAT/#what-even-is-cgnat","title":"What even is CGNAT?","text":"For a detailed explanation, on what CGNAT is and why it's an issue when trying to host a server at home, take a look at this page.
"},{"location":"FAQ/How-to-check-for-CGNAT/#how-to-check-for-cgnat","title":"How to check for CGNAT?","text":""},{"location":"FAQ/How-to-check-for-CGNAT/#method-1","title":"Method 1:","text":"Open a command prompt, run tracert -4 beammp.com
. This will output a series of network hops. Wait for the operation to finish (may take up to 30 hops). Check the first few IP addresses after the IP of your Router/Modem/Gateway. If multiple IP addresses within the range of 100.64.x.x
-100.127.x.x
or 10.xx.xx.xx
appear after the first hop, you are most likely behind a CGNAT.
Note
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
Find out the WAN IP on your router by looking it up on its interface. Compare it to the IP posted on e.g. https://whatsmyip.org . If they are NOT the same, you are behind a CGNAT.
"},{"location":"FAQ/How-to-check-for-CGNAT/#method-3solution","title":"Method 3/Solution:","text":"Call your Internet Service Provider for assistance. Depending on your ISP, they might not offer dedicated dynamic IP adresses. Keep in mind, that a static IP is not necessary.
Warning
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!
Example of a non-CGNAT Network:
Tags: Server, 10060 10061, CGNAT, Connection Failed, Port Forward, Firewall
"},{"location":"FAQ/How-to-deactivate-mods/","title":"How to deactivate my mods?","text":""},{"location":"FAQ/How-to-deactivate-mods/#why-do-i-need-to-deactivate-my-mods","title":"Why do I need to deactivate my mods?","text":"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.
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.
"},{"location":"FAQ/How-to-deactivate-mods/#how-do-i-deactivateremove-my-mods","title":"How do I deactivate/remove my mods?","text":"There are 3 options to resolve possible issues when using BeamMP.
"},{"location":"FAQ/How-to-deactivate-mods/#1-deactivate-mods","title":"1. Deactivate mods","text":"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
"},{"location":"FAQ/How-to-deactivate-mods/#2-creating-a-new-userfolder","title":"2. Creating a new Userfolder","text":"Open the BeamNG.Drive userfolder and rename the folder of the latest version (e.g. 0.35) to for example 0.xx_OLD (0.35_OLD). Close BeamNG.drive before renaming it.
"},{"location":"FAQ/How-to-deactivate-mods/#3-removing-mods-from-the-content-folders","title":"3. Removing mods from the content folders.","text":"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.
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.
"},{"location":"FAQ/How-to-deactivate-mods/#4-cleaning-up-the-beammp-launcher-cache","title":"4. Cleaning up the BeamMP-Launcher cache","text":"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.
My settings and configs are gone! How can I restore them?
If you renamed the userfolder, you forced the game to create a new, clean userfolder. You may copy the 'settings' and 'vehicles' folder from the folder you renamed (e.g. 0.34_OLD) to the new folder it created. 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.
"},{"location":"FAQ/Update-launcher/","title":"Issue","text":"The Launcher can't update or shows a blank screen? This quick guide explains how to manually update the Launcher.
Note
You should have already used or installed BeamMP using the installer provided by our website before continuing.
"},{"location":"FAQ/Update-launcher/#downloading-and-installing-a-new-launcher","title":"Downloading and installing a new Launcher","text":"C:\\Users\\<username>\\AppData\\Roaming\\
. Replace with the username of your windows user. If you have installed BeamMP elsewhere, for example D:\\BeamMP-Launcher
, then place the Launcher in the respective BeamMP-Launcher folder. Create a support ticket on our Discord Server. Tags: Launcher, download,
"},{"location":"FAQ/game-faq/","title":"F.A.Q.","text":"List of commonly asked questions.
"},{"location":"FAQ/game-faq/#client","title":"Client","text":""},{"location":"FAQ/game-faq/#how-do-i-install-beammp","title":"How do I install BeamMP?","text":"There is a full guide on how to install BeamMP on Windows, you can find it here.
"},{"location":"FAQ/game-faq/#does-beammp-work-on-a-cracked-version-of-beamng","title":"Does BeamMP work on a cracked version of BeamNG?","text":"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.
"},{"location":"FAQ/game-faq/#does-beammp-work-on-linux","title":"Does BeamMP work on linux?","text":"The Client is not officially supported on Linux. However, you can follow our guide on how to use BeamMP on Linux
"},{"location":"FAQ/game-faq/#why-is-the-launcher-flagged-by-my-antivirus-or-by-windows-defender","title":"Why is the launcher flagged by my antivirus or by Windows Defender","text":"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.
"},{"location":"FAQ/game-faq/#i-have-poor-gameplay-performance-what-should-i-do","title":"I have poor gameplay performance, what should I do?","text":"We are working hard to make the Multiplayer experience as stable as possible. If you have already lowered your graphic settings and your performance is still poor, consider playing on a server with less players. The game is mainly CPU bound when you play with lots of people, so older CPUs (even quadcores) will suffer with more than a handful of people. (General Rule of Thumb: 1 car per CPU Thread)
"},{"location":"FAQ/game-faq/#miscellaneous","title":"Miscellaneous","text":""},{"location":"FAQ/game-faq/#where-can-i-find-the-code","title":"Where can I find the code?","text":"All the source code can be found on our GitHub. Before making any changes, keep in mind that the code is subject to our Terms of Use and licenses:
Code License Server LICENSE Launcher LICENSE Client Lua LICENSE"},{"location":"FAQ/game-faq/#i-have-found-a-bug-or-an-exploit-what-should-i-do","title":"I have found a bug or an exploit what should I do?","text":"If the issue is code related and you know how to use Github, open a new \"Issue\" in the appropriate repository on our GitHub. We use an issue-based workflow so even if you already have a fix for the bug, consider opening a new \"Issue\", then open a \"Pull Request\" with the solutions for the issue. More info on contributing can be found here.
If you don't have a GitHub account or you don't know how to use GitHub or have any other questions, you can get in touch with us in the following ways:
Linking your Discord and BeamMP account is a new feature to BeamMP. To do this you will need send !link
as a message to the BeamMP Accounts bot. The bot will respond with a link for you to sign into your BeamMP account. Simply sign in with your BeamMP account, once done you will receive a second message saying that it has successfully linked your accounts. \ud83c\udf89
Early access (including the purple nametag and other benefits) can be obtained by supporting us financially on Patreon by buying a tier, donating, or by boosting the Discord Server. Donating x amount US$ = x additional server key(s) including EA benefits. Boosting gives you +4 Server keys in addition to EA benefits.
"},{"location":"FAQ/player-faq/#i-subscribed-on-patreon-how-do-i-get-my-perks","title":"I subscribed on Patreon. How do I get my perks?","text":"Please ensure you do the following to automatically receive your perks:
Please be patient, it can take a few hours, sometimes up to 12, for the system to sync. If you have not received your perks after 12 hours and have completed the above steps please contact BeamMP support.
"},{"location":"FAQ/player-faq/#i-have-more-questions","title":"I have more questions!","text":"If your question or issue relates to the Game or playing please refer to the Game FAQs. If your question or issue relates to running a Server please refer to the Server FAQs. Otherwise please check out the forums where the community can ask questions and get answers.
"},{"location":"FAQ/server-faq/","title":"F.A.Q. and Known Issues","text":"List of commonly asked questions and known bugs.
"},{"location":"FAQ/server-faq/#server","title":"Server","text":""},{"location":"FAQ/server-faq/#how-can-i-setup-my-own-servers","title":"How can I setup my own servers","text":"All the information to set up your own server can be found here.
"},{"location":"FAQ/server-faq/#can-you-make-a-server-using-linux","title":"Can you make a server using linux?","text":"We provide binaries for many Linux distributions here. If there are no binaries for your Operating System/Distribution, you can build it yourself by downloading the source on our GitHub, a tutorial can be found here.
"},{"location":"FAQ/server-faq/#what-are-the-minimum-system-requirements-to-run-a-beammp-server","title":"What are the minimum system requirements to run a BeamMP server?","text":"Read the port forwarding guide that's available here. Below there's a brief summary of the most noteworthy steps. If other players, trying to connect to your server, receive an error code 10060, 10061 or 10038 in their BeamMP launcher, then you should check the following steps:
You can check if you have successfully portforwarded using CheckBeamMP whilst the server is running.
IP adress: Port:Notes:
If the server is running on the same machine as the game, you yourself have to use Direct Connect to join, with the IP 127.0.0.1 and your server's port. For you to be able to join your own, self-hosted server trough the server-list, your router needs to support NAT-loopback, but this is a function not many home routers support.
"},{"location":"FAQ/server-faq/#miscellaneous","title":"Miscellaneous","text":""},{"location":"FAQ/server-faq/#where-can-i-find-the-code","title":"Where can I find the code?","text":"All the source code can be found on our GitHub. Before doing anything keep in mind that the code is subject to our Terms of Use and licenses:
Code License Server LICENSE Launcher LICENSE Client Lua LICENSE"},{"location":"FAQ/server-faq/#i-have-found-a-bug-or-an-exploit-what-should-i-do","title":"I have found a bug or an exploit what should I do?","text":"If the issue is code related and you know how to use Github, create a new \"Issue\" in the appropriate repository on our GitHub. We use an issue-based workflow so even if you already have a fix for the bug, consider opening a new \"Issue\", then asking a \"Pull Request\" that solves your \"Issue\". More info on contributing can be found here.
If you don't have a GitHub account or you don't know how to use GitHub you can get in touch with us in the following ways:
If you are hosting a server with one of our partnered hosting services, the IP will be posted on the respective Server Management Interface. You can also find the IP for your Server(s) on the Keymaster Website.
"},{"location":"FAQ/where-to-find-my-IP/#for-home-hosted-servers","title":"For Home-Hosted Servers","text":"For Servers hosted at home, open whatsmyip.org in a Browser. This will output the public IPv4 address you are being contacted with from the Internet.
Note, that 127.0.0.1 is the localhost address and can only be used by yourself, if the Server is hosted on the same Computer. If you are still having connection troubles with your home hosted server, check the port forwardings as well as CheckBeamMP
IP adress: Port:"},{"location":"FAQ/where-to-find-my-IP/#how-to-check-for-cgnat","title":"How to check for CGNAT?","text":"Have a look at this page to determine wether you can host a server at home or not.
Tags: IP, Server, Connection Failed, 10060/10061
"},{"location":"beamng/","title":"Welcome to the BeamNG.drive documentation","text":"This documentation is unofficial and produced by the BeamMP Mod Team and the BeamNG Community.
"},{"location":"beamng/#understanding-the-file-structure","title":"Understanding The File Structure","text":"...
"},{"location":"beamng/#snippets","title":"Snippets","text":"Helpful code snippets can be found here: Snippets
"},{"location":"beamng/snippets/","title":"Helpful Code Snippets","text":"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.
"},{"location":"beamng/snippets/#beamngdrive-snippets","title":"BeamNG.drive Snippets","text":""},{"location":"beamng/snippets/#lua-code-snippets","title":"Lua Code Snippets","text":""},{"location":"beamng/snippets/#drawing-a-marker-vehicle-detection","title":"Drawing a marker & Vehicle detection","text":"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:
local function createBusMarker(markerName)\n local marker = createObject('TSStatic')\n marker:setField('shapeName', 0, \"art/shapes/interface/position_marker.dae\")\n marker:setPosition(vec3(0, 0, 0))\n marker.scale = vec3(1, 1, 1)\n marker:setField('rotation', 0, '1 0 0 0')\n marker.useInstanceRenderData = true\n marker:setField('instanceColor', 0, '1 1 1 0')\n marker:setField('collisionType', 0, \"Collision Mesh\")\n marker:setField('decalType', 0, \"Collision Mesh\")\n marker:setField('playAmbient', 0, \"1\")\n marker:setField('allowPlayerStep', 0, \"1\")\n marker:setField('canSave', 0, \"0\")\n marker:setField('canSaveDynamicFields', 0, \"1\")\n marker:setField('renderNormals', 0, \"0\")\n marker:setField('meshCulling', 0, \"0\")\n marker:setField('originSort', 0, \"0\")\n marker:setField('forceDetail', 0, \"-1\")\n marker.canSave = false\n marker:registerObject(markerName)\n scenetree.MissionGroup:addObject(marker)\n return marker\n end\n\n -- this can then be called in a loop to setup your markers. \n -- NOTE: You should only do this once as part of your setup and not called on each frame.\n if #markers == 0 then\n for k,v in pairs(nameMarkers) do\n local mk = scenetree.findObject(v)\n if mk == nil then\n log('I', logTag,'Creating marker '..tostring(v))\n mk = createBusMarker(v)\n ScenarioObjectsGroup:addObject(mk.obj)\n end\n table.insert(markers, mk)\n end\n end\n
Here is a custom marker example from BeamNG-FuelStations:
local stations = [\n { \"location\": [ -778.813, 485.973, 23.46 ], \"type\":\"gas\" },\n { \"location\": [ 617.164, -192.107, 53.2 ], \"type\":\"ev\" },\n ]\n\n local function IsEntityInsideArea(pos1, pos2, radius)\n return pos1:distance(pos2) < radius\n end\n\n local onUpdate = function (dt)\n for k, spot in pairs(stations) do -- loop through all spots on the current map\n local bottomPos = vec3(spot.location[1], spot.location[2], spot.location[3])\n local topPos = bottomPos + vec3(0,0,2) -- offset vec to get top position (2m tall)\n\n local spotInRange = false -- is this spot in range? used for color\n local spotCompatible = false -- is this spot compatible?\n\n if activeVeh then -- we have a car and its ours (if in mp)\n local vehPos = activeVeh:getPosition()\n\n spotInRange = IsEntityInsideArea(vec3(vehPos.x, vehPos.y,vehPos.z), bottomPos, 1.5)\n\n spotCompatible = activeFuelType == \"any\" or spot.type == \"any\" or activeFuelType == spot.type\n end\n\n local spotColor = (spotInRange and spotCompatible) and activeColorMap[spot.type] or inactiveColorMap[spot.type] or ColorF(1,1,1,0.5)\n\n debugDrawer:drawCylinder(bottomPos:toPoint3F(), topPos:toPoint3F(), 1, spotColor) --bottom, top, radius, color\n end\n end\n
"},{"location":"beamng/snippets/#guihooks-examples","title":"guihooks examples","text":""},{"location":"beamng/snippets/#toast-notifications-top-right-of-screen","title":"Toast Notifications, Top right of screen","text":"--guihooks.trigger('toastrMsg', {type, title, msg, config = {timeOut}}) \nguihooks.trigger('toastrMsg', {type = \"info\", title = \"Info Message:\", msg = \"Info Message Text Here\", config = {timeOut = 5000}}) \nguihooks.trigger('toastrMsg', {type = \"warning\", title = \"Warning Message:\", msg = \"Warning Message Text Here\", config = {timeOut = 5000}}) \nguihooks.trigger('toastrMsg', {type = \"error\", title = \"Error Message:\", msg = \"Error Message Text Here\", config = {timeOut = 5000}}) \n
"},{"location":"beamng/snippets/#message-notifications-top-left-of-screen-by-default-in-messages-app","title":"Message notifications, top left of screen by default in Messages app","text":"--guihooks.trigger('Message', {msg, ttl, category, icon}) --requires Messages app\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"arrow_upward\", icon = \"arrow_upward\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"arrow_downward\", icon = \"arrow_downward\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"flag\", icon = \"flag\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"check\", icon = \"check\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"check_circle\", icon = \"check_circle\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"warning\", icon = \"warning\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"error\", icon = \"error\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"directions_car\", icon = \"directions_car\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"star\", icon = \"star\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"timeline\", icon = \"timeline\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"save\", icon = \"save\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"settings\", icon = \"settings\"}) \n
"},{"location":"beamng/snippets/#center-large-or-small-display-flash","title":"Center large or small display flash","text":"--guihooks.trigger('ScenarioFlashMessage', {{msg, ttl, sound, big}} ) -- requires RaceCountdown ui app\nguihooks.trigger('ScenarioFlashMessage', {{\"Message\", 5.0, 0, true}} ) \nguihooks.trigger('ScenarioFlashMessage', {{\"Message Text Here\", 5.0, 0, false}} ) \n\n--countdown example, when all executed at once, the items are queued and will follow eachother after the previous ttl expires\nguihooks.trigger('ScenarioFlashMessage', {{\"3\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown1')\", true}}) \nguihooks.trigger('ScenarioFlashMessage', {{\"2\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown2')\", true}}) \nguihooks.trigger('ScenarioFlashMessage', {{\"1\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown3')\", true}}) \nguihooks.trigger('ScenarioFlashMessage', {{\"GO!\", 3.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_CountdownGo')\", true}}) \n\n--another sound example\nguihooks.trigger('ScenarioFlashMessage', {{\"Teleported!\", 3.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Checkpoint')\", false}}) \n
"},{"location":"beamng/snippets/#center-mid-size-persistent-display","title":"Center mid-size persistent display","text":"
--guihooks.trigger('ScenarioRealtimeDisplay', {msg = msg} ) -- requires Race Realtime Display ui app\nguihooks.trigger('ScenarioRealtimeDisplay', {msg = \"Message Text Here\"} )\n--these messages persist, clear with a blank string\n--if you are running live data, this is a good one to update rapidly (think timers, distance calcs, et cetera)\nguihooks.trigger('ScenarioRealtimeDisplay', {msg = \"\"} )\n
"},{"location":"beamng/snippets/#imgui-code-snippets","title":"IMGUI Code Snippets","text":""},{"location":"beamng/snippets/#cef-ui-code-snippets","title":"CEF UI Code Snippets","text":""},{"location":"beamng/dev/","title":"Introduction","text":"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.
"},{"location":"beamng/dev/#beamngdrive-development-introduction","title":"BeamNG.drive Development Introduction","text":""},{"location":"beamng/dev/content/maps/","title":"Maps","text":"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.
"},{"location":"beamng/dev/content/maps/#beamngdrive-map-creation","title":"BeamNG.drive Map Creation","text":"...
"},{"location":"beamng/dev/content/maps/#introduction","title":"Introduction","text":"...
"},{"location":"beamng/dev/content/maps/#getting-started","title":"Getting Started","text":"...
"},{"location":"beamng/dev/content/props/","title":"Props","text":"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.
"},{"location":"beamng/dev/content/props/#beamngdrive-prop-creation","title":"BeamNG.drive Prop Creation","text":"...
"},{"location":"beamng/dev/content/props/#introduction","title":"Introduction","text":"...
"},{"location":"beamng/dev/content/props/#getting-started","title":"Getting Started","text":"...
"},{"location":"beamng/dev/content/vehicles/","title":"Vehicles","text":"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.
"},{"location":"beamng/dev/content/vehicles/#beamngdrive-vehicle-creation","title":"BeamNG.drive Vehicle Creation","text":"...
"},{"location":"beamng/dev/content/vehicles/#introduction","title":"Introduction","text":"...
"},{"location":"beamng/dev/content/vehicles/#getting-started","title":"Getting Started","text":"...
"},{"location":"beamng/dev/modding/imgui-windows/","title":"imgui-windows.md","text":"This page needs creating
"},{"location":"beamng/dev/modding/lua-mods/","title":"lua-mods.md","text":"This page needs creating
"},{"location":"beamng/dev/modding/ui-apps/","title":"UI-App Creation","text":"In order to make a UI-App you will need some knowledge of the AngularJS framework, the main documentation can be found here: AngularJS docs
"},{"location":"beamng/dev/modding/ui-apps/#file-structure","title":"File structure","text":"A UI-App needs four important files to work: - app.js | Contains the main code used by the UI-App Javascript docs - app.html | The code that displays your app Html docs - app.json | Contains the information of the UI-App - app.png | The image file showing in the app selector
"},{"location":"beamng/dev/modding/ui-apps/#ui-app-style","title":"UI-App style","text":"We recommend using the <style>
tag to style your app, a .css file will work, but you will not be able to see the changes in real-time.
This example is from DanielW Thanks to him
ui\\modules\\apps\\ExampleApp\\app.html
<div style=\"width: 100%; height: 100%;\" class=\"bngApp\">\n <link type=\"text/css\" rel=\"stylesheet\" href=\"/ui/modules/apps/ExampleApp/app.css\" />\n\n <div id=\"exampleAppContainer\">\n <span>Gear: <span>{{ gearName }}</span></span>\n\n <div layout=\"row\" layout-align=\"center center\">\n <md-input-container flex>\n <label>Input</label>\n <input ng-model=\"message\" ng-keydown=\"sendMessage($event)\">\n </md-input-container>\n\n <md-button md-no-ink class=\"md-warn\" ng-disabled=\"!message\" ng-click=\"sendMessage()\">Send</md-button>\n </div>\n\n <span style=\"display: block\">Messages:</span>\n\n <!-- Scroll Area -->\n <ul bng-nav-scroll style=\"margin: 0; padding: 0; overflow-y: auto; width: 100%; height: 100%; background-color: #37373740;\">\n\n <!-- Iterate over the messages and display them -->\n <li ng-repeat=\"message in messages track by $index\" style=\"display: flex; align-items: center; height: 35px;\">\n <span style=\"padding: 0 0.2em; width: 100%;\">{{ message }}</span>\n\n <!-- Button to delete the message, this calls the `deleteMessage` function in `app.js` -->\n <md-button md-no-ink class=\"md-icon-button md-warn\" ng-click=\"deleteMessage($index)\">\n <md-icon class=\"material-icons\">delete</md-icon>\n </md-button>\n </li>\n </ul> \n </div>\n</div>\n
Here, you can see a <span>
tag displaying the gear of your vehicle, an input used to send a message to the sendMessage()
function in the Javascript and a repeated <li>
tag using ng-repeat on the messages
variable located in the Javascript ui\\modules\\apps\\ExampleApp\\app.js
angular.module('beamng.apps')\n.directive('exampleApp', [function() {\n return {\n templateUrl: '/ui/modules/apps/ExampleApp/app.html',\n replace: true,\n restrict: 'EA',\n scope: true,\n\n controller: ['$scope', function($scope) {\n $scope.gearName = '0'\n $scope.message = ''\n $scope.messages = []\n\n // 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\n let steamList = ['engineInfo']\n StreamsManager.add(steamList)\n\n $scope.$on('destroy', function() {\n StreamsManager.remove(steamList)\n })\n\n // Do I even need to put this comment here explaining what this function does?\n // Well, I have done it for a lot of other things when they weren't needed. I'll leave this one be...\n $scope.$on('streamsUpdate', function(event, streams) {\n if (!streams.engineInfo) // Early return... You probably noticed that without this useless comment though\n return;\n\n // `lua/vehicle/controller/vehicleController.lua:538` (or use console.log)\n let gear = streams.engineInfo[5]\n\n // Update the gear name in HTML if needed\n if ($scope.gearName !== gear)\n $scope.gearName = gear\n })\n\n $scope.sendMessage = function(event) {\n if (event && event.key !== 'Enter')\n return\n\n if ($scope.message == '')\n return\n\n // Forward the message to the Lua extension to modify it\n bngApi.engineLua('extensions.exampleMod.modifyMessage(\"' + $scope.message + '\")')\n $scope.message = ''\n }\n\n $scope.deleteMessage = function(idx) {\n $scope.messages.splice(idx, 1)\n }\n\n // The `modifyMessage` function will call this hook with the modified data\n $scope.$on('MessageReady', function(_, modifiedMessage) {\n $scope.messages.push(modifiedMessage)\n });\n }]\n }\n}])\n
Note the usage of $scope. This is very important because you will need to define your variables and functions within $scope to be able to access it from the Html inside any ng-* tag. So in this example, after the sendMessage()
function being executed from the Html it will send it to a lua file located in the extensions directory of the mod and execute the modifyMessage()
function inside this lua file. An example of how the lua side could look like:
local function modifyMessage(message)\n message = message .. \" [Modified!]\"\n guihooks.trigger('MessageReady', message)\nend\n
^ This is a simplified version of the lua to just show the function The main focus here is the usage of guihooks.trigger which triggers an AngularJS event defined with $scope.$on()
. As you can see at the very bottom of the Javascript file the event is named MessageReady and will be executed by the guihooks.trigger function with the message payload and then will be pushed inside the $scope.messages
variable to be displayed by the li tag using ng-repeat in the Html file
The full lua file is just below
lua\\ge\\extensions\\exampleMod.lua
local M = {}\n\n--[[\n This is the entry point of our extension, this is what the game loads from our `modScript.lua`.\n In the modScript file, you can load more extensions and put them in the same directory as this file.\n\n In this file, we will communicate with the following:\n 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`\n 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)\n]]\n\n-- Game Function Hooks\n--------------------------------------------\nlocal function onExtensionLoaded()\n log('D', \"onExtensionLoaded\", \"Called\")\nend\n\nlocal function onExtensionUnloaded()\n log('D', \"onExtensionUnloaded\", \"Called\")\nend\n\n-- Custom Functions\n--------------------------------------------\nlocal function onActionKeyDown()\n log('D', \"onActionKeyDown\", \"Pressed!\")\nend\n\nlocal function onVehicleExtensionLoaded(vehID)\n log('D', \"onVehicleExtensionLoaded\", \"Sending some data to the vehicle\")\n\n local veh = be:getObjectByID(vehID) -- If you don't have the ID, you can also use `be:getPlayerVehicle(0)` to get the current vehicle.\n if not veh then return end -- The usual error checking\n\n local data = {\n [\"name\"] = \"Daniel W\"\n }\n\n veh:queueLuaCommand(\"extensions.exampleVehicleExtension.onDataReceived('\" .. jsonEncode(data) .. \"')\")\nend\n\nlocal function modifyMessage(message)\n message = message .. \" [Modified!]\"\n guihooks.trigger('MessageReady', message)\nend\n\n-- Export Interface\n--------------------------------------------\nM.onExtensionLoaded = onExtensionLoaded\nM.onExtensionUnloaded = onExtensionUnloaded\n\nM.onActionKeyDown = onActionKeyDown\nM.onVehicleExtensionLoaded = onVehicleExtensionLoaded\nM.modifyMessage = modifyMessage\n\n--[[ Other functions could include:\n - onPreRender(dtReal, dtSim, dtRaw)\n - onUpdate(dtReal, dtSim, dtRaw)\n - onClientPreStartMission(levelPath)\n - onClientPostStartMission(levelPath)\n\n To find all of these, search the following in `BeamNG.Drive/lua`: `extensions.hook(`\n--]]\n\nreturn M\n
Note that its very important to return the M (module) variable with the needed functions inside! For example, without the M.modifyMessage = modifyMessage
line, the bngApi.engineLua('extensions.exampleMod.modifyMessage(\"' + $scope.message + '\")')
function will not be able to find the modifyMessage() function
ui\\modules\\apps\\ExampleApp\\app.css
#exampleAppContainer {\n width: 100%;\n height: 100%;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n align-content: center;\n}\n\n#exampleAppContainer > * {\n margin: 0;\n padding: 0;\n}\n
ui\\modules\\apps\\ExampleApp\\app.json
{\n \"domElement\": \"<example-app></example-app>\",\n \"name\": \"Example App\",\n \"types\": [\n \"ui.apps.categories.debug\"\n ],\n \"description\": \"example-app\",\n \"css\": {\n \"left\": \"0px\",\n \"height\": \"auto\",\n \"width\": \"270px\",\n \"min-width\": \"200px\",\n \"min-height\": \"90px\",\n \"top\": \"0px\"\n },\n \"author\": \"Daniel W\",\n \"version\": \"0.1\",\n \"directive\": \"exampleApp\"\n}\n
The directive needs to be the same as in the Javascript file"},{"location":"beamng/dev/modding/ui-apps/#javascript-functions-provided-by-beamng-for-ui-apps","title":"Javascript functions provided by BeamNG for UI-Apps","text":"bngApi.engineLua(\"lua_path.function()\")\n
Useful to run a lua function with or without arguments"},{"location":"beamng/dev/modding/ui-apps/#lua-functions-provided-by-beamng-for-ui-apps","title":"Lua functions provided by BeamNG for UI-Apps","text":"guihooks.trigger(\"EventName\", Payload)\n
The payload can be any type but its better to keep it as an Array / Object or a String to not be lost. IMPORTANT : Sometime it can happen that the event name you use is already used internally by something else and cause problems, so for example if your app is named Nickel, it can be a good practice to name every of your Angular event like NKEventName instead of EventName
"},{"location":"community/","title":"Welcome to BeamMP Community Area!","text":""},{"location":"community/#our-social-media-links","title":"Our social media links","text":"BeamMP Forum - https://forum.beammp.com
X (Twitter) - https://x.com/BeamMPOfficial
YouTube - https://www.youtube.com/@BeamMPOfficial
Patreon - https://www.patreon.com/c/BeamMP
Discord - https://discord.com/invite/beammp
BlueSky - https://bsky.app/profile/beammpofficial.bsky.social
"},{"location":"community/#our-rules","title":"Our Rules","text":"You can find our rules here
"},{"location":"community/rules/","title":"BeamMP Community Rules","text":"Info
BeamMP Staff are not bound to moderate strictly by these rules and may operate at their own discretion. In addition to these rules, Discord's Community Guidelines and Terms of Service apply, and are enforced.
"},{"location":"community/rules/#beammp-general-rules-applies-to-discord-forum-and-in-game","title":"BeamMP General Rules (Applies to Discord, Forum and In-Game)","text":"@'ing
) All ban appeals are investigated thoroughly, involving at least two (2) members of the staff/moderation team that were not involved in the case-at-hand. The issuing staff member will be allowed to comment, but will not be otherwise involved in the appeal decision. These appeal outcomes are final. BeamMP reserves the right to allow or not allow members as they deem appropriate according to the BeamMP Community Rules (as above), Discord ToS, and other factors.
Warning
In the event of action taken against you, you are prohibited from creating a new Discord or BeamMP account to circumvent the ban.
"},{"location":"game/error-codes/","title":"Error Codes","text":"This page contains all the error codes that the launcher may display.
Code Description Possible solution 10048 Something else is already using the launcher port Make sure to only have ONE instance of the BeamMP-Launcher running at a time. Try restarting your PC. 10038 / 10060 / 10061 No Server answered on this specified IP and / or port If you are the server owner, please check the port forwarding and/or firewall rules found at BeamMP-Server. If you are not the server owner, choose a different server or contact the owner if known. 10054 Connection reset by peer The server you're connecting to has gone offline. Failed to find the game please launch it. Report this if the issue persists code 3. The launcher was unable to find the game's info (game directory, profile directory, version ect...) in the registry entry Run the game at least once so the registry values get created. Failed to find the game please launch it. Report this if the issue persists code 4. The launcher was unable to read the game's info (game directory, profile directory, version ect...) in the registry entry This error is most likely to appear in users with pirated copies of the game. If you have bought the game, run it at least once so the registry values get created. Failed to Launch the game! launcher closing soon The launcher was unable to find the game's executable Run the game at least once before running the launcher again. Game Closed! launcher closing soon The game was closed This message will appear on game closure or when the game failed to start. Launcher Update failed! The launcher failed to download a new version Check your internet connection and firewall / antivirus rules so that the launcher is not blocked. Logger file init failed The launcher does not have the ability to create files Run the launcher as administrator. Please close the game and try again The game is already open and the launcher can't clear themultiplayer/mods
folder Close the game and retry. Please launch the game at least once The launcher tried and failed to modify the game's directory Run the game at least once before running the launcher again. Primary Servers Offline! Sorry for the inconvenience! The launcher failed to check for an update Check your internet connection and firewall rules. If there is no problem on your end, please check the BeamMP updates channel on our Discord. Sorry Backend System Outage! Don't worry it will back on soon! The BeamMP backend did not respond Check your internet connection and firewall rules. If there is no problem on your end, please check the BeamMP updates channel on our Discord. Stuck on updating The launcher is stuck on updating and will not continue to the next step Run the launcher as administrator and check your antivirus rules so that the launcher is not blocked. If the launcher closes immediately, check the Launcher.log
file in the folder where you installed BeamMP.
BeamMP is fully compatible with Windows and Linux, compatibility with MacOS is being worked on. However, both Linux and MacOS are secondary platforms, this means bugs are to be expected.
Warning
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.
"},{"location":"game/getting-started/#2-installation","title":"2. Installation","text":""},{"location":"game/getting-started/#2a-windows-installation","title":"2a. Windows Installation","text":"BeamMP_Installer.zip
archive.BeamMP_Installer.exe
and follow the instructions.Repository
button and make sure that multiplayerbeammp
is the only enabled mod.Connect
. Enjoy!Note
As you are loading into a map with multiple vehicles spawned it might take longer than expected to join.
"},{"location":"game/getting-started/#2b-linux-installation","title":"2b. Linux Installation","text":"Currently you need to build the Launcher yourself. In order to do this, you need a basic understanding of how to build an application.
Make sure you have vcpkg
installed, as well as basic development tools, often found in packages, for example:
sudo apt install build-essential
sudo dnf install cmake gcc-c++ perl-IPC-Cmd perl-FindBin perl-File-Compare perl-File-Copy
sudo pacman -S base-devel
zypper in -t pattern devel-basis
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)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
Checkout the tag that was used for the latest release. For example, if v2.3.2
is used in the latest release, then do git checkout v2.3.2
In the root directory of the project,
cmake . -B bin -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux\n
cmake --build bin --parallel\n
Should you run out of RAM while building, you can ommit the --parallel instruction, it will then use less RAM due to building only on one CPU thread.
By not specifying -DCMAKE_BUILD_TYPE=Release
you are building a debug version, which is larger in filesize but does not contain the launcher-can-only-connect-to-a-server-once bug
Move the finished application out of the /bin
folder into its own folder and run it from there
The native linux BeamMP-Launcher will start and use native linux BeamNG.drive
"},{"location":"game/getting-started/#2c-using-beamngdrive-with-proton","title":"2c. Using beamNG.drive with Proton","text":"Should you want to use the native linux BeamMP-Launcher together with BeamNG.drive running through Proton, you can do so:
Run the BeamMP-Launcher using the argument --no-launch
(This will prevent the Launcher from starting native linux BeamNG.drive). Further information about launcher arguments can be found in the Development Environment Setup
Change the userfolder location of Proton-BeamNG.drive to the location of Linux-BeamNG.drive (since the native linux BeamMP-Launcher currently only writes into the Linux-BeamNG.drive userfolder)
This can be done for example by creating a symlink
~/.local/share/BeamNG.drive
) and rename it, for example to BeamNG.drive_old
~/.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
With the symlink in place between the userfolders and the launcher compiled, you can have Steam run the game via Proton, while also automatically executing the launcher with the following replacement for your launch options for the vanilla game, found in the game's Properties window in its entry in Steam:
~/BeamMP/BeamMP-Launcher --no-launch & %command% ; killall BeamMP-Launcher
Note that this assumes you put the launcher's binary you compiled earlier into /home/user/BeamMP/
, so change it to match where you put the finished binary, and you will need to re-compile the launcher with the correct git branch each time a launcher update is released.
Adding an emoji-font to get in-text emojis
In order to get emojis to show up in either the serverlist (As part of a servers customised name) or in the ingame chat, you need to have a font that contains emojis.
This can be done for example by adding the Linux-port of the Windows Segoe-UI emoji font
"},{"location":"game/getting-started/#3-known-issues","title":"3. Known Issues","text":"Should you need further help with installation, you are welcome to create a post on our forum or ask on our Discord server.
"},{"location":"game/multiplayer-settings/","title":"Mutliplayer Settings","text":""},{"location":"game/multiplayer-settings/#1-general","title":"1. General","text":"Show advanced optionsIf enabled, you will see all multiplayer settings
If disabled, you will see only basic multiplayer settings
Enable config cloning protectionIf enabled, your spawned vehicle config will be protected from other players saving it
If disabled, your spawned vehicle config can be saved by other players
Disable pausing caused by instabilitiesIf enabled, physics instabilities will not cause your game to pause
If disabled, physics instabilities will cause your game to pause
Its advised to leave disabled, since repeated instabilities can cause the game to crash
Use simplified vehicles when availableIf enabled, the game will replace vehicles of other players with their simplified versions (from AI traffic) if available
If disabled, the game will use the intended vehicle models
New chat menuIf enabled, the ingame chat will be displayed in an IMGUI window, that for example can be dragged out of the game onto another monitor
If disabled, the ingame chat will be displayed in the UI app
Dragging IMGUI windows out of the main game window can cause performance issues, as well as trick screen recording software into recording the chat window instead of the main game window
Enable vehicle position smoothingIf enabled, beamMP will use an algorithm to smooth vehicle position updates to regular intervalls. Can be beneficial between players with high ping or when a connection experiences a high package drop rate
If disabled, beamMP will update vehicle locations as they are received
Skip the mod security warning popuspIf enabled, the mod security popup will not be shown when trying to connect to a server with mods
If disabled, the mod security popup will be shown whenever you connect to a server with mods
Enable player vehicle update/edit queuingIf enabled, other players vehicle spawns and edits will be put into a queue. See the section 2. Event queue
for further details
If disabled, other players vehicle spawns and edits will be loaded by the game instantly
Enable automatic part syncIf enabled, your vehicles parts will automatically be synced to other players after a few seconds
If disbaled, you need to click the part sync button in the part picker in order to send a sync out to other players
Disable switching to other players vehiclesIf enabled, tabbing trough vehicles will skip other players vehicles
If disabled, tabbing trough vehicles will cycle over every spawned vehicle
Fade out vehicles as they get closerIf enabled, other vehicles will fade out as they get closer
If disbaled, other vehicles will stay fully visible regardless of distance
This only affects the visible 3d mesh of a vehicle, not its physics node-beam-mesh. In order to also disable physics, you need to enable Simplified collision physics
in the Gameplay settings
If enabled, the ingame playerlist will have an additional row showing each players ID. Useful for development or moderation
If disabled, the ingame playerlist will only show the rows for playername and ping
Allow the serverlist to refresh ingameIf enabled, the serverlist will update in regular intervalls while playing. This can cause lag spikes
If disabled, the serverlist will only update once you open the main menu
"},{"location":"game/multiplayer-settings/#2-event-queue","title":"2. Event queue","text":"Highlight queued playersIf enabled, players with a queued event will be highlighted in the ingame playerlist
If disabled, players will not be individually highlighted
Apply vehicle changes withIf set to Left mouse button
, clicking on a players name in the playerlist using the left mouse button will load the queued events. Clicking with the right mouse button will spectate said player
If set to Right mouse button
, clicking on a players name in the playerlist using the right mouse button will load the queued events. Clicking with the left mouse button will spectate said player
If enabled, the queued events will be automatically loaded once you've been going under the speed treshold for the amount of time set as the timeout
If disabled, the queued events will only load manually, by clicking on either the Events
button at the top of the screen or on a players name in the playerlist
This setpoint defines the speed treshold of the automatic event queue loading. Your vehicle has to be slower than this for longer than Queue apply timeout
in order to load the queued events
This setpoint defines the time delay of the automatic event queue loading. Your vehicle has to be slower than Queue apply speed treshold
for this time in order to load the queued events
If enabled, an event will instantly load if you are spectating another player
If disabled, an event will be queued just like it would when focused on your own vehicle
Don't queue Unicycles (Snowmen/Beamlings)If enabled, an event concerning a snowmen/beamling will be loaded instantly
If disabled, snowmen/beamlings will be queued just like other vehicles
"},{"location":"game/multiplayer-settings/#3-set-default-unicycle","title":"3. Set default Unicycle","text":"Default Unicycle configThis setpoint defines the unicycle variant to be loaded by default. You can choose between premade configs and your own should you have saved custom unicycle configs
Automatically save your last used UnicycleIf enabled, your last used unicycle will be automatically saved and reloaded once you spawn it again
If disabled, your default unicycle config will spawn every time
"},{"location":"game/multiplayer-settings/#4-blobs","title":"4. Blobs","text":"Enable blobs for unspawned vehiclesIf enabled, you will see a placeholder orb, or blob, in place of an unspawned vehicle
If disabled, an unspawned vehicle will be invisible
Tune colors VisibleIf enabled, a blob will be drawn, using the color below
If disabled, no blob will be drawn for the specified function
RGB HEX valuesQueued vehicle: The color a blob will use if a vehicle is queued for spawning. Standard value #FF6400
Illegal vehicle: The color a blob will use if a vehicle is illegal, for example trough a mod that was sideloaded. Standard value #000000
Deleted vehicle: The color a blob will use if a vehicle was deleted by the user. Standard value #333333
"},{"location":"game/multiplayer-settings/#5-nametags","title":"5. Nametags","text":"Hide player nametagsIf enabled, player nametags will not be drawn
If disabled, player nametags will be drawn according to their vehicles relative position
Show distance from other playersIf enabled, the nametag will be prepended by the distance to the respective vehicle
If disabled, no additional distance will be shown in the nametag
Fade nametags in/outIf enabled, a nametag will be faded in/out according to Fade distance
and Invert nametag fade direction
If disabled, anametag will be drawn at standard opacity regardless of distance to the respective vehicle
Fade distance/Invert nametag fade directionFade out
Nametags are getting less visible the further away a player is
Fade distance
defines the distance at which a nametag will be drawn at minimal opacity
Fade in
Nametags are getting more visible the further away a player is
Fade distance
defines the distance at which a nametag will be drawn at maximal opacity
If enabled, a nametag can not get fully invisible, it will retain a minimal opacity regardless of distance
If disabled, nametags can get fully invisble
Shorten nametag and role tagsIf enabled, Nametag length limit
will truncate nametags and roles to the set limit of characters
If disabled, nametag and role tags will be shown at full length
Show spectators' nametag under vehicle nametagsIf enabled, a spectators name will be added underneath a players nametag
If disabled, no spectator names will be added to nametags
Same color for spectator nametagsIf enabled, a spectators name will always be surrounded by a grey background
If disabled, a spectators name will be surrounded by a colored background, reflecting the spectators role
"},{"location":"game/multiplayer-settings/#6-others","title":"6. Others","text":"Show network activity in the consoleIf enabled, the beamMP network activity will be shown in the console
If disabled, no further network activity will be shown in the console
Be careful with this setting, since all the console output gets also written into the log files
They can grow by hundreds of MB in minutes with this setting enabled
Launcher portThis setpoint defines the port used for communicating with the launcher
Should only be changed if the standard port 4444 can not be used
Dont forget to also change it on the launcher side, by modifying launcher.cfg
The port specified is only the first of two, the second port being used is directly following, set port + 1
The first port carries core network pakets, the second game network pakets, both over TCP
"},{"location":"guides/","title":"Guides","text":"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.
"},{"location":"guides/#beammp-development-guides","title":"BeamMP Development Guides","text":"This page will be the introduction and preface for both client and server content creation.
This page needs developing still.
"},{"location":"guides/beammp-dev/beammp-dev/","title":"Getting started","text":"In order to get started with development for BeamMP you will need at least:
BeamMP is split into three main parts:
In order to efficiently work on mods in BeamNG, it is advised to use an unpacked
folder, rather than packaging zips after every change.
Open up the BeamNG userfolder by navigating to %appdata%/Local/BeamNG.drive/0.xx/mods
where xx
is the most recent BeamNG version. Create a folder called unpacked
inside the mods
folder.
Further information about the userfolder can be found at https://documentation.beamng.com/support/userfolder/
"},{"location":"guides/beammp-dev/beammp-dev/#enabling-dev-mode-in-the-beammp-launcher","title":"Enabling dev mode in the BeamMP launcher","text":"In order to prevent auto-update deleting your local git clone, it's necessary to disable it, using --no-download
. If you also don't want the launcher to start BeamNG, and would like to see debug prints, then using --dev
is advised.
--help
or -h
Will print the following list of arguments --port <port>
or -p
Change the default listen port to <port>
. This must be configured ingame too --verbose
or -v
Verbose mode, prints debug messages --no-download
Skip downloading and installing the BeamMP Lua mod --no-update
Skip applying launcher updates (you must update manually) --no-launch
Skip launching the game (you must launch the game manually) --dev
Developer mode, same as --verbose --no-download --no-launch --no-update --game <args...>
or -- <args...>
Passes arguments to the game"},{"location":"guides/beammp-dev/beammp-dev/#cloning-the-beammp-repo-into-the-unpacked-folder","title":"Cloning the BeamMP repo into the unpacked folder","text":"While you can manually copy the BeamMP mod files from our github repo, it is highly recommended to use a source-control system like git. First create a fork of https://github.com/BeamMP/BeamMP
Most efficient would be to clone the repo directly into the unpacked
folder.
For git
, run git clone https://github.com/yourName/BeamMP
from a PowerShell or CMD window started from the unpacked
folder. While in the userfolder, make sure theres no multiplayer
folder left in mods
and that now there's unpacked/beammp
.
Now give the dev mode a try. Start the BeamMP launcher, start BeamNG manually, once ingame make sure that BeamMP is the only active mod. You should be able to use BeamMP as usual.
Using a code editor, you can now add or change code directly in the unpacked
folder. You can then try the changes by reloading Lua ingame by pressing Ctrl+L
(and F5
if you made UI changes).
Once you're happy with your changes, you can commit them through git. See the Git-SCM website for tutorials and documentation on how to use Git. As soon as your changes are committed and pushed (to your fork), you can make a pull-request.
Feel free to ask in the #scripting channel in our Discord if you encounter any issues.
"},{"location":"guides/beammp-dev/beammp-dev/#setting-up-a-local-server","title":"Setting up a local server","text":"While working on BeamMP, it can be beneficial to use a local server. You can follow the general server installation while omitting the first two steps for purely local connections.
Set the server to private in the serverConfig.toml
while using any string as the AuthKey
.
For details on code format, commit message format, general development best practices, etc. please see the CONTRIBUTING.md
file in each repo. This file contains more detailed information on how to contribute. The README.md
in each repo usually contains build steps as well (for compiled projects).
The basic folder and file structure needs to look like this:
Resources/\n\u251c\u2500 Client/\n\u2502 \u2514\u2500 examplePlugin.zip/\n\u2502 \u251c\u2500 scripts/\n\u2502 \u2502 \u2514\u2500 modScript.lua\n\u2502 \u2514\u2500 lua/\n\u2502 \u2514\u2500 ge/\n\u2502 \u2514\u2500 extensions/\n\u2502 \u2514\u2500 examplePlugin.lua\n\u2514\u2500 Server/\n \u2514\u2500 examplePlugin/\n \u251c\u2500 examplePlugin.lua\n \u2514\u2500 further_lua/\n \u2514\u2500 further.lua\n
The serverside lua is the bare minimum, if you want to add custom events, you also need at least a clientside lua as well as a modscript.lua
The Server folder must contain subfolders, one for each server-side mod. It is good practice to only have a single main lua file and add further lua files into subfolders. However, you are not required to do that, the server will load lua files in alphabetical order should there be multiple.
The Client folder contains the zip files that are sent to a client, which then will load them as a mod. Any other files in the Client folder will cause an error on server startup, but apart from that will be ignored by the server. The modScript.lua will be read by BeamNG and instructs the game which plugin to load.
Download the examplePlugin.zip
"},{"location":"guides/mod-creation/server/getting-started/#serverside-lua","title":"Serverside lua","text":"There's more examples in the examplePlugin, but heres a very basic one, printing a players identifiers:
function onInit() --runs when plugin is loaded\n\n MP.RegisterEvent(\"onPlayerAuth\", \"onPlayerAuth\") --Provided by BeamMP\n\n print(\"examplePlugin loaded\")\nend\n\n--A player has authenticated and is requesting to join\n--The player's name (string), forum role (string), guest account (bool), identifiers (table -> ip, beammp)\nfunction onPlayerAuth(player_name, role, isGuest, identifiers)\n local ip = identifiers.ip\n local beammp = identifiers.beammp or \"N/A\"\n print(\"onPlayerAuth: player_name: \" .. player_name .. \" | role: \" .. role .. \" | isGuest: \" .. tostring(isGuest) .. \" | identifiers: ip: \" .. ip .. \" - beammp: \" .. beammp)\nend\n
onPlayerAuth
gets triggered as soon as a player wants to join, also see onPlayerAuth in the scripting reference
Another example using onPlayerAuth, but this will deny guests from joining the server by sending the client a message back, which will then be shown to the player:
function onPlayerAuth(playerName, playerRole, isGuest, identifiers)\n if isGuest then\n return \"No guests allowed, please use a BeamMP account\"\n end\nend\n
Further info on serverside functions provided by BeamMP can be found in the latest server reference
"},{"location":"guides/mod-creation/server/getting-started/#clientside-lua","title":"Clientside lua","text":"This largely follows the BeamNG extensions
local M = {}\n\nif extensions.isExtensionLoaded(\"examplePlugin\") then\n log(\"E\", \"examplePlugin\", \"examplePlugin loaded on client side\")\n return\nend\n\nreturn M\n
Prints to the console that the examplePlugin was loaded Refer to the beamNG documentation on debug prints to learn more
"},{"location":"guides/mod-creation/server/getting-started/#modscriptlua","title":"modScript.lua","text":"Usually contains only two lines
load('examplePlugin')\nsetExtensionUnloadMode('examplePlugin', 'manual')\n
You can add a log print if you want to see in the logs when your modScript gets processed by BeamNG
load('examplePlugin')\nsetExtensionUnloadMode('examplePlugin', 'manual')\nlog('I', 'modScript', \"examplePlugin loaded\")\n
"},{"location":"scripting/mod-reference/","title":"Client Scripting Reference","text":"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.
"},{"location":"scripting/mod-reference/#modin-game-scripting-reference","title":"Mod/In-Game Scripting Reference","text":"BeamMP allows you to create your own client side plugins as well. We have provided a few functions that you can use to communicate with other multiplayer mods, and other players through the server.
"},{"location":"scripting/mod-reference/#functions","title":"Functions","text":"List of available functions for scripting:
Function NotesTriggerServerEvent(\"eventName\", \"data\")
Triggers an event in the server lua environment, both parameters are strings. TriggerClientEvent(\"eventName\", \"data\")
Triggers an event in the local lua environment, both parameters are strings. Good for communication between plugins. AddEventHandler(\"eventName\", Function)
Adds the 2nd parameter to the table to be called when eventName
is received (either locally or from the server), Function
will get 1 parameter, a string containing the event data."},{"location":"scripting/mod-reference/#code-snippets","title":"Code snippets","text":"For example to parse the chat use the included ChatMessageIncluded
event as such:
local function chatReceived(msg) -- Receive event with parameters\n print(\"chat received: \"..msg)\n local i = string.find(s, \":\") -- Find where our first ':' is, used to separate the sender and message\n if i == nil then\n print(\"error parsing message: separator could not be found!\")\n return -- Could not find separator, cancel function\n end\n print(\"index of separator: \"..tostring(i))\n local sender = string.sub(msg, 1, i-1) -- Substring our input to separate its 2 parts\n local message = string.sub(msg, i+1, -1) -- Do whatever you want to with the message\n print(\"sender: \" .. sender)\n print(\"message: \".. message)\nend\n\nAddEventHandler(\"ChatMessageReceived\", chatReceived) -- Add our event handler to the list managed by BeamMP\n
"},{"location":"scripting/server/latest-server-reference/","title":"Version 3.X (Latest)","text":"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 on any page too.
"},{"location":"scripting/server/latest-server-reference/#server-scripting-reference","title":"Server Scripting Reference","text":""},{"location":"scripting/server/latest-server-reference/#server-version-3x","title":"Server Version 3.X","text":""},{"location":"scripting/server/latest-server-reference/#introduction","title":"Introduction","text":"BeamMP-Server release v3.0.0 does some drastic changes to the way the Lua plugin system works. There is no way to use the old lua with a new server, so you'll have to migrate.
The Server's Plugin system uses Lua 5.3. This section details how to get started writing plugins, teaches some basic concepts and gets you started with your first plugin. It is recommended you read this section even if you know the pre-v3.0.0 system, as a few things changed drastically.
For a migration guide from pre-v3.0.0 lua, go to the section \"Migrating from old Lua\".
"},{"location":"scripting/server/latest-server-reference/#directory-structure","title":"Directory Structure","text":"Server plugins, unlike mods, are situated (by default) in Resources/Server
, while mods, which are written for BeamNG.drive and are sent to the clients are in Resources/Client
. Each plugin must have it's own subfolder in Resources/Server
, for example for a plugin called \"MyPlugin\", the structure would be:
Resources\n\u2514\u2500\u2500 Server\n \u251c\u2500\u2500 MyPlugin\n \u2502 \u2514\u2500\u2500 main.lua\n \u2514\u2500\u2500 SomeOtherPlugin\n \u2514\u2500\u2500 ...\n
Here we also display another plugin called \"SomeOtherPlugin\", to illustrate how your Resources/Server
folder can have multiple different plugin folders. We will keep using this directory structure as an example throughout this guide.
You also notice the main.lua
. You can have as many Lua .lua
files as you like. All Lua files in your plugin's main directory are loaded in alphabetical order (so aaa.lua
is run before bbb.lua
).
Each Lua .lua
file in the plugin's folder is loaded on server startup. This means that statements outside of functions are evaluated (\"run\") immediately.
Lua files in subfolders are ignored, but can be require()
-ed.
For example, our main.lua
looks like this:
function PrintMyName()\n print(\"I'm 'My Plugin'!\")\nend\n\nprint(\"What's up!\")\n
When the server starts and the main.lua
is loaded, it will run print(\"What's up!\")
immediately, but will NOT call the PrintMyName
function yet (because it wasn't called)!
An event is something like \"a player is joining\", \"a player sent a chat message\", \"a player spawned a vehicle\".
You can cancel events (if they are cancellable) by returning 1
from the handler.
In Lua, you usually want to react to some of these. For this, you can register a \"Handler\". This is a function which is called when an event happens, and gets passed some arguments.
Example:
function MyChatMessageHandler(sender_id, sender_name, message)\n -- censoring only the exact message 'darn'\n if message == \"darn\" then\n -- cancel the event by returning 1\n return 1\n else\n return 0\n end\nend\n\nMP.RegisterEvent(\"onChatMessage\", \"MyChatMessageHandler\")\n
This will effectively make sure that any message that is exactly equal to \"darn\" will not be sent and won't show in chat (note that for a real profanity filter you'd want to see if the message contains \"darn\", not is \"darn\"). Cancelling an event causes it to not happen, for example a chat message not to be shown to anyone else, a vehicle not to be spawned, etc.
"},{"location":"scripting/server/latest-server-reference/#custom-events","title":"Custom Events","text":"You can register to any event you like, for example:
MP.RegisterEvent(\"MyCoolCustomEvent\", \"MyHandler\")\n
You can then trigger those custom events:
-- call all event handlers to this in ALL plugins\nMP.TriggerGlobalEvent(\"MyCoolCustomEvent\")\n-- call all event handlers to this in THIS plugin\nMP.TriggerLocalEvent(\"MyCoolCustomEvent\")\n
You can do a lot more with events, but those possibilities will be covered in detail below in the API reference.
"},{"location":"scripting/server/latest-server-reference/#event-timers-threads","title":"Event Timers (\"Threads\")","text":"Pre-v3.0.0 Lua had a concept of \"threads\" which run X times per second. This naming was slightly misleading, as they were synchronous.
v3.0.0 Lua instead has \"Event Timers\". These are timers which run inside the server, and once they run out, they trigger an event (globally). This is also synchronous. Please be aware that the second argument is an interval in milliseconds.
Example:
local seconds = 0\n\nfunction CountSeconds()\n seconds = seconds + 1\nend\n\n-- create a custom event called 'EverySecond'\n-- and register the handler function 'CountSeconds' to it\nMP.RegisterEvent(\"EverySecond\", \"CountSeconds\")\n\n-- create a timer for this event, which will fire every 1000ms (1s)\nMP.CreateEventTimer(\"EverySecond\", 1000)\n
This will cause \"CountSeconds\" to be called every second. You can also cancel event timers with MP.CancelEventTimer
(see API reference).
From the server's console, you can run status
to see how many event timers are currently running, as well as info about event handlers that are waiting. This command will show more information in the future.
Lua is difficult to debug. An industry-grade debugger like gdb
sadly doesn't exist for embedded Lua.
Generally, you can of course simple print()
the values you want to inspect at any time.
In v3.0.0, the server provides a way for you to inject an interpreter into a plugin and subsequently run Lua inside it in realtime. This is the closest we have to a debugger.
Assuming you have the plugin from above which we called MyPlugin
, you can enter into its Lua state like so:
> lua MyPlugin\n
Capitalisation matters here, so be careful its entered correctly. The output is something like
lua @MyPlugin> \n
As you can see, we switched into the Lua state for MyPlugin
. From now on until we enter exit()
(as of v3.1.0 :exit
), we will be in MyPlugin
and can execute Lua there. For example, if we have a global called MyValue
, we can print that value like so:
lua @MyPlugin> print(MyValue)\n
You can call functions here and do anything you expect to be able to do.
Since v3.1.0: You can press TAB to autocomplete functions and variables.
WARNING: Sadly, if the Lua state is currently busy executing other code (like a while
loop), this can fully hang the console until it finishes that work, so be very careful switching to states which may be waiting for something to happen.
Additionally, you can run status
in the regular console (>
), which will show you some statistics about Lua, among other things.
In order to implement custom commands for the server console, the event onConsoleInput
can be used. This can be useful when you want to add a way for the server owner to signal something to your plugin, or to display internal state in a custom way.
Here's an example:
function handleConsoleInput(cmd)\n local delim = cmd:find(' ')\n if delim then\n local message = cmd:sub(delim+1)\n if cmd:sub(1, delim-1) == \"print\" then\n return message\n end\n end\nend\n\nMP.RegisterEvent(\"onConsoleInput\", \"handleConsoleInput\")\n
This will enable you to do the following in the server's console:
> print hello, world\nhello, world\n
We implemented our own print
. As an exercise, try to build a function like say
, which sends a chat message to all players, or even a specific player (with MP.SendChatMessage
).
Caution: For your own plugins, it's generally recommended to \"namespace\" them. Our print
example, in a plugin called mystuff
, could be called mystuff.print
or ms.print
or similar.
Documentation format: function_name(arg_name: arg_type, arg_name: arg_type) -> return_types
print(...)
, printRaw(...)
","text":"Prints the message to the server console, prefixed with [DATE TIME] [LUA]
. If you don't want this prefix, you can use printRaw(...)
.
Example:
local name = \"John Doe\"\nprint(\"Hello, I'm\", name, \"and I'm\", 32)\n
It can take as many arguments of arbitrary types as you like. It will also happily dump tables!
This behaves like the lua interpreter's print
, so it will put tabs between arguments.
exit()
","text":"Shuts down the server gracefully. Causes the onShutdown
event to be triggered.
MP.CreateTimer() -> Timer
","text":"Creates a timer object, which can be used to keep track of how long something took / how much time elapsed. It starts once created, and can be reset/restarted with mytimer:Start()
.
You can get the current elapsed time in seconds with mytimer:GetCurrent()
.
Example:
local mytimer = MP.CreateTimer()\n-- do stuff here that needs to be timed\nprint(mytimer:GetCurrent()) -- print how much time elapsed\n
Timers do not need to be stopped (and can't be stopped), they have no overhead.
"},{"location":"scripting/server/latest-server-reference/#mpgetosname-string","title":"MP.GetOSName() -> string
","text":"Returns the name of the current OS, either Windows
, Linux
or Other
.
MP.GetServerVersion() -> number,number,number
","text":"Returns the current server version in major, minor, patch format. For example, the v3.0.0 version would return 3, 0, 0
.
Example:
local major, minor, patch = MP.GetServerVersion()\nprint(major, minor, patch)\n
Output: 2 4 0\n
"},{"location":"scripting/server/latest-server-reference/#mpregistereventevent_name-string-function_name-string","title":"MP.RegisterEvent(event_name: string, function_name: string)
","text":"Remembers the function with name Function Name
as an event handler to event with name Event Name
.
You can register as many handlers to an event as you like.
For a list of events the server provides, see here.
If the event with that name doesn't exist, it's created, and thus RegisterEvent cannot fail. This can be used to create custom events. See Custom Events and Events for more.
Example:
function ChatHandler(player_id, player_name, msg)\n if msg == \"hello\" then\n print(\"Hello World!\")\n return 0\n end\nend\n\nMP.RegisterEvent(\"onChatMessage\", \"ChatHandler\")\n
"},{"location":"scripting/server/latest-server-reference/#mpcreateeventtimerevent_name-string-interval_ms-number-strategy-number-since-v302","title":"MP.CreateEventTimer(event_name: string, interval_ms: number, [strategy: number (since v3.0.2)])
","text":"Starts a timer inside the server which triggers the event event_name
every interval_ms
milliseconds.
Event timers can be cancelled with MP.CancelEventTimer
.
Intervals <25 ms are not encouraged, as multiple such intervals will likely not be served in time reliably. While multiple timers can be started on the same event, it's encouraged to create as few event timers as possible. For example, if you need one event that runs every half second, and one which runs every second, consider just making the half-second one and running the every-second-functiosecond trigger.
You may also use MP.CreateTimer
to make a timer and measure time passed since the last event call, in order to minimize event timers, though this is not necessarily recommended as it increases the code complexity significantly.
Since 3.0.2:
An optional CallStrategy
may be supplied as the third argument. This can be either:
MP.CallStrategy.BestEffort
(default): Will try to get your event to trigger at the specified interval, but will refuse to queue handlers if a handler takes too long.MP.CallStrategy.Precise
: Will enqueue event handlers at the exact interval specified. Can lead to the queue filling up if the handler takes longer than the interval. Only use if you NEED the exact interval.MP.CancelEventTimer(event_name: string)
","text":"Cancels all timers on the event with the name event_name
On some occasions, the timer might go off one more time before being cancelled, due to the nature of asynchronous programming.
MP.TriggerLocalEvent(event_name: string, ...) -> table
","text":"Plugin-local synchronous event trigger.
Triggers an event locally, which causes all handlers to that event in the current lua state (usually the current plugin, unless state was shared via PluginConfig.toml) to be called.
You can pass arguments to this function (...
) which are copied and sent to all handlers as function arguments.
This call is synchronous and will return once all event handlers finished.
The returned value is a table of all results. If a handler returned a value, it will be in this table, unannotated and unnamed. This can be used to \"collect\" things, or register sub-handlers for events that can be cancelled. This is practically an array.
Example:
local Results = MP.TriggerLocalEvent(\"MyEvent\")\nprint(Results)\n
"},{"location":"scripting/server/latest-server-reference/#mptriggerglobaleventevent_name-string-table","title":"MP.TriggerGlobalEvent(event_name: string, ...) -> table
","text":"Global asynchronous event trigger.
Triggers an event globally, which causes all handlers to that event in all plugins (including this plugin) to be called.
You can pass arguments to this function (...
) which are copied and sent to all handlers as function arguments.
This call is asynchronous and returns a future-like object. Local handlers (handlers in the same plugin as the caller) run synchronously and immediately.
The table returned has two functions:
IsDone() -> boolean
tells you whether all handlers have finished. You can wait until this is true by checking it and MP.Sleep
-ing for a little bit in a loop.GetResults() -> table
returns an unannotated unnamed table with all return values of all handlers. This is practically an array.Make sure to call these with Obj:Function()
syntax (:
, NOT .
).
Example:
local Future = MP.TriggerGlobalEvent(\"MyEvent\")\n-- wait until handlers finished\nwhile not Future:IsDone() do\n MP.Sleep(100) -- sleep 100 ms\nend\nlocal Results = Future:GetResults()\nprint(Results)\n
Be aware that a handler registering to \"MyEvent\" here and never returning could lock up your plugin. You likely want to keep track of how long you have waited and stop waiting after a few seconds.
"},{"location":"scripting/server/latest-server-reference/#mpsleeptime_ms-number","title":"MP.Sleep(time_ms: number)
","text":"Waits for an amount of time, specified in milliseconds.
This does not yield the execution of the lua state and nothing will execute in the state while asleep.
WARNING: Do NOT sleep for >500 ms if you have event handlers registered, unless you know exactly what you are doing. This is intended to be used to sleep for 1-100 ms, in order to wait for results or similar. A locked up (sleeping) lua state can slow the entire server down drastically if not careful.
"},{"location":"scripting/server/latest-server-reference/#mpsendchatmessageplayer_id-number-message-string","title":"MP.SendChatMessage(player_id: number, message: string)
","text":"Sends a chat message that only the specified player can see (or everyone if the ID is -1
). In the game, this will not appear as a directed message.
You can use this, for example, to tell a player why you cancelled their vehicle spawn, chat message, or similar, or to display some information about your server.
Example:
function ChatHandler(player_id, player_name, msg)\n if string.match(msg, \"darn\") then\n MP.SendChatMessage(player_id, \"Please do not use profanity.\") -- If the player sends a message containing \"darn\", notify the player and cancel the message\n return 1\n else\n return 0\n end\nend\n\nMP.RegisterEvent(\"onChatMessage\", \"ChatHandler\")\n
Example 2: function ChatHandler(player_id, player_name, msg)\n if msg == \"hello\" then\n MP.SendChatMessage(-1, \"Hello World!\") -- If the player sends the exact message \"hello\", announce to the entire server \"Hello World!\"\n return 0\n end\nend\n
"},{"location":"scripting/server/latest-server-reference/#mptriggerclienteventplayer_id-number-event_name-string-data-string-boolean","title":"MP.TriggerClientEvent(player_id: number, event_name: string, data: string) -> boolean
","text":"until v3.1.0
"},{"location":"scripting/server/latest-server-reference/#mptriggerclienteventplayer_id-number-event_name-string-data-string-booleanstring","title":"MP.TriggerClientEvent(player_id: number, event_name: string, data: string) -> boolean,string
","text":"since v3.1.0
"},{"location":"scripting/server/latest-server-reference/#mptriggerclienteventjsonplayer_id-number-event_name-string-data-table-booleanstring","title":"MP.TriggerClientEventJson(player_id: number, event_name: string, data: table) -> boolean,string
","text":"since v3.1.0
Will call the given event with the given data on the specified client (-1 for broadcast). This event can then be handled in a clientside lua mod, see the \"Client Scripting\" documentation for this.
Will return true
if it was able to send the message (for id = -1
, so broadcasts, its always true
), and false
if the player with that ID doesn't exist or is disconnected but still has an ID (this is a known issue).
If false
is returned, it makes no sense to retry this event, and a response (if any was expected) shouldn't be expected.
Since v3.1.0, the second return value contains an error message if the function failed. Also since this version, the *Json
version of the function takes a table as the data argument, and converts it to json. This is simply a shorthand for MP.TriggerClientEvent(..., Util.JsonEncode(mytable))
.
MP.GetPlayerCount() -> number
","text":"Returns the amount of players currently in the server.
"},{"location":"scripting/server/latest-server-reference/#mpgetpositionrawpid-number-vid-number-tablestring","title":"MP.GetPositionRaw(pid: number, vid: number) -> table,string
","text":"Returns the current position of the vehicle vid
(vehicle id) of player pid
(player id), and an error string if an error occurred.
The table is decoded from a position packet, so it has a variety of data including position and rotation (that's why this function is postfixed \"Raw\").
Example:
local player_id = 4\nlocal vehicle_id = 0\n\nlocal raw_pos, error = MP.GetPositionRaw(player_id, vehicle_id)\n\nif error == \"\" then\n print(raw_pos)\nelse\n print(error)\nend\n
Output: {\n tim: 49.824, // Time since spawn\n rvel: { // Rotational velocity\n 1: -1.33564e-05,\n 2: -9.16553e-06,\n 3: 8.33364e-07,\n }, \n vel: { // Velocity\n 1: -4.29755e-06,\n 2: -5.79335e-06,\n 3: 4.95236e-06,\n },\n pos: { // Position\n 1: 269.979,\n 2: -759.068,\n 3: 46.554,\n },\n ping: 0.0125, // Vehicle latency\n rot: { // Rotation\n 1: -0.00559953,\n 2: 0.00894832,\n 3: 0.772266,\n 4: 0.635212,\n },\n}\n
Example 2: local player_id = 4\nlocal vehicle_id = 0\n\nlocal raw_pos, error = MP.GetPositionRaw(player_id, vehicle_id)\nif error = \"\" then\n local x, y, z = table.unpack(raw_pos[\"pos\"])\n\n print(\"X:\", x)\n print(\"Y:\", y)\n print(\"Z:\", z)\nelse\n print(error)\nend\n
Output: X: -603.459\nY: -175.078\nZ: 26.9505\n
"},{"location":"scripting/server/latest-server-reference/#mpisplayerconnectedplayer_id-number-boolean","title":"MP.IsPlayerConnected(player_id: number) -> boolean
","text":"Whether the player is connected and if the server has received a UDP packet from them.
Example:
local player_id = 8\nprint(MP.IsPlayerConnected(player_id)) -- Check if player with ID 8 is properly connected.\n
Output: true\n
"},{"location":"scripting/server/latest-server-reference/#mpgetplayernameplayer_id-number-string","title":"MP.GetPlayerName(player_id: number) -> string
","text":"Gets the display-name of the player.
Example:
local player_id = 4\nprint(MP.GetPlayerName(player_id)) -- Get the name of the player with ID 4\n
Output: ilovebeammp2004\n
"},{"location":"scripting/server/latest-server-reference/#mpremovevehicleplayer_id-number-vehicle_id-number","title":"MP.RemoveVehicle(player_id: number, vehicle_id: number)
","text":"Removes the specified vehicle for the specified player.
Example:
local player_id = 3\nlocal player_vehicles = MP.GetPlayerVehicles(player_id)\n\n-- Loop over all of player 3's vehicles and delete them\nfor vehicle_id, vehicle_data in pairs(player_vehicles) do\n MP.RemoveVehicle(player_id, vehicle_id)\nend\n
"},{"location":"scripting/server/latest-server-reference/#mpgetplayervehiclesplayer_id-number-table","title":"MP.GetPlayerVehicles(player_id: number) -> table
","text":"Returns a table of all vehicles the player currently has. Each entry in the table is a mapping from vehicle ID to vehicle data (which is currently a raw json string).
Example:
local player_id = 3\nlocal player_vehicles = MP.GetPlayerVehicles(player_id)\n\nfor vehicle_id, vehicle_data in pairs(player_vehicles) do\n local start = string.find(vehicle_data, \"{\")\n local formattedVehicleData = string.sub(vehicle_data, start, -1)\n print(Util.JsonDecode(formattedVehicleData))\nend\n
Output: {\n pid: 0,\n pro: \"0\",\n rot: {\n 1: 0,\n 2: 0,\n 3: 0.776866,\n 4: 0.629665,\n },\n jbm: \"miramar\",\n vcf: {\n parts: {\n miramar_exhaust: \"miramar_exhaust\",\n miramar_shock_R: \"miramar_shock_R\",\n miramar_taillight: \"miramar_taillight\",\n miramar_door_RL: \"miramar_door_RL\"\n // ... continue\n },\n paints: {\n 1: {\n roughness: 1,\n metallic: 0,\n clearcoat: 1,\n baseColor: {\n 1: 0.85,\n 2: 0.84,\n 3: 0.8,\n 4: 1.2,\n },\n clearcoatRoughness: 0.09,\n } // ... continue\n },\n partConfigFilename: \"vehicles/miramar/base_M.pc\",\n vars: {},\n mainPartName: \"miramar\",\n },\n pos: {\n 1: 283.669,\n 2: -754.332,\n 3: 48.2151,\n },\n vid: 64822,\n ign: 0,\n}\n
"},{"location":"scripting/server/latest-server-reference/#mpgetplayers-table","title":"MP.GetPlayers() -> table
","text":"Returns a table of all connected players. This table maps IDs to Names, like so:
{\n 0: \"LionKor\",\n 1: \"JohnDoe\"\n}\n
"},{"location":"scripting/server/latest-server-reference/#mpisplayerguestplayer_id-number-boolean","title":"MP.IsPlayerGuest(player_id: number) -> boolean
","text":"Whether the player is a guest. A guest is someone who didn't log in, and instead chose to play as a guest. Their name is usually guest
followed by a long number.
Because guests are anonymous, you may want to disallow them to join, if so it is recommended to use the onPlayerAuth
is_guest
argument instead.
MP.DropPlayer(player_id: number, [reason: string])
","text":"Kicks the player with the specified ID. The reason parameter is optional.
function ChatHandler(player_id, player_name, message)\n if string.match(message, \"darn\") then\n MP.DropPlayer(player_id, \"Profanity is not allowed\")\n return 1\n else\n return 0\n end\nend \n
"},{"location":"scripting/server/latest-server-reference/#mpgetstatememoryusage-number","title":"MP.GetStateMemoryUsage() -> number
","text":"Returns the memory usage of the current Lua state in bytes.
"},{"location":"scripting/server/latest-server-reference/#mpgetluamemoryusage-number","title":"MP.GetLuaMemoryUsage() -> number
","text":"Returns the memory usage of all lua states combined, in bytes.
"},{"location":"scripting/server/latest-server-reference/#mpgetplayeridentifiersplayer_id-number-table","title":"MP.GetPlayerIdentifiers(player_id: number) -> table
","text":"Returns a table with information about the player, such as BeamMP forum ID, IP address and Discord account ID. Discord ID will only be returned if the user has it linked to their forum account.
You can find a users forum ID by navigating to https://forum.beammp.com/u/USERNAME.json
and looking for \"user\": {\"id\": 123456}
. A BeamMP ID is unique to the player and cannot be changed unlike the username.
Example:
local player_id = 5\nprint(MP.GetPlayerIdentifiers(player_id))\n
Output: {\n ip: \"127.0.0.1\",\n discord: \"12345678987654321\",\n beammp: \"1234567\",\n}\n
Until v3.1.0 the ip
field is incorrect and will not work as intended. Fixed in v3.1.0.
MP.Set(setting: number, ...)
","text":"Sets a ServerConfig setting temporarily. For this, the MP.Settings
table is useful.
Example:
MP.Set(MP.Settings.Debug, true) -- Turns on debug mode\n
"},{"location":"scripting/server/latest-server-reference/#mpsettings-table","title":"MP.Settings -> table
","text":"Table map of setting ID's to name. Used with MP.Set
to change ServerConfig settings.
Example:
print(MP.Settings)\n
Output: {\n MaxPlayers: 3,\n Debug: 0,\n Name: 5,\n Description: 6,\n MaxCars: 2,\n Private: 1,\n Map: 4,\n}\n
"},{"location":"scripting/server/latest-server-reference/#util-functions","title":"Util Functions","text":""},{"location":"scripting/server/latest-server-reference/#utiljson","title":"Util.Json*
","text":"Since BeamMP-Server v3.1.0
.
This is a builtin JSON library, which is usually much faster than any Lua JSON library. Behind the scenes, C++'s nlohmann::json
library is used, which is JSON compliant, full-coverage unit tested and continuously being fuzzed.
Util.JsonEncode(table: table) -> string
","text":"Encodes a Lua table into a JSON string, recursively (tables inside tables inside tables ... work as expected). All primitive types are respected, functions, userdata and similar are ignored.
The resulting JSON is minified and can be pretty-printed by using Util.JsonPrettify
to prettify it.
Example:
local player = {\n name = \"Lion\",\n age = 69,\n skills = { \"skill A\", \"skill B\" }\n}\nlocal json = Util.JsonEncode(player)\n
Results in:
{\"name\":\"Lion\",\"age\":69,\"skills\":[\"skill A\",\"skill B\"]}\n
"},{"location":"scripting/server/latest-server-reference/#utiljsondecodejson-string-table","title":"Util.JsonDecode(json: string) -> table
","text":"Decodes JSON into a Lua table. Will return nil
if this failed, and print an error.
Example:
local json = \"{\\\"message\\\":\\\"OK\\\",\\\"code\\\":200}\"\nlocal tbl = Util.JsonDecode(json)\n
Results in:
{\n message = \"OK\",\n code = 200,\n}\n
"},{"location":"scripting/server/latest-server-reference/#utiljsonprettifyjson-string-string","title":"Util.JsonPrettify(json: string) -> string
","text":"Add indentation and newlines to the json to make it more readable for humans.
Example:
local myjson = Util.JsonEncode({ name=\"Lion\", age = 69, skills = { \"skill A\", \"skill B\" } })\n\nprint(Util.JsonPrettify(myjson))\n
Results in:
{\n \"age\": 69.0,\n \"name\": \"Lion\",\n \"skills\": [\n \"skill A\",\n \"skill B\"\n ]\n}\n
"},{"location":"scripting/server/latest-server-reference/#utiljsonminifyjson-string-string","title":"Util.JsonMinify(json: string) -> string
","text":"Removes indentation, newlines and any other whitespace. Not necessary unless you called Util.JsonPrettify
, as all output from Util.Json*
is already minified.
Example:
local pretty = Util.JsonPrettify(Util.JsonEncode({ name=\"Lion\", age = 69, skills = { \"skill A\", \"skill B\" } }))\n\nprint(Util.JsonMinify(pretty))\n
Results in:
{\"age\":69.0,\"name\":\"Lion\",\"skills\":[\"skill A\",\"skill B\"]}\n
"},{"location":"scripting/server/latest-server-reference/#utiljsonflattenjson-string-string","title":"Util.JsonFlatten(json: string) -> string
","text":"Creates a JSON object whose key are flattened to JSON pointers, according to RFC 6901. You can restore the original with Util.JsonUnflatten()
. For this to work, all values need to be primitives.
Example:
local json = Util.JsonEncode({ name=\"Lion\", age = 69, skills = { \"skill A\", \"skill B\" } })\nprint(\"normal: \" ..json)\nprint(\"flattened: \" .. Util.JsonFlatten(json))\nprint(\"flattened pretty: \" .. Util.JsonPrettify(Util.JsonFlatten(json)))\n
Results in:
normal: {\"age\":69.0,\"name\":\"Lion\",\"skills\":[\"skill A\",\"skill B\"]}\nflattened: {\"/age\":69.0,\"/name\":\"Lion\",\"/skills/0\":\"skill A\",\"/skills/1\":\"skill B\"}\nflattened pretty: {\n \"/age\": 69.0,\n \"/name\": \"Lion\",\n \"/skills/0\": \"skill A\",\n \"/skills/1\": \"skill B\"\n}\n
"},{"location":"scripting/server/latest-server-reference/#utiljsonunflattenjson-string-string","title":"Util.JsonUnflatten(json: string) -> string
","text":"Restores the arbitrary nesting of a JSON value that has been flattened before using the Util.JsonFlatten()
function.
Util.JsonDiff(a: string, b: string) -> string
","text":"Creates a JSON diff according to RFC 6902 (http://jsonpatch.com/). This diff can then be applied as a patch via Util.JsonDiffApply()
. Returns the diff.
Util.JsonDiffApply(base: string, diff: string) -> string
","text":"Applies the JSON diff
to base
as a JSON patch (RFC 6902, http://jsonpatch.com/). Returns the result.
Util.Random*
","text":"Since BeamMP-Server v3.1.0
.
Util.Random() -> float
","text":"Returns a float between 0 and 1.
Example:
local rand = Util.Random()\nprint(\"rand: \" .. rand)\n
Results in:
rand: 0.135477\n
"},{"location":"scripting/server/latest-server-reference/#utilrandomintrangemin-int-max-int-int","title":"Util.RandomIntRange(min: int, max: int) -> int
","text":"Returns an integer between min and max.
Example:
local randInt = Util.RandomIntRange(1, 100)\nprint(\"randInt: \" .. randInt)\n
Results in:
randInt: 69\n
"},{"location":"scripting/server/latest-server-reference/#utilrandomrangemin-number-max-number-float","title":"Util.RandomRange(min: number, max: number) -> float
","text":"Returns a float between min and max.
Example:
local randFloat = Util.RandomRange(1, 1000)\nprint(\"randFloat: \" .. randFloat)\n
Results in:
randFloat: 420.6969\n
"},{"location":"scripting/server/latest-server-reference/#utilloginfoparams-et-al-since-v330","title":"Util.LogInfo(params: ...)
et al (since v3.3.0)","text":"Util.LogInfo(\"Hello, World!\")\nUtil.LogWarn(\"Cool warning\")\nUtil.LogError(\"Oh no!\")\nUtil.LogDebug(\"hi\")\n
produces [19/04/24 11:06:50.142] [Test] [INFO] Hello, World! \n[19/04/24 11:06:50.142] [Test] [WARN] Cool warning \n[19/04/24 11:06:50.142] [Test] [ERROR] Oh no!\n[19/04/24 11:06:50.142] [Test] [DEBUG] hi\n
Supports the exact same printing / dumping of data as print()
does.
Util.DebugExecutionTime() -> table
","text":"When Lua code runs in the server, each event handler's execution is timed. The min, max, average (mean) and standard deviation of these execution times are calculated, and are returned in a table by this function. The calculation takes place incrementally, so every time an event handler runs the min, max, average and standard deviation are updated. This way, Util.DebugExecutionTime()
does not usually take any significant amount of time to execute (sub 0.25ms).
It returns a table like this:
[[table: 0x7af6d400aca0]]: {\n printStuff: [[table: 0x7af6d400be60]]: {\n mean: 0.250433,\n n: 76,\n max: 0.074475,\n stdev: 0.109405,\n min: 0.449274,\n },\n onInit: [[table: 0x7af6d400b130]]: {\n mean: 0.033095,\n n: 1,\n max: 0.033095,\n stdev: 0,\n min: 0.033095,\n },\n} \n
Per event handler, returns the following data: n
: Amount of times the event triggered and a handler was calledmean
: Average/mean of all execution times, in msmax
: The longest execution time, in msmin
: The shortest execution time, in msstdev
: The standard deviation of all execution time averages, in msHere's a function you can use to pretty-print this data:
function printDebugExecutionTime()\n local stats = Util.DebugExecutionTime()\n local pretty = \"DebugExecutionTime:\\n\"\n local longest = 0\n for name, t in pairs(stats) do\n if #name > longest then\n longest = #name\n end\n end\n for name, t in pairs(stats) do\n pretty = pretty .. string.format(\"%\" .. longest + 1 .. \"s: %12f +/- %12f (min: %12f, max: %12f) (called %d time(s))\\n\", name, t.mean, t.stdev, t.min, t.max, t.n)\n end\n print(pretty)\nend\n
You may call it like this to debug your code if it's slow:
-- event to print the debug times\nMP.RegisterEvent(\"printStuff\", \"printDebugExecutionTime\")\n-- run every 5000 ms = 5 seconds (or 10, or 60, whatever makes sense for you\nMP.CreateEventTimer(\"printStuff\", 5000)\n
"},{"location":"scripting/server/latest-server-reference/#fs-functions","title":"FS Functions","text":"FS
functions are filesystem functions, which aim to be better than the default Lua capabilities.
Please always use /
as a separator when specifying paths, as this is cross-platform (windows, linux, macos, ...).
FS.CreateDirectory(path: string) -> bool,string
","text":"Creates the specified directory, and any parent directories if they don't exist. Behavior is roughly equivalent to the common linux command mkdir -p
.
If successful, returns true
and \"\"
. If creating the directory failed, false
and an error message (string
) is returned.
Example:
local success, error_message = FS.CreateDirectory(\"data/mystuff/somefolder\")\n\nif not success then\n print(\"failed to create directory: \" .. error_message)\nelse\n -- do something with the directory\nend\n\n-- Be careful not to do this! This will ALWAYS be true!\nif error_message then\n -- ...\nend\n
"},{"location":"scripting/server/latest-server-reference/#fsremovepath-string-boolstring","title":"FS.Remove(path: string) -> bool,string
","text":"Removes the specified file or folder.
Returns true
if an error occured, with an error message in the second return value.
Example:
local error, error_message = FS.Remove(\"myfile.txt\")\n\nif error then\n print(\"failed to delete myfile: \" .. error_message)\nend\n
"},{"location":"scripting/server/latest-server-reference/#fsrenamepatha-string-pathb-string-boolstring","title":"FS.Rename(pathA: string, pathB: string) -> bool,string
","text":"Renames (or moves) pathA
to pathB
.
Returns true
if an error occured, with an error message in the second return value.
FS.Copy(pathA: string, pathB: string) -> bool,string
","text":"Copies pathA
to pathB
.
Returns true
if an error occured, with an error message in the second return value.
FS.GetFilename(path: string) -> string
","text":"Returns the last part of a path, which is usually the filename. Here are some example inputs + outputs:
input -> output\n\n\"my/path/a.txt\" -> \"a.txt\"\n\"somefile.txt\" -> \"somefile.txt\"\n\"/awesome/path\" -> \"path\"\n
"},{"location":"scripting/server/latest-server-reference/#fsgetextensionpath-string-string","title":"FS.GetExtension(path: string) -> string
","text":"Returns the extension of the file, or an empty string if no extension exists. Here are some example inputs + outputs
input -> output\n\n\"myfile.txt\" -> \".txt\"\n\"somefile.\" -> \".\"\n\"/awesome/path\" -> \"\"\n\"/awesome/path/file.zip.txt\" -> \".txt\"\n\"myexe.exe\" -> \".exe\"\n
"},{"location":"scripting/server/latest-server-reference/#fsgetparentfolderpath-string-string","title":"FS.GetParentFolder(path: string) -> string
","text":"Returns the path to the parent directory, i.e. the folder a file or folder is contained in. Here are some example inputs + outputs:
input -> output\n\n\"/var/tmp/example.txt\" -> \"/var/tmp\"\n\"/\" -> \"/\"\n\"mydir/a/b/c.txt\" -> \"mydir/a/b\"\n
"},{"location":"scripting/server/latest-server-reference/#fsexistspath-string-bool","title":"FS.Exists(path: string) -> bool
","text":"Returns true
if the path exists, false
if it doesn't.
FS.IsDirectory(path: string) -> bool
","text":"Returns true
if the specified path is a directory, false
if it's not. Note that false
does NOT imply that the path is a file (see FS.IsFile()
).
FS.IsFile(path: string) -> bool
","text":"Returns true
if the specified path is a regular file (not a symlink, hardlink, block device, etc.), false
if it's not. Note taht false
does NOT imply that the path is a directory (see FS.IsDirectory()
).
FS.ListDirectories(path: string) -> table
","text":"Returns a table of all the directories in the given path.
Example:
print(FS.ListDirectories(\"Resources\"))\n
Results in: {\n 1: \"Client\",\n 2: \"Server\"\n}\n
"},{"location":"scripting/server/latest-server-reference/#fslistfilespath-string-table","title":"FS.ListFiles(path: string) -> table
","text":"Returns a table of all the files in the given path.
Example:
print(FS.ListFiles(\"Resources/Server/examplePlugin\"))\n
Results in: {\n 1: \"example.json\",\n 2: \"example.lua\"\n}\n
"},{"location":"scripting/server/latest-server-reference/#fsconcatpaths-string","title":"FS.ConcatPaths(...) -> string
","text":"Adds together (concatenates) all arguments with the system's preferred path separator.
Example:
FS.ConcatPaths(\"a\", \"b\", \"/c/d/e/\", \"/f/\", \"g\", \"h.txt\")\n
results in a/b/c/d/e/f/g/h.txt\n
Also resolves ..
, if that exists in the path at any point. This function is safer than concatenating strings in lua, and respects the platform's separators.
Please always use /
as a separator when specifying paths, as this is cross-platform (windows, linux, macos, ...).
1
, like return 1
.A player join triggers the following events in the given order:
onPlayerAuth
onPlayerConnecting
onPlayerJoining
onPlayerJoin
onInit
","text":"Arguments: NONE Cancellable: NO
Triggered right after all files in the plugin were initialized.
"},{"location":"scripting/server/latest-server-reference/#onconsoleinput","title":"onConsoleInput
","text":"Arguments: input: string
Cancellable: NO
Triggered when the BeamMP console receives an input.
"},{"location":"scripting/server/latest-server-reference/#onshutdown","title":"onShutdown
","text":"Arguments: NONE Cancellable: NO
Triggered when the server shuts down. Currently happens after all players were kicked.
"},{"location":"scripting/server/latest-server-reference/#game-related-events","title":"Game-Related Events","text":""},{"location":"scripting/server/latest-server-reference/#onplayerauth","title":"onPlayerAuth
","text":"Arguments: player_name: string
, player_role: string
, is_guest: bool
, identifiers: table -> beammp, ip
Cancellable: YES
First event that gets triggered when a player wants to join. A player can be denied from joining by returning 1
or a reason (string
) from the handler function.
function myPlayerAuthorizer(name, role, is_guest, identifiers)\n return \"Sorry, you cannot join at this time.\"\nend\nMP.RegisterEvent(\"onPlayerAuth\", \"myPlayerAuthorizer\")\n
"},{"location":"scripting/server/latest-server-reference/#onplayerconnecting","title":"onPlayerConnecting
","text":"Arguments: player_id: number
Cancellable: NO
Triggered when a player first starts connecting, after onPlayerAuth
.
onPlayerJoining
","text":"Arguments: player_id: number
Cancellable: NO
Triggered when a player has finished loading all mods, after onPlayerConnecting
.
onPlayerDisconnect
","text":"Arguments: player_id: number
Cancellable: NO
Triggered when a player disconnects.
"},{"location":"scripting/server/latest-server-reference/#onchatmessage","title":"onChatMessage
","text":"Arguments: player_id: number
, player_name: string
, message: string
Cancellable: YES
Triggered when a player sends a chat message. When cancelled, it will not show the chat message to anyone, not even the player who sent it.
"},{"location":"scripting/server/latest-server-reference/#onvehiclespawn","title":"onVehicleSpawn
","text":"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.
onVehicleEdited
","text":"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 to get positional and rotational data.
onVehicleDeleted
","text":"Arguments: player_id: number
, vehicle_id: number
Cancellable: NO
Triggered when a player deletes their vehicle.
"},{"location":"scripting/server/latest-server-reference/#onvehiclereset","title":"onVehicleReset
","text":"Arguments: player_id: number
, vehicle_id: number
, data: string
Cancellable: NO
Triggered when a player resets their vehicle. data
is the car's updated position and rotation however does not include the vehicles configuration. You can use MP.GetPlayerVehicles to get the vehicles configuration.
onFileChanged
","text":"since v3.1.0
Arguments: path: string
Cancellable: NO
Triggered if a file changes in the Resources/Server
directory or any subdirectory of it.
Any file change in the Resources/Server/<plugin>
directory (not in a subfolder of it) will trigger a Lua state reload, and an onFileChanged
event.
Any file in subfolders of Resources/Server/<plugin>
, such as Resources/Server/<plugin>/lua/stuff.lua
, will not trigger a state reload and will only trigger an onFileChanged
event. This way, you can reload it yourself in the correct way (or not reload it).
This applies to all files, not just .lua
files.
The path
is relative to the root of the server, for example Resources/Server/myplugin/myfile.txt
. You can do further processing on this string with the FS.*
family of functions, such as extracting the name or extension (FS.GetExtension(...)
, FS.GetFilename(...)
, ...).
Note: Files added after the server is started are not tracked as of v3.1.0.
"},{"location":"scripting/server/latest-server-reference/#migrating-from-old-lua","title":"Migrating from old Lua","text":"This is a short run-down of the basic steps to take to migrate from old to new lua.
"},{"location":"scripting/server/latest-server-reference/#understand-how-the-new-lua-works","title":"Understand how the new lua works","text":"For this, please read through the section \"Introduction\" and all its subsections carefully. It's necessary to do the next steps properly.
"},{"location":"scripting/server/latest-server-reference/#search-replace","title":"Search & Replace","text":"First, you should search and replace all MP functions. The substitution should add an MP.
infront of all MP functions, except print()
.
Example:
local players = GetPlayers()\nprint(#players)\n
becomes local players = MP.GetPlayers()\nprint(#players) -- note how print() doesn't change\n
"},{"location":"scripting/server/latest-server-reference/#goodbye-threads-hello-event-timers","title":"Goodbye Threads, Hello Event Timers!","text":"As discussed in the introduction, threads are event timers. For any calls to CreateThread
, replace it with a call to CreateEventTimer
. Carefully inspect the timing your old CreateThread had (the number was X per second), and think about what the event timer timeout value is for this (which is in milliseconds). Also keep in mind that instead of a function name, it takes an event name, so you will have to register an event as well.
Example:
CreateThread(\"myFunction\", 2) -- calls \"myFunction\" twice per second\n
becomes MP.RegisterEvent(\"myEvent\", \"myFunction\") -- registering our event for the timer\nMP.CreateEventTimer(\"myEvent\", 500) -- 500 milliseconds = 2 times per second\n
If you have many event timers, it makes sense to see if you can combine them, e.g. by creating a \"every minute\" event and registering multiple functions to it which need to be called every minute, instead of having multiple event timers. Each event timer costs the server a little bit of time to trigger.
"},{"location":"scripting/server/latest-server-reference/#no-more-implicit-event-calling","title":"No more implicit event calling","text":"You need to register all your events. You cannot rely on function names. In the old lua, this was unclear, but in the new lua this is usually enforced. A good pattern is:
MP.RegisterEvent(\"onChatMessage\", \"chatMessageHandler\")\n-- or \nMP.RegisterEvent(\"onChatMessage\", \"handleChatMessage\")\n
This is a better pattern than calling the handler the same as the event, which is misleading and confusing.
"},{"location":"scripting/server/v2-server-reference/","title":"Version 2.X (Deprecated)","text":"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.
"},{"location":"scripting/server/v2-server-reference/#server-scripting-reference","title":"Server Scripting Reference","text":""},{"location":"scripting/server/v2-server-reference/#server-version-2x","title":"Server Version 2.X","text":"Warning
BeamMP server version 2.X is now unsupported. This documentation is provided as a reference only. Please update to the latest version for maintenance and support.
This is 2.x scripting. Only refer to this if your server is old/outdated (version 2.x.x). For the latest documentation see here.
"},{"location":"scripting/server/v2-server-reference/#notes","title":"Notes","text":"To get the output of a function in the server console you have to wrap it in a print()
statement. For example: print(GetPlayerName(0))
will return the name of your server's first player.
<PlayersServerID>
starts at 0.
Returns the player's discord name as a string
function onPlayerJoin(playerID)\n local name = GetPlayerName(playerID)\n -- Do something\nend\n
"},{"location":"scripting/server/v2-server-reference/#getplayerdiscordidplayersserverid","title":"GetPlayerDiscordID(playersServerID)","text":"Returns the player's discord name as a string
function onPlayerJoin(playerID)\n local name = GetPlayerDiscordID(playerID)\n -- Do something\nend\n
"},{"location":"scripting/server/v2-server-reference/#getplayerhwidplayersserverid","title":"GetPlayerHWID(playersServerID)","text":"Returns the player's discord ID as a string
function onPlayerJoin(playerID)\n local name = GetPlayerHWID(playerID)\n -- Do something\nend\n
"},{"location":"scripting/server/v2-server-reference/#getplayervehiclesplayersserverid","title":"GetPlayerVehicles(playersServerID)","text":"Returns the player's vehicles as an object/array
function onChatMessage(playerID, senderName, message)\n local vehicleList = GetPlayerVehicles(playerID)\n for vehicleID, vehicleData in pairs(vehicleList) do\n -- Do something\n -- Could also be used to check how many vehicles a player have\n end\nend\n
"},{"location":"scripting/server/v2-server-reference/#dropplayerplayersserverid","title":"DropPlayer(playersServerID)","text":"Drops the connection for a specific player. Essentially Kicking them
function onVehicleSpawn(playerID, vehicleID, vehicleData)\n -- Do something \n DropPlayer(playerID)\nend\n
"},{"location":"scripting/server/v2-server-reference/#sendchatmessageplayersserverid-message","title":"SendChatMessage(playersServerID, message)","text":"Sends a message over the network to the specified user. Use -1 for everyone
function onPlayerJoin(playerID)\n SendChatMessage(-1, \"Someone just joined!\")\nend\n
"},{"location":"scripting/server/v2-server-reference/#cancelevent-depreciated","title":"CancelEvent() -- DEPRECIATED","text":"Cancels the event from happening. This might be going soon. Use return 1
to cancel the event.
If declared in a lua file, it will be called once C++ successfully finished loading the current lua file
function onInit()\n print(\"Server ready\")\nend\n
"},{"location":"scripting/server/v2-server-reference/#exit","title":"exit()","text":"Will close the server
function onInit()\n print(\"Server Ready. But who needs a server which is running\")\n exit() -- Stops the server\nend\n
"},{"location":"scripting/server/v2-server-reference/#createthreadfunctionname-callinterval","title":"CreateThread(functionName, callInterval)","text":"Will execute the function on a dedicated thread and it will run callInterval times a second. 1 = It will run every second.
function yourFunction()\n for i = 1,10 do\n SendChatMessage(-1, \"Countdown: \"..i)\n Sleep(1000)\n end\nend\nCreateThread(\"yourFunction\", 30)\n
DEPRECIATED EXAMPLE Will execute the function on a dedicated thread
function yourFunction()\n for i = 1,10 do\n SendChatMessage(-1, \"Countdown: \"..i)\n Sleep(1000)\n end\nend\nCreateThread(\"yourFunction\", 30)\n
"},{"location":"scripting/server/v2-server-reference/#stopthreadfunctionname","title":"StopThread(functionName)","text":"Will stop trying to call the thread function of the current script
function yourFunction()\n delayExpired = false\n Sleep(10000)\n delayExpired = true\nend\nCreateThread(\"yourFunction\", 30)\n-- Do something\nif not delayExpired then\n StopThread(\"yourFunction\")\nelse\n -- Do something\nend\n
"},{"location":"scripting/server/v2-server-reference/#sleepmillisecs-depreciated","title":"Sleep(millisecs) - DEPRECIATED","text":"Will pause execution for the amount of time specified (warning doing so will pause the entire server if you didn't create a thread)
function countdown()\n for i = 1,10 do\n SendChatMessage(-1, \"Countdown: \"..i)\n Sleep(1000)\n end\nend\nCreateThread(\"countdown\", 10)\n
"},{"location":"scripting/server/v2-server-reference/#getplayercount","title":"GetPlayerCount()","text":"Will return how many players are connected
function onPlayerJoin(playerID)\n SendChatMessage(playerID, \"You are the \"..GetPlayerCount()..\"th player!\"\nend\n
"},{"location":"scripting/server/v2-server-reference/#removevehicleplayerserverid-vehicleid","title":"RemoveVehicle(playerServerID, VehicleID)","text":"Will despawn a vehicle
function onVehicleSpawn(playerID, vehicleID, vehicleData)\n if --[[ Vehicle data equal something it shouldn't be ]] then\n RemoveVehicle(playerID, vehicleIID)\n end\nend\n
"},{"location":"scripting/server/v2-server-reference/#getplayers","title":"GetPlayers()","text":"Will return a table of IDs with Names
local function onPlayerJoin(joinedPlayerID)\n local players = GetPlayers()\n for playerID, playerName in pairs(players) do\n if playerID == joinedPlayerID then\n -- Do something\n end\n end\nend\n
"},{"location":"scripting/server/v2-server-reference/#registereventeventname-functionname","title":"RegisterEvent(eventName, functionName)","text":"Will register that function to the event specified. Both must be strings
function anyEvent()\n -- Do something\n end\n RegisterEvent(\"onAnyEventHappen\", \"anyEvent\")\n -- Do something\n TriggerLocalEvent(\"onAnyEventHappen\")\n
"},{"location":"scripting/server/v2-server-reference/#triggerlocaleventeventname","title":"TriggerLocalEvent(eventName)","text":"Will call every registered function in the same plugin folder.
function anyEvent()\n -- Do something\n end\n RegisterEvent(\"onAnyEventHappen\", \"anyEvent\")\n -- Do something\n TriggerLocalEvent(\"onAnyEventHappen\")\n
"},{"location":"scripting/server/v2-server-reference/#triggerglobaleventeventname","title":"TriggerGlobalEvent(eventName)","text":"Will call every registered function with this event name.
-- File A\n function anyEvent()\n -- Do something\n end\n RegisterEvent(\"onAnyEventHappen\", \"anyEvent\")\n
-- File B\n TriggerGlobalEvent(\"onAnyEventHappen\")\n
"},{"location":"scripting/server/v2-server-reference/#triggerclienteventplayerserverid-eventname-data","title":"TriggerClientEvent(playerServerID, eventName, data)","text":"Will call that event with the given data on the specified client (-1 for broadcast)
function onPlayerJoin(playerServerID)\n TriggerClientEvent(playerServerID, \"anyEvent\", \"You just joined the server\")\n end\n RegisterEvent(\"onAnyEventHappen\", \"anyEvent\")\n
"},{"location":"scripting/server/v2-server-reference/#setconfigid-newvalue","title":"Set(configID, newValue)","text":"will set a config setting to the new specified value table below|
function onChatMessage(playerID, senderName, message)\n if playerID == adminPlayer then\n if message == --[[ anything ]] then\n Set(3, 10)\n end\n end\n end\n
"},{"location":"scripting/server/v2-server-reference/#list-of-available-config-settings-for-the-set-command","title":"List of available config settings for the Set()
command","text":"Note that these will not save to the config file.
Config ID Name Will only accept0
Debug setting true or false 1
Private setting true or false 2
Max car per player number 3
Max players number 4
Map string 5
Name string 6
Description string any other ID will result in a console warning"},{"location":"scripting/server/v2-server-reference/#list-of-available-events-for-scripting","title":"List of available events for scripting","text":""},{"location":"scripting/server/v2-server-reference/#default-events","title":"Default Events","text":"Example of how to use an event:
function onInit()\n RegisterEvent(\"onPlayerJoin\", \"onPlayerJoin\")\n end\n\n function onPlayerJoin(playerServerID)\n -- Do something\n end\n
If you dont want guests on your server:
function onInit()\n print(\"noGuests Ready\")\n RegisterEvent(\"onPlayerAuth\",\"onPlayerAuth\")\n end\n\n function onPlayerAuth(name, role, isGuest)\n if isGuest then\n return \"You must be signed in to join this server!\"\n end\n end\n
Event Parameters Description onPlayerAuth
The player's name, forum role, guest account (bool) A player has authenticated and is requesting to join onPlayerConnecting
The player's ID A player is loading in (Before loading the map) onPlayerJoining
The player's ID A player is loading the map and will be joined soon onPlayerJoin
The player's ID A player has joined and loaded in onPlayerDisconnect
The player's ID A player has disconnected onChatMessage
The sender's ID, name, and the chat message A chat message was sent. This would be good for making a commands system onVehicleSpawn
The player's ID, the vehicle ID, and the vehicle data This is called when someone spawns a vehicle onVehicleEdited
The player's ID, the vehicle ID, and the vehicle data This is called when someone edits a vehicle, or replaces their existing one onVehicleDeleted
The player's ID and the vehicle ID This is called when someone deletes a vehicle they own"},{"location":"scripting/server/v2-server-reference/#custom-events","title":"Custom Events","text":"Custom events can also be created for your own use. This is done very much the same to how the default ones are done.
Example of how to use a custom event:
function onInit()\n RegisterEvent(\"myCustomEvent\", \"myCustomEvent\")\n end\n\n function myCustomEvent(playerServerID, customData)\n -- Do something\n end\n
This can then be called either from client side or serverside using the respective functions.
"},{"location":"scripting/server/v2-server-reference/#players","title":"Players","text":"When a player connects to your server, they are assigned a serverID starting from 0 and counting upwards. serverIDs are reused; if a player leaves and re-joins they will not be assigned a new serverID, they will simply get another available one. When the server restarts, serverIDs will be reset.
"},{"location":"scripting/server/v2-server-reference/#static-identifiers","title":"Static Identifiers","text":"Players in BeamMP have 3 static identifiers which can be obtained from their serverID being their name, discordID, and their hardwareID or HWID. (though the latter of the aforementioned isn't implemented, we will act as if it is) Each of the three ID types has their own origins and strength's/weaknesses to using them for player identification.
ID TYPE PROS CONS FUNCTION TO OBTAIN name easy to obtain, straightforward not secure GetPlayerName() discordID fairly secure inconvenient GetPlayerDiscordID() HWID extremely secure hard to obtain GetPlayerHWID()"},{"location":"scripting/server/v2-server-reference/#vehicles","title":"Vehicles","text":"Vehicles in beamMP have 3 attributes that the server pays attention to, the owner's serverID, the vehicles vehicleID and it's data. The Owner's serverID is straight forward, it is the serverID, every vehicle also has an ID, vehicle IDs are not unique to the vehicle; two vehicles may have the same ID, assuming they're from different owners. Unlike serverIDs, vehicleIDs are reused, for example, if I have 4 vehicles, their IDs are 0, 1, 2 and, 3 if I delete the vehicle in vehicleID 2, I will have 0, 1 and, 3, when I spawn a new vehicle, the new vehicle will slot into ID 2. Lastly, the last attribute vehicles have is data, data contains a vehicle, name, parts, and other data; as the name implies. data is stored as a raw JSON string, so you will need a JSON library alternatively, you can manually step through the string and dig out the information you need.
"},{"location":"server/create-a-server/","title":"Server Installation","text":""},{"location":"server/create-a-server/#creating-a-server","title":"Creating a Server","text":"Basics of setting up the server application
"},{"location":"server/create-a-server/#overview","title":"Overview","text":"Creating a Home Server is free, hosting one with a VPS is easier and more secure
Servers are an integral part of BeamMP; players are connected to each other through the server. They run natively on Windows and Linux.
You can make private servers, which only people you invite can join, or public servers, which will show in our official server list.
Getting a server up and running is a process of a few steps! If you run into any issues, feel free to ask on our Forum or on our Discord server in the #support
channel. Also refer to the Server Maintenance section for more info.
Please make sure to read the LICENSE of the server before use.
Note: The server only supports IPv4. If you don't know which one you have, look at the IP address you see on whatsmyip.org - if it contains _:_
colons, it's IPv6. In that case, you should investigate further whether you also have an IPv4. You can call your ISP to find this out, or ask someone who lives with you (if they're tech-savvy, they might know!). IPv6 support is planned.
The setup consists of the following steps, you should follow all of them.
"},{"location":"server/create-a-server/#1-port-forwarding","title":"1. Port forwarding","text":"Info
If you are on a VPS (Virtual Private Server), Rootserver, or plan on hosting this server locally (with players in the same house as you), you can skip this step. This step is necessary if you want someone outside of your household to join your home-hosted server (outside of your local network).
DISCLAIMER:
Port forwarding is a risk.
By port forwarding, you understand the risks of opening up ports on your home network to the public and therefore void the right to hold BeamMP accountable for any and all damages that may happen to you or your household.
We take no responsibility for any content on any externally linked services or websites.
It is therefore recommended to host a server with one of our partnered services!
Please see this guide on how to port forward
"},{"location":"server/create-a-server/#partnered-hosting-services-paid","title":"Partnered Hosting Services (paid):","text":"Depending on your setup, you may need to let BeamMP-Server through your firewall. This is the case on Windows (turning the firewall off usually does not work), and on a lot of preinstalled Linux servers.\u00a0
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 \u201c1. Port Forwarding\u201d (usually 30814).
If you have issues, also feel free to ask on our Forum or on our Discord server in the #support
channel.
The \u201cAuthentication Key\u201d, often called \u201cAuthKey\u201d, is necessary for making a public server accessible by the serverlist. Though it is recommended to add the authkey to private servers as well. You have a limited number of keys. One key can be used on one server at a time, so you cannot start two servers at the same time with the same key. More keys can be obtained by supporting the project. Read this article for more information.
Warning
DO NOT EVER SHARE THIS KEY OR SHOW IT TO ANYONE. TREAT THIS LIKE A PASSWORD.
You will need a Discord account for this step. This is necessary to prevent spam.
"},{"location":"server/create-a-server/#21-accessing-the-keys-page","title":"2.1. Accessing the keys page","text":"Login with Discord to the Keymaster. From the Keymaster homepage click on \"Keys\" on the left of the screen:
"},{"location":"server/create-a-server/#22-creating-a-key","title":"2.2. Creating a key","text":"To create your key, click on the green \"+\" button in the top right.\u00a0
"},{"location":"server/create-a-server/#23-filling-out-the-key-information","title":"2.3. Filling out the key information","text":"Next, fill out the Server Name field (this is just the keys name and not the actual name of the server on the list), then click \"Create\". Example:
It should, in the end, look something like this:
"},{"location":"server/create-a-server/#24-copying-the-key","title":"2.4. Copying the key","text":"Now copy the text in the \u201cKey\u201d field, in this example that is 3173a2e-6az0-4542-a3p0-ddqq5ff95558
and hold onto it for the next step. You can do this by clicking the clipboard on the right of the key:
The BeamMP-Server is available for Windows and Linux. The next two sections are dedicated to Windows and Linux each.\u00a0
"},{"location":"server/create-a-server/#3a-installation-on-windows","title":"3.a. Installation on Windows","text":"For the Linux installation, see the next step.
Please ensure you have port-forwarded before attempting to host a server at home! Without you ports being forwarded, you cannot host a server to the public!
BeamMP-Server.exe
.BeamMP-Server.exe
there. This is where your server will live.ServerConfig.toml
file next to your BeamMP-Server.exe
.BeamMP-Server.exe
using [Right click] > Send to > Desktop (create shortcut).Now proceed to step 4. Configuration.
"},{"location":"server/create-a-server/#3b-installation-on-linux","title":"3.b. Installation on Linux","text":""},{"location":"server/create-a-server/#using-our-build-recommended","title":"Using our build (recommended)","text":"This step will work on all distributions we provide binaries for here. If you're on a different distribution or architecture, refer to the \"Building from source\u201d step below.
BeamMP-Server-xxx
from now on, where xxx
denotes the version for the distro you're using.BeamMP-Server-xxx
, among others which you can ignore for now. Make a folder somewhere and put the BeamMP-Server-xxx
there. This is where your server will live.BeamMP-Server-xxx
in, and run chmod +x BeamMP-Server-xxx
. This ensures that you have permissions to run it../BeamMP-Server-xxx
. This will generate all the necessary files for you, once you see text you can close it and proceed to the next step. You should see a ServerConfig.toml
file next to your BeamMP-Server-xxx
.beammpserver
(or similar), as we do NOT recommend running the server as root, sudo or with your personal user account. You should then take steps to make sure that you start the server as this user only.Now proceed to step \"4. Configuration\".
"},{"location":"server/create-a-server/#building-from-source","title":"Building from source","text":"Other distributions in addition to the ones that already have a binary here are likely to work too, but aren't officially supported. If you want to build it yourself you can do it by downloading the source on our GitHub, a tutorial can be found here.
At the end, make sure to run your server once with ./BeamMP-Server
and then proceed to the next step.
Now that you ran the server once, it should have created some files and probably uttered an error or two. This is because we are not yet done. Your folder should have these files:
They are called \u201cServerConfig.toml\u201d, \u201cServer.log\u201d and \u201cBeamMP-Server.exe\u201d! (Depending on your settings, you might not see the [.toml] [.log] [.exe] extentions)
Open the ServerConfig.toml
with a text editor such as Notepad
. You can do this with [Right Click] \u2192 \u201cOpen With\u2026\u201d and then selecting a text editor.
You should see something like this:
[General]\nAuthKey = ''\nDebug = false\nDescription = 'BeamMP Default Description'\nMap = '/levels/gridmap_v2/info.json'\nMaxCars = 1\nMaxPlayers = 10\nName = 'BeamMP Server'\nPort = 30814\nPrivate = false\nResourceFolder = 'Resources'\n
This is your configuration file. It uses a format called TOML. Refer to the Server Maintenance section for more info on this file.
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:
AuthKey = '3173a2e-6az0-4542-a3p0-ddqq5ff95558'\n
Give your server a name, too, in the Name
field. You can format this with colors and more, please refer to this section on Name customization in the server maintenance page. 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
.
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.
Vehicle mods and map mods are different to install, but both require you to put them in your server's (Resources/Client
) folder. Simply slide any mod you want to add in that folder.
Warning
Should you receive a \"done\" or \"start\" message when trying to join your server after adding mods, you likely added an incompatible or broken mod to your server. Mod incompatibilities can also occur between 2 or more mods. If you have client mods installed, check this guide about removing mods from your game.
"},{"location":"server/create-a-server/#52-general-mods","title":"5.2 General Mods","text":"If you only wanted to add modded vehicles, you simply put the zip file of the mod in the Resources/Client
folder. They will automatically be downloaded by anyone who joins your server.
All default maps (maps which aren't mods) work out-of-the-box and do not have to be installed. You simply change the Map
setting in the ServerConfig.toml
file to any of these. For any other modded maps, do this:
.zip
file in your server's (Resources/Client
) folder.levels
folder. In this folder there should be simply one other folder with the name of the map, for example \u201cmyawesomedriftmap2021\u201d. Make sure to copy or remember this name exactly as it is written in that folder's name.ServerConfig.toml
. In the Map
setting, you should see /levels/MAPNAME/info.json
, where MAPNAME
is likely something like gridmap_v2
. You want to now replace this MAPNAME
with the name of the folder from the last step, in that example it was myawesomedriftmap2021
. In the end it should look like this (for this example) and should have /info.json
at the end.Map = '/levels/myawesomedriftmap2021/info.json'\n
Now, when someone joins your server, it should download the map automatically and work as expected.\u00a0
If this does NOT work, install the map in your singleplayer BeamNG.drive, launch it and enter the map. Then, open the Console by pressing the ~
(tilde) key (if you're on a non-US keyboard, look at the Toggle System Console action in the Options > Controls > Bindings menu, under the General Debug section), and run print(getMissionFilename())
. This should then show you the name to use.\u00a0
That's it! Your modded map should now be available to join!
"},{"location":"server/create-a-server/#6-how-to-join-your-server","title":"6. How to join your server","text":"How you and other players can join your server.
"},{"location":"server/create-a-server/#6a-joining-your-own-server-both-private-and-public","title":"6.a. Joining your own server (both private and public)","text":"If your server is hosted on the same PC as the game runs on, you must join your server by direct connecting, to do this, click the Direct Connect Tab on the left from the server list. Leave the default info in there (should be 127.0.0.1 and corresponding port) then hit connect.
If your server is hosted on another PC in your local network, you must find the local IP of that machine and direct connect using this local IP.
If your server is hosted outside of your house (e.g. VPS) you must find the public IP of that machine and direct connect that way.
"},{"location":"server/create-a-server/#6b-other-people-joining-your-private-server","title":"6.b. Other people joining your private server","text":"You have to give other users the public IP Address of your Server. However, be careful sharing your public IP address with strangers! To join your private server the players must go to the Direct Connect Tab in BeamMP, then type your IP and Port.
"},{"location":"server/create-a-server/#6c-other-people-joining-your-public-server","title":"6.c. Other people joining your public server","text":"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 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. To check if you have a CGNAT IPv4, look up the WAN IP Address on your routers interface. Compare it to your public IP. If they're the same, you are not behind a CGNAT. IPv6 Support is NOT yet implemented.
"},{"location":"server/create-a-server/#7-how-to-check-the-connectivity-of-your-beammp-server","title":"7. How to check the connectivity of your BeamMP-Server","text":"Enter the servers public IPv4 and Port below, then click \"CheckBeamMP\".
IP adress: Port:I want to use a VPN such as RadminVPN, Hamachi, or similar.
BeamMP does not support these VPNs, as they often cause issues. One of these issues is UDP traffic not being forwarded. To resolve this, refer to section 1.
But why has it worked in the past?
This is due to the developers of these applications updating their software and implementing changes which BeamMP has no control over. It is up to the developers of these applications to provide support for specific use cases like a BeamMP-Server.
"},{"location":"server/create-a-server/#still-facing-issues","title":"Still facing issues?","text":"Open a Thread on the Forum or on our Discord server in the #support
channel.
This page contains all the error codes that the server may display.
Code Description Possible solution 10022 There is an issue with binding to the port Check if the port for the server is already in use by another service, if it is use another one. 10048 Address already in use Another BeamMP server or program is running on that port, use another one. 10051 Network unreachable Bad port forwarding or similar issues, verify that it is all set up correctly. 10052 Network reset Happens if the network drops connection while a connection is being established. Retry the connection. 10053 Connection aborted Caused by timeout or network error, retry the connection. 10054 Connection reset by peer A client has disconnected from your server. 10060 Connection timed out There is an issue with your port forwarding, please refer to the guide steps. 10061 Connection refused There is an issue with your port forwarding, please refer to the guide steps. 10064 Host down Unlikely error, but it means that the host is down because either it's shutdown or ports were closed. 10065 Host not reachable No internet or bad port forwarding, please refer to the guide steps.Note
For any other code not in this list, you can refer to https://learn.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2 if you know a bit how networks / sockets work.
"},{"location":"server/manual/","title":"Server Manual","text":""},{"location":"server/manual/#environment","title":"Environment","text":"The server is affected by the state of various external parameters:
The resources folder is created upon startup of the server, together with the \"Client\" and \"Server\" subdirectories. The \"Server\" subdirectory accepts folders within it, each containing at least one .lua
file. Each of these folders in the \"Server\" subdirectory is called a \"Plugin\". .lua
files contained in the top-level directory of a plugin are hot-reloaded on change. The \"Client\" subdirectory accepts only .zip
files, which are loaded when the server starts, and assumed to not change during runtime.
As of Server release v3.2.0, the BeamMP Server accepts environment variables, which override settings in the ServerConfig.toml. All ServerConfig variables which exist in the \"General\" category/section are PascalCase, the environment variables are ALL_CAPS and prefixed with BEAMMP_
. For example, the MaxPlayers
setting converted to ALL_CAPS is MAX_PLAYERS
(note the _
where a new word starts), and prefixed it becomes BEAMMP_MAX_PLAYERS
. This is the format followed for all \"General\" settings. The follwing ENV variables exist:
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
Any environment variables corresponding to config parameters which are strings or numbers must be strings, for example BEAMMP_NAME=\"Cool Server\"
, BEAMMP_NAME=Server1
, BEAMMP_PORT=12345
. Environment variables corresponding to config parameters which are booleans (true/false, on/off) must be either true
or 1
(both meaning ON), or any other value (meaning OFF).
These environment variables allow hosting providers (and other users with a larger number of servers), here called \"providers\", to overwrite certain provider-specific settings.
"},{"location":"server/manual/#beammp_provider_port_env-since-v330","title":"BEAMMP_PROVIDER_PORT_ENV
(since v3.3.0)","text":"When set to a non-empty string, this replaces the BEAMMP_PORT
variable with another, in order to read the variable from an existing ENV. For example, Pterodactyl may expose SERVER_PORT
as an ENV. To use it with BeamMP-Server, you'd have to do BEAMMP_PORT=${SERVER_PORT}
, which is a little silly.
Instead, you can now use BEAMMP_PROVIDER_PORT_ENV=\"SERVER_PORT\"
, which leads BeamMP-Server to read the port from the SERVER_PORT
ENV variable.
BEAMMP_PROVIDER_DISABLE_CONFIG
(since v3.3.0)","text":"If set to 1
or true
, the ServerConfig.toml
is not generated, and is not read if it exists. The BEAMMP_AUTH_KEY
must be set in order for the server to function.
BEAMMP_PROVIDER_UPDATE_MESSAGE
(since v3.2.2)","text":"When set to a non-empty string, this replaces the entire update message, which by default is \"NEW VERSION IS OUT! Please update to the new...\" etc. It is REQUIRED that the update message you provide contains {}
somewhere, which the server will replace with the new version number. For example, your update message could look like:
BEAMMP_PROVIDER_UPDATE_MESSAGE=\"NEW VERSION of the BeamMP-Server has been released: {}! Please follow the update guide here: https://example.com/update-guide\"\n
Which would result in an update message like NEW VERSION of the BeamMP-Server has been released: v5.0.2! Please follow the update guide here: https://example.com/update-guide\n
Please take care to make it clear to the users that they should update, and explain how to update.
"},{"location":"server/manual/#commandline-arguments","title":"Commandline arguments","text":"Run the BeamMP Server with the --help
argument to learn more. For example: ./BeamMP-Server --help
.
This file is generated on first startup. Comments inside the file are the most up-to-date way to understand what each setting does.
"},{"location":"server/manual/#working-directory","title":"Working directory","text":"The working directory of the server, not the location of the server executable, is the deciding factor on where the ServerConfig.toml, server log files, and Resources folder, are generated.
"},{"location":"server/manual/#limitations","title":"Limitations","text":"The following limitations are enforced in the BeamMP Backend, which affects the Servers:
DISCLAIMER:
Port forwarding is a risk.
By Port forwarding you understand the risks of opening up ports on your home network to the public and therefore void the right to hold BeamMP accountable for any and all damages that may happen to you or your household.
We take no responsibility for any content on any externally linked services or websites.
If you do not understand this guide, please consider using one of our partners.
Warning
Please make sure your Router is not a 4G/5G exclusive device. If it is a hybrid device, make sure to select the cable connected adapter later in section 3 of this guide!
"},{"location":"server/port-forwarding/#how-to-set-up-port-forwarding","title":"How to set up port forwarding.","text":"Creating a port forwarding rule involves a few detailed network terms. Be prepared to write down a few notes as you go through the process.
There are 4 major steps in this guide.
"},{"location":"server/port-forwarding/#a-quick-guide-a-more-detailed-guide-is-below","title":"A quick guide. (A more detailed guide is below)","text":"Assign a static IP address to your computer or devices
This is needed to prevent the IP of your device changing and breaking the port forwarding rule.
See info about your router
Log in to your router
This can normally be done by finding the 'Default Gateway' IP, which can be found when executing ipconfig
in a command prompt and entering it in a web browsers address bar.
Forward ports to your computer
Find the port forwarding section in your routers web interface. Most routers list the port forwarding section under Network, Advanced, or LAN.
Test that your port is forwarded properly
Use a tool such as CheckBeamMP to test if the rule is working.
IP adress: Port:
Another way to set a static IP address in your local network is to use your router's DHCP reservation feature. Not all routers have this feature, so this may not be an option for you. Please search the internet with the model of your router to find a manual.
If you have managed to do this, please skip directly to step 2
"},{"location":"server/port-forwarding/#method-2-assign-a-static-ip-in-windows","title":"Method 2: Assign a static IP in Windows","text":""},{"location":"server/port-forwarding/#11-find-your-current-ip-address-gateway-and-dns-servers","title":"1.1. Find your current IP Address, Gateway and DNS servers:","text":"Before we can set up a static IP address, we need to know your current network settings. You are going to want to write these down, so get a notepad window ready. For this step, we are going to use command prompt.
Open up a command prompt. The 3 main ways are:
Once you are in the command prompt, run the following command:
ipconfig /all\n
You will see a lot of data. If you have virtual or multiple network adapters, then you will see even more data. It is common to see many virtual adapters if you have either Hyper-V or Docker installed.
It is recommended to use a wired network connection which will be running this server, however, it will work over a wireless connection. You will need to look for an adapter in this list which has an active internet connection. Scroll through the list and find one that has a Default Gateway assigned. Many of the virtual adapters will not have a Default Gateway.
Below are local IPv4 address examples, which atleast one of the adapters should have. You will need to note down the information of your adapter.
Subnet Mask (most likely 255.255.255.0) Default Gateway (most likely 192.168.0.1 or 192.168.1.1)
Please Note
BeamMP currently does not support IPv6 for hosting a server.
"},{"location":"server/port-forwarding/#12-modify-adapter-settings","title":"1.2. Modify Adapter Settings","text":"Now we need to change the settings on your network adapter in order for your PC to keep the IP configuration it currently has. To get to the settings for your network, the fastest method is:
You should see a list of network connections on your computer. If you have Hyper-V or Docker installed, there can be many. Look for any adapters that are not named \"Hyper-V\".
Right-click on your adapter and choose properties. If Internet Protocol Version 4
is not checked, then this is the wrong adapter. Choose a different one.
Double click on Internet Protocol Version 4
. Change Obtain an IP address automatically
to Use the following IP address
.
Fill out the IP address, Subnet mask, Default gateway, and Preferred DNS server with the information from command prompt (ipconfig /all).
Alternatively, instead of using your DNS servers, you can use either the CloudFlare or Google DNS servers:
Click Ok, then click Ok again, and your adapter is now changed from DHCP to static. Surf the web to make sure that you still have internet connectivity. If you do not, then change your settings back to Obtain an IP address automatically and try the next method.
"},{"location":"server/port-forwarding/#2-log-in-to-your-router","title":"2. Log in to your router","text":"Now that you have a static IP address on your device, you are ready to forward the port for BeamMP!
To start, we need to log in to your router. Earlier, one of the settings that you wrote down is your Default Gateway. That is the IP address of your router.
Most routers use a locally hosted web page for management. To view your router's menu and settings:
You should now see your router's login screen. Not all routers require a login, but most do. You need to know your router's username and password. If you have never logged in before, your username and password are most likely set to the factory default values or, in some cases, written on a sticker your router.
Some of the most common factory usernames and passwords are listed here:
Username Password admin admin admin password {blank} admin {blank} passwordTry various combinations of admin, password, and leaving the entries blank. Where it says blank, try leaving the value blank.
"},{"location":"server/port-forwarding/#3-create-the-forwarding-rules","title":"3. Create the forwarding rules!","text":""},{"location":"server/port-forwarding/#31-find-the-forwarding-section","title":"3.1. Find the forwarding section","text":"Find the port forwarding section in your router web interface. Navigate around in your router by clicking the tabs or links at the top or left of each page. Most routers list the port forwarding section under Network, Advanced, or LAN. Look for the following keywords to help you find it:
Once you find your router's port forwarding section, you are ready to enter the necessary information. Your router will have a place to enter the ports to be forwarded and the destination IP address to point those forwarded ports. If your router lists both Internal and External ports, make them the same.
BeamMP requires both UDP and TCP port 30814 (Unless you have changed this in your ServerConfig.toml).
Note
While the default Port is 30814, you can choose any other number greater than 1024 but less than 65535, but you need to note down what you picked if it's not 30814. You need to forward both TCP and UDP. It is recommended to stick to the default port as that one is very unlikely to be used by another service on your PC. However, If you are hosting multiple servers on one machine, each server needs a different Port. Server 1: 30814, Server 2: 30815 for example.
On some routers you may need to create 2 rules, one for UDP and one for TCP, whilst others are nice and allow you to do both with a single rule!
Most routers have a 'save' button, and some routers require a restart or reboot for the changes to take effect.
"},{"location":"server/port-forwarding/#4-time-to-test","title":"4. Time to test!","text":"There are a few different ways to test the connection.
Our recommend way is to use our tool CheckBeamMP as this tests for BeamMP specific issues and protocols.
IP adress: Port:This can be done by getting your public IPv4 Address, this once again can be done in a few different ways. The main way is to use a website called whatsmyip.org. This is a simple website which displays your public IP Address. You should be looking for an IP address with the formatting: xxx.xxx.xxx.xxx
Visit the following Link and replace \"IP\" with your actual IPv4 address, and the \"Port\" with your servers port. Be sure to leave no spaces. https://check.beammp.com/api/v2/beammp/ip/port
status: ok
If you get the output above you can now join your server! There are 2 ways to join, either directly with the details you entered into Probably UP, or, if your server is set to 'public', through the server-list. Since you are hosting a server on-premise, use 127.0.0.1 (localhost) if the Server is running on the same PC as you play, or the LAN IPv4 of the local machine that is running the server.
status: error
If the connection fails entirely, your ISP could be using CGNAT (Carrier Grade Network Address Translation). For more details, please check How to check for CGNAT?, or open a Server Support ticket on our Discord server in the #support
channel and one of our staff will get to your ticket! Should you only see TCP working and UDP failing, check Firewall and Port forwarding rules again.
Guides, tips and tricks on how to configure and take care of a BeamMP Server.
"},{"location":"server/server-maintenance/#how-to-install","title":"How to install","text":"For installation instructions, please see server installation.
"},{"location":"server/server-maintenance/#the-serverconfig-file","title":"The ServerConfig file","text":"The server config, which is a file called ServerConfig.toml
, uses the TOML format.
NOTE: The old server config file was called Server.cfg
, but this is no longer used, and the server will warn when this is still present. Please also note that the two config formats are not compatible with each other.
The config has one section by default, called [General]
, which holds the following values:
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 \u2265 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. Other sections can and should be used by server plugins (Lua API coming soon), like so: [MyMod]
.
The AuthKey HAS to be set by you. It will be empty by default, and needs to be filled with your AuthKey from the installation step earlier. Do not share this Key with anyone and, in screenshots, blur it fully.
"},{"location":"server/server-maintenance/#all-vanilla-maps-names","title":"All vanilla maps names","text":"Here are all the stock maps:
Use these special symbols before your text and it'll apply an effect to that text in the server list:
Value Description^r
Reset ^p
Newline (descriptions only) ^n
Underline ^l
Bold ^m
Strike-through ^o
Italic ^0
Black ^1
Blue ^2
Green ^3
Light blue ^4
Red ^5
Pink ^6
Orange ^7
Grey ^8
Dark grey ^9
Light purple ^a
Light green ^b
Light blue ^c
Dark orange ^d
Light pink ^e
Yellow ^f
White"},{"location":"server/server-maintenance/#customize-your-server-tags","title":"Customize your server tags","text":"Tags can be used to allow people to search for a specific type of server. Your serverConfig.toml will generate with the freeroam tag Tags = \"Freeroam\"
.
You can add multiple tags separated by comma Tags = \"Events,Offroad,lang:english\"
, they are not case sensitive.
You can choose from the following list:
Age/Content:
Mature/18+
Gameplay Types:
Freeroam
Roleplay
Economy
Traffic
Racing Categories:
Racing
Racing:NASCAR
Racing:Track
Racing:Drag
Racing:Rally
Touge
Off-Roading and Challenges:
Offroad
Crawling
Dakar
Challenge
Destruction Events:
Derby
Arena
Weather and Time Conditions:
Snow/Ice
Rain
Night
Weather
Gamemodes:
Gamemode
Gamemode:Racing
Gamemode:Rally
Gamemode:Drag
Gamemode:Derby
Gamemode:Infection
Gamemode:Cops-Robbers
Gamemode:Delivery
Gamemode:Sumo
Community and Events:
Scenarios
Events
Leaderboard
Mods:
Modded
Mod:BeamPaint
Mod:BeamJoy
Mod:CEI
Languages:
Lang:English
Lang:Russian
Lang:French
Lang:Spanish
Lang:Portuguese
Lang:German
Lang:Polish
Lang:Arabic
Other:
Vanilla
Moderated
Should a tag be missing from this list, you can submit a request for it to be added here
"},{"location":"server/server-maintenance/#the-serverlog-file","title":"The Server.log file","text":"This file will be generated when the server runs. It's a mirror of the messages you see in the console when you run the server. You should attach this file every time you need support from our support staff, and it will never show your AuthKey, so you can usually send it without modifications.
The format is as follows ($ prefix means \u201cvariable\u201d, explained below):
[$DATE $TIME] $CONTEXT [$LOG_LEVEL] $MESSAGE\n
Where:
$DATE
is the date of the message, for example 21/07/2021$TIME
is the time of the message, for example 11:05:23$CONTEXT
(only visible if in Debug mode and mostly relevant to developers) is the context of the message, which is either:(Player ID) \u201cPlayer Name\u201d
, where the Player's ID is useful for moderation$LOG_LEVEL
is one of the levels of importance of a message:DEBUG
: Only visible in Debug mode, usually spammy and only important to developersINFO
: General informationLUA
: Message from a Lua pluginWARN
: Describes something that isn't supposed to happen, usuallyERROR
: Something went very wrong, or was very unexpectedFATAL
: Something happened that causes the server to shut down$MESSAGE
the message itself, usually something that you should pay attention to and understand. In some cases this might be cryptic, but the general rule is that, as long as nothing is visibly wrong with the server and there are no ERRORs, all is good.Whenever a new update is released, you're advised to update your server. Usually this involves bug fixes, stability improvements and security improvements, next to the general new features etc. that are introduced.
To receive news about updates when they come out, either follow the discord server's \u201cupdate\u201d channel, look out for it on the forums, or look at / ask the GitHub releases page.
"},{"location":"server/server-maintenance/#how-to-update","title":"How to update","text":""},{"location":"server/server-maintenance/#if-you-are-using-a-beammp-partnered-hosting-provider","title":"If you are using a BeamMP partnered hosting provider","text":"If you are using a BeamMP partnered hosting provider, the instructions below likely won't work. We recommend waiting for more details from your hosting provider, or contacting them for assistance.
"},{"location":"server/server-maintenance/#managing-the-server-yourself","title":"Managing the server yourself","text":"The server is updated by replacing the old executable with the new one. If you are unsure how to do this, there are step-by-step instructions for Windows and Linux below.
If you built from source, you just rebuild. Make sure to run git submodule update --init --recursive
before you rebuild.
BeamMP-Server.exe
. We will call this one the \u201cnew executable\u201d.BeamMP-Server.exe
executable is located (same folder where your ServerConfig.toml
is, usually). We will call this one the \u201cold executable\u201d.BeamMP-Server-xxx
from now on, where xxx
denotes the version for the distro you're using.BeamMP-Server-xxx
depending on the version you've downloaded. We will call this one the \u201cnew executable\u201d.BeamMP-Server-xxx
executable is located (same folder where your ServerConfig.toml
is, usually). We will call this one the \u201cold executable\u201d.sudo chmod +x BeamMP-Server-xxx
. This will make sure the server can be run.The server does not support automatic updates or update notifications (yet).
You can, however, ask the GitHub API for the lastest release by checking the server's version against the tags. You can get that by GET'ing from https://api.github.com/repos/BeamMP/BeamMP-Server/git/refs/tags
.
\u00a1\u00a1\u00a1 ADVERTENCIA !!! \"\u00a1Esta p\u00e1gina est\u00e1 bajo construcci\u00f3n!\"
Se est\u00e1 trabajando en este sitio.\n\n\u00bfCrees que puedes ayudar? Por favor, hazlo haciendo clic en la p\u00e1gina con un l\u00e1piz a la derecha.\n\nEsto puede ser hecho en cualquier p\u00e1gina.\n
"},{"location":"es/#bienvenido-a-beammp-docs","title":"\u00a1Bienvenido a BeamMP Docs!","text":"\u00a1Bienvenido al nuevo y mejorado centro de documentaci\u00f3n para BeamMP! Ya seas jugador, propietario de un servidor o desarrollador, tenemos los recursos que necesitas para mejorar tu experiencia multijugador en BeamNG.drive.
"},{"location":"es/#para-jugadores","title":"Para Jugadores","text":"\u00bfNuevo en BeamMP? \u00c9chale un vistazo C\u00f3mo Empezar para ayudarte a tocar la carretera y hacer la mayor\u00eda de tus aventuras en multijugador. Para preguntas generales y problemas, por favor \u00e9chale un ojo a Players FAQ.
"},{"location":"es/#para-propietarios-de-servidor","title":"Para Propietarios de Servidor","text":"\u00bfPensando en crear tu propio servidor de BeamMP? Nuestra gu\u00eda comprensiva te ayudar\u00e1 a trav\u00e9s del proceso, asegur\u00e1ndose de que tengas todas las herramientas y conocimientos necesarios para para configurar tu servidor eficientemente.
"},{"location":"es/#para-desarrolladores","title":"Para Desarrolladores","text":"Descubre los entresijos de la creaci\u00f3n de recursos para los Servidores de BeamMP en nuestra Gu\u00eda de Desarrollo de Recursos.
Emocionantes actualizaciones est\u00e1n en camino, incluyendo una nueva p\u00e1gina de inicio dise\u00f1ada para mejorar tu experiencia de navegaci\u00f3n. \u00a1Mantente al tanto para m\u00e1s novedades!
"},{"location":"es/FAQ/How-to-check-for-CGNAT/","title":"C\u00f3mo comprobar si hay CGNAT?","text":"How to check for CGNAT?
"},{"location":"es/FAQ/How-to-deactivate-mods/","title":"\u00bfC\u00f3mo desactivar mis mods?","text":""},{"location":"es/beamng/","title":"Bienvenido a la documentaci\u00f3n de BeamNG.drive","text":"Esta documentaci\u00f3n es extraoficial y es producida por el Equipo de Mods de BeamMP y la Comunidad de BeamNG.
"},{"location":"es/beamng/#entender-la-estructura-de-los-archivos","title":"Entender La Estructura de los Archivos","text":"...
"},{"location":"es/beamng/#fragmentos-de-codigo","title":"Fragmentos de C\u00f3digo","text":"Fragmentos de C\u00f3digos que pueden resultar \u00fatiles pueden ser encontrados en: Snippets
"},{"location":"es/beamng/snippets/","title":"Helpful Code Snippets","text":"\u00a1\u00a1\u00a1 ADVERTENCIA !!! \"\u00a1Esta p\u00e1gina est\u00e1 bajo construcci\u00f3n!\"
Se est\u00e1 trabajando en este sitio.\n\n\u00bfCrees que puedes ayudar? Por favor, hazlo haciendo clic en la p\u00e1gina con un l\u00e1piz a la derecha.\n\nEsto puede ser hecho en cualquier p\u00e1gina.\n
"},{"location":"es/beamng/snippets/#fragmentos-de-codigo-de-beamngdrive","title":"Fragmentos de C\u00f3digo de BeamNG.drive","text":""},{"location":"es/beamng/snippets/#fragmentos-de-codigo-en-lua","title":"Fragmentos de C\u00f3digo en Lua","text":""},{"location":"es/beamng/snippets/#dibujar-un-marcador-y-detectar-la-posicion-del-vehiculo","title":"Dibujar un marcador y Detectar la posici\u00f3n del veh\u00edculo","text":"Dibujar marcadores en el mapa puede ser una de las mejores maneras de indicarle al usuario que hay alg\u00fan tipo de interacci\u00f3n que pueden realizar ah\u00ed.
Dibujar un marcador es bastante f\u00e1cil. He aqu\u00ed un ejemplo de c\u00f3mo el marcador de la ruta del autob\u00fas es dibujado:
local function createBusMarker(markerName)\n local marker = createObject('TSStatic')\n marker:setField('shapeName', 0, \"art/shapes/interface/position_marker.dae\")\n marker:setPosition(vec3(0, 0, 0))\n marker.scale = vec3(1, 1, 1)\n marker:setField('rotation', 0, '1 0 0 0')\n marker.useInstanceRenderData = true\n marker:setField('instanceColor', 0, '1 1 1 0')\n marker:setField('collisionType', 0, \"Collision Mesh\")\n marker:setField('decalType', 0, \"Collision Mesh\")\n marker:setField('playAmbient', 0, \"1\")\n marker:setField('allowPlayerStep', 0, \"1\")\n marker:setField('canSave', 0, \"0\")\n marker:setField('canSaveDynamicFields', 0, \"1\")\n marker:setField('renderNormals', 0, \"0\")\n marker:setField('meshCulling', 0, \"0\")\n marker:setField('originSort', 0, \"0\")\n marker:setField('forceDetail', 0, \"-1\")\n marker.canSave = false\n marker:registerObject(markerName)\n scenetree.MissionGroup:addObject(marker)\n return marker\n end\n\n -- esto puede ser llamado en bucle para configurar tus marcadores.\n -- NOTA: S\u00f3lo deber\u00edas hacer esto una vez como parte de tu configuraci\u00f3n y no llamarlo cada fotograma.\n if #markers == 0 then\n for k,v in pairs(nameMarkers) do\n local mk = scenetree.findObject(v)\n if mk == nil then\n log('I', logTag,'Creating marker '..tostring(v))\n mk = createBusMarker(v)\n ScenarioObjectsGroup:addObject(mk.obj)\n end\n table.insert(markers, mk)\n end\n end\n
He aqu\u00ed un ejemplo de un marcador personalizado de BeamNG-FuelStations:
local stations = [\n { \"location\": [ -778.813, 485.973, 23.46 ], \"type\":\"gas\" },\n { \"location\": [ 617.164, -192.107, 53.2 ], \"type\":\"ev\" },\n ]\n\n local function IsEntityInsideArea(pos1, pos2, radius)\n return pos1:distance(pos2) < radius\n end\n\n local onUpdate = function (dt)\n for k, spot in pairs(stations) do -- recorre en bucle todos los puntos del mapa actual\n local bottomPos = vec3(spot.location[1], spot.location[2], spot.location[3])\n local topPos = bottomPos + vec3(0,0,2) -- desplaza vec para obtener la posici\u00f3n superior (2m de altura)\n\n local spotInRange = false -- \u00bfeste lugar est\u00e1 en el rango? usado para colores\n local spotCompatible = false -- \u00bfes este lugar compatible?\n\n if activeVeh then -- tenemos un coche y es nuestro (si se est\u00e1 en Multijugador)\n local vehPos = activeVeh:getPosition()\n\n spotInRange = IsEntityInsideArea(vec3(vehPos.x, vehPos.y,vehPos.z), bottomPos, 1.5)\n\n spotCompatible = activeFuelType == \"any\" or spot.type == \"any\" or activeFuelType == spot.type\n end\n\n local spotColor = (spotInRange and spotCompatible) and activeColorMap[spot.type] or inactiveColorMap[spot.type] or ColorF(1,1,1,0.5)\n\n debugDrawer:drawCylinder(bottomPos:toPoint3F(), topPos:toPoint3F(), 1, spotColor) --bottom, top, radius, color\n end\n end\n
"},{"location":"es/beamng/snippets/#ejemplos-de-guihooks","title":"Ejemplos de guihooks","text":""},{"location":"es/beamng/snippets/#notificaciones-toast-en-la-esquina-derecha-de-la-pantalla","title":"Notificaciones 'Toast', en la esquina derecha de la pantalla","text":"--guihooks.trigger('toastrMsg', {type, title, msg, config = {timeOut}})\nguihooks.trigger('toastrMsg', {type = \"info\", title = \"Info Message:\", msg = \"Info Message Text Here\", config = {timeOut = 5000}})\nguihooks.trigger('toastrMsg', {type = \"warning\", title = \"Warning Message:\", msg = \"Warning Message Text Here\", config = {timeOut = 5000}})\nguihooks.trigger('toastrMsg', {type = \"error\", title = \"Error Message:\", msg = \"Error Message Text Here\", config = {timeOut = 5000}})\n
"},{"location":"es/beamng/snippets/#mensajes-de-notificaciones-en-la-esquina-izquierda-de-la-pantalla-de-forma-predeterminada-en-la-aplicacion-de-iu-de-mensajes","title":"Mensajes de notificaciones, en la esquina izquierda de la pantalla de forma predeterminada, en la Aplicaci\u00f3n de IU de Mensajes","text":"--guihooks.trigger('Message', {msg, ttl, category, icon}) -- requiere la Aplicaci\u00f3n de IU de Mensajes\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"arrow_upward\", icon = \"arrow_upward\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"arrow_downward\", icon = \"arrow_downward\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"flag\", icon = \"flag\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"check\", icon = \"check\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"check_circle\", icon = \"check_circle\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"warning\", icon = \"warning\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"error\", icon = \"error\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"directions_car\", icon = \"directions_car\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"star\", icon = \"star\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"timeline\", icon = \"timeline\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"save\", icon = \"save\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"settings\", icon = \"settings\"})\n
"},{"location":"es/beamng/snippets/#mensaje-temporal-grande-o-pequeno-en-el-centro-de-la-pantalla","title":"Mensaje temporal grande o peque\u00f1o en el centro de la pantalla","text":"--guihooks.trigger('ScenarioFlashMessage', {{msg, ttl, sound, big}} ) -- Requiere la Aplicaci\u00f3n de IU de 'Cuenta atr\u00e1s de la carrera'\nguihooks.trigger('ScenarioFlashMessage', {{\"Message\", 5.0, 0, true}} )\nguihooks.trigger('ScenarioFlashMessage', {{\"Message Text Here\", 5.0, 0, false}} )\n\n-- ejemplo de cuenta atr\u00e1s, cuando se ejecutan todos a la vez, los elementos se ponen en cola y se seguir\u00e1n unos a otros despu\u00e9s de que expire el ttl anterior\nguihooks.trigger('ScenarioFlashMessage', {{\"3\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown1')\", true}})\nguihooks.trigger('ScenarioFlashMessage', {{\"2\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown2')\", true}})\nguihooks.trigger('ScenarioFlashMessage', {{\"1\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown3')\", true}})\nguihooks.trigger('ScenarioFlashMessage', {{\"GO!\", 3.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_CountdownGo')\", true}})\n\n-- otro sonido de ejemplo\nguihooks.trigger('ScenarioFlashMessage', {{\"Teleported!\", 3.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Checkpoint')\", false}})\n
"},{"location":"es/beamng/snippets/#mensaje-persistente-mediano-en-el-centro-de-la-pantalla","title":"Mensaje persistente mediano en el centro de la pantalla","text":"--guihooks.trigger('ScenarioRealtimeDisplay', {msg = msg} ) -- Requiere la Aplicaci\u00f3n de IU 'Visualizaci\u00f3n de carrera en tiempo real'\nguihooks.trigger('ScenarioRealtimeDisplay', {msg = \"Message Text Here\"} )\n--these messages persist, clear with a blank string\n--if you are running live data, this is a good one to update rapidly (think timers, distance calcs, et cetera)\nguihooks.trigger('ScenarioRealtimeDisplay', {msg = \"\"} )\n
"},{"location":"es/beamng/snippets/#ejemplos-de-codigo-de-imgui","title":"Ejemplos de C\u00f3digo de IMGUI","text":""},{"location":"es/beamng/snippets/#ejemplos-de-codigo-de-cef-ui","title":"Ejemplos de C\u00f3digo de CEF UI","text":""},{"location":"es/beamng/dev/","title":"Introduction","text":"\u00a1\u00a1\u00a1 ADVERTENCIA !!! \"\u00a1Esta p\u00e1gina est\u00e1 bajo construcci\u00f3n!\"
Se est\u00e1 trabajando en este sitio.\n\n\u00bfCrees que puedes ayudar? Por favor, hazlo haciendo clic en la p\u00e1gina con un l\u00e1piz a la derecha.\n\nEsto puede ser hecho en cualquier p\u00e1gina.\n
"},{"location":"es/beamng/dev/#introduccion-al-desarrollo-en-beamngdrive","title":"Introducci\u00f3n al Desarrollo en BeamNG.drive","text":""},{"location":"es/beamng/dev/content/maps/","title":"Maps","text":"\u00a1\u00a1\u00a1 ADVERTENCIA !!! \"\u00a1Esta p\u00e1gina est\u00e1 bajo construcci\u00f3n!\"
Se est\u00e1 trabajando en este sitio.\n\n\u00bfCrees que puedes ayudar? Por favor, hazlo haciendo clic en la p\u00e1gina con un l\u00e1piz a la derecha.\n\nEsto puede ser hecho en cualquier p\u00e1gina.\n
"},{"location":"es/beamng/dev/content/maps/#creacion-de-mapas-en-beamngdrive","title":"Creaci\u00f3n de Mapas en BeamNG.drive","text":"...
"},{"location":"es/beamng/dev/content/maps/#introduccion","title":"Introducci\u00f3n","text":"...
"},{"location":"es/beamng/dev/content/maps/#como-empezar","title":"C\u00f3mo Empezar","text":"...
"},{"location":"es/beamng/dev/content/props/","title":"Props","text":"\u00a1\u00a1\u00a1 ADVERTENCIA !!! \"\u00a1Esta p\u00e1gina est\u00e1 bajo construcci\u00f3n!\"
Se est\u00e1 trabajando en este sitio.\n\n\u00bfCrees que puedes ayudar? Por favor, hazlo haciendo clic en la p\u00e1gina con un l\u00e1piz a la derecha.\n\nEsto puede ser hecho en cualquier p\u00e1gina.\n
"},{"location":"es/beamng/dev/content/props/#creacion-de-props-en-beamngdrive","title":"Creaci\u00f3n de Props en BeamNG.drive","text":"...
"},{"location":"es/beamng/dev/content/props/#introduccion","title":"Introducci\u00f3n","text":"...
"},{"location":"es/beamng/dev/content/props/#como-empezar","title":"C\u00f3mo Empezar","text":"...
"},{"location":"es/beamng/dev/content/vehicles/","title":"Vehicles","text":"\u00a1\u00a1\u00a1 ADVERTENCIA !!! \"\u00a1Esta p\u00e1gina est\u00e1 bajo construcci\u00f3n!\"
Se est\u00e1 trabajando en este sitio.\n\n\u00bfCrees que puedes ayudar? Por favor, hazlo haciendo clic en la p\u00e1gina con un l\u00e1piz a la derecha.\n\nEsto puede ser hecho en cualquier p\u00e1gina.\n
"},{"location":"es/beamng/dev/content/vehicles/#creacion-de-vehiculos-en-beamngdrive","title":"Creaci\u00f3n de Veh\u00edculos en BeamNG.drive","text":"...
"},{"location":"es/beamng/dev/content/vehicles/#introduccion","title":"Introducci\u00f3n","text":"...
"},{"location":"es/beamng/dev/content/vehicles/#como-empezar","title":"C\u00f3mo Empezar","text":"...
"},{"location":"es/beamng/dev/modding/imgui-windows/","title":"imgui-windows.md","text":"Esta p\u00e1gina se tiene que crear
"},{"location":"es/beamng/dev/modding/lua-mods/","title":"lua-mods.md","text":"Esta p\u00e1gina se tiene que crear
"},{"location":"es/beamng/dev/modding/ui-apps/","title":"Creaci\u00f3n de Aplicaciones de IU","text":""},{"location":"es/game/error-codes/","title":"C\u00f3digos de Error","text":"Esta p\u00e1gina contiene todos los c\u00f3digos de error que el 'launcher' podr\u00eda mostrar.
C\u00f3digo Descripci\u00f3n Posible Soluci\u00f3n 10054 Conexi\u00f3n reiniciada por el 'peer' El servidor al que te estabas conectando ha sido apagado. Error al encontrar el juego, por favor, \u00e1brelo. Reporta esto si el problema persiste, c\u00f3digo 3. El 'launcher' ha sido incapaz de encontrar la informaci\u00f3n del juego (directorio del juego, directorio del perfil, versi\u00f3n, etc...) en la entrada del registro Abre el juego al menos una vez para que los valores del registro sean creados. Error al encontrar el juego, por favor, \u00e1brelo. Reporta esto si el problema persiste, c\u00f3digo 4. El 'launcher' ha sido incapaz de encontrar la informaci\u00f3n del juego (directorio del juego, directorio del perfil, versi\u00f3n, etc...) en la entrada del registro Este error es m\u00e1s propenso a aparecer en jugadores que usen copias pirateadas del juego. Si has comprado el juego, \u00e1brelo al menos una vez para que las entradas del registro sean creadas. \u00a1No se ha podido abrir el juego!. El 'Launcher' se cerrar\u00e1 en breves. El 'launcher' fue incapaz de encontrar el ejecutable del juego. Abre el juego al menos una vez antes de ejecutar el 'launcher' de vuelta. \u00a1Juego cerrado! El 'launcher' se cerrar\u00e1 en breves. El juego ha sido cerrado Este mensaje aparecer\u00e1 cuando se cierre el juego o el juego falle al iniciarse. \u00a1Actualizaci\u00f3n del 'launcher' fallida! El 'launcher' ha fallado al descargar una nueva versi\u00f3n Comprueba tu conexi\u00f3n a internet y ajustes de firewall / antivirus para asegurarte de que el 'launcher' no est\u00e9 bloqueado. Error al iniciar el archivo de registro El 'launcher' no tiene permisos para crear archivos Ejecuta el 'launcher' como Administrador. Por favor, cierra el juego y vu\u00e9lvelo a intentar El juego ya est\u00e1 abierto y el 'launcher' no puede limpiar la carpetamultiplayer/mods
Cierra el juego y vu\u00e9lvelo a intentar. Por favor inicia el juego al menos una vez El 'launcher' intent\u00f3 y fall\u00f3 al modificar el directorio del juego Abre el juego al menos una vez antes de iniciar el 'launcher' de nuevo. \u00a1Servidores Primarios Sin Conexi\u00f3n! \u00a1Disculpa los inconvenientes! El 'launcher' fall\u00f3 al buscar actualizaciones Comprueba tu conexi\u00f3n a internet y reglas del firewall. Si no hay problemas por tu parte, comprueba el canal de BeamMP updates channel en nuestro Discord. \u00a1Sistema Backend Fuera de Servicio! \u00a1No te preocupes, volver\u00e1 pronto! El backend de BeamMP no ha respondido Comprueba tu conexi\u00f3n a internet y reglas del firewall. Si no hay problemas por tu parte, comprueba el canal de BeamMP updates channel en nuestro Discord. Atascado al actualizar El 'launcher' se ha atascado en una actualizaci\u00f3n y no puede continuar al siguiente paso Ejecuta el 'launcher' como administrador y comprueba las reglas de tu antivirus para que este no est\u00e9 bloqueado. Si el 'launcher' se cierra inmediatamente, comprueba el archivo Launcher.log
en la carpeta donde hayas instalado BeamMP.
BeamMP s\u00f3lo es compatible con copias leg\u00edtimas (de Steam) del juego. Las copias \"Crackeadas\" no est\u00e1n soportadas.
"},{"location":"es/game/getting-started/#instalacion","title":"Instalaci\u00f3n","text":"BeamMP s\u00f3lo es compatible de forma nativa con Windows, por ahora.
"},{"location":"es/game/getting-started/#instalacion-en-windows","title":"Instalaci\u00f3n en Windows","text":"BeamMP_Installer.zip
.BeamMP_Installer.exe
y sigue las instrucciones.Multijugador
para iniciar el multijugador.Conectarse
. \u00a1Disfruta!Nota: Si te est\u00e1s uniendo a un mapa con m\u00faltiples veh\u00edculos cargados, tardar\u00e1s m\u00e1s de lo esperado en unirte.
"},{"location":"es/game/getting-started/#instalacion-en-linux","title":"Instalaci\u00f3n en Linux","text":"Consulte la documentaci\u00f3n en ingl\u00e9s.
"},{"location":"es/game/getting-started/#problemas-conocidos","title":"Problemas Conocidos","text":"Si necesitas m\u00e1s ayuda con la instalaci\u00f3n, crea un 'post' en nuestro foro o pregunta en nuestro Servidor de Discord.
"},{"location":"es/guides/","title":"Gu\u00edas","text":"\u00a1\u00a1\u00a1 ADVERTENCIA !!! \"\u00a1Esta p\u00e1gina est\u00e1 bajo construcci\u00f3n!\"
Se est\u00e1 trabajando en este sitio.\n\n\u00bfCrees que puedes ayudar? Por favor, hazlo haciendo clic en la p\u00e1gina con un l\u00e1piz a la derecha.\n\nEsto puede ser hecho en cualquier p\u00e1gina.\n
"},{"location":"es/guides/#guias-de-desarrollo-de-beammp","title":"Gu\u00edas de Desarrollo de BeamMP","text":"Esta p\u00e1gina ser\u00e1 la introducci\u00f3n y prefacio para la creaci\u00f3n de contenido para el cliente y servidor.
Esta p\u00e1gina a\u00fan tiene que ser hecha.
"},{"location":"es/guides/mod-creation/server/getting-started/","title":"Lado del Servidor","text":"\u00a1\u00a1\u00a1 ADVERTENCIA !!! \"\u00a1Esta p\u00e1gina est\u00e1 bajo construcci\u00f3n!\"
Se est\u00e1 trabajando en este sitio.\n\n\u00bfCrees que puedes ayudar? Por favor, hazlo haciendo clic en la p\u00e1gina con un l\u00e1piz a la derecha.\n\nEsto puede ser hecho en cualquier p\u00e1gina.\n
"},{"location":"es/guides/mod-creation/server/getting-started/#como-empezar","title":"C\u00f3mo empezar","text":"Esta p\u00e1gina te guiar\u00e1 a trav\u00e9s del proceso de crear recursos para servidores de BeamMP.
"},{"location":"es/scripting/mod-reference/","title":"Client Scripting Reference","text":"\u00a1\u00a1\u00a1 ADVERTENCIA !!! \"\u00a1Esta p\u00e1gina est\u00e1 bajo construcci\u00f3n!\"
Se est\u00e1 trabajando en este sitio.\n\n\u00bfCrees que puedes ayudar? Por favor, hazlo haciendo clic en la p\u00e1gina con un l\u00e1piz a la derecha.\n\nEsto puede ser hecho en cualquier p\u00e1gina.\n
"},{"location":"es/scripting/mod-reference/#referencias-a-modsscripts-del-juego","title":"Referencias a Mods/Scripts del Juego","text":""},{"location":"es/game/tailoring/","title":"Tailoring","text":"\u00a1\u00a1\u00a1 ADVERTENCIA !!! \"\u00a1Esta p\u00e1gina est\u00e1 bajo construcci\u00f3n!\"
Se est\u00e1 trabajando en este sitio.\n\n\u00bfCrees que puedes ayudar? Por favor, hazlo haciendo clic en la p\u00e1gina con un l\u00e1piz a la derecha.\n\nEsto puede ser hecho en cualquier p\u00e1gina.\n
"},{"location":"es/game/tailoring/#personalizar-tu-instalacion-de-beammp","title":"Personalizar tu instalaci\u00f3n de BeamMP","text":""},{"location":"es/support/error-codes/","title":"C\u00f3digos de Error","text":"Esta p\u00e1gina contiene todos los c\u00f3digos de error que el 'launcher' podr\u00eda mostrar.
C\u00f3digo Descripci\u00f3n Posible Soluci\u00f3n 10054 Conexi\u00f3n reiniciada por el 'peer' El servidor al que te estabas conectando ha sido apagado. Error al encontrar el juego, por favor, \u00e1brelo. Reporta esto si el problema persiste, c\u00f3digo 3. El 'launcher' ha sido incapaz de encontrar la informaci\u00f3n del juego (directorio del juego, directorio del perfil, versi\u00f3n, etc...) en la entrada del registro Abre el juego al menos una vez para que los valores del registro sean creados. Error al encontrar el juego, por favor, \u00e1brelo. Reporta esto si el problema persiste, c\u00f3digo 4. El 'launcher' ha sido incapaz de encontrar la informaci\u00f3n del juego (directorio del juego, directorio del perfil, versi\u00f3n, etc...) en la entrada del registro Este error es m\u00e1s propenso a aparecer en jugadores que usen copias pirateadas del juego. Si has comprado el juego, \u00e1brelo al menos una vez para que las entradas del registro sean creadas. \u00a1No se ha podido abrir el juego!. El 'Launcher' se cerrar\u00e1 en breves. El 'launcher' fue incapaz de encontrar el ejecutable del juego. Abre el juego al menos una vez antes de ejecutar el 'launcher' de vuelta. \u00a1Juego cerrado! El 'launcher' se cerrar\u00e1 en breves. El juego ha sido cerrado Este mensaje aparecer\u00e1 cuando se cierre el juego o el juego falle al iniciarse. \u00a1Actualizaci\u00f3n del 'launcher' fallida! El 'launcher' ha fallado al descargar una nueva versi\u00f3n Comprueba tu conexi\u00f3n a internet y ajustes de firewall / antivirus para asegurarte de que el 'launcher' no est\u00e9 bloqueado. Error al iniciar el archivo de registro El 'launcher' no tiene permisos para crear archivos Ejecuta el 'launcher' como Administrador. Por favor, cierra el juego y vu\u00e9lvelo a intentar El juego ya est\u00e1 abierto y el 'launcher' no puede limpiar la carpetamultiplayer/mods
Cierra el juego y vu\u00e9lvelo a intentar. Por favor inicia el juego al menos una vez El 'launcher' intent\u00f3 y fall\u00f3 al modificar el directorio del juego Abre el juego al menos una vez antes de iniciar el 'launcher' de nuevo. \u00a1Servidores Primarios Sin Conexi\u00f3n! \u00a1Disculpa los inconvenientes! El 'launcher' fall\u00f3 al buscar actualizaciones Comprueba tu conexi\u00f3n a internet y reglas del firewall. Si no hay problemas por tu parte, comprueba el canal de BeamMP updates channel en nuestro Discord. \u00a1Sistema Backend Fuera de Servicio! \u00a1No te preocupes, volver\u00e1 pronto! El backend de BeamMP no ha respondido Comprueba tu conexi\u00f3n a internet y reglas del firewall. Si no hay problemas por tu parte, comprueba el canal de BeamMP updates channel en nuestro Discord. Atascado al actualizar El 'launcher' se ha atascado en una actualizaci\u00f3n y no puede continuar al siguiente paso Ejecuta el 'launcher' como administrador y comprueba las reglas de tu antivirus para que este no est\u00e9 bloqueado. Si el 'launcher' se cierra inmediatamente, comprueba el archivo Launcher.log
en la carpeta donde hayas instalado BeamMP.
Diese Seite befindet sich im Aufbau!
Diese Seite steht unter aktiver Bearbeitung.\n\nDenkst du, dass du helfen k\u00f6nntest? Das kannst du tun, indem du auf das Editier Symbol auf der rechten Seite klickst!\n\nDas trifft auch auf alle anderen Seiten zu.\n
"},{"location":"de/#willkommen-bei-beammp-docs","title":"Willkommen bei BeamMP Docs!","text":"Willkommen im neuen und verbesserten Dokumentationszentrum f\u00fcr BeamMP! Egal, ob du Spieler, Serverbesitzer oder Entwickler bist, wir haben die Ressourcen, die du ben\u00f6tigst, um dein Mehrspielererlebnis in BeamNG.drive zu optimieren.
"},{"location":"de/#fur-spieler","title":"F\u00fcr Spieler","text":"Neu bei BeamMP? Schau dir unsere Erste Schritte -Seite an, um sofort loszulegen und das Beste aus deinen Multiplayer-Abenteuern herauszuholen. Bei allgemeinen Fragen und Problemen schau dir bitte die Spieler-FAQ an.
"},{"location":"de/#fur-serverbesitzer","title":"F\u00fcr Serverbesitzer","text":"Du m\u00f6chtest deinen eigenen BeamMP-Server erstellen? Unsere umfassende Anleitung hier f\u00fchrt dich durch den Prozess und stellt sicher, dass du alle notwendigen Werkzeuge und Kenntnisse f\u00fcr die effiziente Konfiguration deines Servers zur Verf\u00fcgung hast.
"},{"location":"de/#fur-entwickler","title":"F\u00fcr Entwickler","text":"Erfahre alles Wissenswerte zur Erstellung von Ressourcen f\u00fcr den BeamMP-Server in unserer Anleitung zur Ressourcenentwicklung.
Aufregende Updates stehen bevor, einschlie\u00dflich einer brandneuen Homepage, die entwickelt wurde, um dein Browsing-Erlebnis zu verbessern. Bleib dran f\u00fcr weitere Neuigkeiten!
"},{"location":"de/contributing/","title":"Zur BeamMP Dokumentation beitragen","text":"BeamMP verwendet Material for MkDocs sowie MkDocs . Die vollst\u00e4ndige Dokumentation finden Sie auf den jeweiligen Websites.
"},{"location":"de/contributing/#erste-schritte","title":"Erste Schritte","text":"Um zu dieser Dokumentation beizutragen, k\u00f6nnen Sie einen der beiden Ans\u00e4tze w\u00e4hlen:
"},{"location":"de/contributing/#1-bearbeiten-sie-die-rohen-markdown-dateien","title":"1. Bearbeiten Sie die rohen Markdown-Dateien","text":"Das Bearbeiten der rohen Markdown-Dateien ist der schnellste Ansatz und eignet sich am besten f\u00fcr schnelle \u00c4nderungen wie Rechtschreibung, Grammatik oder neue Inhaltsausschnitte. Dieser Ansatz erfordert jedoch Vorkenntnisse \u00fcber Markdown, da Sie verstehen m\u00fcssen, was Ihre \u00c4nderung bewirken wird.
Wenn dies der Ansatz ist, den Sie w\u00e4hlen m\u00f6chten, befolgen Sie bitte diese Schritte:
Sobald Sie Ihren Pull-Request erstellt haben, wird jemand vom BeamMP-Mod-Team Ihren Pull-Request pr\u00fcfen und ihn entweder genehmigen oder \u00c4nderungen anfordern. Wenn \u00c4nderungen angefordert wurden und Sie diese abgeschlossen haben, werden wir Ihren Pull-Request erneut pr\u00fcfen. Anschlie\u00dfend werden Ihre \u00c4nderungen im Repository zusammengef\u00fchrt und im Rahmen unserer kontinuierlichen Integration automatisch bereitgestellt.
"},{"location":"de/contributing/#2-nehmen-sie-anderungen-mit-der-live-vorschau-vor","title":"2. Nehmen Sie \u00c4nderungen mit der Live-Vorschau vor","text":"Wenn Sie unsere Dokumentation auf diese Weise bearbeiten, erfolgt dies \u00e4hnlich wie bei Option 1. Allerdings k\u00f6nnen Sie auf diese Weise eine Vorschau Ihrer \u00c4nderungen anzeigen.
mkdocs serve
aus, um den Live-Reload-Docs-Server von dort aus zu starten, wo Sie den Fork geklont haben.mkdocs.yml # Die Konfigurationsdatei.\ndocs/\nindex.md # Die Dokumentations-Homepage.\n... # Andere Markdown-Seiten, Bilder und andere Dateien.\n
"},{"location":"de/FAQ/How-to-check-for-CGNAT/","title":"Wie \u00fcberpr\u00fcft man auf CGNAT?","text":"Wie pr\u00fcfe ich auf ein CGNAT?
"},{"location":"de/FAQ/How-to-check-for-CGNAT/#problem","title":"Problem","text":"Alle Firewall Ausschl\u00fcsse und Port Weiterleitungsregeln sind korrekt eingerichtet, jedoch kann niemand deinem heim-gehosteten Server beitreten?
Wenn du Verbindungsprobleme hast und einen Hosting Anbieter verwendest, kontaktiere diesen f\u00fcr Hilfe. Wenn du einen VPS verwenden m\u00f6chtest oder keinen Server zuhause hosten kannst, sieh dir die Liste unserer Hosting Partner an.
"},{"location":"de/FAQ/How-to-check-for-CGNAT/#was-ist-cgnat-uberhaupt","title":"Was ist CGNAT \u00fcberhaupt?","text":"F\u00fcr eine detaillierte Erkl\u00e4rung, was CGNAT ist und warum es dich am heim-hosting hindert, sieh dir diese Seite an.
"},{"location":"de/FAQ/How-to-check-for-CGNAT/#wie-prufe-ich-auf-cgnat","title":"Wie pr\u00fcfe ich auf CGNAT?","text":""},{"location":"de/FAQ/How-to-check-for-CGNAT/#methode-1","title":"Methode 1:","text":"\u00d6ffne ein Command Prompt, f\u00fchre tracert -4 beammp.com
aus. Das wird eine Reihe von Netzwerk-Hops ausgeben. Warte, bis die Operation abgeschlossen ist (kann bis zu 30 Hops dauern). Pr\u00fcfe die ersten paar IP Adressen nach deinem Router/Modem/Gateway. Wenn mehrere IP Adressen im Block 100.64.x.x
-100.127.x.x
oder 10.xx.xx.xx
nach dem ersten Hop erscheinen, bist du sehr wahrscheinlich hinter einem CGNAT.
Note
Der erste Hop wird dein Router/Modem/Gateway sein und kann sich zwischen Modellen unterscheiden. Die offiziellen Adressbl\u00f6cke f\u00fcr lokale Netzwerke lauten wie folgt: 10.0.0.xxx
- 192.168.xxx.xxx
- `172.16.xxx.xxx
Finde die WAN IP auf dem Web-Interface deines Routers. Vergleiche diese mit der IP auf https://whatsmyip.org . Wenn sie NICHT gleich sind, bist du hinter einem CGNAT.
"},{"location":"de/FAQ/How-to-check-for-CGNAT/#methode-3losung","title":"Methode 3/L\u00f6sung:","text":"Rufe deinen Internet Anbieter an f\u00fcr Hilfe. Abh\u00e4ngig von deinem Anbieter, bieten diese m\u00f6glicherweise garkeine dynamischen IP Adressen an. Behalte im Kopf, dass eine statische IP nicht n\u00f6tig ist.
Warning
Internet Anbieter bieten eine dedizierte IP Adresse eventuell nur als bezahlte Option an. Bitte pr\u00fcfe die Preise unserer Hosting-Partner, weil diese billiger sein k\u00f6nnten als eine statische IP.
Beispiel eines nicht-CGNAT Netzwerks:
Tags: Server, 10060 10061, CGNAT, Connection Failed, Port Forward, Firewall
"},{"location":"de/FAQ/How-to-deactivate-mods/","title":"Wie deaktiviere ich meine Mods?","text":""},{"location":"de/FAQ/How-to-deactivate-mods/#warum-muss-ich-meine-mods-deaktivieren","title":"Warum muss ich meine Mods deaktivieren?","text":"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\u00e4tzlichen 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\u00fcr die Installation von Mods vorgesehen und kann zu Problemen f\u00fchren, wie in der Datei DO_NOT_INSTALL_MODS_HERE.txt
im selben Verzeichnis beschrieben.
DO_NOT_INSTALL_MODS_HERE.txt
Kopiere KEINE Mods in diesen Ordner: Dies kann zu besch\u00e4digten Mods, einer langsameren Installation von Updates, einem besch\u00e4digten Mod-Manager, einem besch\u00e4digten abgesicherten Modus und anderen Problemen f\u00fchren.
"},{"location":"de/FAQ/How-to-deactivate-mods/#wie-deaktiviereentferne-ich-meine-mods","title":"Wie deaktiviere/entferne ich meine Mods?","text":"Es gibt drei M\u00f6glichkeiten, m\u00f6gliche Probleme bei der Verwendung von BeamMP zu l\u00f6sen.
"},{"location":"de/FAQ/How-to-deactivate-mods/#1-mods-deaktivieren","title":"1. Mods deaktivieren","text":"Bevor du einem Server beitrittst, stelle sicher, dass du au\u00dfer \u201emultiplayerbeammp\u201c keine Mods aktiviert hast. Wenn das Spiel einfriert oder weiterhin Probleme auftreten, probiere den n\u00e4chsten Schritt.
"},{"location":"de/FAQ/How-to-deactivate-mods/#2-erstellen-eines-neuen-benutzerordners","title":"2. Erstellen eines neuen Benutzerordners","text":"\u00d6ffne 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\u00dfe BeamNG.drive, bevor du ihn umbenennst.
"},{"location":"de/FAQ/How-to-deactivate-mods/#3-entfernen-von-mods-aus-dem-content-ordnern","title":"3. Entfernen von Mods aus dem content Ordnern.","text":"Um auf den Ordner Beamng.drive\\content\\ zuzugreifen und ihn von allen Mods zu bereinigen, \u00f6ffne den Installationsort von BeamNG.drive. Klicke mit der rechten Maustaste auf den Ordner content
und l\u00f6sche ihn. \u00dcberpr\u00fcfe anschlie\u00dfend die Spieldateien \u00fcber Steam oder Epic Games. Dadurch werden die Dateien erneut heruntergeladen.
Starte anschlie\u00dfend BeamNG.Drive \u00fcber den BeamMP-Launcher. Im Repository sollte \u201emultiplayerbeammp\u201c als einziger aktivierter Mod verf\u00fcgbar sein. Im Hauptmen\u00fc findest du au\u00dferdem die Schaltfl\u00e4che zum Aufrufen von BeamMP. Solltest du weiterhin Probleme beim Beitritt zu gemoddeten Servern haben, liegen wahrscheinlich defekte/veraltete Mods vor.
"},{"location":"de/FAQ/How-to-deactivate-mods/#4-beammp-launcher-cache-bereinigen","title":"4. BeamMP-Launcher Cache bereinigen","text":"Um zwischengespeicherte Mods aus den BeamMP-Verzeichnissen zu entfernen, gehe zum Installationsort deines BeamMP-Launchers. Standardm\u00e4\u00dfig lautet der Pfad \u201eC:\\Benutzer\\AppData\\BeamMP-Launcher\u201c. Dort findest du den Ordner \u201eRessourcen\u201c. L\u00f6sche diesen Ordner, um alle zwischengespeicherten Mods zu l\u00f6schen. Dies kann hilfreich sein, wenn du mehr Speicherplatz auf deiner Festplatte ben\u00f6tigst oder veraltete BeamNG-Mods entfernen m\u00f6chtest.
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 \u201eEinstellungen\u201c und \u201eFahrzeuge\u201c 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.
"},{"location":"de/FAQ/game-faq/","title":"F.A.Q.","text":"Liste der \u00f6fters auftretenden Fragen.
"},{"location":"de/FAQ/game-faq/#wie-installiere-ich-beammp","title":"Wie installiere ich BeamMP?","text":"Eine vollst\u00e4ndige Anleitung zur Installation von BeamMP unter Windows findet man hier .
"},{"location":"de/FAQ/game-faq/#funktioniert-beammp-mit-einer-gecrackten-version-von-beamng","title":"Funktioniert BeamMP mit einer gecrackten Version von BeamNG?","text":"BeamMP funktioniert nicht mit Raubkopien oder veralteten Versionen von BeamNG.drive. Das BeamMP-Supportteam bietet keinen Support bei Problemen mit gecrackten/veralteten Kopien.
"},{"location":"de/FAQ/game-faq/#funktioniert-beammp-unter-linux","title":"Funktioniert BeamMP unter Linux?","text":"Der BeamMP-Launcher wird unter Linux nicht offiziell unterst\u00fctzt. Du kannst jedoch unserer Anleitung zur Verwendung von BeamMP unter Linux folgen.
"},{"location":"de/FAQ/game-faq/#warum-wird-der-launcher-von-meinem-antivirenprogramm-oder-windows-defender-als-virus-erkannt","title":"Warum wird der Launcher von meinem Antivirenprogramm oder Windows Defender als Virus erkannt?","text":"Einige Antivirus Programme Melden BeamMP m\u00f6glicherweise als Bedrohung, weil es mit dem Netzwerk und anderen Komponenten interagiert. Es gibt keine Schadsoftware im Code. Der Code f\u00fcr den Launcher, Server und Lua Client k\u00f6nnen auf unserem GitHub gefunden werden.
"},{"location":"de/FAQ/game-faq/#ich-habe-schlechte-spiel-leistung-was-soll-ich-tun","title":"Ich habe schlechte Spiel Leistung, was soll ich tun?","text":"Wir arbeiten hart daran, die Mehrspieler Erfahrung so Stabil wie m\u00f6glich zu gestalten. Wenn du deine Grafik Einstellungen bereits heruntergesetzt hast, aber die Leistung immer noch eingeschr\u00e4nkt ist, versuche es auf Servern mit weniger Spieler. Das Spiel ist haupts\u00e4chlich CPU gebunden, wenn du mit mehreren Personen spielst, \u00e4ltere CPUs (sogar quadcores) werden schon unter einer Hand voll an Spielern leiden. (Generelle Daumenregel: 1 Auto pro 1 CPU Thread)
"},{"location":"de/FAQ/game-faq/#verschiedenes","title":"Verschiedenes","text":""},{"location":"de/FAQ/game-faq/#wo-finde-ich-den-code","title":"Wo finde ich den Code?","text":"Der gesamte Source Code kann auf unserem GitHub gefunden werden. Bevor du \u00c4nderungen vornimmst, beachte, dass der Code unseren Nutzungsbedingungen und Lizenzen unterliegt:
Code Lizenz Server LIZENZ Launcher LIZENZ Client Lua LIZENZ"},{"location":"de/FAQ/game-faq/#ich-habe-einen-fehler-oder-einen-exploit-gefunden-was-soll-ich-tun","title":"Ich habe einen Fehler oder einen Exploit gefunden, was soll ich tun?","text":"Wenn das Problem etwas mit dem Code zu tun hat, \u00f6ffne eine neue \"Issue\" in dem jeweiligen Repository auf unserer GitHub Seite. Wir nutzen einen issue-basierten Workflow. Also auch wenn du bereits einen Fix f\u00fcr den Bug hast, erstelle eine neue \"Issue\", dann einen \"Pull Request\" mit der L\u00f6sung f\u00fcr das Problem. Weitere Informationen, wie du beitragen kannst, findest du hier.
Wenn du kein GitHub Konto hast, nicht wei\u00df wie man GitHub verwendet, oder hast andere Fragen, kannst du gerne mit uns in Kontakt \u00fcber folgende Wege treten:
Das Verkn\u00fcpfen deines Discord Kontos mit deinem BeamMP Konto ist eine neue Funktion bei BeamMP. Um das zu tun, musst du !link
in Form einer Nachricht an den BeamMP Konto Bot schicken. Der Bot wird mit einem Link antworten um dich dann mit deinem BeamMP Konto anzumelden. Logge dich einfach mit deinem BeamMP Konto ein. Erstmal abgeschlossen, wirst du eine zweite Nachricht erhalten, dass deine Konten nun verbunden sind.\ud83c\udf89
Early Access (mit dem Violetten Namensschild und weiteren Vorteilen) kann erworben werden, indem du uns finanziell auf Patreon unterst\u00fctzt. Entweder durchs kaufen von Stufen, Spenden oder Boosten des Discord Servers. Das Spenden von x Menge US$ = x zus\u00e4tzliche Server Schl\u00fcssel inklusive EA Vorteile. Boosten gibt dir +4 Server Schl\u00fcssel inklusive EA Vorteile.
"},{"location":"de/FAQ/player-faq/#ich-habe-ein-abonnement-auf-patreon-wie-bekomme-ich-meine-vorteile","title":"Ich habe ein Abonnement auf Patreon. Wie bekomme ich meine Vorteile?","text":"Stelle sicher, dass du folgendes tust um deine Vorteile automatisch zu bekommen:
Bitte habe Geduld. Es kann ein paar Stunden, manchmal bis zu 12, dauern damit das System die Daten synchronisiert. Wenn du deine Vorteile nach 12 Stunden immer noch nicht erhalten hast, aber alle Schritte oben vervollst\u00e4ndigt hast, kontaktiere den BeamMP Support.
"},{"location":"de/FAQ/player-faq/#ich-habe-weitere-fragen","title":"Ich habe weitere Fragen!","text":"Wenn deine Frage oder dein Problem sich auf BeamMP oder das Spielen bezieht, sieh dir das Spiel FAQs an. Wenn deine Frage oder dein Problem in Relation zum hosten eines Servers steht, verweisen wir auf die Server FAQs. Andernfalls pr\u00fcfe die Forums wo die Community Fragen stellen und Antworten erhalten kann.
"},{"location":"de/FAQ/server-faq/","title":"F.A.Q. und bekannte Probleme","text":"Liste h\u00e4ufig gestellter Fragen und bekannter Probleme.
"},{"location":"de/FAQ/server-faq/#wie-kann-ich-meine-eigenen-server-einrichten","title":"Wie kann ich meine eigenen Server einrichten?","text":"Alle Informationen um einen eigenen Server zu erstellen findest du hier.
"},{"location":"de/FAQ/server-faq/#kann-man-unter-linux-einen-server-erstellen","title":"Kann man unter Linux einen Server erstellen?","text":"Wir bieten Binaries f\u00fcr mehrere Linux Distributionen hier an. Wenn es keine Binaries f\u00fcr dein OS oder deine Distro gibt, kannst du diese selber bauen, indem du dir die Source von unserem GitHub runter l\u00e4dst. Ein Tutorial kannst du hier finden.
"},{"location":"de/FAQ/server-faq/#was-sind-die-hardware-mindestanforderungen-fur-einen-beammp-server","title":"Was sind die Hardware Mindestanforderungen f\u00fcr einen BeamMP-Server?","text":"Lies die Anleitung f\u00fcr das weiterleiten von Ports in diesem Artikel. Unten findest du die wichtigsten Schritte. Wenn andere Spieler versuchen deinen Server beizutreten, erhalten aber Fehlercodes wie 10060, 10061 oder 10038 in ihrem BeamMP-Launcher, dann beachte folgende Schritte.
Du kannst pr\u00fcfen, ob du erfolgreich Ports weitergeleitet hast, indem du CheckBeamMP verwendest w\u00e4hrend der Server l\u00e4uft.
IP adress: Port:Beachte:
Wenn der Server auf demselben Computer wie das Spiel l\u00e4uft, du selbst musst in dem Fall eine Direktverbindung mit 127.0.0.1 und dem Port deines Servers verwenden. Damit du deinem eigenen Server von der Server-Liste beitreten kannst, muss dein Router NAT-Loopback f\u00e4hig sein. Diese Funktion wird nicht von allen Home-Routern unterst\u00fctzt.
"},{"location":"de/FAQ/server-faq/#weitere-informationen","title":"weitere Informationen","text":""},{"location":"de/FAQ/server-faq/#wo-kann-ich-den-code-finden","title":"Wo kann ich den Code finden?","text":"Der Source Code kann auf unserem GitHub gefunden werden. Bevor du etwas damit anstellst, vergiss nicht, dass der Code unseren Nutzungsbedingungen und Lizenzen unterliegt:
Code Lizenz Server LIZENZ Launcher LIZENZ Client Lua LIZENZ"},{"location":"de/FAQ/server-faq/#ich-habe-einen-bug-oder-exploit-gefunden-was-soll-ich-tun","title":"Ich habe einen Bug oder Exploit gefunden. Was soll ich tun?","text":"Wenn das Problem auf den Code zur\u00fcckzuf\u00fchren ist, erstelle eine neue \"Issue\" im korrekten Repository auf GitHub. Wir nutzen einen issue-basierten Workflow. Wenn du einen Fix f\u00fcr das Problem gefunden hast, erstelle am besten trotzdem eine \"Issue\", dann erstelle einen \"Pull Request\" der deine \"Issue\" l\u00f6st. Weitere Informationen zum mitmachen findest du hier.
Wenn du keinen GitHub account hast oder nicht wei\u00dft, wie man GitHub nutzt, kannst du uns \u00fcber folgende Wege kontaktieren:
Wenn du einen Server mit einer unseren Partner Hosting Services hostest, wird die IP auf dem dedizierten Server Management Interface angezeigt. Du kannst die IP(s) f\u00fcr deine Server auf der Keymaster Webseite finden.
"},{"location":"de/FAQ/where-to-find-my-IP/#fur-heim-gehostete-server","title":"F\u00fcr Heim-gehostete Server","text":"F\u00fcr heim-gehostete Server, \u00f6ffne whatsmyip.org in einem Browser. Das wird die \u00f6ffentliche IPv4 Adress ausgeben, mit der du vom Internet aus kontaktiert wirst.
Beachte, dass 127.0.0.1 die Localhost Adresse ist und nur von dir verwendet werde kann, wenn der Server auf demselben Computer l\u00e4uft. Wenn du immer noch Verbindungsprobleme mit deinem heim-Server hast, pr\u00fcfe die Port Weiterleitung sowie CheckBeamMP
IP adress: Port:"},{"location":"de/FAQ/where-to-find-my-IP/#wie-pruft-man-auf-cgnat","title":"Wie pr\u00fcft man auf CGNAT?","text":"Schau dir diese Seite an, um festzustellen, ob du einen Server daheim hosten kannst oder nicht.
Tags: IP, Server, Connection Failed, 10060/10061
"},{"location":"de/beamng/","title":"Willkommen zur BeamNG.drive-Dokumentation","text":"Diese Dokumentation ist inoffiziell und wurde vom BeamMP Mod Team und der BeamNG Community erstellt.
"},{"location":"de/beamng/#die-dateistruktur-verstehen","title":"Die Dateistruktur verstehen","text":"...
"},{"location":"de/beamng/#ausschnitte","title":"Ausschnitte","text":"Hilfreiche Code-Ausschnitte finden Sie hier: Snippets
"},{"location":"de/beamng/snippets/","title":"Helpful Code Snippets","text":"Diese Seite befindet sich im Aufbau!
An dieser Seite wird aktiv gearbeitet.
Haben Sie das Gef\u00fchl, Sie k\u00f6nnten helfen? Bitte klicken Sie dazu auf das Blatt-mit-Bleistift Symbol auf der rechten Seite!
Dies kann auch auf jeder anderen Seite erfolgen.
"},{"location":"de/beamng/snippets/#beamngdrive-code-ausschnitte","title":"BeamNG.drive Code Ausschnitte","text":""},{"location":"de/beamng/snippets/#lua-code-ausschnitte","title":"Lua-Code-Ausschnitte","text":""},{"location":"de/beamng/snippets/#zeichnen-einer-markierung-und-fahrzeugerkennung","title":"Zeichnen einer Markierung und Fahrzeugerkennung","text":"Das Zeichnen von Markierungen in der Karte kann eine der besten M\u00f6glichkeiten sein, dem Benutzer anzuzeigen, dass dort irgendeine Form der Interaktion m\u00f6glich ist.
Das Zeichnen eines Markers ist ziemlich einfach. Hier ist ein Beispiel daf\u00fcr, wie die Buslinienmarkierung gezeichnet wird:
local function createBusMarker(markerName)\n local marker = createObject('TSStatic')\n marker:setField('shapeName', 0, \"art/shapes/interface/position_marker.dae\")\n marker:setPosition(vec3(0, 0, 0))\n marker.scale = vec3(1, 1, 1)\n marker:setField('rotation', 0, '1 0 0 0')\n marker.useInstanceRenderData = true\n marker:setField('instanceColor', 0, '1 1 1 0')\n marker:setField('collisionType', 0, \"Collision Mesh\")\n marker:setField('decalType', 0, \"Collision Mesh\")\n marker:setField('playAmbient', 0, \"1\")\n marker:setField('allowPlayerStep', 0, \"1\")\n marker:setField('canSave', 0, \"0\")\n marker:setField('canSaveDynamicFields', 0, \"1\")\n marker:setField('renderNormals', 0, \"0\")\n marker:setField('meshCulling', 0, \"0\")\n marker:setField('originSort', 0, \"0\")\n marker:setField('forceDetail', 0, \"-1\")\n marker.canSave = false\n marker:registerObject(markerName)\n scenetree.MissionGroup:addObject(marker)\n return marker\n end\n\n -- this can then be called in a loop to setup your markers.\n -- NOTE: You should only do this once as part of your setup and not called on each frame.\n if #markers == 0 then\n for k,v in pairs(nameMarkers) do\n local mk = scenetree.findObject(v)\n if mk == nil then\n log('I', logTag,'Creating marker '..tostring(v))\n mk = createBusMarker(v)\n ScenarioObjectsGroup:addObject(mk.obj)\n end\n table.insert(markers, mk)\n end\n end\n
Hier ist ein Beispiel f\u00fcr einen benutzerdefinierten Marker von BeamNG-FuelStations :
local stations = [\n { \"location\": [ -778.813, 485.973, 23.46 ], \"type\":\"gas\" },\n { \"location\": [ 617.164, -192.107, 53.2 ], \"type\":\"ev\" },\n ]\n\n local function IsEntityInsideArea(pos1, pos2, radius)\n return pos1:distance(pos2) < radius\n end\n\n local onUpdate = function (dt)\n for k, spot in pairs(stations) do -- loop through all spots on the current map\n local bottomPos = vec3(spot.location[1], spot.location[2], spot.location[3])\n local topPos = bottomPos + vec3(0,0,2) -- offset vec to get top position (2m tall)\n\n local spotInRange = false -- is this spot in range? used for color\n local spotCompatible = false -- is this spot compatible?\n\n if activeVeh then -- we have a car and its ours (if in mp)\n local vehPos = activeVeh:getPosition()\n\n spotInRange = IsEntityInsideArea(vec3(vehPos.x, vehPos.y,vehPos.z), bottomPos, 1.5)\n\n spotCompatible = activeFuelType == \"any\" or spot.type == \"any\" or activeFuelType == spot.type\n end\n\n local spotColor = (spotInRange and spotCompatible) and activeColorMap[spot.type] or inactiveColorMap[spot.type] or ColorF(1,1,1,0.5)\n\n debugDrawer:drawCylinder(bottomPos:toPoint3F(), topPos:toPoint3F(), 1, spotColor) --bottom, top, radius, color\n end\n end\n
"},{"location":"de/beamng/snippets/#guihooks-beispiele","title":"Guihooks-Beispiele","text":""},{"location":"de/beamng/snippets/#toast-benachrichtigungen-oben-rechts-auf-dem-bildschirm","title":"Toast-Benachrichtigungen, oben rechts auf dem Bildschirm","text":"--guihooks.trigger('toastrMsg', {type, title, msg, config = {timeOut}})\nguihooks.trigger('toastrMsg', {type = \"info\", title = \"Info Message:\", msg = \"Info Message Text Here\", config = {timeOut = 5000}})\nguihooks.trigger('toastrMsg', {type = \"warning\", title = \"Warning Message:\", msg = \"Warning Message Text Here\", config = {timeOut = 5000}})\nguihooks.trigger('toastrMsg', {type = \"error\", title = \"Error Message:\", msg = \"Error Message Text Here\", config = {timeOut = 5000}})\n
"},{"location":"de/beamng/snippets/#nachrichtenbenachrichtigungen-standardmaig-oben-links-auf-dem-bildschirm-in-der-nachrichten-app","title":"Nachrichtenbenachrichtigungen, standardm\u00e4\u00dfig oben links auf dem Bildschirm in der Nachrichten-App","text":"--guihooks.trigger('Message', {msg, ttl, category, icon}) --requires Messages app\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"arrow_upward\", icon = \"arrow_upward\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"arrow_downward\", icon = \"arrow_downward\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"flag\", icon = \"flag\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"check\", icon = \"check\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"check_circle\", icon = \"check_circle\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"warning\", icon = \"warning\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"error\", icon = \"error\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"directions_car\", icon = \"directions_car\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"star\", icon = \"star\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"timeline\", icon = \"timeline\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"save\", icon = \"save\"})\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"settings\", icon = \"settings\"})\n
"},{"location":"de/beamng/snippets/#zentrales-aufblinkendes-groes-oder-kleines-anzeigefenster","title":"Zentrales, aufblinkendes, gro\u00dfes oder kleines Anzeigefenster","text":"--guihooks.trigger('ScenarioFlashMessage', {{msg, ttl, sound, big}} ) -- requires RaceCountdown ui app\nguihooks.trigger('ScenarioFlashMessage', {{\"Message\", 5.0, 0, true}} )\nguihooks.trigger('ScenarioFlashMessage', {{\"Message Text Here\", 5.0, 0, false}} )\n\n--countdown example, when all executed at once, the items are queued and will follow eachother after the previous ttl expires\nguihooks.trigger('ScenarioFlashMessage', {{\"3\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown1')\", true}})\nguihooks.trigger('ScenarioFlashMessage', {{\"2\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown2')\", true}})\nguihooks.trigger('ScenarioFlashMessage', {{\"1\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown3')\", true}})\nguihooks.trigger('ScenarioFlashMessage', {{\"GO!\", 3.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_CountdownGo')\", true}})\n\n--another sound example\nguihooks.trigger('ScenarioFlashMessage', {{\"Teleported!\", 3.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Checkpoint')\", false}})\n
"},{"location":"de/beamng/snippets/#zentrales-mittelgroes-dauerhaftes-display","title":"Zentrales, mittelgro\u00dfes, dauerhaftes Display","text":"--guihooks.trigger('ScenarioRealtimeDisplay', {msg = msg} ) -- requires Race Realtime Display ui app\nguihooks.trigger('ScenarioRealtimeDisplay', {msg = \"Message Text Here\"} )\n--these messages persist, clear with a blank string\n--if you are running live data, this is a good one to update rapidly (think timers, distance calcs, et cetera)\nguihooks.trigger('ScenarioRealtimeDisplay', {msg = \"\"} )\n
"},{"location":"de/beamng/snippets/#imgui-codeausschnitte","title":"IMGUI-Codeausschnitte","text":""},{"location":"de/beamng/snippets/#cef-ui-codeausschnitte","title":"CEF-UI-Codeausschnitte","text":""},{"location":"de/beamng/dev/","title":"Introduction","text":"Diese Seite befindet sich im Aufbau!
An dieser Seite wird aktiv gearbeitet.
Haben Sie das Gef\u00fchl, Sie k\u00f6nnten helfen? Bitte klicken Sie dazu auf das Blatt-mit-Bleistift Symbol auf der rechten Seite!
Dies kann auch auf jeder anderen Seite erfolgen.
"},{"location":"de/beamng/dev/#einfuhrung-in-die-beamngdrive-entwicklungsumgebung","title":"Einf\u00fchrung in die BeamNG.drive Entwicklungsumgebung","text":""},{"location":"de/beamng/dev/content/maps/","title":"Maps","text":"Diese Seite befindet sich im Aufbau!
An dieser Seite wird aktiv gearbeitet.
Haben Sie das Gef\u00fchl, Sie k\u00f6nnten helfen? Bitte klicken Sie dazu auf das Blatt-mit-Bleistift Symbol auf der rechten Seite!
Dies kann auch auf jeder anderen Seite erfolgen.
"},{"location":"de/beamng/dev/content/maps/#beamngdrive-kartenerstellung","title":"BeamNG.drive-Kartenerstellung","text":"...
"},{"location":"de/beamng/dev/content/maps/#einfuhrung","title":"Einf\u00fchrung","text":"...
"},{"location":"de/beamng/dev/content/maps/#erste-schritte","title":"Erste Schritte","text":"...
"},{"location":"de/beamng/dev/content/props/","title":"Props","text":"Diese Seite befindet sich im Aufbau!
An dieser Seite wird aktiv gearbeitet.
Haben Sie das Gef\u00fchl, Sie k\u00f6nnten helfen? Bitte klicken Sie dazu auf das Blatt-mit-Bleistift Symbol auf der rechten Seite!
Dies kann auch auf jeder anderen Seite erfolgen.
"},{"location":"de/beamng/dev/content/props/#erstellung-von-beamngdrive-requisiten","title":"Erstellung von BeamNG.drive-Requisiten","text":"...
"},{"location":"de/beamng/dev/content/props/#einfuhrung","title":"Einf\u00fchrung","text":"...
"},{"location":"de/beamng/dev/content/props/#erste-schritte","title":"Erste Schritte","text":"...
"},{"location":"de/beamng/dev/content/vehicles/","title":"Vehicles","text":"Diese Seite befindet sich im Aufbau!
An dieser Seite wird aktiv gearbeitet.
Haben Sie das Gef\u00fchl, Sie k\u00f6nnten helfen? Bitte klicken Sie dazu auf das Blatt-mit-Bleistift Symbol auf der rechten Seite!
Dies kann auch auf jeder anderen Seite erfolgen.
"},{"location":"de/beamng/dev/content/vehicles/#beamngdrive-fahrzeugerstellung","title":"BeamNG.drive Fahrzeugerstellung","text":"...
"},{"location":"de/beamng/dev/content/vehicles/#einfuhrung","title":"Einf\u00fchrung","text":"...
"},{"location":"de/beamng/dev/content/vehicles/#erste-schritte","title":"Erste Schritte","text":"...
"},{"location":"de/beamng/dev/modding/imgui-windows/","title":"imgui-windows.md","text":"Diese Seite muss erstellt werden
"},{"location":"de/beamng/dev/modding/lua-mods/","title":"lua-mods.md","text":"Diese Seite muss erstellt werden
"},{"location":"de/beamng/dev/modding/ui-apps/","title":"Erstellen einer UI-App","text":"Um eine UI-App zu erstellen, ben\u00f6tigst du einige Kenntnisse des AngularJS-Frameworks. Die Hauptdokumentation findest du hier: AngularJS-Dokumente
"},{"location":"de/beamng/dev/modding/ui-apps/#dateistruktur","title":"Dateistruktur","text":"Eine UI-App braucht vier wichtige Dateien um zu funktionieren:
Wir empfehlen die Verwendung des <style>
-Tags zum Stylen deiner App. Eine CSS-Datei funktioniert zwar, aber du kannst die \u00c4nderungen nicht in Echtzeit sehen.
Dieses Beispiel ist von DanielW. Danke an ihn.
ui\\modules\\apps\\ExampleApp\\app.html
<div style=\"width: 100%; height: 100%;\" class=\"bngApp\">\n <link type=\"text/css\" rel=\"stylesheet\" href=\"/ui/modules/apps/ExampleApp/app.css\" />\n\n <div id=\"exampleAppContainer\">\n <span>Gear: <span>{{ gearName }}</span></span>\n\n <div layout=\"row\" layout-align=\"center center\">\n <md-input-container flex>\n <label>Input</label>\n <input ng-model=\"message\" ng-keydown=\"sendMessage($event)\">\n </md-input-container>\n\n <md-button md-no-ink class=\"md-warn\" ng-disabled=\"!message\" ng-click=\"sendMessage()\">Send</md-button>\n </div>\n\n <span style=\"display: block\">Messages:</span>\n\n <!-- Scroll Area -->\n <ul bng-nav-scroll style=\"margin: 0; padding: 0; overflow-y: auto; width: 100%; height: 100%; background-color: #37373740;\">\n\n <!-- Iterate over the messages and display them -->\n <li ng-repeat=\"message in messages track by $index\" style=\"display: flex; align-items: center; height: 35px;\">\n <span style=\"padding: 0 0.2em; width: 100%;\">{{ message }}</span>\n\n <!-- Button to delete the message, this calls the `deleteMessage` function in `app.js` -->\n <md-button md-no-ink class=\"md-icon-button md-warn\" ng-click=\"deleteMessage($index)\">\n <md-icon class=\"material-icons\">delete</md-icon>\n </md-button>\n </li>\n </ul>\n </div>\n</div>\n
Hier siehst du ein <span>
-Tag, das den Gang deines Fahrzeugs anzeigt, eine Eingabe, die zum Senden einer Nachricht an die Funktion sendMessage()
im Javascript verwendet wird und ein wiederholtes <li>
-Tag, das ng-repeat f\u00fcr die Variable messages
im Javascript verwendet.
ui\\modules\\apps\\ExampleApp\\app.js
angular.module('beamng.apps')\n.directive('exampleApp', [function() {\n return {\n templateUrl: '/ui/modules/apps/ExampleApp/app.html',\n replace: true,\n restrict: 'EA',\n scope: true,\n\n controller: ['$scope', function($scope) {\n $scope.gearName = '0'\n $scope.message = ''\n $scope.messages = []\n\n // 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\n let steamList = ['engineInfo']\n StreamsManager.add(steamList)\n\n $scope.$on('destroy', function() {\n StreamsManager.remove(steamList)\n })\n\n // Do I even need to put this comment here explaining what this function does?\n // Well, I have done it for a lot of other things when they weren't needed. I'll leave this one be...\n $scope.$on('streamsUpdate', function(event, streams) {\n if (!streams.engineInfo) // Early return... You probably noticed that without this useless comment though\n return;\n\n // `lua/vehicle/controller/vehicleController.lua:538` (or use console.log)\n let gear = streams.engineInfo[5]\n\n // Update the gear name in HTML if needed\n if ($scope.gearName !== gear)\n $scope.gearName = gear\n })\n\n $scope.sendMessage = function(event) {\n if (event && event.key !== 'Enter')\n return\n\n if ($scope.message == '')\n return\n\n // Forward the message to the Lua extension to modify it\n bngApi.engineLua('extensions.exampleMod.modifyMessage(\"' + $scope.message + '\")')\n $scope.message = ''\n }\n\n $scope.deleteMessage = function(idx) {\n $scope.messages.splice(idx, 1)\n }\n\n // The `modifyMessage` function will call this hook with the modified data\n $scope.$on('MessageReady', function(_, modifiedMessage) {\n $scope.messages.push(modifiedMessage)\n });\n }]\n }\n}])\n
Beachte die Verwendung von $scope{/b0} . Dies ist sehr wichtig, da du deine Variablen und Funktionen innerhalb von {b1}$scope definieren musst, um vom HTML-Code innerhalb eines ng-*- Tags darauf zugreifen zu k\u00f6nnen. In diesem Beispiel wird die Funktion sendMessage()
nach der Ausf\u00fchrung vom HTML-Code an eine Lua-Datei im Erweiterungsverzeichnis des Mods gesendet und die Funktion modifyMessage()
in dieser Lua-Datei ausgef\u00fchrt.
Ein Beispiel wie die LUA Seite aussehen k\u00f6nnte:
local function modifyMessage(message)\n message = message .. \" [Modified!]\"\n guihooks.trigger('MessageReady', message)\nend\n
^ Das ist eine vereinfachte Version der lua um die Funktionen zu zeigen
Der Schwerpunkt liegt hier auf der Verwendung von guihooks.trigger , das ein mit $scope.$on()
definiertes AngularJS-Ereignis ausl\u00f6st. Wie du ganz unten in der Javascript-Datei sehen kannst, hei\u00dft das Ereignis MessageReady und wird von der Funktion guihooks.trigger mit der Nachrichtennutzlast ausgef\u00fchrt. Anschlie\u00dfend wird es in die Variable $scope.messages
eingef\u00fcgt, um vom li-Tag mit ng-repeat in der HTML -Datei angezeigt zu werden.
Die vollst\u00e4ndige Lua-Datei befindet sich unten
lua\\ge\\extensions\\exampleMod.lua
local M = {}\n\n--[[\n This is the entry point of our extension, this is what the game loads from our `modScript.lua`.\n In the modScript file, you can load more extensions and put them in the same directory as this file.\n\n In this file, we will communicate with the following:\n 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`\n 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)\n]]\n\n-- Game Function Hooks\n--------------------------------------------\nlocal function onExtensionLoaded()\n log('D', \"onExtensionLoaded\", \"Called\")\nend\n\nlocal function onExtensionUnloaded()\n log('D', \"onExtensionUnloaded\", \"Called\")\nend\n\n-- Custom Functions\n--------------------------------------------\nlocal function onActionKeyDown()\n log('D', \"onActionKeyDown\", \"Pressed!\")\nend\n\nlocal function onVehicleExtensionLoaded(vehID)\n log('D', \"onVehicleExtensionLoaded\", \"Sending some data to the vehicle\")\n\n local veh = be:getObjectByID(vehID) -- If you don't have the ID, you can also use `be:getPlayerVehicle(0)` to get the current vehicle.\n if not veh then return end -- The usual error checking\n\n local data = {\n [\"name\"] = \"Daniel W\"\n }\n\n veh:queueLuaCommand(\"extensions.exampleVehicleExtension.onDataReceived('\" .. jsonEncode(data) .. \"')\")\nend\n\nlocal function modifyMessage(message)\n message = message .. \" [Modified!]\"\n guihooks.trigger('MessageReady', message)\nend\n\n-- Export Interface\n--------------------------------------------\nM.onExtensionLoaded = onExtensionLoaded\nM.onExtensionUnloaded = onExtensionUnloaded\n\nM.onActionKeyDown = onActionKeyDown\nM.onVehicleExtensionLoaded = onVehicleExtensionLoaded\nM.modifyMessage = modifyMessage\n\n--[[ Other functions could include:\n - onPreRender(dtReal, dtSim, dtRaw)\n - onUpdate(dtReal, dtSim, dtRaw)\n - onClientPreStartMission(levelPath)\n - onClientPostStartMission(levelPath)\n\n To find all of these, search the following in `BeamNG.Drive/lua`: `extensions.hook(`\n--]]\n\nreturn M\n
Beachte , dass es sehr wichtig ist, die Variable M (Modul) mit den ben\u00f6tigten Funktionen zur\u00fcckzugeben! Ohne die Zeile M.modifyMessage = modifyMessage
kann die Funktion bngApi.engineLua('extensions.exampleMod.modifyMessage(\"' + $scope.message + '\")')
die Funktion modifyMessage() nicht finden.
ui\\modules\\apps\\ExampleApp\\app.css
#exampleAppContainer {\n width: 100%;\n height: 100%;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n align-content: center;\n}\n\n#exampleAppContainer > * {\n margin: 0;\n padding: 0;\n}\n
ui\\modules\\apps\\ExampleApp\\app.json
{\n \"domElement\": \"<example-app></example-app>\",\n \"name\": \"Example App\",\n \"types\": [\n \"ui.apps.categories.debug\"\n ],\n \"description\": \"example-app\",\n \"css\": {\n \"left\": \"0px\",\n \"height\": \"auto\",\n \"width\": \"270px\",\n \"min-width\": \"200px\",\n \"min-height\": \"90px\",\n \"top\": \"0px\"\n },\n \"author\": \"Daniel W\",\n \"version\": \"0.1\",\n \"directive\": \"exampleApp\"\n}\n
Die Direktive muss gleich wie in der Javascript Datei sein.
"},{"location":"de/beamng/dev/modding/ui-apps/#javascript-funktionen-bereitgestellt-von-beamng-fur-ui-apps","title":"Javascript Funktionen bereitgestellt von BeamNG f\u00fcr UI-Apps","text":"bngApi.engineLua(\"lua_path.function()\")\n
Hilfreich um eine lua Funktion ohne Argumente auszuf\u00fchren.
"},{"location":"de/beamng/dev/modding/ui-apps/#lua-funktionen-bereitgestellt-von-beamng-fur-ui-apps","title":"Lua Funktionen bereitgestellt von BeamNG f\u00fcr UI-Apps","text":"guihooks.trigger(\"EventName\", Payload)\n
Die Nutzlast kann von beliebigem Typ sein, aber es ist besser, sie als Array/Objekt oder Zeichenfolge beizubehalten, damit sie nicht verloren geht.
WICHTIG : Manchmal kann es vorkommen, dass der von dir verwendete Ereignisname intern bereits von etwas anderem verwendet wird und Probleme verursacht. Wenn deine App beispielsweise Nickel hei\u00dft, kann es eine gute Entscheidung sein, jedes deiner Angular-Ereignisse wie NKEventName anstelle von EventName zu benennen.
"},{"location":"de/game/error-codes/","title":"Fehlercodes","text":"Diese Seite enth\u00e4lt alle Fehlercodes, die der Launcher m\u00f6glicherweise anzeigt.
Code Beschreibung M\u00f6gliche L\u00f6sung 10048 Der Launcher-Port wird bereits von etwas anderem verwendet. Stelle sicher, dass immer nur EINE Instanz des BeamMP-Launchers ausgef\u00fchrt wird. Versuche eventuell, den PC neu zu starten. 10038 / 10060 / 10061 Kein Server hat auf der angegebenen IP und/oder Port geantwortet Wenn du der Serverbesitzer bist, \u00fcberpr\u00fcfen bitte die Portweiterleitungs- und/oder Firewall-Regeln, die du unter BeamMP-Server finden. Wenn du nicht der Serverbesitzer bist, w\u00e4hle einen anderen Server oder kontaktiere den Besitzer, falls bekannt. 10054 Verbindung vom Peer zur\u00fcckgesetzt Der Server, mit dem eine Verbindung hergestellt werden soll, ist offline. Failed to find the game please launch it. Report this if the issue persists code 3. Der Launcher konnte die Spielinformationen (Spielverzeichnis, Profilverzeichnis, Version usw.) im Registrierungseintrag nicht finden Starte das Spiel mindestens einmal, damit die Registrierungswerte erstellt werden. Failed to find the game please launch it. Report this if the issue persists code 4. Der Launcher konnte die Spielinformationen (Spielverzeichnis, Profilverzeichnis, Version usw.) im Registrierungseintrag nicht lesen Dieser Fehler tritt am wahrscheinlichsten bei Benutzern mit Raubkopien des Spiels auf. Wenn du das Spiel gekauft hast, starte es mindestens einmal, damit die Registrierungswerte erstellt werden. Failed to Launch the game! launcher closing soon Der Launcher konnte die ausf\u00fchrbare Datei des Spiels nicht finden Starte das Spiel mindestens einmal, bevor du den Launcher erneut ausf\u00fchrst. Game Closed! launcher closing soon Das Spiel wurde beendet Diese Meldung wird beim Beenden des Spiels oder wenn der Spielstart fehlgeschlagen ist, angezeigt. Launcher Update failed! Der Launcher konnte keine neue Version herunterladen \u00dcberpr\u00fcfe die Internetverbindung und Firewall-/Antivirusregeln, damit der Launcher nicht blockiert wird. Logger file init failed Der Launcher kann keine Dateien erstellen F\u00fchre den Launcher als Administrator aus. Please close the game and try again Das Spiel ist bereits ge\u00f6ffnet und der Launcher kann den Ordnermultiplayer/mods
nicht leeren. Schlie\u00dfe das Spiel und versuche es erneut. Please launch the game at least once Der Launcher hat versucht, das Verzeichnis des Spiels zu \u00e4ndern, was jedoch fehlschlug Starte das Spiel mindestens einmal, bevor du den Launcher erneut ausf\u00fchrst. Primary Servers Offline! sorry for the inconvenience! Der Launcher konnte nicht nach einem Update suchen \u00dcberpr\u00fcfe die Internetverbindung und Firewall-Regeln. Wenn kein Problem vorliegt, \u00fcberpr\u00fcfe bitte den BeamMP-Updatekanal auf unserem Discord. Sorry Backend System Outage! Don't worry it will back on soon! Das BeamMP-Backend hat nicht geantwortet \u00dcberpr\u00fcfe die Internetverbindung und Firewall-Regeln. Wenn kein Problem vorliegt, \u00fcberpr\u00fcfe bitte den BeamMP-Updatekanal auf unserem Discord. Stuck on updating Der Launcher bleibt beim Aktualisieren h\u00e4ngen und f\u00e4hrt nicht mit dem n\u00e4chsten Schritt fort F\u00fchre den Launcher als Administrator aus und \u00fcberpr\u00fcfe deine Antivirenregeln, damit der Launcher nicht blockiert wird. Wenn der Launcher sofort geschlossen wird, \u00fcberpr\u00fcfe die Datei Launcher.log
im Ordner, in welchem BeamMP installiert wurde.
BeamMP ist vollst\u00e4ndig kompatibel mit Windows und Linux, an der Kompatibilit\u00e4t mit MacOS noch wird gearbeitet. Da es sich bei Linux und MacOS jedoch um sekund\u00e4re Plattformen handelt, sind Fehler zu erwarten.
Warnung
BeamMP funktioniert nicht mit Raubkopien oder veralteten Versionen von BeamNG.drive. Das BeamMP-Support Team bietet keinen Support f\u00fcr Probleme mit Raubkopien / veralteten Kopien.
"},{"location":"de/game/getting-started/#2a-windows-installation","title":"2a. Windows Installation","text":"BeamMP_Installer.zip
.BeamMP_Installer.exe
und folge den Anweisungen.Repository
und stelle sicher, dass multiplayerbeammp
der einzige aktivierte Mod ist.Connect
. Viel Spa\u00df!Wenn du in eine Sitzung mit mehreren bereits gespawnten Autos beitrittst, k\u00f6nnte das Laden eventuell etwas l\u00e4nger dauern.
"},{"location":"de/game/getting-started/#2b-linux-installation","title":"2b. Linux Installation","text":"Derzeit musst du den Launcher selbst erstellen. Dazu ben\u00f6tigst du grundlegende Kenntnisse zum Erstellen einer Anwendung.
Stelle sicher, dass vcpkg
sowie grundlegende Entwicklungstools installiert sind, welche oft in Paketen enthalten sind, zum Beispiel:
sudo apt install build-essential
sudo dnf install cmake gcc-c++ perl-IPC-Cmd perl-FindBin perl-File-Compare perl-File-Copy
sudo pacman -S base-devel
zypper in -t pattern devel-basis
sudo pacman -S base-devel linux-api-headers glibc libconfig
(Du musst auch sudo steamos-readonly disable
ausf\u00fchren, schalte es jedoch nach der Installation wieder ein)Klone das BeamMP-Launcher-Repository mit git
auf dein System, zum Beispiel: git clone https://github.com/BeamMP/BeamMP-Launcher.git
Weitere Informationen zum Klonen eines GitHub-Repos
Lade das \"Tag\", das f\u00fcr die neueste Version verwendet wurde. Wenn beispielsweise v2.3.2
in der neuesten Version verwendet wird, f\u00fchre git checkout v2.3.2
aus.
Im Stammverzeichnis des Projekts, f\u00fchre aus:
1.
cmake . -B bin -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux\n
2.
cmake --build bin --parallel\n
Sollte dir w\u00e4hrend des Erstellens der RAM ausgehen, kannst du die Anweisung --parallel weglassen. Dann wird weniger RAM verwendet, da das Erstellen nur auf einem CPU-Thread erfolgt.
Wenn du -DCMAKE_BUILD_TYPE=Release nicht spezifizierst, erstellst du eine Debug-Version, die zwar eine gr\u00f6\u00dfere Dateigr\u00f6\u00dfe hat, aber nicht den Fehler \u201eLauncher kann sich nur einmal mit einem Server verbinden\u201c enth\u00e4lt.
Verschiebe die fertige Anwendung aus dem /bin
Ordner in einen eigenen Ordner und f\u00fchre sie von dort aus aus.
Der native Linux BeamMP-Launcher wird gestartet und verwendet das native Linux BeamNG.drive
"},{"location":"de/game/getting-started/#2c-nutzung-beamngdrive-mit-proton","title":"2c. Nutzung BeamNG.drive mit Proton","text":"Wenn du den nativen Linux BeamMP-Launcher zusammen mit BeamNG.drive, das \u00fcber Proton l\u00e4uft, verwenden m\u00f6chtest, kannst du dies folgendermassen tun:
Starte den BeamMP-Launcher mit dem Argument --no-launch
(dadurch wird verhindert, dass der Launcher das native Linux BeamNG.drive startet). Weitere Informationen zu den Launcher-Argumenten findest du im Abschnitt \u201eEinrichtung der Entwicklungsumgebung\u201c.
\u00c4ndere den Speicherort des Benutzerordners von Proton-BeamNG.drive in den Speicherort von Linux-BeamNG.drive (da der native Linux BeamMP-Launcher derzeit nur in den Benutzerordner des Linux-BeamNG.drive schreibt).
Dies kann beispielsweise durch die Erstellung eines symbolischen Links erfolgen.
~/.local/share/BeamNG.drive
) und benenneihn um, beispielsweise in BeamNG.drive_old
~/.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
Wenn der symbolische Link zwischen den Benutzerordnern und dem kompilierten Launcher vorhanden ist, kann Steam das Spiel \u00fcber Proton ausf\u00fchren lassen und gleichzeitig den Launcher automatisch mit dem folgenden Ersatz f\u00fcr die Startoptionen f\u00fcr das Standardspiel ausf\u00fchren, die im Eigenschaftenfenster des Spiels in seinem Eintrag in Steam zu finden sind:
~/BeamMP/BeamMP-Launcher --no-launch & %command% ; killall BeamMP-Launcher
Beachte, dass hierbei davon ausgegangen wird, dass die Bin\u00e4rdatei des Launchers, die Sie zuvor kompiliert wurde, in /home/user/BeamMP/
abgelegt wurde. \u00c4ndere diese daher so, dass sie mit der Stelle \u00fcbereinstimmt, an der du die fertige Bin\u00e4rdatei abgelegt hast. Au\u00dferdem musst du den Launcher jedes Mal mit dem richtigen Git-Zweig neu kompilieren, wenn ein Launcher-Update ver\u00f6ffentlicht wird.
Hinzuf\u00fcgen von emoji-font um in-text emojis zu erhalten
Damit Emojis entweder in der Serverliste (als Teil eines benutzerdefinierten Servernamens) oder im Ingame-Chat angezeigt werden, ben\u00f6tigst du eine Schriftart, die Emojis enth\u00e4lt.
Dies kann beispielsweise durch Hinzuf\u00fcgen des Linux-Ports der Windows Segoe-UI-Emoji-Schriftart erfolgen.
"},{"location":"de/game/getting-started/#3-bekannte-probleme","title":"3. Bekannte Probleme","text":"Solltest du weitere Hilfe bei der Installation ben\u00f6tigen, kannst du einen Beitrag in unserem Forum erstellen oder auf unserem Discord-Server nachfragen.
"},{"location":"de/guides/beammp-dev/beammp-dev/","title":"Erste Schritte","text":"Um mit der Entwicklung f\u00fcr BeamMP zu beginnen, ben\u00f6tigst du mindestens:
BeamMP ist in drei Hauptteile unterteilt:
Um effizient an Mods in BeamNG arbeiten zu k\u00f6nnen, empfiehlt es sich, einen unpacked
Ordner zu verwenden, anstatt nach jeder \u00c4nderung Zip-Dateien zu verpacken.
\u00d6ffne den BeamNG-Benutzerordner, indem du zu %appdata%/Local/BeamNG.drive/0.xx/mods
navigierst, wobei xx
die neueste BeamNG-Version ist. Erstelle im Ordner mods
einen Ordner mit dem Namen unpacked
.
Weitere Informationen zum Benutzerordner finden sich unter https://documentation.beamng.com/support/userfolder/
"},{"location":"de/guides/beammp-dev/beammp-dev/#aktivieren-des-entwicklermodus-im-beammp-launcher","title":"Aktivieren des Entwicklermodus im BeamMP-Launcher","text":"Um zu verhindern, dass ein automatisches Update den lokalen Git-Klon \u00fcberschreibt, kannst du dies mit dem Start-Argument --no-download
deaktivieren. Wenn du au\u00dferdem nicht m\u00f6chtest, dass der Launcher BeamNG automatisch startet, und Debug-Ausdrucke sehen m\u00f6chtest, wird die Verwendung von --dev
empfohlen.
--help
oder -h
Gibt die folgende Liste von Argumenten aus --port <port>
oder -p
\u00c4ndere den Standard-Port auf <port>
. Dies muss auch im Spiel ge\u00e4ndert werden --verbose
oder -v
Ausf\u00fchrlicher Modus, gibt Debugmeldungen aus --no-download
\u00dcberspringt den Download und die Installation des BeamMP Lua-Mods --no-update
\u00dcberspringe das Anwenden von Launcher-Updates (Du musst manuell aktualisieren) --no-launch
\u00dcberspringe den Start des Spiels (Du musst das Spiel manuell starten) --dev
Entwicklermodus, dasselbe wie --verbose --no-download --no-launch --no-update --game <args...>
oder -- <args...>
\u00dcbergibt Argumente an das Spiel"},{"location":"de/guides/beammp-dev/beammp-dev/#klonen-des-beammp-repos-in-den-entpackten-ordner","title":"Klonen des BeamMP-Repos in den entpackten Ordner","text":"Sie k\u00f6nnen die BeamMP-Mod-Dateien zwar manuell aus unserem GitHub-Repo kopieren, es wird jedoch dringend empfohlen, ein Quellcodeverwaltungssystem wie Git zu verwenden. Erstellen Sie zun\u00e4chst einen Fork von https://github.com/BeamMP/BeamMP
Am effizientesten ist es, das Repo direkt in den unpacked
Ordner zu klonen.
Bei verwendung vongit
, f\u00fchre git clone https://github.com/yourName/BeamMP
in einem PowerShell- oder CMD-Fenster aus, das aus dem unpacked
Ordner gestartet wurde. Stelle im Benutzerordner sicher, dass unter mods
kein multiplayer
Ordner mehr vorhanden ist und dass jetzt unpacked/beammp
vorhanden ist.
Probiere jetzt den Entwicklermodus aus. Starte den BeamMP-Launcher, starte BeamNG manuell und stelle im Spiel sicher, dass BeamMP der einzige aktive Mod ist. Du solltest BeamMP wie gewohnt verwenden k\u00f6nnen.
Mithilfe eines Code-Editors kann nun Code direkt im unpacked
Ordner hinzugef\u00fcgt oder ge\u00e4ndern werden. Du kannst die \u00c4nderungen dann ausprobieren, indem Lua im Spiel durch dr\u00fccken von Ctrl+L
neu geladen wird. Durch dr\u00fccken vonF5
kann die Benutzeroberfl\u00e4che neu geladen werden, falls \u00c4nderungen daran vorgenommen wurden.
Wenn du mit den \u00c4nderungen zufrieden bist, kann dies \u00fcber Git \"comitted\" werden. Auf der Git-SCM-Website finden sich Tutorials und Dokumentationen zur Verwendung von Git. Sobald die \u00c4nderungen comitted und (an Ihren Fork) gepusht wurden, k\u00f6nnen Sie einen Pull-Request stellen.
Wenn du auf Probleme st\u00f6\u00dft, kannst du jederzeit im #scripting-Kanal in unserem Discord nachfragen.
"},{"location":"de/guides/beammp-dev/beammp-dev/#einrichten-eines-lokalen-servers","title":"Einrichten eines lokalen Servers","text":"Beim Arbeiten mit BeamMP kann es von Vorteil sein, einen lokalen Server zu verwenden. Du kannst die allgemeine Serverinstallation durchf\u00fchren und dabei die ersten beiden Schritte f\u00fcr rein lokale Verbindungen \u00fcberspringen.
Setze den Server in der serverConfig.toml
auf privat und verwende dabei eine beliebige Zeichenfolge als AuthKey
.
Einzelheiten zum Codeformat, Commit-Nachrichtenformat, allgemeinen Best Practices f\u00fcr die Entwicklung usw. findest du in der Datei CONTRIBUTING.md
in jedem Repo. Diese Datei enth\u00e4lt ausf\u00fchrlichere Informationen zum Mitwirken. Die README.md
in jedem Repo enth\u00e4lt normalerweise auch Build-Schritte (f\u00fcr kompilierte Projekte).
Die Grundlagen f\u00fcr das Erstellen eines Servers
"},{"location":"de/server/create-a-server/#ubersicht","title":"\u00dcbersicht","text":"Von Zuhause aus einen Server anzubieten ist kostenlos. Einen externen VPS zu verwenden ist jedoch meist leichter und wesentlich sicherer!
Server sind ein integraler Teil von BeamMP. Spieler verbinden sich dar\u00fcber. Diese laufen nativ auf Windows und Linux.
Du kannst einen privaten Server erstellen, welcher nur zug\u00e4nglich f\u00fcr vertraute Personen ist, oder einen \u00f6ffentlichen Server, der in der Serverliste aufscheint.
Einen Server einzurichten ist ein Prozess von ein paar Schritten! Wenn du Probleme hast, Frage im Forum oder auf unserem Discord server im #support
Kanal. Siehe auch Server Wartung f\u00fcr mehr Informationen.
Lies dir die LICENSE des Servers vorher durch!
Achtung: Der Server unterst\u00fctzt nur IPv4 . Wenn du dir nicht sicher bist, welche du hast, schau auf whatsmyip.org nach. \u00a0Wenn die Adresse * _:_
\u00a0Doppelpunkte enth\u00e4lt, ist dies eine IPv6 Adresse. In diesem Fall solltest du \u00fcberpr\u00fcfen, ob du auch eine IPv4 Adresse hast. Du kannst hierzu deinen Anbieter anrufen oder jemanden im Haushalt fragen (Wenn sich jemand auskennt, wird es die Person bestimmt wissen). IPv6 support ist in Planung.*
Das Aufsetzen besteht aus folgenden Schritten. Du solltest alle davon durchgehen.
"},{"location":"de/server/create-a-server/#1-port-weiterleitung","title":"1. Port Weiterleitung","text":"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 \u00fcberspringen. Dieser Schritt ist jedoch notwendig, wenn Spieler au\u00dferhalb deines Haushaltes deinem heim-gehosteten Server beitreten sollen (au\u00dferhalb von deinem lokalen Netzwerk)
ACHTUNG:
Port forwarding ist ein Risiko.
Wenn du Ports weiterleitest, sind dir die Risiken beim \u00f6ffnen von Ports von deinem Heimnetz ins \u00f6ffentliche Netz bewusst und verlierst das Recht, BeamMP f\u00fcr jegliche Sch\u00e4den, welche deinem Haushalt passieren k\u00f6nnten, Haften zu lassen.
Wir \u00fcbernehmen keine Haftung f\u00fcr 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 an
"},{"location":"de/server/create-a-server/#partner-hosting-services-bezahlt","title":"Partner Hosting Services (bezahlt):","text":"Abh\u00e4ngig von deinem Setup musst du den BeamMP-Server m\u00f6glicherweise durch die Firewall lassen. Dies ist unter Windows der Fall (das Ausschalten der Firewall funktioniert in der Regel nicht ) und auf vielen vorinstallierten Linux-Servern.
Dort l\u00e4sst 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 \u201e1. Portweiterleitung\u201c verwendet hast (standartm\u00e4\u00dfig 30814).
Solltest du Probleme haben, frage auf unserem Forum oder auf unserem Discord server im #support
Kanal.
Der Authentifizierungsschl\u00fcssel, auch \u201cAuthentication Key\u201d oder \u201cAuthKey\u201d genannt, ist n\u00f6tig, um einen \u00d6ffentlichen Server zu erstellen. F\u00fcr einen privaten Server ben\u00f6tigst du nicht zwingend einen offiziellen Schl\u00fcssel, jedoch darf das Feld in der Konfigurationsdatei nicht leer gelassen werden. Du hast eine limitierte Anzahl an Schl\u00fcssel. Ein Schl\u00fcssel kann nur f\u00fcr einen Server auf einmal verwendet werden, also kannst du nicht 2 Server mitdemselben Schl\u00fcssel starten. Mehr Schl\u00fcssel k\u00f6nnen durch das Unterst\u00fctzen des Projektes erworben werden. Lies diesen Artikel f\u00fcr mehr Informationen.
WARNUNG
TEILE ODER ZEIGE DEN SCHL\u00dcSSEL NICHT. BEHANDLE IHN WIE EIN PASSWORT.
Um einen Schl\u00fcssel zu erwerben ist ein Discord Konto erforderlich. Das ist wichtig um gegen Spam zu sch\u00fctzen.
"},{"location":"de/server/create-a-server/#21-die-schlussel-ubersicht-offnen","title":"2.1. Die Schl\u00fcssel-\u00dcbersicht \u00f6ffnen","text":"Melde dich mit Discord beim Keymaster an. Klicke auf der Keymaster-Homepage links auf dem Bildschirm auf \u201eKeys\u201c:
"},{"location":"de/server/create-a-server/#22-einen-schlussel-erstellen","title":"2.2. Einen Schl\u00fcssel erstellen","text":"Um einen Schl\u00fcssel zu erstellen, klicke das gr\u00fcne ,,+\" oben rechts.
"},{"location":"de/server/create-a-server/#23-schlussel-informationen-eingeben","title":"2.3. Schl\u00fcssel-Informationen eingeben","text":"Als n\u00e4chstes, f\u00fclle das Feld f\u00fcr den Servernamen (das ist lediglich der Name des Schl\u00fcssels, nicht der Name vom Server in der Liste), dann klick ,,Create\".Beispiel:
es sollte am Ende wie folgt aussehen:
"},{"location":"de/server/create-a-server/#24-den-schlussel-kopieren","title":"2.4. Den Schl\u00fcssel kopieren","text":"Kopiere den Text im \u201cKey\u201d Feld. In diesem Beispiel w\u00e4re das 3173a2e-6az0-4542-a3p0-ddqq5ff95558
. Klicke das ,,Klemmbrett Symbol\" neben dem Schl\u00fcssel um diesen zu kopieren.
Es gibt Server-Anwendungen f\u00fcr Windows und Linux. Die folgenden zwei Abschnitte widmen sich Windows und Linux separat.
"},{"location":"de/server/create-a-server/#3a-installation-auf-windows","title":"3.a. Installation auf Windows","text":"F\u00fcr die Linux Installation, springe zum n\u00e4chsten Punkt.
Sei sicher, dass du die n\u00f6tigen Ports weitergeleitet hast. Ansonsten kann niemand au\u00dferhalb des Netzwerks dem Server beitreten!
BeamMP-Server.exe
.BeamMP-Server.exe
ablegst. Dort wird der Server betrieben.ServerConfig.toml
neben dem BeamMP-Server.exe
sehen.BeamMP-Server.exe
erstellen mittels [Rechtsklick] > Senden zu > Desktop (erstelle Verkn\u00fcpfung).Nun springe zu Schritt 4. Konfiguration
"},{"location":"de/server/create-a-server/#3b-installation-auf-linux","title":"3.b. Installation auf Linux","text":""},{"location":"de/server/create-a-server/#vorgefertigte-binaries-verwenden","title":"Vorgefertigte Binaries verwenden","text":"Dieser Schritt funktioniert auf allen Distributionen f\u00fcr die wir Binaries anbieten. Binaries findest du hier. Wenn du auf einer anderen Distribution bist, schau dir \"Binary selbst erstellen\u201d im Schritt darunter an.
BeamMP-Server-xxx
. Ansonsten denotiert xxx
die Version deiner Distro.BeamMP-Server-xxx
sehen, die du vorerst ignorieren kannst. Erstelle irgendwo einen Ordner und lege die BeamMP-Server-xxx
dort ab. Dort wird der Server betrieben.BeamMP-Server-xxx
liegt und f\u00fchre chmod +x BeamMP-Server-xxx
aus. Das stellt sicher, dass du die korrekte Berechtigungen hast../BeamMP-Server-xxx
. Der Server erstellt automatisch die ben\u00f6tigten Dateien. Wenn Text im Server Feld erscheint, kannst du diesen wieder schlie\u00dfen. Du solltest eine ServerConfig.toml
neben dem BeamMP-Server.exe
sehen.beammpserver
(oder \u00e4hnlich) zu erstellen, da wir empfehlen, NICHT den Server als root, sudo oder mit dem pers\u00f6nlichen Useraccount auszuf\u00fchren. Du solltest dann die n\u00f6tigen Schritte t\u00e4tigen um den Server als den Server-user zu starten.Nun springe zu Schritt \"4. Konfiguration\".
"},{"location":"de/server/create-a-server/#binary-selbst-erstellen","title":"Binary selbst erstellen","text":"Andere Distributionen zus\u00e4tzlich zu denen, f\u00fcr die es hier bereits eine Server-Binary gibt, funktionieren wahrscheinlich auch, werden aber nicht offiziell unterst\u00fctzt. Wenn du diese selbst erstellen m\u00f6chten, kannst du das tun, indem du die Quelle auf unserem GitHub herunterl\u00e4dst. Ein Tutorial findest du hier .
F\u00fchre zum Abschluss den Server unbedingt einmal mit ./BeamMP-Server
aus und fahre dann mit dem n\u00e4chsten Schritt fort.
Nachdem der Server einmal gestartet wurde, sollte er die n\u00f6tigen Dateien erstellt haben und einen oder zwei Fehler in die Konsole schreiben. Das ist normal, da wir noch nicht fertig sind.Es sollten nun folgende Dateien vorhanden sein:
Genannt ,,ServerConfig.toml\u201d, ,,Server.log\u201d und ,,BeamMP-Server.exe\u201d! (Je nach deinen Einstellungen, siehst du m\u00f6glicherweise die [.toml] [.log] [.exe] Erweiterungen nicht)
\u00d6ffne die ServerConfig.toml
mit einem Texteditor wie zum Beispiel Notepad
. Dies kannst du mit [Rechtsklick] \u2192 \u201e\u00d6ffnen mit\u2026\u201c und anschlie\u00dfender Auswahl eines Texteditors tun.
Die Datei sollte ungef\u00e4hr so aussehen
[General]\nAuthKey = ''\nDebug = false\nDescription = 'BeamMP Default Description'\nMap = '/levels/gridmap_v2/info.json'\nMaxCars = 1\nMaxPlayers = 10\nName = 'BeamMP Server'\nPort = 30814\nPrivate = false\nResourceFolder = 'Resources'\n
Dies ist deine Konfigurationsdatei. Diese verwendet das Format TOML. Weitere Informationen zu dieser Datei findest du im Abschnitt Serverwartung .
Als erstes k\u00fcmmern wir uns um den AuthKey
. Dazu muss der Schl\u00fcssel zwischen die Anf\u00fchrungszeichen \" \"
eingef\u00fcgt werden.
F\u00fcr unser Beispiel sollte der Eintrag so aussehen:
AuthKey = '3173a2e-6az0-4542-a3p0-ddqq5ff95558'\n
Vergib deinem Server einen Namen im Name
Feld. Du kannst diesen mit Farben und mehr formatieren. Siehe diese Sesktion auf der Server-Wartungsseite.
Wenn du einen anderen Port als 30814 ausgew\u00e4hlt 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
.
Nun f\u00fchre 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\u00e4hrst du, wie man dem Server beitritt.
Fahrzeug und Map Mods werden unterschiedlich im Server installiert, m\u00fcssen aber beide im Ordner (Resources/Client
) abelegt werden. Alle Mods die hinzugef\u00fcgt werden sollen kommen in diesen Ordner.
Wenn du nur modifizierte Fahrzeuge hinzuf\u00fcgen m\u00f6chtest, lege die Zip-Datei der Mods einfach in den Ordner Resources/Client
. Diese werden automatisch von jedem heruntergeladen, der dem Server beitritt.
Alle Standardkarten (Karten, die keine Mods sind) funktionieren sofort und m\u00fcssen nicht installiert werden. \u00c4ndere einfach die Map
in der ServerConfig.toml
Datei auf eine der folgenden Optionen . F\u00fcr alle anderen modifizierten Karten geht man wie folgt vor:
.zip
Datei der Karte in den Ordner Resources/Client
des Servers.levels
\u201c. In diesem Ordner sollte sich lediglich ein weiterer Ordner mit dem Namen der Karte befinden, zum Beispiel \u201emyawesomedriftmap2021\u201c. Achte darauf, diesen Namen genau so zu kopieren oder zu merken, wie er im Namen dieses Ordners geschrieben ist.ServerConfig.toml
. In der Map
Einstellung solltest du /levels/MAPNAME/info.json
sehen, wobei MAPNAME
wahrscheinlich so etwas wie gridmap_v2
ist. Ersetze diesen MAPNAME
nun durch den Namen des Ordners aus dem letzten Schritt. In diesem Beispiel war es myawesomedriftmap2021
. Am Ende sollte es so aussehen (f\u00fcr dieses Beispiel) und am Ende /info.json
haben.Map = '/levels/myawesomedriftmap2021/info.json'\n
Wenn jemand deinem Server beitritt, sollte die Karte automatisch heruntergeladen werden und wie erwartet funktionieren.
Wenn dies NICHT funktioniert , installiere die Karte in Ihrem Einzelspieler-BeamNG.drive, starte es und rufe die Karte auf. \u00d6ffne dann die Konsole, indem du die Taste ~
( Tilde ) dr\u00fcckst (wenn du eine nicht-US-Tastatur verwendest, sieh dir die Aktion Systemkonsole umschalten im Men\u00fc Optionen > Steuerung > Bindungen im Abschnitt Allgemeines Debuggen an ) und f\u00fchre print(getMissionFilename())
aus. Dies sollte dir dann den zu verwendenden Namen anzeigen.
Das w\u00e4rs! Die modifizierte Karte sollte jetzt geladen werden!
"},{"location":"de/server/create-a-server/#6-wie-du-deinem-server-beitrittst","title":"6. Wie du deinem Server beitrittst","text":"Wie du und andere Spieler deinem Server beitreten k\u00f6nnen.
"},{"location":"de/server/create-a-server/#6a-deinem-eigenen-server-beitreten-offentlich-privat","title":"6.a. Deinem eigenen Server beitreten (\u00f6ffentlich & privat)","text":"Wenn der Server auf demselben PC, auf dem du spielst, gehostet wird, solltest du mittels direkter Verbindung beitreten. Um das zu tun, klick Direkte Verbindung auf der linken Seite der Serverliste. Belasse die Standarddaten (sollte 127.0.0.1 und der dazugeh\u00f6rige Port sein) danach klicke Verbinden.
Wenn der Server auf einem anderen PC in deinem lokalen Netzwerk gehostet wird, solltest du die lokale IP von dieser Maschine herausfinden und diese zum direkt verbinden verwenden.
Wenn der Server au\u00dferhalb deines Haushaltes gehostet wird (z.B. VPS), musst du die \u00f6ffentliche IP von dieser Maschine herausfinden und mit dich mit dieser direkt verbinden.
"},{"location":"de/server/create-a-server/#6b-andere-spieler-die-deinem-server-beitreten","title":"6.b. Andere Spieler die deinem Server beitreten","text":"Du musst anderen Spielern die \u00f6ffentliche IP Adresse des Servers geben. Sei jedoch vorsichtig beim teilen deiner IP mit unbekannten! Um deinem privaten Server beizutreten, m\u00fcssen Spieler das Direkt Verbindung Men\u00fc aufrufen und die Server IP sowie dessen Port eingeben.
"},{"location":"de/server/create-a-server/#6c-andere-spieler-treten-deinem-offentlichen-server-bei","title":"6.c. Andere Spieler treten deinem \u00f6ffentlichen Server bei","text":"Um deinem \u00f6ffentlichen Server beizutreten, gehe zur Server Liste und gib den Namen des Servers ein und klicke ,,Connect\". Wenn du dir nicht sicher \u00fcber 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 Webseite f\u00fcr die IP des Servers pr\u00fcfen.
Sollten du oder deine Freunde einen ,,Verbindung Fehlgeschlagen!\" Fehler bekommen, pr\u00fcfe 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\u00fcfen ob du eine CGNAT IPv4 hast, finde die WAN IP Adresse im Router Interface. Vergleiche diese mit deiner \u00f6ffentlichen IP. Wenn diese gleich sind, hast du keine CGNAT IP. IPv6 Support ist noch NICHT implementiert.
Ich m\u00f6chte einen VPN wie RadminVPN, Hamachi oder \u00e4hnlich verwenden
BeamMP unterst\u00fctzt diese VPNs nicht, weil diese oft Probleme verursachen. Eines davon ist das blockieren von UDP Verkehr. Um dies zu beheben, siehe Sektion 1.
Aber warum hat es vorher funktioniert?
Das passiert, weil die Entwickler dieser Applikationen updaten und \u00c4nderungen implementiere, \u00fcber welche BeamMP keine Kontroll hat. Es liegt an den Entwicklern diesen Applikationen, um Support f\u00fcr spezifische F\u00e4lle wie eines BeamMP-Servers zu unterst\u00fctzen.
"},{"location":"de/server/create-a-server/#immer-noch-probleme","title":"Immer noch Probleme?","text":"\u00d6ffne ein Post auf dem Forum oder auf dem Discord server im #support
Kanal.
Diese Seite enth\u00e4lt jene Fehlermeldungen, die der Server anzeigen kann.
Code Beschreibung M\u00f6gliche L\u00f6sung 10022 Es gibt ein Problem mit der Anbindung des Ports Pr\u00fcfe, ob der Port f\u00fcr den Server bereits von einem anderen Service verwendet wird. 10048 Adresse bereits in Verwendung Ein anderer BeamMP Server oder Programm l\u00e4uft auf demselben Port. Benutze einen anderen Port. 10051 Netzwerk nicht erreichbar Schlechtes Port Forwarding oder \u00e4hnliche Probleme, stelle sicher, dass alles korrekt eingerichtet ist. 10052 Netzwerk neugestartet Tritt auf, wenn das Netzwerk die Verbindung verliert w\u00e4hrend eine Verbindung hergestellt wird. Versuche den Verbindungsaufbau erneut. 10053 Verbindung abgebrochen Verursacht durch Zeit\u00fcberschreitung oder Netzwerkfehler. Versuche es erneut. 10054 Verbindung von Peer abgebrochen Ein Client hat die Verbindung getrennt. 10060 Zeit\u00fcberschreitung der Verbindung Es gibt ein Problem mit der Port Weiterleitng. Siehe Port Weiterleitung. 10061 Verbindung nicht zugelassen Es gibt ein Problem mit der Port Weiterleitng. Siehe Port Weiterleitung. 10064 Host nicht verf\u00fcgbar Unwahrscheinlicher Fehler, aber bedeutet, der Server ist nicht erreichbar.Entweder weil der Server abgeschaltet ist, oder weil die Ports geschlossen wurden. 10065 Host nicht erreichbar Kein Internet oder schlechtes Port Forwarding. Sieh dir die Anleitung an.Note
F\u00fcr codes, welche nicht in der Liste vorkommen, siehe https://learn.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2 wenn du dich etwas mit Netzwerke / Sockets auskennst.
"},{"location":"de/server/manual/","title":"Server Anleitung","text":""},{"location":"de/server/manual/#umgebung","title":"Umgebung","text":"Der Server wird durch den Zustand verschiedener externe Parameter beeinflusst:
Der Ressourcenordner wird beim Start des Servers zusammen mit den Unterverzeichnissen \u201eClient\u201c und \u201eServer\u201c erstellt. Das Unterverzeichnis \u201eServer\u201c akzeptiert Ordner, die jeweils mindestens eine .lua
Datei enthalten. Jeder dieser Ordner im Unterverzeichnis \u201eServer\u201c wird als \u201ePlugin\u201c bezeichnet. .lua
Dateien im obersten Verzeichnis eines Plugins werden bei \u00c4nderungen neu geladen. Das Unterverzeichnis \u201eClient\u201c akzeptiert nur .zip
Dateien, die beim Start des Servers geladen werden in der Annahme, dass diese w\u00e4hrend der Laufzeit nicht ver\u00e4ndert werden.
Ab Server-Release v3.2.0 akzeptiert der BeamMP-Server Umgebungsvariablen, die Einstellungen in ServerConfig.toml \u00fcberschreiben. Alle ServerConfig-Variablen, die in der Kategorie/Sektion \u201eAllgemein\u201c vorhanden sind, sind in PascalCase geschrieben, die Umgebungsvariablen sind ALL_CAPS und haben das Pr\u00e4fix BEAMMP_
. Beispielsweise lautet die in ALL_CAPS konvertierte Einstellung MaxPlayers
MAX_PLAYERS
(beachten Sie das _
am Anfang eines neuen Wortes) und wird mit dem Pr\u00e4fix BEAMMP_MAX_PLAYERS
. Dies ist das Format, das f\u00fcr alle \u201eAllgemeinen\u201c Einstellungen verwendet wird. Die folgenden ENV-Variablen sind vorhanden:
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
Alle Umgebungsvariablen, die Konfigurationsparametern entsprechen, die Zeichenfolgen oder Zahlen sind, m\u00fcssen Zeichenfolgen sein, zum Beispiel BEAMMP_NAME=\"Cool Server\"
, BEAMMP_NAME=Server1
, BEAMMP_PORT=12345
. Umgebungsvariablen, die Konfigurationsparametern entsprechen, die Boolesche Werte (true/false, an/aus) sind, m\u00fcssen entweder true
oder 1
(beides bedeutet AN) oder ein beliebiger anderer Wert (bedeutet AUS) sein.
Diese Umgebungsvariablen erm\u00f6glichen es Hosting-Anbietern (und anderen Benutzern mit einer gr\u00f6\u00dferen Anzahl von Servern), hier \u201eAnbieter\u201c genannt, bestimmte Anbieterspezifische Einstellungen zu \u00fcberschreiben.
"},{"location":"de/server/manual/#beammp_provider_port_env-seit-v330","title":"BEAMMP_PROVIDER_PORT_ENV
(seit v3.3.0)","text":"Wenn dies auf eine nicht leere Zeichenfolge gesetzt wird, wird die Variable BEAMMP_PORT
durch eine andere ersetzt, um die Variable aus einer vorhandenen ENV zu lesen. Beispielsweise k\u00f6nnte Pterodactyl den SERVER_PORT
als ENV enth\u00fcllen. Um es mit einem BeamMP-Server zu verwenden, m\u00fcsste man BEAMMP_PORT=${SERVER_PORT}
eingeben, was ein wenig albern ist.
Stattdessen kannst du jetzt BEAMMP_PROVIDER_PORT_ENV=\"SERVER_PORT\"
verwenden, was den BeamMP-Server dazu veranlasst, den Port aus der ENV-Variable SERVER_PORT
zu lesen.
BEAMMP_PROVIDER_DISABLE_CONFIG
(seit v3.3.0)","text":"Wenn der Wert auf 1
oder true
gesetzt ist, wird die ServerConfig.toml
nicht generiert und, falls vorhanden, nicht gelesen . Der BEAMMP_AUTH_KEY
muss gesetzt sein, damit der Server funktioniert.
BEAMMP_PROVIDER_UPDATE_MESSAGE
(seit v3.2.2)","text":"Wenn dies auf eine nicht leere Zeichenfolge gesetzt wird, ersetzt dies die gesamte Update-Mitteilung, die standardm\u00e4\u00dfig lautet: \u201eNEW VERSION IS OUT! Please update to the new...\u201c usw. Es ist ERFORDERLICH , dass die von dir angegebene Update-Nachricht irgendwo {}
enth\u00e4lt, die der Server durch die neue Versionsnummer ersetzt. Ihre Update-Mitteilung k\u00f6nnte beispielsweise so aussehen:
BEAMMP_PROVIDER_UPDATE_MESSAGE=\"NEW VERSION of the BeamMP-Server has been released: {}! Please follow the update guide here: https://example.com/update-guide\"\n
Was in einer Update Meldung wie diese resultiert
NEW VERSION of the BeamMP-Server has been released: v5.0.2! Please follow the update guide here: https://example.com/update-guide\n
Bitte mach den User bewusst, dass sie das Update durchf\u00fchren sollen und erkl\u00e4re wie man das tut.
"},{"location":"de/server/manual/#eingabeaufforderungsargumente","title":"Eingabeaufforderungsargumente","text":"Starte den BeamMP Server mit dem --help
Argument um mehr zu erfahren. Zum Beispiel: ./BeamMP-Server --help
.
Diese Datei wird beim ersten Start generiert. Kommentare in der Datei sind die aktuellsten Informationen um zu verstehen, was jede Einstellung tut.
"},{"location":"de/server/manual/#arbeitsverzeichnis","title":"Arbeitsverzeichnis","text":"Das Arbeitsverzeichnis vom Server, nicht da wo der ausf\u00fchrbare Server liegt, ist der entscheidende Faktor, wo die ServerConfig.toml, Serverlog Dateien und der Ressourcen Ordner generiert wird.
"},{"location":"de/server/manual/#beschrankungen","title":"Beschr\u00e4nkungen","text":"Die folgenden Beschr\u00e4nkungen werden im BeamMP Backend auf die Server angewendet:
ACHTUNG
Das weiterleiten von Ports ist ein Risiko.
Durch die Portweiterleitung bist du dir den Risiken bewusst, die mit der \u00d6ffnung von Ports in das \u00f6ffentliche Netz verbunden sind. Daher verlierst du das Recht, BeamMP f\u00fcr alle Sch\u00e4den haftbar zu machen, die dir oder deinem Haushalt entstehen k\u00f6nnen.
Wir \u00fcbernehmen keine Verantwortung f\u00fcr Inhalte auf extern verlinkten Diensten oder Websites.
Wenn du diese Anleitung nicht verstehst, ziehe die Nutzung eines unserer Hosting Partner in Betracht.
Warnung
Bitte stelle sicher, dass dein Router kein 4G/5G-exklusives Ger\u00e4t ist. Wenn es sich um ein Hybridger\u00e4t handelt, w\u00e4hle sp\u00e4ter in Abschnitt 3 dieser Anleitung unbedingt den kabelgebundenen Adapter aus!
"},{"location":"de/server/port-forwarding/#so-richtest-du-die-portweiterleitung-ein","title":"So richtest du die Portweiterleitung ein.","text":"Das Erstellen einer Portweiterleitungsregel erfordert einige detaillierte Netzwerkbegriffe. Mach dir w\u00e4hrend des Vorgangs Notizen.
Diese Anleitung besteht aus vier Hauptschritten.
"},{"location":"de/server/port-forwarding/#eine-kurzanleitung-eine-ausfuhrlichere-anleitung-findest-du-weiter-unten","title":"Eine Kurzanleitung. (Eine ausf\u00fchrlichere Anleitung findest du weiter unten.)","text":"Weisen Sie Ihrem Computer oder Ihren Ger\u00e4ten eine statische IP-Adresse zu
ies ist erforderlich, um zu verhindern, dass sich die IP deines Ger\u00e4ts \u00e4ndert und die Portweiterleitung funktioniert.
Informationen zu Ihrem Router anzeigen
Melde dich bei deinem Router an
Dies kann normalerweise durch Suchen der IP des \u201eStandard-Gateways\u201c erfolgen, die gefunden werden kann, wenn ipconfig
in einer Eingabeaufforderung ausgef\u00fchrt und in die Adressleiste eines Webbrowsers eingegeben wird.
Leite Ports an deinen Computer weiter
Suche in der Weboberfl\u00e4che Ihres Routers nach dem Abschnitt zur Portweiterleitung. Bei den meisten Routern findet man dies unter \u201eNetzwerk\u201c, \u201eErweitert\u201c oder \u201eLAN\u201c.
Teste, ob dein Port richtig weitergeleitet wird
Verwenden Sie ein Tool wie CheckBeamMP, um zu testen, ob die Regel funktioniert.
IP adress: Port:
Eine weitere M\u00f6glichkeit, eine statische IP-Adresse in einem lokalen Netzwerk einzurichten, ist die DHCP-Reservierungsfunktion des Routers. Da nicht alle Router \u00fcber diese Funktion verf\u00fcgen, ist sie m\u00f6glicherweise nicht f\u00fcr dich geeignet. Suche im Internet nach einer Anleitung f\u00fcr dein Routermodell.
Wenn du dies geschafft hast, fahre direkt mit Schritt 2 fort
"},{"location":"de/server/port-forwarding/#methode-2-zuweisen-einer-statischen-ip-in-windows","title":"Methode 2: Zuweisen einer statischen IP in Windows","text":""},{"location":"de/server/port-forwarding/#11-finde-deine-aktuelle-ip-adresse-gateway-und-dns-server","title":"1.1. Finde deine aktuelle IP-Adresse, Gateway und DNS-Server:","text":"Bevor wir eine statische IP-Adresse einrichten k\u00f6nnen, ben\u00f6tigen wir deine aktuellen Netzwerkeinstellungen. Notiere diese, halte also ein Notepadfenster bereit. F\u00fcr diesen Schritt verwenden wir die Eingabeaufforderung.
\u00d6ffne die Eingabeaufforderung. Die drei wichtigsten M\u00f6glichkeiten sind:
Sobald du dich in der Eingabeaufforderung befindest, f\u00fchre den folgenden Befehl aus:
ipconfig /all\n
Du wirst eine Menge an Daten sehen. Wenn du virtuelle oder mehrere Netzwerkadapter verwendest, werden noch mehr Daten angezeigt. Bei der Installation von Hyper-V oder Docker werden h\u00e4ufig viele virtuelle Adapter angezeigt.
Es wird empfohlen, f\u00fcr den Betrieb dieses Servers eine kabelgebundene Netzwerkverbindung zu verwenden. Eine drahtlose Verbindung funktioniert jedoch auch. Suche in dieser Liste nach einem Adapter mit aktiver Internetverbindung. Scrolle durch die Liste und suche einen Adapter mit zugewiesenem Standard-Gateway. Viele virtuelle Adapter verf\u00fcgen \u00fcber kein Standard-Gateway.
Nachfolgend findest du Beispiele f\u00fcr lokale IPv4-Adressen, die mindestens einer der Adapter haben sollte. Notiere dir die Informationen deines Adapters.
Subnetzmaske (h\u00f6chstwahrscheinlich 255.255.255.0) Standard-Gateway (h\u00f6chstwahrscheinlich 192.168.0.1 oder 192.168.1.1)
!!! Info \u201eBeachte\u201c BeamMP unterst\u00fctzt derzeit kein IPv6 zum Hosten eines Servers.
"},{"location":"de/server/port-forwarding/#12-adaptereinstellungen-andern","title":"1.2. Adaptereinstellungen \u00e4ndern","text":"Nun m\u00fcssen wir die Einstellungen deines Netzwerkadapters \u00e4ndern, damit dein PC die aktuelle IP-Konfiguration beh\u00e4lt. So gelangst du am schnellsten zu den Netzwerkeinstellungen:
Du solltest eine Liste der Netzwerkverbindungen auf deinem Computer sehen. Wenn du einen Hyper-V oder Docker installiert hast, kann es viele davon geben. Suche nach Adaptern, die nicht \u201eHyper-V\u201c hei\u00dfen.
Klicke mit der rechten Maustaste auf deinen Adapter und w\u00e4hle Eigenschaften. Wenn Internet Protocol Version 4
nicht aktiviert ist, handelt es sich um den falschen Adapter. W\u00e4hle einen anderen.
Doppelklicken Sie auf Internet Protocol Version 4
\u00c4ndern Obtain an IP address automatically
beziehen in Use the following IP address
.
F\u00fclle die IP-Adresse, Subnetzmaske, das Standard-Gateway und den bevorzugten DNS-Server mit den Informationen aus der Eingabeaufforderung (ipconfig /all) aus.
Alternativ kannst du anstelle deines DNS-Servers entweder die CloudFlare- oder Google-DNS-Server verwenden:
Klicke auf \u201eOK\u201c und dann erneut auf \u201eOK\u201c. Dein Adapter ist nun von DHCP auf statisch umgestellt. Surfe im Internet, um sicherzustellen, dass du weiterhin eine Internetverbindung hast. Falls nicht, \u00e4ndere deine Einstellungen wieder auf \u201eIP-Adresse automatisch beziehen\u201c und versuche die n\u00e4chste Methode.
"},{"location":"de/server/port-forwarding/#2-melde-dich-bei-deinem-router-an","title":"2. Melde dich bei deinem Router an","text":"Da du jetzt eine statische IP-Adresse auf deinem Ger\u00e4t hast, kannst du den Port f\u00fcr BeamMP weiterleiten!
Zun\u00e4chst m\u00fcssen wir uns bei deinem Router anmelden. Zuvor hast du dir das Standard-Gateway notiert. Das ist die IP-Adresse deines Routers.
Die meisten Router verwalten ihre Ger\u00e4te \u00fcber eine lokal gehostete Webseite. So zeigst du das Men\u00fc und die Einstellungen deines Routers an:
Du solltest nun den Anmeldebildschirm deines Routers sehen. Nicht alle Router erfordern eine Anmeldung, die meisten jedoch schon. Du ben\u00f6tigst den Benutzernamen und das Passwort deines Routers. Wenn du dich noch nie angemeldet hast, sind der Benutzername und Ihr Passwort h\u00f6chstwahrscheinlich auf die werkseitigen Standardwerte eingestellt oder stehen in manchen F\u00e4llen auf einem Aufkleber auf Ihrem Router.
Einige der gebr\u00e4uchlichsten werkseitigen Benutzernamen und Passw\u00f6rter sind hier aufgef\u00fchrt:
Username Passwort admin admin admin password {leer} admin {leer} passwordProbiere verschiedene Kombinationen aus \u201eAdministrator\u201c, \u201ePasswort\u201c und lasse die Eintr\u00e4ge leer. Lasse den Wert bei \u201eLeer\u201c leer.
"},{"location":"de/server/port-forwarding/#3-port-weiterleitungsregeln-erstellen","title":"3. Port weiterleitungsregeln erstellen!","text":""},{"location":"de/server/port-forwarding/#31-suche-das-weiterleitungsmenu","title":"3.1. Suche das Weiterleitungsmen\u00fc","text":"Suche den Abschnitt zur Portweiterleitung in der Weboberfl\u00e4che deines Routers. Navigiere in deinem Router, indem du auf die Registerkarten oder Links oben oder links auf jeder Seite klickst. Die meisten Router listen den Abschnitt zur Portweiterleitung unter Netzwerk, Erweitert oder LAN auf. Suche nach den folgenden Schl\u00fcsselw\u00f6rtern, um ihn zu finden:
Sobald du den Bereich f\u00fcr die Portweiterleitung gefunden hast, kannst du die erforderlichen Informationen eingeben. Dein Router bietet dir die M\u00f6glichkeit, die weiterzuleitenden Ports und die Ziel-IP-Adresse f\u00fcr diese Portweiterleitung einzugeben. Wenn dein Router sowohl interne als auch externe Ports angibt, achte darauf, dass diese identisch sind.
BeamMP erfordert sowohl UDP- als auch TCP-Port 30814 (es sei denn, du hast diesen in deiner ServerConfig.toml ge\u00e4ndert).
!!!! info \"Hinweis\" Der Standardport ist 30814. Du kannst aber auch andere Ports gr\u00f6\u00dfer als 1024 und kleiner als 65535 w\u00e4hlen. Notiere dir deine Wahl, falls diese nicht 30814 ist. Du musst sowohl TCP als auch UDP weiterleiten. Es wird empfohlen, den Standardport beizubehalten, da dieser h\u00f6chstwahrscheinlich nicht von einem anderen Dienst auf Ihrem PC verwendet wird. Wenn du jedoch mehrere Server auf einem Rechner hostest, ben\u00f6tigt jeder Server einen anderen Port. Server 1: 30814, Server 2: 30815 zum Beispiel.
Auf einigen Routern muss man m\u00f6glicherweise zwei Regeln erstellen, eine f\u00fcr UDP und eine f\u00fcr TCP, w\u00e4hrend andere praktisch sind und dir beides mit einer einzigen Regel erm\u00f6glichen!
Die meisten Router verf\u00fcgen \u00fcber eine Schaltfl\u00e4che \u201eSpeichern\u201c und bei manchen Routern ist ein Neustart oder Reboot erforderlich, damit die \u00c4nderungen wirksam werden.
"},{"location":"de/server/port-forwarding/#4-zeit-zum-testen","title":"4. Zeit zum Testen!","text":"Es gibt verschiedene M\u00f6glichkeiten, die Verbindung zu testen.
Wir empfehlen die Verwendung unseres Tools CheckBeamMP, da dieses auf BeamMP-spezifische Probleme und Protokolle testet.
IP adress: Port:Dies kann durch die Abfrage deiner \u00f6ffentlichen IPv4-Adresse erfolgen. Auch hierf\u00fcr gibt es verschiedene M\u00f6glichkeiten. Die h\u00e4ufigste Methode ist die Nutzung der Website whatsmyip.org . Diese einfache Website zeigt deine \u00f6ffentliche IP-Adresse an. Du solltest nach einer IP-Adresse im Format xxx.xxx.xxx.xxx suchen.
Besuche den folgenden Link und ersetzen Sie \"IP\" durch deine tats\u00e4chliche IPv4-Adresse und \"Port\" durch den Port deines Servers. Achte darauf, keine Leerzeichen zu hinterlassen. https://check.beammp.com/api/v2/beammp/ip/port
status: ok
Wenn du die obige Ausgabe erh\u00e4ltst, kannst du des jetzt deinem Server beitreten! Es gibt zwei M\u00f6glichkeiten, beizutreten: entweder direkt mit den Daten, die du in probablyup eingegeben hast, oder, wenn dein Server auf \u201e\u00f6ffentlich\u201c eingestellt ist, \u00fcber die Serverliste. Da du einen Server vor Ort hostest, verwenden 127.0.0.1 (localhost), wenn der Server auf demselben PC l\u00e4uft, auf dem du spielst, oder die LAN-IPv4 des lokalen Computers, auf dem der Server l\u00e4uft.
status: error
Wenn die Verbindung vollst\u00e4ndig fehlschl\u00e4gt, verwendet dein Anbieter m\u00f6glicherweise CGNAT (Carrier Grade Network Address Translation). Weitere Informationen findest du unter Wie kann ich auf CGNAT pr\u00fcfen?, oder \u00f6ffne ein Server-Support-Ticket auf unserem Discord-Server im Kanal \u201e#support\u201c und einer unserer Mitarbeiter wird sich um dein Ticket k\u00fcmmern! Wenn du nur siehst, dass TCP funktioniert und UDP fehlschl\u00e4gt, \u00fcberpr\u00fcfe die Firewall- und Portweiterleitungsregeln erneut.
"},{"location":"de/server/server-maintenance/","title":"Server Wartung","text":"Anleitungen, Tipps und Tricks wie man einen BeamMP-Server konfiguriert und wartet.
"},{"location":"de/server/server-maintenance/#wie-man-den-server-installiert","title":"Wie man den Server installiert","text":"F\u00fcr Installations-Instruktionen, siehe Server Installation.
"},{"location":"de/server/server-maintenance/#die-serverconfig-datei","title":"Die ServerConfig Datei","text":"Die Serverkonfiguration, eine Datei mit dem Namen ServerConfig.toml
, verwendet das TOML-Format .
HINWEIS : Die alte Serverkonfigurationsdatei hie\u00df Server.cfg
. Diese wird jedoch nicht mehr verwendet. Der Server warnt dich, wenn diese noch vorhanden ist. Bitte beachte auch, dass die beiden Konfigurationsformate nicht miteinander kompatibel sind.
Die Konfiguration hat standardm\u00e4\u00dfig einen Abschnitt namens [General]
, der die folgenden Werte enth\u00e4lt:
xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
wobei alle ,,x\" Alphanumerische Charaktere (Nummern und Buchstaben) Wird verwendet, um den Server beim Backend zu identifizieren. Du solltest einen beim folgen der Installations-Instruktionen bekommen haben. Debug true /false Wenn aktiviert (true), werden mehr Meldungen im Protokoll angezeigt und mehr Informationen bereitgestellt. Aktiviere diese Option, wenn Probleme auftreten. Die Aktivierung erh\u00f6ht die Gr\u00f6\u00dfe der Protokolldatei erheblich. Private true/false Wenn aktiviert (true), wird dein Server nicht in der Serverliste angezeigt. Jeder mit der richtigen IP-Adresse und dem richtigen Port kann sich weiterhin verbinden. Description Irgendein ,,Text\" Wird als Beschreibung des Servers in der Serverliste angezeigt (sofern der Server \u00f6ffentlich ist). Du kannst Sonderzeichen verwenden, um dies mit Farben und Stilen zu formatieren. Name Irgendein ,,Text\" Wird als Name/Titel deines Servers in der Serverliste angezeigt. Du kannst Sonderzeichen verwenden, um diesen mit Farben und Stilen zu formatieren. Map Eine valide Kartenlokation, wie /levels/gridmap_v2/info.json
Die Karte, die dein Server hosten wird. Muss entweder standardm\u00e4\u00dfig installiert werden (eine Liste findest du unten) oder als Server-Mod. MaxCars Eine Nummer \u2265 1 Die maximale Anzahl an Fahrzeugen pro Spieler. Alle weiteren Fahrzeuge, die ein Spieler zu spawnen versucht, werden sofort gel\u00f6scht. Port 1024-65535 Der Netzwerkport, \u00fcber den der Server erreichbar ist. Damit sich ein Spieler direkt mit deinem Server verbinden kann, ben\u00f6tigt er deine IP-Adresse und diesen Port. Andere Abschnitte k\u00f6nnen und sollten von Server-Plugins verwendet werden (Lua-API kommt bald), etwa so: [MyMod]
.
Der AuthKey muss von dir festgelegt werden. Er ist standardm\u00e4\u00dfig leer und muss mit deinem AuthKey aus dem vorherigen Installationsschritt ausgef\u00fcllt werden. Gib diesen Schl\u00fcssel nicht an Dritte weiter und verwische ihn in Screenshots vollst\u00e4ndig.
"},{"location":"de/server/server-maintenance/#alle-vanilla-karten-namen","title":"Alle vanilla Karten Namen","text":"Hier sind alle Standard Maps:
Verwende diese Sonderzeichen vor deinem Text, um einen Effekt auf diesen Text in der Serverliste anzuwenden:
Wert Beschreibung^r
Zur\u00fccksetzen ^p
Neue Zeile(nur Beschreibungen) ^n
Unterstrichen ^l
Fett ^m
Durchgestrichen ^o
Italic ^0
Schwarz ^1
Blau ^2
Gr\u00fcn ^3
Hellblau ^4
Rot ^5
Rosa ^6
Orange ^7
Grau ^8
Dunkelgrau ^9
Hellviolett ^a
Hellgr\u00fcn ^b
Hellblau ^c
Dunkelorange ^d
Hellrosa ^e
Gelb ^f
Wei\u00df"},{"location":"de/server/server-maintenance/#passe-deine-server-tags-an","title":"Passe deine Server-Tags an","text":"Mithilfe von Tags k\u00f6nnen Benutzer nach einem bestimmten Servertyp suchen. Deine ServerConfig.toml wird mit dem Freeroam-Tag Tags = \"Freeroam\"
generiert.
Du kannst mehrere Tags durch Kommas getrennt hinzuf\u00fcgen Tags = \"Events,Offroad,lang:english\"
, die Gro\u00df- und Kleinschreibung wird nicht ber\u00fccksichtigt.
Du kannst aus der folgenden Liste w\u00e4hlen:
Alter/Inhalt:
Mature/18+
Spieltypen:
Freeroam
Roleplay
Economy
Traffic
Rennkategorien:
Racing
Racing:NASCAR
Racing:Track
Racing:Drag
Racing:Rally
Touge
Off-Roading und Herausforderungen:
Offroad
Crawling
Dakar
Challenge
Zerst\u00f6rungsevents
Derby
Arena
Wetter und Zeit Zust\u00e4nde:
Snow/Ice
Rain
Night
Weather
Spielmodi:
Gamemode
Gamemode:Racing
Gamemode:Rally
Gamemode:Drag
Gamemode:Derby
Gamemode:Infection
Gamemode:Cops-Robbers
Gamemode:Delivery
Gamemode:Sumo
Community und Events:
Scenarios
Events
Leaderboard
Mods:
Modded
Mod:BeamPaint
Mod:BeamJoy
Mod:CEI
Sprachen:
Lang:English
Lang:Russian
Lang:French
Lang:Spanish
Lang:Portuguese
Lang:German
Lang:Polish
Lang:Arabic
Andere:
Vanilla
Moderated
Sollte ein Tag in dieser Liste fehlen, kannst du hier einen Antrag auf dessen Erg\u00e4nzung stellen.
"},{"location":"de/server/server-maintenance/#die-serverlog-datei","title":"Die Server.log Datei","text":"Diese Datei wird beim Serverstart generiert. Sie spiegelt die Meldungen wieder, die du in der Konsole siehst, wenn du den Server startest. Du solltest diese Datei jedes Mal anh\u00e4ngen, wenn du Unterst\u00fctzung von unserem Support ben\u00f6tigst. Dein AuthKey wird nie angezeigt, sodass du sie in der Regel unver\u00e4ndert senden kannst.
Das Format ist wie folgt (das Pr\u00e4fix $ bedeutet \u201evariabel\u201c, siehe unten):
[$DATE $TIME] $CONTEXT [$LOG_LEVEL] $MESSAGE\n
Wo:
$DATE
ist das Datum der Nachricht, zum Beispiel 21.07.2021$TIME
ist die Uhrzeit der Nachricht, zum Beispiel 11:05:23$CONTEXT
(nur im Debug-Modus sichtbar und haupts\u00e4chlich f\u00fcr Entwickler relevant) ist der Kontext der Nachricht, der entweder lautet:(Player ID) \u201cPlayer Name\u201d
, wobei die Spieler-ID f\u00fcr die Moderation n\u00fctzlich ist$LOG_LEVEL
ist eine der Wichtigkeitsstufen einer Nachricht:DEBUG
: Nur im Debug-Modus sichtbar, normalerweise Spam und nur f\u00fcr Entwickler wichtigINFO
: Allgemeine InformationenLUA
: Nachricht von einem Lua-PluginWARN
: Beschreibt etwas, das normalerweise nicht passieren sollteERROR
: Etwas ist sehr schiefgelaufen oder war sehr unerwartetFATAL
: Es ist etwas passiert, das zur Abschaltung des Servers f\u00fchrte.$MESSAGE
Die Nachricht selbst. Normalerweise solltest du darauf achten und sie verstehen. In manchen F\u00e4llen kann sie kryptisch sein, aber die allgemeine Regel lautet: Solange mit dem Server alles in Ordnung ist und keine sichtbaren Fehler auftreten, ist alles in Ordnung.Sobald ein neues Update ver\u00f6ffentlicht wird, empfiehlt es sich, den Server zu aktualisieren. Neben den allgemeinen neuen Funktionen usw. beinhaltet dies in der Regel Fehlerbehebungen, Stabilit\u00e4ts- und Sicherheitsverbesserungen.
Um Neuigkeiten zu Updates zu erhalten, sobald diese herauskommen, folge entweder dem \u201eUpdate\u201c-Kanal des Discord-Servers, halte in den Foren danach Ausschau oder sieh dir die die GitHub-Release-Seite an bzw. frage danach.
"},{"location":"de/server/server-maintenance/#so-aktualisierst-du","title":"So aktualisierst du","text":""},{"location":"de/server/server-maintenance/#wenn-du-einen-partner-hosting-anbieter-von-beammp-verwendest","title":"Wenn du einen Partner Hosting-Anbieter von BeamMP verwendest","text":"Wenn du einen Hosting-Partner von BeamMP nutzt, funktionieren die folgenden Anweisungen wahrscheinlich nicht. Wir empfehlen dir, auf weitere Informationen deines Hosting-Anbieters zu warten oder sich an diesen zu wenden, um Unterst\u00fctzung zu erhalten.
"},{"location":"de/server/server-maintenance/#den-server-selbst-verwalten","title":"Den Server selbst verwalten","text":"Der Server wird aktualisiert, indem die alte ausf\u00fchrbare Datei durch die neue ersetzt wird. Falls du dir unsicher bist, wie das geht, findest du unten eine Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr Windows und Linux.
Wenn du aus dem Quellcode gebaut hast, f\u00fchre einfach einen Neuaufbau durch. F\u00fchre vor dem Neuaufbau unbedingt den git submodule update --init --recursive
aus.
BeamMP-Server.exe
angezeigt werden. Wir nennen diese die \u201eneue ausf\u00fchrbare Datei\u201c.BeamMP-Server.exe
befindet (normalerweise derselbe Ordner, in dem sich deine ServerConfig.toml
befindet). Wir nennen diesen Ordner die \u201ealte ausf\u00fchrbare Datei\u201c.BeamMP-Server-xxx
, wobei xxx
die Version f\u00fcr die von deiner verwendete Distribution bezeichnet.BeamMP-Server-xxx
angezeigt werden, abh\u00e4ngig von der heruntergeladenen Version. Wir nennen diese Datei die \u201eneue ausf\u00fchrbare Datei\u201c.BeamMP-Server-xxx
Datei befindet (normalerweise derselbe Ordner, in dem sich deine ServerConfig.toml
befindet). Wir nennen diesen Ordner die \u201ealte Datei\u201c.sudo chmod +x BeamMP-Server-xxx
aus. Dadurch wird sichergestellt, dass der Server ausgef\u00fchrt werden kann.Der Server hat (noch) keinen Support f\u00fcr automatische Updates oder Update Benachrichtigungen.
Du kannst jedoch die GitHub-API nach der neuesten Version fragen, indem du die Serverversion anhand der Tags \u00fcberpr\u00fcfst. Du erh\u00e4ltst diese per GET von https://api.github.com/repos/BeamMP/BeamMP-Server/git/refs/tags
.
Diese Seite enth\u00e4lt alle Fehlercodes, die der Launcher m\u00f6glicherweise anzeigt.
Code Beschreibung M\u00f6gliche L\u00f6sung 10048 Der Launcher-Port wird bereits von etwas anderem verwendet. Stelle sicher, dass immer nur EINE Instanz des BeamMP-Launchers ausgef\u00fchrt wird. Versuche eventuell, den PC neu zu starten. 10038 / 10060 / 10061 Kein Server hat auf der angegebenen IP und/oder Port geantwortet Wenn du der Serverbesitzer bist, \u00fcberpr\u00fcfen bitte die Portweiterleitungs- und/oder Firewall-Regeln, die du unter BeamMP-Server finden. Wenn du nicht der Serverbesitzer bist, w\u00e4hle einen anderen Server oder kontaktiere den Besitzer, falls bekannt. 10054 Verbindung vom Peer zur\u00fcckgesetzt Der Server, mit dem eine Verbindung hergestellt werden soll, ist offline. Failed to find the game please launch it. Report this if the issue persists code 3. Der Launcher konnte die Spielinformationen (Spielverzeichnis, Profilverzeichnis, Version usw.) im Registrierungseintrag nicht finden Starte das Spiel mindestens einmal, damit die Registrierungswerte erstellt werden. Failed to find the game please launch it. Report this if the issue persists code 4. Der Launcher konnte die Spielinformationen (Spielverzeichnis, Profilverzeichnis, Version usw.) im Registrierungseintrag nicht lesen Dieser Fehler tritt am wahrscheinlichsten bei Benutzern mit Raubkopien des Spiels auf. Wenn du das Spiel gekauft hast, starte es mindestens einmal, damit die Registrierungswerte erstellt werden. Failed to Launch the game! launcher closing soon Der Launcher konnte die ausf\u00fchrbare Datei des Spiels nicht finden Starte das Spiel mindestens einmal, bevor du den Launcher erneut ausf\u00fchrst. Game Closed! launcher closing soon Das Spiel wurde beendet Diese Meldung wird beim Beenden des Spiels oder wenn der Spielstart fehlgeschlagen ist, angezeigt. Launcher Update failed! Der Launcher konnte keine neue Version herunterladen \u00dcberpr\u00fcfe die Internetverbindung und Firewall-/Antivirusregeln, damit der Launcher nicht blockiert wird. Logger file init failed Der Launcher kann keine Dateien erstellen F\u00fchre den Launcher als Administrator aus. Please close the game and try again Das Spiel ist bereits ge\u00f6ffnet und der Launcher kann den Ordnermultiplayer/mods
nicht leeren. Schlie\u00dfe das Spiel und versuche es erneut. Please launch the game at least once Der Launcher hat versucht, das Verzeichnis des Spiels zu \u00e4ndern, was jedoch fehlschlug Starte das Spiel mindestens einmal, bevor du den Launcher erneut ausf\u00fchrst. Primary Servers Offline! sorry for the inconvenience! Der Launcher konnte nicht nach einem Update suchen \u00dcberpr\u00fcfe die Internetverbindung und Firewall-Regeln. Wenn kein Problem vorliegt, \u00fcberpr\u00fcfe bitte den BeamMP-Updatekanal auf unserem Discord. Sorry Backend System Outage! Don't worry it will back on soon! Das BeamMP-Backend hat nicht geantwortet \u00dcberpr\u00fcfe die Internetverbindung und Firewall-Regeln. Wenn kein Problem vorliegt, \u00fcberpr\u00fcfe bitte den BeamMP-Updatekanal auf unserem Discord. Stuck on updating Der Launcher bleibt beim Aktualisieren h\u00e4ngen und f\u00e4hrt nicht mit dem n\u00e4chsten Schritt fort F\u00fchre den Launcher als Administrator aus und \u00fcberpr\u00fcfe deine Antivirenregeln, damit der Launcher nicht blockiert wird. Wenn der Launcher sofort geschlossen wird, \u00fcberpr\u00fcfe die Datei Launcher.log
im Ordner, in BeamMP installiert wurde.
Liste der \u00f6fters auftretenden Fragen.
"},{"location":"de/support/game-faq/#client","title":"Client","text":""},{"location":"de/support/game-faq/#wie-installiere-ich-beammp","title":"Wie installiere ich BeamMP?","text":"Eine vollst\u00e4ndige Anleitung zur Installation von BeamMP unter Windows findet man hier .
"},{"location":"de/support/game-faq/#funktioniert-beammp-mit-einer-gecrackten-version-von-beamng","title":"Funktioniert BeamMP mit einer gecrackten Version von BeamNG?","text":"BeamMP funktioniert nicht mit Raubkopien oder veralteten Versionen von BeamNG.drive. Das BeamMP-Supportteam bietet keinen Support bei Problemen mit gecrackten/veralteten Kopien.
"},{"location":"de/support/game-faq/#funktioniert-beammp-unter-linux","title":"Funktioniert BeamMP unter Linux?","text":"Der BeamMP-Launcher wird unter Linux nicht offiziell unterst\u00fctzt. Du kannst jedoch unserer Anleitung zur Verwendung von BeamMP unter Linux folgen.
"},{"location":"de/support/game-faq/#warum-wird-der-launcher-von-meinem-antivirenprogramm-oder-windows-defender-als-virus-erkannt","title":"Warum wird der Launcher von meinem Antivirenprogramm oder Windows Defender als Virus erkannt?","text":"Einige Antivirus Programme Melden BeamMP m\u00f6glicherweise als Bedrohung, weil es mit dem Netzwerk und anderen Komponenten interagiert. Es gibt keine Schadsoftware im Code. Der Code f\u00fcr den Launcher, Server und Lua Client k\u00f6nnen auf unserem GitHub gefunden werden.
"},{"location":"de/support/game-faq/#ich-habe-schlechte-spiel-leistung-was-soll-ich-tun","title":"Ich habe schlechte Spiel Leistung, was soll ich tun?","text":"Wir arbeiten hart daran, die Mehrspieler Erfahrung so Stabil wie m\u00f6glich zu gestalten. Wenn du deine Grafik Einstellungen bereits heruntergesetzt hast, aber die Leistung immer noch eingeschr\u00e4nkt ist, versuche es auf Servern mit weniger Spieler. Das Spiel ist haupts\u00e4chlich CPU gebunden, wenn du mit mehreren Personen spielst, \u00e4ltere CPUs (sogar quadcores) werden schon unter einer Hand voll an Spielern leiden. (Generelle Daumenregel: 1 Auto pro 1 CPU Thread)
"},{"location":"de/support/game-faq/#verschiedenes","title":"Verschiedenes","text":""},{"location":"de/support/game-faq/#wo-finde-ich-den-code","title":"Wo finde ich den Code?","text":"Der gesamte Source Code kann auf unserem GitHub gefunden werden. Bevor du \u00c4nderungen vornimmst, beachte, dass der Code unseren Nutzungsbedingungen und Lizenzen unterliegt:
Code Lizenz Server LIZENZ Launcher LIZENZ Client Lua LIZENZ"},{"location":"de/support/game-faq/#ich-habe-einen-fehler-oder-einen-exploit-gefunden-was-soll-ich-tun","title":"Ich habe einen Fehler oder einen Exploit gefunden, was soll ich tun?","text":"Wenn das Problem etwas mit dem Code zu tun hat, \u00f6ffne eine neue \"Issue\" in dem jeweiligen Repository auf unserer GitHub Seite. Wir nutzen einen issue-basierten Workflow. Also auch wenn du bereits einen Fix f\u00fcr den Bug hast, erstelle eine neue \"Issue\", dann einen \"Pull Request\" mit der L\u00f6sung f\u00fcr das Problem. Weitere Informationen, wie du beitragen kannst, findest du hier.
Wenn du kein GitHub Konto hast, nicht wei\u00df wie man GitHub verwendet, oder hast andere Fragen, kannst du gerne mit uns in Kontakt \u00fcber folgende Wege treten:
Das Verkn\u00fcpfen deines Discord Kontos mit deinem BeamMP Konto ist eine neue Funktion bei BeamMP. Um das zu tun, musst du !link
in Form einer Nachricht an den BeamMP Konto Bot schicken. Der Bot wird mit einem Link antworten um dich dann mit deinem BeamMP Konto anzumelden. Logge dich einfach mit deinem BeamMP Konto ein. Erstmal abgeschlossen, wirst du eine zweite Nachricht erhalten, dass deine Konten nun verbunden sind.\ud83c\udf89
Early Access (mit dem Violetten Namensschild und weiteren Vorteilen) kann erworben werden, indem du uns finanziell auf Patreon unterst\u00fctzt. Entweder durchs kaufen von Stufen, Spenden oder Boosten des Discord Servers. Das Spenden von x Menge US$ = x zus\u00e4tzliche Server Schl\u00fcssel inklusive EA Vorteile. Boosten gibt dir +4 Server Schl\u00fcssel inklusive EA Vorteile.
"},{"location":"de/support/player-faq/#ich-habe-ein-abonnement-auf-patreon-wie-bekomme-ich-meine-vorteile","title":"Ich habe ein Abonnement auf Patreon. Wie bekomme ich meine Vorteile?","text":"Stelle sicher, dass du folgendes tust um deine Vorteile automatisch zu bekommen:
Bitte habe Geduld. Es kann ein paar Stunden, manchmal bis zu 12, dauern damit das System die Daten synchronisiert. Wenn du deine Vorteile nach 12 Stunden immer noch nicht erhalten hast, aber alle Schritte oben vervollst\u00e4ndigt hast, kontaktiere den BeamMP Support.
"},{"location":"de/support/player-faq/#ich-habe-weitere-fragen","title":"Ich habe weitere Fragen!","text":"Wenn deine Frage oder dein Problem sich auf BeamMP oder das Spielen bezieht, sieh dir das Spiel FAQs an. Wenn deine Frage oder dein Problem in Relation zum hosten eines Servers steht, verweisen wir auf die Server FAQs. Andernfalls pr\u00fcfe die Forums wo die Community Fragen stellen und Antworten erhalten kann.
"},{"location":"de/support/server-faq/","title":"F.A.Q. und bekannte Probleme","text":"Liste h\u00e4ufig gestellter Fragen und bekannter Probleme.
"},{"location":"de/support/server-faq/#server","title":"Server","text":""},{"location":"de/support/server-faq/#wie-kann-ich-meine-eigenen-server-einrichten","title":"Wie kann ich meine eigenen Server einrichten?","text":"Alle Informationen um einen eigenen Server zu erstellen findest du hier.
"},{"location":"de/support/server-faq/#kann-man-unter-linux-einen-server-erstellen","title":"Kann man unter Linux einen Server erstellen?","text":"Wir bieten Binaries f\u00fcr mehrere Linux Distributionen hier an. Wenn es keine Binaries f\u00fcr dein OS oder deine Distro gibt, kannst du diese selber bauen, indem du dir die Source von unserem GitHub runter l\u00e4dst. Ein Tutorial kannst du hier finden.
"},{"location":"de/support/server-faq/#was-sind-die-hardware-mindestanforderungen-fur-einen-beammp-server","title":"Was sind die Hardware Mindestanforderungen f\u00fcr einen BeamMP-Server?","text":"Lies die Anleitung f\u00fcr das weiterleiten von Ports in diesem Artikel. Unten findest du die wichtigsten Schritte. Wenn andere Spieler versuchen deinen Server beizutreten, erhalten aber Fehlercodes wie 10060, 10061 oder 10038 in ihrem BeamMP-Launcher, dann beachte folgende Schritte.
Du kannst pr\u00fcfen, ob du erfolgreich Ports weitergeleitet hast, indem du CheckBeamMP verwendest w\u00e4hrend der Server l\u00e4uft.
IP adress: Port:Beachte:
Wenn der Server auf demselben Computer wie das Spiel l\u00e4uft, du selbst musst in dem Fall eine Direktverbindung mit 127.0.0.1 und dem Port deines Servers verwenden. Damit du deinem eigenen Server von der Server-Liste beitreten kannst, muss dein Router NAT-Loopback f\u00e4hig sein. Diese Funktion wird nicht von allen Home-Routern unterst\u00fctzt.
"},{"location":"de/support/server-faq/#weitere-informationen","title":"weitere Informationen","text":""},{"location":"de/support/server-faq/#wo-kann-ich-den-code-finden","title":"Wo kann ich den Code finden?","text":"Der Source Code kann auf unserem GitHub gefunden werden. Bevor du etwas damit anstellst, vergiss nicht, dass der Code unseren Nutzungsbedingungen und Lizenzen unterliegt:
Code Lizenz Server LIZENZ Launcher LIZENZ Client Lua LIZENZ"},{"location":"de/support/server-faq/#ich-habe-einen-bug-oder-exploit-gefunden-was-soll-ich-tun","title":"Ich habe einen Bug oder Exploit gefunden. Was soll ich tun?","text":"Wenn das Problem auf den Code zur\u00fcckzuf\u00fchren ist, erstelle eine neue \"Issue\" im korrekten Repository auf GitHub. Wir nutzen einen issue-basierten Workflow. Wenn du einen Fix f\u00fcr das Problem gefunden hast, erstelle am besten trotzdem eine \"Issue\", dann erstelle einen \"Pull Request\" der deine \"Issue\" l\u00f6st. Weitere Informationen zum mitmachen findest du hier.
Wenn du keinen GitHub account hast oder nicht wei\u00dft, wie man GitHub nutzt, kannst du uns \u00fcber folgende Wege kontaktieren:
Ce site est en construction !
Ce site est actuellement en cours de travail.
Pensez-vous pouvoir nous aider ? N'h\u00e9sitez pas \u00e0 cliquer sur la page avec un crayon \u00e0 droite!
Cela peut \u00e9galement \u00eatre fait sur n'importe quelle page.
"},{"location":"fr/#bienvenue-sur-beammp-docs","title":"Bienvenue sur BeamMP Docs !","text":"Bienvenue sur le centre de documentation am\u00e9lior\u00e9 pour BeamMP ! Que vous soyez un joueur, un propri\u00e9taire de serveur ou un d\u00e9veloppeur, nous disposons des ressources n\u00e9cessaires pour am\u00e9liorer votre exp\u00e9rience multijoueur sur BeamNG.drive.
"},{"location":"fr/#pour-les-joueurs","title":"Pour les Joueurs","text":"Nouveau sur BeamMP ? Consultez notre Guide de D\u00e9marrage pour vous aider \u00e0 commencer et profiter au maximum de vos aventures multijoueurs.
"},{"location":"fr/#pour-les-proprietaires-de-serveur","title":"Pour les Propri\u00e9taires de Serveur","text":"Vous envisagez de cr\u00e9er votre propre serveur BeamMP ? Notre guide complet vous guidera \u00e0 travers le processus. Veillez \u00e0 ce que vous ayez tous les outils et connaissances n\u00e9cessaires pour configurer votre serveur de mani\u00e8re efficace.
"},{"location":"fr/#pour-les-developpeurs","title":"Pour les D\u00e9veloppeurs","text":"Explorez tous les d\u00e9tails sur la cr\u00e9ation de ressources pour le serveur BeamMP dans notre Guide de D\u00e9veloppement de Ressources.
D'excitantes mises \u00e0 jour sont \u00e0 venir, notamment une toute nouvelle page d'accueil con\u00e7ue pour am\u00e9liorer votre exp\u00e9rience de navigation. Restez \u00e0 l'\u00e9coute pour plus d'informations !
"},{"location":"fr/FAQ/How-to-check-for-CGNAT/","title":"Comment puis-je v\u00e9rifier cgnat?","text":"How to check for CGNAT?
"},{"location":"fr/FAQ/How-to-deactivate-mods/","title":"Comment d\u00e9sactiver mes mods?","text":""},{"location":"fr/FAQ/game-faq/","title":"F.A.Q.","text":"Liste de questions fr\u00e9quentes et probl\u00e8mes connus.
"},{"location":"fr/FAQ/game-faq/#comment-installer-beammp","title":"Comment installer BeamMP?","text":"Il y a un guide complet qui explique comment installer BeamMP sur Windows, vous pouvez le trouver ici.
"},{"location":"fr/FAQ/game-faq/#est-ce-que-beammp-fonctionne-avec-une-version-piratee-ou-depassee-de-beamngdrive","title":"Est-ce que BeamMP fonctionne avec une version pirat\u00e9e ou d\u00e9pass\u00e9e de BeamNG.drive?","text":"BeamMP ne fonctionnera pas avec une version pirat\u00e9e ou d\u00e9pass\u00e9e de BeamNG.drive. L'\u00e9quipe de soutient de BeamMP n'offre pas de soutient pour les versions pirat\u00e9es ou d\u00e9pas\u00e9es.
"},{"location":"fr/FAQ/game-faq/#est-ce-que-beammp-fonction-sur-linux","title":"Est-ce que BeamMP fonction sur linux?","text":"Le client n'est pas officiellement support\u00e9 sur linux, cependant, vous pouvez suivre notre guide qui explique comment utiliser BeamMP sur Linux
"},{"location":"fr/FAQ/game-faq/#pourquoi-le-lanceur-est-detecte-comme-un-virus-par-mon-antivuris-ou-par-windows-defender","title":"Pourquoi le lanceur est d\u00e9tect\u00e9 comme un virus par mon antivuris ou par Windows Defender","text":"Certains logiciels antivirus pourrait identifier BeamMP comme une menace puisqu'il interact avec le r\u00e9seau et d'autres aspects. Il y a aucun virus dans le code. Le code pour le lanceur, le serveur, et le client lua peut \u00eatre trouv\u00e9 sur notre GitHub.
"},{"location":"fr/FAQ/game-faq/#jai-une-baisse-de-performances-en-jeu-que-puis-je-faire","title":"J'ai une baisse de performances en jeu, que puis-je faire?","text":"Nous travaillons sans rel\u00e2che pour rendre l'exp\u00e9rience multijoueur aussi stable que posible. Si vous avez d\u00e9j\u00e0 diminu\u00e9 vos param\u00e8tres graphiques et les performances sont encore mauvaises, envisager de jouer sur un serveur avec moins de joueurs. Le jeu est principalement d\u00e9pendant du CPU lorsque vous jouez avec plusieurs persones, les CPU plus ancients (M\u00eame quadcore) vont donc avoir plus de difficult\u00e9e \u00e0 suivre qu'avec moins de joueurs. (En g\u00e9n\u00e9ral: 1 voiture par fil(Thread) de CPU)
"},{"location":"fr/FAQ/game-faq/#divers","title":"Divers","text":""},{"location":"fr/FAQ/game-faq/#ou-est-ce-que-je-peux-trouver-le-code","title":"O\u00f9 est-ce que je peux trouver le code?","text":"Le code source en entier peut \u00eatre retouv\u00e9 sur notre GitHub. Avant de faire n'importe quel changement, souvenez-vous que le code est assujettit \u00e0 nos Conditions d'utilisation et licenses:
Code License Serveur LICENSE Lanceur LICENSE Client Lua LICENSE"},{"location":"fr/FAQ/game-faq/#jai-trouve-un-bug-ou-un-exploit-que-dois-je-faire","title":"J'ai trouv\u00e9 un bug ou un exploit, que dois-je faire?","text":"Si le probl\u00e8me est en lien avec le code et que vous savez utiliser Github, ouvrez une nouvelle \"issue\" (en anlgais) dans le r\u00e9pertoire appropri\u00e9 sur notre GitHub. Nous utilisons un rythme de travail bas\u00e9e sur les \"issue\" donc m\u00eame si vous avez une solution au probl\u00e8me, ouvrez une nouvelle \"issue\" et un \"pull request\" qui contient la solution au probl\u00e8me. PLus d'information sur comment contribuer peut \u00eatre trouv\u00e9 ici.
Si vous n'avez pas de compte Github, ne savez pas comment utiliser Github ou si vous avez une n'importe quelle autre question, vous pouvez entrer en contact avec nous de ces deux fa\u00e7ons:
L'acc\u00e8s anticip\u00e9 (EA) (incluant le nom en jeu (nametag) mauve and d'autre bonus) peut \u00eatre obtenus en nous supportant financi\u00e8rement sur Patreon en achetant un niveau, faisant un don, ou en boostant notre serveur Discord. Faire un don de x quantit\u00e9e US$ = x cl\u00e9e(s) additionnelle(s) incluant les bonus de l'acc\u00e8s anticip\u00e9 (EA). Booster le serveur vous donne acc\u00e8s \u00e0 4 cl\u00e9es additionnelles en plus des bonus de l'acc\u00e8s anticip\u00e9 (EA).
"},{"location":"fr/FAQ/player-faq/#je-me-suis-abonnees-au-patreon-comment-est-ce-que-je-peux-avoir-acces-a-mes-bonus","title":"Je me suis abonn\u00e9(es) au Patreon. Comment est-ce que je peux avoir acc\u00e8s \u00e0 mes bonus?","text":"Assurerez-vous de faire les \u00e9tapes suivantes pour recevoir vos bonus automatiquement:
Soyez patient s'il vous plait, le syst\u00e8me peut prendre quelques heures pour se synchroniser, parfois jusqu'\u00e0 12 heures. Si vous n'avez pas re\u00e7us vos bonus apr\u00e8s 12 heures et vous avez suivi les \u00e9tapes ci-dessus, contacter le support BeamMP s'il vous plait.
"},{"location":"fr/FAQ/player-faq/#jai-dautres-questions","title":"J'ai d'autres questions!","text":"Si votre question ou probl\u00e8me est li\u00e9 au jeu, r\u00e9f\u00e9rez-vous \u00e0 la FAQ du jeu s'il vous plait. Si votre question ou probl\u00e8me est en lien avec le fait de faire fonctionner un serveur, r\u00e9f\u00e9rez-vous \u00e0 la FAQ de serveur s'il vous plait. Sinon, vous pouvez regardez le forums o\u00f9 les membres de la communaut\u00e9 peuvent pauser des questions et r\u00e9pondres \u00e0 celles des autres.
"},{"location":"fr/FAQ/server-faq/","title":"FAQ et probl\u00e8mes courants","text":"Listes de questions pos\u00e9es fr\u00e9quemment et probl\u00e8mes connus.
"},{"location":"fr/FAQ/server-faq/#serveur","title":"Serveur","text":""},{"location":"fr/FAQ/server-faq/#comment-est-ce-que-je-peux-faire-mon-propre-serveur","title":"Comment est-ce que je peux faire mon propre serveur?","text":"Toute l'information n\u00e9cessaire pour cr\u00e9er votre propre serveur peut \u00eatre retrouv\u00e9e ici.
"},{"location":"fr/FAQ/server-faq/#est-ce-que-linux-peut-etre-utilise-pour-faire-un-serveur","title":"Est-ce que Linux peut \u00eatre utilis\u00e9 pour faire un serveur?","text":"Nous fournissons les \"binairies\" pour plusieurs distributions de Linux ici. Si aucune \"binairies\" n'est disponible pour votre syst\u00e8me d'op\u00e9ration/distribution, vous pouvez les construires vous m\u00eame en t\u00e9l\u00e9chargeant le code source depuis notre GitHub, un tutoriel peut \u00eatre trouv\u00e9 ici.
"},{"location":"fr/FAQ/server-faq/#quelles-sont-les-specifications-minimales-pour-executer-le-logiciel-serveur-de-beammp","title":"Quelles sont les sp\u00e9cifications minimales pour \u00e9xecuter le logiciel serveur de BeamMP?","text":"Lisez le guide (en anglais pour le moment, la version traduite s'envient) au sujet de la redirection de port disponible ici. Il y a un petit r\u00e9sum\u00e9 des \u00e9tapes les plus importantes ci-dessous. Si d'autres joueurs essaient de se connecter et qu'ils re\u00e7oivent un code d'erreur 10060, 10061 ou 10038 dans leur lanceur BeamMP, vous devriez suicre les \u00e9tapes ci-dessous:
Vous pouvez v\u00e9rifier si vous avez correctement configur\u00e9 la redirection de port en utilisant CheckBeamMP lorsque le serveur est lanc\u00e9.
IP adress: Port:Notes:
Si le serveur fonctionne sur le m\u00eame ordinateur que le jeu, vous devez utiliser l'onglet \"Direct connect\" avec l'adresse ip 127.0.0.1 and le port du serveur pour vous connecter. Pour que vous puissiez vous connecter \u00e0 votre serveur auto-h\u00e9berg\u00e9 via la liste des serveurs, votre routeur dois supporter le protocol NAT-loopback, une fonction tr\u00e8s peu r\u00e9pandue dans les routeur de monsieur madame tout le monde.
"},{"location":"fr/FAQ/server-faq/#divers","title":"Divers","text":""},{"location":"fr/FAQ/server-faq/#ou-est-ce-que-je-peux-trouver-le-code","title":"O\u00f9 est-ce que je peux trouver le code?","text":"Le code source en entier peut \u00eatre retouv\u00e9 sur notre GitHub. Avant de faire n'importe quel changement, souvenez-vous que le code est assujettit \u00e0 nos Conditions d'utilisation et licenses:
Code License Serveur LICENSE Lanceur LICENSE Client Lua LICENSE"},{"location":"fr/FAQ/server-faq/#jai-trouve-un-bug-ou-un-exploit-que-dois-je-faire","title":"J'ai trouv\u00e9 un bug ou un exploit, que dois-je faire?","text":"Si le probl\u00e8me est en lien avec le code et que vous savez utiliser Github, ouvrez une nouvelle \"issue\" (en anlgais) dans le r\u00e9pertoire appropri\u00e9 sur notre GitHub. Nous utilisons un rythme de travail bas\u00e9e sur les \"issue\" donc m\u00eame si vous avez une solution au probl\u00e8me, ouvrez une nouvelle \"issue\" et un \"pull request\" qui contient la solution au probl\u00e8me. PLus d'information sur comment contribuer peut \u00eatre trouv\u00e9 ici.
Si vous n'avez pas de compte Github, ne savez pas comment utiliser Github ou si vous avez une n'importe quelle autre question, vous pouvez entrer en contact avec nous de ces deux fa\u00e7ons:
Cette page contient tout les codes d'erreurs que le lanceur peut afficher.
Code Description Solution possible 10048 Quelque chose d'autre utilise le port du lanceur Assurez-vous que le lanceur n'est execut\u00e9 qu'une seule fois. Essayer de red\u00e9marer votre ordinateur. 10038 / 10060 / 10061 Aucun serveur n'a r\u00e9pondu sur cette adresse IP et / ou port Si vous \u00eates le propri\u00e9taire du serveur, v\u00e9rifiez la redirection de port et/ou les r\u00e8gles du parefeu, les deux peuvent \u00eatre retrouv\u00e9 dans Serveur BeamMP. Si vous n'\u00eates pas le propri\u00e9taire du serveur, choisissez un serveur different ou contacter le propri\u00e9taire du serveur si vous le connaissez. 10054 La connexion a \u00e9t\u00e9 r\u00e9initialis\u00e9e par un homologue Le serveur auquel vous tentez de vous connecter est hors ligne. Failed to find the game please launch it. Report this if the issue persists code 3. Le lanceur n'a pas \u00e9t\u00e9 capable de trouver les informations du jeu (r\u00e9pertoire du jeu, r\u00e9pertoire de profils, version, etc.) dans le registre. Lancez le jeu au moins une fois pour que les valeurs du registre puissent \u00eatre cr\u00e9\u00e9es. Failed to find the game please launch it. Report this if the issue persists code 4. Le lanceur n'a pas \u00e9t\u00e9 capable de trouver les informations du jeu (r\u00e9pertoire du jeu, r\u00e9pertoire de profils, version, etc.) dans le registre. L'erreur se manifeste surtout lorsque l'utilisateur poss\u00e8de une copie pirat\u00e9e du jeu. Si vous avez achet\u00e9 le jeu, lancez-le au moins une fois pour que les valeurs du registre puissent \u00eatre cr\u00e9\u00e9es. Failed to Launch the game! launcher closing soon Le lanceur n'a pas \u00e9t\u00e9 capable de trouver l'ex\u00e9cutable (.exe). du jeu Lancer le jeu au moins une fois avant de lancer le lanceur BeamMP. Game Closed! launcher closing soon Le jeu a \u00e9t\u00e9 ferm\u00e9 Ce message apparait lorsque le jeu est ferm\u00e9 ou lorsque le jeu ne r\u00e9ussit pas \u00e0 se lancer. Launcher Update failed! Le lanceur n'a pas r\u00e9ussit \u00e0 t\u00e9l\u00e9charger une nouvelle version V\u00e9rifiez votre conection internet, les r\u00e8gles de votre parefeu et de votre antivirus et assurez vous que BeamMP n'est pas bloqu\u00e9. Logger file init failed Le lanceur ne peut pas cr\u00e9er de fichiers Ex\u00e9cuter le lanceur en tant qu'administrateur. Please close the game and try again Le jeu est d\u00e9j\u00e0 lanc\u00e9 et le lanceur ne peut pas nettoyer le dossiermultiplayer/mods
Fermez le jeu et r\u00e9essayer. Lancer le jeu au moins une fois. Le lanceur a tent\u00e9 de modifier les fichiers du r\u00e9pertoir du jeu et a \u00e9chou\u00e9 Lancer le jeu au moins une fois avant the lancer BeamMP. Primary Servers Offline! Sorry for the inconvenience! Le lanceur n'a pas r\u00e9ussit \u00e0 v\u00e9rifier si il y a une mise \u00e0 jour V\u00e9rifiez votre conection internet et les r\u00e8gles de votre parefeu. Si il n'y a pas de probl\u00e8me de votre c\u00f4t\u00e9, v\u00e9rifiez ce salon BeamMP updates channel sur notre Discord. Sorry Backend System Outage! Don't worry it will back on soon! Le backend (infrastructure en arri\u00e8re plan) n'a pas r\u00e9pondu V\u00e9rifiez votre conection internet et les r\u00e8gle de votre parefeu. Si il n'y a pas de probl\u00e8me de votre c\u00f4t\u00e9, v\u00e9rifiez ce canal BeamMP updates channel sur notre Discord. Stuck on updating Le lanceur est bloqu\u00e9 sur updating et ne progressera pas \u00e0 la prochaine \u00e9tape Ex\u00e9cuter le lanceur en tant qu'administrateur, v\u00e9rifier les r\u00e8gles de votre antivirus et assurez-vous que le lanceur ne soit pas bloqu\u00e9. Si le lanceur se ferme imm\u00e9diatement, v\u00e9rifiez le fichier Launcher.log
dans le dossiers o\u00f9 vous avez install\u00e9 BeamMP.
BeamMP est enti\u00e8rement compatible avec Windows et Linux, la compatibilit\u00e9 avec MacOS est en cours de d\u00e9veloppement. Cependant, puisque Linux et MacOS sont des syst\u00e8mes d'op\u00e9ration secondaire plusieurs probl\u00e8mes (bug) sont \u00e0 pr\u00e9voir.
Attention
Aucune version pirat\u00e9e ou d\u00e9pass\u00e9e de BeamNG.drive ne sera compatible avec BeamMP. L'\u00e9quipe de support de BeamMP ne fournit aucun soutien pour les versions pirat\u00e9es ou d\u00e9fectueuses.
"},{"location":"fr/game/getting-started/#2a-installation-sur-windows","title":"2a. Installation sur Windows","text":"BeamMP_Installer.zip
.BeamMP_Installer.exe
et suivez les instructions.Repository
(D\u00e9pot en fran\u00e7ais) dans le menu principal et assurez-vous que multiplayerbeammp
est le seul mod activ\u00e9.Connect
. Amusez-vous!Note
Lorsque vous vous connectez \u00e0 un serveur avec plusieurs joueurs et/ou v\u00e9hicules, les temps de chargement peuvent \u00eatre prolong\u00e9s.
"},{"location":"fr/game/getting-started/#2b-installation-sur-linux","title":"2b. Installation sur Linux","text":"Vous devrez construire le lanceur vous m\u00eame pour le moment. Pour ce faire, vous avez besoin d'un minimum de connaissences de base pour construire (build) une application.
Assurez-vous d'avoir vcpkg
d'install\u00e9, ainse que des outil de d\u00e9velopement de base, souvent trouv\u00e9 dans des packets (package) tel que (par exemple):
sudo apt install build-essential
sudo dnf install cmake gcc-c++ perl-IPC-Cmd perl-FindBin perl-File-Compare perl-File-Copy
sudo pacman -S base-devel
zypper in -t pattern devel-basis
sudo pacman -S base-devel linux-api-headers glibc libconfig
(Vous devez \u00e9galement faire sudo steamos-readonly disable
mais assurez-vous de l'activer \u00e0 nouveau apr\u00e8s l'installation des paquets.)Cl\u00f4nez le r\u00e9pertoire BeamMP-Launcher sur votre syst\u00e8me en utilisant git
, exemple: git clone https://github.com/BeamMP/BeamMP-Launcher.git
Informations compl\u00e9mentaires sur le clonage d'une r\u00e9plique GitHub
Assurez-vous d'avoir le bon identifiant de version utilis\u00e9 pour la derni\u00e8re version disponible (Latest version). Par exemple, si v2.3.2
est utilis\u00e9 dans la derni\u00e8re version disponible, faites git checkout v2.3.2
Dans la root directory du projet,
cmake . -B bin -DCMAKE_TOOLCHAIN_FILE=~/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux\n
cmake --build bin --parallel\n
Si vous manquer de RAM lorsque vous construisez, vous pouvez ignorer --parallel instruction, cela va utiliser moin s de RAM puisque la construction n'utilisera qu'un fil (thread) du CPU.
Si vous ne sp\u00e9cifiez pas -DCMAKE_BUILD_TYPE=Release
, vous allez construire la version debug qui est plus volumineuse, mais ne contient pas le probl\u00e8me (bug): launcher-can-only-connect-to-a-server-once (Lanceur-peut-se-connecter-seulement-unefois-\u00e0-un-serveur)
D\u00e9placez l'application termin\u00e9e en dehors du dossier /bin
vers son propre dossier et executer l'application \u00e0 partir de l\u00e0.
La version native \u00e0 linux du lanceur BeamMP va se lancer et va lancer la version native \u00e0 linux de BeamNg.drive.
"},{"location":"fr/game/getting-started/#2c-utiliser-beamngdrive-avec-proton","title":"2c. Utiliser BeamNG.drive avec Proton","text":"Vous souhaitez utiliser la version native \u00e0 linux de BeamMP et Beamng via proton? Vous pouvez le faire en suivant les \u00e9tapes ci-dessous:
Ex\u00e9cutez le lancer BeamMP avec la commande suivante --no-launch
(Ceci va emp\u00eacher le lanceur de lancer la version native \u00e0 linux de beamNG.drive). Plus d'informations peut \u00eatre retrouv\u00e9e dans la Configuration de l'environnement de d\u00e9veloppement
Changez l'emplacement du userfolder de Proton-BeamNG.drive pour l'emplacement de Linux-BeamNG.drive (puisque la version native \u00e0 linux du lanceur BeamMP \u00e9crit, pour le momant, que dans le Linux-BeamNG.drive userfolder)
Cela peut \u00eatre fait simplement en cr\u00e9ant un symlink
~/.local/share/BeamNG.drive
) et renomez le, par exemple: BeamNG.drive
\u00e0 `BeamNG.drive_old ~/.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
Avec le symlink configur\u00e9 antre le lanceur compil\u00e9 et les userfolders, vous pouvez lancer le jeux avec Proton via Steam tout en executant automatiquement le lanceur avec les remplacement suivents pour les option de lancement du jeu vanilla (version sans mod), retrouv\u00e9s dans la fen\u00eatre des propri\u00e9t\u00e9es du jeu dans son entr\u00e9e sur Steam.
~/BeamMP/BeamMP-Launcher --no-launch & %command% ; killall BeamMP-Launcher
Notez que ceci assume que vous avez mis, les binairies du lanceur que vous avez compil\u00e9 plus t\u00f4t, dans /home/user/BeamMP/
, donc changez l'emplacement pour qu'il corresponde \u00e0 o\u00f9 vous avez mis les binairies termin\u00e9es et vous allez avoir besoin de recompiler le lanceur avec la bonne branche git \u00e0 chaque fois qu'une nouvelle mise \u00e0 jour sera disponible.
Ajoutez une police d'\u00e9criture pour les emojis pour avoir les emojis en jeu
Pour avoir acc\u00e8s aux emojis soit dans la liste des serveurs (certains serveurs utilisent des emojis dans leur nom personalis\u00e9), soit dans le chat en jeu, vous avez besoin d'une police d'\u00e9criture qui contient certains emojis.
Cela peut \u00eatre fait, par exemple, en ajoutant le Linux-port of the Windows Segoe-UI emoji font
"},{"location":"fr/game/getting-started/#3-problemes-connus","title":"3. Probl\u00e8mes connus","text":"Si vous avez besoin d'aide avec l'installation, faites un post sur notre forum ou posez vos questions dans notre serveur Discord.
"},{"location":"fr/support/error-codes/","title":"Codes d'erreurs","text":"Cette page contient tout les codes d'erreurs que le lanceur peut afficher.
Code Description Solution possible 10048 Quelque chose d'autre utilise le port du lanceur Assurez-vous que le lanceur n'est execut\u00e9 qu'une seule fois. Essayer de red\u00e9marer votre ordinateur. 10038 / 10060 / 10061 Aucun serveur n'a r\u00e9pondu sur cette adresse IP et / ou port Si vous \u00eates le propri\u00e9taire du serveur, v\u00e9rifiez la redirection de port et/ou les r\u00e8gles du parefeu, les deux peuvent \u00eatre retrouv\u00e9 dans Serveur BeamMP. Si vous n'\u00eates pas le propri\u00e9taire du serveur, choisissez un serveur different ou contacter le propri\u00e9taire du serveur si vous le connaissez. 10054 La connexion a \u00e9t\u00e9 r\u00e9initialis\u00e9e par un homologue Le serveur auquel vous tentez de vous connecter est hors ligne. Failed to find the game please launch it. Report this if the issue persists code 3. Le lanceur n'a pas \u00e9t\u00e9 capable the trouver les infos du jeu (r\u00e9pertoire du jeu, r\u00e9pertoire de profils, version, ect...) dans le registre. Lancez le jeu au moins une fois pour que les valeurs du registre puissent \u00eatre cr\u00e9\u00e9es. Failed to find the game please launch it. Report this if the issue persists code 4. Le lanceur n'a pas \u00e9t\u00e9 capable the trouver les infos du jeu (r\u00e9pertoire du jeu, r\u00e9pertoire de profils, version, ect...) dans le registre. Cette erreur apparait surtout si l'utilisateur a une copie pirat\u00e9e du jeu. Si vous avez achet\u00e9 le jeu, lancer le au moins une fois pour que les valeurs du registre puissent \u00eatre cr\u00e9\u00e9es. Failed to Launch the game! launcher closing soon Le lanceur n'a pas \u00e9t\u00e9 capable the trouver l'ex\u00e9cutable (.exe) du jeu Lancer le jeu au moins une fois avant the lancer BeamMP. Game Closed! launcher closing soon Le jeu a \u00e9t\u00e9 ferm\u00e9 Ce message apparait lorsque le jeu est ferm\u00e9 ou lorsque le jeu ne r\u00e9ussit pas \u00e0 se lancer. Launcher Update failed! Le lanceur n'a pas r\u00e9ussit \u00e0 t\u00e9l\u00e9charger une nouvelle version V\u00e9rifiez votre conection internet, les r\u00e8gles de votre parefeu et de votre antivirus et assurez vous que BeamMP n'est pas bloqu\u00e9. Logger file init failed Le lanceur ne peut pas cr\u00e9er de fichiers Ex\u00e9cuter le lanceur en tant qu'administrateur. Please close the game and try again Le jeu est d\u00e9j\u00e0 lanc\u00e9 et le lanceur ne peut pas nettoyer le dossiermultiplayer/mods
Fermez le jeu et r\u00e9essayer. Lancer le jeu au moins une fois. Le lanceur a tent\u00e9 de modifier les fichiers du r\u00e9pertoir du jeu et a \u00e9chou\u00e9 Lancer le jeu au moins une fois avant the lancer BeamMP. Primary Servers Offline! Sorry for the inconvenience! Le lanceur n'a pas r\u00e9ussit \u00e0 v\u00e9rifier si il y a une mise \u00e0 jour V\u00e9rifiez votre conection internet et les r\u00e8gles de votre parefeu. Si il n'y a pas de probl\u00e8me de votre c\u00f4t\u00e9, v\u00e9rifiez ce canal BeamMP updates channel sur notre Discord. Sorry Backend System Outage! Don't worry it will back on soon! Le backend (infrastructure en arri\u00e8re plan) n'a pas r\u00e9pondu V\u00e9rifiez votre conection internet et les r\u00e8gle de votre parefeu. Si il n'y a pas de probl\u00e8me de votre c\u00f4t\u00e9, v\u00e9rifiez ce canal BeamMP updates channel sur notre Discord. Stuck on updating Le lanceur est bloqu\u00e9 sur updating et ne progressera pas \u00e0 la prochaine \u00e9tape Ex\u00e9cuter le lanceur en tant qu'administrateur, v\u00e9rifier les r\u00e8gles de votre antivirus et assurez-vous que le lanceur ne soit pas bloqu\u00e9. Si le lanceur se ferme imm\u00e9diatement, v\u00e9rifiez le fichier Launcher.log
dans le dossiers o\u00f9 vous avez install\u00e9 BeamMP.
Liste de questions fr\u00e9quentes et probl\u00e8mes connus.
"},{"location":"fr/support/game-faq/#client","title":"Client","text":""},{"location":"fr/support/game-faq/#comment-installer-beammp","title":"Comment installer BeamMP?","text":"Il y a un guide complet qui explique comment installer BeamMP sur Windows, vous pouvez le trouver ici.
"},{"location":"fr/support/game-faq/#est-ce-que-beammp-fonctionne-avec-une-version-piratee-ou-depassee-de-beamngdrive","title":"Est-ce que BeamMP fonctionne avec une version pirat\u00e9e ou d\u00e9pass\u00e9e de BeamNG.drive?","text":"BeamMP ne fonctionnera pas avec une version pirat\u00e9e ou d\u00e9pass\u00e9e de BeamNG.drive. L'\u00e9quipe de soutient de BeamMP n'offre pas de soutient pour les versions pirat\u00e9es ou d\u00e9pas\u00e9es.
"},{"location":"fr/support/game-faq/#est-ce-que-beammp-fonction-sur-linux","title":"Est-ce que BeamMP fonction sur linux?","text":"Le client n'est pas officiellement support\u00e9 sur linux, cependant, vous pouvez suivre notre guide qui explique comment utiliser BeamMP sur Linux
"},{"location":"fr/support/game-faq/#pourquoi-le-lanceur-est-detecte-comme-un-virus-par-mon-antivuris-ou-par-windows-defender","title":"Pourquoi le lanceur est d\u00e9tect\u00e9 comme un virus par mon antivuris ou par Windows Defender","text":"Certains logiciels antivirus pourrait identifier BeamMP comme une menace puisqu'il interact avec le r\u00e9seau et d'autres aspects. Il y a aucun virus dans le code. Le code pour le lanceur, le serveur, et le client lua peut \u00eatre trouv\u00e9 sur notre GitHub.
"},{"location":"fr/support/game-faq/#jai-une-baisse-de-performances-en-jeu-que-puis-je-faire","title":"J'ai une baisse de performances en jeu, que puis-je faire?","text":"Nous travaillons sans rel\u00e2che pour rendre l'exp\u00e9rience multijoueur aussi stable que posible. Si vous avez d\u00e9j\u00e0 diminu\u00e9 vos param\u00e8tres graphiques et les performances sont encore mauvaises, envisager de jouer sur un serveur avec moins de joueurs. Le jeu est principalement d\u00e9pendant du CPU lorsque vous jouez avec plusieurs persones, les CPU plus ancients (M\u00eame quadcore) vont donc avoir plus de difficult\u00e9e \u00e0 suivre qu'avec moins de joueurs. (En g\u00e9n\u00e9ral: 1 voiture par fil(Thread) de CPU)
"},{"location":"fr/support/game-faq/#divers","title":"Divers","text":""},{"location":"fr/support/game-faq/#ou-est-ce-que-je-peux-trouver-le-code","title":"O\u00f9 est-ce que je peux trouver le code?","text":"Le code source en entier peut \u00eatre retouv\u00e9 sur notre GitHub. Avant de faire n'importe quel changement, souvenez-vous que le code est assujettit \u00e0 nos Conditions d'utilisation et licenses:
Code License Serveur LICENSE Lanceur LICENSE Client Lua LICENSE"},{"location":"fr/support/game-faq/#jai-trouve-un-bug-ou-un-exploit-que-dois-je-faire","title":"J'ai trouv\u00e9 un bug ou un exploit, que dois-je faire?","text":"Si le probl\u00e8me est en lien avec le code et que vous savez utiliser Github, ouvrez une nouvelle \"issue\" (en anlgais) dans le r\u00e9pertoire appropri\u00e9 sur notre GitHub. Nous utilisons un rythme de travail bas\u00e9e sur les \"issue\" donc m\u00eame si vous avez une solution au probl\u00e8me, ouvrez une nouvelle \"issue\" et un \"pull request\" qui contient la solution au probl\u00e8me. PLus d'information sur comment contribuer peut \u00eatre trouv\u00e9 ici.
Si vous n'avez pas de compte Github, ne savez pas comment utiliser Github ou si vous avez une n'importe quelle autre question, vous pouvez entrer en contact avec nous de ces deux fa\u00e7ons:
L'acc\u00e8s anticip\u00e9 (EA) (incluant le nom en jeu (nametag) mauve and d'autre bonus) peut \u00eatre obtenus en nous supportant financi\u00e8rement sur Patreon en achetant un niveau, faisant un don, ou en boostant notre serveur Discord. Faire un don de x quantit\u00e9e US$ = x cl\u00e9e(s) additionnelle(s) incluant les bonus de l'acc\u00e8s anticip\u00e9 (EA). Booster le serveur vous donne acc\u00e8s \u00e0 4 cl\u00e9es additionnelles en plus des bonus de l'acc\u00e8s anticip\u00e9 (EA).
"},{"location":"fr/support/player-faq/#je-me-suis-abonnees-au-patreon-comment-est-ce-que-je-peux-avoir-acces-a-mes-bonus","title":"Je me suis abonn\u00e9(es) au Patreon. Comment est-ce que je peux avoir acc\u00e8s \u00e0 mes bonus?","text":"Assurerez-vous de faire les \u00e9tapes suivantes pour recevoir vos bonus automatiquement:
Soyez patient s'il vous plait, le syst\u00e8me peut prendre quelques heures pour se synchroniser, parfois jusqu'\u00e0 12 heures. Si vous n'avez pas re\u00e7us vos bonus apr\u00e8s 12 heures et vous avez suivi les \u00e9tapes ci-dessus, contacter le support BeamMP s'il vous plait.
"},{"location":"fr/support/player-faq/#jai-dautres-questions","title":"J'ai d'autres questions!","text":"Si votre question ou probl\u00e8me est li\u00e9 au jeu, r\u00e9f\u00e9rez-vous \u00e0 la FAQ du jeu s'il vous plait. Si votre question ou probl\u00e8me est en lien avec le fait de faire fonctionner un serveur, r\u00e9f\u00e9rez-vous \u00e0 la FAQ de serveur s'il vous plait. Sinon, vous pouvez regardez le forums o\u00f9 les membres de la communaut\u00e9 peuvent pauser des questions et r\u00e9pondres \u00e0 celles des autres.
"},{"location":"fr/support/server-faq/","title":"FAQ et probl\u00e8mes courants","text":"Listes de questions pos\u00e9es fr\u00e9quemment et probl\u00e8mes connus.
"},{"location":"fr/support/server-faq/#serveur","title":"Serveur","text":""},{"location":"fr/support/server-faq/#comment-est-ce-que-je-peux-faire-mon-propre-serveur","title":"Comment est-ce que je peux faire mon propre serveur?","text":"Toute l'information n\u00e9cessaire pour cr\u00e9er votre propre serveur peut \u00eatre retrouv\u00e9e ici.
"},{"location":"fr/support/server-faq/#est-ce-que-linux-peut-etre-utilise-pour-faire-un-serveur","title":"Est-ce que Linux peut \u00eatre utilis\u00e9 pour faire un serveur?","text":"Nous fournissons les \"binairies\" pour plusieurs distributions de Linux ici. Si aucune \"binairies\" n'est disponible pour votre syst\u00e8me d'op\u00e9ration/distribution, vous pouvez les construires vous m\u00eame en t\u00e9l\u00e9chargeant le code source depuis notre GitHub, un tutoriel peut \u00eatre trouv\u00e9 ici.
"},{"location":"fr/support/server-faq/#quelles-sont-les-specifications-minimales-pour-executer-le-logiciel-serveur-de-beammp","title":"Quelles sont les sp\u00e9cifications minimales pour \u00e9xecuter le logiciel serveur de BeamMP?","text":"Lisez le guide (en anglais pour le moment, la version traduite s'envient) au sujet de la redirection de port disponible ici. Il y a un petit r\u00e9sum\u00e9 des \u00e9tapes les plus importantes ci-dessous. Si d'autres joueurs essaient de se connecter et qu'ils re\u00e7oivent un code d'erreur 10060, 10061 ou 10038 dans leur lanceur BeamMP, vous devriez suicre les \u00e9tapes ci-dessous:
Vous pouvez v\u00e9rifier si vous avez correctement configur\u00e9 la redirection de port en utilisant CheckBeamMP lorsque le serveur est lanc\u00e9.
IP adress: Port:Notes:
Si le serveur fonctionne sur le m\u00eame ordinateur que le jeu, vous devez utiliser l'onglet \"Direct connect\" avec l'adresse ip 127.0.0.1 and le port du serveur pour vous connecter. Pour que vous puissiez vous connecter \u00e0 votre serveur auto-h\u00e9berg\u00e9 via la liste des serveurs, votre routeur dois supporter le protocol NAT-loopback, une fonction tr\u00e8s peu r\u00e9pandue dans les routeur de monsieur madame tout le monde.
"},{"location":"fr/support/server-faq/#divers","title":"Divers","text":""},{"location":"fr/support/server-faq/#ou-est-ce-que-je-peux-trouver-le-code","title":"O\u00f9 est-ce que je peux trouver le code?","text":"Le code source en entier peut \u00eatre retouv\u00e9 sur notre GitHub. Avant de faire n'importe quel changement, souvenez-vous que le code est assujettit \u00e0 nos Conditions d'utilisation et licenses:
Code License Serveur LICENSE Lanceur LICENSE Client Lua LICENSE"},{"location":"fr/support/server-faq/#jai-trouve-un-bug-ou-un-exploit-que-dois-je-faire","title":"J'ai trouv\u00e9 un bug ou un exploit, que dois-je faire?","text":"Si le probl\u00e8me est en lien avec le code et que vous savez utiliser Github, ouvrez une nouvelle \"issue\" (en anlgais) dans le r\u00e9pertoire appropri\u00e9 sur notre GitHub. Nous utilisons un rythme de travail bas\u00e9e sur les \"issue\" donc m\u00eame si vous avez une solution au probl\u00e8me, ouvrez une nouvelle \"issue\" et un \"pull request\" qui contient la solution au probl\u00e8me. PLus d'information sur comment contribuer peut \u00eatre trouv\u00e9 ici.
Si vous n'avez pas de compte Github, ne savez pas comment utiliser Github ou si vous avez une n'importe quelle autre question, vous pouvez entrer en contact avec nous de ces deux fa\u00e7ons:
Questo sito \u00e8 in costruzione!
Questo sito \u00e8 attualmente in fase di lavorazione.
Pensate di poter aiutare? Per favore, fatelo cliccando sulla pagina con una matita a destra!
Questo pu\u00f2 essere fatto anche su qualsiasi altra pagina.
"},{"location":"it/#benvenuti-su-beammp-docs","title":"Benvenuti su BeamMP Docs!","text":"Benvenuti nel centro documentazione rinnovato per BeamMP! Che tu sia un giocatore, un proprietario di server o uno sviluppatore, abbiamo le risorse di cui hai bisogno per migliorare la tua esperienza multiplayer su BeamNG.drive.
"},{"location":"it/#per-i-giocatori","title":"Per i Giocatori","text":"Sei nuovo su BeamMP? Dai un'occhiata alla nostra Guida Introduttiva per aiutarti a iniziare e trarre il massimo dalle tue avventure multiplayer. Se hai delle domande guarda le FAQ del giocatore.
"},{"location":"it/#per-i-proprietari-di-server","title":"Per i Proprietari di Server","text":"Stai pensando di creare il tuo server BeamMP? La nostra guida completa qui ti accompagner\u00e0 nel processo, assicurandoti di avere tutti gli strumenti e le conoscenze necessarie per configurare il tuo server in modo efficiente.
"},{"location":"it/#per-gli-sviluppatori","title":"Per gli Sviluppatori","text":"Esplora tutti i dettagli sulla creazione di risorse per il server BeamMP nella nostra Guida allo Sviluppo delle Risorse.
Stiamo lavorando a entusiasmanti aggiornamenti, tra cui una nuova homepage progettata per migliorare la tua esperienza di navigazione. Resta sintonizzato per ulteriori novit\u00e0!
"},{"location":"it/contributing/","title":"Contribuire alla creazione di BeamMP Docs","text":"BeamMP utilizza come tema Material per MkDocs. Questo tema \u00e8 per MkDocs. La documentazione completa \u00e8 disponibile ai rispettivi siti web.
"},{"location":"it/contributing/#per-cominciare","title":"Per cominciare","text":"Se vuoi aiutare contribuendo a questa documentazione puoi seguire uno dei due approcci qui sotto:
"},{"location":"it/contributing/#1-modificare-direttamente-i-file-markdown","title":"1. Modificare direttamente i file markdown","text":"Modificare direttamente i file markdown \u00e8 il metodo pi\u00f9 veloce per correzioni grammaticali, ortografiche o per l'aggiunta di nuove parti di contenuto. Questo modo necessita di una conoscenza del linguaggio di Markdown, siccome devi sapere gi\u00e0 come verr\u00e0 visualizzata la tua modifica.
Se questo metodo fa per te, segui questi passi:
Una volta creata la pull request, qualcuno del team di BeamMP la controller\u00e0 e potr\u00e0 approvarla o richiedere delle modifiche. Nel caso fossero richieste delle correzioni, a seguito del loro completamento ri-controlleremo la pull request. La tua pull request, quando viene approvata, verr\u00e0 unita tramite merge al repo e sar\u00e0 automaticamente rilasciata al pubblico.
"},{"location":"it/contributing/#2-modificare-con-lanteprima-live","title":"2. Modificare con l'anteprima live","text":"La modifica della documentazione in questo modo \u00e8 molto simile all'opzione 1, ma potrai vedere un'anteprima dei cambiamenti effettuati.
mkdocs serve
per avviare il server per visualizzare l'anteprima live da dove hai clonato la fork.mkdocs.yml # File di configurazione.\ndocs/\n index.md # La homepage della documentazione.\n ... # Altre pagine markdown, immagini e altri file.\n
"},{"location":"it/FAQ/How-to-check-for-CGNAT/","title":"Come verificare la presenza di CGNAT?","text":"How to check for CGNAT?
"},{"location":"it/FAQ/How-to-deactivate-mods/","title":"Come disattivare le mie mod?","text":""},{"location":"it/FAQ/game-faq/","title":"F.A.Q. e problemi noti","text":"Una lista di domande frequenti e bug noti.
"},{"location":"it/FAQ/game-faq/#come-si-installa-beammp","title":"Come si installa BeamMP?","text":"C'\u00e8 una guida per installare BeamMP, la puoi trovare qui.
"},{"location":"it/FAQ/game-faq/#beammp-funziona-su-versioni-piratate-del-gioco","title":"BeamMP funziona su versioni piratate del gioco?","text":"Le versioni piratate o non aggiornate di BeamNG.drive non sono supportate. Se vuoi usare BeamMP, acquista il gioco.
"},{"location":"it/FAQ/game-faq/#beammp-funziona-su-linux","title":"BeamMP funziona su Linux?","text":"Il client non \u00e8 ufficialmente supportato su Linux, ma dovrebbe comunque funzionare tramite wine
o utilizzando lo stesso prefisso del gioco tramite proton
.
Il launcher \u00e8 segnalato come falso positivo perch\u00e9 non \u00e8 stato firmato con delle licenze specifiche che, essendo molto costose, non sono state acquistate.
Non c'\u00e8 alcun codice malevolo in BeamMP; tutto il codice per il server, launcher e il client Lua \u00e8 disponibile sul nostro GitHub.
"},{"location":"it/FAQ/game-faq/#le-prestazioni-del-gioco-sono-basse-cosa-posso-fare","title":"Le prestazioni del gioco sono basse, cosa posso fare?","text":"Stiamo lavorando il pi\u00f9 possibile per garantire prestazioni stabili a tutti. Se hai gi\u00e0 abbassato le impostazioni grafiche, purtroppo non c'\u00e8 molto che puoi fare se non giocare con un numero minore di persone. Il gioco \u00e8 strettamente legato alla potenza e al numero di core della CPU, quindi con processori pi\u00f9 vecchi (anche con quattro core) avrai difficolt\u00e0 ad avere buone prestazioni con pi\u00f9 di una manciata di giocatori.
"},{"location":"it/FAQ/game-faq/#varie-ed-eventuali","title":"Varie ed eventuali","text":""},{"location":"it/FAQ/game-faq/#dove-posso-trovare-il-codice","title":"Dove posso trovare il codice?","text":"Tutto il codice sorgente \u00e8 disponibile su GitHub. Prima di modificare il codice, ricordati che \u00e8 soggetto ai nostri termini di utilizzo e con le seguenti licenze:
Codice Licenza Server LICENSE Launcher LICENSE Client Lua LICENSE"},{"location":"it/FAQ/game-faq/#ho-trovato-un-bug-o-un-exploit-cosa-faccio","title":"Ho trovato un bug o un exploit cosa faccio?","text":"Se il problema \u00e8 legato al codice e sai come usare GitHub, crea una nuova \"Issue\" nel repo corretto sul nostro GitHub. Il nostro flusso di lavoro \u00e8 basato sulle \"Issue\" di GitHub; anche se hai gi\u00e0 una soluzione al bug, sei pregato di creare una nuova \"Issue\" e poi chiedere una \"Pull Request\" che risolva la \"Issue\". Maggiori informazioni qui.
Nel caso non abbia o non sappia usare GitHub, puoi procedere nei seguenti modi:
Puoi collegare il tuo account Discord a BeamMP mandando il messaggio !link
al bot BeamMP Accounts. Il bot ti risponder\u00e0 con un link dove potrai fare login con il tuo account BeamMP. Una volta effettuato il login riceverai un secondo messaggio di conferma del collegamento.
L'early access (che include la tag in gioco viola e altri vantaggi), si pu\u00f2 ottenere facendo server boost al nostro server Discord, oppure supportandoci su Patreon.
"},{"location":"it/FAQ/player-faq/#ho-supportato-tramite-patreon-come-ottengo-i-benefici","title":"Ho supportato tramite Patreon, come ottengo i benefici?","text":"Effettua le seguenti operazioni per ottenere automaticamente i vantaggi dell'early access:
Potrebbero volerci fino a 4 ore per la sincronizzazione tra Patreon e BeamMP. Se dopo 12 ore non hai ancora ottenuto i benefici di Patreon e hai correttamente effettuato i passi precedenti, contatta il supporto di BeamMP.
"},{"location":"it/FAQ/player-faq/#ho-altre-domande","title":"Ho altre domande","text":"Se la tua domanda o problema riguarda il gioco o come giocare, guarda le FAQ del gioco. Se la tua domanda o problema riguarda la gestione del server, guarda le FAQ del server. In alternativa puoi consultare il nostro forum dove puoi trovare domande e risposte dalla comunit\u00e0.
"},{"location":"it/FAQ/server-faq/","title":"F.A.Q. e problemi noti","text":"Una lista di domande frequenti e bug noti.
"},{"location":"it/FAQ/server-faq/#come-posso-creare-un-server","title":"Come posso creare un server?","text":"Tutte le informazioni per creare un server sono contenute in questa guida.
"},{"location":"it/FAQ/server-faq/#posso-creare-un-server-su-linux","title":"Posso creare un server su Linux?","text":"Offriamo i binari pre-compilati per diverse distribuzioni Linux qui. Nel caso la tua distribuzione non fosse presente, puoi compilare i file sorgente scaricando il codice dal nostro GitHub, una guida si pu\u00f2 trovare qui.
"},{"location":"it/FAQ/server-faq/#quali-sono-i-requisiti-di-sistema-necessari-per-il-server","title":"Quali sono i requisiti di sistema necessari per il server?","text":"Leggi il passo 1. Port Forwarding
della nostra guida disponibile qui. Di seguito c'\u00e8 un breve riassunto dei punti salienti. Se giocatori esterni alla tua LAN non riescono a connettersi e ricevono sul launcher codici di errore come 10060, 10061 o 10038, segui questi passi:
ServerConfig.toml
(quella predefinita \u00e8 30814), sia con protocollo TCP sia UDP;Puoi vedere se la porta \u00e8 aperta correttamente usando un sito come 'portchecker.co' mentre il server \u00e8 attivo.
Note:
Leggi questa sezione della nostra guida. Se non vuoi usare il pulsante Direct Connect
e vuoi connetterti tramite la lista dei server al tuo server, il tuo router deve supportare il NAT-loopback, che di solito non \u00e8 supportato dai router domestici.
Tutto il codice sorgente \u00e8 disponibile su GitHub. Prima di modificare il codice, ricordati che \u00e8 soggetto ai nostri termini di utilizzo e con le seguenti licenze:
Codice Licenza Server LICENSE Launcher LICENSE Client Lua LICENSE"},{"location":"it/FAQ/server-faq/#ho-trovato-un-bug-o-un-exploit-cosa-faccio","title":"Ho trovato un bug o un exploit cosa faccio?","text":"Se il problema \u00e8 legato al codice e sai come usare GitHub, crea una nuova \"Issue\" nel repo corretto sul nostro GitHub. Il nostro flusso di lavoro \u00e8 basato sulle \"Issue\" di GitHub; anche se hai gi\u00e0 una soluzione al bug, sei pregato di creare una nuova \"Issue\" e poi chiedere una \"Pull Request\" che risolva la \"Issue\". Maggiori informazioni qui.
Nel caso non abbia o non sappia usare GitHub, puoi procedere nei seguenti modi:
Questa documentazione non \u00e8 ufficiale, ma \u00e8 realizzata dal team di BeamMP e dalla comunit\u00e0 di BeamNG.
"},{"location":"it/beamng/#capire-la-struttura-dei-file","title":"Capire la struttura dei file","text":"...
"},{"location":"it/beamng/#snippet","title":"Snippet","text":"Degli snippet di codice possono essere trovati qui: Snippets
"},{"location":"it/beamng/snippets/","title":"Helpful Code Snippets","text":"Questo sito \u00e8 ancora in costruzione
Questo sito \u00e8 in fase di lavorazione.
Pensi di poter aiutare? Puoi farlo cliccando sulla pagina con la matita in alto a destra!
Puoi contribuire a qualsiasi pagina.
"},{"location":"it/beamng/snippets/#snippet-per-beamngdrive","title":"Snippet per BeamNG.drive","text":""},{"location":"it/beamng/snippets/#snippet-di-codice-lua","title":"Snippet di codice Lua","text":""},{"location":"it/beamng/snippets/#creare-un-indicatore-rilevare-un-veicolo","title":"Creare un indicatore & rilevare un veicolo","text":"Creare un indicatore (o marker) sulla mappa \u00e8 uno dei modi migliori per far capire all'utente che pu\u00f2 interagire con qualcosa in quel punto.
Creare un indicatore \u00e8 relativamente semplice. Di seguito c'\u00e8 un esempio di come \u00e8 creato un indicatore per il percorso dei bus:
local function createBusMarker(markerName)\n local marker = createObject('TSStatic')\n marker:setField('shapeName', 0, \"art/shapes/interface/position_marker.dae\")\n marker:setPosition(vec3(0, 0, 0))\n marker.scale = vec3(1, 1, 1)\n marker:setField('rotation', 0, '1 0 0 0')\n marker.useInstanceRenderData = true\n marker:setField('instanceColor', 0, '1 1 1 0')\n marker:setField('collisionType', 0, \"Collision Mesh\")\n marker:setField('decalType', 0, \"Collision Mesh\")\n marker:setField('playAmbient', 0, \"1\")\n marker:setField('allowPlayerStep', 0, \"1\")\n marker:setField('canSave', 0, \"0\")\n marker:setField('canSaveDynamicFields', 0, \"1\")\n marker:setField('renderNormals', 0, \"0\")\n marker:setField('meshCulling', 0, \"0\")\n marker:setField('originSort', 0, \"0\")\n marker:setField('forceDetail', 0, \"-1\")\n marker.canSave = false\n marker:registerObject(markerName)\n scenetree.MissionGroup:addObject(marker)\n return marker\n end\n\n -- this can then be called in a loop to setup your markers. \n -- NOTE: You should only do this once as part of your setup and not called on each frame.\n if #markers == 0 then\n for k,v in pairs(nameMarkers) do\n local mk = scenetree.findObject(v)\n if mk == nil then\n log('I', logTag,'Creating marker '..tostring(v))\n mk = createBusMarker(v)\n ScenarioObjectsGroup:addObject(mk.obj)\n end\n table.insert(markers, mk)\n end\n end\n
Di seguito un esempio di indicatore personalizzato preso da BeamNG-FuelStations:
local stations = [\n { \"location\": [ -778.813, 485.973, 23.46 ], \"type\":\"gas\" },\n { \"location\": [ 617.164, -192.107, 53.2 ], \"type\":\"ev\" },\n ]\n\n local function IsEntityInsideArea(pos1, pos2, radius)\n return pos1:distance(pos2) < radius\n end\n\n local onUpdate = function (dt)\n for k, spot in pairs(stations) do -- loop through all spots on the current map\n local bottomPos = vec3(spot.location[1], spot.location[2], spot.location[3])\n local topPos = bottomPos + vec3(0,0,2) -- offset vec to get top position (2m tall)\n\n local spotInRange = false -- is this spot in range? used for color\n local spotCompatible = false -- is this spot compatible?\n\n if activeVeh then -- we have a car and its ours (if in mp)\n local vehPos = activeVeh:getPosition()\n\n spotInRange = IsEntityInsideArea(vec3(vehPos.x, vehPos.y,vehPos.z), bottomPos, 1.5)\n\n spotCompatible = activeFuelType == \"any\" or spot.type == \"any\" or activeFuelType == spot.type\n end\n\n local spotColor = (spotInRange and spotCompatible) and activeColorMap[spot.type] or inactiveColorMap[spot.type] or ColorF(1,1,1,0.5)\n\n debugDrawer:drawCylinder(bottomPos:toPoint3F(), topPos:toPoint3F(), 1, spotColor) --bottom, top, radius, color\n end\n end\n
"},{"location":"it/beamng/snippets/#esempi-guihook","title":"Esempi guihook","text":""},{"location":"it/beamng/snippets/#notifiche-toast-in-alto-a-destra-dello-schermo","title":"Notifiche Toast, in alto a destra dello schermo","text":"--guihooks.trigger('toastrMsg', {type, title, msg, config = {timeOut}}) \nguihooks.trigger('toastrMsg', {type = \"info\", title = \"Info Message:\", msg = \"Info Message Text Here\", config = {timeOut = 5000}}) \nguihooks.trigger('toastrMsg', {type = \"warning\", title = \"Warning Message:\", msg = \"Warning Message Text Here\", config = {timeOut = 5000}}) \nguihooks.trigger('toastrMsg', {type = \"error\", title = \"Error Message:\", msg = \"Error Message Text Here\", config = {timeOut = 5000}}) \n
"},{"location":"it/beamng/snippets/#notifiche-come-messaggi-in-alto-a-sinistra-dello-schermo-di-norma-nellapp-messages","title":"Notifiche come messaggi, in alto a sinistra dello schermo di norma nell'app Messages","text":"--guihooks.trigger('Message', {msg, ttl, category, icon}) --requires Messages app\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"arrow_upward\", icon = \"arrow_upward\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"arrow_downward\", icon = \"arrow_downward\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"flag\", icon = \"flag\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"check\", icon = \"check\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"check_circle\", icon = \"check_circle\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"warning\", icon = \"warning\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"error\", icon = \"error\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"directions_car\", icon = \"directions_car\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"star\", icon = \"star\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"timeline\", icon = \"timeline\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"save\", icon = \"save\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"settings\", icon = \"settings\"}) \n
"},{"location":"it/beamng/snippets/#messaggio-centrale-temporaneo-grande-o-piccolo","title":"Messaggio centrale temporaneo grande o piccolo","text":"--guihooks.trigger('ScenarioFlashMessage', {{msg, ttl, sound, big}} ) -- requires RaceCountdown ui app\nguihooks.trigger('ScenarioFlashMessage', {{\"Message\", 5.0, 0, true}} ) \nguihooks.trigger('ScenarioFlashMessage', {{\"Message Text Here\", 5.0, 0, false}} ) \n\n--countdown example, when all executed at once, the items are queued and will follow eachother after the previous ttl expires\nguihooks.trigger('ScenarioFlashMessage', {{\"3\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown1')\", true}}) \nguihooks.trigger('ScenarioFlashMessage', {{\"2\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown2')\", true}}) \nguihooks.trigger('ScenarioFlashMessage', {{\"1\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown3')\", true}}) \nguihooks.trigger('ScenarioFlashMessage', {{\"GO!\", 3.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_CountdownGo')\", true}}) \n\n--another sound example\nguihooks.trigger('ScenarioFlashMessage', {{\"Teleported!\", 3.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Checkpoint')\", false}}) \n
"},{"location":"it/beamng/snippets/#messaggio-centrale-persistente","title":"Messaggio centrale persistente","text":"
--guihooks.trigger('ScenarioRealtimeDisplay', {msg = msg} ) -- requires Race Realtime Display ui app\nguihooks.trigger('ScenarioRealtimeDisplay', {msg = \"Message Text Here\"} )\n--these messages persist, clear with a blank string\n--if you are running live data, this is a good one to update rapidly (think timers, distance calcs, et cetera)\nguihooks.trigger('ScenarioRealtimeDisplay', {msg = \"\"} )\n
"},{"location":"it/beamng/snippets/#snippet-di-codice-imgui","title":"Snippet di codice IMGUI","text":""},{"location":"it/beamng/snippets/#snippet-di-codice-cef-ui","title":"Snippet di codice CEF UI","text":""},{"location":"it/beamng/dev/","title":"Introduction","text":"Questo sito \u00e8 ancora in costruzione
Questo sito \u00e8 in fase di lavorazione.
Pensi di poter aiutare? Puoi farlo cliccando sulla pagina con la matita in alto a destra!
Puoi contribuire a qualsiasi pagina.
"},{"location":"it/beamng/dev/#introduzione-allo-sviluppo-per-beamngdrive","title":"Introduzione allo sviluppo per BeamNG.drive","text":""},{"location":"it/beamng/dev/content/maps/","title":"Maps","text":"Questo sito \u00e8 ancora in costruzione
Questo sito \u00e8 in fase di lavorazione.
Pensi di poter aiutare? Puoi farlo cliccando sulla pagina con la matita in alto a destra!
Puoi contribuire a qualsiasi pagina.
"},{"location":"it/beamng/dev/content/maps/#creazione-di-una-mappa-su-beamngdrive","title":"Creazione di una mappa su BeamNG.drive","text":"...
"},{"location":"it/beamng/dev/content/maps/#introduzione","title":"Introduzione","text":"...
"},{"location":"it/beamng/dev/content/maps/#primi-passi","title":"Primi passi","text":"...
"},{"location":"it/beamng/dev/content/props/","title":"Props","text":"Questo sito \u00e8 ancora in costruzione
Questo sito \u00e8 in fase di lavorazione.
Pensi di poter aiutare? Puoi farlo cliccando sulla pagina con la matita in alto a destra!
Puoi contribuire a qualsiasi pagina.
"},{"location":"it/beamng/dev/content/props/#creazione-di-prop-su-beamngdrive","title":"Creazione di prop su BeamNG.drive","text":"...
"},{"location":"it/beamng/dev/content/props/#introduzione","title":"Introduzione","text":"...
"},{"location":"it/beamng/dev/content/props/#primi-passi","title":"Primi passi","text":"...
"},{"location":"it/beamng/dev/content/vehicles/","title":"Vehicles","text":"Questo sito \u00e8 ancora in costruzione
Questo sito \u00e8 in fase di lavorazione.
Pensi di poter aiutare? Puoi farlo cliccando sulla pagina con la matita in alto a destra!
Puoi contribuire a qualsiasi pagina.
"},{"location":"it/beamng/dev/content/vehicles/#creazione-di-un-veicolo-su-beamngdrive","title":"Creazione di un veicolo su BeamNG.drive","text":"...
"},{"location":"it/beamng/dev/content/vehicles/#introduzione","title":"Introduzione","text":"...
"},{"location":"it/beamng/dev/content/vehicles/#primi-passi","title":"Primi passi","text":"...
"},{"location":"it/beamng/dev/modding/imgui-windows/","title":"imgui-windows.md","text":"Questa pagina deve ancora essere creata.
"},{"location":"it/beamng/dev/modding/lua-mods/","title":"lua-mods.md","text":"Questa pagina deve ancora essere creata.
"},{"location":"it/beamng/dev/modding/ui-apps/","title":"Creazione di app UI","text":""},{"location":"it/community/","title":"General Information","text":"Questo sito \u00e8 ancora in costruzione
Questo sito \u00e8 in fase di lavorazione.
Pensi di poter aiutare? Puoi farlo cliccando sulla pagina con la matita in alto a destra!
Puoi contribuire a qualsiasi pagina.
"},{"location":"it/community/#benvenuto-nellarea-dedicata-alla-comunita-di-beammp","title":"Benvenuto nell'area dedicata alla comunit\u00e0 di BeamMP","text":""},{"location":"it/community/#introduzione","title":"Introduzione","text":""},{"location":"it/community/#le-nostre-regole","title":"Le nostre regole","text":"Le nostre regole possono essere trovate qui.
"},{"location":"it/community/rules/","title":"Regole della comunit\u00e0 di BeamMP","text":"Info
I moderatori non sono strettamente legati a queste regole e applicano queste ultime secondo loro discrezioni. In aggiunta a queste regole, si applicano anche le regole delle community di Discord e i Termini di Servizio.
"},{"location":"it/community/rules/#regole-generali-di-beammp-applicate-al-discord-forum-e-in-gioco","title":"Regole generali di BeamMP (applicate al Discord, forum e in gioco):","text":"@'ing
)Tutti gli appelli sono investigati scrupolosamente, da almeno due (2) membri dello staff/moderatori che non erano coinvolti nel caso in questione. Il membro dello staff che ha emesso il ban potr\u00e0 commentare, ma non potr\u00e0 decidere il risultato dell'appello. Il risultato dell'appello al ban \u00e8 definitivo e non pu\u00f2 essere controbattuto. BeamMP si riserva il diritto di ammettere o meno i membri come ritiene opportuno in base alle Linee guida della comunit\u00e0 BeamMP, ai ToS di Discord e ad altri fattori.
Warning
Nel caso il tuo account (Discord o BeamMP) sia stato bannato, non puoi crearne uno nuovo per aggirare il ban.
"},{"location":"it/game/error-codes/","title":"Codici di errore","text":"Questa pagina contiene tutti i possibili errori del launcher.
Codice Descrizione Soluzione possibile 10054 Connessione reimpostata dal peer Il server al quale ti stai connettendo \u00e8 andato offline. Bloccato sugli aggiornamenti Il launcher \u00e8 bloccato agli aggiornamenti e non procede al passo successivo Esegui il launcher come amministratore e controlla le regole del tuo antivirus affinch\u00e9 il launcher non sia bloccato. Failed to find the game please launch it. Report this if the issue persists code 3. Il launcher non \u00e8 stato in grado di trovare le informazioni del gioco (cartella del gioco, cartella del profilo, versione, ecc...) nel registro di sistema Avvia il gioco almeno una volta per creare i valori nel registro. Failed to find the game please launch it. Report this if the issue persists code 4. Il launcher non \u00e8 stato in grado di leggere le informazioni del gioco (cartella del gioco, cartella del profilo, versione, ecc...) nel registro di sistema Questo errore \u00e8 mostrato per la maggior parte a utenti che hanno una copia pirata del gioco. Se hai acquistato il gioco, avvialo almeno una volta per creare i valori nel registro. Failed to Launch the game! launcher closing soon Il launcher non \u00e8 stato in grado di trovare l'eseguibile del gioco Avvia il gioco almeno una volta ed esegui di nuovo il launcher. Game Closed! launcher closing soon Il gioco \u00e8 stato chiuso Questo messaggio appare alla chiusura del gioco o quando il gioco non si \u00e8 avviato correttamente. Launcher Update failed! Il launcher non \u00e8 stato in grado di scaricare una nuova versione Controlla la tua connessione ad internet e le regole del tuo firewall / antivirus affinch\u00e9 il launcher non sia bloccato. Logger file init failed Il launcher non ha i permessi per creare file Esegui il launcher come amministratore. Please close the game and try again Il gioco \u00e8 gi\u00e0 aperto e il launcher non riesce a liberare la cartellamultiplayer/mods
Chiudi il gioco e riprova. Please launch the game at least once Il launcher ha provato e ha fallito a modificare la cartella del gioco Avvia il gioco almeno una volta ed esegui di nuovo il launcher. Primary Servers Offline! sorry for the inconvenience! Il launcher non \u00e8 stato in grado di controllare gli aggiornamenti Controlla la tua connessione ad internet e le regole del firewall. Se non ci sono errori dalla tua parte, guarda il canale BeamMP updates sul nostro Discord. Sorry Backend System Outage! Don't worry it will back on soon! Il backend BeamMP \u00e8 irraggiungibile Controlla la tua connessione ad internet e le regole del firewall. Se non ci sono errori dalla tua parte, guarda il canale BeamMP updates sul nostro Discord. Se il launcher si chiude immediatamente, controlla il file Launcher.log
nella cartella dove hai installato BeamMP.
BeamMP \u00e8 compatibile solo con versioni originali del gioco. Le versioni piratate non sono supportate.
"},{"location":"it/game/getting-started/#installazione","title":"Installazione","text":"BeamMP \u00e8 nativamente compatibile solo con Windows al momento.
"},{"location":"it/game/getting-started/#installazione-su-windows","title":"Installazione su Windows","text":"BeamMP_Installer.zip
.BeamMP_Installer.exe
e segui le istruzioni a schermo.BeamMP-Launcher
dovrebbe apparire sul tuo desktop. Se questo non fosse il caso cerca BeamMP
nella barra di ricerca di Windows, dopodich\u00e9 clicca il l'icona per avviarlo.Multiplayer
per giocare in multigiocatore.Connect
.Nota: Se ti connetti ad un server con molti giocatori potresti impiegare pi\u00f9 tempo ad entrare in gioco.
"},{"location":"it/game/getting-started/#installazione-su-linux","title":"Installazione su Linux","text":"Consultare la documentazione in inglese.
"},{"location":"it/game/getting-started/#problemi-noti","title":"Problemi noti","text":"Multiplayer
non \u00e8 visibile, assicurarsi che la mod multiplayerbeammp
sia l'unica attiva nel \"Mod Manager\" dopodich\u00e9 premi ctrl + L
.multiplayerbeammp
sia l'unica attiva nel \"Mod Manager\", altrimenti potrebbero sorgere diversi problemi.Se hai dei problemi, chiedi pure sul nostro Forum o sul nostro server Discord nel canale #support
.
Questo sito \u00e8 ancora in costruzione
Questo sito \u00e8 in fase di lavorazione.
Pensi di poter aiutare? Puoi farlo cliccando sulla pagina con la matita in alto a destra!
Puoi contribuire a qualsiasi pagina.
"},{"location":"it/guides/#guide-sullo-sviluppo-per-beammp","title":"Guide sullo sviluppo per BeamMP","text":"Questa pagina sar\u00e0 l'introduzione per la creazione di contenuti sia lato server sia lato client.
Questa pagina deve ancora essere completata.
"},{"location":"it/guides/beammp-dev/beammp-dev/","title":"Development Environment Setup","text":"Questo sito \u00e8 in costruzione!
Questo sito \u00e8 attualmente in fase di lavorazione.
Pensate di poter aiutare? Per favore, fatelo cliccando sulla pagina con una matita a destra!
Questo pu\u00f2 essere fatto anche su qualsiasi altra pagina.
"},{"location":"it/guides/beammp-dev/beammp-dev/#per-iniziare","title":"Per iniziare","text":"Per iniziare a sviluppare per BeamMP avrai bisogno di almeno queste cose:
BeamMP \u00e8 diviso in tre componenti principali:
Per lavorare in modo efficiente alle mod in BeamNG \u00e8 molto consigliato usare una cartella unpacked
, invece di ricreare zip dopo ogni cambiamento.
Apri la cartella utente di BeamNG navigando a %appdata%/Local/BeamNG.drive/0.xx/mods
dove xx
\u00e8 l'ultima versione di BeamNG. Crea una cartella chiamata unpacked
all'interno della cartella mods
.
Altre informazioni riguardo la cartella utente si possono qui https://documentation.beamng.com/support/userfolder/
"},{"location":"it/guides/beammp-dev/beammp-dev/#abilitare-la-modalita-sviluppatore-per-il-launcher-beammp","title":"Abilitare la modalit\u00e0 sviluppatore per il launcher BeamMP","text":"Per evitare che gli aggiornamenti automatici cancellino la tua git clone locale, bisogna disabilitarli usando --no-download
. Se non vuoi che il launcher apra BeamNG e vuoi vedere stampe di debug, \u00e8 consigliato usare --dev
.
--help
o -h
Stampa a video questa lista di parametri --port <port>
o -p
Cambia la porta di ascolto da quella di default a <port>
. Deve essere configurata anche in gioco --verbose
o -v
Modalit\u00e0 verbosa, stampa messaggi di debug --no-download
Salta il download e l'installazione della mod Lua di BeamMP --no-update
Salta l'aggiornamento automatico del launcher (bisogner\u00e0 aggiornare manualmente) --no-launch
Salta l'avvio automatico del gioco (bisogner\u00e0 avviare il gioco manualmente) --dev
Modalit\u00e0 sviluppatore, equivalente a --verbose --no-download --no-launch --no-update --game <args...>
o -- <args...>
Passa dei parametri al gioco"},{"location":"it/guides/beammp-dev/beammp-dev/#clonare-il-repo-di-beammp-nella-cartella-unpacked","title":"Clonare il repo di BeamMP nella cartella unpacked","text":"Nonostante si possa copiare manualmente i file di BeamMP dal nostro repo di Github, \u00e8 consigliato usare un sistema di source-control come git. Per prima cosa crea una fork di https://github.com/BeamMP/BeamMP
La cosa pi\u00f9 efficiente sarebbe quella di clonare il repo direttamente nella cartella unpacked
.
Per git
, lanciare git clone https://github.com/yourName/BeamMP
da una finestra PowerShell o CMD, avviata nella cartella unpacked
. Controlla che nella cartella utente di BeamNG non ci sia alcuna cartella multiplayer
in mods
e che invece ci sia unpacked/beammp
.
Ora puoi provare la modalit\u00e0 sviluppatore. Avvia il launcher BeamMP, avvia BeamNG manualmente, controlla che BeamMP sia l'unica mod attiva. Dovresti riuscire a giocare normalmente.
Usando un editor di codice, puoi aggiungere o cambiare codice direttamente dalla cartella unpacked
. In seguito alle modifiche ricarica Lua in gioco premendo Ctrl+L
(e F5
se hai effettuato modifiche all'interfaccia utente).
Quando sei soddisfatto delle modifiche, puoi effettuare una commit tramite git. Guarda il sito Git-SCM per guide e documentazione sull'utilizzo di Git. Non appena hai effettuato commit e push (al tuo repo), puoi aprire una pull-request.
Chiedi pure nel canale #scripting nel nostro Discord se hai dei problemi.
"},{"location":"it/guides/beammp-dev/beammp-dev/#creare-un-server-in-locale","title":"Creare un server in locale","text":"Mentre si lavora su BeamMP pu\u00f2 essere d'aiuto l'utilizzo di un server in locale. Puoi seguire la guida di installazione del server saltando i primi due passi per quanto riguarda le connessioni locali.
Imposta il server come privato in serverConfig.toml
e puoi usare una qualunque stringa come AuthKey
.
Per i dettagli riguardo la formattazione del codice, formato dei messaggi di commit, migliori pratiche per lo sviluppo, ecc. leggere il file CONTRIBUTING.md
presente in ogni repo. Questo file contiene informazioni dettagliate su come contribuire. Il file README.md
in ogni repo, di solito contiene anche dei passi per compilare il codice (per i progetti precompilati).
Questo sito \u00e8 in costruzione!
Questo sito \u00e8 attualmente in fase di lavorazione.
Pensate di poter aiutare? Per favore, fatelo cliccando sulla pagina con una matita a destra!
Questo pu\u00f2 essere fatto anche su qualsiasi altra pagina.
"},{"location":"it/guides/mod-creation/server/getting-started/#per-iniziare","title":"Per iniziare","text":"Questa pagina ti aiuter\u00e0 a creare mod per BeamMP lato server.
"},{"location":"it/scripting/mod-reference/","title":"Client Scripting Reference","text":"Questo sito \u00e8 ancora in costruzione
Questo sito \u00e8 in fase di lavorazione.
Pensi di poter aiutare? Puoi farlo cliccando sulla pagina con la matita in alto a destra!
Puoi contribuire a qualsiasi pagina.
"},{"location":"it/scripting/mod-reference/#riferimento-per-lo-scripting-lato-client","title":"Riferimento per lo scripting lato client","text":"BeamMP ti permette di creare i tuoi personali plugin da eseguire lato client. Abbiamo creato delle funzioni che ti permettono di comunicare con altre mod legate al multiplayer e ad altri giocatori tramite il server.
"},{"location":"it/scripting/mod-reference/#funzioni","title":"Funzioni","text":"Lista di funzioni disponibili per gli script:
Funzione NoteTriggerServerEvent(\"eventName\", \"data\")
Scatena un evento nel contesto Lua lato server, entrambi i parametri sono stringhe. TriggerClientEvent(\"eventName\", \"data\")
Scatena un evento nel contesto Lua lato client, entrambi i parametri sono stringhe. Buono da usare per la comunicazione tra plugin diversi. AddEventHandler(\"eventName\", Function)
Aggiunge il secondo parametro alla tabella che viene invocata quando viene ricevuto eventName
(sia localmente sia dal server), Function
ricever\u00e0 un (1) parametro, una stringa contenente i dati dell'evento."},{"location":"it/scripting/mod-reference/#esempi-di-codice","title":"Esempi di codice","text":"Per esempio si pu\u00f2 analizzare la chat usando il suo evento evento ChatMessageIncluded
:
local function chatReceived(msg) -- Receive event with parameters\n print(\"chat received: \"..msg)\n local i = string.find(s, \":\") -- Find where our first ':' is, used to separate the sender and message\n if i == nil then\n print(\"error parsing message: separator could not be found!\")\n return -- Could not find separator, cancel function\n end\n print(\"index of separator: \"..tostring(i))\n local sender = string.sub(msg, 1, i-1) -- Substring our input to separate its 2 parts\n local message = string.sub(msg, i+1, -1) -- Do whatever you want to with the message\n print(\"sender: \" .. sender)\n print(\"message: \".. message)\nend\n\nAddEventHandler(\"ChatMessageReceived\", chatReceived) -- Add our event handler to the list managed by BeamMP\n
"},{"location":"it/server/create-a-server/","title":"Installazione del server","text":""},{"location":"it/server/create-a-server/#creazione-del-server","title":"Creazione del server","text":"Basi per la creazione di un server
"},{"location":"it/server/create-a-server/#introduzione","title":"Introduzione","text":"Creare un server casalingo \u00e8 gratuito, ma usare a un VPS \u00e8 pi\u00f9 facile e pi\u00f9 sicuro
I server sono una parte integrante di BeamMP, tutti i giocatori sono connessi tra loro attraverso il server. I server possono funzionare nativamente su Windows e Linux.
Puoi creare server privati, ai quali si possono connettere solo persone che inviti, o server pubblici, che saranno visibili sulla nostra ufficiale lista di server.
Per far funzionare correttamente un server \u00e8 necessario seguire alcuni passi! \u00c8 abbastanza semplice, ma se hai dei problemi, chiedi pure sul nostro Forum o sul nostro server Discord nel canale #support
. Fai anche riferimento alla sezione di Manutenzione Server per ulteriori informazioni.
Assicurati di aver letto e compreso la LICENZA del server prima dell'uso.
Nota: Il server supporta esclusivamente indirizzi IPv4. Se non sai che tipo di indirizzo usi, visita il sito whatsmyip.org - se l'indirizzo contiene _:_
due punti, \u00e8 di tipo IPv6. In tal caso devi investigare pi\u00f9 a fondo e capire se hai a disposizione anche un indirizzo IPv4. Per far ci\u00f2 puoi telefonare al tuo ISP chiedendo informazioni a riguardo, o chiedi a qualcuno che se ne intende che conosci. Il supporto per gli indirizzi IPv6 \u00e8 in programma.
La configurazione consiste di pochi passi che sono obbligatori da seguire.
"},{"location":"it/server/create-a-server/#1-port-forwarding","title":"1. Port forwarding","text":"Se stai utilizzando un VPS (Virtual Private Server) o un Rootserver, puoi generalmente saltare questo passo. Se non sei sicuro di cosa sia un VPS o Rootserver, non lo stai usando.
Questo passo \u00e8 necessario se vuoi che qualcuno all'esterno della tua casa (\"all'esterno del tuo network locale o LAN\") possa accedere al server.
"},{"location":"it/server/create-a-server/#_1","title":"Installazione del server","text":"LIMITAZIONE DI RESPONSABILITA':
Port forward \u00e8 rischioso
Facendo il port forwarding sei a conoscenza dei rischi legati ad aprire le porte del tuo network di casa al pubblico e di conseguenza sollevi BeamMP da ogni responsabilit\u00e0 di danni che potrebbero succedere a te o al tuo ambiente domestico.
Non ci assumiamo alcuna responsabilit\u00e0 per i contenuti presenti su pagine esterne dei servizi presentati.
\u00c8 consigliato affidarsi a uno dei nostri partner per l'hosting del server!
"},{"location":"it/server/create-a-server/#servizi-a-pagamento","title":"Servizi a pagamento:","text":"NOTA: se se sceglie di acquistare il server da uno dei partner, il passo di Port Forwarding \u00e8 superfluo.
Per effettuare il port forwarding, affidarsi a questa guida esterna.
"},{"location":"it/server/create-a-server/#11-firewall","title":"1.1 Firewall","text":"A seconda della tua configurazione, potresti dover aggiungere BeamMP-Server alle regole del tuo firewall. Questo \u00e8 il caso di Windows (spegnere il firewall di solito non funziona) e su molti server Linux pre-configurati.
Qui, come nel caso del port forwarding, devi permettere il traffico sia in entrata sia in uscita e sia TCP sia UDP di BeamMP-Server attraverso il firewall. Se invece il tuo firewall richiede una porta, usa la stessa utilizzata nel passo precedente (\"1. Port forwarding\").
Se hai dei problemi, chiedi pure sul nostro Forum o sul nostro server Discord nel canale #support
.
La chiave di autenticazione, spesso chiamata \"AuthKey\", \u00e8 necessaria per creare un server pubblico, ma \u00e8 consigliato usarla anche per i server privati.
Ti servir\u00e0 un account Discord per questo passo. Discord \u00e8 necessario per evitare problemi di spam.
"},{"location":"it/server/create-a-server/#21-accedere-alla-pagina-delle-chiavi","title":"2.1. Accedere alla pagina delle chiavi","text":"Fai il login con Discord al Keymaster. Dalla homepage del Keymaster, clicca su \"Keys\" a sinistra dello schermo:
"},{"location":"it/server/create-a-server/#22-creare-una-chiave","title":"2.2. Creare una chiave","text":"Per creare una chiave clicca il \"+\" verde presente in alto a destra.
"},{"location":"it/server/create-a-server/#23-compilare-i-dati-per-la-chiave","title":"2.3. Compilare i dati per la chiave","text":"Inserisci il nome del server (questo \u00e8 solo il nome per la chiave, non \u00e8 il nome vero e proprio del server), poi clicca \"Create\", ad esempio:
Il risultato dovrebbe essere simile a questo:
NON CONDIVIDERE MAI QUESTA CHIAVE. TRATTALA COME UNA PASSWORD
Hai un numero limitato di chiavi. Puoi utilizzare una chiave su un server per volta, quindi non puoi far partire due server con la stessa chiave nello stesso momento.
"},{"location":"it/server/create-a-server/#24-copiare-la-chiave","title":"2.4. Copiare la chiave","text":"Copia il testo del campo \"key\", in questo esempio \u00e8 3173a2e-6az0-4542-a3p0-ddqq5ff95558
e tienilo pronto per il passo successivo. Puoi fare questo cliccando l'icona a destra della chiave:
Il BeamMP-Server \u00e8 disponibile per Windows e Linux. Le prossime due sezioni sono dedicate all'installazione su Windows e Linux rispettivamente.
"},{"location":"it/server/create-a-server/#3a-installazione-su-windows","title":"3.a Installazione su Windows","text":"Per l'installazione su Linux, salta alla sezione succesiva.
Ricordati di fare il port forwarding, altrimenti il tuo server non sar\u00e0 raggiungibile al pubblico!
BeamMP-Server.exe
.BeamMP-Server.exe
. Qui \u00e8 dove il server risieder\u00e0.ServerConfig.toml
nella stessa cartella di BeamMP-Server.exe
.BeamMP-Server.exe
> Invia a > Desktop (crea collegamento).Passare ora al punto \"4. Configurazione\".
"},{"location":"it/server/create-a-server/#3b-installazione-su-linux","title":"3.b Installazione su Linux","text":""},{"location":"it/server/create-a-server/#utilizzando-la-build-precompilata-consigliato","title":"Utilizzando la build precompilata (consigliato)","text":"Questo passo \u00e8 valido per tutte le distribuzioni Linux per cui offriamo i files binari qui. Se usi una distribuzione o architettura differente, salta al passo \"Compilazione file sorgente\".
BeamMP-Server-xxx
durante la guida, dove xxx
\u00e8 la versione per la distribuzione che stai usando.BeamMP-Server-xxx
. Qui \u00e8 dove il server risieder\u00e0.BeamMP-Server-xxx
e incolla il comando chmod +x BeamMP-Server-xxx
. Questo far\u00e0 in modo che si abbiano i permessi per eseguire il server../BeamMP-Server-xxx
. Questo generer\u00e0 tutti i files necessari e quando vedi del testo sul terminale, puoi chiuderlo. Dovresti vedere questo file chiamato ServerConfig.toml
nella stessa cartella di BeamMP-Server-xxx
.beammpserver
(o simile), siccome non raccomandiamo di eseguire il server come root, sudo o con il proprio utente personale. Dovresti poi rendere possibile l'esecuzione del server solo da questo utente.Passare ora al punto \"4. Configurazione\".
"},{"location":"it/server/create-a-server/#compilazione-file-sorgente","title":"Compilazione file sorgente","text":"\u00c8 molto probabile, ma non \u00e8 stato ufficialmente provato, che BeamMP-Server per Linux funzioni su distribuzioni differenti da quelle per cui offriamo i files binari qui. Se vuoi compilare i codice sorgente puoi farlo, scaricando il codice dal nostro GitHub, una guida si pu\u00f2 trovare qui.
Infine ricordati di eseguire il server con il comando ./BeamMP-Server-xxx
, dopodich\u00e9 vai al passo successivo.
Dopo che il server \u00e8 stato avviato almeno una volta, dovrebbe aver creato diversi files e mostrato un paio di errori; questo perch\u00e9 manca ancora qualcosa. La tua cartella dovrebbe contenere questi files:
Potrebbero chiamarsi ServerConfig
, Server
e BeamMP-Server
senza estensioni, ma \u00e8 corretto anche questo!
Apri ServerConfig.toml
con un editor di testo come Blocco note
. Per fare ci\u00f2 click col tasto destro > Apri con > Blocco note o un qualsiasi altro editor di testo.
Dovresti vedere qualcosa di simile a questo:
[General]\nAuthKey = ''\nDebug = false\nDescription = 'BeamMP Default Description'\nMap = '/levels/gridmap_v2/info.json'\nMaxCars = 1\nMaxPlayers = 10\nName = 'BeamMP Server'\nPort = 30814\nPrivate = false\nResourceFolder = 'Resources'\n
Questo \u00e8 il tuo file di configurazione. Utilizza un formato chiamato TOML. Fai anche riferimento alla sezione di Manutenzione Server per maggiori informazioni.
Per ora ci interessa soltanto il campo AuthKey
. Incolla tra le virgolette ''
la chiave ottenuta nel passo \"2. Ottenere una chiave di autenticazione\".
Per questo esempio, dovr\u00e0 essere cos\u00ec:
AuthKey = '3173a2e-6az0-4542-a3p0-ddqq5ff95558'\n
Dai anche un nome al tuo server tramite il campo Name
. Puoi utilizzare colori e altri tipi di formattazione seguendo le indicazioni di questa sezione della pagina di manutenzione del server. Se hai scelto una porta differente da 30814 inseriscila al posto di quella predefinita in Port
.
IMPORTANTE: Il tuo server non sar\u00e0 visibile sulla lista di server fintanto che Private = true
. Se vuoi rendere visibile su tale lista il tuo server, metti Private = false
.
Avvia nuovamente il server e guarda se mostra altri messaggi con l'etichetta [ERROR]
. La finestra deve rimanere aperta. A questo punto puoi avviare BeamMP utilizzando il BeamMP-Launcher e dovresti trovare il tuo server con il nome specificato nel file ServerConfig.toml
nella lista dei server.
Sia le mod dei veicoli che una mappa mod, vanno inserite nella cartella Resources/Client
all'interno della cartella del server.
Se ti interessa aggiungere mod di veicoli, basta aggiungerle alla cartella Resources/Client
. Verranno scaricate automaticamente da chiunque si connetta al server.
Tutte le mappe ufficiali del gioco (quindi che non sono mod) non necessitano di essere installate, devi soltanto cambiare il valore del campo Map
del file ServerConfig.toml
con una di queste stringhe. Per mappe non ufficiali (mod), bisogna fare cos\u00ec:
.zip
della mappa nella cartella Resources/Client
all'interno della cartella del server..zip
della mappa senza estrarlo e naviga alla cartella /levels/
. In questa cartella ce ne dovrebbe essere un'altra con il nome della mappa, ad esempio myawesomedriftmap2021
. Copia o ricordati questo nome esattamente come \u00e8 scritto su tale cartella.ServerConfig.toml
. Nel campo Map
dovresti vedere il valore /levels/MAPNAME/info.json
, dove MAPNAME
\u00e8 molto probabilmente gridmap_v2
. Cambia MAPNAME
col nome della cartella del passo precedente, per questo esempio myawesomedriftmap2021
. Salvo rare eccezioni, tutte le mappe necessitano di avere /info.json
alla fine. Dovresti ottenere qualcosa di simile:Map = '/levels/myawesomedriftmap2021/info.json'\n
La mappa, come tutte le altre mod, verr\u00e0 scaricata automaticamente da chiunque si connetta al server.
Se la connessione non va a buon fine, installa la mappa in BeamNG.drive (non multigiocatore) e caricala. Quando sei in gioco, apri la console con il tasto \u00f2
(se non utilizzi il layout Italiano \u00e8 un tasto differente, guarda l'assegnazione di Toggle System Console in Options > Controls > Bindings nella sezione General Debug), ed esegui questo comando: print(getMissionFilename())
. Otterrai cos\u00ec il corretto nome da utilizzare.
Il tuo server con la mappa moddata \u00e8 pronto!
"},{"location":"it/server/create-a-server/#6-come-connettersi-a-un-server","title":"6. Come connettersi a un server","text":"Come tu e altre persone possono connettersi al tuo server.
"},{"location":"it/server/create-a-server/#6a-connettersi-al-proprio-server","title":"6.a. Connettersi al proprio server","text":"Se sei il proprietario del server devi connetterti tramite connessione diretta, per fare questo, clicca il pulsante Direct Connect a sinistra della lista dei server. Lascia i parametri predefiniti (IP 127.0.0.1
e porta 30814
) e clicca Connect
. Se il tuo server \u00e8 in esecuzione all'esterno della tua LAN devi prima trovare il suo IP e poi connetterti direttamente.
Avviare il server. Devi condividere l'indirizzo IP e la porta del tuo server alle persone che vuoi che si connettano. Presta attenzione a chi condividi il tuo indirizzo IP! Per connettersi a un server privato clicca il pulsante Direct Connect a sinistra della lista dei server, dopodich\u00e9 inserisci l'indirizzo IP e la porta del server.
"},{"location":"it/server/create-a-server/#6c-connessione-di-altre-persone-al-proprio-server-pubblico","title":"6.c. Connessione di altre persone al proprio server pubblico","text":"Per connettersi a un server pubblico basta andare sulla lista dei server, cercare il nome del server e cliccare Connect
. Se non sei sicuro del nome del server, \u00e8 lo stesso che hai messo nel file ServerConfig.toml
. Assicurarsi che i filtri di ricerca siano disabilitati e che la ricerca per mappa sia impostata su \"Any\". Puoi controllare il Keymaster per recuperare l'indirizzo IP.
Nel caso in cui si vede l'errore \"Connection Failed!\", controllare il launcher per dei codici come 10060, 10061, 10030. In questo caso siete sotto CGNAT o qualcosa \u00e8 andato storto nel passo 1. Port forwarding
o 1.1 Firewall
. Per controllare se si \u00e8 sotto CGNAT, confrontare l'indirizzo IP WAN dalla pagina del router con l'indirizzo IP visibile da whatsmyip.org. IPv6 non \u00e8 ancora supportato.
Solo le persone nel tuo network di Hamachi possono connettersi al tuo server, non \u00e8 necessario fare port forwarding in questo caso. Chi vuole connettersi, dopo essere entrato nel tuo network Hamachi, user\u00e0 l'IP di Hamachi e la porta predefinita per eseguire una connessione diretta al tuo server. Per maggiori informazioni guarda la nostra guida per gli utenti Hamachi.
"},{"location":"it/server/create-a-server/#hai-ancora-dei-problemi","title":"Hai ancora dei problemi?","text":"Apri un thread sul Forum o sul nostro server Discord nel canale #support
.
Questa pagina contiene tutti i possibili errori del server.
Codice Descrizione Soluzione possibile 10022 Problema di associazione porta Controlla se la porta in uso dal server \u00e8 gi\u00e0 occupata da altri servizi, se lo \u00e8 scegline un'altra. 10048 Indirizzo gi\u00e0 in uso Un altro server BeamMP o altro programma sta gi\u00e0 usando quella porta, scegline un'altra. 10051 Rete non raggiungibile Port forward non corretto o errori simili, controlla che sia tutto impostato correttamente. 10052 Reset della rete Capita quando la rete cade nel momento in cui si effettua una nuova connessione. Riprova a connetterti. 10053 Connessione interrotta Causata da un timeout o errore di rete, riprova a connetterti. 10054 Connessione reimpostata dal peer Un utente si \u00e8 disconnesso dal tuo server. 10060 Timeout della connessione Port forward non corretto, guarda la guida di installazione. 10061 Connessione rifiutata Port forward non corretto, guarda la guida di installazione. 10064 Host inattivo Errore non comune, significa che l'host \u00e8 inattivo perch\u00e9 \u00e8 spento o perch\u00e9 ha le porte chiuse. 10065 Host non raggiungibile Nessuna connessione ad internet oppure port forward non corretto, guarda la guida di installazione.Note
Altri codici non riportati in tabella sono disponibili qui https://learn.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2 se sai un po' come funzionano le reti e i socket.
"},{"location":"it/server/manual/","title":"Manuale d'uso del server","text":""},{"location":"it/server/manual/#contesto","title":"Contesto","text":"Il server \u00e8 influenzato dallo stato di diversi parametri esterni:
ServerConfig.toml
La cartella \"Resources\" \u00e8 creata al primo avvio del server, insieme alle sottocartelle \"Client\" e \"Server\". La cartella \"Server\" accetta altre cartelle al suo interno, ognuna contenente almeno un file .lua
. Ciascuna delle cartelle nella cartella \"Server\" \u00e8 considerato un \"Plugin\". I file .lua
contenuti nel livello di cartelle pi\u00f9 alto all'interno del plugin a seguito di una modifica sono ricaricati durante l'esecuzione. La cartella \"Client\" accetta solo file .zip
che sono caricati all'avvio del server e non mutano durante l'esecuzione.
Con la versione v3.2.0, il server BeamMP accetta variabili di contesto, che prevalgono sulle impostazioni contenute nel file ServerConfig.toml
. Tutte le variabili che esistono nella sezione \"General\" seguono la convenzione PascalCase, le variabili di contesto sono IN_MAIUSCOLO e con il prefisso BEAMMP_
. Per esempio il campo MaxPlayers
convertito IN_MAIUSCOLO diventa MAX_PLAYERS
(si noti il _
all'inizio di una nuova parola) e con il prefisso diventa BEAMMP_MAX_PLAYERS
. Questa formattazione \u00e8 seguita per tutte le impostazioni della sezione \"General\". Esistono le seguenti variabili 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
Qualsiasi variabile di contesto corrispondente a un parametro di configurazione che \u00e8 una stringa o un numero, deve essere una stringa, ad esempio BEAMMP_NAME=\"Cool Server\"
, BEAMMP_NAME=Server1
, BEAMMP_PORT=12345
. Le variabili di contesto che corrispondono a un parametro di configurazione che \u00e8 booleano (true/false, on/off) devono essere true
o 1
(entrambi significano ON), o qualsiasi altro valore (significa OFF).
Queste variabili di contesto permettono ai fornitori di host (e altri utenti con un gran numero di server), qui denominati \"providers\", di sovrascrivere alcune impostazioni specifiche per i provider.
"},{"location":"it/server/manual/#beammp_provider_port_env-da-v330","title":"BEAMMP_PROVIDER_PORT_ENV
(da v3.3.0)","text":"Quando non \u00e8 una stringa vuota, questa variabile rimpiazza BEAMMP_PORT
con un'altra in modo tale da poter leggere la variabile da un ENV esistente. Per esempio Pterodactyl pu\u00f2 esporre SERVER_PORT
come un ENV. Per usarla con il server BeamMP si dovrebbe scrivere BEAMMP_PORT=${SERVER_PORT}
, che \u00e8 macchinoso.
Ora invece si pu\u00f2 usare BEAMMP_PROVIDER_PORT_ENV=\"SERVER_PORT\"
, che fa leggere al server la porta dalla variabile ENV SERVER_PORT
.
BEAMMP_PROVIDER_DISABLE_CONFIG
(da v3.3.0)","text":"Se impostata a 1
oppure true
, il file ServerConfig.toml
non \u00e8 generato e non \u00e8 letto se esiste. La BEAMMP_AUTH_KEY
deve essere impostata per far funzionare il server.
BEAMMP_PROVIDER_UPDATE_MESSAGE
(da v3.2.2)","text":"Quando non \u00e8 una stringa vuota, questa variabile rimpiazza l'intero messaggio per l'aggiornamento, che di default \u00e8 \"NEW VERSION IS OUT! Please update to the new...\" ecc. \u00c8 OBBLIGATORIO che il tuo messaggio contenga da qualche parte {}
, che il server poi sostituir\u00e0 con il numero della nuova versione. Per esempio, il tuo messaggio per l'aggiornamento pu\u00f2 essere cos\u00ec:
BEAMMP_PROVIDER_UPDATE_MESSAGE=\"Una NUOVA VERSIONE di BeamMP-Server \u00e8 stata rilasciata: {}! Per favore segui questa guida per aggiornare: https://example.com/update-guide\"\n
Che risulter\u00e0 in un messaggio cos\u00ec: Una NUOVA VERSIONE di BeamMP-Server \u00e8 stata rilasciata: v5.0.2! Per favore segui questa guida per aggiornare: https://example.com/update-guide\n
Per favore assicurati di rendere chiaro agli utenti che devono aggiornare il server e spiega loro come farlo.
"},{"location":"it/server/manual/#argomenti-da-linea-di-comando","title":"Argomenti da linea di comando","text":"Avvia il server BeamMP con l'argomento --help
per scoprirne di pi\u00f9. Ad esempio: ./BeamMP-Server --help
.
Questo file \u00e8 generato al primo avvio. I commenti all'interno del file sono il modo migliore e pi\u00f9 aggiornato per capire che cosa faccia ogni impostazione.
"},{"location":"it/server/manual/#cartella-di-lavoro","title":"Cartella di lavoro","text":"La cartella di lavoro del server, e non la posizione dell'eseguibile del server, \u00e8 il fattore decisivo per la generazione di ServerConfig.toml
, dei file di log e della cartella \"Resources\".
Le seguenti limitazioni sono imposte dal backend e riguardano il server:
Guide e suggerimenti per come configurare e mantenere al meglio il Server BeamMP.
"},{"location":"it/server/server-maintenance/#come-installare","title":"Come installare","text":"Per delle istruzioni dettagliate, per favore guarda la nostra guida.
"},{"location":"it/server/server-maintenance/#il-file-serverconfig","title":"Il file ServerConfig","text":"Il file per la configurazione del server, chiamato ServerConfig.toml
, \u00e8 in formato TOML.
NOTA: Il vecchio file di configurazione chiamato Server.cfg
, non \u00e8 pi\u00f9 utilizzato e il server ti avviser\u00e0 nel caso sia ancora presente. I due formati di configurazione non sono compatibili tra loro.
Il file ha una sezione di default chiamata [General]
, che contiene i seguenti valori:
xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
dove le x sono caratteri alfanumerici (numeri e lettere) Usato per identificare il tuo server nel backend. Dovresti averne una avendo seguito la guida di installazione del server. Debug true /false Quando \u00e8 abilitato (true) mostrer\u00e0 diversi messaggi in pi\u00f9 nei log e fornir\u00e0 pi\u00f9 informazioni. Abilita questo valore se incontri dei problemi. Abilitare questo valore far\u00e0 aumentare la dimensione del file di log. Private true/false Quando \u00e8 abilitato (true) il tuo server non sar\u00e0 visibile nella lista pubblica dei server. Le persone con l'IP e la porta del server potranno per\u00f2 connettersi. Description Qualunque \"testo\" La descrizione del server sar\u00e0 visibile a tutti (se il server \u00e8 pubblico). Puoi usare caratteri speciali per formattare il testo con diversi colori e stili. Name Qualunque \"testo\" Il nome / titolo del tuo server che apparir\u00e0 nella lista dei server. Puoi usare caratteri speciali per formattare il testo con diversi colori e stili. Map Una posizione valida della mappa, come /levels/gridmap_v2/info.json
La mappa del tuo server. Pu\u00f2 essere una delle mappe predefinite del gioco (una lista di tali mappe \u00e8 presente qui sotto) o come una mod del server. MaxCars Qualunque numero \u2265 1 Il numero massimo di veicoli per giocatore. Ulteriori veicoli che un giocatore prover\u00e0 a caricare saranno rimossi immediatamente. Port 1024-65535 La porta sulla quale il server sar\u00e0 raggiungibile. Un giocatore che volesse connettersi direttamente al tuo server necessiter\u00e0 del tuo IP e di questa porta. Altre sezioni possono e devono essere usate dai plugin del server (la API Lua \u00e8 in arrivo), cos\u00ec: [MyMod]
.
La AuthKey DEVE essere impostata da te. Di base sar\u00e0 un valore vuoto che dovr\u00e0 essere riempito con con la tua AuthKey ottenuta seguendo la guida di installazione. Non condividere questa chiave con nessuno e negli screenshot offuscala.
"},{"location":"it/server/server-maintenance/#tutti-i-nomi-delle-mappe-vanilla","title":"Tutti i nomi delle mappe vanilla","text":"Di seguito ci sono tutte le mappe vanilla:
Puoi usare questi simboli prima del tuo testo per applicarci un effetto:
Valore Descrizione^r
Reset ^p
A capo (solo per le descrizioni) ^n
Sottolineato ^l
Grassetto ^m
Barrato ^o
Corsivo (italico) ^0
Nero ^1
Blu ^2
Verde ^3
Turchese ^4
Rosso ^5
Rosa ^6
Arancione ^7
Grigio ^8
Grigio scuro ^9
Viola chiaro ^a
Verde chiaro ^b
Azzurro ^c
Arancione scuro ^d
Rosa chiaro ^e
Giallo ^f
Bianco"},{"location":"it/server/server-maintenance/#personalizza-i-tag-del-server","title":"Personalizza i tag del server","text":"Le etichette del server possono aiutare le persone a filtrare la ricerca per un tipo specifico di server. Il tuo file serverConfig.toml generer\u00e0 in automatico l'etichetta Tags = \"Freeroam\"
.
Puoi aggiungere ulteriori etichette separandole con una virgola Tags = \"Events,Offroad,lang:english\"
, non c'\u00e8 differenza tra maiuscole o minuscole.
Puoi scegliere tra le seguenti etichette:
Et\u00e0/Contenuto:
Mature/18+
Tipo di gameplay:
Freeroam
Roleplay
Economy
Traffic
Categorie di corse:
Racing
Racing:NASCAR
Racing:Track
Racing:Drag
Racing:Rally
Touge
Fuori strada e sfide:
Offroad
Crawling
Dakar
Challenge
Demolition derby:
Derby
Arena
Condizioni meteo e orario:
Snow/Ice
Rain
Night
Weather
Modalit\u00e0 di gioco:
Gamemode
Gamemode:Racing
Gamemode:Rally
Gamemode:Drag
Gamemode:Derby
Gamemode:Infection
Gamemode:Cops-Robbers
Gamemode:Delivery
Gamemode:Sumo
Comunit\u00e0 ed eventi:
Scenarios
Events
Leaderboard
Mod:
Modded
Mod:BeamPaint
Mod:BeamJoy
Mod:CEI
Lingua:
Lang:English
Lang:Russian
Lang:French
Lang:Spanish
Lang:Portuguese
Lang:German
Lang:Polish
Lang:Arabic
Altro:
Vanilla
Moderated
Se manca qualche etichetta da questa lista, siete pregati di creare una richiesta per aggiungerla qui.
"},{"location":"it/server/server-maintenance/#il-file-serverlog","title":"Il file Server.log","text":"Questo file \u00e8 generato automaticamente quando il server \u00e8 avviato. Contiene tutti i messaggi visualizzati nella console del server. \u00c8 buona norma allegare questo file nel caso chiedessi aiuto al nostro staff di supporto; in questo file non \u00e8 mai presente la tua AuthKey quindi puoi inviarlo senza alcuna modifica.
Il formato dei messaggi \u00e8 spiegato di seguito:
[$DATA $ORA] $CONTESTO [$LIVELLO_DI_LOG] $MESSAGGIO\n
Dove:
$DATA
\u00e8 la data del messaggio, per esempio 21/07/2021$ORA
\u00e8 l'ora del messaggio, per esempio 11:05:23$CONTESTO
(visibile soltanto se la variabile Debug \u00e8 abilitata) \u00e8 il contesto del messaggio che pu\u00f2 essere:(ID giocatore) \u201cNome Giocatore\u201d
, dove l'ID del giocatore \u00e8 utile per la moderazione$LIVELLO_DI_LOG
\u00e8 il livello di importanza del messaggio:DEBUG
: Visibile solo se la variabile Debug \u00e8 abilitata, importante solo per gli sviluppatoriINFO
: Informazioni generaliLUA
: Messaggio da un plugin LuaWARN
: Descrive qualcosa che di solito non dovrebbe accadereERROR
: Descrive qualcosa che \u00e8 andato storto, o un imprevistoFATAL
: Descrive qualcosa che ha causato l'arresto del server$MESSAGGIO
il messaggio in se al quale devi prestare attenzione e capire. In alcuni casi il messaggio pu\u00f2 essere criptico, ma in generale se il server funziona e non ci sono messaggi ERROR, non ci sono problemi.Quando un aggiornamento \u00e8 rilasciato, \u00e8 sempre consigliato aggiornare il server. Di solito le nuove versioni portano risoluzioni di bug, maggiore stabilit\u00e0 e correzioni di sicurezza senza dimenticare nuove funzionalit\u00e0.
Per rimanere aggiornato sulle nuove versioni, puoi seguire il canale \"updates\" sul nostro Discord, guardare sul nostro forum o guardare la pagina delle release di GitHub.
"},{"location":"it/server/server-maintenance/#come-aggiornare","title":"Come aggiornare","text":""},{"location":"it/server/server-maintenance/#se-stai-usando-un-fornitore-di-hosting-partner","title":"Se stai usando un fornitore di hosting partner","text":"Se stai usando un fornitore di hosting partner, le seguenti istruzioni non funzioneranno. Si consiglia di attendere ulteriori dettagli dal proprio fornitore di hosting o di contattarlo per ricevere assistenza.
"},{"location":"it/server/server-maintenance/#gestire-il-server-autonomamente","title":"Gestire il server autonomamente","text":"Il server \u00e8 aggiornabile cambiando l'eseguibile vecchio del server con quello nuovo. Se non sai come farlo, di seguito troverai le istruzioni.
Se hai compilato i file sorgente, ri-compila di nuovo i file. Prima di ri-compilare i file esegui git submodule update --init --recursive
in un terminale.
BeamMP-Server.exe
.BeamMP-Server.exe
(normalmente la stessa cartella con ServerConfig.toml
). Chiameremo questo eseguibile \"vecchio eseguibile\".BeamMP-Server-xxx
durante la guida, dove xxx
\u00e8 la versione per la distribuzione che stai usando.BeamMP-Server-xxx
(normalmente la stessa cartella con ServerConfig.toml
). Chiameremo questo eseguibile \"vecchio eseguibile\".BeamMP-Server-xxx
e incolla il comando chmod +x BeamMP-Server-xxx
. Questo far\u00e0 in modo che si abbiano i permessi per eseguire il server.Il server non supporta (ancora) gli aggiornamenti automatici.
Puoi per\u00f2 vedere quale sia l'ultima versione disponibile tramite la API di GitHub, con una richiesta GET da https://api.github.com/repos/BeamMP/BeamMP-Server/git/refs/tags
.
Questa pagina contiene tutti i possibili errori del launcher.
Codice Descrizione Soluzione possibile 10054 Connessione reimpostata dal peer Il server al quale ti stai connettendo \u00e8 andato offline. Bloccato sugli aggiornamenti Il launcher \u00e8 bloccato agli aggiornamenti e non procede al passo successivo Esegui il launcher come amministratore e controlla le regole del tuo antivirus affinch\u00e9 il launcher non sia bloccato. Failed to find the game please launch it. Report this if the issue persists code 3. Il launcher non \u00e8 stato in grado di trovare le informazioni del gioco (cartella del gioco, cartella del profilo, versione, ecc...) nel registro di sistema Avvia il gioco almeno una volta per creare i valori nel registro. Failed to find the game please launch it. Report this if the issue persists code 4. Il launcher non \u00e8 stato in grado di leggere le informazioni del gioco (cartella del gioco, cartella del profilo, versione, ecc...) nel registro di sistema Questo errore \u00e8 mostrato per la maggior parte a utenti che hanno una copia pirata del gioco. Se hai acquistato il gioco, avvialo almeno una volta per creare i valori nel registro. Failed to Launch the game! launcher closing soon Il launcher non \u00e8 stato in grado di trovare l'eseguibile del gioco Avvia il gioco almeno una volta ed esegui di nuovo il launcher. Game Closed! launcher closing soon Il gioco \u00e8 stato chiuso Questo messaggio appare alla chiusura del gioco o quando il gioco non si \u00e8 avviato correttamente. Launcher Update failed! Il launcher non \u00e8 stato in grado di scaricare una nuova versione Controlla la tua connessione ad internet e le regole del tuo firewall / antivirus affinch\u00e9 il launcher non sia bloccato. Logger file init failed Il launcher non ha i permessi per creare file Esegui il launcher come amministratore. Please close the game and try again Il gioco \u00e8 gi\u00e0 aperto e il launcher non riesce a liberare la cartellamultiplayer/mods
Chiudi il gioco e riprova. Please launch the game at least once Il launcher ha provato e ha fallito a modificare la cartella del gioco Avvia il gioco almeno una volta ed esegui di nuovo il launcher. Primary Servers Offline! sorry for the inconvenience! Il launcher non \u00e8 stato in grado di controllare gli aggiornamenti Controlla la tua connessione ad internet e le regole del firewall. Se non ci sono errori dalla tua parte, guarda il canale BeamMP updates sul nostro Discord. Sorry Backend System Outage! Don't worry it will back on soon! Il backend BeamMP \u00e8 irraggiungibile Controlla la tua connessione ad internet e le regole del firewall. Se non ci sono errori dalla tua parte, guarda il canale BeamMP updates sul nostro Discord. Se il launcher si chiude immediatamente, controlla il file Launcher.log
nella cartella dove hai installato BeamMP.
Una lista di domande frequenti e bug noti.
"},{"location":"it/support/game-faq/#client","title":"Client","text":""},{"location":"it/support/game-faq/#come-si-installa-beammp","title":"Come si installa BeamMP?","text":"C'\u00e8 una guida per installare BeamMP, la puoi trovare qui.
"},{"location":"it/support/game-faq/#beammp-funziona-su-versioni-piratate-del-gioco","title":"BeamMP funziona su versioni piratate del gioco?","text":"Le versioni piratate o non aggiornate di BeamNG.drive non sono supportate. Se vuoi usare BeamMP, acquista il gioco.
"},{"location":"it/support/game-faq/#beammp-funziona-su-linux","title":"BeamMP funziona su Linux?","text":"Il client non \u00e8 ufficialmente supportato su Linux, ma dovrebbe comunque funzionare tramite wine
o utilizzando lo stesso prefisso del gioco tramite proton
.
Il launcher \u00e8 segnalato come falso positivo perch\u00e9 non \u00e8 stato firmato con delle licenze specifiche che, essendo molto costose, non sono state acquistate.
Non c'\u00e8 alcun codice malevolo in BeamMP; tutto il codice per il server, launcher e il client Lua \u00e8 disponibile sul nostro GitHub.
"},{"location":"it/support/game-faq/#le-prestazioni-del-gioco-sono-basse-cosa-posso-fare","title":"Le prestazioni del gioco sono basse, cosa posso fare?","text":"Stiamo lavorando il pi\u00f9 possibile per garantire prestazioni stabili a tutti. Se hai gi\u00e0 abbassato le impostazioni grafiche, purtroppo non c'\u00e8 molto che puoi fare se non giocare con un numero minore di persone. Il gioco \u00e8 strettamente legato alla potenza e al numero di core della CPU, quindi con processori pi\u00f9 vecchi (anche con quattro core) avrai difficolt\u00e0 ad avere buone prestazioni con pi\u00f9 di una manciata di giocatori.
"},{"location":"it/support/game-faq/#varie-ed-eventuali","title":"Varie ed eventuali","text":""},{"location":"it/support/game-faq/#dove-posso-trovare-il-codice","title":"Dove posso trovare il codice?","text":"Tutto il codice sorgente \u00e8 disponibile su GitHub. Prima di modificare il codice, ricordati che \u00e8 soggetto ai nostri termini di utilizzo e con le seguenti licenze:
Codice Licenza Server LICENSE Launcher LICENSE Client Lua LICENSE"},{"location":"it/support/game-faq/#ho-trovato-un-bug-o-un-exploit-cosa-faccio","title":"Ho trovato un bug o un exploit cosa faccio?","text":"Se il problema \u00e8 legato al codice e sai come usare GitHub, crea una nuova \"Issue\" nel repo corretto sul nostro GitHub. Il nostro flusso di lavoro \u00e8 basato sulle \"Issue\" di GitHub; anche se hai gi\u00e0 una soluzione al bug, sei pregato di creare una nuova \"Issue\" e poi chiedere una \"Pull Request\" che risolva la \"Issue\". Maggiori informazioni qui.
Nel caso non abbia o non sappia usare GitHub, puoi procedere nei seguenti modi:
Puoi collegare il tuo account Discord a BeamMP mandando il messaggio !link
al bot BeamMP Accounts. Il bot ti risponder\u00e0 con un link dove potrai fare login con il tuo account BeamMP. Una volta effettuato il login riceverai un secondo messaggio di conferma del collegamento.
L'early access (che include la tag in gioco viola e altri vantaggi), si pu\u00f2 ottenere facendo server boost al nostro server Discord, oppure supportandoci su Patreon.
"},{"location":"it/support/player-faq/#ho-supportato-tramite-patreon-come-ottengo-i-benefici","title":"Ho supportato tramite Patreon, come ottengo i benefici?","text":"Effettua le seguenti operazioni per ottenere automaticamente i vantaggi dell'early access:
Potrebbero volerci fino a 4 ore per la sincronizzazione tra Patreon e BeamMP. Se dopo 12 ore non hai ancora ottenuto i benefici di Patreon e hai correttamente effettuato i passi precedenti, contatta il supporto di BeamMP.
"},{"location":"it/support/player-faq/#ho-altre-domande","title":"Ho altre domande","text":"Se la tua domanda o problema riguarda il gioco o come giocare, guarda le FAQ del gioco. Se la tua domanda o problema riguarda la gestione del server, guarda le FAQ del server. In alternativa puoi consultare il nostro forum dove puoi trovare domande e risposte dalla comunit\u00e0.
"},{"location":"it/support/server-faq/","title":"F.A.Q. e problemi noti","text":"Una lista di domande frequenti e bug noti.
"},{"location":"it/support/server-faq/#server","title":"Server","text":""},{"location":"it/support/server-faq/#come-posso-creare-un-server","title":"Come posso creare un server?","text":"Tutte le informazioni per creare un server sono contenute in questa guida.
"},{"location":"it/support/server-faq/#posso-creare-un-server-su-linux","title":"Posso creare un server su Linux?","text":"Offriamo i binari pre-compilati per diverse distribuzioni Linux qui. Nel caso la tua distribuzione non fosse presente, puoi compilare i file sorgente scaricando il codice dal nostro GitHub, una guida si pu\u00f2 trovare qui.
"},{"location":"it/support/server-faq/#quali-sono-i-requisiti-di-sistema-necessari-per-il-server","title":"Quali sono i requisiti di sistema necessari per il server?","text":"Leggi il passo 1. Port Forwarding
della nostra guida disponibile qui. Di seguito c'\u00e8 un breve riassunto dei punti salienti. Se giocatori esterni alla tua LAN non riescono a connettersi e ricevono sul launcher codici di errore come 10060, 10061 o 10038, segui questi passi:
ServerConfig.toml
(quella predefinita \u00e8 30814), sia con protocollo TCP sia UDP;Puoi vedere se la porta \u00e8 aperta correttamente usando un sito come 'portchecker.co' mentre il server \u00e8 attivo.
Note:
Leggi questa sezione della nostra guida. Se non vuoi usare il pulsante Direct Connect
e vuoi connetterti tramite la lista dei server al tuo server, il tuo router deve supportare il NAT-loopback, che di solito non \u00e8 supportato dai router domestici.
Tutto il codice sorgente \u00e8 disponibile su GitHub. Prima di modificare il codice, ricordati che \u00e8 soggetto ai nostri termini di utilizzo e con le seguenti licenze:
Codice Licenza Server LICENSE Launcher LICENSE Client Lua LICENSE"},{"location":"it/support/server-faq/#ho-trovato-un-bug-o-un-exploit-cosa-faccio","title":"Ho trovato un bug o un exploit cosa faccio?","text":"Se il problema \u00e8 legato al codice e sai come usare GitHub, crea una nuova \"Issue\" nel repo corretto sul nostro GitHub. Il nostro flusso di lavoro \u00e8 basato sulle \"Issue\" di GitHub; anche se hai gi\u00e0 una soluzione al bug, sei pregato di creare una nuova \"Issue\" e poi chiedere una \"Pull Request\" che risolva la \"Issue\". Maggiori informazioni qui.
Nel caso non abbia o non sappia usare GitHub, puoi procedere nei seguenti modi:
\u042d\u0442\u043e\u0442 \u0441\u0430\u0439\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0434\u0438\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438!
\u041d\u0430\u0434 \u044d\u0442\u0438\u043c \u0441\u0430\u0439\u0442\u043e\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430.
\u0412\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043c\u043e\u0447\u044c? \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u043a\u0430\u0440\u0430\u043d\u0434\u0430\u0448\u043e\u043c \u0441\u043f\u0440\u0430\u0432\u0430!
\u042d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435.
"},{"location":"ru/#beammp-docs","title":"\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 BeamMP Docs!","text":"\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u043e\u0432\u044b\u0439 \u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u044b\u0439 \u0446\u0435\u043d\u0442\u0440 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0434\u043b\u044f BeamMP! \u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u044f\u0432\u043b\u044f\u0435\u0442\u0435\u0441\u044c \u043b\u0438 \u0432\u044b \u0438\u0433\u0440\u043e\u043a\u043e\u043c, \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0447\u0442\u043e\u0431\u044b \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0432\u0430\u0448 \u043e\u043f\u044b\u0442 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0438\u0433\u0440\u044b \u0432 BeamNG.drive.
"},{"location":"ru/#_1","title":"\u0414\u043b\u044f \u0418\u0433\u0440\u043e\u043a\u043e\u0432","text":"\u041d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 BeamMP? \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u043d\u0430\u0448\u0438\u043c \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c \u043f\u043e \u041d\u0430\u0447\u0430\u043b\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u0430\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u044f \u043e\u0442 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439.
"},{"location":"ru/#_2","title":"\u0414\u043b\u044f \u0412\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u0432 \u0421\u0435\u0440\u0432\u0435\u0440\u043e\u0432","text":"\u0425\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 BeamMP? \u041d\u0430\u0448\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u0442 \u0432\u0430\u0441 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0432\u0430\u0441 \u0432\u0441\u0435\u043c\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u0437\u043d\u0430\u043d\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.
"},{"location":"ru/#_3","title":"\u0414\u043b\u044f \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432","text":"\u0423\u0437\u043d\u0430\u0439\u0442\u0435 \u0432\u0441\u0435 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 BeamMP \u0432 \u043d\u0430\u0448\u0435\u043c \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u043f\u043e \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0420\u0435\u0441\u0443\u0440\u0441\u043e\u0432.
\u041c\u044b \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0434\u043b\u044f \u0432\u0430\u0441 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043d\u043e\u0432\u0443\u044e \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043e\u043f\u044b\u0442\u0430 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430. \u0421\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u044f\u043c\u0438!
"},{"location":"ru/FAQ/How-to-check-for-CGNAT/","title":"\u041a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 CGNAT?","text":"How to check for CGNAT?
"},{"location":"ru/FAQ/How-to-deactivate-mods/","title":"\u041a\u0430\u043a \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434?","text":""},{"location":"","title":"Home","text":"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 on any page, too.
"},{"location":"#welcome-to-beammp-docs","title":"Welcome to BeamMP Docs!","text":"Welcome to the new and improved documentation hub for BeamMP! Whether you're a player, server owner, or developer, we have the resources you need to enhance your BeamNG.drive multiplayer experience.
"},{"location":"#for-players","title":"For Players","text":"New to BeamMP? Check out our Getting Started page to help you hit the road running and make the most out of your multiplayer adventures. For general questions and issues please check out the Players FAQ.
"},{"location":"#for-server-owners","title":"For Server Owners","text":"Thinking about creating your own BeamMP server? Our comprehensive guide here will walk you through the process, ensuring you have all the tools and knowledge to set up your server efficiently.
"},{"location":"#for-developers","title":"For Developers","text":"Discover the ins and outs of creating resources for the BeamMP Server in our Resource Development Guide.
Exciting updates are on the horizon, including a brand-new homepage designed to enhance your browsing experience. Stay tuned for more!
"},{"location":"#community-rules","title":"Community Rules","text":"Read through the BeamMP Community rules and how to appeal bans.
"},{"location":"contributing/","title":"Contributing to the BeamMP Docs","text":"BeamMP is using Material for MkDocs as its theme. This is a theme for MkDocs. Full documentation can be found at their respective sites.
"},{"location":"contributing/#getting-started","title":"Getting Started","text":"To help contribute to these docs you can take one of two approaches as set out below:
"},{"location":"contributing/#1-edit-the-raw-markdown-files","title":"1. Edit the raw markdown files","text":"Editing the raw markdown files is the fastest approach and best for quick edits such as spelling, grammar or new snippets of content. This approach does require a prior knowledge of markdown however as you will need to understand what your contribution will produce.
If this is the approach you wish to take then please follow these steps:
Once you have created your pull request one of the BeamMP Mod Team will review your Pull Request and either approve it or request some changes. If changes were requested and you have completed them we will re-review your Pull Request. Then your changes will be merged into the repository and automatically deployed as part of our continuous integration.
"},{"location":"contributing/#2-make-edits-with-live-preview","title":"2. Make edits with live preview","text":"Editing our docs this way will still take a similar approach as in option 1 however you will be able to preview your changes this way.
mkdocs serve
to start the live-reloading docs server from where you cloned the fork to.mkdocs.yml # The configuration file.\ndocs/\n index.md # The documentation homepage.\n ... # Other markdown pages, images and other files.\n
"},{"location":"FAQ/Change-launcher-port/","title":"Issue","text":"The Launcher is not connecting to the game. This quick guide explains how to manually change the launcher port.
"},{"location":"FAQ/Change-launcher-port/#changing-the-port-manually","title":"Changing the port manually","text":"Show advanced options
Launcher port
change the port number to something else, for example 4567Open file location
in the context menulauncher.cfg
file in a text editor\"Port\": 4444,
number to the same you used earlier in the ingame options, in this example 4567If theres still no connection, try again with another port. Any number between ~2000 and 65535 is a valid port
"},{"location":"FAQ/Change-launcher-port/#still-facing-issue","title":"Still facing issue?","text":"Create a support ticket on our Discord Server.
Tags: Launcher, Connection Failed, Port Number
"},{"location":"FAQ/Defender-exclusions/","title":"How to create exclusions in the Windows Defender Firewall and Antivirus?","text":"Info
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).
DISCLAIMER:
Firewall / Defender exclsuions are a risk.
By creating exclsuions, you understand the risks of allowing programs on your PC and opening up ports on your home network to the public and therefore void the right to hold BeamMP accountable for any and all damages that may happen to you or your household.
We take no responsibility for any content on any externally linked services or websites.
"},{"location":"FAQ/Defender-exclusions/#1-firewall-exclusion-for-the-beammp-launcher","title":"1. Firewall exclusion for the BeamMP-Launcher.","text":"Windows Defender Firewall with advanced setting
.Inbound
to open the inbound exclusions tab.Create new rule
in the top right to create a new exclusion.Program
to create a program specific exclusion.BeamMP-Launcher.exe
. By default, this would be %appdata%\\BeamMP-Launcher\\BeamMP-Launcher.exe
without quotes.Windows Security
app.virus and threat protection
.Manage settings
beneath \"Virus & threat protection settings\".Exclusions
tab.process
.BeamMP-Launcher.exe
into the field and save it.Open a Thread on the Forum or on our Discord server in the #support
channel.
How to check for CGNAT?
"},{"location":"FAQ/How-to-check-for-CGNAT/#issue","title":"Issue","text":"All Firewall exclusions and Port forwarding rules are set up correctly, yet nobody can join your home-hosted Server?
If you have connection problems and you are using a Hosting-Service, contact them for assistance. If you want to use a VPS or cannot host a server at home, take a look at our list of Partnered hosting services (Server setup documentation).
"},{"location":"FAQ/How-to-check-for-CGNAT/#what-even-is-cgnat","title":"What even is CGNAT?","text":"For a detailed explanation, on what CGNAT is and why it's an issue when trying to host a server at home, take a look at this page.
"},{"location":"FAQ/How-to-check-for-CGNAT/#how-to-check-for-cgnat","title":"How to check for CGNAT?","text":""},{"location":"FAQ/How-to-check-for-CGNAT/#method-1","title":"Method 1:","text":"Open a command prompt, run tracert -4 beammp.com
. This will output a series of network hops. Wait for the operation to finish (may take up to 30 hops). Check the first few IP addresses after the IP of your Router/Modem/Gateway. If multiple IP addresses within the range of 100.64.x.x
-100.127.x.x
or 10.xx.xx.xx
appear after the first hop, you are most likely behind a CGNAT.
Note
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
Find out the WAN IP on your router by looking it up on its interface. Compare it to the IP posted on e.g. https://whatsmyip.org . If they are NOT the same, you are behind a CGNAT.
"},{"location":"FAQ/How-to-check-for-CGNAT/#method-3solution","title":"Method 3/Solution:","text":"Call your Internet Service Provider for assistance. Depending on your ISP, they might not offer dedicated dynamic IP adresses. Keep in mind, that a static IP is not necessary.
Warning
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!
Example of a non-CGNAT Network:
Tags: Server, 10060 10061, CGNAT, Connection Failed, Port Forward, Firewall
"},{"location":"FAQ/How-to-deactivate-mods/","title":"How to deactivate my mods?","text":""},{"location":"FAQ/How-to-deactivate-mods/#why-do-i-need-to-deactivate-my-mods","title":"Why do I need to deactivate my mods?","text":"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.
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.
"},{"location":"FAQ/How-to-deactivate-mods/#how-do-i-deactivateremove-my-mods","title":"How do I deactivate/remove my mods?","text":"There are 3 options to resolve possible issues when using BeamMP.
"},{"location":"FAQ/How-to-deactivate-mods/#1-deactivate-mods","title":"1. Deactivate mods","text":"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
"},{"location":"FAQ/How-to-deactivate-mods/#2-creating-a-new-userfolder","title":"2. Creating a new Userfolder","text":"Open the BeamNG.Drive userfolder and rename the folder of the latest version (e.g. 0.35) to for example 0.xx_OLD (0.35_OLD). Close BeamNG.drive before renaming it.
"},{"location":"FAQ/How-to-deactivate-mods/#3-removing-mods-from-the-content-folders","title":"3. Removing mods from the content folders.","text":"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.
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.
"},{"location":"FAQ/How-to-deactivate-mods/#4-cleaning-up-the-beammp-launcher-cache","title":"4. Cleaning up the BeamMP-Launcher cache","text":"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.
My settings and configs are gone! How can I restore them?
If you renamed the userfolder, you forced the game to create a new, clean userfolder. You may copy the 'settings' and 'vehicles' folder from the folder you renamed (e.g. 0.34_OLD) to the new folder it created. 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.
"},{"location":"FAQ/Update-launcher/","title":"Issue","text":"The Launcher can't update or shows a blank screen? This quick guide explains how to manually update the Launcher.
Note
You should have already used or installed BeamMP using the installer provided by our website before continuing.
"},{"location":"FAQ/Update-launcher/#downloading-and-installing-a-new-launcher","title":"Downloading and installing a new Launcher","text":"C:\\Users\\<username>\\AppData\\Roaming\\
. Replace with the username of your windows user. If you have installed BeamMP elsewhere, for example D:\\BeamMP-Launcher
, then place the Launcher in the respective BeamMP-Launcher folder. Create a support ticket on our Discord Server. Tags: Launcher, download,
"},{"location":"FAQ/game-faq/","title":"F.A.Q.","text":"List of commonly asked questions.
"},{"location":"FAQ/game-faq/#client","title":"Client","text":""},{"location":"FAQ/game-faq/#how-do-i-install-beammp","title":"How do I install BeamMP?","text":"There is a full guide on how to install BeamMP on Windows, you can find it here.
"},{"location":"FAQ/game-faq/#does-beammp-work-on-a-cracked-version-of-beamng","title":"Does BeamMP work on a cracked version of BeamNG?","text":"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.
"},{"location":"FAQ/game-faq/#does-beammp-work-on-linux","title":"Does BeamMP work on linux?","text":"The Client is not officially supported on Linux. However, you can follow our guide on how to use BeamMP on Linux
"},{"location":"FAQ/game-faq/#why-is-the-launcher-flagged-by-my-antivirus-or-by-windows-defender","title":"Why is the launcher flagged by my antivirus or by Windows Defender","text":"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.
"},{"location":"FAQ/game-faq/#i-have-poor-gameplay-performance-what-should-i-do","title":"I have poor gameplay performance, what should I do?","text":"We are working hard to make the Multiplayer experience as stable as possible. If you have already lowered your graphic settings and your performance is still poor, consider playing on a server with less players. The game is mainly CPU bound when you play with lots of people, so older CPUs (even quadcores) will suffer with more than a handful of people. (General Rule of Thumb: 1 car per CPU Thread)
"},{"location":"FAQ/game-faq/#miscellaneous","title":"Miscellaneous","text":""},{"location":"FAQ/game-faq/#where-can-i-find-the-code","title":"Where can I find the code?","text":"All the source code can be found on our GitHub. Before making any changes, keep in mind that the code is subject to our Terms of Use and licenses:
Code License Server LICENSE Launcher LICENSE Client Lua LICENSE"},{"location":"FAQ/game-faq/#i-have-found-a-bug-or-an-exploit-what-should-i-do","title":"I have found a bug or an exploit what should I do?","text":"If the issue is code related and you know how to use Github, open a new \"Issue\" in the appropriate repository on our GitHub. We use an issue-based workflow so even if you already have a fix for the bug, consider opening a new \"Issue\", then open a \"Pull Request\" with the solutions for the issue. More info on contributing can be found here.
If you don't have a GitHub account or you don't know how to use GitHub or have any other questions, you can get in touch with us in the following ways:
Linking your Discord and BeamMP account is a new feature to BeamMP. To do this you will need send !link
as a message to the BeamMP Accounts bot. The bot will respond with a link for you to sign into your BeamMP account. Simply sign in with your BeamMP account, once done you will receive a second message saying that it has successfully linked your accounts. \ud83c\udf89
Early access (including the purple nametag and other benefits) can be obtained by supporting us financially on Patreon by buying a tier, donating, or by boosting the Discord Server. Donating x amount US$ = x additional server key(s) including EA benefits. Boosting gives you +4 Server keys in addition to EA benefits.
"},{"location":"FAQ/player-faq/#i-subscribed-on-patreon-how-do-i-get-my-perks","title":"I subscribed on Patreon. How do I get my perks?","text":"Please ensure you do the following to automatically receive your perks:
Please be patient, it can take a few hours, sometimes up to 12, for the system to sync. If you have not received your perks after 12 hours and have completed the above steps please contact BeamMP support.
"},{"location":"FAQ/player-faq/#i-have-more-questions","title":"I have more questions!","text":"If your question or issue relates to the Game or playing please refer to the Game FAQs. If your question or issue relates to running a Server please refer to the Server FAQs. Otherwise please check out the forums where the community can ask questions and get answers.
"},{"location":"FAQ/server-faq/","title":"F.A.Q. and Known Issues","text":"List of commonly asked questions and known bugs.
"},{"location":"FAQ/server-faq/#server","title":"Server","text":""},{"location":"FAQ/server-faq/#how-can-i-setup-my-own-servers","title":"How can I setup my own servers","text":"All the information to set up your own server can be found here.
"},{"location":"FAQ/server-faq/#can-you-make-a-server-using-linux","title":"Can you make a server using linux?","text":"We provide binaries for many Linux distributions here. If there are no binaries for your Operating System/Distribution, you can build it yourself by downloading the source on our GitHub, a tutorial can be found here.
"},{"location":"FAQ/server-faq/#what-are-the-minimum-system-requirements-to-run-a-beammp-server","title":"What are the minimum system requirements to run a BeamMP server?","text":"Read the port forwarding guide that's available here. Below there's a brief summary of the most noteworthy steps. If other players, trying to connect to your server, receive an error code 10060, 10061 or 10038 in their BeamMP launcher, then you should check the following steps:
You can check if you have successfully portforwarded using CheckBeamMP whilst the server is running.
IP adress: Port:Notes:
If the server is running on the same machine as the game, you yourself have to use Direct Connect to join, with the IP 127.0.0.1 and your server's port. For you to be able to join your own, self-hosted server trough the server-list, your router needs to support NAT-loopback, but this is a function not many home routers support.
"},{"location":"FAQ/server-faq/#miscellaneous","title":"Miscellaneous","text":""},{"location":"FAQ/server-faq/#where-can-i-find-the-code","title":"Where can I find the code?","text":"All the source code can be found on our GitHub. Before doing anything keep in mind that the code is subject to our Terms of Use and licenses:
Code License Server LICENSE Launcher LICENSE Client Lua LICENSE"},{"location":"FAQ/server-faq/#i-have-found-a-bug-or-an-exploit-what-should-i-do","title":"I have found a bug or an exploit what should I do?","text":"If the issue is code related and you know how to use Github, create a new \"Issue\" in the appropriate repository on our GitHub. We use an issue-based workflow so even if you already have a fix for the bug, consider opening a new \"Issue\", then asking a \"Pull Request\" that solves your \"Issue\". More info on contributing can be found here.
If you don't have a GitHub account or you don't know how to use GitHub you can get in touch with us in the following ways:
If you are hosting a server with one of our partnered hosting services, the IP will be posted on the respective Server Management Interface. You can also find the IP for your Server(s) on the Keymaster Website.
"},{"location":"FAQ/where-to-find-my-IP/#for-home-hosted-servers","title":"For Home-Hosted Servers","text":"For Servers hosted at home, open whatsmyip.org in a Browser. This will output the public IPv4 address you are being contacted with from the Internet.
Note, that 127.0.0.1 is the localhost address and can only be used by yourself, if the Server is hosted on the same Computer. If you are still having connection troubles with your home hosted server, check the port forwardings as well as CheckBeamMP
IP adress: Port:"},{"location":"FAQ/where-to-find-my-IP/#how-to-check-for-cgnat","title":"How to check for CGNAT?","text":"Have a look at this page to determine wether you can host a server at home or not.
Tags: IP, Server, Connection Failed, 10060/10061
"},{"location":"beamng/","title":"Welcome to the BeamNG.drive documentation","text":"This documentation is unofficial and produced by the BeamMP Mod Team and the BeamNG Community.
"},{"location":"beamng/#understanding-the-file-structure","title":"Understanding The File Structure","text":"...
"},{"location":"beamng/#snippets","title":"Snippets","text":"Helpful code snippets can be found here: Snippets
"},{"location":"beamng/snippets/","title":"Helpful Code Snippets","text":"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.
"},{"location":"beamng/snippets/#beamngdrive-snippets","title":"BeamNG.drive Snippets","text":""},{"location":"beamng/snippets/#lua-code-snippets","title":"Lua Code Snippets","text":""},{"location":"beamng/snippets/#drawing-a-marker-vehicle-detection","title":"Drawing a marker & Vehicle detection","text":"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:
local function createBusMarker(markerName)\n local marker = createObject('TSStatic')\n marker:setField('shapeName', 0, \"art/shapes/interface/position_marker.dae\")\n marker:setPosition(vec3(0, 0, 0))\n marker.scale = vec3(1, 1, 1)\n marker:setField('rotation', 0, '1 0 0 0')\n marker.useInstanceRenderData = true\n marker:setField('instanceColor', 0, '1 1 1 0')\n marker:setField('collisionType', 0, \"Collision Mesh\")\n marker:setField('decalType', 0, \"Collision Mesh\")\n marker:setField('playAmbient', 0, \"1\")\n marker:setField('allowPlayerStep', 0, \"1\")\n marker:setField('canSave', 0, \"0\")\n marker:setField('canSaveDynamicFields', 0, \"1\")\n marker:setField('renderNormals', 0, \"0\")\n marker:setField('meshCulling', 0, \"0\")\n marker:setField('originSort', 0, \"0\")\n marker:setField('forceDetail', 0, \"-1\")\n marker.canSave = false\n marker:registerObject(markerName)\n scenetree.MissionGroup:addObject(marker)\n return marker\n end\n\n -- this can then be called in a loop to setup your markers. \n -- NOTE: You should only do this once as part of your setup and not called on each frame.\n if #markers == 0 then\n for k,v in pairs(nameMarkers) do\n local mk = scenetree.findObject(v)\n if mk == nil then\n log('I', logTag,'Creating marker '..tostring(v))\n mk = createBusMarker(v)\n ScenarioObjectsGroup:addObject(mk.obj)\n end\n table.insert(markers, mk)\n end\n end\n
Here is a custom marker example from BeamNG-FuelStations:
local stations = [\n { \"location\": [ -778.813, 485.973, 23.46 ], \"type\":\"gas\" },\n { \"location\": [ 617.164, -192.107, 53.2 ], \"type\":\"ev\" },\n ]\n\n local function IsEntityInsideArea(pos1, pos2, radius)\n return pos1:distance(pos2) < radius\n end\n\n local onUpdate = function (dt)\n for k, spot in pairs(stations) do -- loop through all spots on the current map\n local bottomPos = vec3(spot.location[1], spot.location[2], spot.location[3])\n local topPos = bottomPos + vec3(0,0,2) -- offset vec to get top position (2m tall)\n\n local spotInRange = false -- is this spot in range? used for color\n local spotCompatible = false -- is this spot compatible?\n\n if activeVeh then -- we have a car and its ours (if in mp)\n local vehPos = activeVeh:getPosition()\n\n spotInRange = IsEntityInsideArea(vec3(vehPos.x, vehPos.y,vehPos.z), bottomPos, 1.5)\n\n spotCompatible = activeFuelType == \"any\" or spot.type == \"any\" or activeFuelType == spot.type\n end\n\n local spotColor = (spotInRange and spotCompatible) and activeColorMap[spot.type] or inactiveColorMap[spot.type] or ColorF(1,1,1,0.5)\n\n debugDrawer:drawCylinder(bottomPos:toPoint3F(), topPos:toPoint3F(), 1, spotColor) --bottom, top, radius, color\n end\n end\n
"},{"location":"beamng/snippets/#guihooks-examples","title":"guihooks examples","text":""},{"location":"beamng/snippets/#toast-notifications-top-right-of-screen","title":"Toast Notifications, Top right of screen","text":"--guihooks.trigger('toastrMsg', {type, title, msg, config = {timeOut}}) \nguihooks.trigger('toastrMsg', {type = \"info\", title = \"Info Message:\", msg = \"Info Message Text Here\", config = {timeOut = 5000}}) \nguihooks.trigger('toastrMsg', {type = \"warning\", title = \"Warning Message:\", msg = \"Warning Message Text Here\", config = {timeOut = 5000}}) \nguihooks.trigger('toastrMsg', {type = \"error\", title = \"Error Message:\", msg = \"Error Message Text Here\", config = {timeOut = 5000}}) \n
"},{"location":"beamng/snippets/#message-notifications-top-left-of-screen-by-default-in-messages-app","title":"Message notifications, top left of screen by default in Messages app","text":"--guihooks.trigger('Message', {msg, ttl, category, icon}) --requires Messages app\nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"arrow_upward\", icon = \"arrow_upward\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"arrow_downward\", icon = \"arrow_downward\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"flag\", icon = \"flag\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"check\", icon = \"check\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"check_circle\", icon = \"check_circle\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"warning\", icon = \"warning\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"error\", icon = \"error\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"directions_car\", icon = \"directions_car\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"star\", icon = \"star\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"timeline\", icon = \"timeline\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"save\", icon = \"save\"}) \nguihooks.trigger('Message', {msg = \"Message Text Here\", ttl = 5.0, category = \"settings\", icon = \"settings\"}) \n
"},{"location":"beamng/snippets/#center-large-or-small-display-flash","title":"Center large or small display flash","text":"--guihooks.trigger('ScenarioFlashMessage', {{msg, ttl, sound, big}} ) -- requires RaceCountdown ui app\nguihooks.trigger('ScenarioFlashMessage', {{\"Message\", 5.0, 0, true}} ) \nguihooks.trigger('ScenarioFlashMessage', {{\"Message Text Here\", 5.0, 0, false}} ) \n\n--countdown example, when all executed at once, the items are queued and will follow eachother after the previous ttl expires\nguihooks.trigger('ScenarioFlashMessage', {{\"3\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown1')\", true}}) \nguihooks.trigger('ScenarioFlashMessage', {{\"2\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown2')\", true}}) \nguihooks.trigger('ScenarioFlashMessage', {{\"1\", 1.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Countdown3')\", true}}) \nguihooks.trigger('ScenarioFlashMessage', {{\"GO!\", 3.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_CountdownGo')\", true}}) \n\n--another sound example\nguihooks.trigger('ScenarioFlashMessage', {{\"Teleported!\", 3.0, \"Engine.Audio.playOnce('AudioGui', 'event:UI_Checkpoint')\", false}}) \n
"},{"location":"beamng/snippets/#center-mid-size-persistent-display","title":"Center mid-size persistent display","text":"
--guihooks.trigger('ScenarioRealtimeDisplay', {msg = msg} ) -- requires Race Realtime Display ui app\nguihooks.trigger('ScenarioRealtimeDisplay', {msg = \"Message Text Here\"} )\n--these messages persist, clear with a blank string\n--if you are running live data, this is a good one to update rapidly (think timers, distance calcs, et cetera)\nguihooks.trigger('ScenarioRealtimeDisplay', {msg = \"\"} )\n
"},{"location":"beamng/snippets/#imgui-code-snippets","title":"IMGUI Code Snippets","text":""},{"location":"beamng/snippets/#cef-ui-code-snippets","title":"CEF UI Code Snippets","text":""},{"location":"beamng/dev/","title":"Introduction","text":"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.
"},{"location":"beamng/dev/#beamngdrive-development-introduction","title":"BeamNG.drive Development Introduction","text":""},{"location":"beamng/dev/content/maps/","title":"Maps","text":"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.
"},{"location":"beamng/dev/content/maps/#beamngdrive-map-creation","title":"BeamNG.drive Map Creation","text":"...
"},{"location":"beamng/dev/content/maps/#introduction","title":"Introduction","text":"...
"},{"location":"beamng/dev/content/maps/#getting-started","title":"Getting Started","text":"...
"},{"location":"beamng/dev/content/props/","title":"Props","text":"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.
"},{"location":"beamng/dev/content/props/#beamngdrive-prop-creation","title":"BeamNG.drive Prop Creation","text":"...
"},{"location":"beamng/dev/content/props/#introduction","title":"Introduction","text":"...
"},{"location":"beamng/dev/content/props/#getting-started","title":"Getting Started","text":"...
"},{"location":"beamng/dev/content/vehicles/","title":"Vehicles","text":"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.
"},{"location":"beamng/dev/content/vehicles/#beamngdrive-vehicle-creation","title":"BeamNG.drive Vehicle Creation","text":"...
"},{"location":"beamng/dev/content/vehicles/#introduction","title":"Introduction","text":"...
"},{"location":"beamng/dev/content/vehicles/#getting-started","title":"Getting Started","text":"...
"},{"location":"beamng/dev/modding/imgui-windows/","title":"imgui-windows.md","text":"This page needs creating
"},{"location":"beamng/dev/modding/lua-mods/","title":"lua-mods.md","text":"This page needs creating
"},{"location":"beamng/dev/modding/ui-apps/","title":"UI-App Creation","text":"In order to make a UI-App you will need some knowledge of the AngularJS framework, the main documentation can be found here: AngularJS docs
"},{"location":"beamng/dev/modding/ui-apps/#file-structure","title":"File structure","text":"A UI-App needs four important files to work: - app.js | Contains the main code used by the UI-App Javascript docs - app.html | The code that displays your app Html docs - app.json | Contains the information of the UI-App - app.png | The image file showing in the app selector
"},{"location":"beamng/dev/modding/ui-apps/#ui-app-style","title":"UI-App style","text":"We recommend using the <style>
tag to style your app, a .css file will work, but you will not be able to see the changes in real-time.
This example is from DanielW Thanks to him
ui\\modules\\apps\\ExampleApp\\app.html
<div style=\"width: 100%; height: 100%;\" class=\"bngApp\">\n <link type=\"text/css\" rel=\"stylesheet\" href=\"/ui/modules/apps/ExampleApp/app.css\" />\n\n <div id=\"exampleAppContainer\">\n <span>Gear: <span>{{ gearName }}</span></span>\n\n <div layout=\"row\" layout-align=\"center center\">\n <md-input-container flex>\n <label>Input</label>\n <input ng-model=\"message\" ng-keydown=\"sendMessage($event)\">\n </md-input-container>\n\n <md-button md-no-ink class=\"md-warn\" ng-disabled=\"!message\" ng-click=\"sendMessage()\">Send</md-button>\n </div>\n\n <span style=\"display: block\">Messages:</span>\n\n <!-- Scroll Area -->\n <ul bng-nav-scroll style=\"margin: 0; padding: 0; overflow-y: auto; width: 100%; height: 100%; background-color: #37373740;\">\n\n <!-- Iterate over the messages and display them -->\n <li ng-repeat=\"message in messages track by $index\" style=\"display: flex; align-items: center; height: 35px;\">\n <span style=\"padding: 0 0.2em; width: 100%;\">{{ message }}</span>\n\n <!-- Button to delete the message, this calls the `deleteMessage` function in `app.js` -->\n <md-button md-no-ink class=\"md-icon-button md-warn\" ng-click=\"deleteMessage($index)\">\n <md-icon class=\"material-icons\">delete</md-icon>\n </md-button>\n </li>\n </ul> \n </div>\n</div>\n
Here, you can see a <span>
tag displaying the gear of your vehicle, an input used to send a message to the sendMessage()
function in the Javascript and a repeated <li>
tag using ng-repeat on the messages
variable located in the Javascript ui\\modules\\apps\\ExampleApp\\app.js
angular.module('beamng.apps')\n.directive('exampleApp', [function() {\n return {\n templateUrl: '/ui/modules/apps/ExampleApp/app.html',\n replace: true,\n restrict: 'EA',\n scope: true,\n\n controller: ['$scope', function($scope) {\n $scope.gearName = '0'\n $scope.message = ''\n $scope.messages = []\n\n // 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\n let steamList = ['engineInfo']\n StreamsManager.add(steamList)\n\n $scope.$on('destroy', function() {\n StreamsManager.remove(steamList)\n })\n\n // Do I even need to put this comment here explaining what this function does?\n // Well, I have done it for a lot of other things when they weren't needed. I'll leave this one be...\n $scope.$on('streamsUpdate', function(event, streams) {\n if (!streams.engineInfo) // Early return... You probably noticed that without this useless comment though\n return;\n\n // `lua/vehicle/controller/vehicleController.lua:538` (or use console.log)\n let gear = streams.engineInfo[5]\n\n // Update the gear name in HTML if needed\n if ($scope.gearName !== gear)\n $scope.gearName = gear\n })\n\n $scope.sendMessage = function(event) {\n if (event && event.key !== 'Enter')\n return\n\n if ($scope.message == '')\n return\n\n // Forward the message to the Lua extension to modify it\n bngApi.engineLua('extensions.exampleMod.modifyMessage(\"' + $scope.message + '\")')\n $scope.message = ''\n }\n\n $scope.deleteMessage = function(idx) {\n $scope.messages.splice(idx, 1)\n }\n\n // The `modifyMessage` function will call this hook with the modified data\n $scope.$on('MessageReady', function(_, modifiedMessage) {\n $scope.messages.push(modifiedMessage)\n });\n }]\n }\n}])\n
Note the usage of $scope. This is very important because you will need to define your variables and functions within $scope to be able to access it from the Html inside any ng-* tag. So in this example, after the sendMessage()
function being executed from the Html it will send it to a lua file located in the extensions directory of the mod and execute the modifyMessage()
function inside this lua file. An example of how the lua side could look like:
local function modifyMessage(message)\n message = message .. \" [Modified!]\"\n guihooks.trigger('MessageReady', message)\nend\n
^ This is a simplified version of the lua to just show the function The main focus here is the usage of guihooks.trigger which triggers an AngularJS event defined with $scope.$on()
. As you can see at the very bottom of the Javascript file the event is named MessageReady and will be executed by the guihooks.trigger function with the message payload and then will be pushed inside the $scope.messages
variable to be displayed by the li tag using ng-repeat in the Html file
The full lua file is just below
lua\\ge\\extensions\\exampleMod.lua
local M = {}\n\n--[[\n This is the entry point of our extension, this is what the game loads from our `modScript.lua`.\n In the modScript file, you can load more extensions and put them in the same directory as this file.\n\n In this file, we will communicate with the following:\n 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`\n 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)\n]]\n\n-- Game Function Hooks\n--------------------------------------------\nlocal function onExtensionLoaded()\n log('D', \"onExtensionLoaded\", \"Called\")\nend\n\nlocal function onExtensionUnloaded()\n log('D', \"onExtensionUnloaded\", \"Called\")\nend\n\n-- Custom Functions\n--------------------------------------------\nlocal function onActionKeyDown()\n log('D', \"onActionKeyDown\", \"Pressed!\")\nend\n\nlocal function onVehicleExtensionLoaded(vehID)\n log('D', \"onVehicleExtensionLoaded\", \"Sending some data to the vehicle\")\n\n local veh = be:getObjectByID(vehID) -- If you don't have the ID, you can also use `be:getPlayerVehicle(0)` to get the current vehicle.\n if not veh then return end -- The usual error checking\n\n local data = {\n [\"name\"] = \"Daniel W\"\n }\n\n veh:queueLuaCommand(\"extensions.exampleVehicleExtension.onDataReceived('\" .. jsonEncode(data) .. \"')\")\nend\n\nlocal function modifyMessage(message)\n message = message .. \" [Modified!]\"\n guihooks.trigger('MessageReady', message)\nend\n\n-- Export Interface\n--------------------------------------------\nM.onExtensionLoaded = onExtensionLoaded\nM.onExtensionUnloaded = onExtensionUnloaded\n\nM.onActionKeyDown = onActionKeyDown\nM.onVehicleExtensionLoaded = onVehicleExtensionLoaded\nM.modifyMessage = modifyMessage\n\n--[[ Other functions could include:\n - onPreRender(dtReal, dtSim, dtRaw)\n - onUpdate(dtReal, dtSim, dtRaw)\n - onClientPreStartMission(levelPath)\n - onClientPostStartMission(levelPath)\n\n To find all of these, search the following in `BeamNG.Drive/lua`: `extensions.hook(`\n--]]\n\nreturn M\n
Note that its very important to return the M (module) variable with the needed functions inside! For example, without the M.modifyMessage = modifyMessage
line, the bngApi.engineLua('extensions.exampleMod.modifyMessage(\"' + $scope.message + '\")')
function will not be able to find the modifyMessage() function
ui\\modules\\apps\\ExampleApp\\app.css
#exampleAppContainer {\n width: 100%;\n height: 100%;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n align-content: center;\n}\n\n#exampleAppContainer > * {\n margin: 0;\n padding: 0;\n}\n
ui\\modules\\apps\\ExampleApp\\app.json
{\n \"domElement\": \"<example-app></example-app>\",\n \"name\": \"Example App\",\n \"types\": [\n \"ui.apps.categories.debug\"\n ],\n \"description\": \"example-app\",\n \"css\": {\n \"left\": \"0px\",\n \"height\": \"auto\",\n \"width\": \"270px\",\n \"min-width\": \"200px\",\n \"min-height\": \"90px\",\n \"top\": \"0px\"\n },\n \"author\": \"Daniel W\",\n \"version\": \"0.1\",\n \"directive\": \"exampleApp\"\n}\n
The directive needs to be the same as in the Javascript file"},{"location":"beamng/dev/modding/ui-apps/#javascript-functions-provided-by-beamng-for-ui-apps","title":"Javascript functions provided by BeamNG for UI-Apps","text":"bngApi.engineLua(\"lua_path.function()\")\n
Useful to run a lua function with or without arguments"},{"location":"beamng/dev/modding/ui-apps/#lua-functions-provided-by-beamng-for-ui-apps","title":"Lua functions provided by BeamNG for UI-Apps","text":"guihooks.trigger(\"EventName\", Payload)\n
The payload can be any type but its better to keep it as an Array / Object or a String to not be lost. IMPORTANT : Sometime it can happen that the event name you use is already used internally by something else and cause problems, so for example if your app is named Nickel, it can be a good practice to name every of your Angular event like NKEventName instead of EventName
"},{"location":"community/","title":"Welcome to BeamMP Community Area!","text":""},{"location":"community/#our-social-media-links","title":"Our social media links","text":"BeamMP Forum - https://forum.beammp.com
X (Twitter) - https://x.com/BeamMPOfficial
YouTube - https://www.youtube.com/@BeamMPOfficial
Patreon - https://www.patreon.com/c/BeamMP
Discord - https://discord.com/invite/beammp
BlueSky - https://bsky.app/profile/beammpofficial.bsky.social
"},{"location":"community/#our-rules","title":"Our Rules","text":"You can find our rules here
"},{"location":"community/rules/","title":"BeamMP Community Rules","text":"Info
BeamMP Staff are not bound to moderate strictly by these rules and may operate at their own discretion. In addition to these rules, Discord's Community Guidelines and Terms of Service apply, and are enforced.
"},{"location":"community/rules/#beammp-general-rules-applies-to-discord-forum-and-in-game","title":"BeamMP General Rules (Applies to Discord, Forum and In-Game)","text":"@'ing
) All ban appeals are investigated thoroughly, involving at least two (2) members of the staff/moderation team that were not involved in the case-at-hand. The issuing staff member will be allowed to comment, but will not be otherwise involved in the appeal decision. These appeal outcomes are final. BeamMP reserves the right to allow or not allow members as they deem appropriate according to the BeamMP Community Rules (as above), Discord ToS, and other factors.
Warning
In the event of action taken against you, you are prohibited from creating a new Discord or BeamMP account to circumvent the ban.
"},{"location":"game/error-codes/","title":"Error Codes","text":"This page contains all the error codes that the launcher may display.
Code Description Possible solution 10048 Something else is already using the launcher port Make sure to only have ONE instance of the BeamMP-Launcher running at a time. Try restarting your PC. 10038 / 10060 / 10061 No Server answered on this specified IP and / or port If you are the server owner, please check the port forwarding and/or firewall rules found at BeamMP-Server. If you are not the server owner, choose a different server or contact the owner if known. 10054 Connection reset by peer The server you're connecting to has gone offline. Failed to find the game please launch it. Report this if the issue persists code 3. The launcher was unable to find the game's info (game directory, profile directory, version ect...) in the registry entry Run the game at least once so the registry values get created. Failed to find the game please launch it. Report this if the issue persists code 4. The launcher was unable to read the game's info (game directory, profile directory, version ect...) in the registry entry This error is most likely to appear in users with pirated copies of the game. If you have bought the game, run it at least once so the registry values get created. Failed to Launch the game! launcher closing soon The launcher was unable to find the game's executable Run the game at least once before running the launcher again. Game Closed! launcher closing soon The game was closed This message will appear on game closure or when the game failed to start. Launcher Update failed! The launcher failed to download a new version Check your internet connection and firewall / antivirus rules so that the launcher is not blocked. Logger file init failed The launcher does not have the ability to create files Run the launcher as administrator. Please close the game and try again The game is already open and the launcher can't clear themultiplayer/mods
folder Close the game and retry. Please launch the game at least once The launcher tried and failed to modify the game's directory Run the game at least once before running the launcher again. Primary Servers Offline! Sorry for the inconvenience! The launcher failed to check for an update Check your internet connection and firewall rules. If there is no problem on your end, please check the BeamMP updates channel on our Discord. Sorry Backend System Outage! Don't worry it will back on soon! The BeamMP backend did not respond Check your internet connection and firewall rules. If there is no problem on your end, please check the BeamMP updates channel on our Discord. Stuck on updating The launcher is stuck on updating and will not continue to the next step Run the launcher as administrator and check your antivirus rules so that the launcher is not blocked. If the launcher closes immediately, check the Launcher.log
file in the folder where you installed BeamMP.
BeamMP is fully compatible with Windows and Linux, compatibility with MacOS is being worked on. However, both Linux and MacOS are secondary platforms, this means bugs are to be expected.
Warning
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.
"},{"location":"game/getting-started/#2-installation","title":"2. Installation","text":""},{"location":"game/getting-started/#2a-windows-installation","title":"2a. Windows Installation","text":"BeamMP_Installer.zip
archive.BeamMP_Installer.exe
and follow the instructions.Repository
button and make sure that multiplayerbeammp
is the only enabled mod.Connect
. Enjoy!Note
As you are loading into a map with multiple vehicles spawned it might take longer than expected to join.
"},{"location":"game/getting-started/#2b-linux-installation","title":"2b. Linux Installation","text":"Currently you need to build the Launcher yourself. In order to do this, you need a basic understanding of how to build an application.
Make sure you have vcpkg
installed, as well as basic development tools, often found in packages, for example:
sudo apt install build-essential
sudo dnf install cmake gcc-c++ perl-IPC-Cmd perl-FindBin perl-File-Compare perl-File-Copy
sudo pacman -S base-devel
zypper in -t pattern devel-basis
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)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
Checkout the tag that was used for the latest release. For example, if v2.3.2
is used in the latest release, then do git checkout v2.3.2
In the root directory of the project,
cmake . -B bin -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux\n
cmake --build bin --parallel\n
Should you run out of RAM while building, you can ommit the --parallel instruction, it will then use less RAM due to building only on one CPU thread.
By not specifying -DCMAKE_BUILD_TYPE=Release
you are building a debug version, which is larger in filesize but does not contain the launcher-can-only-connect-to-a-server-once bug
Move the finished application out of the /bin
folder into its own folder and run it from there
The native linux BeamMP-Launcher will start and use native linux BeamNG.drive
"},{"location":"game/getting-started/#2c-using-beamngdrive-with-proton","title":"2c. Using beamNG.drive with Proton","text":"Should you want to use the native linux BeamMP-Launcher together with BeamNG.drive running through Proton, you can do so:
Run the BeamMP-Launcher using the argument --no-launch
(This will prevent the Launcher from starting native linux BeamNG.drive). Further information about launcher arguments can be found in the Development Environment Setup
Change the userfolder location of Proton-BeamNG.drive to the location of Linux-BeamNG.drive (since the native linux BeamMP-Launcher currently only writes into the Linux-BeamNG.drive userfolder)
This can be done for example by creating a symlink
~/.local/share/BeamNG.drive
) and rename it, for example to BeamNG.drive_old
~/.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
With the symlink in place between the userfolders and the launcher compiled, you can have Steam run the game via Proton, while also automatically executing the launcher with the following replacement for your launch options for the vanilla game, found in the game's Properties window in its entry in Steam:
~/BeamMP/BeamMP-Launcher --no-launch & %command% ; killall BeamMP-Launcher
Note that this assumes you put the launcher's binary you compiled earlier into /home/user/BeamMP/
, so change it to match where you put the finished binary, and you will need to re-compile the launcher with the correct git branch each time a launcher update is released.
Adding an emoji-font to get in-text emojis
In order to get emojis to show up in either the serverlist (As part of a servers customised name) or in the ingame chat, you need to have a font that contains emojis.
This can be done for example by adding the Linux-port of the Windows Segoe-UI emoji font
"},{"location":"game/getting-started/#3-known-issues","title":"3. Known Issues","text":"Should you need further help with installation, you are welcome to create a post on our forum or ask on our Discord server.
"},{"location":"game/multiplayer-settings/","title":"Mutliplayer Settings","text":""},{"location":"game/multiplayer-settings/#1-general","title":"1. General","text":"Show advanced optionsIf enabled, you will see all multiplayer settings
If disabled, you will see only basic multiplayer settings
Enable config cloning protectionIf enabled, your spawned vehicle config will be protected from other players saving it
If disabled, your spawned vehicle config can be saved by other players
Disable pausing caused by instabilitiesIf enabled, physics instabilities will not cause your game to pause
If disabled, physics instabilities will cause your game to pause
Its advised to leave disabled, since repeated instabilities can cause the game to crash
Use simplified vehicles when availableIf enabled, the game will replace vehicles of other players with their simplified versions (from AI traffic) if available
If disabled, the game will use the intended vehicle models
New chat menuIf enabled, the ingame chat will be displayed in an IMGUI window, that for example can be dragged out of the game onto another monitor
If disabled, the ingame chat will be displayed in the UI app
Dragging IMGUI windows out of the main game window can cause performance issues, as well as trick screen recording software into recording the chat window instead of the main game window
Enable vehicle position smoothingIf enabled, beamMP will use an algorithm to smooth vehicle position updates to regular intervalls. Can be beneficial between players with high ping or when a connection experiences a high package drop rate
If disabled, beamMP will update vehicle locations as they are received
Skip the mod security warning popuspIf enabled, the mod security popup will not be shown when trying to connect to a server with mods
If disabled, the mod security popup will be shown whenever you connect to a server with mods
Enable player vehicle update/edit queuingIf enabled, other players vehicle spawns and edits will be put into a queue. See the section 2. Event queue
for further details
If disabled, other players vehicle spawns and edits will be loaded by the game instantly
Enable automatic part syncIf enabled, your vehicles parts will automatically be synced to other players after a few seconds
If disbaled, you need to click the part sync button in the part picker in order to send a sync out to other players
Disable switching to other players vehiclesIf enabled, tabbing trough vehicles will skip other players vehicles
If disabled, tabbing trough vehicles will cycle over every spawned vehicle
Fade out vehicles as they get closerIf enabled, other vehicles will fade out as they get closer
If disbaled, other vehicles will stay fully visible regardless of distance
This only affects the visible 3d mesh of a vehicle, not its physics node-beam-mesh. In order to also disable physics, you need to enable Simplified collision physics
in the Gameplay settings
If enabled, the ingame playerlist will have an additional row showing each players ID. Useful for development or moderation
If disabled, the ingame playerlist will only show the rows for playername and ping
Allow the serverlist to refresh ingameIf enabled, the serverlist will update in regular intervalls while playing. This can cause lag spikes
If disabled, the serverlist will only update once you open the main menu
"},{"location":"game/multiplayer-settings/#2-event-queue","title":"2. Event queue","text":"Highlight queued playersIf enabled, players with a queued event will be highlighted in the ingame playerlist
If disabled, players will not be individually highlighted
Apply vehicle changes withIf set to Left mouse button
, clicking on a players name in the playerlist using the left mouse button will load the queued events. Clicking with the right mouse button will spectate said player
If set to Right mouse button
, clicking on a players name in the playerlist using the right mouse button will load the queued events. Clicking with the left mouse button will spectate said player
If enabled, the queued events will be automatically loaded once you've been going under the speed treshold for the amount of time set as the timeout
If disabled, the queued events will only load manually, by clicking on either the Events
button at the top of the screen or on a players name in the playerlist
This setpoint defines the speed treshold of the automatic event queue loading. Your vehicle has to be slower than this for longer than Queue apply timeout
in order to load the queued events
This setpoint defines the time delay of the automatic event queue loading. Your vehicle has to be slower than Queue apply speed treshold
for this time in order to load the queued events
If enabled, an event will instantly load if you are spectating another player
If disabled, an event will be queued just like it would when focused on your own vehicle
Don't queue Unicycles (Snowmen/Beamlings)If enabled, an event concerning a snowmen/beamling will be loaded instantly
If disabled, snowmen/beamlings will be queued just like other vehicles
"},{"location":"game/multiplayer-settings/#3-set-default-unicycle","title":"3. Set default Unicycle","text":"Default Unicycle configThis setpoint defines the unicycle variant to be loaded by default. You can choose between premade configs and your own should you have saved custom unicycle configs
Automatically save your last used UnicycleIf enabled, your last used unicycle will be automatically saved and reloaded once you spawn it again
If disabled, your default unicycle config will spawn every time
"},{"location":"game/multiplayer-settings/#4-blobs","title":"4. Blobs","text":"Enable blobs for unspawned vehiclesIf enabled, you will see a placeholder orb, or blob, in place of an unspawned vehicle
If disabled, an unspawned vehicle will be invisible
Tune colors VisibleIf enabled, a blob will be drawn, using the color below
If disabled, no blob will be drawn for the specified function
RGB HEX valuesQueued vehicle: The color a blob will use if a vehicle is queued for spawning. Standard value #FF6400
Illegal vehicle: The color a blob will use if a vehicle is illegal, for example trough a mod that was sideloaded. Standard value #000000
Deleted vehicle: The color a blob will use if a vehicle was deleted by the user. Standard value #333333
"},{"location":"game/multiplayer-settings/#5-nametags","title":"5. Nametags","text":"Hide player nametagsIf enabled, player nametags will not be drawn
If disabled, player nametags will be drawn according to their vehicles relative position
Show distance from other playersIf enabled, the nametag will be prepended by the distance to the respective vehicle
If disabled, no additional distance will be shown in the nametag
Fade nametags in/outIf enabled, a nametag will be faded in/out according to Fade distance
and Invert nametag fade direction
If disabled, anametag will be drawn at standard opacity regardless of distance to the respective vehicle
Fade distance/Invert nametag fade directionFade out
Nametags are getting less visible the further away a player is
Fade distance
defines the distance at which a nametag will be drawn at minimal opacity
Fade in
Nametags are getting more visible the further away a player is
Fade distance
defines the distance at which a nametag will be drawn at maximal opacity
If enabled, a nametag can not get fully invisible, it will retain a minimal opacity regardless of distance
If disabled, nametags can get fully invisble
Shorten nametag and role tagsIf enabled, Nametag length limit
will truncate nametags and roles to the set limit of characters
If disabled, nametag and role tags will be shown at full length
Show spectators' nametag under vehicle nametagsIf enabled, a spectators name will be added underneath a players nametag
If disabled, no spectator names will be added to nametags
Same color for spectator nametagsIf enabled, a spectators name will always be surrounded by a grey background
If disabled, a spectators name will be surrounded by a colored background, reflecting the spectators role
"},{"location":"game/multiplayer-settings/#6-others","title":"6. Others","text":"Show network activity in the consoleIf enabled, the beamMP network activity will be shown in the console
If disabled, no further network activity will be shown in the console
Be careful with this setting, since all the console output gets also written into the log files
They can grow by hundreds of MB in minutes with this setting enabled
Launcher portThis setpoint defines the port used for communicating with the launcher
Should only be changed if the standard port 4444 can not be used
Dont forget to also change it on the launcher side, by modifying launcher.cfg
The port specified is only the first of two, the second port being used is directly following, set port + 1
The first port carries core network pakets, the second game network pakets, both over TCP
"},{"location":"guides/","title":"Guides","text":"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.
"},{"location":"guides/#beammp-development-guides","title":"BeamMP Development Guides","text":"This page will be the introduction and preface for both client and server content creation.
This page needs developing still.
"},{"location":"guides/beammp-dev/beammp-dev/","title":"Getting started","text":"In order to get started with development for BeamMP you will need at least:
BeamMP is split into three main parts:
In order to efficiently work on mods in BeamNG, it is advised to use an unpacked
folder, rather than packaging zips after every change.
Open up the BeamNG userfolder by navigating to %appdata%/Local/BeamNG.drive/0.xx/mods
where xx
is the most recent BeamNG version. Create a folder called unpacked
inside the mods
folder.
Further information about the userfolder can be found at https://documentation.beamng.com/support/userfolder/
"},{"location":"guides/beammp-dev/beammp-dev/#enabling-dev-mode-in-the-beammp-launcher","title":"Enabling dev mode in the BeamMP launcher","text":"In order to prevent auto-update deleting your local git clone, it's necessary to disable it, using --no-download
. If you also don't want the launcher to start BeamNG, and would like to see debug prints, then using --dev
is advised.
--help
or -h
Will print the following list of arguments --port <port>
or -p
Change the default listen port to <port>
. This must be configured ingame too --verbose
or -v
Verbose mode, prints debug messages --no-download
Skip downloading and installing the BeamMP Lua mod --no-update
Skip applying launcher updates (you must update manually) --no-launch
Skip launching the game (you must launch the game manually) --dev
Developer mode, same as --verbose --no-download --no-launch --no-update --game <args...>
or -- <args...>
Passes arguments to the game"},{"location":"guides/beammp-dev/beammp-dev/#cloning-the-beammp-repo-into-the-unpacked-folder","title":"Cloning the BeamMP repo into the unpacked folder","text":"While you can manually copy the BeamMP mod files from our github repo, it is highly recommended to use a source-control system like git. First create a fork of https://github.com/BeamMP/BeamMP
Most efficient would be to clone the repo directly into the unpacked
folder.
For git
, run git clone https://github.com/yourName/BeamMP
from a PowerShell or CMD window started from the unpacked
folder. While in the userfolder, make sure theres no multiplayer
folder left in mods
and that now there's unpacked/beammp
.
Now give the dev mode a try. Start the BeamMP launcher, start BeamNG manually, once ingame make sure that BeamMP is the only active mod. You should be able to use BeamMP as usual.
Using a code editor, you can now add or change code directly in the unpacked
folder. You can then try the changes by reloading Lua ingame by pressing Ctrl+L
(and F5
if you made UI changes).
Once you're happy with your changes, you can commit them through git. See the Git-SCM website for tutorials and documentation on how to use Git. As soon as your changes are committed and pushed (to your fork), you can make a pull-request.
Feel free to ask in the #scripting channel in our Discord if you encounter any issues.
"},{"location":"guides/beammp-dev/beammp-dev/#setting-up-a-local-server","title":"Setting up a local server","text":"While working on BeamMP, it can be beneficial to use a local server. You can follow the general server installation while omitting the first two steps for purely local connections.
Set the server to private in the serverConfig.toml
while using any string as the AuthKey
.
For details on code format, commit message format, general development best practices, etc. please see the CONTRIBUTING.md
file in each repo. This file contains more detailed information on how to contribute. The README.md
in each repo usually contains build steps as well (for compiled projects).
The basic folder and file structure needs to look like this:
Resources/\n\u251c\u2500 Client/\n\u2502 \u2514\u2500 examplePlugin.zip/\n\u2502 \u251c\u2500 scripts/\n\u2502 \u2502 \u2514\u2500 modScript.lua\n\u2502 \u2514\u2500 lua/\n\u2502 \u2514\u2500 ge/\n\u2502 \u2514\u2500 extensions/\n\u2502 \u2514\u2500 examplePlugin.lua\n\u2514\u2500 Server/\n \u2514\u2500 examplePlugin/\n \u251c\u2500 examplePlugin.lua\n \u2514\u2500 further_lua/\n \u2514\u2500 further.lua\n
The serverside lua is the bare minimum, if you want to add custom events, you also need at least a clientside lua as well as a modscript.lua
The Server folder must contain subfolders, one for each server-side mod. It is good practice to only have a single main lua file and add further lua files into subfolders. However, you are not required to do that, the server will load lua files in alphabetical order should there be multiple.
The Client folder contains the zip files that are sent to a client, which then will load them as a mod. Any other files in the Client folder will cause an error on server startup, but apart from that will be ignored by the server. The modScript.lua will be read by BeamNG and instructs the game which plugin to load.
Download the examplePlugin.zip
"},{"location":"guides/mod-creation/server/getting-started/#serverside-lua","title":"Serverside lua","text":"There's more examples in the examplePlugin, but heres a very basic one, printing a players identifiers:
function onInit() --runs when plugin is loaded\n\n MP.RegisterEvent(\"onPlayerAuth\", \"onPlayerAuth\") --Provided by BeamMP\n\n print(\"examplePlugin loaded\")\nend\n\n--A player has authenticated and is requesting to join\n--The player's name (string), forum role (string), guest account (bool), identifiers (table -> ip, beammp)\nfunction onPlayerAuth(player_name, role, isGuest, identifiers)\n local ip = identifiers.ip\n local beammp = identifiers.beammp or \"N/A\"\n print(\"onPlayerAuth: player_name: \" .. player_name .. \" | role: \" .. role .. \" | isGuest: \" .. tostring(isGuest) .. \" | identifiers: ip: \" .. ip .. \" - beammp: \" .. beammp)\nend\n
onPlayerAuth
gets triggered as soon as a player wants to join, also see onPlayerAuth in the scripting reference
Another example using onPlayerAuth, but this will deny guests from joining the server by sending the client a message back, which will then be shown to the player:
function onPlayerAuth(playerName, playerRole, isGuest, identifiers)\n if isGuest then\n return \"No guests allowed, please use a BeamMP account\"\n end\nend\n
Further info on serverside functions provided by BeamMP can be found in the latest server reference
"},{"location":"guides/mod-creation/server/getting-started/#clientside-lua","title":"Clientside lua","text":"This largely follows the BeamNG extensions
local M = {}\n\nif extensions.isExtensionLoaded(\"examplePlugin\") then\n log(\"E\", \"examplePlugin\", \"examplePlugin loaded on client side\")\n return\nend\n\nreturn M\n
Prints to the console that the examplePlugin was loaded Refer to the beamNG documentation on debug prints to learn more
"},{"location":"guides/mod-creation/server/getting-started/#modscriptlua","title":"modScript.lua","text":"Usually contains only two lines
load('examplePlugin')\nsetExtensionUnloadMode('examplePlugin', 'manual')\n
You can add a log print if you want to see in the logs when your modScript gets processed by BeamNG
load('examplePlugin')\nsetExtensionUnloadMode('examplePlugin', 'manual')\nlog('I', 'modScript', \"examplePlugin loaded\")\n
"},{"location":"scripting/mod-reference/","title":"Client Scripting Reference","text":"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.
"},{"location":"scripting/mod-reference/#modin-game-scripting-reference","title":"Mod/In-Game Scripting Reference","text":"BeamMP allows you to create your own client side plugins as well. We have provided a few functions that you can use to communicate with other multiplayer mods, and other players through the server.
"},{"location":"scripting/mod-reference/#functions","title":"Functions","text":"List of available functions for scripting:
Function NotesTriggerServerEvent(\"eventName\", \"data\")
Triggers an event in the server lua environment, both parameters are strings. TriggerClientEvent(\"eventName\", \"data\")
Triggers an event in the local lua environment, both parameters are strings. Good for communication between plugins. AddEventHandler(\"eventName\", Function)
Adds the 2nd parameter to the table to be called when eventName
is received (either locally or from the server), Function
will get 1 parameter, a string containing the event data."},{"location":"scripting/mod-reference/#code-snippets","title":"Code snippets","text":"For example to parse the chat use the included ChatMessageIncluded
event as such:
local function chatReceived(msg) -- Receive event with parameters\n print(\"chat received: \"..msg)\n local i = string.find(s, \":\") -- Find where our first ':' is, used to separate the sender and message\n if i == nil then\n print(\"error parsing message: separator could not be found!\")\n return -- Could not find separator, cancel function\n end\n print(\"index of separator: \"..tostring(i))\n local sender = string.sub(msg, 1, i-1) -- Substring our input to separate its 2 parts\n local message = string.sub(msg, i+1, -1) -- Do whatever you want to with the message\n print(\"sender: \" .. sender)\n print(\"message: \".. message)\nend\n\nAddEventHandler(\"ChatMessageReceived\", chatReceived) -- Add our event handler to the list managed by BeamMP\n
"},{"location":"scripting/server/latest-server-reference/","title":"Version 3.X (Latest)","text":"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 on any page too.
"},{"location":"scripting/server/latest-server-reference/#server-scripting-reference","title":"Server Scripting Reference","text":""},{"location":"scripting/server/latest-server-reference/#server-version-3x","title":"Server Version 3.X","text":""},{"location":"scripting/server/latest-server-reference/#introduction","title":"Introduction","text":"BeamMP-Server release v3.0.0 does some drastic changes to the way the Lua plugin system works. There is no way to use the old lua with a new server, so you'll have to migrate.
The Server's Plugin system uses Lua 5.3. This section details how to get started writing plugins, teaches some basic concepts and gets you started with your first plugin. It is recommended you read this section even if you know the pre-v3.0.0 system, as a few things changed drastically.
For a migration guide from pre-v3.0.0 lua, go to the section \"Migrating from old Lua\".
"},{"location":"scripting/server/latest-server-reference/#directory-structure","title":"Directory Structure","text":"Server plugins, unlike mods, are situated (by default) in Resources/Server
, while mods, which are written for BeamNG.drive and are sent to the clients are in Resources/Client
. Each plugin must have it's own subfolder in Resources/Server
, for example for a plugin called \"MyPlugin\", the structure would be:
Resources\n\u2514\u2500\u2500 Server\n \u251c\u2500\u2500 MyPlugin\n \u2502 \u2514\u2500\u2500 main.lua\n \u2514\u2500\u2500 SomeOtherPlugin\n \u2514\u2500\u2500 ...\n
Here we also display another plugin called \"SomeOtherPlugin\", to illustrate how your Resources/Server
folder can have multiple different plugin folders. We will keep using this directory structure as an example throughout this guide.
You also notice the main.lua
. You can have as many Lua .lua
files as you like. All Lua files in your plugin's main directory are loaded in alphabetical order (so aaa.lua
is run before bbb.lua
).
Each Lua .lua
file in the plugin's folder is loaded on server startup. This means that statements outside of functions are evaluated (\"run\") immediately.
Lua files in subfolders are ignored, but can be require()
-ed.
For example, our main.lua
looks like this:
function PrintMyName()\n print(\"I'm 'My Plugin'!\")\nend\n\nprint(\"What's up!\")\n
When the server starts and the main.lua
is loaded, it will run print(\"What's up!\")
immediately, but will NOT call the PrintMyName
function yet (because it wasn't called)!
An event is something like \"a player is joining\", \"a player sent a chat message\", \"a player spawned a vehicle\".
You can cancel events (if they are cancellable) by returning 1
from the handler.
In Lua, you usually want to react to some of these. For this, you can register a \"Handler\". This is a function which is called when an event happens, and gets passed some arguments.
Example:
function MyChatMessageHandler(sender_id, sender_name, message)\n -- censoring only the exact message 'darn'\n if message == \"darn\" then\n -- cancel the event by returning 1\n return 1\n else\n return 0\n end\nend\n\nMP.RegisterEvent(\"onChatMessage\", \"MyChatMessageHandler\")\n
This will effectively make sure that any message that is exactly equal to \"darn\" will not be sent and won't show in chat (note that for a real profanity filter you'd want to see if the message contains \"darn\", not is \"darn\"). Cancelling an event causes it to not happen, for example a chat message not to be shown to anyone else, a vehicle not to be spawned, etc.
"},{"location":"scripting/server/latest-server-reference/#custom-events","title":"Custom Events","text":"You can register to any event you like, for example:
MP.RegisterEvent(\"MyCoolCustomEvent\", \"MyHandler\")\n
You can then trigger those custom events:
-- call all event handlers to this in ALL plugins\nMP.TriggerGlobalEvent(\"MyCoolCustomEvent\")\n-- call all event handlers to this in THIS plugin\nMP.TriggerLocalEvent(\"MyCoolCustomEvent\")\n
You can do a lot more with events, but those possibilities will be covered in detail below in the API reference.
"},{"location":"scripting/server/latest-server-reference/#event-timers-threads","title":"Event Timers (\"Threads\")","text":"Pre-v3.0.0 Lua had a concept of \"threads\" which run X times per second. This naming was slightly misleading, as they were synchronous.
v3.0.0 Lua instead has \"Event Timers\". These are timers which run inside the server, and once they run out, they trigger an event (globally). This is also synchronous. Please be aware that the second argument is an interval in milliseconds.
Example:
local seconds = 0\n\nfunction CountSeconds()\n seconds = seconds + 1\nend\n\n-- create a custom event called 'EverySecond'\n-- and register the handler function 'CountSeconds' to it\nMP.RegisterEvent(\"EverySecond\", \"CountSeconds\")\n\n-- create a timer for this event, which will fire every 1000ms (1s)\nMP.CreateEventTimer(\"EverySecond\", 1000)\n
This will cause \"CountSeconds\" to be called every second. You can also cancel event timers with MP.CancelEventTimer
(see API reference).
From the server's console, you can run status
to see how many event timers are currently running, as well as info about event handlers that are waiting. This command will show more information in the future.
Lua is difficult to debug. An industry-grade debugger like gdb
sadly doesn't exist for embedded Lua.
Generally, you can of course simple print()
the values you want to inspect at any time.
In v3.0.0, the server provides a way for you to inject an interpreter into a plugin and subsequently run Lua inside it in realtime. This is the closest we have to a debugger.
Assuming you have the plugin from above which we called MyPlugin
, you can enter into its Lua state like so:
> lua MyPlugin\n
Capitalisation matters here, so be careful its entered correctly. The output is something like
lua @MyPlugin> \n
As you can see, we switched into the Lua state for MyPlugin
. From now on until we enter exit()
(as of v3.1.0 :exit
), we will be in MyPlugin
and can execute Lua there. For example, if we have a global called MyValue
, we can print that value like so:
lua @MyPlugin> print(MyValue)\n
You can call functions here and do anything you expect to be able to do.
Since v3.1.0: You can press TAB to autocomplete functions and variables.
WARNING: Sadly, if the Lua state is currently busy executing other code (like a while
loop), this can fully hang the console until it finishes that work, so be very careful switching to states which may be waiting for something to happen.
Additionally, you can run status
in the regular console (>
), which will show you some statistics about Lua, among other things.
In order to implement custom commands for the server console, the event onConsoleInput
can be used. This can be useful when you want to add a way for the server owner to signal something to your plugin, or to display internal state in a custom way.
Here's an example:
function handleConsoleInput(cmd)\n local delim = cmd:find(' ')\n if delim then\n local message = cmd:sub(delim+1)\n if cmd:sub(1, delim-1) == \"print\" then\n return message\n end\n end\nend\n\nMP.RegisterEvent(\"onConsoleInput\", \"handleConsoleInput\")\n
This will enable you to do the following in the server's console:
> print hello, world\nhello, world\n
We implemented our own print
. As an exercise, try to build a function like say
, which sends a chat message to all players, or even a specific player (with MP.SendChatMessage
).
Caution: For your own plugins, it's generally recommended to \"namespace\" them. Our print
example, in a plugin called mystuff
, could be called mystuff.print
or ms.print
or similar.
Documentation format: function_name(arg_name: arg_type, arg_name: arg_type) -> return_types
print(...)
, printRaw(...)
","text":"Prints the message to the server console, prefixed with [DATE TIME] [LUA]
. If you don't want this prefix, you can use printRaw(...)
.
Example:
local name = \"John Doe\"\nprint(\"Hello, I'm\", name, \"and I'm\", 32)\n
It can take as many arguments of arbitrary types as you like. It will also happily dump tables!
This behaves like the lua interpreter's print
, so it will put tabs between arguments.
exit()
","text":"Shuts down the server gracefully. Causes the onShutdown
event to be triggered.
MP.CreateTimer() -> Timer
","text":"Creates a timer object, which can be used to keep track of how long something took / how much time elapsed. It starts once created, and can be reset/restarted with mytimer:Start()
.
You can get the current elapsed time in seconds with mytimer:GetCurrent()
.
Example:
local mytimer = MP.CreateTimer()\n-- do stuff here that needs to be timed\nprint(mytimer:GetCurrent()) -- print how much time elapsed\n
Timers do not need to be stopped (and can't be stopped), they have no overhead.
"},{"location":"scripting/server/latest-server-reference/#mpgetosname-string","title":"MP.GetOSName() -> string
","text":"Returns the name of the current OS, either Windows
, Linux
or Other
.
MP.GetServerVersion() -> number,number,number
","text":"Returns the current server version in major, minor, patch format. For example, the v3.0.0 version would return 3, 0, 0
.
Example:
local major, minor, patch = MP.GetServerVersion()\nprint(major, minor, patch)\n
Output: 2 4 0\n
"},{"location":"scripting/server/latest-server-reference/#mpregistereventevent_name-string-function_name-string","title":"MP.RegisterEvent(event_name: string, function_name: string)
","text":"Remembers the function with name Function Name
as an event handler to event with name Event Name
.
You can register as many handlers to an event as you like.
For a list of events the server provides, see here.
If the event with that name doesn't exist, it's created, and thus RegisterEvent cannot fail. This can be used to create custom events. See Custom Events and Events for more.
Example:
function ChatHandler(player_id, player_name, msg)\n if msg == \"hello\" then\n print(\"Hello World!\")\n return 0\n end\nend\n\nMP.RegisterEvent(\"onChatMessage\", \"ChatHandler\")\n
"},{"location":"scripting/server/latest-server-reference/#mpcreateeventtimerevent_name-string-interval_ms-number-strategy-number-since-v302","title":"MP.CreateEventTimer(event_name: string, interval_ms: number, [strategy: number (since v3.0.2)])
","text":"Starts a timer inside the server which triggers the event event_name
every interval_ms
milliseconds.
Event timers can be cancelled with MP.CancelEventTimer
.
Intervals <25 ms are not encouraged, as multiple such intervals will likely not be served in time reliably. While multiple timers can be started on the same event, it's encouraged to create as few event timers as possible. For example, if you need one event that runs every half second, and one which runs every second, consider just making the half-second one and running the every-second-functiosecond trigger.
You may also use MP.CreateTimer
to make a timer and measure time passed since the last event call, in order to minimize event timers, though this is not necessarily recommended as it increases the code complexity significantly.
Since 3.0.2:
An optional CallStrategy
may be supplied as the third argument. This can be either:
MP.CallStrategy.BestEffort
(default): Will try to get your event to trigger at the specified interval, but will refuse to queue handlers if a handler takes too long.MP.CallStrategy.Precise
: Will enqueue event handlers at the exact interval specified. Can lead to the queue filling up if the handler takes longer than the interval. Only use if you NEED the exact interval.MP.CancelEventTimer(event_name: string)
","text":"Cancels all timers on the event with the name event_name
On some occasions, the timer might go off one more time before being cancelled, due to the nature of asynchronous programming.
MP.TriggerLocalEvent(event_name: string, ...) -> table
","text":"Plugin-local synchronous event trigger.
Triggers an event locally, which causes all handlers to that event in the current lua state (usually the current plugin, unless state was shared via PluginConfig.toml) to be called.
You can pass arguments to this function (...
) which are copied and sent to all handlers as function arguments.
This call is synchronous and will return once all event handlers finished.
The returned value is a table of all results. If a handler returned a value, it will be in this table, unannotated and unnamed. This can be used to \"collect\" things, or register sub-handlers for events that can be cancelled. This is practically an array.
Example:
local Results = MP.TriggerLocalEvent(\"MyEvent\")\nprint(Results)\n
"},{"location":"scripting/server/latest-server-reference/#mptriggerglobaleventevent_name-string-table","title":"MP.TriggerGlobalEvent(event_name: string, ...) -> table
","text":"Global asynchronous event trigger.
Triggers an event globally, which causes all handlers to that event in all plugins (including this plugin) to be called.
You can pass arguments to this function (...
) which are copied and sent to all handlers as function arguments.
This call is asynchronous and returns a future-like object. Local handlers (handlers in the same plugin as the caller) run synchronously and immediately.
The table returned has two functions:
IsDone() -> boolean
tells you whether all handlers have finished. You can wait until this is true by checking it and MP.Sleep
-ing for a little bit in a loop.GetResults() -> table
returns an unannotated unnamed table with all return values of all handlers. This is practically an array.Make sure to call these with Obj:Function()
syntax (:
, NOT .
).
Example:
local Future = MP.TriggerGlobalEvent(\"MyEvent\")\n-- wait until handlers finished\nwhile not Future:IsDone() do\n MP.Sleep(100) -- sleep 100 ms\nend\nlocal Results = Future:GetResults()\nprint(Results)\n
Be aware that a handler registering to \"MyEvent\" here and never returning could lock up your plugin. You likely want to keep track of how long you have waited and stop waiting after a few seconds.
"},{"location":"scripting/server/latest-server-reference/#mpsleeptime_ms-number","title":"MP.Sleep(time_ms: number)
","text":"Waits for an amount of time, specified in milliseconds.
This does not yield the execution of the lua state and nothing will execute in the state while asleep.
WARNING: Do NOT sleep for >500 ms if you have event handlers registered, unless you know exactly what you are doing. This is intended to be used to sleep for 1-100 ms, in order to wait for results or similar. A locked up (sleeping) lua state can slow the entire server down drastically if not careful.
"},{"location":"scripting/server/latest-server-reference/#mpsendchatmessageplayer_id-number-message-string","title":"MP.SendChatMessage(player_id: number, message: string)
","text":"Sends a chat message that only the specified player can see (or everyone if the ID is -1
). In the game, this will not appear as a directed message.
You can use this, for example, to tell a player why you cancelled their vehicle spawn, chat message, or similar, or to display some information about your server.
Example:
function ChatHandler(player_id, player_name, msg)\n if string.match(msg, \"darn\") then\n MP.SendChatMessage(player_id, \"Please do not use profanity.\") -- If the player sends a message containing \"darn\", notify the player and cancel the message\n return 1\n else\n return 0\n end\nend\n\nMP.RegisterEvent(\"onChatMessage\", \"ChatHandler\")\n
Example 2: function ChatHandler(player_id, player_name, msg)\n if msg == \"hello\" then\n MP.SendChatMessage(-1, \"Hello World!\") -- If the player sends the exact message \"hello\", announce to the entire server \"Hello World!\"\n return 0\n end\nend\n
"},{"location":"scripting/server/latest-server-reference/#mptriggerclienteventplayer_id-number-event_name-string-data-string-boolean","title":"MP.TriggerClientEvent(player_id: number, event_name: string, data: string) -> boolean
","text":"until v3.1.0
"},{"location":"scripting/server/latest-server-reference/#mptriggerclienteventplayer_id-number-event_name-string-data-string-booleanstring","title":"MP.TriggerClientEvent(player_id: number, event_name: string, data: string) -> boolean,string
","text":"since v3.1.0
"},{"location":"scripting/server/latest-server-reference/#mptriggerclienteventjsonplayer_id-number-event_name-string-data-table-booleanstring","title":"MP.TriggerClientEventJson(player_id: number, event_name: string, data: table) -> boolean,string
","text":"since v3.1.0
Will call the given event with the given data on the specified client (-1 for broadcast). This event can then be handled in a clientside lua mod, see the \"Client Scripting\" documentation for this.
Will return true
if it was able to send the message (for id = -1
, so broadcasts, its always true
), and false
if the player with that ID doesn't exist or is disconnected but still has an ID (this is a known issue).
If false
is returned, it makes no sense to retry this event, and a response (if any was expected) shouldn't be expected.
Since v3.1.0, the second return value contains an error message if the function failed. Also since this version, the *Json
version of the function takes a table as the data argument, and converts it to json. This is simply a shorthand for MP.TriggerClientEvent(..., Util.JsonEncode(mytable))
.
MP.GetPlayerCount() -> number
","text":"Returns the amount of players currently in the server.
"},{"location":"scripting/server/latest-server-reference/#mpgetpositionrawpid-number-vid-number-tablestring","title":"MP.GetPositionRaw(pid: number, vid: number) -> table,string
","text":"Returns the current position of the vehicle vid
(vehicle id) of player pid
(player id), and an error string if an error occurred.
The table is decoded from a position packet, so it has a variety of data including position and rotation (that's why this function is postfixed \"Raw\").
Example:
local player_id = 4\nlocal vehicle_id = 0\n\nlocal raw_pos, error = MP.GetPositionRaw(player_id, vehicle_id)\n\nif error == \"\" then\n print(raw_pos)\nelse\n print(error)\nend\n
Output: {\n tim: 49.824, // Time since spawn\n rvel: { // Rotational velocity\n 1: -1.33564e-05,\n 2: -9.16553e-06,\n 3: 8.33364e-07,\n }, \n vel: { // Velocity\n 1: -4.29755e-06,\n 2: -5.79335e-06,\n 3: 4.95236e-06,\n },\n pos: { // Position\n 1: 269.979,\n 2: -759.068,\n 3: 46.554,\n },\n ping: 0.0125, // Vehicle latency\n rot: { // Rotation\n 1: -0.00559953,\n 2: 0.00894832,\n 3: 0.772266,\n 4: 0.635212,\n },\n}\n
Example 2: local player_id = 4\nlocal vehicle_id = 0\n\nlocal raw_pos, error = MP.GetPositionRaw(player_id, vehicle_id)\nif error = \"\" then\n local x, y, z = table.unpack(raw_pos[\"pos\"])\n\n print(\"X:\", x)\n print(\"Y:\", y)\n print(\"Z:\", z)\nelse\n print(error)\nend\n
Output: X: -603.459\nY: -175.078\nZ: 26.9505\n
"},{"location":"scripting/server/latest-server-reference/#mpisplayerconnectedplayer_id-number-boolean","title":"MP.IsPlayerConnected(player_id: number) -> boolean
","text":"Whether the player is connected and if the server has received a UDP packet from them.
Example:
local player_id = 8\nprint(MP.IsPlayerConnected(player_id)) -- Check if player with ID 8 is properly connected.\n
Output: true\n
"},{"location":"scripting/server/latest-server-reference/#mpgetplayernameplayer_id-number-string","title":"MP.GetPlayerName(player_id: number) -> string
","text":"Gets the display-name of the player.
Example:
local player_id = 4\nprint(MP.GetPlayerName(player_id)) -- Get the name of the player with ID 4\n
Output: ilovebeammp2004\n
"},{"location":"scripting/server/latest-server-reference/#mpremovevehicleplayer_id-number-vehicle_id-number","title":"MP.RemoveVehicle(player_id: number, vehicle_id: number)
","text":"Removes the specified vehicle for the specified player.
Example:
local player_id = 3\nlocal player_vehicles = MP.GetPlayerVehicles(player_id)\n\n-- Loop over all of player 3's vehicles and delete them\nfor vehicle_id, vehicle_data in pairs(player_vehicles) do\n MP.RemoveVehicle(player_id, vehicle_id)\nend\n
"},{"location":"scripting/server/latest-server-reference/#mpgetplayervehiclesplayer_id-number-table","title":"MP.GetPlayerVehicles(player_id: number) -> table
","text":"Returns a table of all vehicles the player currently has. Each entry in the table is a mapping from vehicle ID to vehicle data (which is currently a raw json string).
Example:
local player_id = 3\nlocal player_vehicles = MP.GetPlayerVehicles(player_id)\n\nfor vehicle_id, vehicle_data in pairs(player_vehicles) do\n local start = string.find(vehicle_data, \"{\")\n local formattedVehicleData = string.sub(vehicle_data, start, -1)\n print(Util.JsonDecode(formattedVehicleData))\nend\n
Output: {\n pid: 0,\n pro: \"0\",\n rot: {\n 1: 0,\n 2: 0,\n 3: 0.776866,\n 4: 0.629665,\n },\n jbm: \"miramar\",\n vcf: {\n parts: {\n miramar_exhaust: \"miramar_exhaust\",\n miramar_shock_R: \"miramar_shock_R\",\n miramar_taillight: \"miramar_taillight\",\n miramar_door_RL: \"miramar_door_RL\"\n // ... continue\n },\n paints: {\n 1: {\n roughness: 1,\n metallic: 0,\n clearcoat: 1,\n baseColor: {\n 1: 0.85,\n 2: 0.84,\n 3: 0.8,\n 4: 1.2,\n },\n clearcoatRoughness: 0.09,\n } // ... continue\n },\n partConfigFilename: \"vehicles/miramar/base_M.pc\",\n vars: {},\n mainPartName: \"miramar\",\n },\n pos: {\n 1: 283.669,\n 2: -754.332,\n 3: 48.2151,\n },\n vid: 64822,\n ign: 0,\n}\n
"},{"location":"scripting/server/latest-server-reference/#mpgetplayers-table","title":"MP.GetPlayers() -> table
","text":"Returns a table of all connected players. This table maps IDs to Names, like so:
{\n 0: \"LionKor\",\n 1: \"JohnDoe\"\n}\n
"},{"location":"scripting/server/latest-server-reference/#mpisplayerguestplayer_id-number-boolean","title":"MP.IsPlayerGuest(player_id: number) -> boolean
","text":"Whether the player is a guest. A guest is someone who didn't log in, and instead chose to play as a guest. Their name is usually guest
followed by a long number.
Because guests are anonymous, you may want to disallow them to join, if so it is recommended to use the onPlayerAuth
is_guest
argument instead.
MP.DropPlayer(player_id: number, [reason: string])
","text":"Kicks the player with the specified ID. The reason parameter is optional.
function ChatHandler(player_id, player_name, message)\n if string.match(message, \"darn\") then\n MP.DropPlayer(player_id, \"Profanity is not allowed\")\n return 1\n else\n return 0\n end\nend \n
"},{"location":"scripting/server/latest-server-reference/#mpgetstatememoryusage-number","title":"MP.GetStateMemoryUsage() -> number
","text":"Returns the memory usage of the current Lua state in bytes.
"},{"location":"scripting/server/latest-server-reference/#mpgetluamemoryusage-number","title":"MP.GetLuaMemoryUsage() -> number
","text":"Returns the memory usage of all lua states combined, in bytes.
"},{"location":"scripting/server/latest-server-reference/#mpgetplayeridentifiersplayer_id-number-table","title":"MP.GetPlayerIdentifiers(player_id: number) -> table
","text":"Returns a table with information about the player, such as BeamMP forum ID, IP address and Discord account ID. Discord ID will only be returned if the user has it linked to their forum account.
You can find a users forum ID by navigating to https://forum.beammp.com/u/USERNAME.json
and looking for \"user\": {\"id\": 123456}
. A BeamMP ID is unique to the player and cannot be changed unlike the username.
Example:
local player_id = 5\nprint(MP.GetPlayerIdentifiers(player_id))\n
Output: {\n ip: \"127.0.0.1\",\n discord: \"12345678987654321\",\n beammp: \"1234567\",\n}\n
Until v3.1.0 the ip
field is incorrect and will not work as intended. Fixed in v3.1.0.
MP.Set(setting: number, ...)
","text":"Sets a ServerConfig setting temporarily. For this, the MP.Settings
table is useful.
Example:
MP.Set(MP.Settings.Debug, true) -- Turns on debug mode\n
"},{"location":"scripting/server/latest-server-reference/#mpsettings-table","title":"MP.Settings -> table
","text":"Table map of setting ID's to name. Used with MP.Set
to change ServerConfig settings.
Example:
print(MP.Settings)\n
Output: {\n MaxPlayers: 3,\n Debug: 0,\n Name: 5,\n Description: 6,\n MaxCars: 2,\n Private: 1,\n Map: 4,\n}\n
"},{"location":"scripting/server/latest-server-reference/#util-functions","title":"Util Functions","text":""},{"location":"scripting/server/latest-server-reference/#utiljson","title":"Util.Json*
","text":"Since BeamMP-Server v3.1.0
.
This is a builtin JSON library, which is usually much faster than any Lua JSON library. Behind the scenes, C++'s nlohmann::json
library is used, which is JSON compliant, full-coverage unit tested and continuously being fuzzed.
Util.JsonEncode(table: table) -> string
","text":"Encodes a Lua table into a JSON string, recursively (tables inside tables inside tables ... work as expected). All primitive types are respected, functions, userdata and similar are ignored.
The resulting JSON is minified and can be pretty-printed by using Util.JsonPrettify
to prettify it.
Example:
local player = {\n name = \"Lion\",\n age = 69,\n skills = { \"skill A\", \"skill B\" }\n}\nlocal json = Util.JsonEncode(player)\n
Results in:
{\"name\":\"Lion\",\"age\":69,\"skills\":[\"skill A\",\"skill B\"]}\n
"},{"location":"scripting/server/latest-server-reference/#utiljsondecodejson-string-table","title":"Util.JsonDecode(json: string) -> table
","text":"Decodes JSON into a Lua table. Will return nil
if this failed, and print an error.
Example:
local json = \"{\\\"message\\\":\\\"OK\\\",\\\"code\\\":200}\"\nlocal tbl = Util.JsonDecode(json)\n
Results in:
{\n message = \"OK\",\n code = 200,\n}\n
"},{"location":"scripting/server/latest-server-reference/#utiljsonprettifyjson-string-string","title":"Util.JsonPrettify(json: string) -> string
","text":"Add indentation and newlines to the json to make it more readable for humans.
Example:
local myjson = Util.JsonEncode({ name=\"Lion\", age = 69, skills = { \"skill A\", \"skill B\" } })\n\nprint(Util.JsonPrettify(myjson))\n
Results in:
{\n \"age\": 69.0,\n \"name\": \"Lion\",\n \"skills\": [\n \"skill A\",\n \"skill B\"\n ]\n}\n
"},{"location":"scripting/server/latest-server-reference/#utiljsonminifyjson-string-string","title":"Util.JsonMinify(json: string) -> string
","text":"Removes indentation, newlines and any other whitespace. Not necessary unless you called Util.JsonPrettify
, as all output from Util.Json*
is already minified.
Example:
local pretty = Util.JsonPrettify(Util.JsonEncode({ name=\"Lion\", age = 69, skills = { \"skill A\", \"skill B\" } }))\n\nprint(Util.JsonMinify(pretty))\n
Results in:
{\"age\":69.0,\"name\":\"Lion\",\"skills\":[\"skill A\",\"skill B\"]}\n
"},{"location":"scripting/server/latest-server-reference/#utiljsonflattenjson-string-string","title":"Util.JsonFlatten(json: string) -> string
","text":"Creates a JSON object whose key are flattened to JSON pointers, according to RFC 6901. You can restore the original with Util.JsonUnflatten()
. For this to work, all values need to be primitives.
Example:
local json = Util.JsonEncode({ name=\"Lion\", age = 69, skills = { \"skill A\", \"skill B\" } })\nprint(\"normal: \" ..json)\nprint(\"flattened: \" .. Util.JsonFlatten(json))\nprint(\"flattened pretty: \" .. Util.JsonPrettify(Util.JsonFlatten(json)))\n
Results in:
normal: {\"age\":69.0,\"name\":\"Lion\",\"skills\":[\"skill A\",\"skill B\"]}\nflattened: {\"/age\":69.0,\"/name\":\"Lion\",\"/skills/0\":\"skill A\",\"/skills/1\":\"skill B\"}\nflattened pretty: {\n \"/age\": 69.0,\n \"/name\": \"Lion\",\n \"/skills/0\": \"skill A\",\n \"/skills/1\": \"skill B\"\n}\n
"},{"location":"scripting/server/latest-server-reference/#utiljsonunflattenjson-string-string","title":"Util.JsonUnflatten(json: string) -> string
","text":"Restores the arbitrary nesting of a JSON value that has been flattened before using the Util.JsonFlatten()
function.
Util.JsonDiff(a: string, b: string) -> string
","text":"Creates a JSON diff according to RFC 6902 (http://jsonpatch.com/). This diff can then be applied as a patch via Util.JsonDiffApply()
. Returns the diff.
Util.JsonDiffApply(base: string, diff: string) -> string
","text":"Applies the JSON diff
to base
as a JSON patch (RFC 6902, http://jsonpatch.com/). Returns the result.
Util.Random*
","text":"Since BeamMP-Server v3.1.0
.
Util.Random() -> float
","text":"Returns a float between 0 and 1.
Example:
local rand = Util.Random()\nprint(\"rand: \" .. rand)\n
Results in:
rand: 0.135477\n
"},{"location":"scripting/server/latest-server-reference/#utilrandomintrangemin-int-max-int-int","title":"Util.RandomIntRange(min: int, max: int) -> int
","text":"Returns an integer between min and max.
Example:
local randInt = Util.RandomIntRange(1, 100)\nprint(\"randInt: \" .. randInt)\n
Results in:
randInt: 69\n
"},{"location":"scripting/server/latest-server-reference/#utilrandomrangemin-number-max-number-float","title":"Util.RandomRange(min: number, max: number) -> float
","text":"Returns a float between min and max.
Example:
local randFloat = Util.RandomRange(1, 1000)\nprint(\"randFloat: \" .. randFloat)\n
Results in:
randFloat: 420.6969\n
"},{"location":"scripting/server/latest-server-reference/#utilloginfoparams-et-al-since-v330","title":"Util.LogInfo(params: ...)
et al (since v3.3.0)","text":"Util.LogInfo(\"Hello, World!\")\nUtil.LogWarn(\"Cool warning\")\nUtil.LogError(\"Oh no!\")\nUtil.LogDebug(\"hi\")\n
produces [19/04/24 11:06:50.142] [Test] [INFO] Hello, World! \n[19/04/24 11:06:50.142] [Test] [WARN] Cool warning \n[19/04/24 11:06:50.142] [Test] [ERROR] Oh no!\n[19/04/24 11:06:50.142] [Test] [DEBUG] hi\n
Supports the exact same printing / dumping of data as print()
does.
Util.DebugExecutionTime() -> table
","text":"When Lua code runs in the server, each event handler's execution is timed. The min, max, average (mean) and standard deviation of these execution times are calculated, and are returned in a table by this function. The calculation takes place incrementally, so every time an event handler runs the min, max, average and standard deviation are updated. This way, Util.DebugExecutionTime()
does not usually take any significant amount of time to execute (sub 0.25ms).
It returns a table like this:
[[table: 0x7af6d400aca0]]: {\n printStuff: [[table: 0x7af6d400be60]]: {\n mean: 0.250433,\n n: 76,\n max: 0.074475,\n stdev: 0.109405,\n min: 0.449274,\n },\n onInit: [[table: 0x7af6d400b130]]: {\n mean: 0.033095,\n n: 1,\n max: 0.033095,\n stdev: 0,\n min: 0.033095,\n },\n} \n
Per event handler, returns the following data: n
: Amount of times the event triggered and a handler was calledmean
: Average/mean of all execution times, in msmax
: The longest execution time, in msmin
: The shortest execution time, in msstdev
: The standard deviation of all execution time averages, in msHere's a function you can use to pretty-print this data:
function printDebugExecutionTime()\n local stats = Util.DebugExecutionTime()\n local pretty = \"DebugExecutionTime:\\n\"\n local longest = 0\n for name, t in pairs(stats) do\n if #name > longest then\n longest = #name\n end\n end\n for name, t in pairs(stats) do\n pretty = pretty .. string.format(\"%\" .. longest + 1 .. \"s: %12f +/- %12f (min: %12f, max: %12f) (called %d time(s))\\n\", name, t.mean, t.stdev, t.min, t.max, t.n)\n end\n print(pretty)\nend\n
You may call it like this to debug your code if it's slow:
-- event to print the debug times\nMP.RegisterEvent(\"printStuff\", \"printDebugExecutionTime\")\n-- run every 5000 ms = 5 seconds (or 10, or 60, whatever makes sense for you\nMP.CreateEventTimer(\"printStuff\", 5000)\n
"},{"location":"scripting/server/latest-server-reference/#fs-functions","title":"FS Functions","text":"FS
functions are filesystem functions, which aim to be better than the default Lua capabilities.
Please always use /
as a separator when specifying paths, as this is cross-platform (windows, linux, macos, ...).
FS.CreateDirectory(path: string) -> bool,string
","text":"Creates the specified directory, and any parent directories if they don't exist. Behavior is roughly equivalent to the common linux command mkdir -p
.
If successful, returns true
and \"\"
. If creating the directory failed, false
and an error message (string
) is returned.
Example:
local success, error_message = FS.CreateDirectory(\"data/mystuff/somefolder\")\n\nif not success then\n print(\"failed to create directory: \" .. error_message)\nelse\n -- do something with the directory\nend\n\n-- Be careful not to do this! This will ALWAYS be true!\nif error_message then\n -- ...\nend\n
"},{"location":"scripting/server/latest-server-reference/#fsremovepath-string-boolstring","title":"FS.Remove(path: string) -> bool,string
","text":"Removes the specified file or folder.
Returns true
if an error occured, with an error message in the second return value.
Example:
local error, error_message = FS.Remove(\"myfile.txt\")\n\nif error then\n print(\"failed to delete myfile: \" .. error_message)\nend\n
"},{"location":"scripting/server/latest-server-reference/#fsrenamepatha-string-pathb-string-boolstring","title":"FS.Rename(pathA: string, pathB: string) -> bool,string
","text":"Renames (or moves) pathA
to pathB
.
Returns true
if an error occured, with an error message in the second return value.
FS.Copy(pathA: string, pathB: string) -> bool,string
","text":"Copies pathA
to pathB
.
Returns true
if an error occured, with an error message in the second return value.
FS.GetFilename(path: string) -> string
","text":"Returns the last part of a path, which is usually the filename. Here are some example inputs + outputs:
input -> output\n\n\"my/path/a.txt\" -> \"a.txt\"\n\"somefile.txt\" -> \"somefile.txt\"\n\"/awesome/path\" -> \"path\"\n
"},{"location":"scripting/server/latest-server-reference/#fsgetextensionpath-string-string","title":"FS.GetExtension(path: string) -> string
","text":"Returns the extension of the file, or an empty string if no extension exists. Here are some example inputs + outputs
input -> output\n\n\"myfile.txt\" -> \".txt\"\n\"somefile.\" -> \".\"\n\"/awesome/path\" -> \"\"\n\"/awesome/path/file.zip.txt\" -> \".txt\"\n\"myexe.exe\" -> \".exe\"\n
"},{"location":"scripting/server/latest-server-reference/#fsgetparentfolderpath-string-string","title":"FS.GetParentFolder(path: string) -> string
","text":"Returns the path to the parent directory, i.e. the folder a file or folder is contained in. Here are some example inputs + outputs:
input -> output\n\n\"/var/tmp/example.txt\" -> \"/var/tmp\"\n\"/\" -> \"/\"\n\"mydir/a/b/c.txt\" -> \"mydir/a/b\"\n
"},{"location":"scripting/server/latest-server-reference/#fsexistspath-string-bool","title":"FS.Exists(path: string) -> bool
","text":"Returns true
if the path exists, false
if it doesn't.
FS.IsDirectory(path: string) -> bool
","text":"Returns true
if the specified path is a directory, false
if it's not. Note that false
does NOT imply that the path is a file (see FS.IsFile()
).
FS.IsFile(path: string) -> bool
","text":"Returns true
if the specified path is a regular file (not a symlink, hardlink, block device, etc.), false
if it's not. Note taht false
does NOT imply that the path is a directory (see FS.IsDirectory()
).
FS.ListDirectories(path: string) -> table
","text":"Returns a table of all the directories in the given path.
Example:
print(FS.ListDirectories(\"Resources\"))\n
Results in: {\n 1: \"Client\",\n 2: \"Server\"\n}\n
"},{"location":"scripting/server/latest-server-reference/#fslistfilespath-string-table","title":"FS.ListFiles(path: string) -> table
","text":"Returns a table of all the files in the given path.
Example:
print(FS.ListFiles(\"Resources/Server/examplePlugin\"))\n
Results in: {\n 1: \"example.json\",\n 2: \"example.lua\"\n}\n
"},{"location":"scripting/server/latest-server-reference/#fsconcatpaths-string","title":"FS.ConcatPaths(...) -> string
","text":"Adds together (concatenates) all arguments with the system's preferred path separator.
Example:
FS.ConcatPaths(\"a\", \"b\", \"/c/d/e/\", \"/f/\", \"g\", \"h.txt\")\n
results in a/b/c/d/e/f/g/h.txt\n
Also resolves ..
, if that exists in the path at any point. This function is safer than concatenating strings in lua, and respects the platform's separators.
Please always use /
as a separator when specifying paths, as this is cross-platform (windows, linux, macos, ...).
1
, like return 1
.A player join triggers the following events in the given order:
onPlayerAuth
onPlayerConnecting
onPlayerJoining
onPlayerJoin
onInit
","text":"Arguments: NONE Cancellable: NO
Triggered right after all files in the plugin were initialized.
"},{"location":"scripting/server/latest-server-reference/#onconsoleinput","title":"onConsoleInput
","text":"Arguments: input: string
Cancellable: NO
Triggered when the BeamMP console receives an input.
"},{"location":"scripting/server/latest-server-reference/#onshutdown","title":"onShutdown
","text":"Arguments: NONE Cancellable: NO
Triggered when the server shuts down. Currently happens after all players were kicked.
"},{"location":"scripting/server/latest-server-reference/#game-related-events","title":"Game-Related Events","text":""},{"location":"scripting/server/latest-server-reference/#onplayerauth","title":"onPlayerAuth
","text":"Arguments: player_name: string
, player_role: string
, is_guest: bool
, identifiers: table -> beammp, ip
Cancellable: YES
First event that gets triggered when a player wants to join. A player can be denied from joining by returning 1
or a reason (string
) from the handler function.
function myPlayerAuthorizer(name, role, is_guest, identifiers)\n return \"Sorry, you cannot join at this time.\"\nend\nMP.RegisterEvent(\"onPlayerAuth\", \"myPlayerAuthorizer\")\n
"},{"location":"scripting/server/latest-server-reference/#onplayerconnecting","title":"onPlayerConnecting
","text":"Arguments: player_id: number
Cancellable: NO
Triggered when a player first starts connecting, after onPlayerAuth
.
onPlayerJoining
","text":"Arguments: player_id: number
Cancellable: NO
Triggered when a player has finished loading all mods, after onPlayerConnecting
.
onPlayerDisconnect
","text":"Arguments: player_id: number
Cancellable: NO
Triggered when a player disconnects.
"},{"location":"scripting/server/latest-server-reference/#onchatmessage","title":"onChatMessage
","text":"Arguments: player_id: number
, player_name: string
, message: string
Cancellable: YES
Triggered when a player sends a chat message. When cancelled, it will not show the chat message to anyone, not even the player who sent it.
"},{"location":"scripting/server/latest-server-reference/#onvehiclespawn","title":"onVehicleSpawn
","text":"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.
onVehicleEdited
","text":"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 to get positional and rotational data.
onVehicleDeleted
","text":"Arguments: player_id: number
, vehicle_id: number
Cancellable: NO
Triggered when a player deletes their vehicle.
"},{"location":"scripting/server/latest-server-reference/#onvehiclereset","title":"onVehicleReset
","text":"Arguments: player_id: number
, vehicle_id: number
, data: string
Cancellable: NO
Triggered when a player resets their vehicle. data
is the car's updated position and rotation however does not include the vehicles configuration. You can use MP.GetPlayerVehicles to get the vehicles configuration.
onFileChanged
","text":"since v3.1.0
Arguments: path: string
Cancellable: NO
Triggered if a file changes in the Resources/Server
directory or any subdirectory of it.
Any file change in the Resources/Server/<plugin>
directory (not in a subfolder of it) will trigger a Lua state reload, and an onFileChanged
event.
Any file in subfolders of Resources/Server/<plugin>
, such as Resources/Server/<plugin>/lua/stuff.lua
, will not trigger a state reload and will only trigger an onFileChanged
event. This way, you can reload it yourself in the correct way (or not reload it).
This applies to all files, not just .lua
files.
The path
is relative to the root of the server, for example Resources/Server/myplugin/myfile.txt
. You can do further processing on this string with the FS.*
family of functions, such as extracting the name or extension (FS.GetExtension(...)
, FS.GetFilename(...)
, ...).
Note: Files added after the server is started are not tracked as of v3.1.0.
"},{"location":"scripting/server/latest-server-reference/#migrating-from-old-lua","title":"Migrating from old Lua","text":"This is a short run-down of the basic steps to take to migrate from old to new lua.
"},{"location":"scripting/server/latest-server-reference/#understand-how-the-new-lua-works","title":"Understand how the new lua works","text":"For this, please read through the section \"Introduction\" and all its subsections carefully. It's necessary to do the next steps properly.
"},{"location":"scripting/server/latest-server-reference/#search-replace","title":"Search & Replace","text":"First, you should search and replace all MP functions. The substitution should add an MP.
infront of all MP functions, except print()
.
Example:
local players = GetPlayers()\nprint(#players)\n
becomes local players = MP.GetPlayers()\nprint(#players) -- note how print() doesn't change\n
"},{"location":"scripting/server/latest-server-reference/#goodbye-threads-hello-event-timers","title":"Goodbye Threads, Hello Event Timers!","text":"As discussed in the introduction, threads are event timers. For any calls to CreateThread
, replace it with a call to CreateEventTimer
. Carefully inspect the timing your old CreateThread had (the number was X per second), and think about what the event timer timeout value is for this (which is in milliseconds). Also keep in mind that instead of a function name, it takes an event name, so you will have to register an event as well.
Example:
CreateThread(\"myFunction\", 2) -- calls \"myFunction\" twice per second\n
becomes MP.RegisterEvent(\"myEvent\", \"myFunction\") -- registering our event for the timer\nMP.CreateEventTimer(\"myEvent\", 500) -- 500 milliseconds = 2 times per second\n
If you have many event timers, it makes sense to see if you can combine them, e.g. by creating a \"every minute\" event and registering multiple functions to it which need to be called every minute, instead of having multiple event timers. Each event timer costs the server a little bit of time to trigger.
"},{"location":"scripting/server/latest-server-reference/#no-more-implicit-event-calling","title":"No more implicit event calling","text":"You need to register all your events. You cannot rely on function names. In the old lua, this was unclear, but in the new lua this is usually enforced. A good pattern is:
MP.RegisterEvent(\"onChatMessage\", \"chatMessageHandler\")\n-- or \nMP.RegisterEvent(\"onChatMessage\", \"handleChatMessage\")\n
This is a better pattern than calling the handler the same as the event, which is misleading and confusing.
"},{"location":"scripting/server/v2-server-reference/","title":"Version 2.X (Deprecated)","text":"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.
"},{"location":"scripting/server/v2-server-reference/#server-scripting-reference","title":"Server Scripting Reference","text":""},{"location":"scripting/server/v2-server-reference/#server-version-2x","title":"Server Version 2.X","text":"Warning
BeamMP server version 2.X is now unsupported. This documentation is provided as a reference only. Please update to the latest version for maintenance and support.
This is 2.x scripting. Only refer to this if your server is old/outdated (version 2.x.x). For the latest documentation see here.
"},{"location":"scripting/server/v2-server-reference/#notes","title":"Notes","text":"To get the output of a function in the server console you have to wrap it in a print()
statement. For example: print(GetPlayerName(0))
will return the name of your server's first player.
<PlayersServerID>
starts at 0.
Returns the player's discord name as a string
function onPlayerJoin(playerID)\n local name = GetPlayerName(playerID)\n -- Do something\nend\n
"},{"location":"scripting/server/v2-server-reference/#getplayerdiscordidplayersserverid","title":"GetPlayerDiscordID(playersServerID)","text":"Returns the player's discord name as a string
function onPlayerJoin(playerID)\n local name = GetPlayerDiscordID(playerID)\n -- Do something\nend\n
"},{"location":"scripting/server/v2-server-reference/#getplayerhwidplayersserverid","title":"GetPlayerHWID(playersServerID)","text":"Returns the player's discord ID as a string
function onPlayerJoin(playerID)\n local name = GetPlayerHWID(playerID)\n -- Do something\nend\n
"},{"location":"scripting/server/v2-server-reference/#getplayervehiclesplayersserverid","title":"GetPlayerVehicles(playersServerID)","text":"Returns the player's vehicles as an object/array
function onChatMessage(playerID, senderName, message)\n local vehicleList = GetPlayerVehicles(playerID)\n for vehicleID, vehicleData in pairs(vehicleList) do\n -- Do something\n -- Could also be used to check how many vehicles a player have\n end\nend\n
"},{"location":"scripting/server/v2-server-reference/#dropplayerplayersserverid","title":"DropPlayer(playersServerID)","text":"Drops the connection for a specific player. Essentially Kicking them
function onVehicleSpawn(playerID, vehicleID, vehicleData)\n -- Do something \n DropPlayer(playerID)\nend\n
"},{"location":"scripting/server/v2-server-reference/#sendchatmessageplayersserverid-message","title":"SendChatMessage(playersServerID, message)","text":"Sends a message over the network to the specified user. Use -1 for everyone
function onPlayerJoin(playerID)\n SendChatMessage(-1, \"Someone just joined!\")\nend\n
"},{"location":"scripting/server/v2-server-reference/#cancelevent-depreciated","title":"CancelEvent() -- DEPRECIATED","text":"Cancels the event from happening. This might be going soon. Use return 1
to cancel the event.
If declared in a lua file, it will be called once C++ successfully finished loading the current lua file
function onInit()\n print(\"Server ready\")\nend\n
"},{"location":"scripting/server/v2-server-reference/#exit","title":"exit()","text":"Will close the server
function onInit()\n print(\"Server Ready. But who needs a server which is running\")\n exit() -- Stops the server\nend\n
"},{"location":"scripting/server/v2-server-reference/#createthreadfunctionname-callinterval","title":"CreateThread(functionName, callInterval)","text":"Will execute the function on a dedicated thread and it will run callInterval times a second. 1 = It will run every second.
function yourFunction()\n for i = 1,10 do\n SendChatMessage(-1, \"Countdown: \"..i)\n Sleep(1000)\n end\nend\nCreateThread(\"yourFunction\", 30)\n
DEPRECIATED EXAMPLE Will execute the function on a dedicated thread
function yourFunction()\n for i = 1,10 do\n SendChatMessage(-1, \"Countdown: \"..i)\n Sleep(1000)\n end\nend\nCreateThread(\"yourFunction\", 30)\n
"},{"location":"scripting/server/v2-server-reference/#stopthreadfunctionname","title":"StopThread(functionName)","text":"Will stop trying to call the thread function of the current script
function yourFunction()\n delayExpired = false\n Sleep(10000)\n delayExpired = true\nend\nCreateThread(\"yourFunction\", 30)\n-- Do something\nif not delayExpired then\n StopThread(\"yourFunction\")\nelse\n -- Do something\nend\n
"},{"location":"scripting/server/v2-server-reference/#sleepmillisecs-depreciated","title":"Sleep(millisecs) - DEPRECIATED","text":"Will pause execution for the amount of time specified (warning doing so will pause the entire server if you didn't create a thread)
function countdown()\n for i = 1,10 do\n SendChatMessage(-1, \"Countdown: \"..i)\n Sleep(1000)\n end\nend\nCreateThread(\"countdown\", 10)\n
"},{"location":"scripting/server/v2-server-reference/#getplayercount","title":"GetPlayerCount()","text":"Will return how many players are connected
function onPlayerJoin(playerID)\n SendChatMessage(playerID, \"You are the \"..GetPlayerCount()..\"th player!\"\nend\n
"},{"location":"scripting/server/v2-server-reference/#removevehicleplayerserverid-vehicleid","title":"RemoveVehicle(playerServerID, VehicleID)","text":"Will despawn a vehicle
function onVehicleSpawn(playerID, vehicleID, vehicleData)\n if --[[ Vehicle data equal something it shouldn't be ]] then\n RemoveVehicle(playerID, vehicleIID)\n end\nend\n
"},{"location":"scripting/server/v2-server-reference/#getplayers","title":"GetPlayers()","text":"Will return a table of IDs with Names
local function onPlayerJoin(joinedPlayerID)\n local players = GetPlayers()\n for playerID, playerName in pairs(players) do\n if playerID == joinedPlayerID then\n -- Do something\n end\n end\nend\n
"},{"location":"scripting/server/v2-server-reference/#registereventeventname-functionname","title":"RegisterEvent(eventName, functionName)","text":"Will register that function to the event specified. Both must be strings
function anyEvent()\n -- Do something\n end\n RegisterEvent(\"onAnyEventHappen\", \"anyEvent\")\n -- Do something\n TriggerLocalEvent(\"onAnyEventHappen\")\n
"},{"location":"scripting/server/v2-server-reference/#triggerlocaleventeventname","title":"TriggerLocalEvent(eventName)","text":"Will call every registered function in the same plugin folder.
function anyEvent()\n -- Do something\n end\n RegisterEvent(\"onAnyEventHappen\", \"anyEvent\")\n -- Do something\n TriggerLocalEvent(\"onAnyEventHappen\")\n
"},{"location":"scripting/server/v2-server-reference/#triggerglobaleventeventname","title":"TriggerGlobalEvent(eventName)","text":"Will call every registered function with this event name.
-- File A\n function anyEvent()\n -- Do something\n end\n RegisterEvent(\"onAnyEventHappen\", \"anyEvent\")\n
-- File B\n TriggerGlobalEvent(\"onAnyEventHappen\")\n
"},{"location":"scripting/server/v2-server-reference/#triggerclienteventplayerserverid-eventname-data","title":"TriggerClientEvent(playerServerID, eventName, data)","text":"Will call that event with the given data on the specified client (-1 for broadcast)
function onPlayerJoin(playerServerID)\n TriggerClientEvent(playerServerID, \"anyEvent\", \"You just joined the server\")\n end\n RegisterEvent(\"onAnyEventHappen\", \"anyEvent\")\n
"},{"location":"scripting/server/v2-server-reference/#setconfigid-newvalue","title":"Set(configID, newValue)","text":"will set a config setting to the new specified value table below|
function onChatMessage(playerID, senderName, message)\n if playerID == adminPlayer then\n if message == --[[ anything ]] then\n Set(3, 10)\n end\n end\n end\n
"},{"location":"scripting/server/v2-server-reference/#list-of-available-config-settings-for-the-set-command","title":"List of available config settings for the Set()
command","text":"Note that these will not save to the config file.
Config ID Name Will only accept0
Debug setting true or false 1
Private setting true or false 2
Max car per player number 3
Max players number 4
Map string 5
Name string 6
Description string any other ID will result in a console warning"},{"location":"scripting/server/v2-server-reference/#list-of-available-events-for-scripting","title":"List of available events for scripting","text":""},{"location":"scripting/server/v2-server-reference/#default-events","title":"Default Events","text":"Example of how to use an event:
function onInit()\n RegisterEvent(\"onPlayerJoin\", \"onPlayerJoin\")\n end\n\n function onPlayerJoin(playerServerID)\n -- Do something\n end\n
If you dont want guests on your server:
function onInit()\n print(\"noGuests Ready\")\n RegisterEvent(\"onPlayerAuth\",\"onPlayerAuth\")\n end\n\n function onPlayerAuth(name, role, isGuest)\n if isGuest then\n return \"You must be signed in to join this server!\"\n end\n end\n
Event Parameters Description onPlayerAuth
The player's name, forum role, guest account (bool) A player has authenticated and is requesting to join onPlayerConnecting
The player's ID A player is loading in (Before loading the map) onPlayerJoining
The player's ID A player is loading the map and will be joined soon onPlayerJoin
The player's ID A player has joined and loaded in onPlayerDisconnect
The player's ID A player has disconnected onChatMessage
The sender's ID, name, and the chat message A chat message was sent. This would be good for making a commands system onVehicleSpawn
The player's ID, the vehicle ID, and the vehicle data This is called when someone spawns a vehicle onVehicleEdited
The player's ID, the vehicle ID, and the vehicle data This is called when someone edits a vehicle, or replaces their existing one onVehicleDeleted
The player's ID and the vehicle ID This is called when someone deletes a vehicle they own"},{"location":"scripting/server/v2-server-reference/#custom-events","title":"Custom Events","text":"Custom events can also be created for your own use. This is done very much the same to how the default ones are done.
Example of how to use a custom event:
function onInit()\n RegisterEvent(\"myCustomEvent\", \"myCustomEvent\")\n end\n\n function myCustomEvent(playerServerID, customData)\n -- Do something\n end\n
This can then be called either from client side or serverside using the respective functions.
"},{"location":"scripting/server/v2-server-reference/#players","title":"Players","text":"When a player connects to your server, they are assigned a serverID starting from 0 and counting upwards. serverIDs are reused; if a player leaves and re-joins they will not be assigned a new serverID, they will simply get another available one. When the server restarts, serverIDs will be reset.
"},{"location":"scripting/server/v2-server-reference/#static-identifiers","title":"Static Identifiers","text":"Players in BeamMP have 3 static identifiers which can be obtained from their serverID being their name, discordID, and their hardwareID or HWID. (though the latter of the aforementioned isn't implemented, we will act as if it is) Each of the three ID types has their own origins and strength's/weaknesses to using them for player identification.
ID TYPE PROS CONS FUNCTION TO OBTAIN name easy to obtain, straightforward not secure GetPlayerName() discordID fairly secure inconvenient GetPlayerDiscordID() HWID extremely secure hard to obtain GetPlayerHWID()"},{"location":"scripting/server/v2-server-reference/#vehicles","title":"Vehicles","text":"Vehicles in beamMP have 3 attributes that the server pays attention to, the owner's serverID, the vehicles vehicleID and it's data. The Owner's serverID is straight forward, it is the serverID, every vehicle also has an ID, vehicle IDs are not unique to the vehicle; two vehicles may have the same ID, assuming they're from different owners. Unlike serverIDs, vehicleIDs are reused, for example, if I have 4 vehicles, their IDs are 0, 1, 2 and, 3 if I delete the vehicle in vehicleID 2, I will have 0, 1 and, 3, when I spawn a new vehicle, the new vehicle will slot into ID 2. Lastly, the last attribute vehicles have is data, data contains a vehicle, name, parts, and other data; as the name implies. data is stored as a raw JSON string, so you will need a JSON library alternatively, you can manually step through the string and dig out the information you need.
"},{"location":"server/create-a-server/","title":"Server Installation","text":""},{"location":"server/create-a-server/#creating-a-server","title":"Creating a Server","text":"Basics of setting up the server application
"},{"location":"server/create-a-server/#overview","title":"Overview","text":"Creating a Home Server is free, hosting one with a VPS is easier and more secure
Servers are an integral part of BeamMP; players are connected to each other through the server. They run natively on Windows and Linux.
You can make private servers, which only people you invite can join, or public servers, which will show in our official server list.
Getting a server up and running is a process of a few steps! If you run into any issues, feel free to ask on our Forum or on our Discord server in the #support
channel. Also refer to the Server Maintenance section for more info.
Please make sure to read the LICENSE of the server before use.
Note: The server only supports IPv4. If you don't know which one you have, look at the IP address you see on whatsmyip.org - if it contains _:_
colons, it's IPv6. In that case, you should investigate further whether you also have an IPv4. You can call your ISP to find this out, or ask someone who lives with you (if they're tech-savvy, they might know!). IPv6 support is planned.
The setup consists of the following steps, you should follow all of them.
"},{"location":"server/create-a-server/#1-port-forwarding","title":"1. Port forwarding","text":"Info
If you are on a VPS (Virtual Private Server), Rootserver, or plan on hosting this server locally (with players in the same house as you), you can skip this step. This step is necessary if you want someone outside of your household to join your home-hosted server (outside of your local network).
DISCLAIMER:
Port forwarding is a risk.
By port forwarding, you understand the risks of opening up ports on your home network to the public and therefore void the right to hold BeamMP accountable for any and all damages that may happen to you or your household.
We take no responsibility for any content on any externally linked services or websites.
It is therefore recommended to host a server with one of our partnered services!
Please see this guide on how to port forward
"},{"location":"server/create-a-server/#partnered-hosting-services-paid","title":"Partnered Hosting Services (paid):","text":"Depending on your setup, you may need to let BeamMP-Server through your firewall. This is the case on Windows (turning the firewall off usually does not work), and on a lot of preinstalled Linux servers.\u00a0
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 \u201c1. Port Forwarding\u201d (usually 30814).
If you have issues, also feel free to ask on our Forum or on our Discord server in the #support
channel.
The \u201cAuthentication Key\u201d, often called \u201cAuthKey\u201d, is necessary for making a public server accessible by the serverlist. Though it is recommended to add the authkey to private servers as well. You have a limited number of keys. One key can be used on one server at a time, so you cannot start two servers at the same time with the same key. More keys can be obtained by supporting the project. Read this article for more information.
Warning
DO NOT EVER SHARE THIS KEY OR SHOW IT TO ANYONE. TREAT THIS LIKE A PASSWORD.
You will need a Discord account for this step. This is necessary to prevent spam.
"},{"location":"server/create-a-server/#21-accessing-the-keys-page","title":"2.1. Accessing the keys page","text":"Login with Discord to the Keymaster. From the Keymaster homepage click on \"Keys\" on the left of the screen:
"},{"location":"server/create-a-server/#22-creating-a-key","title":"2.2. Creating a key","text":"To create your key, click on the green \"+\" button in the top right.\u00a0
"},{"location":"server/create-a-server/#23-filling-out-the-key-information","title":"2.3. Filling out the key information","text":"Next, fill out the Server Name field (this is just the keys name and not the actual name of the server on the list), then click \"Create\". Example:
It should, in the end, look something like this:
"},{"location":"server/create-a-server/#24-copying-the-key","title":"2.4. Copying the key","text":"Now copy the text in the \u201cKey\u201d field, in this example that is 3173a2e-6az0-4542-a3p0-ddqq5ff95558
and hold onto it for the next step. You can do this by clicking the clipboard on the right of the key:
The BeamMP-Server is available for Windows and Linux. The next two sections are dedicated to Windows and Linux each.\u00a0
"},{"location":"server/create-a-server/#3a-installation-on-windows","title":"3.a. Installation on Windows","text":"For the Linux installation, see the next step.
Please ensure you have port-forwarded before attempting to host a server at home! Without you ports being forwarded, you cannot host a server to the public!
BeamMP-Server.exe
.BeamMP-Server.exe
there. This is where your server will live.ServerConfig.toml
file next to your BeamMP-Server.exe
.BeamMP-Server.exe
using [Right click] > Send to > Desktop (create shortcut).Now proceed to step 4. Configuration.
"},{"location":"server/create-a-server/#3b-installation-on-linux","title":"3.b. Installation on Linux","text":""},{"location":"server/create-a-server/#using-our-build-recommended","title":"Using our build (recommended)","text":"This step will work on all distributions we provide binaries for here. If you're on a different distribution or architecture, refer to the \"Building from source\u201d step below.
BeamMP-Server-xxx
from now on, where xxx
denotes the version for the distro you're using.BeamMP-Server-xxx
, among others which you can ignore for now. Make a folder somewhere and put the BeamMP-Server-xxx
there. This is where your server will live.BeamMP-Server-xxx
in, and run chmod +x BeamMP-Server-xxx
. This ensures that you have permissions to run it../BeamMP-Server-xxx
. This will generate all the necessary files for you, once you see text you can close it and proceed to the next step. You should see a ServerConfig.toml
file next to your BeamMP-Server-xxx
.beammpserver
(or similar), as we do NOT recommend running the server as root, sudo or with your personal user account. You should then take steps to make sure that you start the server as this user only.Now proceed to step \"4. Configuration\".
"},{"location":"server/create-a-server/#building-from-source","title":"Building from source","text":"Other distributions in addition to the ones that already have a binary here are likely to work too, but aren't officially supported. If you want to build it yourself you can do it by downloading the source on our GitHub, a tutorial can be found here.
At the end, make sure to run your server once with ./BeamMP-Server
and then proceed to the next step.
Now that you ran the server once, it should have created some files and probably uttered an error or two. This is because we are not yet done. Your folder should have these files:
They are called \u201cServerConfig.toml\u201d, \u201cServer.log\u201d and \u201cBeamMP-Server.exe\u201d! (Depending on your settings, you might not see the [.toml] [.log] [.exe] extentions)
Open the ServerConfig.toml
with a text editor such as Notepad
. You can do this with [Right Click] \u2192 \u201cOpen With\u2026\u201d and then selecting a text editor.
You should see something like this:
[General]\nAuthKey = ''\nDebug = false\nDescription = 'BeamMP Default Description'\nMap = '/levels/gridmap_v2/info.json'\nMaxCars = 1\nMaxPlayers = 10\nName = 'BeamMP Server'\nPort = 30814\nPrivate = false\nResourceFolder = 'Resources'\n
This is your configuration file. It uses a format called TOML. Refer to the Server Maintenance section for more info on this file.
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:
AuthKey = '3173a2e-6az0-4542-a3p0-ddqq5ff95558'\n
Give your server a name, too, in the Name
field. You can format this with colors and more, please refer to this section on Name customization in the server maintenance page. 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
.
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.
Vehicle mods and map mods are different to install, but both require you to put them in your server's (Resources/Client
) folder. Simply slide any mod you want to add in that folder.
Warning
Should you receive a \"done\" or \"start\" message when trying to join your server after adding mods, you likely added an incompatible or broken mod to your server. Mod incompatibilities can also occur between 2 or more mods. If you have client mods installed, check this guide about removing mods from your game.
"},{"location":"server/create-a-server/#52-general-mods","title":"5.2 General Mods","text":"If you only wanted to add modded vehicles, you simply put the zip file of the mod in the Resources/Client
folder. They will automatically be downloaded by anyone who joins your server.
All default maps (maps which aren't mods) work out-of-the-box and do not have to be installed. You simply change the Map
setting in the ServerConfig.toml
file to any of these. For any other modded maps, do this:
.zip
file in your server's (Resources/Client
) folder.levels
folder. In this folder there should be simply one other folder with the name of the map, for example \u201cmyawesomedriftmap2021\u201d. Make sure to copy or remember this name exactly as it is written in that folder's name.ServerConfig.toml
. In the Map
setting, you should see /levels/MAPNAME/info.json
, where MAPNAME
is likely something like gridmap_v2
. You want to now replace this MAPNAME
with the name of the folder from the last step, in that example it was myawesomedriftmap2021
. In the end it should look like this (for this example) and should have /info.json
at the end.Map = '/levels/myawesomedriftmap2021/info.json'\n
Now, when someone joins your server, it should download the map automatically and work as expected.\u00a0
If this does NOT work, install the map in your singleplayer BeamNG.drive, launch it and enter the map. Then, open the Console by pressing the ~
(tilde) key (if you're on a non-US keyboard, look at the Toggle System Console action in the Options > Controls > Bindings menu, under the General Debug section), and run print(getMissionFilename())
. This should then show you the name to use.\u00a0
That's it! Your modded map should now be available to join!
"},{"location":"server/create-a-server/#6-how-to-join-your-server","title":"6. How to join your server","text":"How you and other players can join your server.
"},{"location":"server/create-a-server/#6a-joining-your-own-server-both-private-and-public","title":"6.a. Joining your own server (both private and public)","text":"If your server is hosted on the same PC as the game runs on, you must join your server by direct connecting, to do this, click the Direct Connect Tab on the left from the server list. Leave the default info in there (should be 127.0.0.1 and corresponding port) then hit connect.
If your server is hosted on another PC in your local network, you must find the local IP of that machine and direct connect using this local IP.
If your server is hosted outside of your house (e.g. VPS) you must find the public IP of that machine and direct connect that way.
"},{"location":"server/create-a-server/#6b-other-people-joining-your-private-server","title":"6.b. Other people joining your private server","text":"You have to give other users the public IP Address of your Server. However, be careful sharing your public IP address with strangers! To join your private server the players must go to the Direct Connect Tab in BeamMP, then type your IP and Port.
"},{"location":"server/create-a-server/#6c-other-people-joining-your-public-server","title":"6.c. Other people joining your public server","text":"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 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. To check if you have a CGNAT IPv4, look up the WAN IP Address on your routers interface. Compare it to your public IP. If they're the same, you are not behind a CGNAT. IPv6 Support is NOT yet implemented.
"},{"location":"server/create-a-server/#7-how-to-check-the-connectivity-of-your-beammp-server","title":"7. How to check the connectivity of your BeamMP-Server","text":"Enter the servers public IPv4 and Port below, then click \"CheckBeamMP\".
IP adress: Port:I want to use a VPN such as RadminVPN, Hamachi, or similar.
BeamMP does not support these VPNs, as they often cause issues. One of these issues is UDP traffic not being forwarded. To resolve this, refer to section 1.
But why has it worked in the past?
This is due to the developers of these applications updating their software and implementing changes which BeamMP has no control over. It is up to the developers of these applications to provide support for specific use cases like a BeamMP-Server.
"},{"location":"server/create-a-server/#still-facing-issues","title":"Still facing issues?","text":"Open a Thread on the Forum or on our Discord server in the #support
channel.
This page contains all the error codes that the server may display.
Code Description Possible solution 10022 There is an issue with binding to the port Check if the port for the server is already in use by another service, if it is use another one. 10048 Address already in use Another BeamMP server or program is running on that port, use another one. 10051 Network unreachable Bad port forwarding or similar issues, verify that it is all set up correctly. 10052 Network reset Happens if the network drops connection while a connection is being established. Retry the connection. 10053 Connection aborted Caused by timeout or network error, retry the connection. 10054 Connection reset by peer A client has disconnected from your server. 10060 Connection timed out There is an issue with your port forwarding, please refer to the guide steps. 10061 Connection refused There is an issue with your port forwarding, please refer to the guide steps. 10064 Host down Unlikely error, but it means that the host is down because either it's shutdown or ports were closed. 10065 Host not reachable No internet or bad port forwarding, please refer to the guide steps.Note
For any other code not in this list, you can refer to https://learn.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2 if you know a bit how networks / sockets work.
"},{"location":"server/manual/","title":"Server Manual","text":""},{"location":"server/manual/#environment","title":"Environment","text":"The server is affected by the state of various external parameters:
The resources folder is created upon startup of the server, together with the \"Client\" and \"Server\" subdirectories. The \"Server\" subdirectory accepts folders within it, each containing at least one .lua
file. Each of these folders in the \"Server\" subdirectory is called a \"Plugin\". .lua
files contained in the top-level directory of a plugin are hot-reloaded on change. The \"Client\" subdirectory accepts only .zip
files, which are loaded when the server starts, and assumed to not change during runtime.
As of Server release v3.2.0, the BeamMP Server accepts environment variables, which override settings in the ServerConfig.toml. All ServerConfig variables which exist in the \"General\" category/section are PascalCase, the environment variables are ALL_CAPS and prefixed with BEAMMP_
. For example, the MaxPlayers
setting converted to ALL_CAPS is MAX_PLAYERS
(note the _
where a new word starts), and prefixed it becomes BEAMMP_MAX_PLAYERS
. This is the format followed for all \"General\" settings. The follwing ENV variables exist:
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
Any environment variables corresponding to config parameters which are strings or numbers must be strings, for example BEAMMP_NAME=\"Cool Server\"
, BEAMMP_NAME=Server1
, BEAMMP_PORT=12345
. Environment variables corresponding to config parameters which are booleans (true/false, on/off) must be either true
or 1
(both meaning ON), or any other value (meaning OFF).
These environment variables allow hosting providers (and other users with a larger number of servers), here called \"providers\", to overwrite certain provider-specific settings.
"},{"location":"server/manual/#beammp_provider_port_env-since-v330","title":"BEAMMP_PROVIDER_PORT_ENV
(since v3.3.0)","text":"When set to a non-empty string, this replaces the BEAMMP_PORT
variable with another, in order to read the variable from an existing ENV. For example, Pterodactyl may expose SERVER_PORT
as an ENV. To use it with BeamMP-Server, you'd have to do BEAMMP_PORT=${SERVER_PORT}
, which is a little silly.
Instead, you can now use BEAMMP_PROVIDER_PORT_ENV=\"SERVER_PORT\"
, which leads BeamMP-Server to read the port from the SERVER_PORT
ENV variable.
BEAMMP_PROVIDER_DISABLE_CONFIG
(since v3.3.0)","text":"If set to 1
or true
, the ServerConfig.toml
is not generated, and is not read if it exists. The BEAMMP_AUTH_KEY
must be set in order for the server to function.
BEAMMP_PROVIDER_UPDATE_MESSAGE
(since v3.2.2)","text":"When set to a non-empty string, this replaces the entire update message, which by default is \"NEW VERSION IS OUT! Please update to the new...\" etc. It is REQUIRED that the update message you provide contains {}
somewhere, which the server will replace with the new version number. For example, your update message could look like:
BEAMMP_PROVIDER_UPDATE_MESSAGE=\"NEW VERSION of the BeamMP-Server has been released: {}! Please follow the update guide here: https://example.com/update-guide\"\n
Which would result in an update message like NEW VERSION of the BeamMP-Server has been released: v5.0.2! Please follow the update guide here: https://example.com/update-guide\n
Please take care to make it clear to the users that they should update, and explain how to update.
"},{"location":"server/manual/#commandline-arguments","title":"Commandline arguments","text":"Run the BeamMP Server with the --help
argument to learn more. For example: ./BeamMP-Server --help
.
This file is generated on first startup. Comments inside the file are the most up-to-date way to understand what each setting does.
"},{"location":"server/manual/#working-directory","title":"Working directory","text":"The working directory of the server, not the location of the server executable, is the deciding factor on where the ServerConfig.toml, server log files, and Resources folder, are generated.
"},{"location":"server/manual/#limitations","title":"Limitations","text":"The following limitations are enforced in the BeamMP Backend, which affects the Servers:
DISCLAIMER:
Port forwarding is a risk.
By Port forwarding you understand the risks of opening up ports on your home network to the public and therefore void the right to hold BeamMP accountable for any and all damages that may happen to you or your household.
We take no responsibility for any content on any externally linked services or websites.
If you do not understand this guide, please consider using one of our partners.
Warning
Please make sure your Router is not a 4G/5G exclusive device. If it is a hybrid device, make sure to select the cable connected adapter later in section 3 of this guide!
"},{"location":"server/port-forwarding/#how-to-set-up-port-forwarding","title":"How to set up port forwarding.","text":"Creating a port forwarding rule involves a few detailed network terms. Be prepared to write down a few notes as you go through the process.
There are 4 major steps in this guide.
"},{"location":"server/port-forwarding/#a-quick-guide-a-more-detailed-guide-is-below","title":"A quick guide. (A more detailed guide is below)","text":"Assign a static IP address to your computer or devices
This is needed to prevent the IP of your device changing and breaking the port forwarding rule.
See info about your router
Log in to your router
This can normally be done by finding the 'Default Gateway' IP, which can be found when executing ipconfig
in a command prompt and entering it in a web browsers address bar.
Forward ports to your computer
Find the port forwarding section in your routers web interface. Most routers list the port forwarding section under Network, Advanced, or LAN.
Test that your port is forwarded properly
Use a tool such as CheckBeamMP to test if the rule is working.
IP adress: Port:
Another way to set a static IP address in your local network is to use your router's DHCP reservation feature. Not all routers have this feature, so this may not be an option for you. Please search the internet with the model of your router to find a manual.
If you have managed to do this, please skip directly to step 2
"},{"location":"server/port-forwarding/#method-2-assign-a-static-ip-in-windows","title":"Method 2: Assign a static IP in Windows","text":""},{"location":"server/port-forwarding/#11-find-your-current-ip-address-gateway-and-dns-servers","title":"1.1. Find your current IP Address, Gateway and DNS servers:","text":"Before we can set up a static IP address, we need to know your current network settings. You are going to want to write these down, so get a notepad window ready. For this step, we are going to use command prompt.
Open up a command prompt. The 3 main ways are:
Once you are in the command prompt, run the following command:
ipconfig /all\n
You will see a lot of data. If you have virtual or multiple network adapters, then you will see even more data. It is common to see many virtual adapters if you have either Hyper-V or Docker installed.
It is recommended to use a wired network connection which will be running this server, however, it will work over a wireless connection. You will need to look for an adapter in this list which has an active internet connection. Scroll through the list and find one that has a Default Gateway assigned. Many of the virtual adapters will not have a Default Gateway.
Below are local IPv4 address examples, which atleast one of the adapters should have. You will need to note down the information of your adapter.
Subnet Mask (most likely 255.255.255.0) Default Gateway (most likely 192.168.0.1 or 192.168.1.1)
Please Note
BeamMP currently does not support IPv6 for hosting a server.
"},{"location":"server/port-forwarding/#12-modify-adapter-settings","title":"1.2. Modify Adapter Settings","text":"Now we need to change the settings on your network adapter in order for your PC to keep the IP configuration it currently has. To get to the settings for your network, the fastest method is:
You should see a list of network connections on your computer. If you have Hyper-V or Docker installed, there can be many. Look for any adapters that are not named \"Hyper-V\".
Right-click on your adapter and choose properties. If Internet Protocol Version 4
is not checked, then this is the wrong adapter. Choose a different one.
Double click on Internet Protocol Version 4
. Change Obtain an IP address automatically
to Use the following IP address
.
Fill out the IP address, Subnet mask, Default gateway, and Preferred DNS server with the information from command prompt (ipconfig /all).
Alternatively, instead of using your DNS servers, you can use either the CloudFlare or Google DNS servers:
Click Ok, then click Ok again, and your adapter is now changed from DHCP to static. Surf the web to make sure that you still have internet connectivity. If you do not, then change your settings back to Obtain an IP address automatically and try the next method.
"},{"location":"server/port-forwarding/#2-log-in-to-your-router","title":"2. Log in to your router","text":"Now that you have a static IP address on your device, you are ready to forward the port for BeamMP!
To start, we need to log in to your router. Earlier, one of the settings that you wrote down is your Default Gateway. That is the IP address of your router.
Most routers use a locally hosted web page for management. To view your router's menu and settings:
You should now see your router's login screen. Not all routers require a login, but most do. You need to know your router's username and password. If you have never logged in before, your username and password are most likely set to the factory default values or, in some cases, written on a sticker your router.
Some of the most common factory usernames and passwords are listed here:
Username Password admin admin admin password {blank} admin {blank} passwordTry various combinations of admin, password, and leaving the entries blank. Where it says blank, try leaving the value blank.
"},{"location":"server/port-forwarding/#3-create-the-forwarding-rules","title":"3. Create the forwarding rules!","text":""},{"location":"server/port-forwarding/#31-find-the-forwarding-section","title":"3.1. Find the forwarding section","text":"Find the port forwarding section in your router web interface. Navigate around in your router by clicking the tabs or links at the top or left of each page. Most routers list the port forwarding section under Network, Advanced, or LAN. Look for the following keywords to help you find it:
Once you find your router's port forwarding section, you are ready to enter the necessary information. Your router will have a place to enter the ports to be forwarded and the destination IP address to point those forwarded ports. If your router lists both Internal and External ports, make them the same.
BeamMP requires both UDP and TCP port 30814 (Unless you have changed this in your ServerConfig.toml).
Note
While the default Port is 30814, you can choose any other number greater than 1024 but less than 65535, but you need to note down what you picked if it's not 30814. You need to forward both TCP and UDP. It is recommended to stick to the default port as that one is very unlikely to be used by another service on your PC. However, If you are hosting multiple servers on one machine, each server needs a different Port. Server 1: 30814, Server 2: 30815 for example.
On some routers you may need to create 2 rules, one for UDP and one for TCP, whilst others are nice and allow you to do both with a single rule!
Most routers have a 'save' button, and some routers require a restart or reboot for the changes to take effect.
"},{"location":"server/port-forwarding/#4-time-to-test","title":"4. Time to test!","text":"There are a few different ways to test the connection.
Our recommend way is to use our tool CheckBeamMP as this tests for BeamMP specific issues and protocols.
IP adress: Port:This can be done by getting your public IPv4 Address, this once again can be done in a few different ways. The main way is to use a website called whatsmyip.org. This is a simple website which displays your public IP Address. You should be looking for an IP address with the formatting: xxx.xxx.xxx.xxx
Visit the following Link and replace \"IP\" with your actual IPv4 address, and the \"Port\" with your servers port. Be sure to leave no spaces. https://check.beammp.com/api/v2/beammp/ip/port
status: ok
If you get the output above you can now join your server! There are 2 ways to join, either directly with the details you entered into Probably UP, or, if your server is set to 'public', through the server-list. Since you are hosting a server on-premise, use 127.0.0.1 (localhost) if the Server is running on the same PC as you play, or the LAN IPv4 of the local machine that is running the server.
status: error
If the connection fails entirely, your ISP could be using CGNAT (Carrier Grade Network Address Translation). For more details, please check How to check for CGNAT?, or open a Server Support ticket on our Discord server in the #support
channel and one of our staff will get to your ticket! Should you only see TCP working and UDP failing, check Firewall and Port forwarding rules again.
Guides, tips and tricks on how to configure and take care of a BeamMP Server.
"},{"location":"server/server-maintenance/#how-to-install","title":"How to install","text":"For installation instructions, please see server installation.
"},{"location":"server/server-maintenance/#the-serverconfig-file","title":"The ServerConfig file","text":"The server config, which is a file called ServerConfig.toml
, uses the TOML format.
NOTE: The old server config file was called Server.cfg
, but this is no longer used, and the server will warn when this is still present. Please also note that the two config formats are not compatible with each other.
The config has one section by default, called [General]
, which holds the following values:
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 \u2265 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. Other sections can and should be used by server plugins (Lua API coming soon), like so: [MyMod]
.
The AuthKey HAS to be set by you. It will be empty by default, and needs to be filled with your AuthKey from the installation step earlier. Do not share this Key with anyone and, in screenshots, blur it fully.
"},{"location":"server/server-maintenance/#all-vanilla-maps-names","title":"All vanilla maps names","text":"Here are all the stock maps:
Use these special symbols before your text and it'll apply an effect to that text in the server list:
Value Description^r
Reset ^p
Newline (descriptions only) ^n
Underline ^l
Bold ^m
Strike-through ^o
Italic ^0
Black ^1
Blue ^2
Green ^3
Light blue ^4
Red ^5
Pink ^6
Orange ^7
Grey ^8
Dark grey ^9
Light purple ^a
Light green ^b
Light blue ^c
Dark orange ^d
Light pink ^e
Yellow ^f
White"},{"location":"server/server-maintenance/#customize-your-server-tags","title":"Customize your server tags","text":"Tags can be used to allow people to search for a specific type of server. Your serverConfig.toml will generate with the freeroam tag Tags = \"Freeroam\"
.
You can add multiple tags separated by comma Tags = \"Events,Offroad,lang:english\"
, they are not case sensitive.
You can choose from the following list:
Age/Content:
Mature/18+
Gameplay Types:
Freeroam
Roleplay
Economy
Traffic
Racing Categories:
Racing
Racing:NASCAR
Racing:Track
Racing:Drag
Racing:Rally
Touge
Off-Roading and Challenges:
Offroad
Crawling
Dakar
Challenge
Destruction Events:
Derby
Arena
Weather and Time Conditions:
Snow/Ice
Rain
Night
Weather
Gamemodes:
Gamemode
Gamemode:Racing
Gamemode:Rally
Gamemode:Drag
Gamemode:Derby
Gamemode:Infection
Gamemode:Cops-Robbers
Gamemode:Delivery
Gamemode:Sumo
Community and Events:
Scenarios
Events
Leaderboard
Mods:
Modded
Mod:BeamPaint
Mod:BeamJoy
Mod:CEI
Languages:
Lang:English
Lang:Russian
Lang:French
Lang:Spanish
Lang:Portuguese
Lang:German
Lang:Polish
Lang:Arabic
Other:
Vanilla
Moderated
Should a tag be missing from this list, you can submit a request for it to be added here
"},{"location":"server/server-maintenance/#the-serverlog-file","title":"The Server.log file","text":"This file will be generated when the server runs. It's a mirror of the messages you see in the console when you run the server. You should attach this file every time you need support from our support staff, and it will never show your AuthKey, so you can usually send it without modifications.
The format is as follows ($ prefix means \u201cvariable\u201d, explained below):
[$DATE $TIME] $CONTEXT [$LOG_LEVEL] $MESSAGE\n
Where:
$DATE
is the date of the message, for example 21/07/2021$TIME
is the time of the message, for example 11:05:23$CONTEXT
(only visible if in Debug mode and mostly relevant to developers) is the context of the message, which is either:(Player ID) \u201cPlayer Name\u201d
, where the Player's ID is useful for moderation$LOG_LEVEL
is one of the levels of importance of a message:DEBUG
: Only visible in Debug mode, usually spammy and only important to developersINFO
: General informationLUA
: Message from a Lua pluginWARN
: Describes something that isn't supposed to happen, usuallyERROR
: Something went very wrong, or was very unexpectedFATAL
: Something happened that causes the server to shut down$MESSAGE
the message itself, usually something that you should pay attention to and understand. In some cases this might be cryptic, but the general rule is that, as long as nothing is visibly wrong with the server and there are no ERRORs, all is good.Whenever a new update is released, you're advised to update your server. Usually this involves bug fixes, stability improvements and security improvements, next to the general new features etc. that are introduced.
To receive news about updates when they come out, either follow the discord server's \u201cupdate\u201d channel, look out for it on the forums, or look at / ask the GitHub releases page.
"},{"location":"server/server-maintenance/#how-to-update","title":"How to update","text":""},{"location":"server/server-maintenance/#if-you-are-using-a-beammp-partnered-hosting-provider","title":"If you are using a BeamMP partnered hosting provider","text":"If you are using a BeamMP partnered hosting provider, the instructions below likely won't work. We recommend waiting for more details from your hosting provider, or contacting them for assistance.
"},{"location":"server/server-maintenance/#managing-the-server-yourself","title":"Managing the server yourself","text":"The server is updated by replacing the old executable with the new one. If you are unsure how to do this, there are step-by-step instructions for Windows and Linux below.
If you built from source, you just rebuild. Make sure to run git submodule update --init --recursive
before you rebuild.
BeamMP-Server.exe
. We will call this one the \u201cnew executable\u201d.BeamMP-Server.exe
executable is located (same folder where your ServerConfig.toml
is, usually). We will call this one the \u201cold executable\u201d.BeamMP-Server-xxx
from now on, where xxx
denotes the version for the distro you're using.BeamMP-Server-xxx
depending on the version you've downloaded. We will call this one the \u201cnew executable\u201d.BeamMP-Server-xxx
executable is located (same folder where your ServerConfig.toml
is, usually). We will call this one the \u201cold executable\u201d.sudo chmod +x BeamMP-Server-xxx
. This will make sure the server can be run.The server does not support automatic updates or update notifications (yet).
You can, however, ask the GitHub API for the lastest release by checking the server's version against the tags. You can get that by GET'ing from https://api.github.com/repos/BeamMP/BeamMP-Server/git/refs/tags
.