Sorry für Doublepost, aber der eine Beitrag hätte über 10.000 Zeichen
5. Ein paar Schritte weiter
Jetzt wo wir wissen wie wir simple Variablen in der Konsole zurückgeben können, so können wir natürlich auch einen Schritt weiter gehen. Diesmal definieren wir gleich mehrere Variablen und geben sie in einem Schritt zurück. Außerdem nutzen wir dazu das sog. format, welches eine Nachricht formatiert.
new test[256];
new test1 = 5, test2 = 10, test3 = 15;
format(test, sizeof(test), "Als erstes kommt %d, dann %d und dann %d!",test1,test2,test3);
print(test);
Dies sieht zwar schon etwas komplizierter aus, aber mit ein bisschen logischem Denken ist dies auch schnell begriffen.
Als erstes definieren wir die Variable test mit einem Wert von 256. Da wir die Variable test als Nachricht nutzen wollen, so geben wir ihm eine maximale Länge von 256 Zeichen.
Danach definieren wir noch die Variablen test1 - test3 mit ihren Werten. Dies ist in nur einer Zeile möglich.
Nun zu dem neuen, dem format. In den Klammern schreiben wir erst welche Variable dieses Format annehmen soll, in unserem Falle ist das test. Danach muss das format wissen, wie groß die Nachricht maximal sein soll, also ein sizeof (Größe von) test. Wir könnten alternativ dazu den Wert auch selber eingeben, also statt sizeof(test) einfach 256. Nachdem dies definiert ist geben wir unsere Nachricht ein. Das %d kennen wir ja inzwischen, es gibt die Variable als Zahl wieder. Nach der Nachricht müssen wir diesmal aber nicht nur eine Variable mit ihrem Namen angeben, sondern in diesem Falle gleich 3, da wir ja drei verschiedene Werte haben möchten und dafür auch drei Variablen definiert haben. Nun haben wir die Nachricht, jetzt müssen wir sie noch wiedergeben.
Dies geschieht nun auch mit print (nicht mit printf!) und in Klammern der Name der Variable die das Format enthält.
Die Zeile wieder mit einem ; abschließen und auch dies ist geklärt.
6. Joinmessage
Ich gehe hier gleich viele Schritte weiter, doch viele interessiert eben am Anfang genau dieses Thema, weil es genauso leicht zu bewerkstelligen ist. Dazu suchen wir uns erst einmal den Callback OnPlayerConnect und geben in ihn ein:
new pName[MAX_PLAYER_NAME];
new join[256];
GetPlayerName(playerid, pName, sizeof(join));
format(join, sizeof(join), "%s ist dem Server beigetreten!", pName);
SendClientMessageToAll(0xAAAAAAAAA,join);
new pName erstellt die Variable mit dem Namen pName, das [MAX_PLAYER_NAME] ist auch ein Wert, nämlich der längste mögliche Name den man nutzen kann. Danach erstellen wir noch die Variable join, welche später wieder das Format enthalten wird. Auch hier ist der Wert 256. Hier muss das Script erst einmal den Spielernamen rausfinden. Dafür steht das GetPlayerName - Als erstes gibt man die Playerid und es speichert den Spielernamen in die Variable pName. Danach gibt man noch an mit wievielen Zeichen, also welcher Länge der Name gespeichert werden soll. Statt sizeof(join) können wir natürlich auch sizeof(pName) oder einfach eine Zahl eingeben.
Danach wieder unser format, welches in der Variable join abgespeichert wird und die maximale Länge des Wertes von join besitzt. Der Text enthält diesmal kein %d, sondern ein %s, welches Text wiedergibt. Der Rest ist der Gleiche, da wir dem Script nur sagen was als Text wiedergegeben wird. Hier ist dies natürlich pName.
Doch nun wollen wir den Spielernamen nicht in der Konsole, sondern allen anderen Spielern anzeigen.
Dazu geben wir die Funktion SendClientMessageToAll ein. Als erstes geben wir eine Farbe an, in diesem Falle ist das Grau, wir können aber auch eine vorher definierte Farbe (s. Schritt 3) wie zum Beispiel COLOR_BLUE nutzen. Danach geben wir noch die Variable an, in der das Format gespeichert wurde.
7. Leavemessages
Da ich natürlich zu viel Text für euch vermeiden möchte, so überspringe ich hier die ersten paar Schritte, da ich diese ja schon in Schritt 6 erklärt habe. Wir suchen uns zuerst den Callback OnPlayerDisconnect und geben ein:
new pName[MAX_PLAYER_NAME], text[256];
GetPlayerName(playerid, pName, sizeof(text));
switch (reason)
{
case 0: format(string,sizeof(text),"%s hatte einen Timeout.",pName);
case 1: format(string,sizeof(text),"%s hat den Server verlassen.",pName);
case 2: format(string,sizeof(text),"%s wurde gekickt/gebannt.",pName);
}
SendClientMessageToAll(0xAAAAAAAAA,text);
Okay. Ich fange hier an mit dem switch (reason). Dies ist notwendig, da ein Spieler ja aus drei unterschiedlichen Gründen der Server verlassen kann. Timeout, freiwilliges Verlassen und Bann/Kick. Im Fall 0 (case 0) erstellen wir das format in der Variable text, mit der Größe von text und geben an, dass der Spieler den Server durch einen Timeout verlassen hat. Warum case 0 = Timeout weiß ich selber nicht, allerdings ist es einfach so. Im Fall 1 (case1) erstellen wir auch ein Format in text, mit der Größe von text und geben hier an, dass er den Server verlassen hat. Im letzten Fall, case2 wurde der Spieler gekickt oder gebannt. Nachdem wir für jeden dieser Gründe eine eigene Nachricht erstellt haben, so senden wir wieder eine Nachricht an alle (SendClientMessageToAll) und geben die Farbe an. Natürlich noch welche Variable zurückgegeben wird und beenden die Zeile wieder mit einem ;.
Das war es zu meinem Anfänger-Tutorial. Es ist mein erstes, aber ich hoffe es erklärt euch alles gut und bringt euch mit dieser Scriptsprache in Kontakt.
Für weitere Informationen könnt ihr die Forensuche benutzen, die SA:MP Wiki und die Google Suche. Für Kritik bin ich natürlich offen.
Credits:
Geschrieben von mir, Padarom. Ihr könnt das Tutorial, falls es euch so gefallen würde, beispielsweise auf eine Homepage einfügen, sofern ihr meinen Namen nennt
Mit freundlichen Grüßen
Padarom