# EmergencyOS Dokumentation

Dies ist die Dokumentationsseite für das EmergencyOS System von Ancomox. Hier erfahren Sie alles, was Sie zur Installation, Einrichtung und Verwendung wissen müssen. Wenn Sie Entwickler sind und Ihr eigenes System integrieren möchten, finden Sie hier auch unsere API-Dokumentationen.

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2Fe5PExpkRNSTyCby7QGJp%2F02.png?alt=media&amp;token=2880de9d-3a5a-40d5-bf93-a692d0a8c730" alt=""><figcaption></figcaption></figure>

{% embed url="<https://discord.gg/ancomox-roleplay-scripts-699669715055935580>" %}
Unser Discord Server
{% endembed %}

{% embed url="<https://ancomox.com>" %}
Unsere Website und Dashboard
{% endembed %}

{% embed url="<https://emergencyos.de>" %}
EmergencyOS System
{% endembed %}


# Datenbank Sync

Hier findest du eine Schritt für schritt Anleitung zu Einrichtung des Datenbank Sync Addons

## Der Datenbank Sync

### Was ist das Überhaupt?

Der Datenbank Sync von EmergencyOS steht dir aber der Lite Version als Addon zur Verfügung. Mit dem Datenabnk Sync, kannst du die Datenbank deines FiveM Servers mit EmergencyOS verknüpfen und alle Spielerdaten & Fahrzuege mit EmergencyOS Syncronisieren.

### Was bringt dir das?

#### Personenabfrage

Der Datenbank Sync bietet viele Vorteile, dadurch sind alle Spieler auf deinem Server bereits in der Personenabfrage eingetragen und man muss nicht jede Person manuell anlegen, so kannst du direkt nach Namen suchen, desweiteren werden Werte wie die Telefonnummer, das Geburtsdatum und Geschlecht Syncronisiert.

#### Telefonabfrage

Desweiteren kannst du die Telefonabfrage App effektiver Nutzen da du dann automatisch jeden besietzer einer Telefonnummer finden kannst.

#### Fahrzeugregister

Desweiteren hat der Sync auch einen großen Vorteil, wenn du das Fahrzuegregsiter benutzt. Hier werden nähmlich automatisch alle Fahrzuege deines Servers geladen und müssen nicht manuell eingetragen werden, so können deine Staatsfraktionen Kennzeichenabfragen durchführen und können direkt den Besitzer des Fahrzuegs ermittleln.

## Wie kann ich den Datenbak Sync nutzen?

Um den Datenbank Sync zu nutzen, musst du zuerst das Addon aktivieren. Logge dich dazu auf <https://ancomox.com/login> ein. Klicke dann auf **Deine Produkte** links in der Seitenleiste und klicke auf **Einstellungen** bei der EmergencyOS Instanz, bei welcher du den Sync aktivieren möchtest.

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FBpUzQllO9j4pizvDy09m%2F0332.png?alt=media&amp;token=0051be8d-6d77-42f1-a865-66d922e86b6f" alt="" width="375"><figcaption><p>Einstellungen für die gewünschte Instanz</p></figcaption></figure>

Nun bist du auf der Dasboard Seite für dein EmergencyOS, wähle hier im rechten Bereich das Addon **Datenbank Sync** und klicke auf **Aktivieren**, bestäte die AGBs und Buche das Addon für 2.99 Ancoins pro Monat.

<div align="left"><figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FRKYbyUg45d6evzyQMBGk%2F0444.png?alt=media&amp;token=0991dd95-46d6-400b-b6bc-62799ab413e4" alt="" width="375"><figcaption><p>Datenbank Sync addon auswählen</p></figcaption></figure></div>

<div align="right"><figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FJ31GXRn1j3bxwTfWS5zX%2F0555.png?alt=media&amp;token=451610d3-b0e4-4c7e-95a5-1eae82d34961" alt="" width="375"><figcaption><p>Buchung bestätigen</p></figcaption></figure></div>

Nun hast du das Datenbank Sync Addon erfolgreich aktiviert und kannst mit der Einrichtung fortfahren.

## Die Einrichtung

{% hint style="warning" %}
Beachte, dass nur MySQL Datenbanken unterstützt werden
{% endhint %}

### Datenbank konfigurieren

Bevor du mit der eigentlichen Einrichtung starten kannst muss du deine Datenbank so konfigurieren, dass sich unsere Server von außen mit deiner Datenbank verbinden können.

Die Einrichtung Unterscheidet sich zwischen Linux & Windows Servern, wir zeigen dir beide Varianten.

#### Windows Server

Um deine Datenbank auf einem Windows Server zu konfigurieren verbinde dich zunächst über eine Remote Desktop verbindung mit diesem.

{% hint style="info" %}
Zuerst müssen wir überprüfen ob dein Server Zugriff auf unsere IP Addresse hat, öffne hierfür die Kommandozeile **CMD (Appsuche > "CMD")** und tippe folgenden Command ein `ping 141.94.87.67`  solltest zu eine Antwort erhalten, ist alles gut, solltest du eine Fehlermeldung erhalten, kontaktiere bitte deinen Hosting anbieter um unsere IP Adresse Whitelisten zu lassen oder ürberprüfe deien Firewall einstellungen.
{% endhint %}

Um deine MySql Datenbank auf Windows freizugeben musst du eigentlich nur den SQL Port in der, Windows Firewall freigeben. Gehe hierzu wie folgt vor:\
\
**Schritt 1:**\
Suche nach Firewall in der Windows Suche und wähle "Firewall & Netzwerkschutz"

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2F6aViS4GmaBxbvbI9jgOB%2Fpffyv.png?alt=media&amp;token=d286613a-4ea9-4fc8-a18d-c53540c51e81" alt="" width="375"><figcaption><p>Öffne die Firewall einstellungen</p></figcaption></figure>

Klicke jetzt auf "Erweiterte Einstellungen"

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2F7SXISlTDLkWxe6Nogb9d%2Fwt9k8.png?alt=media&amp;token=d9caebcd-58c7-4903-9d7b-5bc7d0e1e310" alt=""><figcaption><p>Klicke auf "Erweiterte Einstellungen"</p></figcaption></figure>

Jetzt solltest du diese Seite sehen, klicke hier rechts oben auf "**Neue Regel**"

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FeSzTT9ORK4oTKk8DXcyu%2Fo3cqi.png?alt=media&amp;token=1b800e62-fed8-4c83-bbcc-e627b27a511b" alt=""><figcaption><p>Klicke hier auf "Neue Regel"</p></figcaption></figure>

Jetzt kannst du, die Portfreigabe Konfigurieren.\
Wähle unter Regeltyp "**Port**" und klicke dann af "**Weiter**", wähle jetzt **TCP** und gebe den Port **3306** ein

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FEYh2ygsV9xJrcUSeCQOx%2Ff49ec%20(1).png?alt=media&amp;token=a3b8f03a-59d6-4eee-817a-d4e3d46ef7b6" alt="" width="363"><figcaption><p>Wähle das TCP Protokoll und den Datenbank Port</p></figcaption></figure>

{% hint style="info" %}
Bei manchnen Datenbank Konfigurationen kann es sein, dass die Datenbank auf einem anderen Port läuft, sollte dies der falls sein weißt du aber normalweweise sowiso was du tust.
{% endhint %}

Klicke bei **Aktion & Profil** auf **Weiter**, vergebe einen Namen (eg. MySQL Port) und klicke auf "**Fertigstellen**"

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2F8to51RhwWGPXN9SfEYOV%2F2py5t.png?alt=media&amp;token=58870875-6f3b-4ae6-8f29-27c70f97bb2b" alt="" width="375"><figcaption><p>Vergebe einen Namen und klicke auf Fertigstellen</p></figcaption></figure>

**Jetzt hast du erfolgrich deine Datenbank freigegeben.**

\
Um zu überprüfen, ob die Datenbank richtig Konfiguriert ist, besuche eine Seite wie <https://portchecker.co/> und überprüfe, on der Port 3306 auf deiner IP Addresse geöffnet ist.\
\
Scrolle weiter zu "**Datenbank Benutzer**"

#### Linux (Debian 10) Server

Um deine Datenbank auf einem Linux Server zu konfigurieren verbinde dich zunächst über eine ssh Konsole mit diesem.

{% hint style="warning" %}
Zuerst müssen wir überprüfen ob dein Server Zugriff auf unsere IP Addresse hat, tippe folgenden Command in deine ssh Konsole ein `ping 141.94.87.67`  solltest zu eine Antwort erhalten, ist alles gut, solltest du eine Fehlermeldung erhalten, kontaktiere bitte deinen Hosting anbieter um unsere IP Adresse Whitelisten zu lassen oder ürberprüfe deien Firewall einstellungen.
{% endhint %}

Wenn unser Server erreichbar ist können wir mit der Einrichtubg fortfahren. Führe hierzu folgende Commands hintereinander aus.

{% hint style="info" %}
Wenn du nicht als root Benutzer eingeloggt bist ist es bei machen commands nötig davor **sudo** zu schreiben
{% endhint %}

\
`cd`

`nano /etc/mysql/my.cnf`

{% hint style="info" %}
Dies öffnet die my.cnf (mysql config Datei) im Linux eigenen Editor nano, in einigen fällen kann es sein, dass sich diese Datei an einer anderen stelle befindet, sollte aber zu finden sein:\
\
Du kannst die Datei auch über FTP suchen und mit von dort aus mit deinem Editor bearbeiten.
{% endhint %}

Nun sollte sich eine Datei geöffnet haben und deine consoel sollte ca. so aussehen:<br>

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2Fb3NFSybxKM6WUOrtGJ5U%2Fcons.png?alt=media&amp;token=0c1a6227-7b6b-4844-9df3-ff27dfb51972" alt="" width="563"><figcaption><p>Die my.cnf Datei</p></figcaption></figure>

Suche in diese Datei nach der Zeile in der `bind-address` steht, falls ein # vor der Zeile steht, entferne dieses und setze bin address auf `bind-address = 0.0.0.0` das sollte in der Datei dann so aussehen.

`bind-address = 0.0.0.0`

Jetzt musst du die Datei Speichern, drücke hierfür in nano editor zuerst **STRG + X**, dann wirst du gefragt ob du die Datei Speichern möchtest, bestätige dies mit **Y** und dann **Enter.**

Jetzt solltest du wieder in der gewohnten Konsole sein, jetzt musst du die Datenbank noch neustarten, mache dies mit folgendem Befehl

`systemctl restart mysql.service`

Solltest du hier eine Fehlermeldung erhalten, überprüfe die Datei nocheinmal. Ansonsten sollte die Datenbank jetzt Konfiguriert sein.\
\
Um zu überprüfen, ob die Datenbank richtig Konfiguriert ist, besuche eine Seite wie <https://portchecker.co/> und überprüfe, on der Port 3306 auf deiner IP Addresse geöffnet ist.

{% hint style="info" %}
In seltenen fällen kann es möglich sein das eine Firewall Konfiguration den Port 3306 blocked, was bei Linux Server aber nicht oft vorkommt.\
\
Sollte es nicht funtionieren und du bist dir sicher dass du alles andere richtig gemacht hast. führe diesen Command aus, um den Port in der Linux Fiewall (iptables) freizugeben:

**`iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT`**
{% endhint %}

{% hint style="warning" %}
Bei besonderen Konfigurationen, ist es möglich, dass die Datenbank nicht auf Port 3306 liegt, sollte das der fall sein, weißt du normalerweise eh was du tust.
{% endhint %}

### Datenbank Benutzer

So, da wir nun unsere Datenbank Konfiguriert haben, müssen wir noch einen neuen Benutzer für EmergencyOS anlegen. Logge dich hierfür mit einem Account mit hohen Berechtigungen bei deinem phpmyadmin ein und befolge folgende schritte:

**Schritt 1**\
Klicke auf das Home Symbol links oben und dann auf den reiter "**Benutzerkonten**" rechts oben.

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2Frwf22HNB1udQn5MPHBW9%2Fyrdxi.png?alt=media&amp;token=c0725f80-7670-48b0-b50c-f1a563ea1d71" alt="" width="375"><figcaption><p>Klicke auf Home und dann auf Benutzerkoten</p></figcaption></figure>

**Schritt 2**\
Klicke auf "**Benutzerkonto hinzufügen**"<br>

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FZesjL3cmAQgAbVTlF13y%2Flwv83.png?alt=media&amp;token=bff671d0-e9a9-488d-94fa-32866f13d007" alt="" width="375"><figcaption><p>Klicke auf "Benutzerkonto hinzufügen"</p></figcaption></figure>

**Schritt 3**\
Jetzt kannst du die Daten für den neuen Benutzer anlegen, wäle einen Benutzernamen am besten **emergencyos** oder ähnliches. Jetzt bei Hostname wählst du "Dieser Host" und tippst die IP Addresse **`141.94.87.67`** ein. Um ein sicheres Passwort zu erhalten klicke auf "Generieren" und kopiere dir das Generierte Passwort für später.\
\
Unten bei den Rechten reicht es die **SELECT** rechte freizugeben

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FTFK36iBoTsc32RWosfT1%2F54jte%20(2).png?alt=media&amp;token=908303cd-abf2-44f9-8a4c-b17b6ffd8a60" alt=""><figcaption><p>Erstelle einen neuen Benutzer mit SELECT rechten</p></figcaption></figure>

Klicke jetzt unten auf **OK**

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2F5uA17R308z0UBM7Ugj91%2F94rvj.png?alt=media&amp;token=4c84ff8f-51fd-4736-ae43-2498ecb5f90b" alt="" width="349"><figcaption><p>Erstelle den Account indem du auf OK klickst</p></figcaption></figure>

Jetzt hast du erfolgrich einen Benuteraccount erstellt, nun kannst du diesen Account mit EmergencyOS verbinden, wie das geht erfährst du im nächsten Schritt.

### Datenbank mit EmergencyOS verbinden

Um den Datenbank Sync einzurichten musst du auf <https://emergencyos.de/> welcheseln.\
logge dich dort nun mit deinen Admin Zugangsdaten, welche du beim Bestellen des Produkts erhalten hast ein.\
\
Wenn du dich erfolgrich eingeloggt hast befindest du dich auf dem EmergencyOS Desktop, klicke hier links unten auf das EmergencyOS Logo und öffne das Startmenu, klicke im Startmenu links unten auf das Zahnrad Icon um die Einstellungen zu öffnen.

<div align="left"><figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FimHDW4dCQCviVgKwuYyo%2F01.png?alt=media&amp;token=6e9acdb6-86f9-4bf4-aa98-d070e7baad3a" alt="" width="261"><figcaption><p>Einstellungen aufrufen</p></figcaption></figure></div>

<div align="right"><figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FCVVR0NJXVGHr9uSwCDmK%2F022.png?alt=media&amp;token=e952a8aa-13fe-4e08-afd7-31e45c200242" alt="" width="375"><figcaption><p>Datenbank Sync einstellungen auswählen</p></figcaption></figure></div>

Wähle in den Einstellungen nun den Punkt **Datenbank Sync** dort solltest du jetzt folgende Seite sehen. Klicke hier auf "**Anlegen**".

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FTCUbO3F2k1DvNDDidjSt%2F0666.png?alt=media&amp;token=68a07cce-5ca2-4bd9-8b6b-f2b52ae657cb" alt=""><figcaption><p>Datenbank Sync anlegen</p></figcaption></figure>

Jetzt solltest du nach deinen Datenbank Zugangsdaten gefragt werden, trage diese ein.

{% hint style="info" %}
Eventuell angezeigte Fehler/Warnungen können ignoriert werden.\
Auch falls in den Eingabefeldern sich bereits Text befindet, diesen einfach zuerst löschen.
{% endhint %}

**IP Addresse der Datenbank:**\
Trage hier die IP Adresse des Servers ein auf dem die Datenbank läuft, falls du einen anderen Port als 3306 nutzt auch diesen, also zb. **194.176.82.105:0633**

**Datenbankname**\
Trage hier den Namen der Datenbank ein in welcher deine Server Daten liegen, diesen findest du in phpmyadmin

**Benutzername**\
Bei Benutzername trägst du den Benutzernamen, welchen zu zuvor erstellt hast ein\
\
**Passwort**\
Hier trägst du das Passwort des Benutzers ein welches du zuvor erstellt und kopiert hast

Das sollte jetzt ungefär so aussehen, klicke auf "**Weiter**"

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FjynZLjQM105cFF8Y4s8X%2F07777.png?alt=media&amp;token=05df43f3-dc5e-45e5-9564-9fd578f91eef" alt=""><figcaption><p>Nachdem du alle Daten eingetragen hast klicke auf Weiter</p></figcaption></figure>

Nun kann es bis zu einer Minute dauern, bis du weitergeleitet wirst, wir stellen gerade die Verbindung zu deiner Datenbank her.\
\
Solltest du einen Fehler "**Connection Timed Out**" erhalten, überprüfe die Konfiguration deiner Datenbank, deine Eingegebene IP Addresse udn ob dein Server unseren Server erreichen kann wie oben beschrieben.\
\
Wenn du alles richtig gemacht hast, siehst du nun folgende Seite:

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FmEEUr7740rntHpwzvXKs%2Fo9s27.png?alt=media&amp;token=8cd4b19a-d8d0-403f-b7b1-e53d95dc9fe5" alt=""><figcaption><p>Hier kannst du die Tabelle für User &#x26; Fahrzuege auswählen</p></figcaption></figure>

Wähle hier die Datenbank Tabelle aus in den deine user und die in der deine Fahrzeuge gespeichert sind. Das sollte bei einem Standart ESX Server so aussehen (**users** & **owned\_vehicles**), klicke nun auf "**Weiter**"

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2Fo8olzApqpI42AMT2JVlC%2Foj8mp.png?alt=media&amp;token=814a6a7c-5494-47d8-97e8-5e075ce814db" alt=""><figcaption><p>Wähle hier die richtigen Tabllen aus</p></figcaption></figure>

Nun solltest du folgende Seite sehen:<br>

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FKKesoxdeWmTrnWjRGfyL%2Fnegta.png?alt=media&amp;token=5c3ee423-bad8-4bd8-b6bb-35af7ec4cd8f" alt="" width="563"><figcaption><p>Hier musst du die richtigen Spalten für die users Tabelle auswählen</p></figcaption></figure>

Hier musst du alle korrekten Spalten für die users tabelle auswählen, diese bedeuten Folgendes

**Zusammengesetzter Name?**\
Wähle das hier ab, wenn sich Name & Nachname in der selben Spalte befinden sollte, das ist aber im normalfall nicht der Fall.\
\
**Identifier**\
Wähle hier die Spalte aus in der der einzigartige Identifer des Spielers befindet (bei ESX `identifier`)

{% hint style="info" %}
Diese identifer wird auch bei dem API Addon verwendet um zb. eine Rechnung auszustellen oder den Job des Spielers zu erhalten.
{% endhint %}

**Telefonnummer**\
Wähle hier die Spalte aus in der die Spalte aus in der sich die Telefonnummer des Spielers befindet. (Bei ESX ist es `phone_number`)

{% hint style="danger" %}
Manche Handy Scripts speichern die Telefonnummer nicht direkt in einer Spalte sonden mit mehreren Daten in einem Feld, wir arbeiten bereits an einer Lösung für dieses Problem.
{% endhint %}

**Vorname**\
Wähle hier die Spalte in der sich der Vorname des Spielers befindet (Bei ESX: `firstname`)

**Nachname**\
&#x20;Wähle hier die Spalte in der sich der Namename des Spielers befindet (Bei ESX: `lastname`)

**Geschlecht**\
Wähle hier die Spalte aus in der das geschlecht des Speielers gespichert wird (Bei ESX `sex` oder `isMale`)\
\
**männlicher Geschlechtswert**\
Gebe hier ein was in der Geschlecht-Spalte als männlich angesehen wird (Bei ESX `m` oder `1`, je nach Version). Beachte: Alle anderen Werte werden als Weblicher Spieler angelegt.\
\
Die Konfiguration sollte jetzt ca. so aussehen (Beispiel für ESX 1.9.4):

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FNvfSfeqyp8zAWGDbcnCL%2Fgu11i.png?alt=media&amp;token=e11484cd-0d95-4f79-97a0-06d7452c4857" alt=""><figcaption><p>Alle Spalten der users Tabelle wurden ausgewählt</p></figcaption></figure>

Scrolle jetzt weiter nach unten um die weiteren Felder zu Konfigurieren

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2F0ekRVRQThyPUglyv3KYX%2Fm8y3y.png?alt=media&amp;token=76035b05-6184-49d0-8d4f-0efd44f9f182" alt=""><figcaption><p>Wähle hier wieder die Richtigen Spalten</p></figcaption></figure>

**Gerburtsdatum**\
Wähle hier die Spalte in der sich das Geburtsdatum des Spielers befindet (Bei ESX: `dateofbirth`)\
\
Jetzt kommen wir zur Fahrzuegkonfiguration:\
\
**Unique ID**\
Hier musst du einen eindutigen Identifier für das Fahrzeug angeben, die gute Methode ist, einen weiteren Index in deiner Fahrzuegtabelle zu erstellen, welcher das Fahrzueg einzigarig macht, das machst du folegndermaßen:\
\
1\. Logge dich in phpmyadmin ein\
2\. Wähle deine Server Datenbank aus\
3\. Wähle die Fahrzeugtabelle aus\
4\. Klicke auf Struktur & Wähle "**Spalte(n) hinzufügen**", dort "**Am Tabellenanfang**" und klicke auf **OK**

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FUMMsCBry2zxFKnfitcHS%2F4ray5.png?alt=media&amp;token=3fd434d5-396c-4984-a5ca-fd6ad939a3e3" alt="" width="563"><figcaption><p>Lege eine neue Spalte in der Fahrzeugtabelle an</p></figcaption></figure>

4\. Vergebe einen Namen (eg. **id**), wähle den Typ **INT**, die Länge **11**, gebe Bei Index **Unique** and und wähle das Kästchen bei **A\_I** (**Wichtig!!**) und klicke dann auf "**Speichern**"

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2Fee8xz3w6boDRv0pjHPVM%2Fw9wfi%20(1).png?alt=media&amp;token=30bf4a12-51d5-477d-b695-815d0d5592be" alt=""><figcaption><p>Erstelle einen neuen Unique Index mit dem Namen id</p></figcaption></figure>

{% hint style="info" %}
Es kann sein dass du bei der Auswahl **Index > Unique** noch ein Fenster angezeigt bekommst in dem du einen Namen vergeben sollst
{% endhint %}

5. Nun hast du erfolgrich einen Unique Index Angelegt, jetzt sollte jedes Fahrzueg am Anfang eine Spalte mit dem namen **id** haben in der siche eine fortlaufende zahl befindet

Du könntest hier Theoretisch auch das Kennzeichen als Unique ID nehmen, da bestht aber das problem, wenn sich das Kennzeichen des Fahrzuegs ändert (durch ein Plate Chnage Script oä.), der Sync dieses nichtmehr erkennt und ein neues Anlegt und im schlimmsten fall fals zwei Fahrzuege das Kennzeichen "tauschen", falsche Daten angezeigt werden. Wie bereits gesagt, diese Methode ist nicht empfohlen.\
\
**Owner**\
Gebe hier die die Spalte an in der der Besitzer des Fahrzuegs deklariert ist, dies muss der selbe "identifer" wie oben bei der User Knonfiguration "identifer" um das Fahrzeug einem user zuordnen zu können. (Bei ESX `owner`)\
\
**Kennzeichen**\
Sollte relativ saelbsterklärend sein, wähle hier die Spalte in der sich dass Kennzeichen des Fahrzuegs befindet (Bei ESX `plate`)

**Fahrzueugdaten**\
Wähle hier die Spalte in der die Fahrzuegdaten hinterlegt sind, meinstens ein Text mit ganz vielen Werten. (Bei ESX `vehicle`)\
\
**Type**\
Wähle hier die Spalte in der der Fahrzueg Typ hinterlegt ist (Bei ESX `type`)

{% hint style="warning" %}
Aktuell werden nur die Types car, boat & plane erkannt, wir arbeiten daran custom Types definieren zu können.
{% endhint %}

Die fertige Konfiguration sollte dann ca. so aussehen, klicke auf den "**Weiter**" Button

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2Fce4lr6xvCUj8wzRpEqW3%2Frwyce.png?alt=media&amp;token=975ca85f-07ca-429f-affc-25cc799e4ac0" alt=""><figcaption><p>Wähle alle Spaltwen aus un kllicke auf "Weiter"</p></figcaption></figure>

Jetzt kann es etwas dauern, wir fragen gerade testdaten ab. Nach einiger Zeit solltest du folgede Seite sehen:<br>

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FpgwZnFjOQDK9mXyWulBx%2Fslhbm.png?alt=media&amp;token=7315083d-ca9a-4147-a4ac-00a775509923" alt=""><figcaption><p>Überprüfe deine Testdaten und klicke auf "Fertigstellen"<br></p></figcaption></figure>

Überpüfe hier ob die Spieler richtig erkannt werden (Es werden nur die ersten 5 Spieler angezeigt)\
Falls alles richtig ist, klicke auf Fertigstellen und schließe die Seite. Sollten die Spieler nicht richtig erkannt werden, klicke auf "Zurück" un überpüfe deine Eingaben.

{% hint style="warning" %}
Wir sind uns Bewusst, das der "Fertigstellen" Button keine Raktion Zeigt, bitte klicke diesden und schließe dann manuell die Seite. Wir arbeiten bereits daran.
{% endhint %}

Nun ist der Datenbank Syc fertig eingerichtetm du solltest nun in der "Personenregister" & "Fahrzeugreister" App deine Spieler und Fahrzuege finden:\
\
Wenn du jetzt erneut die Datenbank Sync einstellungen öffnest, solltest du diese Seite vorfinden.

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FKUfZhlkDw7uRt5f53zRI%2Fcp0s3.png?alt=media&amp;token=249c916a-b39c-4051-98e4-78706454845a" alt=""><figcaption><p>Aktuell aktivier Sync</p></figcaption></figure>

Hier findest du deine Aktuell aktive Konfiguration und kannst verschienden Aktionen wie eine Neueinrichtung oder einen Mauellen Sync starten.\
\
Jetzt ist deine Datenbank Erfolgrich mit EmergencyOS Verbunden und wird von unserem System automatsich alle 20 Minuten Syncronisiert.&#x20;


# Custom Fahrzeuge

Hier wird erklärt wie du custom Fahrzuege hinzufügen kannst, so dass diese vom Datenbank Sync erkannt werden.

## Einleitung

Der Datenbank Sync erkennt standartmäßig alle Vanilla Fahrzuege und fügt für diese Automatisch das Modell und ein Bild im Fahrzeugregister hinzu. Wenn du aber custom Fahrzeuge (Addon Cars) auf deinem Server hast, haben diese Standartmäßig im Register kein Bild und keinen Namen.\
\
Wie du eben diese Fahrzeuege hinzufügen kann, wird dir hier erklärt.

## Einrichtug

### Schritt 1 - Einstellungen aufrufen

Um custom Fahrzuege einzurichten musst du auf <https://emergencyos.de/> welcheseln.\
Logge dich dort nun mit deinen Admin Zugangsdaten, welche du beim Bestellen des Produkts erhalten hast ein.\
\
Wenn du dich erfolgrich eingeloggt hast befindest du dich auf dem EmergencyOS Desktop, klicke hier links unten auf das EmergencyOS Logo und öffne das Startmenu, klicke im Startmenu links unten auf das Zahnrad Icon um die Einstellungen zu öffnen.

<div align="left"><figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FimHDW4dCQCviVgKwuYyo%2F01.png?alt=media&amp;token=6e9acdb6-86f9-4bf4-aa98-d070e7baad3a" alt="" width="261"><figcaption><p>Einstellungen aufrufen</p></figcaption></figure></div>

<div align="right"><figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FMfKfXoUid24RgYUjOEsr%2Fbrtxu.png?alt=media&amp;token=1f59d799-8873-4e56-8be9-04ae41d63f86" alt="" width="313"><figcaption><p>Wähle die "Custom Cars" einstellungen</p></figcaption></figure></div>

Jetzt solltest du folgende Seite sehen, sobald du bereits Fahrzuege angelegt hast siehst du hier eine Liste, klicke hier auf "Neues Fahrzeug".

![](https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FD1Juac4pNkjSMnoCa2tD%2Fgjdnm.png?alt=media\&token=331cb456-2872-4c72-8f8f-d8efa46fbaf6)

Jetzt siehst du folgende Seite, hier kannst du jetzt deine Fahrzuegdaten eintragen

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FgI1Bd5Zwnu8MwP3hK8I2%2F8ge69.png?alt=media&amp;token=bb841289-7a82-43b6-bf3c-493a4877bae5" alt=""><figcaption><p>Hier kannst du Daten für das custom Fahrzeug hinzufügen</p></figcaption></figure>

#### Fahrzuegname emosgethash

Trage hier ein wie das Fahrzeug heißen soll (zb. Mercedes S63). Wie genau du das Fahrzueg nennst ist grundsätzlich egal, dies ist der Name, welcher nacher bei den Fahrzuegdetails als "Modell" angezeigt wird.

#### Hash

{% hint style="info" %}
Beachte, dass du für den "emosgethash" Command du mindestens die Version der Tablet resouce benötigst.
{% endhint %}

Hier musst du den Hash des Addon Fahrzeugs angeben. Um diesen zu erhalten musst du dir das Fahrzeug ingame einmal spawnen, dann musst du dich als Fahrer hineinsetzen und dann kannst du den command **`emosgethash`** ausführen. Wenn du jetzt F8 drückst solltest du folgenden print sehen:

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FeWhcSGIrgxwYkvkwH3jz%2Fhwqfo.png?alt=media&amp;token=2f541db0-0d50-4f8c-97a1-1039e3ab6a31" alt=""><figcaption></figcaption></figure>

Dieser Zahlenwert ist der Fahrzueg Hash, welchen du bei dem custom Fahrzeug eintragen musst.

#### Direktlink zum Fahrzeugbild

Hier musst du einfach einen Link zum Bild des Fahrzeugs pasten, am besten machst du ein Sceenshot des Fahrezugs und lädst diesen auf einem Bild Hoster wie imagur oä. hoch. Wichtig ist nur dass es ein Direktlink zum Bild ist.

Wenn du jetzt alle Werte eingetragen hast sollte es ungefär so aussehen, klicke jetzt auf "**Fahrzeug erstellen**"

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2F2uzXvXTeeRzoCO83wt7z%2Filj02.png?alt=media&amp;token=2402c3db-b406-4544-ae88-2b52cd5242c4" alt=""><figcaption><p>Klicke auf "Fahrzueg Speichern", wenn du alle Felder ausgefüllt hast</p></figcaption></figure>

Jetzt solltest du wieder auf der übersichtsseite sein und solltest nun dein gerade erstelltes Fahrzeug in der liste sehen. Warte nun auf den nächsten automatischen Sync oder Synce deine Datenbank einmal manuell, dann sollte das Fahzeug Bild & der Name auch bei den entsprechenden Fahrzeugen im register erscheinen.


# Gameserver API

Alles zur Einrichtung des Addons "Gameserver API" finden Sie hier.

Die Gameserver API ist die Schnittstelle zwischen deinem Gameserver und EmergencyOS. Hier erfährst du alles zur Einrichtung. Die Funktionen, die diese API ermöglicht, sind bereits in unserer Tablet Resource für FiveM integriert. Wenn du deinen Gameserver auf einer anderen Plattform hast, kannst du mit unserer API-Dokumenten ein custom System erstellen.

## Addon "Gameserver API" aktivieren

1. Melde dich im Ancomox Dashboard an und öffne die Einstellungen deiner EmergencyOS Instanz, um das Addon zu aktivieren.
2. Im unteren rechten Bereich findest du die Box "EmergencyOS API" und unterhalb einen "Aktivieren"-Button. Klicke auf diesen und aktiviere das Addon (1.99 Ancoins pro Monat).

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FGnTghfHWzkfoW2ufnRRZ%2Fia9tl.png?alt=media&amp;token=6f0ff253-1c7f-4c5b-9dc9-1272adab7b5d" alt=""><figcaption><p>Klicke Aktivieren um den Zugang freizuschalten</p></figcaption></figure>

## Einrichtung

Um die Gameserver API einzurichten können Sie dieser Anleitung folgen:

{% content-ref url="/pages/TJKSZ0LjHBo5EK7VpjCg" %}
[Einrichtung](/installation/gameserver-api/einrichtung)
{% endcontent-ref %}

### &#x20;


# Einrichtung

Hier wird erklärt, wie Sie die Gamerserver API einrichten

Hier erfahren Sie, wie Sie den API-Zugang im Dashboard korrekt konfigurieren.

## Gameserver API einrichten

Nach der Aktivierung des Addons im Dashboard findest du eine Box mit dem Titel "EmergencyOS API" mit vier Konfigurationsfeldern, die du ausfüllen musst.

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FMDl0GOxPwX4Zrw5rjkOn%2Fimage.png?alt=media&amp;token=81047991-208d-4620-89f1-d8bcf83d894c" alt=""><figcaption></figcaption></figure>

#### IP Adresse

Hier musst du die IP Adresse deines Gameservers eintragen, zB. 194.164.161.213

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FuKFUBPzQxiVBzeuMte2b%2Fimage.png?alt=media&amp;token=9642e0fd-6533-4e27-aa5a-d9a165d9199a" alt=""><figcaption><p>Geben Sie hier die IP Adresse ihres Gameservers ein</p></figcaption></figure>

#### Port

Hier musst du den Port deines Gameservers eintragen, für FiveM ist es normalerweise 30120

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2F5snzitlUF7IixFONjpZx%2Fimage.png?alt=media&amp;token=a24414f4-f688-4018-b7ef-4ae5da9bf817" alt=""><figcaption><p>Geben Sie hier den Port ihres Gameservers ein</p></figcaption></figure>

#### Endpoint

Das ist der API Endpoint deines Gameservers. Wenn du FiveM verwendest, musst du hier den Namen der Tablet-Resource eintragen (standardmäßig "EmergencyOS"). Wenn du auf einer anderen Plattform bist und ein custom System baust, weißt du sowieso, was du tust. Der Endpoint für die Anfrage bildet sich dann wie folgt:

```javascript
https://ipadresse:port/endpoint
```

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2F9ti201q3okSFKCaQol6L%2Fimage.png?alt=media&amp;token=48a579fb-ed33-42e0-83d4-631c55ef1d0e" alt=""><figcaption><p>Geben sie hier den Endpoint auf ihrem Gameserver ein</p></figcaption></figure>

#### API Key

Geben Sie hier einen API Key ein, um die Verbindung zwischen Gameserver und EmergencyOS zu validieren. Verwenden Sie eine Website wie [https://passwordsgenerator.net](https://passwordsgenerator.net/), um einen sicheren Key zu generieren. Der Key wird dann zusammen mit Ihrer IP-Adresse verwendet, um die Anfrage zu validieren.

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FL3tDIbOfEC6XPGuVkviY%2Fimage.png?alt=media&amp;token=e85603e1-91e5-4b4b-84be-3aaf2526227b" alt=""><figcaption><p>Geben sie hier ihren API Key ein</p></figcaption></figure>

Nachdem du alle Felder ausgefüllt klicke auf Speichern. Jetzt solltest du ein Notify mit der meldung "Erfolgreich gespeichert erhalten". Die API ist nun aktiv.

## Verbindung mit FiveM Tablet

Um die API mit dem FiveM Tablet zu verbinden, überprüfen sie folgende Seite

{% content-ref url="/pages/Zmn7pdArsW0pG5UpOPH2" %}
[API Verbindung](/installation/ingame-tablet/api-integration/api-verbindung)
{% endcontent-ref %}


# Ingame Tablet

## Wo bekomme ich es her?

Durch einige Neuerungen am Tablet verteilen wir dieses nun über das CFX.re Keymaster System. Bitte gehen Sie auf den folgenden Link, melden Sie sich mit Ihrem CFX.re und Discord-Konto an, und Sie können das kostenlose Paket "Emergency OS - Tablet" erwerben.

{% embed url="<https://ancomox-webstore.tebex.io/package/5501311>" %}

Danach können Sie das Skript unter diesem Link herunterladen:

<https://keymaster.fivem.net/>

## Installation

{% hint style="danger" %}
Diese Dokumentationsseite ist unvollständig und wird in den nächsten Tagen ergänzt
{% endhint %}

### API Verbindung

{% content-ref url="/pages/Zmn7pdArsW0pG5UpOPH2" %}
[API Verbindung](/installation/ingame-tablet/api-integration/api-verbindung)
{% endcontent-ref %}


# Einrichtung


# API Integration


# API Verbindung

Hier erfahren sie, wie sie die API mit unserer Tablet Resource für FIveM Verbinden

Bevor Sie die API mit dem Tablet verbinden, müssen Sie die API und die Tablet-Resource zuerst einrichten. Folgen Sie den Anweisungen aus folgender Seite um das Tablet einzurichten falls sie dies nicht bereits getan haben.

{% content-ref url="/pages/UQkK7IiYulcHH36AUcP3" %}
[Einrichtung](/installation/ingame-tablet/einrichtung)
{% endcontent-ref %}

## FiveM Tablet mit der API verbinden

Um die FiveM Tablet Resource mit der API zu verbinden, befolgen Sie diese Schritte:

1. Öffnen Sie den Ordner EmergencyOS/config.
2. Öffnen Sie die Datei api\_config.lua.
3. Setzen Sie SVConfig.UseAPI = true.
4. Füllen Sie die folgenden Felder aus:

#### username

Tragen Sie hier den Benutzernamen des Administrator Kontos ein, den Sie beim Kauf per E-Mail erhalten haben. Stellen Sie sicher, dass Sie den richtigen Benutzernamen verwenden, um Zugriff auf die API zu erhalten.

#### passoword

Tragen Sie hier das Passwort des Administrator Kontos ein, den Sie beim Kauf per E-Mail erhalten haben. Stellen Sie sicher, dass Sie das richtige Passwort verwenden, um Zugriff auf die API zu erhalten.

#### key

Tragen Sie hier den API Key ein, den Sie zuvor im Dashboard festgelegt haben. Stellen Sie sicher, dass Sie den richtigen API Key verwenden, um eine erfolgreiche Verbindung herzustellen.

Jetzt müssen Sie die Datei speichern und die Ressource neustarten. Sie sollten nun in der Server-Konsole die Meldung "Found Instance (xxx) | EmergencyOS API connection successful..." sehen.

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FscgvEZ9UlKMpxcfxD1Hg%2Fimage.png?alt=media&amp;token=ea054337-55ae-469a-be13-e629e25e8205" alt=""><figcaption></figcaption></figure>

Wenn dies der Fall ist, ist die Verbindung erfolgreich und alle Funktionen, sofern einzeln in der Konfiguration aktiviert und konfiguriert sind, verfügbar sein.


# API Funktionen

Hier finden Sie alle Funktionen der Tablet API integration

## I. Rechnungs Integration

Mit der API-Verbindung und dem Tablet kann das **Ticket System von EmergencyOS** mit Ihrem **Rechnungssystem** verknüpft werden, dadurch bekommt ein Spieler **automatisch** eine Rechung wenn ein Ticket für ihn ausgestellt wurde. Wenn die Rechnung bezahlt wird, wird auch das Ticket **automatisch** als bezahlt markiert.

### Einrichtung

Um Ihr Rechnungssystem zu integrieren, öffnen Sie die `api_config.lua`, dort finden Sie die Konfiguration für die Rechnungsintegration.

```lua
SVConfig.UseBilling = true
SVConfig.UseBillingUI = true
SVConfig.UseCustomBillAssign = false
SVConfig.BillingTrigger = "EmergencyOS:billPayed"
```

#### Konfigurationen

```lua
SVConfig.UseBilling = true
```

Hier können sie einstellen, ob Sie die Rechnungsintegration nutzen möchten.

```lua
SVConfig.UseBillingUI = true
```

Hier können sie auswählen, ob Sie das Script "BillingUi" von jaksam1074 für ihre Rechnungen benutzen. Dieses wurde bereits standartmäßig integriert.

```lua
SVConfig.UseCustomBillAssign = false
```

Falls Sie ein anderes Rechnungssystem als esx\_billing oder billingUi benutzen, müssen sie dies auf `true` setzen und dann in `sv_integrations.lua` die Rechnungserstellung selbst konfigurieren.&#x20;

```lua
SVConfig.BillingTrigger = "EmergencyOS:billPayed"
```

Dies ist der Trigger welcher an der stelle in ihrem Rechnungssystem getriggert werden muss, an der die Rechnung bezahlt wird. Dieser Trigger muss die `billId` übergeben.

```lua
TriggerEvent("EmergencyOS:billPayed", billId)
-- oder
exports["EmergencyOS"]:billPaid(billId)
```

### Integration in Rechnungssystem

Um die Rechnungsintegration verwenden zu können müssen die das oben genannte TriggerEvent in ihr Rechnungssystem integrieren um EmergencyOS mitzuteilen, sobald eine Rechnung bezahlt wurde.

Hier finden Sie nun einige Beispiele anhand von bekannten Rechnungssystemen

#### Beispiel 1: esx\_billing

{% hint style="warning" %}
Diese Anleitung basiert auf der Version 1.9.1 von esx\_billing, es sollte bei älteren Versionen ähnlich oder sogar gleich funktionieren. Wir geben aber keinen Support bei Problemen mit älteren Versionen.
{% endhint %}

Navigieren Sie zu ihrem resources Ordner und suchen nach **esx\_billing**, öffnen sie diesen Ordner und klicken Sie auf **/server** und dann **server.lua**.

Ändern die in den Zeilen: **58, 71, 95 & 110**

Diesen Code:

```lua
MySQL.update('DELETE FROM billing WHERE id = ?', {billId},
function(rowsChanged)
```

Zu diesem:

<pre class="language-lua"><code class="lang-lua"><strong>TriggerEvent("EmergencyOS:billPayed", billId)
</strong><strong>MySQL.update('DELETE FROM billing WHERE id = ?', {billId},
</strong>function(rowsChanged)
</code></pre>

Jetzt wird jedes mal, wenn eine Rechnung, egal welches types bezhalt wird, das Event bei EmergencyOS getriggert und falls zu dieser billId ein Ticket existiert, wird dieses auf bezahlt gesetzt.&#x20;

#### Beispiel 2: myBilling

{% hint style="warning" %}
Diese Anleitung basiert auf der Version 1.3.0 von myBilling, es sollte bei älteren Versionen ähnlich oder sogar gleich funktionieren. Wir geben aber keinen Support bei Problemen mit älteren Versionen.
{% endhint %}

Navigieren Sie zu ihrem resources Ordner und suchen nach **myBilling**, öffnen sie diesen Ordner und klicken Sie dann auf **server.lua**.

Ändern die in der Zeile **162,** bzw. fügen sie hinzu:

Diesen Code:

```lua
TriggerClientEvent('myBills:msg', xPlayer.source, Translation[Config.Locale]['bill_paid'] .. amount .. Translation[Config.Locale]['bill_paid2'])
TriggerClientEvent('myBills:refreshMenu', _source)
```

Zu diesem:

```lua
TriggerEvent("EmergencyOS:billPayed", invoiceID)
TriggerClientEvent('myBills:msg', xPlayer.source, Translation[Config.Locale]['bill_paid'] .. amount .. Translation[Config.Locale]['bill_paid2'])
TriggerClientEvent('myBills:refreshMenu', _source)
```

Jetzt wird jedes mal, wenn eine Rechnung bezahlt wird das Event bei EmegergencyOS getriggert und die `invoiceID` wird übergeben.

Da die Rechnugssaustellung für myBilling noch nicht standartmäßig unterstützt wird, müssen sie dies selbständig in sv\_integrations.lua integrieren. Hier sit ein Code Snippet welches funktionieren sollte.

{% hint style="info" %}
In diesem Snippet wird davon ausgegangen, dass Sie eine ESX Version glich oder höher als 1.8.5 verwenden und oxmysql nutzen.
{% endhint %}

```lua
ESX = exports["es_extended"]:getSharedObject()

function FrameworkCreateBill(targetIdentifier, billSender, billSociety, billText, billAmount)

    local billTargetPlayer = ESX.GetPlayerFromIdentifier(targetIdentifier)

    local billId = MySQL.insert.await('INSERT INTO billing (identifier, sender, target_type, target, label, amount) VALUES (?, ?, ?, ?, ?, ?)', {targetIdentifier, billSender, 'society', billSociety, billText, billAmount})
    
    if billTargetPlayer then -- check if player is in server
        EMOSServerNotify(billTargetPlayer.source ,"Strafe", "Du hast eine Strafe in höhe von " .. tostring(billAmount) .. "$ wegen " .. billText .. " erhalten. Bitte bezahle diese Zeitnah.")
    end
    
    return billId
end
```

Vergessen Sie nicht, `SVConfig.UseCustomBillAssign` in `sv_integartions.lua` auf `true` zu setzen. Wenn SIe alle Schritte korrekt beflogt haben, sollte nun myBilling mit EmergencyOS funktionieren.


# Fehlermeldungen

## Fehlermeldungen

Natürlich kann es bei der Einrichtung zu Problemen kommen. Hier sind einige der häufigsten Fehlermeldungen aufgeführt und deren Ursachen/Lösungen. Sollten Sie dennoch Probleme haben, können Sie sich gerne in unserem Discord melden, um weitere Hilfe zu erhalten.

#### wrong ip address

Diese Fehlermeldung bedeutet, dass die IP Adresse des Gameservers, auf dem EmergencyOS-ausgeführt wird, und die IP-Adresse, die Sie im Dashboard konfiguriert haben, nicht übereinstimmen. Überprüfen Sie Ihre Konfiguration im Dashbaord und stellen Sie sicher, dass die korrekte IP-Adresse verwendet wird.

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2Fk8mxjblC99upwYTDXfPm%2Fimage.png?alt=media&amp;token=9089ea9f-1844-4d61-be99-d080581b11b2" alt=""><figcaption></figcaption></figure>

#### no api access

Diese Fehlermeldung bedeutet, dass Sie keinen Zugriff auf die API haben, da Ihr Zugang entweder abgelaufen ist oder nicht gekauft wurde. Stellen Sie sicher, dass Sie einen gültigen Zugang erworben haben und dass dieser nicht abgelaufen ist. Wenn der Zugang abgelaufen ist, müssen Sie ihn erneuern, um weiterhin Zugriff auf die API zu haben. Wenn Sie keinen Zugang erworben haben, müssen Sie diesen erwerben, um Zugriff auf die API zu erhalten.

#### wrong api key

Diese Fehlermeldung bedeutet, dass der API-Key, den Sie eingegeben haben, nicht mit dem API-Key übereinstimmt, den Sie im Dashboard konfiguriert haben. Überprüfen Sie die api\_config.lua und stellen Sie sicher, dass Sie den richtigen API-Key eingegeben haben.

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FH4YXDSu4YYfwpQgNpxEG%2Fimage.png?alt=media&amp;token=cd35deb3-b038-4d1f-8a1a-126e9eb88a24" alt=""><figcaption></figcaption></figure>

#### wrong password

Diese Fehlermeldung bedeutet, dass das im api\_config.lua angegebene Passwort nicht zu dem angegebenen Benutzernamen passt. Überprüfen Sie diese und stellen Sie sicher, dass Sie den richtigen Benutzernamen und das richtige Passwort eingegeben haben.

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FIlTj2CvlMNUl5eHXxwFh%2Fimage.png?alt=media&amp;token=8d973116-2a1c-45ea-9052-a5a41567325a" alt=""><figcaption></figcaption></figure>

#### user does not own the instance or instance dosent exist

Diese Fehlermeldung bedeutet, dass Sie entweder Zugangsdaten eingegeben haben, die keinen Administratorzugriff haben, oder dass Sie keine Instanz besitzen. Überprüfen Sie die Anmeldeinformationen, um sicherzustellen, dass Sie Zugriff auf einen Administrator-Account haben. Wenn Sie keine Instanz besitzen, müssen Sie eine erwerben.

<figure><img src="https://1600914840-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBeKcw3M4IOQrsuWJHSav%2Fuploads%2FN82bfRFqkIsXEvt0dUpn%2Fimage.png?alt=media&amp;token=da9fc0c8-a643-4f3d-b178-d42462345406" alt=""><figcaption></figcaption></figure>

#### not enough data recived. check your sent headers

Diese Fehlermeldung kann grundsätzlich nur auftreten, wenn Sie ein benutzerdefiniertes System verwenden. Bitte überprüfen Sie, ob Sie wirklich alle erforderlichen Header übergeben. Stellen Sie sicher, dass alle erforderlichen Informationen korrekt an die API übermittelt werden. Wenn Sie weiterhin Probleme haben, kontaktieren Sie bitte den Support für weitere Unterstützung.


# API

EmergencyOS bietet eine API an, um die Funktionen des Tablets zu erweitern und es an ingame Ereignisse anzubinden.

{% hint style="info" %}
Wir empfehlen die API nur zu nutzen wenn Sie Erfahrung haben und ihr Gameserver nicht über FiveM läuft.
{% endhint %}

{% hint style="warning" %}
Sollte ihr Gameserver über FiveM laufen können sie unsere bereitgestellte Ressource verwenden.
{% endhint %}

Die Verantwortung für die Funktionalität der API liegt allein bei Ihnen. Sollten Sie Fehler in der API finden, melden Sie diese bitte, aber wir bieten keinen Support für die Implementierung. Sollten Sicherheitslücken auf Ihrem Server durch die inkorrekte Implementierung der Endpoints entstehen, übernehmen wir dafür keine Haftung.

Es macht nur in Sonderfällen Sinn, die API-Kommunikation selbst zu integrieren. Der Hauptgrund, die API zu öffentlich zu machen, war, auch Servern auf RageMP und ALTV die Möglichkeit zu bieten, die erweiterten Funktionen von EmergencyOS zu nutzen. Bitte beachten Sie, dass Sie folgende Produkte gekauft und eingerichtet haben müssen, um die die API zu nutzen:

{% content-ref url="/pages/sHX4Dk2jAG6ZQtNOc8YP" %}
[Gameserver API](/installation/gameserver-api)
{% endcontent-ref %}

Bitte beachten Sie, dass das Addon "Datenbanksync" aktiviert und eingerichtet sein muss, um die API zu nutzen. Bei der Einrichtung des Datenbanksyncs ist es wichtig, dass die Tabelle "identifier" als Identifikator ausgewählt wird, damit die Spieler serverweit identifiziert werden können. Dieser Identifikator wird beispielsweise auch für die Anforderungen zur Erstellung von Rechnungen verwendet.

{% content-ref url="/pages/UEviHbXxNHdPNHhzhdBN" %}
[Broken mention](broken://pages/UEviHbXxNHdPNHhzhdBN)
{% endcontent-ref %}


# Gameserver Endpoints

Requests die von EmergencyOS an deinen Gameserver gesendet werden

{% hint style="info" %}
Beachte, dass das Addon Datenbank Sync aktiviert sein muss
{% endhint %}

Hier finden Sie alle API-Endpoints, die von EmergencyOS angefordert werden und die Sie auf Ihrem Server erstellen müssen.&#x20;

## Setup&#x20;

Es ist vollkommen Ihnen überlassen, wie Sie diese Anfragen verarbeiten, ob auf einem Webserver oder direkt auf Ihrem Gameserver. Wichtig ist nur, dass die Anfragen so funktionieren, wie in der Beschreibung steht. Bitte beginnen Sie als Grundgerüst mit einem Endpoint, der https-Anfragen verarbeiten kann. Bitte validieren Sie jede Anfrage immer mit dem API-Key aus dem Header, den Sie im Dashboard festgelegt haben und unserer IP-Adresse: 141.94.87.67. Anfragen an Ihren Gameserver werden niemals von einer anderen IP-Adresse kommen. Es ist zu empfehlen, alle Anfragen, die nicht von dieser IP-Adresse kommen, abzulehnen.&#x20;

## Endpoints&#x20;

Dieser Endpoint soll eine Rechnung für einen bestimmten Spieler auf Ihrem Server erstellen und mit der ID dieser Rechnung antworten und diese wird dann mit dem erstellten Ticket in EmergencyOS verknüpft.

## &#x20;Create an invoice for a player

<mark style="color:blue;">`GET`</mark> `https://your-endpoint-com/createBill`

This endpoint should receive data for an invoice and return an invoice ID

#### Headers

| Name                                      | Type   | Description             |
| ----------------------------------------- | ------ | ----------------------- |
| API-KEY<mark style="color:red;">\*</mark> | string | You EmergencyOS API Key |

#### Request Body

| Name                                               | Type   | Description                           |
| -------------------------------------------------- | ------ | ------------------------------------- |
| targetIdentifier<mark style="color:red;">\*</mark> | string | The identifier of the invoice reciver |
| billSender<mark style="color:red;">\*</mark>       | string | The sender of the bill, eg. "police"  |
| billText<mark style="color:red;">\*</mark>         | string | A test assinged to the invoice        |
| billSociety<mark style="color:red;">\*</mark>      | string | The society that recives the money    |
| billAmount<mark style="color:red;">\*</mark>       | number | The amount of the invoice             |

{% tabs %}
{% tab title="200: OK Please respond with a 200 OK and the invoice ID" %}

```javascript
{
    string billid //Just return the billId as a string
}
```

{% endtab %}
{% endtabs %}


# EmergencyOS Endpoints

Requests die von deinem Server bei bestimmten Events an die EmergencyOS API gesendet werden.

{% hint style="info" %}
Beachte, dass das Addon Datenbank Sync aktiviert sein muss
{% endhint %}

Um die Funktionen der API zu nutzen, ist es erforderlich, dass du bei bestimmten Events Anfragen an EmergencyOS sendest.

## Setup&#x20;

Es ist Ihnen vollständig überlassen, von wo und wie Sie Anfragen an die API senden, solange sie der Dokumentation entsprechen.

## Endpoints

Bevor Sie eine Anfrage an die API senden, müssen Sie Ihre Instance ID ermitteln. Dies ist einmalig pro Server/Script-Start erforderlich. Mit dieser Instance ID müssen Sie dann jede weitere Anfrage validieren.

## Get your instance id

<mark style="color:blue;">`GET`</mark> `https://emergencyos.de/api/getInstance`

With this endpoint you can get the InstanceID for your account with which all further requests must be signed

#### Headers

| Name                                                | Type   | Description                     |
| --------------------------------------------------- | ------ | ------------------------------- |
| API-KEY<mark style="color:red;">\*</mark>           | string | Your EmergncyOS API Key         |
| INSTANCE-USERNAME<mark style="color:red;">\*</mark> | string | Your EmergencyOS admin username |
| INSTANCE-PASSWORD<mark style="color:red;">\*</mark> | string | Your EmergencyOS admin password |

{% tabs %}
{% tab title="200: OK Success" %}

```javascript
{
    instanceId: number, // You instance id
}
```

{% endtab %}

{% tab title="203: Non-Authoritative Information Error while reqest" %}

```javascript
{
    string errorMessage //ErrorMessage with more information
}
```

{% endtab %}
{% endtabs %}

Dieser Endpoint sollte aufgerufen werden, sobald ein Spieler eine Rechnung auf dem Server bezahlt hat. Falls die Rechnungs-ID mit einem Ticket verknüpft ist, wird dieses automatisch als "bezahlt" markiert.

## Set a bill as payed in EmergencyOS

<mark style="color:green;">`POST`</mark> `https://emergencyos.de/api/billPayed`

Reports a paid invoice to EmergencyOS and if a ticket exists for this invoice, it will be marked as paid

#### Headers

| Name                                          | Type   | Description             |
| --------------------------------------------- | ------ | ----------------------- |
| API-KEY<mark style="color:red;">\*</mark>     | string | Your EmergncyOS API key |
| INSTANCE-ID<mark style="color:red;">\*</mark> | number | Your instance id        |

#### Request Body

| Name                                     | Type   | Description           |
| ---------------------------------------- | ------ | --------------------- |
| billId<mark style="color:red;">\*</mark> | string | The id of the invoice |

{% tabs %}
{% tab title="200: OK Reqest success" %}

```javascript
```

{% endtab %}

{% tab title="401: Unauthorized Not successfully authorized" %}

```javascript
```

{% endtab %}

{% tab title="400: Bad Request Error with the reqest" %}

```javascript
{
    string errorMessage // Contains more Info about why the reqest failed
}
```

{% endtab %}
{% endtabs %}


