Textdraws tauschen die Position

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,
    Ich sitze zur Zeit an einem Selfmadescript und habe letztens 2 Textdraws erstellt. Einen für die Uhr und einen für das Tacho. Diese haben auch eigentlich erstmal super funktioniert. Doch seit ein paar Tagen vertauschen sich immer Uhr und Tacho. Wenn man in keinem Auto sitzt ist das Feld wo die Uhr sein sollte Leer und wenn man dann drinnen sitzt wechseln sich Uhr und Tacho auf Position der Uhr ab 8| . Ich bin mir ziemlich sicher, dass ich an den Textdraws seit es funktioniert hat nichts mehr geändert habe. Vielleicht könnt ihr mir ja helfen. Eine Datumsanzeige habe ich auch gemacht, aber die Funktioniert tadellos.


    Defines usw.:

    new Text:EchtZeitUhr;
    new Text:datum;
    new Text:Tacho[MAX_PLAYERS];
    #define TACHOTIMER 1000



    Gamemodeinit:

    SetTimer("UpdateTacho",TACHOTIMER,1);
    //uhr
    new stunde, minute, sek, astring[128];
    gettime(stunde, minute, sek);
    if(stunde<9 && minute<9){format(astring,sizeof(astring),"0%d:0%d",stunde,minute);}
    else if(stunde>9 && minute<9){format(astring,sizeof(astring),"%d:0%d",stunde,minute);}
    else if(stunde<9 && minute>9){format(astring,sizeof(astring),"0%d:%d",stunde,minute);}
    else
    {
    format(astring,sizeof(astring),"%d:%d",stunde,minute);
    }
    EchtZeitUhr = TextDrawCreate(560 ,47, astring);
    //TextDrawAlignment(EchtZeitUhr,3);
    TextDrawBackgroundColor(EchtZeitUhr,0x000000FF);
    TextDrawFont(EchtZeitUhr,3);
    TextDrawLetterSize(EchtZeitUhr,0.6,1.2);
    TextDrawColor(EchtZeitUhr,0xFFFFFFFF);
    TextDrawSetOutline(EchtZeitUhr,1);
    TextDrawSetShadow(EchtZeitUhr,9);
    //datum
    new Year, Month, Day, strang[128];
    getdate(Year, Month, Day);
    format(strang,sizeof(strang),"%02d.%02d.%02d",Day,Month,Year);
    datum = TextDrawCreate(550 ,35,strang);
    TextDrawBackgroundColor(datum,0x000000FF);
    TextDrawFont(datum,3);
    TextDrawLetterSize(datum,0.4,0.8);
    TextDrawColor(datum,0xFFFFFFFF);
    TextDrawSetOutline(datum,1);
    TextDrawSetShadow(datum,9);
    for( new x = 0;x<MAX_PLAYERS;x++)
    {
    /*Tacho[x] = TextDrawCreate(450,377,"Uninteressant");
    TextDrawSetShadow(Tacho[x],0);
    TextDrawSetOutline(Tacho[x],1);
    TextDrawLetterSize(Tacho[x] , 0.4, 1.0);
    TextDrawUseBox(Tacho[x] , 1);
    TextDrawBackgroundColor(Tacho[x] ,255);
    TextDrawBoxColor(Tacho[x] ,0x00000066);
    TextDrawSetOutline(Tacho[x],1);
    TextDrawTextSize(Tacho[x], 30, 10);*/
    //TextDrawAlignment(Tacho[x], 3);
    Tacho[x] = TextDrawCreate(448.000000, 377.000000, "Geschwindigkeit: 1000km/h ~n~ t ~n~ t ~n~ t");
    TextDrawBackgroundColor(Tacho[x], 255);
    TextDrawFont(Tacho[x], 1);
    TextDrawLetterSize(Tacho[x], 0.400000, 1.000000);
    TextDrawColor(Tacho[x], -1);
    TextDrawSetOutline(Tacho[x], 1);
    TextDrawSetProportional(Tacho[x], 1);
    TextDrawUseBox(Tacho[x], 1);
    TextDrawBoxColor(Tacho[x], 125);
    TextDrawTextSize(Tacho[x], 638.000000, 119.000000);
    }


    Playerdisconnect:
    TextDrawHideForPlayer(playerid,EchtZeitUhr);
    TextDrawHideForPlayer(playerid,datum);


    Playerspawn:
    TextDrawShowForPlayer(playerid,EchtZeitUhr);
    new stunde, minute, sek, astring[128];
    gettime(stunde, minute, sek);
    if(stunde<9 && minute<9){format(astring,sizeof(astring),"0%d:0%d",stunde,minute);}
    else if(stunde>9 && minute<9){format(astring,sizeof(astring),"%d:0%d",stunde,minute);}
    else if(stunde<9 && minute>9){format(astring,sizeof(astring),"0%d:%d",stunde,minute);}
    else
    {
    format(astring,sizeof(astring),"%d:%d",stunde,minute);
    }
    TextDrawSetString(EchtZeitUhr, astring);
    TextDrawShowForPlayer(playerid,datum);


    public UpdateClock()
    {
    new Hour,Minute,Sec,String[256];
    gettime(Hour,Minute,Sec);
    if(Hour<9 && Minute<9){format(String,sizeof(String),"0%d:0%d",Hour,Minute);}
    else if(Hour>9 && Minute<9){format(String,sizeof(String),"%d:0%d",Hour,Minute);}
    else if(Hour<9 && Minute>9){format(String,sizeof(String),"0%d:%d",Hour,Minute);}
    else
    {
    format(String,sizeof(String),"%d:%d",Hour,Minute);
    }
    TextDrawSetString(EchtZeitUhr,String);
    SetWorldTime(Hour);
    return 1;
    }


    Update Tacho:
    public UpdateTacho()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && GetPlayerState(i) == PLAYER_STATE_DRIVER && !IsPlayerNPC(i))
    {
    new Float:Strecke,Float:Geschwindigkeit,Float:carhealth1,vehicle = GetPlayerVehicleID(i),Float:carhealth2;
    GetVehicleHealth(vehicle,carhealth1) ;
    carhealth2 = (carhealth1 / 10 - 25 )* 1.3333333333;
    if(carhealth2 <= 0)
    {
    carhealth2 = 0;
    }
    GetVehiclePos(GetPlayerVehicleID(i),X1[i],Y1[i],Z1[i]);
    Strecke = floatsqroot(floatpower(floatabs(floatsub(X1[i],X2[i])),2)+floatpower(floatabs(floatsub(Y1[i],Y2[i])),2)+floatpower(floatabs(floatsub(Z1[i],Z2[i])),2));
    Geschwindigkeit = (Strecke / (TACHOTIMER/1000)) * 3.6;
    if(Geschwindigkeit>=350)
    {
    Geschwindigkeit = 0;
    }
    new String[128];
    if(Geschwindigkeit >=99)
    {
    format(String,128,"Geschwindigkeit: %dkm/h~n~~w~Fahrzeugtyp: %s~n~~w~Zustand: ~y~%0.0f%%~n~~w~Tank: ~g~%.1f Liter",floatround(Geschwindigkeit),vehStats[GetVehicleModel(GetPlayerVehicleID(i))-400][modelname],carhealth2, cInfo[GetPlayerVehicleID(i)][cTank]);
    }
    else if(Geschwindigkeit >9)
    {
    format(String,128,"Geschwindigkeit: %dkm/h~n~~w~Fahrzeugtyp: %s~n~~w~Zustand: ~y~%0.0f%%~n~~w~Tank: ~g~%.1f Liter",floatround(Geschwindigkeit),vehStats[GetVehicleModel(GetPlayerVehicleID(i))-400][modelname],carhealth2, cInfo[GetPlayerVehicleID(i)][cTank]);
    }
    else
    {
    format(String,128,"Geschwindigkeit: %dkm/h~n~~w~Fahrzeugtyp: %s~n~~w~Zustand: ~y~%0.0f%%~n~~w~Tank: ~g~%.1f Liter",floatround(Geschwindigkeit),vehStats[GetVehicleModel(GetPlayerVehicleID(i))-400][modelname],carhealth2, cInfo[GetPlayerVehicleID(i)][cTank]);
    }
    TextDrawSetString(Tacho[i],String);
    GetVehiclePos(GetPlayerVehicleID(i),X2[i],Y2[i],Z2[i]);
    TextDrawShowForPlayer(i,Tacho[i]);
    }
    else
    {
    TextDrawHideForPlayer(i,Tacho[i]);
    }
    }
    return 1;
    }



    Auf den Screens nochmal zur Veranschaulichung... Das Tacho gehört nach unten rechts..



  • Das selbe problem hatte ich auch, hatte dazu auch ein Thema hier im Breadfish. Das ganze ist ein Fehler Samp seits, ich weiß nicht mehr genau wie ich das behoben hab, jedoch weiß ich noch das ich das ganze mit einem enum das alle Textdraws beinhaltet gelöst hab.

    enum _TextDraws
    {
    PlayerText:blub,
    PlayerText:blub2
    }
    new pTextdraw[MAX_PLAYERS][_TextDraws];

  • Habe das Problem mit Durty's Hilfe über Skype gelöst:
    Ich dachte wenn man ein Textdraw erstellt mit Text:Textdraw[MAX_PLAYERS]; wäre es automatisch ein Playertextdraw, jedoch gibt es ja dafür eine eigene Funktion(PlayerText).


    Naja nochmal vielen Dank Durty :)