Abfrage wenn größer aber kleiner | Blitzer

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 zusammen,


    ich steh grad wirklich auf dem Schlauch.
    Ich möchte mein Script gerne so verfeinern, dass man STVO-Punkte bekommt wenn man über einer gewissen Geschwidigkeit geblitzt wird.
    Vorstellung:
    Eigene Geschwindigkeit >= Erlaubter Geschwindigkeit +20 -> 1 STVO-Punkt
    Eigene Geschwindigkeit >= Erlaubter Geschwindigkeit +40 -> 2 STVO-Punkte
    Eigene Geschwindigkeit >= Erlaubter Geschwindigkeit +60 -> 3 STVO-Punkte


    Geschrieben habe ich es erstmal so:



    new gesch = (GetVehicleSpeed(vehicleid));
    new blitzgesch = (Blitzer[blitzerid][BlitzerGeschwindigkeit] + fsteuern[BlitzerToleranz]);
    if(gesch >= (blitzgesch + 20) && gesch <= (blitzgesch + 39))
    {
    Spieler[playerid][pSTVOpoints] += 1;
    format(string,sizeof(string),"STVO-Verstoß: Fall bearbeitet vom Beamten %s | Punkte vergabe: 1 | Punkte gesamt: %i",blitzerid,Spieler[playerid][pSTVOpoints]);
    SendClientMessage(playerid,0xFF444BFF,string);
    }


    Allerdings schmeißt er mir Errors ohne ende.
    Ich muss natürlich einen "Zwischenwert" festlegen, sonst verwendet er mir ab der 2. Abfage (Wenn mehr als 40 drüber) ja den 1 STVO-Punkt von der 1. Abfrage nochmal.


    Ich steh grad echt auf dem Schlauch und weiß nicht mehr genau wie man das am "schönsten" verpackt.


    Ich habe leider seit ca. 4 Jahren kein Script mehr angefasst und bin da voll raus.


    Evtl. kann mir ja einer von euch schnell helfen :)


    Danke schonmal im Voraus! ;)


    EDIT: Achja wenn ich das Script so schreibe geht es:



    new gesch = (GetVehicleSpeed(vehicleid));
    new blitzgesch = (Blitzer[blitzerid][BlitzerGeschwindigkeit] + fsteuern[BlitzerToleranz]);
    if(gesch >= (blitzgesch + 20))
    {
    Spieler[playerid][pSTVOpoints] += 1;
    format(string,sizeof(string),"STVO-Verstoß: Fall bearbeitet vom Beamten %s | Punkte vergabe: 1 | Punkte gesamt: %i",blitzerid,Spieler[playerid][pSTVOpoints]);
    SendClientMessage(playerid,0xFF444BFF,string);
    }


    Allerdings kann ich dann die 2. Abfrage vergessen... Also liegt der Fehler in der Abfrage "Zwischen 20 und 39 km/h drüber"

    • Offizieller Beitrag

    Das ganze kannst du mit einer Abfrage regeln und einfach berechnen. Beispiel:


    Code
    new gesch = (GetVehicleSpeed(vehicleid));
    new blitzgesch = (Blitzer[blitzerid][BlitzerGeschwindigkeit] + fsteuern[BlitzerToleranz]);
    if(gesch >= blitzgesch) {
    	new diff = gesch - blitzgesch;
    	new Float:diffPoints = floatdiv(float(diff), 20.0);
    	new points = floatround(diffPoints, floatround_ceil);
    	Spieler[playerid][pSTVOpoints] += points;
    	format(string,sizeof(string),"STVO-Verstoß: Fall bearbeitet vom Beamten %s | Punkte vergabe: %i | Punkte gesamt: %i",blitzerid,points,Spieler[playerid][pSTVOpoints]);
    	SendClientMessage(playerid,0xFF444BFF,string);
    }
    • Offizieller Beitrag

    Wenn es immer 20'er Schritte sind, dann ist die Berechnung oben ausreichend. Hier ein Beispiel:


    Du fährst 80, der Blitzer blitzt bei 50.
    (new diff = gesch - blitzgesch;) diff beträgt also 30.
    (new Float:diffPoints = floatdiv(float(diff), 20.0);) das dividiert 30 durch 20. Ergibt als 1,5
    (new points = floatround(diffPoints, floatround_ceil);) Rundet das ganze immer hoch, also 2.


    Das sind also 2 Punkte weil du 30 gefahren bist. Sehe aber grade erst, wie du es gemeint hast.
    Damit das so anspringt, wie du es haben möchtest, musst du einfach abrunden.
    Dafür einfach floatround_ceil durch floatround_floor ersetzen.


    Dann erhält man erst jede 20 volle KM/h einen Punkt.