Textdraw aktualisierungen überlappen sich

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
  • Hi Leute,


    ich habe einen Textdraw. Der String dessen enthält eine Variable, die sich (vorallem bei normalen Serverbetrieb ist das extrem) ständig ändert. Der Textdraw aktualisiert sich daraufhin und gibt den Textdraw wieder neu aus (wie gewollt) mit der neuen Zahl. Jedoch, ist der alte String immernoch vorhanden, auf deutsch: Die Zahlen überlappen sich. Der veränderte String legt sich automatisch auf den alten, sodass die Zahl irgendwann nichtmehr lesbar ist weil sämtlichste Zahlen darin vermischt sind.


    Ich habe das ganze mal in einen Filterscript kopiert(habe im Filterscript nicht alles definiert, es existieren keine Errors)


    #include <a_samp>



    #define FILTERSCRIPT


    #if defined FILTERSCRIPT


    #define COLOR_RED 0xFF0000AA


    forward UpdateGSW();


    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Bla");
    print("--------------------------------------\n");
    SetTimer("UpdateGSW", 1500, 1);
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }


    #endif
    public UpdateGSW(playerid)
    {
    if(gTeam[playerid] == TEAM_GS)
    {
    new str[128];
    format(str, sizeof(str), "Waffen:%d",TestVar);
    TextDrawSetString(TestDraw[i],str);
    }
    return 1;
    }
    public OnPlayerSpawn(playerid)
    {
    if(gTeam[playerid] == TEAM_GS)
    {
    format(TestDrawB, sizeof(TestDrawB),"Waffen:%d",TestVar);
    TestDraw[i] = TextDrawCreate(270.0, 380.0, TestDrawB);
    TextDrawLetterSize(TestDraw[i], 0.5, 2.5);
    TextDrawShowForPlayer(playerid,TestDraw[i]);
    }
    //Zwischenzeitig kommt noch weiterer Code
    if (gTeam[playerid] == TEAM_GS)
    {
    TestVar--;
    TextDrawSetString(TestDraw[i],TestDrawB);
    GivePlayerWeapon(playerid,8,1);
    GivePlayerWeapon(playerid,16,5);
    GivePlayerWeapon(playerid,24,120);
    GivePlayerWeapon(playerid,27,150);
    GivePlayerWeapon(playerid,28,250);
    GivePlayerWeapon(playerid,31,500);
    return 1;
    }
    return 1;
    }


    Das Filterscript enthält errors weil es nicht richtig definiert wurde alles, aber der code ansich ist richtig. Der Textdraw soll alle 1,5 Sekunden aktualisiert werden (UpdateGSW).
    Weiterhin tritt manchmal auch das Problem auf, das ein anderer Spieler des Teams nicht die aktuelle Variable sieht (nur nach dem log-in) und somit wird das nicht mehr richtig aktualisiert (Nach dem Bugtest eines Kollegens, falls ihr da eine Lösung findet bitte mitteilen)


    Danke im Vorrausetzung.

  • Das liegt daran das du den TextDraw schließen muss und erneut anzeigen lassen musst. Erst dann wird das Update sichtbar sein.



    TextDrawHideForPlayer(playerid, TXTid);
    TextDrawShowForPlayer(playerid, TXTid);


    LG RFT

    RFT

  • Hmm, Problem besteht nachwievor.
    Ich habe weitere Varianten versucht, den Timer Updater ausstellen und ihn nach der Änderung der Variable den Update befehl ausführen lassen sowie auch mit den Hide&Show wie es RFT gesagt hat.

  • Du verheimlichst uns irgendwas ;)


    public UpdateGSW(playerid)
    {
    if(gTeam[playerid] == TEAM_GS)
    {
    new str[128];
    format(str, sizeof(str), "Waffen:%d",TestVar);
    TextDrawSetString(TestDraw[i],str);
    }
    return 1;
    }
    Der Code dürfte eigentlich garnicht funktionieren.
    Ich nehme an, dass dort auch der Fehler liegt (mehr Stellen gibts ja nicht ;) )


    //e: Und die Stelle, wo du den Timer erstellst, ist ebenfalls relevant

  • Der Timer ist bei OnGameModeInit (beim filterscript stehts bei onfilterscriptinit)


    verheimlichen tu ich nichts, das ist eigentlich alles^^
    der rest steht ja bei OnPlayerSpawn... nur das ich halt (warum auch immer) anstantt TestDrawB(string) str(string) updaten lasse... habs mitlerweile umgeändert, ändert nichts.


    Ähm, ja... warum söllte das nicht funktionieren? Im Tutorial stands drinnen :D