Id Verschiebung bei 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
  • Guten Tag


    Ich habe schon seit längerem das Problem, das Textdraw IDs vertauscht werden.


    Die mögliche Ursache habe ich auch schon gefunden, jedoch nur eventuell.


    Wenn ich ein PlayerTextdraw create, hat dieser eine bestimmte id.
    Wenn ich diesen nun wieder zerstöre, behält die Variable "PlayerText:Beispiel" aber den selben Wert (?)
    Wenn ich nun einen neuen PlayerTextdraw erstelle, hat dieser auch wieder eine ID.
    Da ich vorher PlayerText:Beispiel zerstört habe, würde dieser dessen ID einnehmen (?)
    Nun haben PlayerText:Beispiel und PlayerText:Beispiel2 den selben Wert (?)


    Ob es so ist, weiß ich nicht genau, da ich nicht weiß, wie ich mir den Wert der Variablen wiedergeben lassen kann.
    Ich hätte nun folgende Idee: Ich setzte den Wert der Variablen beim zerstören auf -1. Jedoch bekomme ich dann die Error Meldung, dass ich den Typ vertauscht habe (Float, Int...).


    Meine Frage ist nun ob das, was eventuell die Ursache für das Problem ist, sein kann und wie ich das lösen kann.

  • Also meinst du jetzt, dass er das TextDraw noch sieht wenn du es gelöscht hast oder was meinste genau, verstehe den Text nicht so richtig ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • der Text wird zerstört.


    Die Ids werden vertauscht.


    Stell dir vor du hast 2 textdraws die hier und da mal zerstört werden (Tacho). Wäre ja blöd das Tacho nur zu verstecken für jeden spieler wenn mans garnicht braucht.
    Dann updatest du ein textdraw, jedoch wird ein anderes geupdatet. die vermischen sich sozusagen. unteranderem kommt es dann auch vor das ein falsches Textdraw zerstört wird. Im Script sind die IDs alle richtig.


    Ich kann mir nur vorstellen das die Werte der Variablen gleich bleiben und wenn die öfters zerstört und createt werden den selben wert bekommen.


    Beispiel:


    new PlayerText:Beispiel1
    new PlayerText:Beispiel2


    Beispiel1 = CreatePlayerTextDraw(...);
    Beispiel2 = CreatePlayerTextDraw(...);


    Beispiel1 hat beispielweise den Wert 1, Beispiel 2 den Wert 2.


    Nun zerstöre ich beide:

    PlayerTextDrawDestroy(Beispiel1);
    PlayerTextDrawDestroy(Beispiel2);


    Nun haben sie jedoch nochimmer den selben wert, die textdraws sind weg, jedoch haben die Variablen den selben Wert wie vorher:
    Beispiel1 = 1
    Beispiel2 = 2.


    Nun erstelle ich Beispiel2 neu
    Beispiel2 = CreatePlayerTextDraw(...);
    Beispiel2 hat nun den Wert 1, da ja die ID 1 nicht belegt ist.


    Nun haben die Variablen folgende Werte:


    Beispiel1 = 1
    Beispiel2 = 1.


    Wenn ich nun irgentwas mit Beispiel1 mache, hat das aufwirkung auf Beispiel2.


    Wenn ich nun Beispiel1 wieder erstelle, bekommt dieser den Wert 2, da ja die ID 1 belegt ist.



    Ich hoffe man hats verstanden :D

  • Mhm, mach das doch mal so:


    new Text:Hallo[MAX_PLAYERS];


    public OnPlayerConnect(playerid)
    {
    Hallo[playerid] = TextDrawCreate(1,1,"--");
    //hier irgentwas halt so
    }


    Und dann kannst du es zerstören mit TextDrawDestroy(Hallo[playerid]);


    So zerstörst du es halt nur für die playerid ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • das ist mir klar :D


    Jedoch bleibt der Wert von Hallo[id] gleich, wovon ich zumindest ausgehe da ich nicht weiß wie ich den Wert von Hallo[id] wiedergeben soll.


    Die Textdraws werden ja createt und zerstört, jedoch wie im Beispiel gezeigt, bekommen 2 Textdrawvariablen den selben Wert.


    //edit:


    Oder eine andere Frage :D


    Wie kann ich Variablen wie Text:bla oder PlayerText:bla einen Wert zuweisen. Ich kann diese Art von Variablen keine Werte wie "0" oder "-1" zuweisen. wäre genauso als wenn ich einem Integer einen Wert wie 200.000 zuweisen würde oder einem Boolean eine Zeichenkette :D.


    //edit:
    Lösung gefunden:


    stock p_PlayerTextDrawDestroy(playerid, &PlayerText:text)
    {
    PlayerTextDrawDestroy(playerid, text);
    text = PlayerText:INVALID_TEXT_DRAW;
    }


    stock p_TextDrawDestroy(&Text:text)
    {
    TextDrawDestroy(text);
    text = Text:INVALID_TEXT_DRAW;
    }

    2 Mal editiert, zuletzt von Simon () aus folgendem Grund: Lösung gefunden