Textdraws Conflicting

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
  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Was mir ins Auge springt ist folgende Zeile:


    SpecText[4][playerid] = PlayerText:INVALID_TEXT_DRAW;


    Ich habe auch immer wieder Probleme mit den TextDraws. Ich habe einfach eine eigene Funktion geschrieben: _TextDrawDestroy(...) wo ich dann die jeweilige id auf INVALID setze.
    Probier aber erstmal die oben aufgeführte Zeile zu korrigieren

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Wenn ich das nun richtig sehe ist die Variable folgender maßen:


    SpecText[MAX_PLAYERS][4];


    wenn du nun den Wert zurücksetzen willst:


    for(new p = 0; p < 4; p++) SpecText[playerid][p] = PlayerText:INVALID_TEXT_DRAW;

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Die Schleife ist nur eine Abkürzung. Du hast das einmal richtig gemacht und beim 2. mal aufeinmal falsch.


    wenn du hast: SpecText[MAX_PLAYERS][4];



    aber auf SpecText[4][playerid] zugreifst. Dann könnte sogar dein Script abschmieren (wenn deine playerid höher als 3 ist.


    Denn du greifst auf den Text von playerid 4 zu und davon das Element an stelle von playerid (es gibt aber nur 4 (0-3).


    Du musst also alle 4 Spec-Texte für den jeweiligen Spieler zurücksetzen.
    Der richtige Zugriff wäre also:


    SpecText[playerid][0]
    SpecText[playerid][1]
    SpecText[playerid][2]
    SpecText[playerid][3]


    Oder wie in meinem vorherigen Post einfach eine kleine Schleife machen. Ist am Ende genau das selbe.

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Es kommt halt auch darauf an, an welcher Stelle Textdraws erstellt werden, an welcher stelle sie gezeigt werden und an welcher stelle sie zerstört werden.


    Ich würde es folgendermaßen machen:


    Wenn der Spieler sich einloggt, erstellst du die benötigten PlayerTextDraws.
    An geeignetet Stelle zeigst du dem Spieler das TextDraw mit PlayerTextDrawShow
    Wenn der Spieler sich ausloggt, dann zerstörst du das TextDraw und setzt den Wert der Variablen zurück.


    Beispiel:




    Es kann sein das paar Parameter falsch sind oder die Funktionen etwas anders geschrieben werden, aber grundsätzlich sollte das verständlich sein.
    Damit ist sichergestellt, das das Textdraw erst beim Connecten erstellt wird. Dann wann es ihm angezeigt oder nicht angezeigt werden soll, wird das getan.
    Beim Ausloggen wird das TextDraw dann zerstört und die Variable zurück gesetzt.


    Loggt der Spieler sich nun wieder ein (oder ein anderer) werden die TextDraws wieder neu erstellt.


    Nach diesem Prinzip alle TextDraws machen.


    Bei allgemeinen übrigens auch: beim GameModeInit erstellen, an geeigneter Stelle anzeigen oder verstecken. Und beim GameModeExit zerstören.
    Wenn du zwischendurch ohne relog Textdraws erstellst und zerstörtst, darauf achten, das beim zerstören immer die Variablen zurückgesetzt werden.