Man sieht den Tacho von jmd anderen

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 habe ein Riesenproblem, welches ich einfach nicht behoben bekommen, es sieht so aus:
    Kleine Vorgeschichte: Auf dem Server sind 2 Leute (ID 0 und ID 1)
    Nun connecte ich auf den Server (als ID 2), dann sehe ich den Tacho von ID 0, wenn ID 0 jetzt von seinem Fahrzeug absteigt, sehe ich für eine Sekunde keinen Tacho, danach den von ID 1, wenn ID 0 jetzt wieder in in das Fahrzeug steigt, sehe ich den Tacho von ID 0 und ID 1, welche sich beide auch jede Sekunde aktualisieren
    Wenn ich jetzt noch selbst in ein Fahrzeug steige, sehe ich 3 Tachos, die sich alle 3 auch aktualisieren
    Code ("maxon" steht für 32):
    //ganz oben:
    new Text:sprit[maxon];
    //OnPlayerConnect:
    sprit[playerid]=TextDrawCreate(250.0, 395.0," ");
    for(new i=0; i<maxon; i++) {
    TextDrawHideForPlayer(playerid,sprit[i]); }
    //OnPlayerDisconnect:
    TextDrawHideForPlayer(playerid,sprit[playerid]);
    TextDrawDestroy(sprit[playerid]);
    //bei /login:
    TextDrawSetString(sprit[playerid]," ");
    for(new i=0; i<maxon; i++) {
    TextDrawHideForPlayer(playerid,sprit[i]); }
    //bei OnPlayerSpawn
    for(new i=0; i<maxon; i++) {
    TextDrawHideForPlayer(playerid,sprit[i]); }
    //im timer:
    //bei den "[...]" steht nichts für den TextDraw relevantes und "aid" steht für "Autoid", also "new aid=GetPlayerVehicleID(i);"
    [...]
    format(sstring,sizeof(sstring),"Kraftstoff: %.2f/60.00 Liter~n~Geschwindigkeit: %d km/h~n~Fahrzeug: %s~n~Zustand: %s~n~Kilometerstand: %.2f",fi[aid][tank],floatround(distanz),autonamen[mid-400],zs,fi[aid][kmstand]);
    TextDrawSetString(sprit[i],sstring);
    [...]
    //OnPlayerStateChange:
    //newstate==2:
    TextDrawShowForPlayer(playerid,sprit[playerid]);
    //oldstate==2
    TextDrawSetString(sprit[playerid]," ");
    TextDrawHideForPlayer(playerid,sprit[playerid]);
    Ich hoffe, dass mir jemand helfen kann, ich verzweifel daran

  • Der Teil vom Timer müsste reichen...

    Spoiler anzeigen

    new aid=GetPlayerVehicleID(i);
    if(GetPlayerState(i)==PLAYER_STATE_DRIVER) {
    if(benziner(aid)) {
    new sstring[160], Float:jx, Float:jy, Float:jz, mid=GetVehicleModel(aid);
    GetPlayerPos(i,jx,jy,jz);
    new Float:distanz=floatsqroot(floatpower(floatabs(floatsub(jx,ax[i])),2)+floatpower(floatabs(floatsub(jy,ay[i])),2)+floatpower(floatabs(floatsub(jz,az[i])),2));
    distanz=floatround(distanz*3000);
    distanz=floatround(distanz/1000);
    new zs[20], Float:aleben;
    GetVehicleHealth(aid,aleben);
    if(aleben<=249) {
    fi[aid][istkaputt]=1;
    SendClientMessage(i,rot,"Dein Fahrzeug ist stark beschädigt, verlasse es mit /aussteigen und rufe das Ordnungsamt an mit der Nummer 111");
    SetVehicleHealth(aid,250);
    TogglePlayerControllable(i,0);
    fi[aid][motor]=0;
    }
    if(aleben>=1000) { format(zs,sizeof(zs),"perfekt"); }
    else if(aleben>=750) { format(zs,sizeof(zs),"gut"); }
    else if(aleben>=500) { format(zs,sizeof(zs),"durchschnittlich"); }
    else if(aleben>=350) { format(zs,sizeof(zs),"schlecht"); }
    else if(aleben<350) { format(zs,sizeof(zs),"katastrophal"); }
    if(fi[aid][istan]==1) {
    fi[aid][kmstand]+=distanz/1000; }
    if(fi[aid][istan]==0) { fi[aid][istan]=1; }
    if(pi[i][machtautoschein]>=1 || pi[i][machtmotorradschein]>=1) {
    if(aleben<=250) {
    RemovePlayerFromVehicle(i);
    DestroyVehicle(pi[i][fahrauto]);
    SendClientMessage(i,gelb,"|________Ergebnis________|");
    SendClientMessage(i,blau,"Du hast wegen zu großer Beschädigung des Fahrzeuges nicht bestanden");
    SendClientMessage(i,blau,"Die Prüfungsgebühr, sowie die Reperatur des Fahrzeuges musst du trotzdem zahlen. Dies sind 500$");
    GivePlayerGeld(i,-500);
    SetPlayerInterior(i,3);
    SetPlayerPos(i,-2022.138305,-116.718391,1035.171875); }
    if(pi[i][automostrecke]<=14 || pi[i][automostrecke]>=19) {
    if(floatround(distanz)>=100) {
    pi[i][fehlerpunkte]++; }}}
    //--------------------------------------------------------------------------
    if(fi[aid][motor]==1) {
    if(fi[aid][tank]>0) {
    fi[aid][tank]-=distanz*0.0004+0.001; }
    else {
    fi[aid][tank]=0;
    SendClientMessage(i,blau,"Dein Tank ist leer, nutze /aussteigen um aus dem Fahrzeug zu gelangen");
    fi[aid][motor]=0;
    TogglePlayerControllable(i,0); }}
    //--------------------------------------------------------------------------
    format(sstring,sizeof(sstring),"Kraftstoff: %.2f/60.00 Liter~n~Geschwindigkeit: %d km/h~n~Fahrzeug: %s~n~Zustand: %s~n~Kilometerstand: %.2f",fi[aid][tank],floatround(distanz),autonamen[mid-400],zs,fi[aid][kmstand]);
    TextDrawSetString(sprit[i],sstring);
    ax[i]=jx;
    ay[i]=jy;
    az[i]=jz;
    }

    PS: Es läuft für jede Person ein einzelnde Timer, also SetTimerEx (mit SetTimer und dann ner for-player-schleife hab ichs auch schon versucht... funktioniert auch nicht)
    PS2: Sollte der gesamte Timerinhalt benötigt werden, postei ch den auch, wollte das jetzt nur nicht, da dieser 300 Zeilen lang ist

  • Ersetze doch mal das OnPlayerConnect von
    for(new i=0; i<maxon; i++) {
    TextDrawHideForPlayer(playerid,sprit[i]); }

    zu
    TextDrawShowForPlayer(playerid) //kan auch andere Parameter haben


    Verstehe halt nicht, wieso du jeden Spieler nimmst....

  • Weil ich ja meistens schon beim connecten den Tacho von anderen sehen (wobei es nicht immer die ID 0 ist, sondern eine zufällige)
    Also will ich für diese Person den Tacho aller Leute verstecken
    //EDIT:
    Es ist nicht nur so, dass wenn man mehrere Tachos sieht, dass die dann übereinander hängen, es kann auch sein, dass man einen Tacho für einen ganz kleinen Moment sieht (kann ich nicht in Zeiteinheiten ausdrücken), dann verschwindet der, dafür kommt ein anderer, wieder für einen ganz kleinen Moment, dann verschwindet dier auch wieder und es kommt noch ein Neuer, dieser bleibt dann die Zeit, was von der einen Sekunde (in diesem Zeitraum aktualisiert der Tacho) noch übrig ist

  • wenn du mit der variable i arbeitest wird es zufällig angewählt...
    nimm playerid da er dann daraus nimmt wer grad im fahrzeug sitzt und fährt :thumbup:

  • Den Denkansatz hatte ich auch schon, alles, was mit TextDrawShow zu tun hat:
    //OnPlayerConnct:
    TextDrawShowForPlayer(playerid,forum);
    //OnPlayerStateChange
    //newstate==2
    TextDrawShowForPlayer(playerid,sprit[playerid]);
    Sonst nix mit TextDrawShow, mit TextDrawHide gibts das:
    //OnPlayerConnect:
    for(new i=0; i<maxon; i++) {
    TextDrawHideForPlayer(playerid,sprit[i]); }
    //OnPlayerDisconnect:
    TextDrawHideForPlayer(playerid,forum);
    TextDrawHideForPlayer(playerid,sprit[playerid]);
    //OnPlayerSpawn:
    for(new i=0; i<maxon; i++) {
    TextDrawHideForPlayer(playerid,sprit[i]); }
    //OnPlayerDeath:
    TextDrawHideForPlayer(playerid,sprit[playerid]);
    //oldstate==2
    TextDrawHideForPlayer(playerid,sprit[playerid]);
    SetTimerEx: gibts nur jeweils 1 Timer, der sich immer wiederholt (1 pro Spieler)
    for: Gibt ganz viele, aber keine in i-nem Timer