Textdraw Problem

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
  • Hallo breadfish-Community,


    leider sind wir jetzt schon seit geraumer Zeit durch ein nerviges Problem geplagt. Einige Textdraws sind miteinander ständig im Konflikt, so z.B. im folgenden Video die Uhrzeit, welche normalerweise oben rechts angezeigt werden muss und eine Anzeige unten rechts, die erscheint, wenn man in ein Fahrzeug einsteigt. Ich muss noch ergänzen, dass das nicht immer so ist! Der kurze Ausschnitt sagt wohl mehr als tausend Worte, daher habe ich mir die Mühe auch gemacht, das Problem aufzuzeichnen. Ich hoffe, Ihr könnt uns da Ratschläge geben, wo der Teufel im Detail steckt? Oft spinnen die Anzeigen total, wenn mehr Spieler auf dem Server sind.


    Videoausschnitt: http://www.gcmafia.de/downloads/gc.wmv


    MfG [GCM]DaNNy


    PS: Die Codeschnipsel vom Textdraw stehen mir nicht zur Verfügung, da müsste sich unser Scripter schon zu Wort melden, aber vielleicht wisst Ihr ja schon wo das Problem liegt. Vielen Dank im Voraus!

  • Würde mal spontan auf einen Konflikt zwischen Filterscript(e) und Gamemode tippen.Sollte einer der beiden Textdraws (Uhr o. die andere Anzeige) im Filterscript sein und das Andere im Gamemode oder Anderem Filterscript liegt der Fehler wahrscheinlich dort.
    Der Fehler kommt soweit ich weiss vor wenn man ein Filterscript re-loaded mit Textdraws,da sich dann die Textdraw ID's mit bereits benutzten vermischen.So kommt es dann vor das eine Textdraw ID doppelt vergeben ist.

  • Das könnte durchaus sein, insofern stimmt das mit der Uhr (Filterscript) und der Anzeige (GameMode). Jedoch gibt es häufig auch Konflikte mit dem Bankgeld (s. Video) und Texten in der Skinauswahl. Meist passiert das immer, wenn viele Spieler auf dem Server sind. Hier noch zwei Bilder, als ich Taxifahrer war und es wird, wenn man Fahrgäste befördert rechts ein Taxameter angezeigt, jedoch gibt es da einen Konflikt schon wieder mit der Anzeige oder dann wird gar nichts mehr anzezeigt, das sind Scriptparts, die in der GameMode integriert sind.



    Aber schon mal herzlichen Dank für Deine Hilfe, dem Scripter wird das sicher weiterhelfen!

    Einmal editiert, zuletzt von [mRL]DaNNy ()

  • Jetzt muss ich dazu ergänzen, dass alle Textboxen/Textdraws bis auf die Uhrzeit in das GameMode intergriert sind. Wenn ich ja das Filterscript mit der Uhr unloade, funktionieren die Textdraws insoweit, wenn ich jedoch z.B. als Taxifahrer Fahrgäste befördere, wird rechts neben der normalen Anzeige (Schaden, Tacho, Door und Fuel) auch noch ein Taxameter angezeigt und bei mehr als vier Spielern fangen diese Textdraws an zu spinnen, mal blinken die ähnlich wie im Video abwechselnd oder es wird vorrübergehend gar nichts (s. Screenshots) angezeigt.


    Mal schauen, eventuell liegt der Fehler auch schon, wie Godkiller schreibt, an den IDs. Aber ich bin überzeugt davon, dass unser Scripter (MaddDogg14) das bereits durchgetestet hat. Also irgendwo scheint ein Denkfehler oder wie auch immer zu sein, ich mein auf anderen Server funktionieren die doch auch ohne Probleme!? :S

  • Also ich poste jetzt mal die Parts der Textdraws Carhud und Bankgeld (also die wichtigsten und größten):


    init:
    #define MAX_PLAYERSEX 60
    new Text:TDcarhud[MAX_PLAYERSEX];
    new Text:TDBankgeld[MAX_PLAYERSEX];



    ongamemodeinit:
    for(new i=0; i<MAX_PLAYERSEX; i++)
    {
    TDcarhud[i] = TextDrawCreate(560.0, 393.0, "Initialisieren...");
    }



    die timer:
    SetTimer("carhud", 500, 1);
    SetTimer("BankgeldAnzeige", 500, 1);



    die funktionen für aktualisierung:
    public carhud()
    {
    new TDstring[200];


    for(new i=0; i<MAX_PLAYERSEX; i++)
    {
    if((IsPlayerConnected(i)) && (IsPlayerInAnyVehicle(i)))
    {


    // inhalt wird generiert und in TDstring gepackt


    if(!carhudswitch[i]) TDcarhud[i] = TextDrawCreate(560.0, 393.0, "Initialisieren...");
    if(carhudswitch[i]) TextDrawSetString(TDcarhud[i], TDstring);
    TextDrawFont(TDcarhud[i], 1);
    TextDrawLetterSize(TDcarhud[i], 0.42, 1.21);
    TextDrawSetProportional(TDcarhud[i], 1);
    TextDrawAlignment(TDcarhud[i], 2);
    TextDrawShowForPlayer(i, TDcarhud[i]);


    speedolastpos[i][LastX] = x;
    speedolastpos[i][LastY] = y;
    speedolastpos[i][LastZ] = z;


    carhudswitch[i] = 1;
    }


    if((!IsPlayerInAnyVehicle(i)) && (carhudswitch[i]))
    {
    TextDrawDestroy(TDcarhud[i]);
    carhudswitch[i] = 0;
    }
    }
    }



    //====================================================================================================================================================================
    //====================================================================================================================================================================



    public BankgeldAnzeige()
    {
    new string[50];


    for(new i=0; i<MAX_PLAYERSEX; i++)
    {
    if(IsPlayerLoggedIn(i))
    {
    format(string, sizeof(string), "~g~Bankgeld:~n~~y~%d$", playerdata[i][bankgeld]);


    if(!BankgeldAnzeigeSwitch[i]) TDBankgeld[i] = TextDrawCreate(560.0, 200.0, string);
    if(BankgeldAnzeigeSwitch[i]) TextDrawSetString(TDBankgeld[i], string);
    TextDrawFont(TDBankgeld[i], 3);
    TextDrawSetProportional(TDBankgeld[i], 1);
    TextDrawAlignment(TDBankgeld[i], 2);
    TextDrawShowForPlayer(i, TDBankgeld[i]);


    BankgeldAnzeigeSwitch[i] = 1;
    }


    else if(BankgeldAnzeigeSwitch[i])
    {
    BankgeldAnzeigeSwitch[i] = 0;
    TextDrawDestroy(TDBankgeld[i]);
    }
    }
    }

  • Doch doch, der funktioniert schon, hab ihn ja getestet, aber mal davon abgesehen, weiter oben im Thread ist ja noch mal ausführlich beschrieben, was unser Problem ist. MaddDogg14 hat ja noch zusätzlich die Codeschnipsel gepostet, jemand müsste uns doch weiterhelfen können... :S

  • Hatte auch mal das Problem aber da hatte ich mehrere FS die Textdraws beinhalteten, also iwie laggs an dem gleichen definitionsnamen,
    weil als ich sie änderte war alles wieder in Ordnung, bei mir verschwanden auch ständig Textdraws aber weiss jetz auch nichts genaueres :-S

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Wieso erstellt ihr und löscht das TextDraw ständig ?


    Man muss es doch nur updaten.


    Das geht ganz einfach mit TextDrawSetString.


    Die Texte bitte für jeden Spieler definieren. Bsp: TextDraw[MAX_PLAYERS]; Unter OngameModeInit: TextDRaw[playerid] = TextDrawCreate.... u.s.w


    Möchte nicht wirklich den genauen "Code" schreiben, da man das Problem auch durch's lesen und ausprobieren, am besten selbst hin bekommt. Sollte dies nicht der Fall, mich einfach mal an PN'en.


  • Das Textdraw löscht sich nur, wenn der Typ aus dem Wagen aussteigt und erstellt sich wieder, wenn er einsteigt. Ansonsten wird SetString genutzt.
    Ich hab's nun jetzt aber auch mal so geändert, dass der beim aussteigen einfach HideForPlayer macht.


    Der Text ist für jeden Spieler definiert.
    new Text:TDcarhud[MAX_PLAYERSEX];


    und


    TDcarhud[i] = TextDrawCreate(...

  • Das sollte gehen. Wenn du es so gemacht hast. Und wenn du keine anderen FS' benutz, die TextDraw's benutzen..