[0.3e] Anklickbare TextDraws

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
  • 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 :P


    Mit freundlichen Grüßen,
    946ben


    Edit 1: Kleine Anmerkung zu TextDrawUseBox eingefügt (danke an BlackAce) | Edit 2: Titel bearbeitet

    Einmal editiert, zuletzt von Ternary ()

  • Soweit ich weiss, geht seit 0.3E rc5 das garnicht mehr, nur noch mit Player seitige Textdraw's

  • @gShokZ


    Biste iwie stoned?


    in der RC 5 sind nur playerseitige dazu gekommen.
    Die alten sind geblieben
    und funktionieren weiterhin ;)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • @gShokZ


    Biste iwie stoned?


    in der RC 5 sind nur playerseitige dazu gekommen.
    Die alten sind geblieben
    und funktionieren weiterhin ;)

    Ja n bisschen :love:


    SRY Dann habe ich mich verlesen, Gut erklärt 10/10;

  • Bei mir Zeigt er den Textdraw irgendwie nicht an?


  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Bei mir Zeigt er den Textdraw irgendwie nicht an?

    Hast du denn TextDrawShowForPlayer unter OnPlayerConnect gemacht?





    //Edit


    Ausversehen ins Zitat eingefügt, wieder normal eingestellt.

  • Hab ich Tottal vergessen fail danke ^^


    Wie kriege ich eig die cords raus? zB direkt unter dem Geld Balken?

  • Finde ich gut ;)
    10/10


    Aber da noch ne Frage,
    Kann man mit der HTTP Include auch sowas machen wie,
    Ein TS Textdraw Erstellen, also die IP, und wenn man Rauf Klickt, das man dann mit dem TS Server Connected, also ts3server://85.214.208.247?port=10060 Das man dann darauf Connected ?
    Wäre cool zu wissen.


    MFG
    Raphael | Ololberto

    Stahlbau Azubi deswegen kaum Aktiv

  • Wenn ich die
    TextDrawTextSize
    Anwende, verschieben sich alle Textdraws die ich habe
    hier mal einer:


    Textdraw4 = TextDrawCreate(252.000000, 111.000000, "Einloggen");
    TextDrawBackgroundColor(Textdraw4, 255);
    TextDrawFont(Textdraw4, 1);
    TextDrawLetterSize(Textdraw4, 0.610000, 3.000000);
    TextDrawColor(Textdraw4, -1);
    TextDrawSetOutline(Textdraw4, 0);
    TextDrawSetProportional(Textdraw4, 1);
    TextDrawSetShadow(Textdraw4, 1);
    TextDrawTextSize(Textdraw4,252.000000, 111.000000);


    Und anklickbar sind die dann auch nicht mehr

    All in all it's just another brick in the wall

  • Komisch, ist mir irgendwie nicht erklärlich. Also von dem Code her ist eigentlich alles richtig 8|