TextDraws verschwinden immer!

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
  • Hey, Leute ich habe ein Problem.
    Ich habe insgesamt ca 1513 TextDraws also noch Platz bis zum Limit.
    Mein Problem: Es verschwinden einfach immer TextDraws ohne Grund, erklären kann ich mir das allerdings nicht.
    Hat einer ne Lösung für dieses Problem?


    Danke,

  • Ja hier lasse ich sie hiden, allerdings nur die fürs Vehicle.
    Und trotzdem wird immer 1 TextDraw mitgehidet


    public IsPlayerDriverTextDrawCheck()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(GetPVarInt(i,"ImFahrzeug")==0)
    {
    if(IsPlayerInAnyVehicle(i) && GetPlayerState(i) == PLAYER_STATE_DRIVER)
    {
    SetPVarInt(i,"ImFahrzeug",1);
    for(new r=0; r<MAX_FAHRZEUGANZEIGETEXT; r++)
    {
    updatevehicleanzeigetimer[i] = SetTimerEx("UpdateVehicleAnzeigeTimer",250,true,"i",i);
    TextDrawShowForPlayer(i,Fahrzeuganzeige[i][r]);
    for(new s=0; s<MAX_VEHICLEANZEIGETEXT; s++)
    {
    TextDrawShowForPlayer(i,Vehicleanzeigetext[s]);
    }
    }
    }
    }
    if(GetPVarInt(i,"ImFahrzeug")==1)
    {
    if(!IsPlayerInAnyVehicle(i) || GetPlayerState(i) != PLAYER_STATE_DRIVER)
    {
    SetPVarInt(i,"ImFahrzeug",0);
    for(new r=0; r<MAX_FAHRZEUGANZEIGETEXT; r++)
    {
    TextDrawHideForPlayer(i,Fahrzeuganzeige[i][r]);
    for(new s=0; s<MAX_VEHICLEANZEIGETEXT; s++)
    {
    TextDrawHideForPlayer(i,Vehicleanzeigetext[s]);
    }
    }
    KillTimer(updatevehicleanzeigetimer[i]);
    }
    }
    }
    return 1;
    }

  • Viel davon ist falsch verschachtelt, das muss aber nicht unbedingt der Grund sein. Versuche es trotzdem mal so:
    public IsPlayerDriverTextDrawCheck()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(GetPVarInt(i,"ImFahrzeug")==0)
    {
    if(IsPlayerInAnyVehicle(i) && GetPlayerState(i) == PLAYER_STATE_DRIVER)
    {
    updatevehicleanzeigetimer[i] = SetTimerEx("UpdateVehicleAnzeigeTimer",250,true,"i",i);
    SetPVarInt(i,"ImFahrzeug",1);
    for(new r=0; r<MAX_FAHRZEUGANZEIGETEXT; r++)
    {
    TextDrawShowForPlayer(i,Fahrzeuganzeige[i][r]);
    }
    for(new s=0; s<MAX_VEHICLEANZEIGETEXT; s++)
    {
    TextDrawShowForPlayer(i,Vehicleanzeigetext[s]);
    }
    }
    }
    else if(GetPVarInt(i,"ImFahrzeug")==1)
    {
    if(!IsPlayerInAnyVehicle(i) || GetPlayerState(i) != PLAYER_STATE_DRIVER)
    {
    SetPVarInt(i,"ImFahrzeug",0);
    for(new r=0; r<MAX_FAHRZEUGANZEIGETEXT; r++)
    {
    TextDrawHideForPlayer(i,Fahrzeuganzeige[i][r]);
    }
    for(new s=0; s<MAX_VEHICLEANZEIGETEXT; s++)
    {
    TextDrawHideForPlayer(i,Vehicleanzeigetext[s]);
    }
    KillTimer(updatevehicleanzeigetimer[i]);
    }
    }
    }
    return 1;
    }

  • Es ist immer noch verbuggt, allerdings ist mir was aufgefallen:
    Wenn ich ein Auto spawne und einsteige geht alles.
    Sobald ich den Motor starte, und 3 sek ca fahre verschwindet ein text.


    Es ist aber immer der letzte Text den ich bei OnGameMode Init erstellt habe, der text, welcher in der letzten Zeile erstellt wurde, ist derjenige der verschwindet.


    Also im Prinzip:


    TextDrawCreate..
    ...
    ...
    //Der Letze Text
    TextDrawCreate der is buggy

  • for(new i=0; i<MAX_PLAYERS+1; i++)
    {

    Fahrzeuganzeige[i][0] = TextDrawCreate(362.000000, 285.000000, "....");
    TextDrawBackgroundColor(Fahrzeuganzeige[i][0], -1);
    TextDrawFont(Fahrzeuganzeige[i][0], 0);
    TextDrawLetterSize(Fahrzeuganzeige[i][0], 0.500000, 1.000000);
    ......


    Fahrzeuganzeige[i][1] = TextDrawCreate(362.000000, 285.000000, "....");
    TextDrawBackgroundColor(Fahrzeuganzeige[i][1], -1);
    TextDrawFont(Fahrzeuganzeige[i][1], 0);
    TextDrawLetterSize(Fahrzeuganzeige[i][1], 0.500000, 1.000000);
    ......
    USW

  • Du könntest ja etwas mogeln. Wenn es nur genau ein Textdraw ist, das gebuggt ist, dann erstelle doch einfach bei OnGameModeInit ein letztes nach dem letzten, welches du niemandem anzeigst.


    Ansonsten poste doch mal den Code, der nach drei Sekunden aufgerufen wird.

  • Eigentlich wird kein Code aufgerufen.
    Allerdings hab ich gemerkt, dass nach ungefähr einer Minute der bug nicht mehr auftritt?
    Also dann ist alles in Ordnung.


    Es wird halt nur "updatevehicleanzeigetimer[i] = SetTimerEx("UpdateVehicleAnzeigeTimer",250,true,"i",i);
    "


    aufgerufen allerdings wird da nur der String geupdatet und der Betroffene String ist nicht dabei, der verbugt ist.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hier
    public UpdateVehicleAnzeigeTimer(playerid)
    {
    new engine, lights, alarm, doors, bonnet, boot, objective, string[256], Float: health, maxliter, vehicleid, enginestate[32], lightstate[32], carlockstate[32];
    vehicleid = GetPlayerVehicleID(playerid);
    GetVehicleHealth(vehicleid,health);
    if(strcmp(GetVehicleEngineState(vehicleid),"Eingeschaltet",true))enginestate = "~r~Ausgeschaltet";
    if(strcmp(GetVehicleEngineState(vehicleid),"Ausgeschaltet",true))enginestate = "~g~Eingeschaltet";
    if(strcmp(GetVehicleLightState(vehicleid),"Eingeschaltet",true))lightstate = "~r~Ausgeschaltet";
    if(strcmp(GetVehicleLightState(vehicleid),"Ausgeschaltet",true))lightstate = "~g~Eingeschaltet";
    if(strcmp(GetVehicleCarlockState(vehicleid),"Aufgeschlossen",true))carlockstate = "~r~Abgeschlossen";
    if(strcmp(GetVehicleCarlockState(vehicleid),"Abgeschlossen",true))carlockstate = "~g~Aufgeschlossen";
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
    format(string,sizeof(string),"Fahrzeugname: ~w~%s~,VehicleNames[GetVehicleModel(vehicleid) - 400]);
    TextDrawSetString(Fahrzeuganzeige[playerid][0],string);
    format(string,sizeof(string),"......");
    TextDrawSetString(Fahrzeuganzeige[playerid][1],string);
    format(string,sizeof(string),"......");
    TextDrawSetString(Fahrzeuganzeige[playerid][2],string);
    return 1;
    }

  • Daran wird es dann wohl nicht liegen, da du ja hier kein Textdraw versteckst.
    Es wird wohl relativ schwer herauszufinden, wo genau der Fehler liegt, wenn du es nicht genau reproduzieren kannst. Hast du es mal mit dem einen Textdraw versucht, welches du niemandem anzeigst? Ist zwar keine schöne Lösung, aber wenn es hilft...


    Als andere Möglichkeit bleibt dir wohl nur debuggen, aber auch das ist ziemlich schwer hier, und zeitaufwändig.

  • Das mit dem neuen TextDraw klappt nicht!
    Es ist verbuggt, wie vorher auch.


    Ich denke mal es liegt an
    IsPlayerDriverTextDrawCheck


    Irgendetwas ist falsch oder er setzt die Variablen nicht.
    WARUM GIBT ES DENN DIESE LIMITS?
    Mit PVars gibts Limits, mit TextDraws, was bringt mir das??

  • Wann wird der DriverCheck... immer aufgerufen? Hast du den schonmal debuggt?


    Und wenn du das neue Textdraw vor dem zur Zeit verbuggten erstellst?


    Tja, das frag mal Kye. Gut, generell sind Limits schon sinnvoll, da es dir sonst irgendwann alles zerlegt, wenn die Hardware nicht mehr mitmacht, aber ein bisschen mehr würde hier und da sicher nicht schaden.

  • Beitrag von FLASH.[8743] ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Ich hab jetzt alles in PlayerTextDraws umgeschreiben...
    Jetzt wird garnichts mehr angezeigt..
    Meine Frage: Das Limit für PlayerTextDraws liegt bei 256.
    Heisst das dann, dass die 256 pro Spieler gilt oder Pro TextDraw??


    Also z.B



    xxx[id1] = CreatePlayerTextDraw(playerid1,....); // 1 TextDraw
    xxx[id] = CreatePlayerTextDraw(playerid2,....); // 2 TextDraws


    oder


    xxx[id1] = CreatePlayerTextDraw(playerid1,....); // 1 TextDraw
    xxx[id] = CreatePlayerTextDraw(playerid2,....); // 1 TextDraws


    D.h. welches der beiden Optionen trifft zu??

  • Es verschwindet jetzt irgendwie wieder ein Textdraw, allerdings ein anderes als zuvor.


    Und dieses TextDraw wird nicht geupdatet:


    format(string,sizeof(string),"%i%%~n~",VehicleInfo[vehicleid][Tank]/maxliter);
    PlayerTextDrawSetString(playerid,Fahrzeuganzeige[playerid][2],string);


    Fahrzeuganzeige[playerid][2] = CreatePlayerTextDraw(playerid,500.000000, 416.000000, "Ladevorgang...~n~");
    PlayerTextDrawAlignment(playerid,Fahrzeuganzeige[playerid][2], 2);
    PlayerTextDrawBackgroundColor(playerid,Fahrzeuganzeige[playerid][2], 255);
    ...

  • Lass dir mal die ID des Textdraws ausgeben:
    format(string,sizeof(string),"%i%%~n~",VehicleInfo[vehicleid][Tank]/maxliter);
    PlayerTextDrawSetString(playerid,Fahrzeuganzeige[playerid][2],string);


    zu:
    format(string,sizeof(string),"%i%%~n~",VehicleInfo[vehicleid][Tank]/maxliter);
    printf("Fahrzeuganzeige[playerid][2] = %d", _:Fahrzeuganzeige[playerid][2]);
    PlayerTextDrawSetString(playerid,Fahrzeuganzeige[playerid][2],string);


    Was wird da geprintet?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen