Programmierung eines Plugins
Aus Manu-Admin-Mod
Dieses Tutorial erklärt anhand eines Beispiels, wie sich für den Manu-Admin-Mod Plugins erstellen lassen
Ziel
Das Plugin soll später Spieler, die den Server verlassen im Chat verabschieden.
1. Schritt
Als erstes Überlegen wir uns einen Namen für das Plugin. Im Beispiel könnte das sein: Goodbyemessages.
Wir erstellen nun eine leere Datei mit dem Namen "goodbyemessages.php" in dem Order "plugins". Wähle den Namen der Datei bitte immer so, dass es später keine Konflikte mit anderen Plugins geben kann.
Der Mod lädt automatisch alle Dateien, welche sich im Ordner "plugins" befinden. Es ist also nicht nötig, die Datei anderweitig noch irgendwie zu registrieren oder einzutragen.
2. Schritt
Wir öffnen nun die Datei mit unserem PHP-Editor. Dort hinein schreiben wir dann folgendes:
<?php
$mod->registerEvent("playerQuit", "goodbyemessages_main");
function goodbyemessages_main($quitter_guid) {
}
?>
In der ersten Zeile teilen wir dem Mod über die Funktion registerEvent() mit, dass jedes mal, wenn ein Spieler den Server verlässt die Funktion goodbyemessages_main aufgerufen wird. Dabei wird als Argument der Funktion die GUID des Spielers übergeben, welcher das Spiel verlassen hat. Der Name der Funktion sollte auch hier so gewählt sein, dass er keine Probleme verursachen kann. Ich empfehle immer den selben Namen wie den der PHP-Datei + "_" + Funktionsname zu verwenden.
Die Parameterliste für die Funktion registerEvent lautet:
mod::registerEvent(eventName, function[, object])
- eventName: Name des Events
- function: Name der Funktion, die aufgerufen werden soll
- object: Ist Funktion Methode eines Objekts, kann hier die Instanz des Objekt übergeben werden oder wenn es eine statische Funktion einer Klasse ist, den Namen der Klasse.
Es gibt noch weitere Events, welche man so registrieren kann, z.B. playerJoined, configParsed, playerTeamKill, usw. Eine Übersicht über alle möglichen Werte und welche Parameter dabei übergeben werden, findest du hier.
3. Schritt
Kommen wir nun zum Content der Funktion. Dazu erweitern wir diese wie folgt:
function goodbyemessages_main($quitter_guid) {
global $mod;
global $players;
$nickname = $players[$quitter_guid]->getName();
}
Zuerst machen wir die globalen Variablen $mod und $players in der Funktion verfügbar. Diese Variablen enthalten die wichtigsten Funktionen zur Steuerung des Mods und des Servers bzw. die Spieler in einem Array mit deren GUID als Key.
Danach schreiben wir den Namen des Spielers, der gerade das Spiel verlassen hat in die Variable $nickname. Diesen brauchen wir später für die Nachricht, die gesendet werden soll.
4. Schritt
Nun können wir die Nachricht versenden. Hierzu brauchen wir genau die Variable $mod:
function goodbyemessages_main($quitter_guid) {
global $mod;
global $players;
$nickname = $players[$quitter_guid]->getName();
$mod->rconSay("^2Say Goodbye to Player ^7" . $nickname);
}
Die neu hinzugekommene Zeile sollte selbsterklärend sein. Sie sendet die Nachricht per RCON an den Server.
5. Schritt
Wir möchten nun dem Administrator ermöglichen, dass er einstellen kann, ob die Nachricht gesendet werden soll, oder nicht. Dazu verwenden wir die config.cfg-Datei
Wir öffnen diese Datei und fügen folgendes hinzu:
[goodbyemessages] enabled = 1
Auch hier sollte der Sektionsname so gewählt sein, dass der keine Probleme bereitet und zu keinen Konflikten mit anderen Plugins führt.
6. Schritt
Nun müssen wir eine entsprechende Abfrage in der Funktion einbauen:
function goodbyemessages_main($quitter_guid) {
global $mod;
global $players;
if ($mod->getCV("goodbyemessages", "enabled") == "0") {
return;
}
$nickname = $players[$quitter_guid]->getName();
$mod->rconSay("^2Say Goodbye to Player ^7" . $nickname);
}
7. Schritt
Wir müssen nun bedenken, dass der Administrator vergessen hat, die entsprechenden ConfiVars in die config.cfg zu packen. Deshalb legen wir für die verwendeten Configvariablen Standardwerte an. Würde dies nicht geschehen und der Mod geifte auf eine nicht existierende Variable zu, würde dieser sich mit einem schweren Fehler beenden.
<?php
$mod->registerEvent("playerQuit", "goodbyemessages_main");
$mod->setDefaultCV("goodbyemessages", "enabled", 0);
function goodbyemessages_main($quitter_guid) {
global $mod;
global $players;
if ($mod->getCV("goodbyemessages", "enabled") == "0") {
return;
}
$nickname = $players[$quitter_guid]->getName();
$mod->rconSay("^2Say Goodbye to Player ^7" . $nickname);
}
?>
8. Schritt
Nun wollen wir erreichen, dass die ausgegeben Nachricht variiert, je nach dem welche Sprache eingestellt ist.
Dazu erstellen wir 2 Language-Dateien, eine fürs Englische und eine fürs Deutsche:
languages/de/plugin/goodbyemessages.lng languages/en/plugin/goodbyemessages.lng
In diese schreiben wir nun entsprechend den Inhalt:
goodbyemessages_msg = "^2Say Goodbye to Player ^7 <PLAYER_NAME>"
bzw fürs Deutsche:
goodbyemessages_msg = "^2Sagt Tschüss zum Spieler ^7 <PLAYER_NAME>"
9. Schritt
Nun muss dieses nur noch in den Code eingebaut werden:
function goodbyemessages_main($quitter_guid) {
global $mod;
global $players;
if ($mod->getCV("goodbyemessages", "enabled") == "0") {
return;
}
$nickname = $players[$quitter_guid]->getName();
$mod->rconSay($mod->getLngString("goodbyemessages_msg", "<PLAYER_NAME>", $nickname));
}
Fertig
Nun ist unser Beispiel-Plugin fertig.
Wir könnten nun die Dateie in ein .rar Archiv packen und im Forum vorstellen.
