# SA-MP

Installation von SA-MP Servern und weitere nützliche Dinge

# SA-MP Server installieren

#### Host aktualisieren und benötigte Pakete installieren

```shell
sudo apt update && sudo apt upgrade -y
sudo apt install lib32stdc++6 lib32z1 screen wget
```

#### Benutzerkonto anlegen

```shell
sudo adduser sampserver --gecos ""
```

<p class="callout info">Passwort nach Aufforderung eingeben, mit Enter quittieren und nochmal eingeben (zur Bestätigung)</p>

#### Serverdateien herunterladen

Hierzu wechseln wir in den eben erstellten Benutzer

```shell
sudo su - sampserver
```

und laden dann die Serverdateien herunter

```shell
wget -q -O - https://files.sa-mp.de/server/0.3.X/0.3.7/linux/samp037svr_R3.tar.gz | tar xvzf -
```

<p class="callout info">Die Serverdateien wurden automatisch entpackt und liegen nun im Verzeichnis **samp03**</p>

#### Abschließende Schritte

Um den Server starten zu können muss das RCON Passwort geändert werden

```shell
cd samp03/
sed -i 's/changeme/DEIN_NEUES_RCON_PASSWORT/g' server.cfg
```

Nun kann der Server gestartet werden

```shell
./samp03svr
```

#### Server im Hintergrund betreiben

Würde man nun das Terminalfenster (bspw. PuTTY) schließen würde auch unser SA-MP Server beendet werden. Um dies zu verhindern kann man sich dieses kleinen Skriptes bedienen

```shell
#!/usr/bin/env bash

start() {
   echo "Starte den SA-MP Server"
   screen -S samp_server -m -d sh -c './samp03svr'
   sleep 2
   echo "SA-MP Server wurde mit der PID $(ps fax | grep samp03svr | grep -v grep | head -1 | awk '{print $1}') gestartet"
   echo "Status: ["$(tput setaf 2)OK$(tput sgr0)"]"
}

stop() {
   echo "Stoppe den SA-MP Server"
   screen -X -S samp_server quit
   sleep 2
   echo "Status: ["$(tput setaf 2)OK$(tput sgr0)"]"
}

case "$1" in
   start) start ;;
   stop)  stop;;
   *) echo "Auswahl: $0 start|stop" >&2
      exit 1
      ;;
esac
```

Den gesamten Code kopieren und in eine neue Datei einfügen

```shell
nano control.sh
--- Code einfügen, Editor mit CTRL-X -> Y -> ENTER beenden ---
chmod +x control.sh
```

# Gamemodes auf einem Linux System kompilieren

#### Compiler herunterladen

Wir finden den Compiler auf GitHub, einfach den [aktuellsten Release](https://github.com/pawn-lang/compiler/releases) herunterladen

```shell
mkdir -p /tmp/pawn && cc /tmp/pawn
wget -q -O - https://github.com/pawn-lang/compiler/releases/download/v3.10.10/pawnc-3.10.10-linux.tar.gz | tar xvzf -
chmod a+x /tmp/pawn/pawnc-3.10.10-linux/bin/pawncc
```

Wir finden die Compiler-Executable dann im Verzeichnis `/tmp/pawn/pawnc-3.10.10-linux/bin/pawncc`

#### Library installieren

Um den Compiler ausführen zu können muss eine mitgelieferte Library-Datei in das passende Verzeichnis auf dem System kopiert werden

```shell
cp /tmp/pawn/pawnc-3.10.10-linux/lib/libpawnc.so /usr/lib
```

#### Compiler installieren

Installieren ist vielleicht das falsche Wort, wir kopieren einfach die Binary in ein Verzeichnis unserer Wahl, z.b.

```shell
mkdir ~/pawn-compiler
cp /tmp/pawn/pawnc-3.10.10-linux/bin/pawncc ~/pawn-compiler/
```

#### Compiler ausführen und .amx Datei erzeugen

```shell
cd ~/dein-gamemode/
~/pawn-compiler/pawncc "-iinclude" "gamemodes/gamemode.pwn"  "-;+" "-v2" "-d3" "-Z+" "-(+"
```

<p class="callout info">Wichtig ist hierbei dass dein Gamemode (die .pwn Datei) sich im Verzeichnis *gamemodes* sowie alle benötigten Includes sich im Verzeichnis *include* befinden und nicht wie vom Windows PC gewohnt im Ordner *pawno/includes*</p>