OnPlayerClickPlayerTextDraw fehler

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
  • Guten Abend Breadfish-Community,


    ich komme bei den Textdraws irgendwie nicht weiter.
    Möchte das man einen Pfeil anklicken kann und dann soll halt weiteres passieren, aber ich kann so oft draufklicken der Public OnPlayerClickPlayerTextDraw wird komischerweise nicht aufgerufen ....



    Code:

    Code
    new PlayerText:Textdraw[MAX_PLAYERS][41];



    Code
    ocmd:testbefehl(playerid, params[])
    {
    	PlayerTextDrawShow(playerid, Textdraw[playerid][13]);
    	SelectTextDraw(playerid, COLOR_ORANGE);
    	return 1;
    }
    Code
    public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
    {
    	if(playertextid == Textdraw[playerid][13])
    	{
    		//soll halt weiteres passieren...
    	}
    	return 1;
    }


    Ich verstehe nicht wo ich denn den Denkfehler habe... Laut Wiki sollte ich alles richtig haben,
    könnte mir einer Helfen?
    ( @Jeffry )


    Vielen Dank im vorraus :)

  • C
    PlayerTextDrawUseBox(playerid,Textdraw[playerid][13],1);

    Das meine ich. ;)

  • warum +493,5?

    Man muss beim anklickbaren Bereich die X-Koordinate plus die Breite des Textdraws nehmen.


    Du kannst es aber auch mal rückgängig machen und bei OnPlayerClickPlayerTextDraw einen print ganz oben setzen, um zu schauen, ob das überhaupt aufgerufen wird, und mit welcher Textdraw ID.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Du kannst es aber auch mal rückgängig machen und bei OnPlayerClickPlayerTextDraw einen print ganz oben setzen, um zu schauen, ob das überhaupt aufgerufen wird, und mit welcher Textdraw ID.

    Habs folgendermaßen versucht zu Printen aber ohne Erfolg...

    Code
    public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
    {
    	printf("OnPlayerClickPlayerTextDraw wurde aufgerufen");
    	if(playertextid == Textdraw[playerid][13])
    	{
            }
    }


    Wann wird dieses Callback aufgerufen, wenn ich auf den einen Textdraw klicke?
    Was ich nicht verstehe, Textdraw wird angezeigt, Hover effekt ist da alles kein Problem aber ich kann so oft draufklicken
    es passiert nichts sogar print wird nichts ausgegeben :/


    //Edit:
    bringt das eventuell etwas? Laut Wiki gilt das nur wenn jemand ESC drückt...
    if(_:clickedid != INVALID_TEXT_DRAW)

  • Ist der Code in einem Filterscript oder Gamemode?
    Hast du das Callback auch in einem anderen Code drin, falls ja, wird dort irgendwo 0 zurück gegeben (return)?

    ich habe in sämtliche Filterscripts die ich für meinen Gamemode nutze durchsucht aber in keins ist dieses Callback vorhanden.


    Was ich testen könnte ist, dass Callback im Gamemode zu "leeren" und dies Stück für Stück einzufügen und somit den Fehler herauszufinden.
    Kurze Frage noch, wenn ich mehrere playertextid nutze, muss ich dann so machen?

    Code
    if(playertextid == Textdrawname)
    {
    }
    if(playertextid == Anderer Texdrawname)
    {
    }
    if(playertextid == dritter Textdrawname)
    {
    }


    oder sollte ich es so benutzen?


    Code
    if(playertextid == Textdrawname)
    {
    }
    else if(playertextid == Anderer Texdrawname)
    {
    }
    else if(playertextid == dritter Textdrawname)
    {
    }


    Bin mir jetzt nicht sicher ob ich "else if" verwenden soll :3

  • Hast du es mal versucht, ob der print aufgerufen wird, wenn du das +493.5 nutzt?



    in mir jetzt nicht sicher ob ich "else if" verwenden soll :3

    Sofern du in den if-Abschnitten am Ende jeweils ein return 1 nutzt spielt es keine Rolle, welche Variante du nutzt.
    Lässt du diese weg, ist es besser else-if zu nutzen, da die unteren Abschnitte dann nicht mehr abgefragt werden, sobald ein Treffer vorhanden ist.

  • Hast du es mal versucht, ob der print aufgerufen wird, wenn du das +493.5 nutzt?

    Ja habe ich versucht...


    Ich habe beim Callback testweise nur folgendes stehen:

    In der Konsole wird jedoch der Print nicht ausgegeben....
    Mir fällt nichts mehr ein was ich machen könnte, ich vermtue stark das es am Public liegt...

  • Statt if - else if würde ich dir in diesem Fall ne switch-case Konstruktion empfehlen :)


    Wie @Jeffry schon sagte, entweder returnst du falsch oder der TextSize der Box ist falsch gesetzt (dass es sich nicht wirklich selectieren lässt). Dürfte aber nicht der Fall sein, wenn der Hover Effekt erscheint.


    Ein PlayerTextDraw wird in OnPlayerClickPlayerTextDraw aufgerufen, ein TextDraw aber in OnPlayerClickTextDraw. Gehe sicher, dass dort kein Fehler liegt. Ansonsten haue alle Filterscripts raus und prüfe, ob es dann geht. Durchsuche auch außergewöhnliche Includes, ob diese ggf etwas modifizieren bzw. in diesem Callback falsch returnen.

  • Statt if - else if würde ich dir in diesem Fall ne switch-case Konstruktion empfehlen

    Das geht bei Textdraws nicht, da deren ID erst zur Laufzeit vergeben wird, anders als bei Dialogen. ;)



    Mir fällt nichts mehr ein was ich machen könnte, ich vermtue stark das es am Public liegt...

    Versuche zu dem was @Alf21 sagte noch, das Textdraw mal so wie es ist, in einen komplett leeren Gamemode zu setzen, geht es dort?

  • Hast du es mal versucht, ob der print aufgerufen wird, wenn du das +493.5 nutzt?

    Ja habe ich versucht, habe es rausgenommen funktioniert wieder :)


    Ansonsten haue alle Filterscripts raus und prüfe, ob es dann geht. Durchsuche auch außergewöhnliche Includes, ob diese ggf etwas modifizieren bzw. in diesem Callback falsch returnen.

    Du hast recht, wie Jeffry glaube ich auch am Anfang gesagt hatte mit den Filterscripts....
    Ich habe nur ein einziges Filterscript nicht geprüft da ich mir ziemlich sicher war das da nicht der Fehler drin liegt... :dash:


    Danke euch @AirM4X, @Jeffry & @Alf21!
    Lag doch an einem Filterscript :whistling::rolleyes: