Files
Docs/de/API documentation/Server-Side/index.html

5200 lines
179 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="de" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="This website serves as the new BeamMP Documentation site for general self serve support, guides and documentation. Best of all it is source available so you the community can help us to A. keep it up-to-date and B. providing the content you require.">
<link rel="canonical" href="https://docs.beammp.com/de/API%20documentation/Server-Side/">
<link rel="alternate" href="../../../API%20documentation/Server-Side/" hreflang="en">
<link rel="alternate" href="../../../es/API%20documentation/Server-Side/" hreflang="es">
<link rel="alternate" href="./" hreflang="de">
<link rel="alternate" href="../../../fr/API%20documentation/Server-Side/" hreflang="fr">
<link rel="alternate" href="../../../it/API%20documentation/Server-Side/" hreflang="it">
<link rel="alternate" href="../../../ru/API%20documentation/Server-Side/" hreflang="ru">
<link rel="icon" href="../../../assets/core/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
<title>Server Side - BeamMP Docs</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.484c7ddc.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.ab4e12ef.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../../stylesheets/custom.css">
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<script id="__analytics">function __md_analytics(){function e(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],e("js",new Date),e("config","G-8T6ETLZCMC"),document.addEventListener("DOMContentLoaded",(function(){document.forms.search&&document.forms.search.query.addEventListener("blur",(function(){this.value&&e("event","search",{search_term:this.value})}));document$.subscribe((function(){var t=document.forms.feedback;if(void 0!==t)for(var a of t.querySelectorAll("[type=submit]"))a.addEventListener("click",(function(a){a.preventDefault();var n=document.location.pathname,d=this.getAttribute("data-md-value");e("event","feedback",{page:n,data:d}),t.firstElementChild.disabled=!0;var r=t.querySelector(".md-feedback__note [data-md-value='"+d+"']");r&&(r.hidden=!1)})),t.hidden=!1})),location$.subscribe((function(t){e("config","G-8T6ETLZCMC",{page_path:t.pathname})}))}));var t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=G-8T6ETLZCMC",document.getElementById("__analytics").insertAdjacentElement("afterEnd",t)}</script>
<script>if("undefined"!=typeof __md_analytics){var consent=__md_get("__consent");consent&&consent.analytics&&__md_analytics()}</script>
<meta property="og:type" content="website" />
<meta property="og:title" content="Server Side - BeamMP Docs" />
<meta property="og:description" content="This website serves as the new BeamMP Documentation site for general self serve support, guides and documentation. Best of all it is source available so you the community can help us to A. keep it up-to-date and B. providing the content you require." />
<meta property="og:image" content="https://docs.beammp.com/assets/images/social/de/API%20documentation/Server-Side.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:url" content="https://docs.beammp.com/de/API%20documentation/Server-Side/" />
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:title" content="Server Side - BeamMP Docs" />
<meta property="twitter:description" content="This website serves as the new BeamMP Documentation site for general self serve support, guides and documentation. Best of all it is source available so you the community can help us to A. keep it up-to-date and B. providing the content you require." />
<meta property="twitter:image" content="https://docs.beammp.com/assets/images/social/de/API%20documentation/Server-Side.png" />
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#table-of-contents" class="md-skip">
Zum Inhalt
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Kopfzeile">
<a href="/" title="BeamMP Docs" class="md-header__button md-logo" aria-label="BeamMP Docs" data-md-component="logo">
<img src="../../../assets/core/beammp_dark.png" alt="logo" class="logo-light" />
<img src="../../../assets/core/beammp_light.png" alt="logo" class="logo-dark" />
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
BeamMP Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Server Side
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3zm3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95zm-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5s-1.65.15-2.39.42zM3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29zm.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14zM20.65 7l-1.77 3.79a7.02 7.02 0 0 0-2.38-4.15zm-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29zM12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44z"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<div class="md-header__option">
<div class="md-select">
<button class="md-header__button md-icon" aria-label="Sprache wechseln">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m12.87 15.07-2.54-2.51.03-.03A17.5 17.5 0 0 0 14.07 6H17V4h-7V2H8v2H1v2h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2zm-2.62 7 1.62-4.33L19.12 17z"/></svg>
</button>
<div class="md-select__inner">
<ul class="md-select__list">
<li class="md-select__item">
<a href="../../../API%20documentation/Server-Side/" hreflang="en" class="md-select__link">
English
</a>
</li>
<li class="md-select__item">
<a href="../../../es/API%20documentation/Server-Side/" hreflang="es" class="md-select__link">
Español
</a>
</li>
<li class="md-select__item">
<a href="./" hreflang="de" class="md-select__link">
Deutsch
</a>
</li>
<li class="md-select__item">
<a href="../../../fr/API%20documentation/Server-Side/" hreflang="fr" class="md-select__link">
Français
</a>
</li>
<li class="md-select__item">
<a href="../../../it/API%20documentation/Server-Side/" hreflang="it" class="md-select__link">
Italiano
</a>
</li>
<li class="md-select__item">
<a href="../../../ru/API%20documentation/Server-Side/" hreflang="ru" class="md-select__link">
Pусский
</a>
</li>
</ul>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Suche" placeholder="Suche" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Suche">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Teilen" aria-label="Teilen" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Zurücksetzen" aria-label="Zurücksetzen" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Suche wird initialisiert
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/beammp/docs" title="Zum Repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
beammp/docs
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Hauptnavigation" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../../" class="md-tabs__link">
Hauptseite
</a>
</li>
<li class="md-tabs__item">
<a href="../../game/getting-started/" class="md-tabs__link">
Support
</a>
</li>
<li class="md-tabs__item">
<a href="../../FAQ/How-to-check-for-CGNAT/" class="md-tabs__link">
FAQ
</a>
</li>
<li class="md-tabs__item">
<a href="../../guides/" class="md-tabs__link">
Entwicklungsanleitungen
</a>
</li>
<li class="md-tabs__item">
<a href="../../beamng/" class="md-tabs__link">
BeamNG-Dokumentation
</a>
</li>
<li class="md-tabs__item">
<a href="../../scripting/mod-reference/" class="md-tabs__link">
Scripting-Referenz
</a>
</li>
<li class="md-tabs__item">
<a href="../../contributing/" class="md-tabs__link">
Mitwirken
</a>
</li>
<li class="md-tabs__item">
<a href="../../community/" class="md-tabs__link">
Gemeinschaft
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="/" title="BeamMP Docs" class="md-nav__button md-logo" aria-label="BeamMP Docs" data-md-component="logo">
<img src="../../../assets/core/beammp_dark.png" alt="logo" class="logo-light" />
<img src="../../../assets/core/beammp_light.png" alt="logo" class="logo-dark" />
</a>
BeamMP Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/beammp/docs" title="Zum Repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
beammp/docs
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../" class="md-nav__link">
<span class="md-ellipsis">
Hauptseite
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-ellipsis">
Support
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Support
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2_1" >
<label class="md-nav__link" for="__nav_2_1" id="__nav_2_1_label" tabindex="0">
<span class="md-ellipsis">
BeamMP spielen
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_1">
<span class="md-nav__icon md-icon"></span>
BeamMP spielen
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../game/getting-started/" class="md-nav__link">
<span class="md-ellipsis">
BeamMP Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../game/error-codes/" class="md-nav__link">
<span class="md-ellipsis">
Fehlercodes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../game/multiplayer-settings/" class="md-nav__link">
<span class="md-ellipsis">
Einstellungen anpassen
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2_2" >
<label class="md-nav__link" for="__nav_2_2" id="__nav_2_2_label" tabindex="0">
<span class="md-ellipsis">
Running a BeamMP-Server
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_2">
<span class="md-nav__icon md-icon"></span>
Running a BeamMP-Server
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../server/create-a-server/" class="md-nav__link">
<span class="md-ellipsis">
Server Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../server/port-forwarding/" class="md-nav__link">
<span class="md-ellipsis">
Port Forwarding
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../server/server-maintenance/" class="md-nav__link">
<span class="md-ellipsis">
Server Wartung
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../server/error-codes/" class="md-nav__link">
<span class="md-ellipsis">
Fehlercodes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../server/manual/" class="md-nav__link">
<span class="md-ellipsis">
Server Handbuch
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2_3" >
<label class="md-nav__link" for="__nav_2_3" id="__nav_2_3_label" tabindex="0">
<span class="md-ellipsis">
Mod- & Ressourcenerstellung
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_3">
<span class="md-nav__icon md-icon"></span>
Mod- & Ressourcenerstellung
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../guides/mod-creation/server/getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Serverseite
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
FAQ
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
FAQ
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../FAQ/How-to-check-for-CGNAT/" class="md-nav__link">
<span class="md-ellipsis">
Wie überprüft man auf CGNAT?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../FAQ/where-to-find-my-IP/" class="md-nav__link">
<span class="md-ellipsis">
Wo finde ich meine IP Adresse?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../FAQ/How-to-deactivate-mods/" class="md-nav__link">
<span class="md-ellipsis">
Wie deaktiviere ich meine Mods?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../FAQ/Update-launcher/" class="md-nav__link">
<span class="md-ellipsis">
Den Launcher Manuell updaten
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../FAQ/Change-launcher-port/" class="md-nav__link">
<span class="md-ellipsis">
Ändern des Launcher Ports
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../FAQ/Defender-exclusions/" class="md-nav__link">
<span class="md-ellipsis">
Ausnahmen erstellen (Defender)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../FAQ/player-faq/" class="md-nav__link">
<span class="md-ellipsis">
Spieler-FAQ
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../FAQ/game-faq/" class="md-nav__link">
<span class="md-ellipsis">
Spiel FAQ
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../FAQ/server-faq/" class="md-nav__link">
<span class="md-ellipsis">
Server FAQ
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
<div class="md-nav__link md-nav__container">
<a href="../../guides/" class="md-nav__link ">
<span class="md-ellipsis">
Entwicklungsanleitungen
</span>
<span class="md-status md-status--new" title="Recently added">
</span>
</a>
<label class="md-nav__link " for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Entwicklungsanleitungen
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../guides/beammp-dev/beammp-dev/" class="md-nav__link">
<span class="md-ellipsis">
Development Environment Setup
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0">
<span class="md-ellipsis">
Mod-Erstellung
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Mod-Erstellung
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../scripting/mod-reference/" class="md-nav__link">
<span class="md-ellipsis">
Client Scripting Reference
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4_4" >
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0">
<span class="md-ellipsis">
Ressourcenerstellung
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<span class="md-nav__icon md-icon"></span>
Ressourcenerstellung
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../guides/mod-creation/server/getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Serverseite
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5" >
<div class="md-nav__link md-nav__container">
<a href="../../beamng/" class="md-nav__link ">
<span class="md-ellipsis">
BeamNG-Dokumentation
</span>
</a>
<label class="md-nav__link " for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
BeamNG-Dokumentation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5_2" >
<div class="md-nav__link md-nav__container">
<a href="../../beamng/dev/" class="md-nav__link ">
<span class="md-ellipsis">
Content Development
</span>
</a>
<label class="md-nav__link " for="__nav_5_2" id="__nav_5_2_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_2">
<span class="md-nav__icon md-icon"></span>
Content Development
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5_2_2" >
<label class="md-nav__link" for="__nav_5_2_2" id="__nav_5_2_2_label" tabindex="0">
<span class="md-ellipsis">
Programming
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_5_2_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_2_2">
<span class="md-nav__icon md-icon"></span>
Programming
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../beamng/dev/modding/ui-apps/" class="md-nav__link">
<span class="md-ellipsis">
UI Apps (HTML)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../beamng/dev/modding/imgui-window-tutorial/" class="md-nav__link">
<span class="md-ellipsis">
ImGui Window Tutorial
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../beamng/dev/modding/lua-mods/" class="md-nav__link">
<span class="md-ellipsis">
Lua Mods (Scripts)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5_2_3" >
<label class="md-nav__link" for="__nav_5_2_3" id="__nav_5_2_3_label" tabindex="0">
<span class="md-ellipsis">
Content
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_5_2_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_2_3">
<span class="md-nav__icon md-icon"></span>
Content
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../beamng/dev/content/maps/" class="md-nav__link">
<span class="md-ellipsis">
Maps
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../beamng/dev/content/props/" class="md-nav__link">
<span class="md-ellipsis">
Props
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../beamng/dev/content/vehicles/" class="md-nav__link">
<span class="md-ellipsis">
Vehicles
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../beamng/lua-snippets/" class="md-nav__link">
<span class="md-ellipsis">
Lua Code Snippets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../beamng/css-snippets/" class="md-nav__link">
<span class="md-ellipsis">
CSS Code Snippets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../beamng/imgui-snippets/" class="md-nav__link">
<span class="md-ellipsis">
ImGui Code Snippets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../beamng/cef-snippets/" class="md-nav__link">
<span class="md-ellipsis">
CEF Code Snippets
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-ellipsis">
Scripting-Referenz
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Scripting-Referenz
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../scripting/mod-reference/" class="md-nav__link">
<span class="md-ellipsis">
Client Scripting Reference
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6_2" >
<label class="md-nav__link" for="__nav_6_2" id="__nav_6_2_label" tabindex="0">
<span class="md-ellipsis">
Server
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6_2">
<span class="md-nav__icon md-icon"></span>
Server
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../scripting/server/latest-server-reference/" class="md-nav__link">
<span class="md-ellipsis">
Version 3.X (Latest)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../scripting/server/v2-server-reference/" class="md-nav__link">
<span class="md-ellipsis">
Version 2.X (Deprecated)
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Mitwirken
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Mitwirken
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../contributing/" class="md-nav__link">
<span class="md-ellipsis">
Erste Schritte
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_8" >
<div class="md-nav__link md-nav__container">
<a href="../../community/" class="md-nav__link ">
<span class="md-ellipsis">
Gemeinschaft
</span>
</a>
<label class="md-nav__link " for="__nav_8" id="__nav_8_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Gemeinschaft
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../community/rules/" class="md-nav__link">
<span class="md-ellipsis">
Rules
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Inhaltsverzeichnis">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Inhaltsverzeichnis
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#table-of-contents" class="md-nav__link">
<span class="md-ellipsis">
Table of Contents
</span>
</a>
<nav class="md-nav" aria-label="Table of Contents">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#global" class="md-nav__link">
<span class="md-ellipsis">
Global
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mp" class="md-nav__link">
<span class="md-ellipsis">
MP
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#util" class="md-nav__link">
<span class="md-ellipsis">
Util
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#http" class="md-nav__link">
<span class="md-ellipsis">
Http
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#fs" class="md-nav__link">
<span class="md-ellipsis">
FS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#events" class="md-nav__link">
<span class="md-ellipsis">
Events
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#global-functions" class="md-nav__link">
<span class="md-ellipsis">
Global Functions
</span>
</a>
<nav class="md-nav" aria-label="Global Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#print" class="md-nav__link">
<span class="md-ellipsis">
print(...)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#printraw" class="md-nav__link">
<span class="md-ellipsis">
printRaw(...)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#exit" class="md-nav__link">
<span class="md-ellipsis">
exit()
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#mp-players" class="md-nav__link">
<span class="md-ellipsis">
MP — Players
</span>
</a>
<nav class="md-nav" aria-label="MP — Players">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#mpgetplayercount-number" class="md-nav__link">
<span class="md-ellipsis">
MP.GetPlayerCount() -&gt; number
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpgetplayers-table" class="md-nav__link">
<span class="md-ellipsis">
MP.GetPlayers() -&gt; table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpgetplayernameplayerid-string" class="md-nav__link">
<span class="md-ellipsis">
MP.GetPlayerName(playerID) -&gt; string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpgetplayeridbynamename-number" class="md-nav__link">
<span class="md-ellipsis">
MP.GetPlayerIDByName(name) -&gt; number
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpgetplayeridentifiersplayerid-table" class="md-nav__link">
<span class="md-ellipsis">
MP.GetPlayerIdentifiers(playerID) -&gt; table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpgetplayerroleplayerid-stringnil" class="md-nav__link">
<span class="md-ellipsis">
MP.GetPlayerRole(playerID) -&gt; string|nil
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpisplayerconnectedplayerid-boolean" class="md-nav__link">
<span class="md-ellipsis">
MP.IsPlayerConnected(playerID) -&gt; boolean
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpisplayerguestplayerid-boolean" class="md-nav__link">
<span class="md-ellipsis">
MP.IsPlayerGuest(playerID) -&gt; boolean
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpdropplayerplayerid-reason" class="md-nav__link">
<span class="md-ellipsis">
MP.DropPlayer(playerID, reason?)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#mp-vehicles" class="md-nav__link">
<span class="md-ellipsis">
MP — Vehicles
</span>
</a>
<nav class="md-nav" aria-label="MP — Vehicles">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#mpgetplayervehiclesplayerid-table" class="md-nav__link">
<span class="md-ellipsis">
MP.GetPlayerVehicles(playerID) -&gt; table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpgetpositionrawplayerid-vehicleid-table-string" class="md-nav__link">
<span class="md-ellipsis">
MP.GetPositionRaw(playerID, vehicleID) -&gt; table, string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpremovevehicleplayerid-vehicleid" class="md-nav__link">
<span class="md-ellipsis">
MP.RemoveVehicle(playerID, vehicleID)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#mp-communication" class="md-nav__link">
<span class="md-ellipsis">
MP — Communication
</span>
</a>
<nav class="md-nav" aria-label="MP — Communication">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#mpsendchatmessageplayerid-message-logchat" class="md-nav__link">
<span class="md-ellipsis">
MP.SendChatMessage(playerID, message, logChat?)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpsendnotificationplayerid-message-icon-category" class="md-nav__link">
<span class="md-ellipsis">
MP.SendNotification(playerID, message, icon?, category?)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpconfirmationdialogplayerid-title-body-buttons-interactionid-warning-reporttoserver-reporttoextensions" class="md-nav__link">
<span class="md-ellipsis">
MP.ConfirmationDialog(playerID, title, body, buttons, interactionID, warning?, reportToServer?, reportToExtensions?)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mptriggerclienteventplayerid-eventname-data-boolean-string" class="md-nav__link">
<span class="md-ellipsis">
MP.TriggerClientEvent(playerID, eventName, data) -&gt; boolean, string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mptriggerclienteventjsonplayerid-eventname-data-boolean-string" class="md-nav__link">
<span class="md-ellipsis">
MP.TriggerClientEventJson(playerID, eventName, data) -&gt; boolean, string
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#mp-events" class="md-nav__link">
<span class="md-ellipsis">
MP — Events
</span>
</a>
<nav class="md-nav" aria-label="MP — Events">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#mpregistereventeventname-functionname" class="md-nav__link">
<span class="md-ellipsis">
MP.RegisterEvent(eventName, functionName)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mptriggerlocaleventeventname-table" class="md-nav__link">
<span class="md-ellipsis">
MP.TriggerLocalEvent(eventName, ...) -&gt; table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mptriggerglobaleventeventname-table" class="md-nav__link">
<span class="md-ellipsis">
MP.TriggerGlobalEvent(eventName, ...) -&gt; table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpcreateeventtimereventname-intervalms-strategy" class="md-nav__link">
<span class="md-ellipsis">
MP.CreateEventTimer(eventName, intervalMS, strategy?)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpcanceleventtimereventname" class="md-nav__link">
<span class="md-ellipsis">
MP.CancelEventTimer(eventName)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#mp-utilities" class="md-nav__link">
<span class="md-ellipsis">
MP — Utilities
</span>
</a>
<nav class="md-nav" aria-label="MP — Utilities">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#mpcreatetimer-table" class="md-nav__link">
<span class="md-ellipsis">
MP.CreateTimer() -&gt; table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpgetosname-string" class="md-nav__link">
<span class="md-ellipsis">
MP.GetOSName() -&gt; string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpgetserverversion-number-number-number" class="md-nav__link">
<span class="md-ellipsis">
MP.GetServerVersion() -&gt; number, number, number
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpgetconfigid-value" class="md-nav__link">
<span class="md-ellipsis">
MP.Get(configID) -&gt; value
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpsetconfigid-value" class="md-nav__link">
<span class="md-ellipsis">
MP.Set(configID, value)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpsettings" class="md-nav__link">
<span class="md-ellipsis">
MP.Settings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpcallstrategy" class="md-nav__link">
<span class="md-ellipsis">
MP.CallStrategy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpsleepms" class="md-nav__link">
<span class="md-ellipsis">
MP.Sleep(ms)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpgetstatememoryusage-number" class="md-nav__link">
<span class="md-ellipsis">
MP.GetStateMemoryUsage() -&gt; number
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#mpgetluamemoryusage-number" class="md-nav__link">
<span class="md-ellipsis">
MP.GetLuaMemoryUsage() -&gt; number
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#util-logging" class="md-nav__link">
<span class="md-ellipsis">
Util — Logging
</span>
</a>
<nav class="md-nav" aria-label="Util — Logging">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#utilloginfo-utillogwarn-utillogerror-utillogdebug" class="md-nav__link">
<span class="md-ellipsis">
Util.LogInfo(...), Util.LogWarn(...), Util.LogError(...), Util.LogDebug(...)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#util-json" class="md-nav__link">
<span class="md-ellipsis">
Util — JSON
</span>
</a>
<nav class="md-nav" aria-label="Util — JSON">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#utiljsonencodetable-string" class="md-nav__link">
<span class="md-ellipsis">
Util.JsonEncode(table) -&gt; string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#utiljsondecodejson-table" class="md-nav__link">
<span class="md-ellipsis">
Util.JsonDecode(json) -&gt; table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#utiljsonprettifyjson-string" class="md-nav__link">
<span class="md-ellipsis">
Util.JsonPrettify(json) -&gt; string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#utiljsonminifyjson-string" class="md-nav__link">
<span class="md-ellipsis">
Util.JsonMinify(json) -&gt; string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#utiljsonflattenjson-string" class="md-nav__link">
<span class="md-ellipsis">
Util.JsonFlatten(json) -&gt; string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#utiljsonunflattenjson-string" class="md-nav__link">
<span class="md-ellipsis">
Util.JsonUnflatten(json) -&gt; string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#utiljsondiffa-b-string" class="md-nav__link">
<span class="md-ellipsis">
Util.JsonDiff(a, b) -&gt; string
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#util-random" class="md-nav__link">
<span class="md-ellipsis">
Util — Random
</span>
</a>
<nav class="md-nav" aria-label="Util — Random">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#utilrandom-float" class="md-nav__link">
<span class="md-ellipsis">
Util.Random() -&gt; float
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#utilrandomrangemin-max-float" class="md-nav__link">
<span class="md-ellipsis">
Util.RandomRange(min, max) -&gt; float
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#utilrandomintrangemin-max-number" class="md-nav__link">
<span class="md-ellipsis">
Util.RandomIntRange(min, max) -&gt; number
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#util-profiling" class="md-nav__link">
<span class="md-ellipsis">
Util — Profiling
</span>
</a>
<nav class="md-nav" aria-label="Util — Profiling">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#utildebugstartprofilename" class="md-nav__link">
<span class="md-ellipsis">
Util.DebugStartProfile(name)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#utildebugstopprofilename" class="md-nav__link">
<span class="md-ellipsis">
Util.DebugStopProfile(name)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#utildebugexecutiontime-table" class="md-nav__link">
<span class="md-ellipsis">
Util.DebugExecutionTime() -&gt; table
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#http_1" class="md-nav__link">
<span class="md-ellipsis">
Http
</span>
</a>
<nav class="md-nav" aria-label="Http">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#httpcreateconnectionhost-port-table" class="md-nav__link">
<span class="md-ellipsis">
Http.CreateConnection(host, port) -&gt; table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#connectiongetpath-headers" class="md-nav__link">
<span class="md-ellipsis">
connection:Get(path, headers)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#fs-checks" class="md-nav__link">
<span class="md-ellipsis">
FS — Checks
</span>
</a>
<nav class="md-nav" aria-label="FS — Checks">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#fsexistspath-boolean" class="md-nav__link">
<span class="md-ellipsis">
FS.Exists(path) -&gt; boolean
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#fsisdirectorypath-boolean" class="md-nav__link">
<span class="md-ellipsis">
FS.IsDirectory(path) -&gt; boolean
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#fsisfilepath-boolean" class="md-nav__link">
<span class="md-ellipsis">
FS.IsFile(path) -&gt; boolean
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#fs-operations" class="md-nav__link">
<span class="md-ellipsis">
FS — Operations
</span>
</a>
<nav class="md-nav" aria-label="FS — Operations">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#fscreatedirectorypath-boolean-string" class="md-nav__link">
<span class="md-ellipsis">
FS.CreateDirectory(path) -&gt; boolean, string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#fsremovepath-boolean-string" class="md-nav__link">
<span class="md-ellipsis">
FS.Remove(path) -&gt; boolean, string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#fsrenamepath-newpath-boolean-string" class="md-nav__link">
<span class="md-ellipsis">
FS.Rename(path, newPath) -&gt; boolean, string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#fscopypath-newpath-boolean-string" class="md-nav__link">
<span class="md-ellipsis">
FS.Copy(path, newPath) -&gt; boolean, string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#fslistfilespath-table" class="md-nav__link">
<span class="md-ellipsis">
FS.ListFiles(path) -&gt; table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#fslistdirectoriespath-table" class="md-nav__link">
<span class="md-ellipsis">
FS.ListDirectories(path) -&gt; table
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#fs-paths" class="md-nav__link">
<span class="md-ellipsis">
FS — Paths
</span>
</a>
<nav class="md-nav" aria-label="FS — Paths">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#fsgetfilenamepath-string" class="md-nav__link">
<span class="md-ellipsis">
FS.GetFilename(path) -&gt; string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#fsgetextensionpath-string" class="md-nav__link">
<span class="md-ellipsis">
FS.GetExtension(path) -&gt; string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#fsgetparentfolderpath-string" class="md-nav__link">
<span class="md-ellipsis">
FS.GetParentFolder(path) -&gt; string
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#fsconcatpaths-string" class="md-nav__link">
<span class="md-ellipsis">
FS.ConcatPaths(...) -&gt; string
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#events_1" class="md-nav__link">
<span class="md-ellipsis">
Events
</span>
</a>
<nav class="md-nav" aria-label="Events">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#player-connection-order" class="md-nav__link">
<span class="md-ellipsis">
Player connection order
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#oninit" class="md-nav__link">
<span class="md-ellipsis">
onInit
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onconsoleinput" class="md-nav__link">
<span class="md-ellipsis">
onConsoleInput
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onshutdown" class="md-nav__link">
<span class="md-ellipsis">
onShutdown
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onplayerauth" class="md-nav__link">
<span class="md-ellipsis">
onPlayerAuth
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#postplayerauth" class="md-nav__link">
<span class="md-ellipsis">
postPlayerAuth
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onplayerconnecting" class="md-nav__link">
<span class="md-ellipsis">
onPlayerConnecting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onplayerjoining" class="md-nav__link">
<span class="md-ellipsis">
onPlayerJoining
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onplayerjoin" class="md-nav__link">
<span class="md-ellipsis">
onPlayerJoin
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onplayerdisconnect" class="md-nav__link">
<span class="md-ellipsis">
onPlayerDisconnect
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onchatmessage" class="md-nav__link">
<span class="md-ellipsis">
onChatMessage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#postchatmessage" class="md-nav__link">
<span class="md-ellipsis">
postChatMessage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onvehiclespawn" class="md-nav__link">
<span class="md-ellipsis">
onVehicleSpawn
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#postvehiclespawn" class="md-nav__link">
<span class="md-ellipsis">
postVehicleSpawn
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onvehicleedited" class="md-nav__link">
<span class="md-ellipsis">
onVehicleEdited
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#postvehicleedited" class="md-nav__link">
<span class="md-ellipsis">
postVehicleEdited
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onvehicledeleted" class="md-nav__link">
<span class="md-ellipsis">
onVehicleDeleted
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onvehiclereset" class="md-nav__link">
<span class="md-ellipsis">
onVehicleReset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onvehiclepaintchanged" class="md-nav__link">
<span class="md-ellipsis">
onVehiclePaintChanged
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#onfilechanged" class="md-nav__link">
<span class="md-ellipsis">
onFileChanged
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/beammp/docs/edit/main/docs/en/API documentation/Server-Side.md" title="Seite editieren" class="md-content__button md-icon" rel="edit">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
</a>
<a href="https://github.com/beammp/docs/raw/main/docs/en/API documentation/Server-Side.md" title="Quellcode der Seite anzeigen" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg>
</a>
<h1>Server Side</h1>
<h2 id="table-of-contents">Table of Contents</h2>
<h3 id="global">Global</h3>
<ul>
<li><a href="#global-functions">Global Functions</a></li>
</ul>
<h3 id="mp">MP</h3>
<ul>
<li><a href="#mp--players">Players</a></li>
<li><a href="#mp--vehicles">Vehicles</a></li>
<li><a href="#mp--communication">Communication</a></li>
<li><a href="#mp--events">Events</a></li>
<li><a href="#mp--utilities">Utilities</a></li>
</ul>
<h3 id="util">Util</h3>
<ul>
<li><a href="#util--logging">Logging</a></li>
<li><a href="#util--json">JSON</a></li>
<li><a href="#util--random">Random</a></li>
<li><a href="#util--profiling">Profiling</a></li>
</ul>
<h3 id="http">Http</h3>
<ul>
<li><a href="#http">Http Functions</a></li>
</ul>
<h3 id="fs">FS</h3>
<ul>
<li><a href="#fs--checks">Checks</a></li>
<li><a href="#fs--operations">Operations</a></li>
<li><a href="#fs--paths">Paths</a></li>
</ul>
<h3 id="events">Events</h3>
<ul>
<li><a href="#events">Events Reference</a></li>
</ul>
<hr />
<h2 id="global-functions">Global Functions</h2>
<h3 id="print"><code>print(...)</code></h3>
<p>Prints to the server console, prefixed with date, time and <code>[LUA]</code>.</p>
<p><strong>Parameters:</strong>
- <code>...</code> (any) - Values of any type. Tables are printed with their contents.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;John Doe&quot;</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Hello, I&#39;m&quot;</span><span class="p">,</span><span class="w"> </span><span class="nv">name</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;and I&#39;m&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">32</span><span class="p">)</span>
</span></code></pre></div></p>
<hr />
<h3 id="printraw"><code>printRaw(...)</code></h3>
<p>Prints to the server console without any prefix.</p>
<p><strong>Parameters:</strong>
- <code>...</code> (any) - Values of any type.</p>
<hr />
<h3 id="exit"><code>exit()</code></h3>
<p>Shuts down the server gracefully. Triggers the <code>onShutdown</code> event.</p>
<hr />
<h2 id="mp-players">MP — Players</h2>
<h3 id="mpgetplayercount-number"><code>MP.GetPlayerCount() -&gt; number</code></h3>
<p>Returns the number of currently connected players.</p>
<p><strong>Returns:</strong>
- (number) - Player count.</p>
<hr />
<h3 id="mpgetplayers-table"><code>MP.GetPlayers() -&gt; table</code></h3>
<p>Returns a table of all connected players.</p>
<p><strong>Returns:</strong>
- (table) - Map of <code>{[playerID] = playerName}</code>.</p>
<hr />
<h3 id="mpgetplayernameplayerid-string"><code>MP.GetPlayerName(playerID) -&gt; string</code></h3>
<p>Returns the name of a player by ID.</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID.</p>
<p><strong>Returns:</strong>
- (string) - The player's name, or <code>""</code> if not found.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">player_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span>
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="nb">print</span><span class="p">(</span><span class="nv">MP</span><span class="p">.</span><span class="nf">GetPlayerName</span><span class="p">(</span><span class="nv">player_id</span><span class="p">))</span>
</span></code></pre></div></p>
<hr />
<h3 id="mpgetplayeridbynamename-number"><code>MP.GetPlayerIDByName(name) -&gt; number</code></h3>
<p>Returns the ID of a player by name.</p>
<p><strong>Parameters:</strong>
- <code>name</code> (string) - The player's name.</p>
<p><strong>Returns:</strong>
- (number) - The player's ID, or <code>-1</code> if not found.</p>
<hr />
<h3 id="mpgetplayeridentifiersplayerid-table"><code>MP.GetPlayerIdentifiers(playerID) -&gt; table</code></h3>
<p>Returns identifiers for a player such as IP, BeamMP forum ID and Discord ID.</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID.</p>
<p><strong>Returns:</strong>
- (table) - Table with keys <code>ip</code>, <code>beammp</code>, <code>discord</code> (only if linked).
- (nil) - If the player was not found.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">player_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span>
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="nb">print</span><span class="p">(</span><span class="nv">MP</span><span class="p">.</span><span class="nf">GetPlayerIdentifiers</span><span class="p">(</span><span class="nv">player_id</span><span class="p">))</span>
</span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="c1">-- { ip: &quot;127.0.0.1&quot;, discord: &quot;12345678987654321&quot;, beammp: &quot;1234567&quot; }</span>
</span></code></pre></div></p>
<hr />
<h3 id="mpgetplayerroleplayerid-stringnil"><code>MP.GetPlayerRole(playerID) -&gt; string|nil</code></h3>
<p>Returns the player's role as set by the BeamMP backend.</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID.</p>
<p><strong>Returns:</strong>
- (string) - The player's role.
- (nil) - If the player was not found.</p>
<hr />
<h3 id="mpisplayerconnectedplayerid-boolean"><code>MP.IsPlayerConnected(playerID) -&gt; boolean</code></h3>
<p>Returns whether a UDP packet has been received from the player, i.e. whether the connection is fully established.</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID.</p>
<p><strong>Returns:</strong>
- (boolean) - <code>true</code> if fully connected.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">player_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">8</span>
</span><span id="__span-3-2"><a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="nb">print</span><span class="p">(</span><span class="nv">MP</span><span class="p">.</span><span class="nf">IsPlayerConnected</span><span class="p">(</span><span class="nv">player_id</span><span class="p">))</span>
</span></code></pre></div></p>
<hr />
<h3 id="mpisplayerguestplayerid-boolean"><code>MP.IsPlayerGuest(playerID) -&gt; boolean</code></h3>
<p>Returns whether the player is a guest (not registered on the BeamMP forum).</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID.</p>
<p><strong>Returns:</strong>
- (boolean) - <code>true</code> if guest.</p>
<hr />
<h3 id="mpdropplayerplayerid-reason"><code>MP.DropPlayer(playerID, reason?)</code></h3>
<p>Kicks a player from the server.</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID.
- <code>reason</code> (string, optional) - Reason for the kick.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="kr">function</span><span class="w"> </span><span class="nf">ChatHandler</span><span class="p">(</span><span class="nv">player_id</span><span class="p">,</span><span class="w"> </span><span class="nv">player_name</span><span class="p">,</span><span class="w"> </span><span class="nv">message</span><span class="p">)</span>
</span><span id="__span-4-2"><a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="w"> </span><span class="kr">if</span><span class="w"> </span><span class="nb">string.match</span><span class="p">(</span><span class="nv">message</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;darn&quot;</span><span class="p">)</span><span class="w"> </span><span class="kr">then</span>
</span><span id="__span-4-3"><a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="w"> </span><span class="nv">MP</span><span class="p">.</span><span class="nf">DropPlayer</span><span class="p">(</span><span class="nv">player_id</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;Profanity is not allowed&quot;</span><span class="p">)</span>
</span><span id="__span-4-4"><a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="w"> </span><span class="kr">return</span><span class="w"> </span><span class="mi">1</span>
</span><span id="__span-4-5"><a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a><span class="w"> </span><span class="kr">end</span>
</span><span id="__span-4-6"><a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a><span class="kr">end</span>
</span></code></pre></div></p>
<hr />
<h2 id="mp-vehicles">MP — Vehicles</h2>
<h3 id="mpgetplayervehiclesplayerid-table"><code>MP.GetPlayerVehicles(playerID) -&gt; table</code></h3>
<p>Returns all vehicles of a player.</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID.</p>
<p><strong>Returns:</strong>
- (table) - Map of <code>{[vehicleID] = dataString}</code> where dataString is a raw JSON string.
- (nil) - If the player has no vehicles or was not found.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">player_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span>
</span><span id="__span-5-2"><a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="kd">local</span><span class="w"> </span><span class="nv">player_vehicles</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">MP</span><span class="p">.</span><span class="nf">GetPlayerVehicles</span><span class="p">(</span><span class="nv">player_id</span><span class="p">)</span>
</span><span id="__span-5-3"><a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a>
</span><span id="__span-5-4"><a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="kr">for</span><span class="w"> </span><span class="nv">vehicle_id</span><span class="p">,</span><span class="w"> </span><span class="nv">vehicle_data</span><span class="w"> </span><span class="kr">in</span><span class="w"> </span><span class="nb">pairs</span><span class="p">(</span><span class="nv">player_vehicles</span><span class="p">)</span><span class="w"> </span><span class="kr">do</span>
</span><span id="__span-5-5"><a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="w"> </span><span class="kd">local</span><span class="w"> </span><span class="nv">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">string.find</span><span class="p">(</span><span class="nv">vehicle_data</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;{&quot;</span><span class="p">)</span>
</span><span id="__span-5-6"><a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a><span class="w"> </span><span class="kd">local</span><span class="w"> </span><span class="nv">formattedVehicleData</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">string.sub</span><span class="p">(</span><span class="nv">vehicle_data</span><span class="p">,</span><span class="w"> </span><span class="nv">start</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</span><span id="__span-5-7"><a id="__codelineno-5-7" name="__codelineno-5-7" href="#__codelineno-5-7"></a><span class="w"> </span><span class="nb">print</span><span class="p">(</span><span class="nv">Util</span><span class="p">.</span><span class="nf">JsonDecode</span><span class="p">(</span><span class="nv">formattedVehicleData</span><span class="p">))</span>
</span><span id="__span-5-8"><a id="__codelineno-5-8" name="__codelineno-5-8" href="#__codelineno-5-8"></a><span class="kr">end</span>
</span></code></pre></div></p>
<hr />
<h3 id="mpgetpositionrawplayerid-vehicleid-table-string"><code>MP.GetPositionRaw(playerID, vehicleID) -&gt; table, string</code></h3>
<p>Returns the current raw position of a vehicle.</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID.
- <code>vehicleID</code> (number) - The vehicle's ID.</p>
<p><strong>Returns:</strong>
- (table) - Table with keys: <code>pos</code>, <code>rot</code>, <code>vel</code>, <code>rvel</code>, <code>tim</code>, <code>ping</code>.
- (string) - Error message if one occurred, empty string on success.</p>
<p><strong>Note:</strong>
Each value in <code>pos</code>, <code>rot</code>, <code>vel</code>, <code>rvel</code> is a table with indices <code>1, 2, 3</code> (and <code>4</code> for <code>rot</code>).</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">player_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span>
</span><span id="__span-6-2"><a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a><span class="kd">local</span><span class="w"> </span><span class="nv">vehicle_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
</span><span id="__span-6-3"><a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a>
</span><span id="__span-6-4"><a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a><span class="kd">local</span><span class="w"> </span><span class="nv">raw_pos</span><span class="p">,</span><span class="w"> </span><span class="nb">error</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">MP</span><span class="p">.</span><span class="nf">GetPositionRaw</span><span class="p">(</span><span class="nv">player_id</span><span class="p">,</span><span class="w"> </span><span class="nv">vehicle_id</span><span class="p">)</span>
</span><span id="__span-6-5"><a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a><span class="kr">if</span><span class="w"> </span><span class="nb">error</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="w"> </span><span class="kr">then</span>
</span><span id="__span-6-6"><a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a><span class="w"> </span><span class="kd">local</span><span class="w"> </span><span class="nv">x</span><span class="p">,</span><span class="w"> </span><span class="nv">y</span><span class="p">,</span><span class="w"> </span><span class="nv">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">table.unpack</span><span class="p">(</span><span class="nv">raw_pos</span><span class="p">[</span><span class="s2">&quot;pos&quot;</span><span class="p">])</span>
</span><span id="__span-6-7"><a id="__codelineno-6-7" name="__codelineno-6-7" href="#__codelineno-6-7"></a><span class="w"> </span><span class="nb">print</span><span class="p">(</span><span class="s2">&quot;X:&quot;</span><span class="p">,</span><span class="w"> </span><span class="nv">x</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;Y:&quot;</span><span class="p">,</span><span class="w"> </span><span class="nv">y</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;Z:&quot;</span><span class="p">,</span><span class="w"> </span><span class="nv">z</span><span class="p">)</span>
</span><span id="__span-6-8"><a id="__codelineno-6-8" name="__codelineno-6-8" href="#__codelineno-6-8"></a><span class="kr">else</span>
</span><span id="__span-6-9"><a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a><span class="w"> </span><span class="nb">print</span><span class="p">(</span><span class="nb">error</span><span class="p">)</span>
</span><span id="__span-6-10"><a id="__codelineno-6-10" name="__codelineno-6-10" href="#__codelineno-6-10"></a><span class="kr">end</span>
</span></code></pre></div></p>
<hr />
<h3 id="mpremovevehicleplayerid-vehicleid"><code>MP.RemoveVehicle(playerID, vehicleID)</code></h3>
<p>Removes a vehicle belonging to a player.</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID.
- <code>vehicleID</code> (number) - The vehicle's ID.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">player_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span>
</span><span id="__span-7-2"><a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="kd">local</span><span class="w"> </span><span class="nv">player_vehicles</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">MP</span><span class="p">.</span><span class="nf">GetPlayerVehicles</span><span class="p">(</span><span class="nv">player_id</span><span class="p">)</span>
</span><span id="__span-7-3"><a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a>
</span><span id="__span-7-4"><a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a><span class="kr">for</span><span class="w"> </span><span class="nv">vehicle_id</span><span class="p">,</span><span class="w"> </span><span class="nv">vehicle_data</span><span class="w"> </span><span class="kr">in</span><span class="w"> </span><span class="nb">pairs</span><span class="p">(</span><span class="nv">player_vehicles</span><span class="p">)</span><span class="w"> </span><span class="kr">do</span>
</span><span id="__span-7-5"><a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a><span class="w"> </span><span class="nv">MP</span><span class="p">.</span><span class="nf">RemoveVehicle</span><span class="p">(</span><span class="nv">player_id</span><span class="p">,</span><span class="w"> </span><span class="nv">vehicle_id</span><span class="p">)</span>
</span><span id="__span-7-6"><a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a><span class="kr">end</span>
</span></code></pre></div></p>
<hr />
<h2 id="mp-communication">MP — Communication</h2>
<h3 id="mpsendchatmessageplayerid-message-logchat"><code>MP.SendChatMessage(playerID, message, logChat?)</code></h3>
<p>Sends a chat message to a specific player or everyone.</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID, or <code>-1</code> for everyone.
- <code>message</code> (string) - The message content.
- <code>logChat</code> (boolean, optional) - Whether to log to the server log (default: <code>true</code>).</p>
<p><strong>Note:</strong>
This function does not return a value.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="c1">-- To a specific player</span>
</span><span id="__span-8-2"><a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a><span class="kr">function</span><span class="w"> </span><span class="nf">ChatHandler</span><span class="p">(</span><span class="nv">player_id</span><span class="p">,</span><span class="w"> </span><span class="nv">player_name</span><span class="p">,</span><span class="w"> </span><span class="nv">msg</span><span class="p">)</span>
</span><span id="__span-8-3"><a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="w"> </span><span class="kr">if</span><span class="w"> </span><span class="nb">string.match</span><span class="p">(</span><span class="nv">msg</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;darn&quot;</span><span class="p">)</span><span class="w"> </span><span class="kr">then</span>
</span><span id="__span-8-4"><a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a><span class="w"> </span><span class="nv">MP</span><span class="p">.</span><span class="nf">SendChatMessage</span><span class="p">(</span><span class="nv">player_id</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;Please do not use profanity.&quot;</span><span class="p">)</span>
</span><span id="__span-8-5"><a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a><span class="w"> </span><span class="kr">return</span><span class="w"> </span><span class="mi">1</span>
</span><span id="__span-8-6"><a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a><span class="w"> </span><span class="kr">end</span>
</span><span id="__span-8-7"><a id="__codelineno-8-7" name="__codelineno-8-7" href="#__codelineno-8-7"></a><span class="kr">end</span>
</span><span id="__span-8-8"><a id="__codelineno-8-8" name="__codelineno-8-8" href="#__codelineno-8-8"></a>
</span><span id="__span-8-9"><a id="__codelineno-8-9" name="__codelineno-8-9" href="#__codelineno-8-9"></a><span class="c1">-- To everyone</span>
</span><span id="__span-8-10"><a id="__codelineno-8-10" name="__codelineno-8-10" href="#__codelineno-8-10"></a><span class="nv">MP</span><span class="p">.</span><span class="nf">SendChatMessage</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;Hello World!&quot;</span><span class="p">)</span>
</span></code></pre></div></p>
<hr />
<h3 id="mpsendnotificationplayerid-message-icon-category"><code>MP.SendNotification(playerID, message, icon?, category?)</code></h3>
<p>Sends a notification (popup) to a specific player or everyone.</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID, or <code>-1</code> for everyone.
- <code>message</code> (string) - The notification content.
- <code>icon</code> (string, optional) - Notification icon.
- <code>category</code> (string, optional) - Notification category.</p>
<p><strong>Note:</strong>
This function does not return a value. When called with only 3 arguments (no category), the category is automatically set to the value of message.</p>
<hr />
<h3 id="mpconfirmationdialogplayerid-title-body-buttons-interactionid-warning-reporttoserver-reporttoextensions"><code>MP.ConfirmationDialog(playerID, title, body, buttons, interactionID, warning?, reportToServer?, reportToExtensions?)</code></h3>
<p>Sends a confirmation dialog with buttons to a player.</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID, or <code>-1</code> for everyone.
- <code>title</code> (string) - Dialog title.
- <code>body</code> (string) - Dialog body text.
- <code>buttons</code> (table) - Array of buttons.
- <code>interactionID</code> (string) - Unique identifier for this interaction.
- <code>warning</code> (boolean, optional) - Show warning styling (default: <code>false</code>).
- <code>reportToServer</code> (boolean, optional) - Send response to server (default: <code>true</code>).
- <code>reportToExtensions</code> (boolean, optional) - Trigger local event (default: <code>true</code>).</p>
<p><strong>Note:</strong>
When called with only 5 arguments the function does not return a value. When called with 68 arguments it returns <code>boolean, string</code>.</p>
<hr />
<h3 id="mptriggerclienteventplayerid-eventname-data-boolean-string"><code>MP.TriggerClientEvent(playerID, eventName, data) -&gt; boolean, string</code></h3>
<p>Sends an event to a specific client or everyone.</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID, or <code>-1</code> for everyone.
- <code>eventName</code> (string) - The event name.
- <code>data</code> (string) - The data to send.</p>
<p><strong>Returns:</strong>
- (boolean) - <code>true</code> if sent successfully. Always <code>true</code> for <code>-1</code>.
- (string) - Error message if failed.</p>
<hr />
<h3 id="mptriggerclienteventjsonplayerid-eventname-data-boolean-string"><code>MP.TriggerClientEventJson(playerID, eventName, data) -&gt; boolean, string</code></h3>
<p>Same as <code>TriggerClientEvent</code> but accepts a Lua table and automatically encodes it to JSON.</p>
<p><strong>Parameters:</strong>
- <code>playerID</code> (number) - The player's ID, or <code>-1</code> for everyone.
- <code>eventName</code> (string) - The event name.
- <code>data</code> (table) - Lua table to be JSON-encoded and sent.</p>
<p><strong>Returns:</strong>
- (boolean) - <code>true</code> on success.
- (string) - Error message if failed.</p>
<hr />
<h2 id="mp-events">MP — Events</h2>
<h3 id="mpregistereventeventname-functionname"><code>MP.RegisterEvent(eventName, functionName)</code></h3>
<p>Registers a function as a handler for an event.</p>
<p><strong>Parameters:</strong>
- <code>eventName</code> (string) - The event name.
- <code>functionName</code> (string) - The name of the Lua function to register.</p>
<p><strong>Note:</strong>
If the event does not exist it is created. Multiple handlers can be registered for the same event.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="kr">function</span><span class="w"> </span><span class="nf">ChatHandler</span><span class="p">(</span><span class="nv">player_id</span><span class="p">,</span><span class="w"> </span><span class="nv">player_name</span><span class="p">,</span><span class="w"> </span><span class="nv">msg</span><span class="p">)</span>
</span><span id="__span-9-2"><a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a><span class="w"> </span><span class="kr">if</span><span class="w"> </span><span class="nv">msg</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">&quot;hello&quot;</span><span class="w"> </span><span class="kr">then</span>
</span><span id="__span-9-3"><a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="w"> </span><span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Hello World!&quot;</span><span class="p">)</span>
</span><span id="__span-9-4"><a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a><span class="w"> </span><span class="kr">return</span><span class="w"> </span><span class="mi">0</span>
</span><span id="__span-9-5"><a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a><span class="w"> </span><span class="kr">end</span>
</span><span id="__span-9-6"><a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a><span class="kr">end</span>
</span><span id="__span-9-7"><a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a>
</span><span id="__span-9-8"><a id="__codelineno-9-8" name="__codelineno-9-8" href="#__codelineno-9-8"></a><span class="nv">MP</span><span class="p">.</span><span class="nf">RegisterEvent</span><span class="p">(</span><span class="s2">&quot;onChatMessage&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;ChatHandler&quot;</span><span class="p">)</span>
</span></code></pre></div></p>
<hr />
<h3 id="mptriggerlocaleventeventname-table"><code>MP.TriggerLocalEvent(eventName, ...) -&gt; table</code></h3>
<p>Triggers an event in the current state only. Synchronous.</p>
<p><strong>Parameters:</strong>
- <code>eventName</code> (string) - The event name.
- <code>...</code> (any, optional) - Arguments passed to handlers.</p>
<p><strong>Returns:</strong>
- (table) - Table of return values from all handlers.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-10-1"><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">Results</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">MP</span><span class="p">.</span><span class="nf">TriggerLocalEvent</span><span class="p">(</span><span class="s2">&quot;MyEvent&quot;</span><span class="p">)</span>
</span><span id="__span-10-2"><a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a><span class="nb">print</span><span class="p">(</span><span class="nv">Results</span><span class="p">)</span>
</span></code></pre></div></p>
<hr />
<h3 id="mptriggerglobaleventeventname-table"><code>MP.TriggerGlobalEvent(eventName, ...) -&gt; table</code></h3>
<p>Triggers an event in all states. Asynchronous. Local handlers run synchronously and immediately.</p>
<p><strong>Parameters:</strong>
- <code>eventName</code> (string) - The event name.
- <code>...</code> (any, optional) - Arguments. Supported types: string, number, boolean, table.</p>
<p><strong>Returns:</strong>
- (table) - Future-like object with:
- <code>:IsDone() -&gt; boolean</code> — Whether all handlers have finished.
- <code>:GetResults() -&gt; table</code> — Return values from all handlers.</p>
<p><strong>Note:</strong>
Call these methods with <code>:</code> not <code>.</code>.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-11-1"><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">Future</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">MP</span><span class="p">.</span><span class="nf">TriggerGlobalEvent</span><span class="p">(</span><span class="s2">&quot;MyEvent&quot;</span><span class="p">)</span>
</span><span id="__span-11-2"><a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a><span class="kr">while</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="nv">Future</span><span class="p">:</span><span class="nf">IsDone</span><span class="p">()</span><span class="w"> </span><span class="kr">do</span>
</span><span id="__span-11-3"><a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="w"> </span><span class="nv">MP</span><span class="p">.</span><span class="nf">Sleep</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
</span><span id="__span-11-4"><a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a><span class="kr">end</span>
</span><span id="__span-11-5"><a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a><span class="kd">local</span><span class="w"> </span><span class="nv">Results</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">Future</span><span class="p">:</span><span class="nf">GetResults</span><span class="p">()</span>
</span><span id="__span-11-6"><a id="__codelineno-11-6" name="__codelineno-11-6" href="#__codelineno-11-6"></a><span class="nb">print</span><span class="p">(</span><span class="nv">Results</span><span class="p">)</span>
</span></code></pre></div></p>
<hr />
<h3 id="mpcreateeventtimereventname-intervalms-strategy"><code>MP.CreateEventTimer(eventName, intervalMS, strategy?)</code></h3>
<p>Creates a timer that repeatedly triggers an event.</p>
<p><strong>Parameters:</strong>
- <code>eventName</code> (string) - The event to trigger.
- <code>intervalMS</code> (number) - Interval between triggers in milliseconds.
- <code>strategy</code> (number, optional) - <code>MP.CallStrategy.BestEffort</code> (default) or <code>MP.CallStrategy.Precise</code>.</p>
<p><strong>Note:</strong>
Intervals below 25ms are not recommended and will not be served reliably.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-12-1"><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">seconds</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
</span><span id="__span-12-2"><a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>
</span><span id="__span-12-3"><a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a><span class="kr">function</span><span class="w"> </span><span class="nf">CountSeconds</span><span class="p">()</span>
</span><span id="__span-12-4"><a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a><span class="w"> </span><span class="nv">seconds</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">seconds</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span>
</span><span id="__span-12-5"><a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a><span class="kr">end</span>
</span><span id="__span-12-6"><a id="__codelineno-12-6" name="__codelineno-12-6" href="#__codelineno-12-6"></a>
</span><span id="__span-12-7"><a id="__codelineno-12-7" name="__codelineno-12-7" href="#__codelineno-12-7"></a><span class="nv">MP</span><span class="p">.</span><span class="nf">RegisterEvent</span><span class="p">(</span><span class="s2">&quot;EverySecond&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;CountSeconds&quot;</span><span class="p">)</span>
</span><span id="__span-12-8"><a id="__codelineno-12-8" name="__codelineno-12-8" href="#__codelineno-12-8"></a><span class="nv">MP</span><span class="p">.</span><span class="nf">CreateEventTimer</span><span class="p">(</span><span class="s2">&quot;EverySecond&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">1000</span><span class="p">)</span>
</span></code></pre></div></p>
<hr />
<h3 id="mpcanceleventtimereventname"><code>MP.CancelEventTimer(eventName)</code></h3>
<p>Cancels an existing event timer.</p>
<p><strong>Parameters:</strong>
- <code>eventName</code> (string) - The event name.</p>
<p><strong>Note:</strong>
The event may fire one more time before being cancelled due to asynchronous behaviour.</p>
<hr />
<h2 id="mp-utilities">MP — Utilities</h2>
<h3 id="mpcreatetimer-table"><code>MP.CreateTimer() -&gt; table</code></h3>
<p>Creates a timer object for measuring elapsed time.</p>
<p><strong>Returns:</strong>
- (table) - Object with:
- <code>:GetCurrent() -&gt; float</code> — Seconds elapsed since last Start.
- <code>:Start()</code> — Resets the timer.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-13-1"><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">mytimer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">MP</span><span class="p">.</span><span class="nf">CreateTimer</span><span class="p">()</span>
</span><span id="__span-13-2"><a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a><span class="c1">-- do stuff here that needs to be timed</span>
</span><span id="__span-13-3"><a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a><span class="nb">print</span><span class="p">(</span><span class="nv">mytimer</span><span class="p">:</span><span class="nf">GetCurrent</span><span class="p">())</span>
</span></code></pre></div></p>
<hr />
<h3 id="mpgetosname-string"><code>MP.GetOSName() -&gt; string</code></h3>
<p>Returns the name of the server's operating system.</p>
<p><strong>Returns:</strong>
- (string) - <code>"Windows"</code>, <code>"Linux"</code>, or <code>"Other"</code>.</p>
<hr />
<h3 id="mpgetserverversion-number-number-number"><code>MP.GetServerVersion() -&gt; number, number, number</code></h3>
<p>Returns the server version.</p>
<p><strong>Returns:</strong>
- (number) - major
- (number) - minor
- (number) - patch</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-14-1"><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">major</span><span class="p">,</span><span class="w"> </span><span class="nv">minor</span><span class="p">,</span><span class="w"> </span><span class="nv">patch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">MP</span><span class="p">.</span><span class="nf">GetServerVersion</span><span class="p">()</span>
</span><span id="__span-14-2"><a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a><span class="nb">print</span><span class="p">(</span><span class="nv">major</span><span class="p">,</span><span class="w"> </span><span class="nv">minor</span><span class="p">,</span><span class="w"> </span><span class="nv">patch</span><span class="p">)</span>
</span></code></pre></div></p>
<hr />
<h3 id="mpgetconfigid-value"><code>MP.Get(configID) -&gt; value</code></h3>
<p>Reads a server config setting by ID.</p>
<p><strong>Parameters:</strong>
- <code>configID</code> (number) - ID from <code>MP.Settings</code>.</p>
<p><strong>Returns:</strong>
- (value) - The setting's current value.</p>
<hr />
<h3 id="mpsetconfigid-value"><code>MP.Set(configID, value)</code></h3>
<p>Temporarily changes a server config setting. The change is not saved to the config file.</p>
<p><strong>Parameters:</strong>
- <code>configID</code> (number) - ID from <code>MP.Settings</code>.
- <code>value</code> (any) - New value. Type must match the setting.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-15-1"><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a><span class="nv">MP</span><span class="p">.</span><span class="nf">Set</span><span class="p">(</span><span class="nv">MP</span><span class="p">.</span><span class="py">Settings</span><span class="p">.</span><span class="py">Debug</span><span class="p">,</span><span class="w"> </span><span class="kc">true</span><span class="p">)</span>
</span></code></pre></div></p>
<hr />
<h3 id="mpsettings"><code>MP.Settings</code></h3>
<p>Enum of setting IDs for use with <code>MP.Get</code> and <code>MP.Set</code>.</p>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-16-1"><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a><span class="nv">MP</span><span class="p">.</span><span class="py">Settings</span><span class="p">.</span><span class="py">Debug</span><span class="w"> </span><span class="c1">-- 0 (boolean)</span>
</span><span id="__span-16-2"><a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a><span class="nv">MP</span><span class="p">.</span><span class="py">Settings</span><span class="p">.</span><span class="py">Private</span><span class="w"> </span><span class="c1">-- 1 (boolean)</span>
</span><span id="__span-16-3"><a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a><span class="nv">MP</span><span class="p">.</span><span class="py">Settings</span><span class="p">.</span><span class="py">MaxCars</span><span class="w"> </span><span class="c1">-- 2 (number)</span>
</span><span id="__span-16-4"><a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a><span class="nv">MP</span><span class="p">.</span><span class="py">Settings</span><span class="p">.</span><span class="py">MaxPlayers</span><span class="w"> </span><span class="c1">-- 3 (number)</span>
</span><span id="__span-16-5"><a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a><span class="nv">MP</span><span class="p">.</span><span class="py">Settings</span><span class="p">.</span><span class="py">Map</span><span class="w"> </span><span class="c1">-- 4 (string)</span>
</span><span id="__span-16-6"><a id="__codelineno-16-6" name="__codelineno-16-6" href="#__codelineno-16-6"></a><span class="nv">MP</span><span class="p">.</span><span class="py">Settings</span><span class="p">.</span><span class="py">Name</span><span class="w"> </span><span class="c1">-- 5 (string)</span>
</span><span id="__span-16-7"><a id="__codelineno-16-7" name="__codelineno-16-7" href="#__codelineno-16-7"></a><span class="nv">MP</span><span class="p">.</span><span class="py">Settings</span><span class="p">.</span><span class="py">Description</span><span class="w"> </span><span class="c1">-- 6 (string)</span>
</span><span id="__span-16-8"><a id="__codelineno-16-8" name="__codelineno-16-8" href="#__codelineno-16-8"></a><span class="nv">MP</span><span class="p">.</span><span class="py">Settings</span><span class="p">.</span><span class="py">InformationPacket</span><span class="w"> </span><span class="c1">-- 7 (boolean)</span>
</span></code></pre></div>
<hr />
<h3 id="mpcallstrategy"><code>MP.CallStrategy</code></h3>
<p>Enum for use with <code>MP.CreateEventTimer</code>.</p>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-17-1"><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a><span class="nv">MP</span><span class="p">.</span><span class="py">CallStrategy</span><span class="p">.</span><span class="py">BestEffort</span><span class="w"> </span><span class="c1">-- Skip trigger if previous handler hasn&#39;t finished (default)</span>
</span><span id="__span-17-2"><a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a><span class="nv">MP</span><span class="p">.</span><span class="py">CallStrategy</span><span class="p">.</span><span class="py">Precise</span><span class="w"> </span><span class="c1">-- Always trigger, even if it causes the queue to build up</span>
</span></code></pre></div>
<hr />
<h3 id="mpsleepms"><code>MP.Sleep(ms)</code></h3>
<p>Halts the entire current Lua state for a number of milliseconds.</p>
<p><strong>Parameters:</strong>
- <code>ms</code> (number) - Time to sleep in milliseconds.</p>
<p><strong>Note:</strong>
Nothing will execute in the state while sleeping. <strong>Do not sleep for more than 500ms</strong> if event handlers are registered — a sleeping state can slow the entire server down significantly.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-18-1"><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">Future</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">MP</span><span class="p">.</span><span class="nf">TriggerGlobalEvent</span><span class="p">(</span><span class="s2">&quot;MyEvent&quot;</span><span class="p">)</span>
</span><span id="__span-18-2"><a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a><span class="kr">while</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="nv">Future</span><span class="p">:</span><span class="nf">IsDone</span><span class="p">()</span><span class="w"> </span><span class="kr">do</span>
</span><span id="__span-18-3"><a id="__codelineno-18-3" name="__codelineno-18-3" href="#__codelineno-18-3"></a><span class="w"> </span><span class="nv">MP</span><span class="p">.</span><span class="nf">Sleep</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
</span><span id="__span-18-4"><a id="__codelineno-18-4" name="__codelineno-18-4" href="#__codelineno-18-4"></a><span class="kr">end</span>
</span></code></pre></div></p>
<hr />
<h3 id="mpgetstatememoryusage-number"><code>MP.GetStateMemoryUsage() -&gt; number</code></h3>
<p>Returns the memory usage of the current Lua state.</p>
<p><strong>Returns:</strong>
- (number) - Memory in bytes.</p>
<hr />
<h3 id="mpgetluamemoryusage-number"><code>MP.GetLuaMemoryUsage() -&gt; number</code></h3>
<p>Returns the total memory usage of all Lua states combined.</p>
<p><strong>Returns:</strong>
- (number) - Memory in bytes.</p>
<hr />
<h2 id="util-logging">Util — Logging</h2>
<h3 id="utilloginfo-utillogwarn-utillogerror-utillogdebug"><code>Util.LogInfo(...)</code>, <code>Util.LogWarn(...)</code>, <code>Util.LogError(...)</code>, <code>Util.LogDebug(...)</code></h3>
<p>Prints to the server log at the corresponding level.</p>
<p><strong>Parameters:</strong>
- <code>...</code> (any) - Values of any type.</p>
<p><strong>Note:</strong>
<code>Util.LogDebug</code> is only shown when <code>MP.Settings.Debug</code> is enabled.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-19-1"><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a><span class="nv">Util</span><span class="p">.</span><span class="nf">LogInfo</span><span class="p">(</span><span class="s2">&quot;Hello, World!&quot;</span><span class="p">)</span>
</span><span id="__span-19-2"><a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a><span class="nv">Util</span><span class="p">.</span><span class="nf">LogWarn</span><span class="p">(</span><span class="s2">&quot;Cool warning&quot;</span><span class="p">)</span>
</span><span id="__span-19-3"><a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a><span class="nv">Util</span><span class="p">.</span><span class="nf">LogError</span><span class="p">(</span><span class="s2">&quot;Oh no!&quot;</span><span class="p">)</span>
</span><span id="__span-19-4"><a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a><span class="nv">Util</span><span class="p">.</span><span class="nf">LogDebug</span><span class="p">(</span><span class="s2">&quot;hi&quot;</span><span class="p">)</span>
</span></code></pre></div></p>
<hr />
<h2 id="util-json">Util — JSON</h2>
<h3 id="utiljsonencodetable-string"><code>Util.JsonEncode(table) -&gt; string</code></h3>
<p>Encodes a Lua table into a JSON string.</p>
<p><strong>Parameters:</strong>
- <code>table</code> (table) - The table to encode.</p>
<p><strong>Returns:</strong>
- (string) - Minified JSON string.</p>
<p><strong>Note:</strong>
Automatically detects array vs object based on key types. Functions, userdata and unsupported types are ignored.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-20-1"><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">player</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
</span><span id="__span-20-2"><a id="__codelineno-20-2" name="__codelineno-20-2" href="#__codelineno-20-2"></a><span class="w"> </span><span class="nv">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;Lion&quot;</span><span class="p">,</span>
</span><span id="__span-20-3"><a id="__codelineno-20-3" name="__codelineno-20-3" href="#__codelineno-20-3"></a><span class="w"> </span><span class="nv">age</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">69</span><span class="p">,</span>
</span><span id="__span-20-4"><a id="__codelineno-20-4" name="__codelineno-20-4" href="#__codelineno-20-4"></a><span class="w"> </span><span class="nv">skills</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="s2">&quot;skill A&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;skill B&quot;</span><span class="w"> </span><span class="p">}</span>
</span><span id="__span-20-5"><a id="__codelineno-20-5" name="__codelineno-20-5" href="#__codelineno-20-5"></a><span class="p">}</span>
</span><span id="__span-20-6"><a id="__codelineno-20-6" name="__codelineno-20-6" href="#__codelineno-20-6"></a><span class="kd">local</span><span class="w"> </span><span class="nv">json</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">Util</span><span class="p">.</span><span class="nf">JsonEncode</span><span class="p">(</span><span class="nv">player</span><span class="p">)</span>
</span><span id="__span-20-7"><a id="__codelineno-20-7" name="__codelineno-20-7" href="#__codelineno-20-7"></a><span class="c1">-- &#39;{&quot;name&quot;:&quot;Lion&quot;,&quot;age&quot;:69,&quot;skills&quot;:[&quot;skill A&quot;,&quot;skill B&quot;]}&#39;</span>
</span></code></pre></div></p>
<hr />
<h3 id="utiljsondecodejson-table"><code>Util.JsonDecode(json) -&gt; table</code></h3>
<p>Decodes a JSON string into a Lua table.</p>
<p><strong>Parameters:</strong>
- <code>json</code> (string) - A valid JSON string.</p>
<p><strong>Returns:</strong>
- (table) - The decoded table.
- (nil) - If the JSON is invalid.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-21-1"><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">json</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;{</span><span class="se">\&quot;</span><span class="s2">message</span><span class="se">\&quot;</span><span class="s2">:</span><span class="se">\&quot;</span><span class="s2">OK</span><span class="se">\&quot;</span><span class="s2">,</span><span class="se">\&quot;</span><span class="s2">code</span><span class="se">\&quot;</span><span class="s2">:200}&quot;</span>
</span><span id="__span-21-2"><a id="__codelineno-21-2" name="__codelineno-21-2" href="#__codelineno-21-2"></a><span class="kd">local</span><span class="w"> </span><span class="nv">tbl</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">Util</span><span class="p">.</span><span class="nf">JsonDecode</span><span class="p">(</span><span class="nv">json</span><span class="p">)</span>
</span><span id="__span-21-3"><a id="__codelineno-21-3" name="__codelineno-21-3" href="#__codelineno-21-3"></a><span class="c1">-- { message = &quot;OK&quot;, code = 200 }</span>
</span></code></pre></div></p>
<hr />
<h3 id="utiljsonprettifyjson-string"><code>Util.JsonPrettify(json) -&gt; string</code></h3>
<p>Adds indentation and newlines to a JSON string for human readability (indent of 4).</p>
<p><strong>Parameters:</strong>
- <code>json</code> (string) - A valid JSON string.</p>
<p><strong>Returns:</strong>
- (string) - Pretty-printed JSON.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-22-1"><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">myjson</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">Util</span><span class="p">.</span><span class="nf">JsonEncode</span><span class="p">({</span><span class="w"> </span><span class="nv">name</span><span class="o">=</span><span class="s2">&quot;Lion&quot;</span><span class="p">,</span><span class="w"> </span><span class="nv">age</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">69</span><span class="p">,</span><span class="w"> </span><span class="nv">skills</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="s2">&quot;skill A&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;skill B&quot;</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="p">})</span>
</span><span id="__span-22-2"><a id="__codelineno-22-2" name="__codelineno-22-2" href="#__codelineno-22-2"></a><span class="nb">print</span><span class="p">(</span><span class="nv">Util</span><span class="p">.</span><span class="nf">JsonPrettify</span><span class="p">(</span><span class="nv">myjson</span><span class="p">))</span>
</span></code></pre></div></p>
<hr />
<h3 id="utiljsonminifyjson-string"><code>Util.JsonMinify(json) -&gt; string</code></h3>
<p>Removes unnecessary whitespace and newlines from a JSON string.</p>
<p><strong>Parameters:</strong>
- <code>json</code> (string) - A valid JSON string.</p>
<p><strong>Returns:</strong>
- (string) - Minified JSON.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-23-1"><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">pretty</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">Util</span><span class="p">.</span><span class="nf">JsonPrettify</span><span class="p">(</span><span class="nv">Util</span><span class="p">.</span><span class="nf">JsonEncode</span><span class="p">({</span><span class="w"> </span><span class="nv">name</span><span class="o">=</span><span class="s2">&quot;Lion&quot;</span><span class="p">,</span><span class="w"> </span><span class="nv">age</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">69</span><span class="w"> </span><span class="p">}))</span>
</span><span id="__span-23-2"><a id="__codelineno-23-2" name="__codelineno-23-2" href="#__codelineno-23-2"></a><span class="nb">print</span><span class="p">(</span><span class="nv">Util</span><span class="p">.</span><span class="nf">JsonMinify</span><span class="p">(</span><span class="nv">pretty</span><span class="p">))</span>
</span></code></pre></div></p>
<hr />
<h3 id="utiljsonflattenjson-string"><code>Util.JsonFlatten(json) -&gt; string</code></h3>
<p>Flattens a nested JSON into <code>/a/b/c</code>-style keys per RFC 6901.</p>
<p><strong>Parameters:</strong>
- <code>json</code> (string) - A valid JSON string.</p>
<p><strong>Returns:</strong>
- (string) - Flattened JSON.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-24-1"><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">json</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">Util</span><span class="p">.</span><span class="nf">JsonEncode</span><span class="p">({</span><span class="w"> </span><span class="nv">name</span><span class="o">=</span><span class="s2">&quot;Lion&quot;</span><span class="p">,</span><span class="w"> </span><span class="nv">skills</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="s2">&quot;skill A&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;skill B&quot;</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="p">})</span>
</span><span id="__span-24-2"><a id="__codelineno-24-2" name="__codelineno-24-2" href="#__codelineno-24-2"></a><span class="nb">print</span><span class="p">(</span><span class="nv">Util</span><span class="p">.</span><span class="nf">JsonFlatten</span><span class="p">(</span><span class="nv">json</span><span class="p">))</span>
</span><span id="__span-24-3"><a id="__codelineno-24-3" name="__codelineno-24-3" href="#__codelineno-24-3"></a><span class="c1">-- &#39;{&quot;/name&quot;:&quot;Lion&quot;,&quot;/skills/0&quot;:&quot;skill A&quot;,&quot;/skills/1&quot;:&quot;skill B&quot;}&#39;</span>
</span></code></pre></div></p>
<hr />
<h3 id="utiljsonunflattenjson-string"><code>Util.JsonUnflatten(json) -&gt; string</code></h3>
<p>Restores a flattened JSON back to its nested structure.</p>
<p><strong>Parameters:</strong>
- <code>json</code> (string) - A flattened JSON string.</p>
<p><strong>Returns:</strong>
- (string) - Nested JSON.</p>
<hr />
<h3 id="utiljsondiffa-b-string"><code>Util.JsonDiff(a, b) -&gt; string</code></h3>
<p>Computes a diff between two JSON strings per RFC 6902.</p>
<p><strong>Parameters:</strong>
- <code>a</code> (string) - First JSON string.
- <code>b</code> (string) - Second JSON string.</p>
<p><strong>Returns:</strong>
- (string) - JSON Patch representing the differences.</p>
<hr />
<h2 id="util-random">Util — Random</h2>
<h3 id="utilrandom-float"><code>Util.Random() -&gt; float</code></h3>
<p>Returns a random float between 0 and 1.</p>
<p><strong>Returns:</strong>
- (float)</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-25-1"><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">rand</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">Util</span><span class="p">.</span><span class="nf">Random</span><span class="p">()</span>
</span><span id="__span-25-2"><a id="__codelineno-25-2" name="__codelineno-25-2" href="#__codelineno-25-2"></a><span class="nb">print</span><span class="p">(</span><span class="s2">&quot;rand: &quot;</span><span class="w"> </span><span class="o">..</span><span class="w"> </span><span class="nv">rand</span><span class="p">)</span>
</span><span id="__span-25-3"><a id="__codelineno-25-3" name="__codelineno-25-3" href="#__codelineno-25-3"></a><span class="c1">-- rand: 0.135477</span>
</span></code></pre></div></p>
<hr />
<h3 id="utilrandomrangemin-max-float"><code>Util.RandomRange(min, max) -&gt; float</code></h3>
<p>Returns a random float within a given range.</p>
<p><strong>Parameters:</strong>
- <code>min</code> (number) - Lower bound.
- <code>max</code> (number) - Upper bound.</p>
<p><strong>Returns:</strong>
- (float)</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-26-1"><a id="__codelineno-26-1" name="__codelineno-26-1" href="#__codelineno-26-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">randFloat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">Util</span><span class="p">.</span><span class="nf">RandomRange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">1000</span><span class="p">)</span>
</span><span id="__span-26-2"><a id="__codelineno-26-2" name="__codelineno-26-2" href="#__codelineno-26-2"></a><span class="nb">print</span><span class="p">(</span><span class="s2">&quot;randFloat: &quot;</span><span class="w"> </span><span class="o">..</span><span class="w"> </span><span class="nv">randFloat</span><span class="p">)</span>
</span><span id="__span-26-3"><a id="__codelineno-26-3" name="__codelineno-26-3" href="#__codelineno-26-3"></a><span class="c1">-- randFloat: 420.6969</span>
</span></code></pre></div></p>
<hr />
<h3 id="utilrandomintrangemin-max-number"><code>Util.RandomIntRange(min, max) -&gt; number</code></h3>
<p>Returns a random integer within a given range.</p>
<p><strong>Parameters:</strong>
- <code>min</code> (number) - Lower bound.
- <code>max</code> (number) - Upper bound.</p>
<p><strong>Returns:</strong>
- (number) - Integer.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-27-1"><a id="__codelineno-27-1" name="__codelineno-27-1" href="#__codelineno-27-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">randInt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">Util</span><span class="p">.</span><span class="nf">RandomIntRange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">100</span><span class="p">)</span>
</span><span id="__span-27-2"><a id="__codelineno-27-2" name="__codelineno-27-2" href="#__codelineno-27-2"></a><span class="nb">print</span><span class="p">(</span><span class="s2">&quot;randInt: &quot;</span><span class="w"> </span><span class="o">..</span><span class="w"> </span><span class="nv">randInt</span><span class="p">)</span>
</span><span id="__span-27-3"><a id="__codelineno-27-3" name="__codelineno-27-3" href="#__codelineno-27-3"></a><span class="c1">-- randInt: 69</span>
</span></code></pre></div></p>
<hr />
<h2 id="util-profiling">Util — Profiling</h2>
<h3 id="utildebugstartprofilename"><code>Util.DebugStartProfile(name)</code></h3>
<p>Starts a named execution time measurement.</p>
<p><strong>Parameters:</strong>
- <code>name</code> (string) - Identifier for this measurement.</p>
<hr />
<h3 id="utildebugstopprofilename"><code>Util.DebugStopProfile(name)</code></h3>
<p>Stops a named measurement. Must be called after <code>DebugStartProfile</code> with the same name.</p>
<p><strong>Parameters:</strong>
- <code>name</code> (string) - Identifier for this measurement.</p>
<hr />
<h3 id="utildebugexecutiontime-table"><code>Util.DebugExecutionTime() -&gt; table</code></h3>
<p>Returns execution time statistics for every handler that has run.</p>
<p><strong>Returns:</strong>
- (table) - Per handler: <code>mean</code>, <code>stdev</code>, <code>min</code>, <code>max</code>, <code>n</code> (all in ms).</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-28-1"><a id="__codelineno-28-1" name="__codelineno-28-1" href="#__codelineno-28-1"></a><span class="kr">function</span><span class="w"> </span><span class="nf">printDebugExecutionTime</span><span class="p">()</span>
</span><span id="__span-28-2"><a id="__codelineno-28-2" name="__codelineno-28-2" href="#__codelineno-28-2"></a><span class="w"> </span><span class="kd">local</span><span class="w"> </span><span class="nv">stats</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">Util</span><span class="p">.</span><span class="nf">DebugExecutionTime</span><span class="p">()</span>
</span><span id="__span-28-3"><a id="__codelineno-28-3" name="__codelineno-28-3" href="#__codelineno-28-3"></a><span class="w"> </span><span class="kd">local</span><span class="w"> </span><span class="nv">pretty</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;DebugExecutionTime:</span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span id="__span-28-4"><a id="__codelineno-28-4" name="__codelineno-28-4" href="#__codelineno-28-4"></a><span class="w"> </span><span class="kd">local</span><span class="w"> </span><span class="nv">longest</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
</span><span id="__span-28-5"><a id="__codelineno-28-5" name="__codelineno-28-5" href="#__codelineno-28-5"></a><span class="w"> </span><span class="kr">for</span><span class="w"> </span><span class="nv">name</span><span class="p">,</span><span class="w"> </span><span class="nv">t</span><span class="w"> </span><span class="kr">in</span><span class="w"> </span><span class="nb">pairs</span><span class="p">(</span><span class="nv">stats</span><span class="p">)</span><span class="w"> </span><span class="kr">do</span>
</span><span id="__span-28-6"><a id="__codelineno-28-6" name="__codelineno-28-6" href="#__codelineno-28-6"></a><span class="w"> </span><span class="kr">if</span><span class="w"> </span><span class="o">#</span><span class="nv">name</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="nv">longest</span><span class="w"> </span><span class="kr">then</span>
</span><span id="__span-28-7"><a id="__codelineno-28-7" name="__codelineno-28-7" href="#__codelineno-28-7"></a><span class="w"> </span><span class="nv">longest</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">#</span><span class="nv">name</span>
</span><span id="__span-28-8"><a id="__codelineno-28-8" name="__codelineno-28-8" href="#__codelineno-28-8"></a><span class="w"> </span><span class="kr">end</span>
</span><span id="__span-28-9"><a id="__codelineno-28-9" name="__codelineno-28-9" href="#__codelineno-28-9"></a><span class="w"> </span><span class="kr">end</span>
</span><span id="__span-28-10"><a id="__codelineno-28-10" name="__codelineno-28-10" href="#__codelineno-28-10"></a><span class="w"> </span><span class="kr">for</span><span class="w"> </span><span class="nv">name</span><span class="p">,</span><span class="w"> </span><span class="nv">t</span><span class="w"> </span><span class="kr">in</span><span class="w"> </span><span class="nb">pairs</span><span class="p">(</span><span class="nv">stats</span><span class="p">)</span><span class="w"> </span><span class="kr">do</span>
</span><span id="__span-28-11"><a id="__codelineno-28-11" name="__codelineno-28-11" href="#__codelineno-28-11"></a><span class="w"> </span><span class="nv">pretty</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">pretty</span><span class="w"> </span><span class="o">..</span><span class="w"> </span><span class="nb">string.format</span><span class="p">(</span><span class="s2">&quot;%&quot;</span><span class="w"> </span><span class="o">..</span><span class="w"> </span><span class="nv">longest</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">..</span><span class="w"> </span><span class="s2">&quot;s: %12f +/- %12f (min: %12f, max: %12f) (called %d time(s))</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span><span class="w"> </span><span class="nv">name</span><span class="p">,</span><span class="w"> </span><span class="nv">t</span><span class="p">.</span><span class="py">mean</span><span class="p">,</span><span class="w"> </span><span class="nv">t</span><span class="p">.</span><span class="py">stdev</span><span class="p">,</span><span class="w"> </span><span class="nv">t</span><span class="p">.</span><span class="py">min</span><span class="p">,</span><span class="w"> </span><span class="nv">t</span><span class="p">.</span><span class="py">max</span><span class="p">,</span><span class="w"> </span><span class="nv">t</span><span class="p">.</span><span class="py">n</span><span class="p">)</span>
</span><span id="__span-28-12"><a id="__codelineno-28-12" name="__codelineno-28-12" href="#__codelineno-28-12"></a><span class="w"> </span><span class="kr">end</span>
</span><span id="__span-28-13"><a id="__codelineno-28-13" name="__codelineno-28-13" href="#__codelineno-28-13"></a><span class="w"> </span><span class="nb">print</span><span class="p">(</span><span class="nv">pretty</span><span class="p">)</span>
</span><span id="__span-28-14"><a id="__codelineno-28-14" name="__codelineno-28-14" href="#__codelineno-28-14"></a><span class="kr">end</span>
</span></code></pre></div></p>
<hr />
<h2 id="http_1">Http</h2>
<h3 id="httpcreateconnectionhost-port-table"><code>Http.CreateConnection(host, port) -&gt; table</code></h3>
<p>Creates an HTTP connection to an external server.</p>
<p><strong>Parameters:</strong>
- <code>host</code> (string) - Server address.
- <code>port</code> (number) - Port number.</p>
<p><strong>Returns:</strong>
- (table) - Connection object with method <code>:Get(path, headers)</code>.</p>
<hr />
<h3 id="connectiongetpath-headers"><code>connection:Get(path, headers)</code></h3>
<p>Sends an HTTP GET request.</p>
<p><strong>Parameters:</strong>
- <code>path</code> (string) - The request path.
- <code>headers</code> (table) - Headers as <code>{[string] = string}</code>.</p>
<hr />
<h2 id="fs-checks">FS — Checks</h2>
<h3 id="fsexistspath-boolean"><code>FS.Exists(path) -&gt; boolean</code></h3>
<p>Returns whether a path exists.</p>
<p><strong>Parameters:</strong>
- <code>path</code> (string) - The path to check.</p>
<p><strong>Returns:</strong>
- (boolean) - <code>true</code> if exists.</p>
<hr />
<h3 id="fsisdirectorypath-boolean"><code>FS.IsDirectory(path) -&gt; boolean</code></h3>
<p>Returns whether a path is a directory.</p>
<p><strong>Parameters:</strong>
- <code>path</code> (string) - The path to check.</p>
<p><strong>Returns:</strong>
- (boolean) - <code>true</code> if directory.</p>
<p><strong>Note:</strong>
<code>false</code> does not imply the path is a file. Use <code>FS.IsFile</code> to check separately.</p>
<hr />
<h3 id="fsisfilepath-boolean"><code>FS.IsFile(path) -&gt; boolean</code></h3>
<p>Returns whether a path is a regular file.</p>
<p><strong>Parameters:</strong>
- <code>path</code> (string) - The path to check.</p>
<p><strong>Returns:</strong>
- (boolean) - <code>true</code> if regular file.</p>
<p><strong>Note:</strong>
<code>false</code> does not imply the path is a directory.</p>
<hr />
<h2 id="fs-operations">FS — Operations</h2>
<h3 id="fscreatedirectorypath-boolean-string"><code>FS.CreateDirectory(path) -&gt; boolean, string</code></h3>
<p>Creates a directory including any missing parent directories (like <code>mkdir -p</code>).</p>
<p><strong>Parameters:</strong>
- <code>path</code> (string) - Path of the directory to create.</p>
<p><strong>Returns:</strong>
- (boolean) - <code>true</code> on success.
- (string) - Error message on failure, or <code>""</code> on success.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-29-1"><a id="__codelineno-29-1" name="__codelineno-29-1" href="#__codelineno-29-1"></a><span class="kd">local</span><span class="w"> </span><span class="nv">success</span><span class="p">,</span><span class="w"> </span><span class="nv">error_message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">FS</span><span class="p">.</span><span class="nf">CreateDirectory</span><span class="p">(</span><span class="s2">&quot;data/mystuff/somefolder&quot;</span><span class="p">)</span>
</span><span id="__span-29-2"><a id="__codelineno-29-2" name="__codelineno-29-2" href="#__codelineno-29-2"></a>
</span><span id="__span-29-3"><a id="__codelineno-29-3" name="__codelineno-29-3" href="#__codelineno-29-3"></a><span class="kr">if</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="nv">success</span><span class="w"> </span><span class="kr">then</span>
</span><span id="__span-29-4"><a id="__codelineno-29-4" name="__codelineno-29-4" href="#__codelineno-29-4"></a><span class="w"> </span><span class="nb">print</span><span class="p">(</span><span class="s2">&quot;failed to create directory: &quot;</span><span class="w"> </span><span class="o">..</span><span class="w"> </span><span class="nv">error_message</span><span class="p">)</span>
</span><span id="__span-29-5"><a id="__codelineno-29-5" name="__codelineno-29-5" href="#__codelineno-29-5"></a><span class="kr">end</span>
</span></code></pre></div></p>
<hr />
<h3 id="fsremovepath-boolean-string"><code>FS.Remove(path) -&gt; boolean, string</code></h3>
<p>Removes a file or empty directory.</p>
<p><strong>Parameters:</strong>
- <code>path</code> (string) - The path to remove.</p>
<p><strong>Returns:</strong>
- (boolean) - <code>true</code> on success.
- (string) - Error message on failure.</p>
<hr />
<h3 id="fsrenamepath-newpath-boolean-string"><code>FS.Rename(path, newPath) -&gt; boolean, string</code></h3>
<p>Renames or moves a file or directory.</p>
<p><strong>Parameters:</strong>
- <code>path</code> (string) - Current path.
- <code>newPath</code> (string) - New path.</p>
<p><strong>Returns:</strong>
- (boolean) - <code>true</code> on success.
- (string) - Error message on failure.</p>
<hr />
<h3 id="fscopypath-newpath-boolean-string"><code>FS.Copy(path, newPath) -&gt; boolean, string</code></h3>
<p>Copies a file or directory (recursive).</p>
<p><strong>Parameters:</strong>
- <code>path</code> (string) - Source path.
- <code>newPath</code> (string) - Destination path.</p>
<p><strong>Returns:</strong>
- (boolean) - <code>true</code> on success.
- (string) - Error message on failure.</p>
<hr />
<h3 id="fslistfilespath-table"><code>FS.ListFiles(path) -&gt; table</code></h3>
<p>Returns a list of file names in a directory (not recursive).</p>
<p><strong>Parameters:</strong>
- <code>path</code> (string) - Directory path.</p>
<p><strong>Returns:</strong>
- (table) - Array of file names.
- (nil) - If the path does not exist.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-30-1"><a id="__codelineno-30-1" name="__codelineno-30-1" href="#__codelineno-30-1"></a><span class="nb">print</span><span class="p">(</span><span class="nv">FS</span><span class="p">.</span><span class="nf">ListFiles</span><span class="p">(</span><span class="s2">&quot;Resources/Server/examplePlugin&quot;</span><span class="p">))</span>
</span><span id="__span-30-2"><a id="__codelineno-30-2" name="__codelineno-30-2" href="#__codelineno-30-2"></a><span class="c1">-- { 1: &quot;example.json&quot;, 2: &quot;example.lua&quot; }</span>
</span></code></pre></div></p>
<hr />
<h3 id="fslistdirectoriespath-table"><code>FS.ListDirectories(path) -&gt; table</code></h3>
<p>Returns a list of directory names inside a directory (not recursive).</p>
<p><strong>Parameters:</strong>
- <code>path</code> (string) - Directory path.</p>
<p><strong>Returns:</strong>
- (table) - Array of directory names.
- (nil) - If the path does not exist.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-31-1"><a id="__codelineno-31-1" name="__codelineno-31-1" href="#__codelineno-31-1"></a><span class="nb">print</span><span class="p">(</span><span class="nv">FS</span><span class="p">.</span><span class="nf">ListDirectories</span><span class="p">(</span><span class="s2">&quot;Resources&quot;</span><span class="p">))</span>
</span><span id="__span-31-2"><a id="__codelineno-31-2" name="__codelineno-31-2" href="#__codelineno-31-2"></a><span class="c1">-- { 1: &quot;Client&quot;, 2: &quot;Server&quot; }</span>
</span></code></pre></div></p>
<hr />
<h2 id="fs-paths">FS — Paths</h2>
<h3 id="fsgetfilenamepath-string"><code>FS.GetFilename(path) -&gt; string</code></h3>
<p>Returns the filename with extension from a path.</p>
<p><strong>Parameters:</strong>
- <code>path</code> (string) - A path string.</p>
<p><strong>Returns:</strong>
- (string) - The filename.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-32-1"><a id="__codelineno-32-1" name="__codelineno-32-1" href="#__codelineno-32-1"></a><span class="s2">&quot;my/path/a.txt&quot;</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="s2">&quot;a.txt&quot;</span>
</span><span id="__span-32-2"><a id="__codelineno-32-2" name="__codelineno-32-2" href="#__codelineno-32-2"></a><span class="s2">&quot;somefile.txt&quot;</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="s2">&quot;somefile.txt&quot;</span>
</span><span id="__span-32-3"><a id="__codelineno-32-3" name="__codelineno-32-3" href="#__codelineno-32-3"></a><span class="s2">&quot;/awesome/path&quot;</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="s2">&quot;path&quot;</span>
</span></code></pre></div></p>
<hr />
<h3 id="fsgetextensionpath-string"><code>FS.GetExtension(path) -&gt; string</code></h3>
<p>Returns the file extension including the dot.</p>
<p><strong>Parameters:</strong>
- <code>path</code> (string) - A path string.</p>
<p><strong>Returns:</strong>
- (string) - The extension (e.g. <code>".json"</code>), or <code>""</code> if none.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-33-1"><a id="__codelineno-33-1" name="__codelineno-33-1" href="#__codelineno-33-1"></a><span class="s2">&quot;myfile.txt&quot;</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="s2">&quot;.txt&quot;</span>
</span><span id="__span-33-2"><a id="__codelineno-33-2" name="__codelineno-33-2" href="#__codelineno-33-2"></a><span class="s2">&quot;somefile.&quot;</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="s2">&quot;.&quot;</span>
</span><span id="__span-33-3"><a id="__codelineno-33-3" name="__codelineno-33-3" href="#__codelineno-33-3"></a><span class="s2">&quot;/awesome/path&quot;</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="s2">&quot;&quot;</span>
</span><span id="__span-33-4"><a id="__codelineno-33-4" name="__codelineno-33-4" href="#__codelineno-33-4"></a><span class="s2">&quot;/awesome/path/file.zip.txt&quot;</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="s2">&quot;.txt&quot;</span>
</span></code></pre></div></p>
<hr />
<h3 id="fsgetparentfolderpath-string"><code>FS.GetParentFolder(path) -&gt; string</code></h3>
<p>Returns the path of the containing directory.</p>
<p><strong>Parameters:</strong>
- <code>path</code> (string) - A path string.</p>
<p><strong>Returns:</strong>
- (string) - Parent folder path.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-34-1"><a id="__codelineno-34-1" name="__codelineno-34-1" href="#__codelineno-34-1"></a><span class="s2">&quot;/var/tmp/example.txt&quot;</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="s2">&quot;/var/tmp&quot;</span>
</span><span id="__span-34-2"><a id="__codelineno-34-2" name="__codelineno-34-2" href="#__codelineno-34-2"></a><span class="s2">&quot;/&quot;</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="s2">&quot;/&quot;</span>
</span><span id="__span-34-3"><a id="__codelineno-34-3" name="__codelineno-34-3" href="#__codelineno-34-3"></a><span class="s2">&quot;mydir/a/b/c.txt&quot;</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="s2">&quot;mydir/a/b&quot;</span>
</span></code></pre></div></p>
<hr />
<h3 id="fsconcatpaths-string"><code>FS.ConcatPaths(...) -&gt; string</code></h3>
<p>Joins path segments together using the system's preferred separator, resolving <code>..</code> where present.</p>
<p><strong>Parameters:</strong>
- <code>...</code> (string) - Path segments.</p>
<p><strong>Returns:</strong>
- (string) - Joined path.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-35-1"><a id="__codelineno-35-1" name="__codelineno-35-1" href="#__codelineno-35-1"></a><span class="nv">FS</span><span class="p">.</span><span class="nf">ConcatPaths</span><span class="p">(</span><span class="s2">&quot;a&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;b&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;/c/d/e/&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;/f/&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;g&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;h.txt&quot;</span><span class="p">)</span>
</span><span id="__span-35-2"><a id="__codelineno-35-2" name="__codelineno-35-2" href="#__codelineno-35-2"></a><span class="c1">-- &quot;a/b/c/d/e/f/g/h.txt&quot;</span>
</span></code></pre></div></p>
<hr />
<h2 id="events_1">Events</h2>
<h3 id="player-connection-order">Player connection order</h3>
<div class="language-text highlight"><pre><span></span><code><span id="__span-36-1"><a id="__codelineno-36-1" name="__codelineno-36-1" href="#__codelineno-36-1"></a>onPlayerAuth → onPlayerConnecting → onPlayerJoining → onPlayerJoin
</span></code></pre></div>
<hr />
<h3 id="oninit"><code>onInit</code></h3>
<p>Triggered right after all plugin files have been loaded.</p>
<p><strong>Arguments:</strong> none
<strong>Cancellable:</strong> no</p>
<hr />
<h3 id="onconsoleinput"><code>onConsoleInput</code></h3>
<p>Triggered when the server console receives input.</p>
<p><strong>Arguments:</strong>
- <code>input</code> (string) - The text that was entered.</p>
<p><strong>Cancellable:</strong> no</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-37-1"><a id="__codelineno-37-1" name="__codelineno-37-1" href="#__codelineno-37-1"></a><span class="kr">function</span><span class="w"> </span><span class="nf">handleConsoleInput</span><span class="p">(</span><span class="nv">cmd</span><span class="p">)</span>
</span><span id="__span-37-2"><a id="__codelineno-37-2" name="__codelineno-37-2" href="#__codelineno-37-2"></a><span class="w"> </span><span class="kd">local</span><span class="w"> </span><span class="nv">delim</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">cmd</span><span class="p">:</span><span class="nf">find</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
</span><span id="__span-37-3"><a id="__codelineno-37-3" name="__codelineno-37-3" href="#__codelineno-37-3"></a><span class="w"> </span><span class="kr">if</span><span class="w"> </span><span class="nv">delim</span><span class="w"> </span><span class="kr">then</span>
</span><span id="__span-37-4"><a id="__codelineno-37-4" name="__codelineno-37-4" href="#__codelineno-37-4"></a><span class="w"> </span><span class="kd">local</span><span class="w"> </span><span class="nv">message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">cmd</span><span class="p">:</span><span class="nf">sub</span><span class="p">(</span><span class="nv">delim</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
</span><span id="__span-37-5"><a id="__codelineno-37-5" name="__codelineno-37-5" href="#__codelineno-37-5"></a><span class="w"> </span><span class="kr">if</span><span class="w"> </span><span class="nv">cmd</span><span class="p">:</span><span class="nf">sub</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="nv">delim</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">&quot;print&quot;</span><span class="w"> </span><span class="kr">then</span>
</span><span id="__span-37-6"><a id="__codelineno-37-6" name="__codelineno-37-6" href="#__codelineno-37-6"></a><span class="w"> </span><span class="kr">return</span><span class="w"> </span><span class="nv">message</span>
</span><span id="__span-37-7"><a id="__codelineno-37-7" name="__codelineno-37-7" href="#__codelineno-37-7"></a><span class="w"> </span><span class="kr">end</span>
</span><span id="__span-37-8"><a id="__codelineno-37-8" name="__codelineno-37-8" href="#__codelineno-37-8"></a><span class="w"> </span><span class="kr">end</span>
</span><span id="__span-37-9"><a id="__codelineno-37-9" name="__codelineno-37-9" href="#__codelineno-37-9"></a><span class="kr">end</span>
</span><span id="__span-37-10"><a id="__codelineno-37-10" name="__codelineno-37-10" href="#__codelineno-37-10"></a>
</span><span id="__span-37-11"><a id="__codelineno-37-11" name="__codelineno-37-11" href="#__codelineno-37-11"></a><span class="nv">MP</span><span class="p">.</span><span class="nf">RegisterEvent</span><span class="p">(</span><span class="s2">&quot;onConsoleInput&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;handleConsoleInput&quot;</span><span class="p">)</span>
</span></code></pre></div></p>
<hr />
<h3 id="onshutdown"><code>onShutdown</code></h3>
<p>Triggered when the server shuts down, after all players have been kicked.</p>
<p><strong>Arguments:</strong> none
<strong>Cancellable:</strong> no</p>
<hr />
<h3 id="onplayerauth"><code>onPlayerAuth</code></h3>
<p>Triggered when a player attempts to connect, before any other connection events.</p>
<p><strong>Arguments:</strong>
- <code>name</code> (string) - Player name.
- <code>role</code> (string) - Player role from the backend.
- <code>isGuest</code> (boolean) - Whether the player is a guest.
- <code>identifiers</code> (table) - Identifiers: <code>ip</code>, <code>beammp</code>, <code>discord</code>.</p>
<p><strong>Cancellable:</strong> yes
- Return <code>1</code> — deny with a generic message.
- Return <code>string</code> — deny with the string as the reason.
- Return <code>2</code> — allow entry even if the server is full.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-38-1"><a id="__codelineno-38-1" name="__codelineno-38-1" href="#__codelineno-38-1"></a><span class="kr">function</span><span class="w"> </span><span class="nf">myPlayerAuthorizer</span><span class="p">(</span><span class="nv">name</span><span class="p">,</span><span class="w"> </span><span class="nv">role</span><span class="p">,</span><span class="w"> </span><span class="nv">is_guest</span><span class="p">,</span><span class="w"> </span><span class="nv">identifiers</span><span class="p">)</span>
</span><span id="__span-38-2"><a id="__codelineno-38-2" name="__codelineno-38-2" href="#__codelineno-38-2"></a><span class="w"> </span><span class="kr">return</span><span class="w"> </span><span class="s2">&quot;Sorry, you cannot join at this time.&quot;</span>
</span><span id="__span-38-3"><a id="__codelineno-38-3" name="__codelineno-38-3" href="#__codelineno-38-3"></a><span class="kr">end</span>
</span><span id="__span-38-4"><a id="__codelineno-38-4" name="__codelineno-38-4" href="#__codelineno-38-4"></a>
</span><span id="__span-38-5"><a id="__codelineno-38-5" name="__codelineno-38-5" href="#__codelineno-38-5"></a><span class="nv">MP</span><span class="p">.</span><span class="nf">RegisterEvent</span><span class="p">(</span><span class="s2">&quot;onPlayerAuth&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;myPlayerAuthorizer&quot;</span><span class="p">)</span>
</span></code></pre></div></p>
<hr />
<h3 id="postplayerauth"><code>postPlayerAuth</code></h3>
<p>Triggered after <code>onPlayerAuth</code>, regardless of whether the player was accepted or rejected.</p>
<p><strong>Arguments:</strong>
- <code>wasRejected</code> (boolean) - Whether the player was rejected.
- <code>reason</code> (string) - Rejection reason if rejected.
- <code>name</code> (string) - Player name.
- <code>role</code> (string) - Player role.
- <code>isGuest</code> (boolean) - Whether guest.
- <code>identifiers</code> (table) - Identifiers.</p>
<p><strong>Cancellable:</strong> no</p>
<hr />
<h3 id="onplayerconnecting"><code>onPlayerConnecting</code></h3>
<p>Triggered when a player starts connecting, after <code>onPlayerAuth</code>.</p>
<p><strong>Arguments:</strong>
- <code>playerID</code> (number)</p>
<p><strong>Cancellable:</strong> no</p>
<hr />
<h3 id="onplayerjoining"><code>onPlayerJoining</code></h3>
<p>Triggered after the player has finished downloading all mods.</p>
<p><strong>Arguments:</strong>
- <code>playerID</code> (number)</p>
<p><strong>Cancellable:</strong> no</p>
<hr />
<h3 id="onplayerjoin"><code>onPlayerJoin</code></h3>
<p>Triggered after the player has finished syncing and entered the game.</p>
<p><strong>Arguments:</strong>
- <code>playerID</code> (number)</p>
<p><strong>Cancellable:</strong> no</p>
<hr />
<h3 id="onplayerdisconnect"><code>onPlayerDisconnect</code></h3>
<p>Triggered when a player disconnects.</p>
<p><strong>Arguments:</strong>
- <code>playerID</code> (number)</p>
<p><strong>Cancellable:</strong> no</p>
<hr />
<h3 id="onchatmessage"><code>onChatMessage</code></h3>
<p>Triggered when a player sends a chat message.</p>
<p><strong>Arguments:</strong>
- <code>playerID</code> (number)
- <code>playerName</code> (string)
- <code>message</code> (string)</p>
<p><strong>Cancellable:</strong> yes — returning <code>1</code> prevents the message from being shown to anyone.</p>
<p><strong>Usage:</strong>
<div class="language-lua highlight"><pre><span></span><code><span id="__span-39-1"><a id="__codelineno-39-1" name="__codelineno-39-1" href="#__codelineno-39-1"></a><span class="kr">function</span><span class="w"> </span><span class="nf">MyChatMessageHandler</span><span class="p">(</span><span class="nv">sender_id</span><span class="p">,</span><span class="w"> </span><span class="nv">sender_name</span><span class="p">,</span><span class="w"> </span><span class="nv">message</span><span class="p">)</span>
</span><span id="__span-39-2"><a id="__codelineno-39-2" name="__codelineno-39-2" href="#__codelineno-39-2"></a><span class="w"> </span><span class="kr">if</span><span class="w"> </span><span class="nv">message</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">&quot;darn&quot;</span><span class="w"> </span><span class="kr">then</span>
</span><span id="__span-39-3"><a id="__codelineno-39-3" name="__codelineno-39-3" href="#__codelineno-39-3"></a><span class="w"> </span><span class="kr">return</span><span class="w"> </span><span class="mi">1</span>
</span><span id="__span-39-4"><a id="__codelineno-39-4" name="__codelineno-39-4" href="#__codelineno-39-4"></a><span class="w"> </span><span class="kr">else</span>
</span><span id="__span-39-5"><a id="__codelineno-39-5" name="__codelineno-39-5" href="#__codelineno-39-5"></a><span class="w"> </span><span class="kr">return</span><span class="w"> </span><span class="mi">0</span>
</span><span id="__span-39-6"><a id="__codelineno-39-6" name="__codelineno-39-6" href="#__codelineno-39-6"></a><span class="w"> </span><span class="kr">end</span>
</span><span id="__span-39-7"><a id="__codelineno-39-7" name="__codelineno-39-7" href="#__codelineno-39-7"></a><span class="kr">end</span>
</span><span id="__span-39-8"><a id="__codelineno-39-8" name="__codelineno-39-8" href="#__codelineno-39-8"></a>
</span><span id="__span-39-9"><a id="__codelineno-39-9" name="__codelineno-39-9" href="#__codelineno-39-9"></a><span class="nv">MP</span><span class="p">.</span><span class="nf">RegisterEvent</span><span class="p">(</span><span class="s2">&quot;onChatMessage&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;MyChatMessageHandler&quot;</span><span class="p">)</span>
</span></code></pre></div></p>
<hr />
<h3 id="postchatmessage"><code>postChatMessage</code></h3>
<p>Triggered after <code>onChatMessage</code>.</p>
<p><strong>Arguments:</strong>
- <code>wasSent</code> (boolean) - Whether the message was sent.
- <code>playerID</code> (number)
- <code>playerName</code> (string)
- <code>message</code> (string)</p>
<p><strong>Cancellable:</strong> no</p>
<hr />
<h3 id="onvehiclespawn"><code>onVehicleSpawn</code></h3>
<p>Triggered when a player spawns a new vehicle.</p>
<p><strong>Arguments:</strong>
- <code>playerID</code> (number)
- <code>vehicleID</code> (number)
- <code>data</code> (string) - JSON string with vehicle configuration and positional data.</p>
<p><strong>Cancellable:</strong> yes — returning a value other than <code>0</code> prevents the spawn.</p>
<hr />
<h3 id="postvehiclespawn"><code>postVehicleSpawn</code></h3>
<p>Triggered after <code>onVehicleSpawn</code>.</p>
<p><strong>Arguments:</strong>
- <code>wasSpawned</code> (boolean) - Whether the vehicle was actually spawned.
- <code>playerID</code> (number)
- <code>vehicleID</code> (number)
- <code>data</code> (string)</p>
<p><strong>Cancellable:</strong> no</p>
<hr />
<h3 id="onvehicleedited"><code>onVehicleEdited</code></h3>
<p>Triggered when a player edits an existing vehicle.</p>
<p><strong>Arguments:</strong>
- <code>playerID</code> (number)
- <code>vehicleID</code> (number)
- <code>data</code> (string) - JSON string of the new configuration (does not include positional data).</p>
<p><strong>Cancellable:</strong> yes — returning a value other than <code>0</code> cancels the edit.</p>
<hr />
<h3 id="postvehicleedited"><code>postVehicleEdited</code></h3>
<p>Triggered after <code>onVehicleEdited</code>.</p>
<p><strong>Arguments:</strong>
- <code>wasAllowed</code> (boolean) - Whether the edit was allowed.
- <code>playerID</code> (number)
- <code>vehicleID</code> (number)
- <code>data</code> (string)</p>
<p><strong>Cancellable:</strong> no</p>
<hr />
<h3 id="onvehicledeleted"><code>onVehicleDeleted</code></h3>
<p>Triggered when a vehicle is deleted.</p>
<p><strong>Arguments:</strong>
- <code>playerID</code> (number)
- <code>vehicleID</code> (number)</p>
<p><strong>Cancellable:</strong> no</p>
<hr />
<h3 id="onvehiclereset"><code>onVehicleReset</code></h3>
<p>Triggered when a player resets a vehicle.</p>
<p><strong>Arguments:</strong>
- <code>playerID</code> (number)
- <code>vehicleID</code> (number)
- <code>data</code> (string) - JSON string of the new position and rotation (does not include configuration).</p>
<p><strong>Cancellable:</strong> no</p>
<hr />
<h3 id="onvehiclepaintchanged"><code>onVehiclePaintChanged</code></h3>
<p>Triggered when a vehicle's paint is changed.</p>
<p><strong>Arguments:</strong>
- <code>playerID</code> (number)
- <code>vehicleID</code> (number)
- <code>data</code> (string) - JSON string with the new paint data.</p>
<p><strong>Cancellable:</strong> no</p>
<hr />
<h3 id="onfilechanged"><code>onFileChanged</code></h3>
<p>Triggered when a file in the plugin directory changes.</p>
<p><strong>Arguments:</strong>
- <code>path</code> (string) - Path of the changed file, relative to the server root.</p>
<p><strong>Cancellable:</strong> no</p>
<p><strong>Note:</strong>
Files added after the server has started are not tracked.</p>
<aside class="md-source-file">
<span class="md-source-file__fact">
<span class="md-icon" title="Letztes Update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg>
</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="April 10, 2026 12:35:41 UTC">April 10, 2026</span>
</span>
<span class="md-source-file__fact">
<span class="md-icon" title="Erstellt">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg>
</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="April 10, 2026 12:35:41 UTC">April 10, 2026</span>
</span>
</aside>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright &copy; 2019 - 2024 BeamMP Mod Team
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a href="https://github.com/beammp" target="_blank" rel="noopener" title="github.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</a>
<a href="https://twitter.com/beamng_mp" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M459.4 151.7c.3 4.5.3 9.1.3 13.6 0 138.7-105.6 298.6-298.6 298.6-59.5 0-114.7-17.2-161.1-47.1 8.4 1 16.6 1.3 25.3 1.3 49.1 0 94.2-16.6 130.3-44.8-46.1-1-84.8-31.2-98.1-72.8 6.5 1 13 1.6 19.8 1.6 9.4 0 18.8-1.3 27.6-3.6-48.1-9.7-84.1-52-84.1-103v-1.3c14 7.8 30.2 12.7 47.4 13.3-28.3-18.8-46.8-51-46.8-87.4 0-19.5 5.2-37.4 14.3-53C87.4 130.8 165 172.4 252.1 176.9c-1.6-7.8-2.6-15.9-2.6-24C249.5 95.1 296.3 48 354.4 48c30.2 0 57.5 12.7 76.7 33.1 23.7-4.5 46.5-13.3 66.6-25.3-7.8 24.4-24.4 44.8-46.1 57.8 21.1-2.3 41.6-8.1 60.4-16.2-14.3 20.8-32.2 39.3-52.6 54.3"/></svg>
</a>
<a href="https://discord.gg/beammp" target="_blank" rel="noopener" title="discord.gg" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M492.5 69.8c-.2-.3-.4-.6-.8-.7-38.1-17.5-78.4-30-119.7-37.1-.4-.1-.8 0-1.1.1s-.6.4-.8.8c-5.5 9.9-10.5 20.2-14.9 30.6-44.6-6.8-89.9-6.8-134.4 0-4.5-10.5-9.5-20.7-15.1-30.6-.2-.3-.5-.6-.8-.8s-.7-.2-1.1-.2C162.5 39 122.2 51.5 84.1 69c-.3.1-.6.4-.8.7C7.1 183.5-13.8 294.6-3.6 404.2c0 .3.1.5.2.8s.3.4.5.6c44.4 32.9 94 58 146.8 74.2.4.1.8.1 1.1 0s.7-.4.9-.7c11.3-15.4 21.4-31.8 30-48.8.1-.2.2-.5.2-.8s0-.5-.1-.8-.2-.5-.4-.6-.4-.3-.7-.4c-15.8-6.1-31.2-13.4-45.9-21.9-.3-.2-.5-.4-.7-.6s-.3-.6-.3-.9 0-.6.2-.9.3-.5.6-.7c3.1-2.3 6.2-4.7 9.1-7.1.3-.2.6-.4.9-.4s.7 0 1 .1c96.2 43.9 200.4 43.9 295.5 0 .3-.1.7-.2 1-.2s.7.2.9.4c2.9 2.4 6 4.9 9.1 7.2.2.2.4.4.6.7s.2.6.2.9-.1.6-.3.9-.4.5-.6.6c-14.7 8.6-30 15.9-45.9 21.8-.2.1-.5.2-.7.4s-.3.4-.4.7-.1.5-.1.8.1.5.2.8c8.8 17 18.8 33.3 30 48.8.2.3.6.6.9.7s.8.1 1.1 0c52.9-16.2 102.6-41.3 147.1-74.2.2-.2.4-.4.5-.6s.2-.5.2-.8c12.3-126.8-20.5-236.9-86.9-334.5zm-302 267.7c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.4 59.2-52.8 59.2m195.4 0c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.2 59.2-52.8 59.2"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<div class="md-consent" data-md-component="consent" id="__consent" hidden>
<div class="md-consent__overlay"></div>
<aside class="md-consent__inner">
<form class="md-consent__form md-grid md-typeset" name="consent">
<h4>Cookie consent</h4>
<p>We use cookies to recognize your repeated visits and preferences, as well as to measure the effectiveness of our documentation and whether users find what they're searching for. With your consent, you're helping us to make our documentation better.</p>
<input class="md-toggle" type="checkbox" id="__settings" >
<div class="md-consent__settings">
<ul class="task-list">
<li class="task-list-item">
<label class="task-list-control">
<input type="checkbox" name="analytics" checked>
<span class="task-list-indicator"></span>
Google Analytics
</label>
</li>
<li class="task-list-item">
<label class="task-list-control">
<input type="checkbox" name="github" checked>
<span class="task-list-indicator"></span>
GitHub
</label>
</li>
</ul>
</div>
<div class="md-consent__controls">
<button class="md-button md-button--primary">Akzeptieren</button>
<label class="md-button" for="__settings">Einstellungen</label>
</div>
</form>
</aside>
</div>
<script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout((function(){document.querySelector("[data-md-component=consent]").hidden=!1}),250);var form=document.forms.consent;for(var action of["submit","reset"])form.addEventListener(action,(function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map((function(e){return[e,!0]})))),location.hash="",location.reload()}))</script>
<script id="__config" type="application/json">{"annotate": null, "base": "../../..", "features": ["search.suggest", "search.highlight", "search.share", "content.code.annotate", "content.code.copy", "content.action.edit", "content.action.view", "content.tooltips", "navigation.footer", "navigation.tabs", "navigation.sections", "navigation.expand", "navigation.path", "navigation.tracking", "navigation.indexes", "toc.follow"], "search": "../../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "In Zwischenablage kopiert", "clipboard.copy": "In Zwischenablage kopieren", "search.result.more.one": "1 weiteres Suchergebnis auf dieser Seite", "search.result.more.other": "# weitere Suchergebnisse auf dieser Seite", "search.result.none": "Keine Suchergebnisse", "search.result.one": "1 Suchergebnis", "search.result.other": "# Suchergebnisse", "search.result.placeholder": "Suchbegriff eingeben", "search.result.term.missing": "Es fehlt", "select.version": "Version ausw\u00e4hlen"}, "version": null}</script>
<script src="../../../assets/javascripts/bundle.79ae519e.min.js"></script>
<script src="../../../javascript/custom.js"></script>
</body>
</html>