Naben Community!
Was folgt ist, ein Tutorial in dem ich ein erweiterten GMX - Befehl erkläre.
Eigendlich sehr Simpel und für Anfänger von Vorteil.
Am Rande möchte ich jedoch sagen das das mein erstes Tutorial ist.
Kritisieren könnt ihr, so hart ihr wollt.
Nun gut. Fangen wir an:
Was ein GMX Befehl ist, solltet ihr denke ich mal wissen.
Für die Leute die sich denken "Hä? GMX? Was meint er damit? Etwa die E-Mail Seite?".
GMX ist ein Command den man an die Rcon Console senden kann.
Was dieser Befehl genau bedeutet weiß ich allerdings auch nicht.
Dieser Befehl sagt der Console das der Server restartet werden soll. Mehr nicht.
So nun weiter im Text:
Ein ganz einfacher Befehl würde so aussehen. ( Beispiel mit OCMD )
ocmd:restart(playerid,params[])
{
SendRconCommand("gmx");
return 1;
}
Bisschen Mager, nicht?
Okay. Lass uns das ein bisschen umgestalten.
Zu Erst das Grundgerüst des Befehls.
ocmd:restart(playerid,params[])
{
return 1;
}
Sollte klar sein.
Werde ich nicht weiter Erläutern.
Nun erstellen wir einmal die Variable time:
ocmd:restart(playerid,params[])
{
new time; // Was eine Variable ist sollte klar sein. 8te Klasse Mathemathik. Diese benutzen wir für die Sekunden (genaueres folgt).
return 1;
}
Jetzt wollen wir noch den Namen und einen String
ocmd:restart(playerid,params[])
{
new time, name[MAX_PLAYER_NAME], string[100];
GetPlayerName(playerid,name,sizeof(name)); // Hier "getten" wir den Spielername mit der Variable "name". Die Variable könnte auch "baum" heißen. Ist völlig egal.
return 1;
}
Jetzt formartieren wir die Variable string. Das Format wird die später gesendete Nachricht wann der Server restartet wird.
ocmd:restart(playerid,params[])
{
new time, name[MAX_PLAYER_NAME], string[100];
GetPlayerName(playerid,name,sizeof(name));
format(string,sizeof(string),"Der Server wird in %i Sekunden von %s restartet.",time, name); // Das ist die Message die nachher an alle Spieler gesendet wird.
return 1;
}
Jetzt wollen wir noch die sscanf Funktion mit einbauen.
Das ist für Befehle gut wie zum beispiel "/kick [ID] [Grund]". Halt mit ID und Grund als Beispiel.
Hier wird es die Zeit (time) sein.
Diese Funktion fragt ab ob eine Zeit hinter /gmx folgt oder nicht.
Ganz Simpel tun wir dies so:
ocmd:restart(playerid,params[])
{
new time, name[MAX_PLAYER_NAME], string[100];
GetPlayerName(playerid,name,sizeof(name));
format(string,sizeof(string),"Der Server wird in %i Sekunden von %s restartet.",time, name);
if(sscanf(params,"i",time)) return SendClientMessage(playerid,-1,"Nutzung: /restart [Zeit in Sekunden]"); //Fragt ab, ob hinter "/gmx" ein Integer folgt. Wenn nicht, wird eine Nachricht ausgegeben.
return 1;
}
Das meiste haben wir schon geschafft!
Zunächst forwardet ihr einen Timer.
Das macht ihr am besten ganz oben in eurem Gamemode.
Das geht so:
forward RestartTime();
Nun gut.
Jetzt müssen wir ja noch den Timer setzen. Dies ist der Punkt wo wir unsere Variable time einen Wert zuweisen.
Nämlich unsere eingegebene Sekunden: "/gmx [Sekunden]"
Natürlich auch die Nachricht an alle Spieler senden.
ocmd:restart(playerid,params[])
{
new time, name[MAX_PLAYER_NAME], string[100];
GetPlayerName(playerid,name,sizeof(name));
if(sscanf(params,"i",time)) return SendClientMessage(playerid,-1,"Nutzung: /restart [Zeit in Sekunden]");
format(string,sizeof(string),"Der Server wird in %i Sekunden von %s restartet.",time, name);
SetTimer("RestartTime",time*1000,false); // Warum x1000? Ganz einfach. Pawno nimmt Timer nur als Millisekunden "wahr". Und da ja SEKUNDEN im Befehl eingeben werden, müssen wir diese wiederrum mit 1000 mal nehmen. Sollte verständlich sein.
SendClientMessageToAll(-1,string); // Sollte sich auch von selbst erklären. Die Nachricht mit dem Inhalt des Formatierten Strings wird an alle Spieler gesendet.
return 1;
}
Jetzt erstellen wir ein neues public.
Das könnt ihr irgendwo in eurem Script platzieren.
In dem Public passiert das, wenn der Timer abgelaufen ist.
Und was soll passieren? Genau, der Server soll restartet werden.
public RestartTime()
{
SendRconCommand("gmx");
return 1;
}
Fertig ist der erweiterte GMX Befehl.
Wenn ihr fehler sieht bitte posten ich werde es dann direkt korrigieren!
MfG.