Frage Fahrschule

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
  • Oben im code:
    new Fahrschulauto;


    OnGameModeInit:
    Fahrschulauto = CreateVehicle...


    Beim command:
    if(GetPlayerVehicleID(playerid) == Fahrschulauto)
    {
    //Fahrschule startet.
    }
    else SendClientMessage(playerid, ROT, "ERROR: Du musst im Fahrschulauto sein.");

  • Das ist doch irgend wie falsch oder nicht ?


    new Fahrschulauto;


    muss doch zu


    new Fahrschulauto[4] // Also dahinter noch die anzahl in "[]" wie viele autos definiert werden sollen oder nicht?, da es odch ansonsten nicht funktionieren würde ..


    Also


    new Fahrschulcar[ANZAHL]; // ANZAHL = Anzahl der Fahrzeuge die du haben möchtest




    Dann bei OnGameModeInit:
    Wenn du sagen wir 4 Fahrzeuge haben möchtest:
    Fahrschulcar[0] = CreateVehicle(...
    Fahrschulcar[1] = CreateVehicle(...
    Fahrschulcar[2] = CreateVehicle(...
    Fahrschulcar[3] = CreateVehicle(...
    usw..




    Dann den Befehl nicht vergessen:



    ocmd:starten(playerid, params[])
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == Fahrzeug ID) // Fahrzeug ID = ID Des Fahrzeuges 411 = Infernus
    {
    {
    // Deine Funktionen hier rein


    }
    else
    {
    SendClientMessage(playerid,GELB,"* Du bist in keinem Fahrschul wagen");
    }
    return 1;
    }


    OnPlayerSteateChange:


    // Was Halt passieren soll falls er nicht die erlaubnis hat.


    if(newstate==PLAYER_STATE_DRIVER)
    {
    new newcar = GetPlayerVehicleID(playerid);
    if(GetPVarInt(playerid,"Erlaubnis")!=1) // Hier deine Abfrage rein ob der Spieler die Erlaubnis hat, falls nicht kommt die Message: "Du hast nicht die Erlaubnis das Fahrzeug zu fahren"
    {
    for(new i=0; i<sizeof(Fahrschulcar); i++)
    {
    if(newcar == Fahrschulcar[i])
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,ORANGE,"Du hast nicht die Erlaubnis das Fahrzeug zu fahren");
    }
    }
    }



    Jetzt brauchst du nur noch den Befehl um die Erlaubnis zu erteilen das er mit den Fahrzeugen fahren darf:


    // Der Befehl mit dem du ihn die Erlaubnis erteilst.


    ocmd:erlaubnis(playerid, params[])
    {
    new str[128],str2[128];
    if(sscanf(params,"u",erlaubnisid,0xFFFA00FF,"Verwendung: /erlaubnis [Name/ID] ");
    {
    format(str,sizeof(str),"Du hast die Fahr erlaubnis an %s erteilt",SpielerName(erlaubnisid));
    SendClientMessage(playerid,0xFFFA00FF,str);
    format(str,sizeof(str),"Fahrlehrer %s hat die die Fahr erlaubnis erteilt",SpielerName(playerid));
    SendClientMessage(playerid,0xFFFA00FF,str2);
    SetPVarInt(erlaubnisid,"Erlaubnis",1);
    }
    return 1;
    }

  • Ja, ich habe 3 Autos kann ich das irgendwie alles auf 1machen das ich den Code nur einmal schreiben muss?

    Wie meinst du das ?


    etwa so ?


    Fahrschulcar[0] = CreateVehicle(...
    Fahrschulcar[0] = CreateVehicle(...
    Fahrschulcar[0] = CreateVehicle(...
    Fahrschulcar[0] = CreateVehicle(...


    usw..?


    Wenn Ja, nein das funktioniert nicht.

  • Wie mache ich das mit den Checkpoints, das verstehe ich überhaupt garnicht.

    Ach das ist sehr simple, nur ist meine Methode glaub ich etwas Resourcen fressend aber falls jemand eine besser hat kann er diese ja Posten:




    Also als aller erstes machst du ganz oben ein:



    new Fahrschul[MAX_PLAYERS];




    Dann gehst du zu deinem Befehl, und machst dort folgendes rein:


    SetPlayerCheckpoint(playerid, X,Y,Z,Größe) // Cordinaten deines 1CPs
    Fahrschul[playerid] = 1;






    Dann gehste unter OnPlayerEnterCheckpoint:

    if(Muell[playerid] == 1)
    {
    // Deine Funktion
    Fahrschul[playerid] = 2; // Hier springt er zum 2ten
    }
    if(Muell[playerid] == 2)
    {
    // Deine Funktion
    Fahrschul[playerid] = 3; // Hier springt er zum 3ten usw..
    }

    Grüße


  • Ja, ich habe 3 Autos kann ich das irgendwie alles auf 1machen das ich den Code nur einmal schreiben muss?


    Wenn Ja, nein das funktioniert nicht.


    Doch. Am Beispiel meines vorherigen Codes:


    new Fahrschulauto[3];


    Fahrschulauto[0] = CreateVehicle...
    Fahrschulauto[1] = CreateVehicle...
    Fahrschulauto[2] = CreateVehicle...


    for(new i=0; i<sizeof(Fahrschulauto); i++)
    {
    if(GetPlayerVehicleID(playerid) == Fahrschulauto[i])
    {
    //Fahrschule startet.
    //...
    return 1;
    }
    }
    return SendClientMessage(playerid, ROT, "ERROR: Du musst im Fahrschulauto sein.");

  • Ja genau so meinte ich das ja :D

  • for(new i=0; i<sizeof(Fahrschulauto); i++)
    {
    if(GetPlayerVehicleID(playerid) == Fahrschulauto[i])
    {
    //Fahrschule startet.
    //...
    return 1;
    }
    }
    return SendClientMessage(playerid, ROT, "ERROR: Du musst im Fahrschulauto sein.");


    Das kommt doch in den Befehl rein oder

  • ocmd:fstarten(playerid, params[])
    {
    for(new i=0; i<sizeof(Fahrschulauto); i++)
    {
    if(GetPlayerVehicleID(playerid) == Fahrschulauto[i])
    {
    SCM(playerid,Orange,"Deine Fahrstunde hat begonnen. Fahre nun die Checkpoints ab.");
    SetPlayerCheckpoint(playerid,-71.6771,1363.1648,10.0953,3.0);
    return 1;
    }
    }
    return SendClientMessage(playerid, Rot, "Du musst im Fahrschulauto sein.");
    }


    So, ich habe das gemacht. Und wie mache ich nun den 2 Checkpoint und der 1 verschwindet?

  • Ganz oben
    new FS[MAX_PLAYERS] = 0;
    ocmd:fstarten(playerid, params[])
    {
    for(new i=0; i<sizeof(Fahrschulauto); i++)
    {
    if(GetPlayerVehicleID(playerid) == Fahrschulauto[i])
    {
    SCM(playerid,Orange,"Deine Fahrstunde hat begonnen. Fahre nun die Checkpoints ab.");
    SetPlayerCheckpoint(playerid,-71.6771,1363.1648,10.0953,3.0);
    FS[playerid] = 1;
    return 1;
    }
    }
    return SendClientMessage(playerid, Rot, "Du musst im Fahrschulauto sein.");
    }
    unter OnPlayerEnterCheckpoint


    DeleteCheckpoint(playerid);
    if(FS[playerid] == 1)
    {
    SetPlayerCheckpoint(playerid,x,y,z);//DEINE KOORDINATEN EINTRAGEN
    FS[playerid] = 2;
    }


    So weiter machen halt :D
    Bei Fragen einfach Fragen :D