Einfache ZCMD Commands mit sscanf

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
  • Hey Leute,

    vorab ich hab mal beschlossen das ich mal paar

    englische Tutorials ins deutsche übersetze ;)

    Heute:

    Einfache ZCMD Commands mit sscanf.


    Wir brauchen:

    ZCMD - Klick mich

    sscanf - Klick mich


    So nun da ihr alle Plugins und Includes habt fangen wir mal an.

    Natürlich muss das in euer Script.

    #include <a_samp>
    #include <zcmd>
    #include <sscanf2>

    Für dieses Tutorial werden nur 2 Farben benutzt. Diese müsst ihr im Script definieren.

    #define RED 0xFF0000AA
    #define YELLOW 0xFFFF00AA


    Für den 1. Command werden wir einfach einen Ankündigungs Command erstellen.

    Dieser wird für alle Spieler, die gerade auf dem Server spielen für eine kurze Zeit angezeigt.


    CMD:berichten(playerid, params[])//Das ist der Befehl
    {
    new text[128];
    if(sscanf(params,"s[128]",text)) return SendClientMessage(playerid, RED, "Info: /berichten text"); //Falls der Command nicht richtig eingegeben wurde.
    GameTextForAll(text, 10000,0);//Der Text der angezeigt wird
    return 1;//Command wird returnt
    }//Schließt den Befehl


    So nun in Einzelteile:
    if(sscanf(params,"s[128]",text)) return SendClientMessage(playerid, RED, "Info: /berichten text"); //Falls der Command nicht richtig eingegeben wurde.

    Als Erstes wird abgefragt wenn kein Text eingegeben wird soll eine Nachricht erscheinen.

    In der Nachricht steht dann wie der Befehl richtig ausgeführt wird.

    Das "s" im "s[128]" wird als "specifier" bezeichnet.

    Er gibt an das der Text in dem Parameter ein String ist.

    Und 128 ist die Länge des Strings.


    GameTextForAll(text, 10000,0);

    Nun wird der Text den ihr in den Befehl eingegeben habt an alle Spieler, die connected sind für 10000 Millisekunden angezeigt.

    "0" ist der GameText Typ.

    Für weiter Typen schaut hier vorbei GameText Styles


    So das war der Ankündigungs Befehl.

    Lass uns mal zu etwas anderem gehen.


    CMD:ooc(playerid, params[])// Befehl
    {
    new text[128], str[128];
    if(sscanf(params,"s[128]",text)) return SendClientMessage(playerid, RED, "Info: /ooc Text");
    format(str, 128, "((%s:%s))", PlayerName(playerid), text);
    SendClientMessageToAll(YELLOW, str);
    return 1;//Wird returned
    }//Befehl wird geschlossen


    So und nun wieder in Einzelteile, damit ihr das überhaupt versteht.


    stock PlayerName(playerid)
    {
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName, sizeof(pName));
    return pName;
    }

    Wenn ihr diesen Stock an das Ende eures Scriptes setzt verhindert ihr das ihr alle wieder und wieder schreiben müsst.

    Dies liest den Spielernamen aus


    new text[128], str[128];

    Wir erstellen 2 Variablen. Eine Text Variable und einen String. Beide mit der Länge von 128 Zeichen.


    if(sscanf(params,"s[128]",text)) return SendClientMessage(playerid, RED, "Info: /ooc text");

    Wie ihr vielleicht mitbekommen habt ist sscanf ein nützliches Include.

    Wieder sagt es dem Script er soll uns eine Nachricht senden wenn kein Text angegeben wurde.

    Das "s[128]" gibt wieder den String mit der länge 128 wie zuvor an.


    format(str, 128, "((%s:%s))", PlayerName(playerid), text);

    Hier wird der String formatiert.


    SendClientMessageToAll(YELLOW,str);

    Dies Sendet die Nachricht die ein User geschrieben hat in der Farbe gelb mit dem String der formatiert wurde.


    Nun was für die Admins:


    CMD:toggleooc(playerid, params[])//Befehl
    {
    if(toggleooc == false)//Neue Variable
    {
    SendClientMessageToAll(YELLOW, "Der OOC Chat wurde Aktiviert!");
    toggleooc = true;
    }
    else if(toggleooc == true)
    {
    SendClientMessageToAll(YELLOW, "Der OOC Chat wurde Deaktiviert!");
    toggleooc = false;
    }
    return 1;//Command wird returnt
    }


    Na was kommt jetzt wohl :D ?
    Richtig ! Die Erklärung.


    new bool:toggleooc = false;

    Das ist ein bool dieser kann immer nur auf true oder false sein.

    Das macht es perfekt für den Befehl.

    Denn jedesmal wenn der Server startet wird dieser auf false gesetzt.

    Das heißt der OOC Chat ist beim Start aus.


    if (toggleooc == false) // Variable

    Diese Zeile gibt an, wenn toggleocc auf false steht, dass der OOC Angeschalten werden soll.


    SendClientMessageToAll(YELLOW, "Der OOC Chat wurde aktiviert !");
    toggleooc = true;

    Hier wird einmal die Nachricht ausgegeben und toggleooc auf true gesetzt damit man den Chat auch wieder schließen kann ;)


    elseif (toggleooc==true)

    Da dies ja auf true steht heißt das, der Channel wird deaktiviert.


    SendClientMessageToAll(YELLOW,"Der OOC Chat wurde deaktiviert!");
    toggleooc=false

    Wieder die Nachricht das der OOC Chat deaktiviert worden ist.

    Und false bedeutet der Chat kann wieder aktiviert werden.


    Diese Abfragen müssen wir jetzt noch in unseren Befehl einbauen.


    CMD:ooc(playerid, params[])
    {
    new text[128];// Neue Variable
    if(toggleooc == false)//Die Variable die vorher erstellt wurde
    //Wenn der Channel aus ist dann...
    {
    SendClientMessage(playerid, RED, "Der OOC Channel ist nicht aktiviert");
    return 1;
    //Wenn der Channel aus ist dann kommt die nachricht.
    }
    if(toggleooc == true)//Wenn er aber an ist dann darf eine Nachricht geschrieben werden.
    {
    if(sscanf(params, "s[128]",text)) return SendClientMessage(playerid, RED, "INFO: /ooc text");
    SendClientMessageToAll(YELLOW,text);
    return 1;
    }
    return 1;//Befehl wird returned
    }//Befehl wird geclosed


    So die Befehle wären dann hiermit fertig.

    Diese könnt ihr ja noch mit Admin abfragen ausbauen.


    Ich hab mir hiermit echt mühe gegeben.

    Ich hoffe ihr respektiert das ;)


    Credits:

    a_samp - Vom SAMP Team

    ZCMD - Erstellt von Zeex

    sscanf - Erstellt von Y_Less

    Das Tutorial - Erstellt von Keyhead

    Übersetzt - CodeX


    LG ;)

    "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

  • Beavis
    Das tutorial hab ich nicht geschrieben ;)
    Das tutorial ist einfach nur übersetzt von mir.
    LG

    "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