Fahrschulsystem/Tacho erstellen/Textdraw

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, ich habe mal ein paar Fragen :)


    Ich sitze an einem Fahrschul System, wo man Checkpoints abfahren muss und am Ende bekommt man halt den Führerschein.
    Nun wird es schon kritisch undzwar wird der letzte Checkpoint nie angezeigt das heißt er bekommt auch kein Führerschein -.-
    Und ich habe extra ein Textdraw erstellt, wo ich anzeigen lassen möchte :
    Status:
    Verwarnungen:


    Status(Zeigt an wie viele Checkpoints man noch vor sich hat)
    8/10 Checkpoints(beispiel)
    Verwarnungen(Man darf max. 80 Km/h fahren, wird diese Grenze überschritten gibt es eine Warnung, bei 3 Warnungen hat man nicht bestanden)
    1/3


    Jetzt noch ne kleine Frage, wie kann ich Fragen ob er 3 mal über 80 Km/h gefahren ist?
    Ich habe leider noch kein Tacho eingebaut, da kenn ich mich leider noch nicht aus, die Textdraws sind aber erstellt da kommen wir dann bei Frage 2 hinzu.


    Hier mal der Code vom Fahrschulsystem:


    Spoiler anzeigen

    new Praxis[MAX_PLAYERS];
    new CheckpointStatus[MAX_PLAYERS];

    Spoiler anzeigen
    #define MAX_RACE_POINTS 22

    Spoiler anzeigen
    new Float:racecheckpoints[MAX_RACE_POINTS][3] = {
    {-2045.6930,-81.6450,34.8956},
    {-2004.2744,-54.9843,34.8920},
    {-2004.0598,45.7823,31.4967},
    {-2003.9708,180.6956,27.2661},
    {-1999.8444,298.7823,34.3433},
    {-2047.9268,322.7840,34.7427},
    {-2128.6860,323.0107,34.8348},
    {-2144.5259,350.7651,34.8990},
    {-2139.7329,484.4901,34.7427},
    {-2161.2971,507.6261,34.7427},
    {-2214.3147,511.3216,34.7427},
    {-2228.9150,488.6285,34.7427},
    {-2267.7319,410.0070,34.7427},
    {-2269.1267,372.9379,33.4757},
    {-2254.5942,300.0095,34.8911},
    {-2254.7937,196.5933,34.9029},
    {-2254.4172,134.6183,34.8990},
    {-2258.2461,35.8751,34.8990},
    {-2260.6726,-31.9568,34.8990},
    {-2230.9214,-73.0984,34.8990},
    {-2119.0627,-72.9382,34.9027},
    {-2048.9795,-83.1473,34.8911}
    };

    Spoiler anzeigen
    if(strcmp(cmd,"/start", true) == 0) {

    Spoiler anzeigen
    if(IsPlayerInAnyVehicle(playerid)){
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 560)
    {
    Praxis[playerid] = 1; // Bedeutet, dass die Arbeit ab jetzt los geht. 1 = Arbeit geht Los.
    SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[0][0],racecheckpoints[0][1],racecheckpoints[0][2],racecheckpoints[1][0],racecheckpoints[1][1],racecheckpoints[1][2],3.0);
    }
    }
    return 1;
    }
    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if (IsPlayerInAnyVehicle(playerid))
    {
    if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 560)
    {

    Spoiler anzeigen
    if(Praxis[playerid] == 1)
    {
    CheckpointStatus[playerid]++;

    Spoiler anzeigen
    new letzerpunkt = MAX_RACE_POINTS;
    if(CheckpointStatus[playerid] < letzerpunkt)
    {
    DisablePlayerRaceCheckpoint(playerid);
    SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[CheckpointStatus[playerid]][0],racecheckpoints[CheckpointStatus[playerid]][1],racecheckpoints[CheckpointStatus[playerid]][2],racecheckpoints[CheckpointStatus[playerid]+1][0],racecheckpoints[CheckpointStatus[playerid]+1][1],racecheckpoints[CheckpointStatus[playerid]+1][2],3.0);
    }
    if(CheckpointStatus[playerid] == letzerpunkt){
    Praxis[playerid]= 0;
    CheckpointStatus[playerid] = 0;
    DisablePlayerRaceCheckpoint(playerid);
    }
    }
    }
    }
    return 1;
    }


    So das war der Code.


    Frage Nummer 2;


    Wie erstellt man einen Tacho? Einen der eher genau ist, wo ein Infernus so ca 220 fährt und ein Sultan 180/190 so wie in Reallife halt?
    Den Textdraw mit allem hab ich schon erstellt.
    Und wie kann ich einen Vorhandenen Textdraw in dem jetzt z.B "Hallo" steht zu "Tschüß" ändern?(ingame, oder halt per Timer /befehl)


    Das war es vorerst :)


    Rechtschreibfehler sind um diese Uhrzeit erlaubt :thumbup:


    Mit freundlichen Grüßen


    TV :thumbup:



    PS:  Jeffry:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Jetzt noch ne kleine Frage, wie kann ich Fragen ob er 3 mal über 80 Km/h gefahren ist?


    Indem du mit einem Timer die Geschwindigkeit während der Fahrstunde abfragst.

    Spoiler anzeigen
    new playerWarn[MAX_PLAYERS],speedTimer[MAX_PLAYERS];

    Spoiler anzeigen
    speedTimer[playerid] = SetTimerEx("CheckSpeed",1000,1,"i",playerid); //Da wo die Fahrstunde beginnt

    Spoiler anzeigen
    forward CheckSpeed(playerid);
    public CheckSpeed(playerid)
    {
    if(GetVehicleSpeed(GetPlayerVehicleID(playerid)) > 80)
    {
    playerWarn[playerid] ++;
    SendClientMessage(playerid,-1,"Du bist über 80 km/h gefahren! +1 Verwarnung!");
    }
    if(playerWarn[playerid] == 3)
    {
    KillTimer(speedTimer[playerid]);
    //Hier ist der Spieler 3x über 80 km/h gefahren
    }
    return 1;
    }

    Spoiler anzeigen
    KillTimer(speedTimer[playerid]);//Da wo die Fahrstunde bestanden wurde

    Spoiler anzeigen
    stock GetVehicleSpeed(vehicleid)
    {
    new Float:_Pos[3];
    GetVehicleVelocity(vehicleid,_Pos[0],_Pos[1],_Pos[2]);
    return floatround(floatsqroot(_Pos[0]*_Pos[0] + _Pos[1]*_Pos[1] + _Pos[2]*_Pos[2]))*200;
    }


    Zu deiner 2. Frage:
    Du hast geschrieben das du bereits ein Textdraw für das Tacho erstellt hast. Nun musst du ebenfalls per Timer die aktuelle Geschwindigkeit abfragen und dann das Tacho updaten.

    Spoiler anzeigen
    SetTimer("CheckTacho",1000,1); //OnGameModeInit

    Spoiler anzeigen
    forward CheckTacho();
    public CheckTacho()
    {
    new string[10];
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || !IsPlayerInAnyVehicle(i))continue;
    format(string,sizeof string,"km/h: %d",GetVehicleSpeed(GetPlayerVehicleID(i)));
    PlayerTextDrawSetString(i,PlayerTextDrawName,string);
    }
    return 1;
    }

    Wichtig: Das Tacho muss ein PlayerTextDraw sein, weil sonst jeder Spieler die Geschwindigkeit von der höchsten ID sieht, und das macht ja keinen Sinn. Bei PlayerTextDraw's hat jeder Spieler sein eigenes Tacho, und somit läuft dann auch alles perfekt! :good:


    Und wie kann ich einen Vorhandenen Textdraw in dem jetzt z.B "Hallo" steht zu "Tschüß" ändern ? (ingame, oder halt per Timer /befehl)


    Ein vorhandenen Textdraw kannst du mit der Funktion TextDrawSetString bzw. PlayerTextDrawSetString ändern.
    if(!strcmp(cmdtext,"/befehl",true))
    {
    return TextDrawSetString(TEXTDRAW,"Tschuess!");//Beispiel für TextDrawSetString
    }
    else if(!strcmp(cmdtext,"/befehl2",true))
    {
    return PlayerTextDrawSetString(playerid,TEXTDRAW,"Hallo!");//Beispiel für PlayerTextDrawSetString
    }

    2 Mal editiert, zuletzt von AirM4X ()

  • Hallo,


    erstmal vielen Dank für die Antwort!
    Das mit dem TextdrawString funktioniert schon mal super.
    Die Verwarnungen werden auch angezeigt !
    Leider ist dann mein Tacho total ungenau, besser gesagt ich fahre ganz normal dann steht dauerhaft "0" dran, fahre ich schnell steht nur "200" dran :/
    Und kann mir jemand beim Checkpoint Problem helfen? Wie gesagt der letzte wird nicht angezeigt.(Code steht oben)


    Sonst vielen Dank!



    MfG


    TV :thumbup:


    Jeffry:
    ICy.:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF () aus folgendem Grund: Jeff & Icy hinzugefügt

  • Zeige uns mal den Code von deinem Tacho.
    Also dort wo du den Timer startest, und dazu das Callback ;)


    Sollte dort der Fehler nicht liegen, kann es auch an der Funktion GetVehicleSpeed liegen. Zeige uns dafür aber erst einmal deinen aktuellen Code.

  • Okay.


    Das ist ja alles noch von dir nh?


    Spoiler anzeigen
    forward CheckTacho();
    public CheckTacho()
    {
    new string[10];
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || !IsPlayerInAnyVehicle(i))continue;
    format(string,sizeof string,"km/h: %d",GetVehicleSpeed(GetPlayerVehicleID(i)));
    PlayerTextDrawSetString(i,CarSpeed[i],string);
    }
    return 1;
    }


    Und hier rufe ich ihn auf:

    Spoiler anzeigen
    new cmd[256];
    if(strcmp(cmd,"/mission", true) == 0) {
    if(IsPlayerInAnyVehicle(playerid)){
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 560)
    {
    Praxis[playerid] = 1; // Bedeutet, dass die Arbeit ab jetzt los geht. 1 = Arbeit geht Los.
    speedTimer[playerid] = SetTimerEx("CheckSpeed",1000,1,"i",playerid);
    healthTimer[playerid] = SetTimerEx("CheckHealth",1000,1,"i",playerid);
    SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[0][0],racecheckpoints[0][1],racecheckpoints[0][2],racecheckpoints[1][0],racecheckpoints[1][1],racecheckpoints[1][2],3.0);
    }
    }
    return 1;
    }


    Kannst du oben mal schauen wieso bei mir der letzte Checkpoint nie aufgerufen wird?
    Wäre auch sehr nett!


    Achja, die Lebensanzeige verändert sich auch nicht :/


    Spoiler anzeigen
    healthTimer[playerid] = SetTimerEx("CheckHealth",1000,1,"i",playerid);
    forward CheckHealth(playerid);
    public CheckHealth(playerid)
    {
    new string[20], Float:vHealth;
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!IsPlayerInAnyVehicle(i))continue;
    GetVehicleHealth(GetPlayerVehicleID(i), vHealth);
    format(string,sizeof(string),"Zustand: ~g~%f", vHealth);
    PlayerTextDrawSetString(playerid,Textzustand[playerid],string);
    }
    if(vHealth < 75)
    {
    KillTimer(healthTimer[playerid]);
    }
    return 1;
    }


    MfG :)



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Den Befehl schreibst du bitte so:
    new cmd[256];
    if(!strcmp(cmd,"/mission",true))
    {
    if(IsPlayerInAnyVehicle(playerid) && GetVehicleModel(GetPlayerVehicleID(playerid)) == 560)
    {
    Praxis[playerid] = 1;
    SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[0][0],racecheckpoints[0][1],racecheckpoints[0][2],racecheckpoints[1][0],racecheckpoints[1][1],racecheckpoints[1][2],3.0);
    }
    return 1;
    }


    Den Timer für das Tacho muss unter dem Callback OnGameModeInit:
    SetTimer("CheckTacho",1000,1);//OnGameModeInit


    Und das ist der Callback für das Tacho, füge das einfach ganz unten ins Script ein:
    forward CheckTacho();
    public CheckTacho()
    {
    new string[64],Float:vHealth;
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || !IsPlayerInAnyVehicle(i))continue;
    GetVehicleHealth(GetPlayerVehicleID(i),vHealth);
    format(string,sizeof string,"km/h: %d",GetVehicleSpeed(GetPlayerVehicleID(i)));
    PlayerTextDrawSetString(i,CarSpeed[i],string);
    format(string,sizeof string,"Zustand: ~g~%f",vHealth);
    PlayerTextDrawSetString(i,Textzustand[i],string);
    }
    return 1;
    }
    Funktioniert das dann so?

  • Also funktionieren tut jetzt die Zustand anzeige.
    Das mit dem KMH ist leider immer noch nicht gefixxt.


    stock GetVehicleSpeed(vehicleid)
    {
    new Float:_Pos[3];
    GetVehicleVelocity(vehicleid,_Pos[0],_Pos[1],_Pos[2]);
    return floatround(floatsqroot(_Pos[0]*_Pos[0] + _Pos[1]*_Pos[1] + _Pos[2]*_Pos[2]))*200;
    }


    Das ist ja von dir, vielleicht liegt es daran?
    Achja, jetzt wird meine Health anzeige so angezeigt: "449.409698" kann man das nicht einfach in 44% ändern?


    Und wenn du kurz über meine RaceCheckpoints schauen würdest wäre das echt lieb:

    Spoiler anzeigen
    new Praxis[MAX_PLAYERS];
    new CheckpointStatus[MAX_PLAYERS];

    Spoiler anzeigen
    #define MAX_RACE_POINTS 22

    Spoiler anzeigen
    new Float:racecheckpoints[MAX_RACE_POINTS][3] = {
    {-2045.6930,-81.6450,34.8956},
    {-2004.2744,-54.9843,34.8920},
    {-2004.0598,45.7823,31.4967},
    {-2003.9708,180.6956,27.2661},
    {-1999.8444,298.7823,34.3433},
    {-2047.9268,322.7840,34.7427},
    {-2128.6860,323.0107,34.8348},
    {-2144.5259,350.7651,34.8990},
    {-2139.7329,484.4901,34.7427},
    {-2161.2971,507.6261,34.7427},
    {-2214.3147,511.3216,34.7427},
    {-2228.9150,488.6285,34.7427},
    {-2267.7319,410.0070,34.7427},
    {-2269.1267,372.9379,33.4757},
    {-2254.5942,300.0095,34.8911},
    {-2254.7937,196.5933,34.9029},
    {-2254.4172,134.6183,34.8990},
    {-2258.2461,35.8751,34.8990},
    {-2260.6726,-31.9568,34.8990},
    {-2230.9214,-73.0984,34.8990},
    {-2119.0627,-72.9382,34.9027},
    {-2048.9795,-83.1473,34.8911}
    };

    Spoiler anzeigen
    if(strcmp(cmd,"/start", true) == 0) {

    Spoiler anzeigen
    if(IsPlayerInAnyVehicle(playerid)){
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 560)
    {
    Praxis[playerid] = 1; // Bedeutet, dass die Arbeit ab jetzt los geht. 1 = Arbeit geht Los.
    SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[0][0],racecheckpoints[0][1],racecheckpoints[0][2],racecheckpoints[1][0],racecheckpoints[1][1],racecheckpoints[1][2],3.0);
    }
    }
    return 1;
    }
    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if (IsPlayerInAnyVehicle(playerid))
    {
    if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 560)
    {

    Spoiler anzeigen
    if(Praxis[playerid] == 1)
    {
    CheckpointStatus[playerid]++;

    Spoiler anzeigen
    new letzerpunkt = MAX_RACE_POINTS;
    if(CheckpointStatus[playerid] < letzerpunkt)
    {
    DisablePlayerRaceCheckpoint(playerid);
    SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[CheckpointStatus[playerid]][0],racecheckpoints[CheckpointStatus[playerid]][1],racecheckpoints[CheckpointStatus[playerid]][2],racecheckpoints[CheckpointStatus[playerid]+1][0],racecheckpoints[CheckpointStatus[playerid]+1][1],racecheckpoints[CheckpointStatus[playerid]+1][2],3.0);
    }
    if(CheckpointStatus[playerid] == letzerpunkt){
    Praxis[playerid]= 0;
    CheckpointStatus[playerid] = 0;
    DisablePlayerRaceCheckpoint(playerid);
    }
    }
    }
    }
    return 1;
    }


    Das Problem hierbei ist, dass der letzte Checkpoint nicht angezeigt wird und ich somit keine Statusmeldung erhalte ob man bestanden hat/Durchgefallen ist ..



    Danke dir!


    MfG
    @Mencent:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF () aus folgendem Grund: Icy hinzugefügt

  • forward CheckTacho();
    public CheckTacho()
    {
    new string[64],Float:vHealth;
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || !IsPlayerInAnyVehicle(i))continue;
    GetVehicleHealth(GetPlayerVehicleID(i),vHealth);
    format(string,sizeof string,"km/h: %d",GetPlayerSpeed(i));
    PlayerTextDrawSetString(i,CarSpeed[i],string);
    format(string,sizeof string,"Zustand: ~g~%f",floatround(vHealth,floatround_round));
    PlayerTextDrawSetString(i,Textzustand[i],string);
    }
    return 1;
    }


    GetPlayerSpeed(playerid)
    {
    new Float:ST[4];
    if(IsPlayerInAnyVehicle(playerid))
    GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
    else GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
    ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 179.28625;
    return floatround(ST[3]);
    }
    So, meine Funktion war falsch, nimm diese.


    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if (IsPlayerInAnyVehicle(playerid))
    {
    if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 560)
    {
    if(Praxis[playerid] == 1)
    {
    CheckpointStatus[playerid]++;
    new letzerpunkt = MAX_RACE_POINTS-1;
    if(CheckpointStatus[playerid] < letzerpunkt)
    {
    DisablePlayerRaceCheckpoint(playerid);
    SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[CheckpointStatus[playerid]][0],racecheckpoints[CheckpointStatus[playerid]][1],racecheckpoints[CheckpointStatus[playerid]][2],racecheckpoints[CheckpointStatus[playerid]+1][0],racecheckpoints[CheckpointStatus[playerid]+1][1],racecheckpoints[CheckpointStatus[playerid]+1][2],3.0);
    }
    else if(CheckpointStatus[playerid] == letzerpunkt)
    {
    Praxis[playerid]= 0;
    CheckpointStatus[playerid] = 0;
    DisablePlayerRaceCheckpoint(playerid);
    }
    }
    }
    }
    return 1;
    }
    Schreibe das mal wegen den Checkpoints ;)

  • Ja hey, also der Tacho geht jetzt, leider sehr ungenau..
    Die lebensanzeige geht nicht mehr es steht nur noch 0.00000 da


    und bei den Checkpoints wird das letzte immer noch nicht angezeigt, ich kriege die Statusmeldung jetzt nur bei dem vorletzten, dass war ja nicht der sinn..


    MfG



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Wie meinst du sehr ungenau? Bei mir funktionierte das ganze sehr gut.


    forward CheckTacho();
    public CheckTacho()
    {
    new string[64],Float:vHealth;
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || !IsPlayerInAnyVehicle(i))continue;
    GetVehicleHealth(GetPlayerVehicleID(i),vHealth);
    format(string,sizeof string,"km/h: %d",GetPlayerSpeed(i));
    PlayerTextDrawSetString(i,CarSpeed[i],string);
    format(string,sizeof string,"Zustand: ~g~%i",vHealth);
    PlayerTextDrawSetString(i,Textzustand[i],string);
    }
    return 1;
    }


    Das mit den Checkpoints muss ich nochmals rüberschauen.

  • Ich gebe Gaß dann kommt 20 dann gebe ich mehr dann schon 40, aber besser wäre es wenn 21, 22,23... kommen würde verstehst du was ich meine?


    Okay dankeschön :)


    MfG



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ah, dann musst du den Interval vom Timer (derzeit 1000) runter setzen, z.B. auf 300 oder so ;)


    EDIT:
    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if(IsPlayerInAnyVehicle(playerid) && GetVehicleModel(GetPlayerVehicleID(playerid)) == 560 && Praxis[playerid] == 1)
    {
    CheckpointStatus[playerid] ++;
    new letzterpunkt = MAX_RACE_POINTS;
    if(CheckpointStatus[playerid] == letzterpunkt-1)
    {
    Praxis[playerid]= 0;
    CheckpointStatus[playerid] = 0;
    DisablePlayerRaceCheckpoint(playerid);
    }
    else if(CheckpointStatus[playerid] < letzterpunkt)
    {
    DisablePlayerRaceCheckpoint(playerid);
    SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[CheckpointStatus[playerid]][0],racecheckpoints[CheckpointStatus[playerid]][1],racecheckpoints[CheckpointStatus[playerid]][2],racecheckpoints[CheckpointStatus[playerid]+1][0],racecheckpoints[CheckpointStatus[playerid]+1][1],racecheckpoints[CheckpointStatus[playerid]+1][2],3.0);
    }
    }
    return 1;
    }
    So klappt das nicht?

  • ahh okey, danke :)
    Wie mache ich die Zustand anzeige in Prozent? also bei mir stehen immer so viele Zahlen, will aber bsp 100% Leben ...



    Und nein leider nicht :/


    MFg



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • format(string,sizeof string,"Zustand: ~g~%i",floatround(vHealth,floatround_round));
    Schreib das so ^^


    Den Fehler mit den Checkpoints finde ich gerade selbst nicht, komisch.
    Ich bin gerade etwas durcheinander, und habe gerade damit viel herumprobiert.
    Jeffry: weiß da bestimmt mehr ;)

  • Auf Anfrage in PN und per Zitat:


    @TVPikachu:
    Kannst du bitte das aktuelle Problem nochmal genau schildern (da ja manches schon behoben ist) und den Code der dazugehört so posten, wie er jetzt ist? Damit wir wieder einen aktuellen und kompletten Stand haben. :)

  • Hey Jeffry,


    Klar kann ich das machen :)
    Schau mal :)


    Spoiler anzeigen

    #define MAX_RACE_POINTS 22

    Spoiler anzeigen
    new Float:racecheckpoints[MAX_RACE_POINTS][3] = {
    {-2045.6930,-81.6450,34.8956},
    {-2004.2744,-54.9843,34.8920},
    {-2004.0598,45.7823,31.4967},
    {-2003.9708,180.6956,27.2661},
    {-1999.8444,298.7823,34.3433},
    {-2047.9268,322.7840,34.7427},
    {-2128.6860,323.0107,34.8348},
    {-2144.5259,350.7651,34.8990},
    {-2139.7329,484.4901,34.7427},
    {-2161.2971,507.6261,34.7427},
    {-2214.3147,511.3216,34.7427},
    {-2228.9150,488.6285,34.7427},
    {-2267.7319,410.0070,34.7427},
    {-2269.1267,372.9379,33.4757},
    {-2254.5942,300.0095,34.8911},
    {-2254.7937,196.5933,34.9029},
    {-2254.4172,134.6183,34.8990},
    {-2258.2461,35.8751,34.8990},
    {-2260.6726,-31.9568,34.8990},
    {-2230.9214,-73.0984,34.8990},
    {-2119.0627,-72.9382,34.9027},
    {-2048.9795,-83.1473,34.8911}
    };
    if(!strcmp(cmd,"/mission",true))
    {
    if(IsPlayerInAnyVehicle(playerid) && GetVehicleModel(GetPlayerVehicleID(playerid)) == 560)
    {
    Praxis[playerid] = 1;
    speedTimer[playerid] = SetTimerEx("CheckSpeed",1000,1,"i",playerid);
    SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[0][0],racecheckpoints[0][1],racecheckpoints[0][2],racecheckpoints[1][0],racecheckpoints[1][1],racecheckpoints[1][2],3.0);
    }
    return 1;
    }
    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if (IsPlayerInAnyVehicle(playerid))
    {
    if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 560)
    {
    if(Praxis[playerid] == 1)
    {
    CheckpointStatus[playerid]++;
    new letzerpunkt = MAX_RACE_POINTS-1;
    new string[128];
    if(CheckpointStatus[playerid] < letzerpunkt)
    {
    format(string, sizeof(string),"Status: %d/22", CheckpointStatus[playerid]);
    PlayerTextDrawSetString(playerid,Textstatus[playerid],string);
    DisablePlayerRaceCheckpoint(playerid);
    SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[CheckpointStatus[playerid]][0],racecheckpoints[CheckpointStatus[playerid]][1],racecheckpoints[CheckpointStatus[playerid]][2],racecheckpoints[CheckpointStatus[playerid]+1][0],racecheckpoints[CheckpointStatus[playerid]+1][1],racecheckpoints[CheckpointStatus[playerid]+1][2],3.0);
    }
    if(CheckpointStatus[playerid] == letzerpunkt)
    {
    Praxis[playerid]= 0;
    CheckpointStatus[playerid] = 0;
    KillTimer(speedTimer[playerid]);
    format(string,sizeof(string),"Du hast %d / 3 Verwarnungen!",playerWarn[playerid]);
    SendClientMessage(playerid, warn,string);
    DisablePlayerRaceCheckpoint(playerid);
    }
    }
    }
    }
    return 1;
    }


    //Problem ist:
    Der letzte Checkpoint wird nicht angezeigt(22) und bei 21 hört es einfach auf. Da der letzte Checkpoint ja nicht angezeigt wird kann er auch kein Führerschein bekommen..



    MfG


    TV :)



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Dann dürfte es so passen:


    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if (IsPlayerInAnyVehicle(playerid))
    {
    if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 560)
    {
    if(Praxis[playerid] == 1)
    {
    CheckpointStatus[playerid]++;
    new string[128];
    if(CheckpointStatus[playerid] < MAX_RACE_POINTS-1)
    {
    format(string, sizeof(string),"Status: %d/22", CheckpointStatus[playerid]);
    PlayerTextDrawSetString(playerid,Textstatus[playerid],string);
    DisablePlayerRaceCheckpoint(playerid);
    SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[CheckpointStatus[playerid]][0],racecheckpoints[CheckpointStatus[playerid]][1],racecheckpoints[CheckpointStatus[playerid]][2],racecheckpoints[CheckpointStatus[playerid]+1][0],racecheckpoints[CheckpointStatus[playerid]+1][1],racecheckpoints[CheckpointStatus[playerid]+1][2],3.0);
    }
    else if(CheckpointStatus[playerid] == MAX_RACE_POINTS-1)
    {
    format(string, sizeof(string),"Status: %d/22", CheckpointStatus[playerid]);
    PlayerTextDrawSetString(playerid,Textstatus[playerid],string);
    DisablePlayerRaceCheckpoint(playerid);
    SetPlayerRaceCheckpoint(playerid,1,racecheckpoints[CheckpointStatus[playerid]][0],racecheckpoints[CheckpointStatus[playerid]][1],racecheckpoints[CheckpointStatus[playerid]][2],racecheckpoints[CheckpointStatus[playerid]][0],racecheckpoints[CheckpointStatus[playerid]][1],racecheckpoints[CheckpointStatus[playerid]][2],3.0);
    }
    else
    {
    Praxis[playerid]= 0;
    CheckpointStatus[playerid] = 0;
    KillTimer(speedTimer[playerid]);
    format(string,sizeof(string),"Du hast %d / 3 Verwarnungen!",playerWarn[playerid]);
    SendClientMessage(playerid, warn,string);
    DisablePlayerRaceCheckpoint(playerid);
    }
    }
    }
    }
    return 1;
    }

  • Super es funktioniert!


    Aber leider wird der Spieler erst ab ca 90 und manchmal erst 100 KMH verwarnt(eigentlich 80) und dann bekomm ich nen kleinen Lagg und hab fast 500 Verwarnungen :/


    forward CheckSpeed(playerid);
    public CheckSpeed(playerid)
    {
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(GetPlayerSpeed(GetPlayerVehicleID(i)) > 80)
    {
    new string[128];
    playerWarn[playerid] ++;
    SendClientMessage(playerid,-1,"Du bist über 80 km/h gefahren! +1 Verwarnung!");
    format(string,sizeof string,"Verwarnungen: %d/3",playerWarn[playerid]);
    PlayerTextDrawSetString(playerid,Textwarn[playerid],string);
    }
    if(playerWarn[playerid] == 3)
    {
    KillTimer(speedTimer[playerid]);
    //Hier ist der Spieler 3x über 80 km/h gefahren
    }
    }
    return 1;
    }


    Sollte doch richtig sein oder?


    GetPlayerSpeed(playerid)
    {
    new Float:ST[4];
    if(IsPlayerInAnyVehicle(playerid))
    GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
    else GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
    ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 179.28625;
    return floatround(ST[3]);
    }


    MfG



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)