Kilometerzähler

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
  • Hi, Ich wollte gerade einen Kilometerzähler erstellen habe allerdings keine Ahnung wie man so etwas macht. Ich weis wohl das ich oben eine Variable erstellen muss ungefähr so.


    new Kilometer[MAX_VEHICLES];


    Aber wie man dann ausrechnet wann er einen Kilometer gefahren ist... Ich habe keine Ahnung. Könnt ihr mir ein bisschen Helfen?


    Danke im Voraus. Und ich möchte keinen Code sondern nur ein paar Tipps-

  • Habe es zwa nie gemacht aber versuche mal sobald der Spieler im Fahrzeug ist und fährt,
    dass ein Timer gestartet wird zB. das jede 60 Sekunde immer +1KM gerechnet wird und gebe es aus.
    Wenn du es professioneller machen willst kann ich nicht wirklich weiter helfen.
    Vielleicht bringt dir der Tipp ja auf eine neue Idee..


    Mfg, Syko.

  • Ich dachte an sowas das ich einen Punkt setze und dann auslese wenn er 1 Kilometer gefahren ist. Es muss natürlich nicht genau einen Kilometer sein aber sollte der GTA Größe entsprechen. Also ingame natürlich vom Größenverhältnis her einen Kilometer.

  • also du legst ein array an mit den 3 coordinaten von allen spielern...
    dann führst du sobald jemand als fahrer in einem fahrzeugs sitzt einen timer aus..


    in der funktion berechnest du aus den in der variable gespeicherten werten und der jetzigen position mithilfe des "satz des pythagoras" die zurückgelegte entfernung in der letzten sekunde aus...
    diese addierst du dann einfach zu deiner kilometerzahl des fahrzeugs...
    am ende musst du die position in das am anfang erstellte array speichern.


    Alles verstanden ?

  • Wie schnell läuft denn dein Timer (Tacho)
    also hier das Script bei 1 SEK:

    //Oben
    new Float:Kilometer[MAX_VEHICLES];


    //Tacho
    if(GetPlayerVehicleSeat(playerid) == 0)Kilometer[GetPlayerVehicleID(playerid)] +=(((Geschwindigkeit)/60)/60)/2;


    //Anzeigen Lassen
    floatround(Kilometer[GetPlayerVehicleID(playerid)])


    Dass heißt der Tacho rechnet auf den Kilometerstand die Geschwindigkeit durch stunde(KMH = Kilometer pro STUNDE) und dann durch Minute auf die Sekunde und auf eine halbe.


    MFG Piet

  • verdammt piet kannst du überhaupt nicht lesen...
    er wills selber machen.
    respektier das, ich find das gut dass es immernoch leute gibt die es selber machen wollen.


    wie lang der timer ist, ist egal...
    nur wenn du über den timer auch irwann mal die geschwindigkeit bestimmen willst, musst du das berücksichtigen, was aber auch nciht schwer ist, wenn man weis wie man dann auf meter/sekunde etc. kommt

  • Momentan läuft er auf 500 Millisekunden also ca. 0.5 Sekunden. Wie gesagt aber eventuell mache ich ihn noch kleiner da ich vielleicht die Geschwindigkeit genauer haben möchte. Deshalb bringt mir eine Meter pro Sekunden Rechnung nicht viel. Hier mal das Tacho. Vielleicht hilft es.


    new Float:Geschwindigkeit;
    GetVehicleVelocity(car, gX1[playerid], gY1[playerid], gZ1[playerid]);
    Geschwindigkeit = floatsqroot(gX1[playerid]*gX1[playerid] + gY1[playerid]*gY1[playerid] + gZ1[playerid]*gZ1[playerid]) * 100 * 2;
    format(tachostr, sizeof(tachostr), "%d", floatround(Geschwindigkeit));


    "Edits"
    Nr1. Pille das hilft mir leider nicht weiter, da ich die Function GetDistanceFromPointToPoint nicht habe da ich ein Selfmade mache.

  • forward Float:GetDistanceFromPointToPoint(Float:X,Float:Y,Float:Z,Float:tX,Float:tY,Float:tZ);
    public Float:GetDistanceFromPointToPoint(Float:X,Float:Y,Float:Z,Float:tX,Float:tY,Float:tZ)
    {
    return Float:floatsqroot((tX-X)*(tX-X)+(tY-Y)*(tY-Y)+(tZ-Z)*(tZ-Z));
    }


    Steht aber auch hier drin.

  • ich hab doch gesagt, die zeit des timers ist egal, erst wenn du die geschwindigkeit berechnen willst, spielt das eine rolle...
    und dazu solltest du das einfach umwandeln können... bisschen gehirn anstrengen sollten da aber auch reichen ;)


    //ach du machst das mit vehiclevelocity ^^
    ja dann spielt es nie ne rolle

  • benutze die funktion die pille gepostet hat und die kannst du auch jeweilig deinen vordtellung anpassen und leicht in deinen tacho einbinden. da du domit die entfernung raus bekomst zum letzten punkt dann musst du die entfernung nur noch adieren und dementsprechend teilen und runden.

  • Den Kilometerstand muss man ja auch nicht häufig aktualisieren. Selbst alle 10 Sekunden reicht.


    { Berechnung für neuen Kilometerstand
    - Position des Fahrzeuges auslesen
    - Aktuelle Position benutzen und Distanz zur alten Positon berechnen
    - Kilometerstand um Distanz erhöhen
    - Aktuelle Position in alte Position schieben.


    Alle aber in bezug auf die vehicleid !
    }


    Kilometerstand würde ich persönlich aber nicht als Einheit ( Km ) / Variablenamen nutzen.
    Ein Meterstand ist viel einfach zu handhaben. Denn Meter legt man doch viele schneller zurück als Kilometer. Die Distanz zwischen zwei Punkten berechnest du auch viel einfacher in Metern anstatt in Kilometer. Die Umrechnung von den Meterstand in Kilometer für die Ausgabe sollte auch kein Problem sein.

  • Ich habe halt vor auch wenn ihr soetwas vielleicht blöd findet ein richtiges Tanksystem zu machen mit Verbrauch auf 100 Kilometer usw.
    //edit: obwohl ich auch einfach beim Verbrauch / 1000 rechnen könnte damit es mit den Metern passt.
    //edit:2 Jetzt sieht meine Funktion so aus. new Float:distanz,
    Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    distanz = GetDistanceFromPointToPoint(gX2[playerid], gY2[playerid], gZ2[playerid], x, y, z);
    if(distanz>100) return 1;
    distance[car] = distance[car]+distanz;
    GetPlayerPos(playerid, gX2[playerid], gY2[playerid], gZ2[playerid]);
    if(distance[playerid] > 100)
    {
    distance[car] = distance[car] - 100;
    floatsub(TankInhalt[car],floatdiv(vInfo[model][vVerbrauch],1000));
    format(tankstr, sizeof(tankstr), "%i", TankInhalt[car]);
    TextDrawSetString(TankAnzeige, tankstr);
    }
    TextDrawSetString(TankAnzeige, TankInhalt[car]);
    Kann sie sich mal jemand angucken und mir sagen ob es so geht.?


    Edit:// Es geht nicht. Ich bewege mich 1 Millimeter wirklich nur einmal die w taste angetptt und gleich angeblich 1316215156765 Kilometer.
    Irgendetwas passt hier nicht.

    Einmal editiert, zuletzt von Acrio ()

  • Ja sry habe das Problem schon gelöst habe es so gemacht.


    format(distanzstr, sizeof(distanzstr), "%.02f", Distance);
    So habe ich 2Stellen hinterm Komma die ich als Meterzahlen nutze. Habe wohl vergessen auf erledigt zu klicken.

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