I. Einleitung
II. Textdraw erstellen
III. Textdraw anklickbar machen
IV. "Anklickmodus" starten
V. Das Callback
VI. Schlusswort
I. Einleitung
Hallo liebe Brotfische,
seit der SAMP-Version 0.3e gibt es nun eine Möglichkeit, die Textdraws anklickbar zu machen und das Klicken eine bestimmte Funktion ausführen zu lassen.
Mit Hilfe dieser Funktion ist es nun endlich möglich, beispielsweise richtige Handys oder auch neuartige Skin-Auswahlen zu schaffen.
Ich möchte euch heute mal erklären, wie das ganze funktioniert, um bereits jetzt prophylaktisch zu verhindern, dass dämliche Fragen danach erstellt werden.
Also wollen wir mal Anfangen.
II. Textdraw erstellen
Was brauchen wir, um ein anklickbares Textdraw zu erstellen? - Genau, erstmal ein nicht anklickbares Textdraw.
Also, worauf warten wir? Wir erstellen sofort, schnell und einfach mal ein Textdraw. Es gibt extra Textdraw-Creator-Filterscripts, die man verwenden kann, man kann es allerdings auch manuell machen. Als Demonstrationstextdraw nehme ich hier nun eines aus meiner Teamselection für ein DM-Script.
Textdraw0 = TextDrawCreate(150.000000, 99.000000, "USA");
TextDrawBackgroundColor(Textdraw0, 255);
TextDrawFont(Textdraw0, 1);
TextDrawLetterSize(Textdraw0, 0.669999, 2.000000);
TextDrawColor(Textdraw0, -1);
TextDrawSetOutline(Textdraw0, 0);
TextDrawSetProportional(Textdraw0, 1);
TextDrawSetShadow(Textdraw0, 1);
Dies ist nun ein ganz normales Textdraw, welches bei OnGameModeInit einzubauen ist. Wichtig ist natürlich auch, dass wir die Variable Textdraw0 zuvor noch oben definieren.
III. Textdraw anklickbar machen
Schön, wir haben jetzt ein Textdraw, aber wie war das jetzt mit dem anklicken? Das kommt jetzt.
Vom SA-MP Team selbst wird empfohlen, dem Textdraw zusätzlich noch eine genaue Größe zuzuweisen, um dadurch das anklickbare Feld genau zu bestimmen. Dies machen wir mit folgendem Code:
TextDrawTextSize(Textdraw0, 199.000000, 796.000000);
Bei meiner Teamselection habe ich die Größe absichtlich sehr groß gemacht, um den ganzen Bot sozusagen anklickbar zu machen. Aber lasst euch davon nicht irritieren, die Größe könnt ihr ja einfach so ändern wie ihr sie braucht.
Indem ihr TextDrawUseBox verwendet, könnt ihr euch eine Box anzeigen lassen, und dadurch den anklickbaren Bereich genau anzeigen lassen.
Nun haben wir alle wichtigen Vorgaben für das Textdraw erfüllt und können es nun anklickbar machen.
TextDrawSetSelectable(Textdraw0, 1);
Dadurch setzen wir die Selectable-Einstellung des Textdraws auf 1, also true. Setzen wir sie auf 0, also false, wird das Textdraw dann nicht mehr anklickbar sein.
IV. "Anklickmodus" starten
Na gut, ein anklickbares Textdraw haben wir schonmal, nur es funktioniert noch nicht. Denn es ist nur in einem bestimmten Modus anklickbar.
Für meine Skin-Selection habe ich es beispielsweise direkt nach dem Login eingebaut. Den Anklickmodus für einen Spieler starten wir mit folgender Funktion:
SelectTextDraw(playerid, 0xFFFFFFFF);
Wichtig ist natürlich noch, dass wir das Textdraw zuvor noch dem Spieler anzeigen, was mit TextDrawShowForPlayer umsetzen können.
Der erste Parameter von SelectTextDraw gibt an, für welchen Spieler der Anklickmodus gestartet werden soll, der zweite die Hoverfarbe, also in welcher Farbe das Textdraw erscheinen soll, wenn der Spieler mit der Maus darüber fährt.
Zu beachten wäre noch, dass dadurch alle als anklickbar definierten TextDraws, die bei dem Spieler momentan angezeigt werden, ab sofort auch anklickbar sind. Das heißt, dass eventuelle andere TextDraws vorher noch versteckt werden sollten.
V. Das Callback
Wenn ein Spieler das Textdraw nun anklickt wird ein bestimmter Callback aufgerufen. Was ein Callback ist, solltet ihr eigentlich bereits wissen.
Es handelt sich dabei um folgenden:
public OnPlayerClickTextDraw(playerid, Text:clickedid)
Die Parameter enthalten zum einen den Spieler, der das Textdraw angeklickt hat, und zum anderen das angeklickte Textdraw.
Wenn wir nun wollen, dass wenn der Spieler das Textdraw angeklickt hat, der Anklickmodus beendet und das Textdraw versteckt wird, müssen wir das ungefähr so machen:
public OnPlayerClickTextDraw(playerid, Text:clickedid) {
if(clickedid == Textdraw0) {
CancelSelectTextDraw(playerid);
TextDrawHideForPlayer(playerid, Textdraw0);
return 1;
}
return 1;
}
Wir prüfen also erst, ob es sich wirklich um das Textdraw handelt, beenden dann den Anklickmodus und verstecken das Textdraw. Danach können wir noch alles mögliche aufrufen, was wir aufrufen wollen, beispielsweise um den Skin des Spieler zu setzen:
public OnPlayerClickTextDraw(playerid, Text:clickedid) {
if(clickedid == Textdraw0) {
CancelSelectTextDraw(playerid);
TextDrawHideForPlayer(playerid, Textdraw0);
SetPlayerSkin(playerid, 0);
return 1;
}
return 1;
}
VI. Schlusswort
Ich hoffe dieses kleine aber feine Tutorial hat euch einen schönen Einblick in die kommenden 0.3e-Funktionen geschafft und euch sehr geholfen.
Bewertungen sind natürlich gerne erwünscht, für Fehler, sei es nur in der Einrückung, übernehme ich natürlich keine Haftung, aber euer Computer sollte schon nicht durch sowas in die Luft fliegen
Mit freundlichen Grüßen,
946ben
Edit 1: Kleine Anmerkung zu TextDrawUseBox eingefügt (danke an BlackAce) | Edit 2: Titel bearbeitet