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 ?
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