Problem mit Tacho

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 Leute, folgendes ich hab ein Problem mit dem Tacho ...
    Wenn z.B. 3 Spieler auf dem Server sind und alle in ein Fahrzeug steigen und los fahren zeigt das Tacho von jedem Spieler das Tacho ...


    Unter OnPlayerConnect:
    timer[playerid] = SetTimerEx("SpeedoUpdate",500, 1,"i",playerid);



    Eigener Public:

    orward SpeedoUpdate(playerid);
    public SpeedoUpdate(playerid)
    {
    //for(new i = 0; i<MAX_PLAYERS; i++){
    if(IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid)){
    new veh = GetPlayerVehicleID(playerid),kmh[10],zustand[30],tank[10],cars[50],Float:hp;
    GetVehicleHealth(GetPlayerVehicleID(playerid), hp);
    format(kmh, 10,"KM/H: %d", GetVehicleSpeed(veh));
    if(hp == 1000 ){format(zustand, 30,"Zustand: ~g~%.0f", hp);}
    format(tank, 10,"Tank: %d", Gas[veh]);
    format(cars, 50,"%s", VehicleName[GetVehicleModel(GetPlayerVehicleID(playerid))-400]);
    TextDrawSetString(Tacho_KMH, kmh);
    TextDrawSetString(Tacho_Zustand, zustand);
    TextDrawSetString(Tacho_Tank, tank);
    TextDrawSetString(Tacho_Car, cars);
    }
    //}
    return 1;
    }

  • timer[playerid] = SetTimerEx("SpeedoUpdate",500, 1,"i",playerid);
    Ich weiss nicht obs daran liegt. Aber warum hast du 2x playerid da stehen?

    Genau weiß ich es auch nicht, man hat mir gesagt ich solle es mit SetTimerEx probieren.
    Vielleicht kannst du mir ja weiter helfen, weil ich mit SetTimerEx noch nie befasst habe und die Wiki mir nicht so die Infos drüber gibt. ^^

  • Bist du dir sicher das du für jeden Spieler einen eigenen Timer benutzen möchtest?
    Wenn du 100 Spieler auf dem Server hast, laufen dir in einer halben Sekunde 100 Timer gleichzeitig.


    Nimm einen Timer unter OnGameModeInit, und gehe das mit einer For-Schleife durch.


    forward SpeedoUpdate();
    public SpeedoUpdate(){
    new string[64],Float:hp;
    for(new i;i<MAX_PLAYERS;i++){
    if(!IsPlayerConnected(i) || !IsPlayerInAnyVehicle(i))continue;
    new veh = GetPlayerVehicleID(i);GetVehicleHealth(veh,hp);
    format(string,64,"KM/H: %d",GetVehicleSpeed(veh)),TextDrawSetString(Tacho_KMH,string);
    if(hp == 1000)format(string,64,"Zustand: ~g~%.0f",hp),TextDrawSetString(Tacho_Zustand,string);
    format(string,64,"Tank: %d",Gas[veh]),TextDrawSetString(Tacho_Tank,string);
    format(string,64,"%s",VehicleName[GetVehicleModel(veh)-400]),TextDrawSetString(Tacho_Car,string);
    }
    return 1;
    }


    EDIT: Ob das mit diesem Timer sparender ist weiß ich nicht, da du mit dieser Variante ebenfalls in einer halben Sekunde alle Spieler durchlaufen lässt, die Online & in einem Fahrzeug sind.

  • SetTimer("SpeedoUpdate",100,1);

    Du kannst es auch einfach nur so machen. Was willst du denn mit der Variable da vorne? ;)

  • Unterschied, ne nicht wirklich außer eine unnötige Variable.


    Wenn du den Timer irgendwo im Script wieder killen willst, das brauchst du nicht, da die Spieler im Timer aufgerufen werden -> geschaut ob die Online und im Fahrzeug sind -> wenn nicht wird der nächste Spieler untersucht -> wenn doch, wird das Tacho geupdatet.

  • Wieso nicht den Timer einfach nur für den Spieler laufen lassen der gerade in ein Fahrzeug sitzt bzw. ein Fahrzeug fährt??


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    SetTimerEx("SpeedoUpdate", 100, 1, playerid);
    }
    return 1;
    }
    forward SpeedoUpdate(playerid);
    public SpeedoUpdate(playerid)
    {
    //for(new i = 0; i<MAX_PLAYERS; i++){
    if(IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid)){
    new veh = GetPlayerVehicleID(playerid),kmh[10],zustand[30],tank[10],cars[50],Float:hp;
    GetVehicleHealth(GetPlayerVehicleID(playerid), hp);
    format(kmh, 10,"KM/H: %d", GetVehicleSpeed(veh));
    if(hp == 1000 ){format(zustand, 30,"Zustand: ~g~%.0f", hp);}
    format(tank, 10,"Tank: %d", Gas[veh]);
    format(cars, 50,"%s", VehicleName[GetVehicleModel(GetPlayerVehicleID(playerid))-400]);
    TextDrawSetString(Tacho_KMH, kmh);
    TextDrawSetString(Tacho_Zustand, zustand);
    TextDrawSetString(Tacho_Tank, tank);
    TextDrawSetString(Tacho_Car, cars);
    }
    //}
    return 1;
    }

  • Wäre das gleiche wie bei mir ;)
    Ich frage ja ab ob der Spieler online und in einem Fahrzeug sitzt.

  • Wäre das gleiche wie bei mir
    Ich frage ja ab ob der Spieler online und in einem Fahrzeug sitzt.


    Jetzt ist das Problem, (ich hab es grad mit einem Kollegen getestet) ..
    -> Ich steig in meinem Fahrzeug ein, dann zeigt er meine Sachen an ...
    -> mein Kollege steigt danach in ein anderes Auto ein, und ich kriege sein Auto angezeigt .. und er auch bei sich.

  • Hat mit ner For-Schleife nix zu tun. Du brauchst PlayerTextDraws, keine "normalen" TextDraws.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Beitrag von AirM4X ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.