[Hilfe von Profi]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 komme mal zu meinen ersten Problem:
    Bei mir auf dem Script verschwinden immer wieder Textdraws.
    Zurzeit ist es der Tacho da wird ein Textdraw gelöscht und kommt nie wieder.
    Das Passiert auch teilweise bei der Kmh-Anzeige die wird lange angezeigt dann ist sie weg.
    Wie kann das sein? ID Verschiebung? wenn ja warum, habt ihr Probleme mit Textdraws?


    Mein zweites:
    Ich habe in der Stadthalle in der untersten Etage 2 Pickups wenn mein einen Stock höher geht und wieder runter sind sie weg?
    Was ist bei mir im Script los?


    mfg.
    Opa


    EDIT//Überschrift
    EDIT2//Überschrift nochmal angepasst,damit möglichst viele Infos gleich zu sehen sind

  • Selfmade Script oder was für eins besitzt du? Sag mal Namen kommt mir bekannt vor...

  • Ist ein Selfmade:
    Beispiel Tacho:
    new Text:tachotextdraw[12];
    new Text:tachotextdrawname[MAX_PLAYERS];
    new Text:tachotextdrawspeed[MAX_PLAYERS];
    new Text:tachotextdrawzust[MAX_PLAYERS];
    new Text:tachotextdrawfuel[MAX_PLAYERS];
    new Text:tachotextdrawfuelart[MAX_PLAYERS];


    Mein Timer, ein komplizierter Teil daher poste ich den Teil, der wichtig ist.
    GetVehicleSpeed(car, speed);
    speedround=floatround(speed,floatround_round);
    format(string,sizeof(string),"%i",speedround);
    TextDrawSetString(tachotextdrawspeed[playerid],string);
    Den Rest wie Damage,Tank usw. habe ich auskommentiert aber komisch ist, das diese Anzeigen auch verschwinden und kommen wann sie wollen.
    Extrem ist es wenn man zu zweit auf dem Server ist und jeder ein Fahrzeug fährt.


    Ich hoffe ihr könnt helfen.


    mfg.
    Opa

  • Also bei den Textdraws kann ich dir jetzt gerade nicht weiterhelfen, aber bei der Stadthalle schon.


    Diese werden nicht gelöscht sondern durch ein Bug von GTA oder SA-MP einfach nur nichtmehr angezeigt, wenn du wieder raus und rein gehst sollten diese wieder da sein.
    Bei mir is nemlich der gleiche Bug^^

  • Du musst nach einem TextDraw-Befehl immer wieder TextDrawShowForPlayer machen.
    Ich denke das sollte dein Problem beheben.


    Du meinst also nach z.B. TextDrawSetString muss man TextDrawShowForPlayer machen?
    Ich glaube da liegst du ein wenig falsch... ich benutze auch nur TextDrawSetString und danach nix mehr mit TextDrawShow oder so, und es funktioniert einwand frei ;)


    /EDIT:

    Zitat

    Zunno
    Was haben die anderen Server dagegen gemacht?
    ich weis es z.B. nicht.
    Habe jetzt nur 3D-texte dort.

    Nunja was man genau dagegen machen kann weiß ich nicht^^
    wenn du oben in der Stadthalle nix hast map diesen "Flur" dort einfach zu.
    Dann kann niemand mehr nach oben, die Pickups werden dann weiter angezeigt und alles is gut :thumbup:

  • Ja was soll ich posten?
    Und ja es ist ein Zufall....
    Wenn man z.B. eine unbekannte Zeit(Zufall) mit dem Fahrzeug fährt wird die KmH Anzeige ned mehr angezeigt oder irgendwas anderes verschwindet...


    Zunno
    Kannst eventuell mal einen Textdraw posten den du per SetString änderst.


    Meine Erkenntnis:
    Zuerst hatte ich alles mit setString, da machten alle Textdraws was sie wollten einer verschwand (meistens die Uhr) und kam nie wieder.
    Jetzt ließ ich alle immer zerstören und wieder erstellen, da ging es schon besser aber jetzt verschwindet immer wieder was und kommt wieder..

  • Beispiel meiner Uhr^^


    new Text:Uhr;
    forward Uhrzeit();


    //OnGameModeInit()
    Uhr = TextDrawCreate(547.000000,26.000000,"00:00");
    TextDrawAlignment(Uhr,0);
    //...... usw .......


    //Timer unter OnGameModeInit
    SetTimer("Uhrzeit",1000 * 60,1); // = 1 Minute


    //OnPlayerLogin (GF ^^)
    TextDrawShowForPlayer(playerid, Uhr);


    //Wo anders im Script
    public Uhrzeit()
    {
    new timestr[32];
    new hour, minute;
    gettime(hour, minute);
    format(timestr,32,"%02d:%02d",hour,minute);
    TextDrawSetString(Uhr,timestr);
    }

  • So in etwa habe ich die Uhr auch und die funkt auch,
    Mein Tacho refresht sich jede Sekunde da ist der einzige Unterschied.


    Zusatz:
    Ich habe auch die Treibstoffart im Tacho, nun, dieser Textdraw wird einmal erstellt und dann wieder gelöscht wenn ich aussteige, aber wieso wird der gelöscht?
    Es kommt mir vor wie einer ID Verschiebung aber das kann doch ned sein oder hat SAMP selber einige Bugs(kommt mir so vor)...


    mfg.
    Opa

  • Nunja mir is gerade aufgefallen das du diese Varriabeln für die Textdraws benutzt:


    new Text:tachotextdraw[12];
    new Text:tachotextdrawname[MAX_PLAYERS];
    new Text:tachotextdrawspeed[MAX_PLAYERS];
    new Text:tachotextdrawzust[MAX_PLAYERS];
    new Text:tachotextdrawfuel[MAX_PLAYERS];
    new Text:tachotextdrawfuelart[MAX_PLAYERS];


    Nun ist mir nicht ganz klar wofür die 12 bei du bei Tachotextdraw steht...
    und vieleicht bringt es ja etwas wenn du aus
    new Text:tachotextdrawname[MAX_PLAYERS];
    dies hier machen würdest:
    new Text:tachoname[MAX_PLAYERS];


    Also halt "kürzer" ^^

  • Was du posten solltest, das wäre folgendes:
    Wo wird der TextDraw erstellt, wo gelöscht.
    Wo greift irgendeine Funktion bzw. ein befehl auf diesen TextDraw zu, bearbeitet ihn.
    Hilfreich wäre der Timer (hast du schon erwähnt: eine Sekunde)


    //Edit: andere Antwort schneller gewesen:
    Wie meinst du das mit den Namen?

  • Textdraw's verschwinden nicht so einfach, ob man den Interior, die Virtualworld oder die Position verändert, es häng ganz einfach mit den Textid's zusammen.


    Meist kommt das aber vom Skript selber, irgendwas verbuggt oder falsch gecoded.


    Denke immer dran:
    #define MAX_TEXT_DRAWS (2048)
    new Text:tachotextdraw[12];//12
    new Text:tachotextdrawname[MAX_PLAYERS];//500
    new Text:tachotextdrawspeed[MAX_PLAYERS];//500
    new Text:tachotextdrawzust[MAX_PLAYERS];//500
    new Text:tachotextdrawfuel[MAX_PLAYERS];//500
    new Text:tachotextdrawfuelart[MAX_PLAYERS];//500
    2512 // Also erst Textdraw's erstellen wenn der Spieler Connectet und die Abfrage:
    if(!IsPlayerNPC(playerid))
    einfügen.


    MfG Styler

  • Ok Dann kommt es mal,
    diesmal poste ich alles, ich werde aber nicht jede Funktion hinschreiben ;)


    SetTimer("TachoTimer",TACHOTIMER,1);
    public TachoTimer()
    {
    new car;
    new playerid;
    new key;
    new Float:health;
    new string[128];
    new healthround;
    new speedround;
    new Float:speed;
    for(new i = 0; i < MAX_KEYS; i++)
    {
    car=KeyInfo[i][KCar];
    playerid=GetVehicleDriver(car);
    if(IsCarKeyCar(car)&& IsPlayerInAnyVehicle(playerid))
    {
    key=GetCarKey(car);
    GetVehicleSpeed(car, speed);
    speedround=floatround(speed,floatround_round);
    format(string,sizeof(string),"%i",speedround);
    TextDrawHideForPlayer(playerid,speedtacho[playerid]);
    TextDrawSetString(speedtacho[playerid],string);
    TextDrawShowForPlayer(playerid,speedtacho[playerid]);
    /*TextDrawDestroy(speedtacho[playerid]);
    speedtacho[playerid] = TextDrawCreate(140.000000, 341.000000, string);
    TextDrawBackgroundColor(speedtacho[playerid], -1);
    TextDrawFont(speedtacho[playerid], 1);
    TextDrawLetterSize(speedtacho[playerid], 0.430000, 2.200000);
    TextDrawColor(speedtacho[playerid], 255);
    TextDrawSetOutline(speedtacho[playerid], 0);
    TextDrawSetProportional(speedtacho[playerid], 1);
    TextDrawSetShadow(speedtacho[playerid], 1);
    TextDrawShowForPlayer(playerid,speedtacho[playerid]);
    strdel(string,0,100);*/
    }
    }
    return 1;
    }


    if(newstate==PLAYER_STATE_ONFOOT)
    {
    if(oldstate==PLAYER_STATE_DRIVER)
    {
    DisablePlayerRaceCheckpoint(playerid);
    tachotextdrawhide(playerid);
    tachotextdrawplayerdestroy(playerid);
    }
    }


    Und das war es eig. auch schon.
    Werde jetzt keine Cop and Paste übung fürs klauen machen daher...
    Erstellt werden sie ganz normal und geloschen auch.


    Das ändern der Variablen brachte 0!
    mfg.
    Opa

  • Werde jetzt keine Cop and Paste übung fürs klauen machen daher...
    Erstellt werden sie ganz normal und geloschen auch.


    Sry aber da ist nichts falsch, das ist der Code, der aus dem textdraweditor ausgespuckt wurde.


    mfg.
    Opa


    EDIT// man kann nie sicher genug gehen daher muss ich auch testen da öfters in diesem Forum keine produktive Antwort kommt.