Erweiterten GMX - Befehl

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • 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.

  • format(string,sizeof(string),"Der Server wird in %i Sekunden von %s restartet.",time, name);
    SendClientMessageToAll(ROT,string); // Sollte man schon benutzen :D
    Abgesehen davon, dass du das SendClientMessageToAll vergessen hast, nicht schlecht :)


  • Fehler, das ist nicht Pawno(Programm), sondern die Sprache (Pawn), ansonsten nicht schlecht ;)

    Danke ^^
    War mir da jetzt nicht so sicher.



    @ Source
    Ein Dank ebenfalls an dir.
    Tut mir leid, war die Uhrzeit ^^


    @ Slash
    danke ^^
    Naja, ist ja deren Sache ob sie was lernen wollen oder nicht ^^

  • Hah email xD
    Nein das Tutorial ist im großen und ganzen gut erklärt ;)

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Ähm, Ich würde jetzt mal sscanf und Format umdrehen.
    Sonst hat der doch "time" beim Formatierten noch garnicht.
    Bzw. Ist immer 0.

  • Ähm, Ich würde jetzt mal sscanf und Format umdrehen.
    Sonst hat der doch "time" beim Formatierten noch garnicht.
    Bzw. Ist immer 0.

    Braucht er nicht :huh:

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Braucht er doch ...
    sscanf ist das Gegenteil (sozusagen) von "format" und splittet "params" in seine Einzelteile (hier nur time).

  • Braucht er nicht :huh:


    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]");

    Er formatiert einen Text mit time, ABER er gibt time erst eine bestimmte Zahl der Eingabe