Kilometerzähler fehler.

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 fehler undzwar wenn ich jetzte mit ein infernus fahre und bis ca 0,1 oder 7,0 und dann in ein Bullet(oder ein anderes fahrzeug einsteige) ist genau der selbe Wert da woran könnte es liegen. Sagt bitte bescheid welchen Code ich posten soll.


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



    Tacho7[i] = TextDrawCreate(491.250000, 428.166503, "~r~KM:~g~ 0,0");
    TextDrawLetterSize(Tacho7[i], 0.302498, 1.734166);
    TextDrawAlignment(Tacho7[i], 1);
    TextDrawColor(Tacho7[i], -1);
    TextDrawSetShadow(Tacho7[i], 0);
    TextDrawSetOutline(Tacho7[i], 1);
    TextDrawBackgroundColor(Tacho7[i], 51);
    TextDrawFont(Tacho7[i], 2);
    TextDrawSetProportional(Tacho7[i], 1);


    }

    2 Mal editiert, zuletzt von Maurice. ()

  • Was ist denn am 2. anders?


    Du solltest für jeden ein playertextdraw erstellen. Wieso? Du hast nur 2.048 oder so Textdraws zur Verfügung. So hast du schon 500 weg.
    Erspart dir später viele Mühen.


    Abgesehen davon: Nein liegt nicht daran. Es liegt wahrscheinlich an deiner KM Stand Variable.
    Ich vermute, dass du sie auf dem Spieler speicherst und nicht auf dem Auto ;)

    ik bin der vito c:

  • Das mit der 2 schleife war ein denk fehler von mir. Den KM speichere ich noch nicht ? hier mal der timer public
    public tachotimer(playerid)
    {
    new string[50];
    new Float:distanz;
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    distanz=GetDistanceFromPointToPoint(xx[playerid],yy[playerid],zz[playerid],x,y,z);
    if(distanz>100) return 1;
    distance[playerid]=distance[playerid]+distanz;
    GetPlayerPos(playerid,xx[playerid],yy[playerid],zz[playerid]);
    if(distance[playerid]>100)
    {
    m[playerid]++;
    distance[playerid]=distance[playerid]-100;
    if(m[playerid]==10)
    {
    km[playerid]++;
    m[playerid]=0;
    }
    format(string,sizeof(string),"~r~KM:~g~ %i,%i",km[playerid],m[playerid]);
    TextDrawSetString(Tacho7[playerid],string);
    }
    return 1;
    }

  • Da ist doch genau der Fehler :DD


    Du hast doch da km[playerid] und m[playerid]
    Das solltest du auf


    km[GetPlayerVehicleID(playerid)] und m[GetPlayerVehicleID(playerid)] machen.


    Damit du verstehst was ich meine hier der geänderte Code



    enum _VehicleInfo {
    meter,
    kilometer
    }
    new VehicleInfo[MAX_VEHICLES][_VehicleInfo];




    public tachotimer(playerid)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    new string[50];
    new Float:distanz;
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    distanz=GetDistanceFromPointToPoint(xx[playerid],yy[playerid],zz[playerid],x,y,z);
    if(distanz>100) return 1;
    distance[playerid]=distance[playerid]+distanz;
    GetPlayerPos(playerid,xx[playerid],yy[playerid],zz[playerid]);
    if(distance[playerid]>100)
    {
    VehicleInfo[vehicleid][meter]++;
    distance[playerid]=distance[playerid]-100;
    if(VehicleInfo[vehicleid][meter]==10)
    {
    VehicleInfo[vehicleid][kilometer]++;
    VehicleInfo[vehicleid][meter]=0;
    }
    format(string,sizeof(string),"~r~KM:~g~ %i,%i",VehicleInfo[vehicleid][kilometer],VehicleInfo[vehicleid][meter]);
    TextDrawSetString(Tacho7[playerid],string);
    }
    return 1;
    }

    ik bin der vito c:

  • Achso jetzt verstehe ich es so nun 2 frage ich habe jetzte bei mysql eine tabelle 'carsystem' erstellt mit den sachen Km und meter und Name so würde das gehen ?


    public tachotimer(playerid)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    new string[50];
    new Float:distanz;
    new playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof(playername));
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    distanz=GetDistanceFromPointToPoint(xx[playerid],yy[playerid],zz[playerid],x,y,z);
    if(distanz>100) return 1;
    distance[playerid]=distance[playerid]+distanz;
    GetPlayerPos(playerid,xx[playerid],yy[playerid],zz[playerid]);
    if(distance[playerid]>100)
    {
    VehicleInfo[vehicleid][meter]++;
    distance[playerid]=distance[playerid]-100;
    if(VehicleInfo[vehicleid][meter]==10)
    {
    VehicleInfo[vehicleid][kilometer]++;
    VehicleInfo[vehicleid][meter]=0;
    }
    format(string,sizeof(string),"~r~KM:~g~ %i,%i",VehicleInfo[vehicleid][kilometer],VehicleInfo[vehicleid][meter]);
    TextDrawSetString(Tacho7[playerid],string);
    }
    format(string, sizeof(string), "INSERT INTO `carsystem` (`Name`, `km`, 'm') VALUES ('%s', '%i', '%i')", playername, VehicleInfo[vehicleid][kilometer],VehicleInfo[vehicleid][meter]);
    self_mysql_query(string);
    return 1;
    }


    Nur ich glaube das geht nicht weil er es ja glaube dann beim jedes mal einsteigen noch mal neu macht. So das bei jedes mal dann steht z.B jetzte in der 1. Zeile Maurice 80 1 und in der 2 Zeile Maurice 81 1 wenn ihr versteht was ich meine. Muss ich das nicht noch was mit UPDATE machen ?

  • Du solltest es ganz sicher nicht im Timer speichern lassen.


    Nein würde es nicht
    wahh da brummt mir der KOpf wenn ich das sehe :D


    Du müsstest es gaaaanz anders machen.
    Dafür ist aber dein Fahrzeug System nicht weit genug.
    Beispielsweise speicherst du das dann bei den Fraktionsfahrzeuge und den Privatfahrzeugen ab.
    Ansonsten müsste jedes Fahrzeug, welches auf deinem Server ist eine eindeutige ID haben aka eintrag in der Tabelle.


    Das so zu speichern ist um einiges schwerer.


    Merke: Viele Querys sind nicht gut.
    Es ist besser einzelne zu machen die aber den selben Effekt bringen.
    Speichern und laden musst du nur wenn sich was verändert. Also wenn das fahrzeug gelöscht wird -> Dann erst die Variablen speichern
    Wenn es erstellt wird: nur dann laden und in Variablen speichern und danach wieder speichern.


    MEINE HAND SCHMERZT WAHHH

    ik bin der vito c:

  • Anstatt mit GetDistanceFromPoimtToPoint zu arbeiten solltest du dich mal mit der Meter/Sekunde Formel auseinandersetzen.


    new value = floatround(floatsqroot((X*X) + (Y*Y) + (Z*Z)) * 100 * 1.71);// KMH
    Kilometer +=value/3.6;// Formel für Meter/Sekunde


    So Verwendbar in ein einem Sekundentimer, bei schnelleren/langsameren Timer musst du es eben noch "mal" bzw "geteilt" rechnen.


    Vorteil ist das es nicht nur Ressourcen schonender ist sonder funktioniert auch zuverlässiger.


    mfg Mika