Geschwindigkeit Abfrage

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
  • Guten Tag / Abend,


    ich sitze zurzeit an einer automatischen Fahrschule mit Geschwindigkeit Abfrage. Jedoch wenn ich zu schnell

    fahre passiert nichts großartiges. Ich mache das auch zum ersten mal deswegen weiß ich nicht wie ich da vorgehen soll.

    Ich hab mir das ganze Km/h Zeug vom Tacho abgeschaut:


    new Float:speed_x,Float:speed_y,Float:speed_z,Float:final_speed,final_speed_int,veh = GetPlayerVehicleID(playerid),kmh_anzahl = final_speed_int,str[128];
    GetVehicleVelocity(veh, speed_x, speed_y, speed_z);
    final_speed = floatsqroot(((speed_x*speed_x)+(speed_y*speed_y))+(speed_z*speed_z))*120.0;
    final_speed_int = floatround(final_speed,floatround_round);


    Das steht unter OnPlayerEnterCheckpoint und da drunter dann die Abfrage:


    if(Pruefung[playerid] == 1 && PruefungCP[playerid] == 1 && GetVehicleModel(GetPlayerVehicleID(playerid)) == 410 && IsPlayerInRangeOfPoint(playerid,4.0,1634.9910,-1147.7936,23.6333))
    {
    if(kmh_anzahl > 60)
    {
    PruefungFehler[playerid] +=1;
    format(str,sizeof(str),"Bitte achte auf deine Geschwindigkeit! Fehler [%d/3]",PruefungFehler[playerid]);
    SendClientMessage(playerid,ROT,str);
    }
    DisablePlayerCheckpoint(playerid);
    PruefungCP[playerid] = 2;
    SetPlayerCheckpoint(playerid,1789.0580,-1175.8923,23.3792,4.0);
    }

  • Dein Geschwindigtkeit wird nur geprüft wenn du ein Checkpoint betrittst.
    Wenn es immer noch nicht funktioniert, dann liegt das Problem bei If-Abfragen. Gib mal die Werte aus durch Printf.
    //OnPlayerEnterCheckpoint
    printf("Pruefung: %d, CP: %d, Model: %d, isRange: %d", Pruefung[playerid], PruefungCP[playerid], GetVehicleModel(GetPlayerVehicleID(playerid)), IsPlayerInRangeOfPoint(playerid,4.0,1634.9910,-1147.7936,23.6333));
    Auch kmh_anzahl
    printf("KMH: %d", kmh_anzahl);

    "Everybody in this country should learn to program a computer, because it teaches you how to think."
    Steve Jobs

  • SetPVarInt(playerid,"pf.svr.act.tim",SetTimerEx("@kmcheck",1000,true,"d",playerid)); // Beim Prüfungsstart
    @kmcheck(playerid);
    @kmcheck(playerid){
    if(Pruefung[playerid] == 1 && PruefungCP[playerid] == 1 && GetVehicleModel(GetPlayerVehicleID(playerid)) == 410 && IsPlayerInRangeOfPoint(playerid,4.0,1634.9910,-1147.7936,23.6333))
    {
    new kmh_anzahl=GetPlayerSpeed(playerid),kmh_max=61;
    if(kmh_anzahl >= kmh_max)
    {
    PruefungFehler[playerid] +=1;
    format(str,sizeof(str),"Bitte achte auf deine Geschwindigkeit! Fehler [%d/3]",PruefungFehler[playerid]);
    SendClientMessage(playerid,ROT,str);
    }
    DisablePlayerCheckpoint(playerid);
    PruefungCP[playerid] = 2;
    return SetPlayerCheckpoint(playerid,1789.0580,-1175.8923,23.3792,4.0);
    }
    return KillTimer(GetPVarInt(playerid,"pf.svr.act.tim"));
    }


    stock GetPlayerSpeed(playerid)
    {
    new Float:pPos[4];
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)GetVehicleVelocity(GetPlayerVehicleID(playerid), pPos[0], pPos[1], pPos[2]);
    else if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)GetPlayerVelocity(playerid, pPos[0], pPos[1], pPos[2]);
    pPos[3] = floatsqroot(pPos[0] * pPos[0] + pPos[1] * pPos[1]);
    return floatround(pPos[3] * 100 * 1.61);
    }


    Ich habe mir mal die Zeit genommen, und dir einen "hübschen" Quellcode bereitgestellt. (Gerade geschrieben, nicht getestet)


    mfg :thumbup: