Hilfe mit Random MIssions

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 Community,
    habe da ein paar Fragen und Probleme mit meinem Script. Ich habe angefangen ein Pilotenscript zu schreiben(es zu versuchen). Es wird selber gemappte Airports beinhalten. Nun habe ich sofort am Anfang ein Problem. Ich habe noch nicht viel geschrieben, hab bisher einfach ein Enum und einem Command. Das Command soll einen zufälligen Checkpoint aus einer Liste nehmen und setzten. Aber mein Problem der Checkpoint erscheint zwar auf der Minimap aber ich kann ihn nicht sehen.
    Hier der Code:
    #define FILTERSCRIPT
    #include <a_samp>
    #include <streamer>
    #include <zcmd>
    #define Checkpoints




    CMD:work(playerid,params[])
    {
    new CP = random(sizeof(Checkpoints));
    SetPlayerCheckpoint(playerid,Checkpoints[CP][x],Checkpoints[CP][y],Checkpoints[CP][z],Checkpoints[CP][size]);




    return 1;
    }














    enum Check
    {
    Float:x,
    Float:y,
    Float:z,
    size
    }


    new Checkpoints[2][Check] = {
    {1576.9788,1391.3984,10.8483, 10.0},
    {-1364.0537,-215.1572,14.1484, 10.0}


    };


    Errors gibt es beim complien keine.
    Ich hätte da noch ein paar fragen. Wie mache ich es, dass wenn ich /work eingebe der erste Checkpoint nicht zufällig ist, sondern der nähste Airport ist. Und da nicht alle selber gemappten Airports gleich groß sind, kann dort nicht jedes Flugzeug landen. Wie kann ich z.B angeben dass z.B eine Andromada zu groß ist für Las Venturas Airport ist also das System keinen Flug dahin "generiert".
    Dass es z.B irgendwie so im Code aussieht :
    {Dodo kompatiebel:
    Las Venturas Airport
    }
    {Hydra kompatiebel:
    San Fierro Airport
    }
    Natürlich kann man das so nicht in den Code schreiben, aber ich glaube man weiß was ich mein. Hilfe wäre sehr nett :)

  • (Antwort auf Anfrage per PN)


    Zwecks den Checkpoints:
    Diese fallen bei maps innerhalb der Karte auf die Meeresoberfläche runter. Wenn du das umgehen willst, dann setze deine Maps außerhalb von der Karte hin (so ab ±3500), dann werden sie angezeigt. Das gilt auch für Racecheckpoints.


    Zwecks nächstem Flughafen:
    Distanz zwischen zwei Punkten berechnen: http://wiki.sa-mp.com/wiki/GetPlayerDistanceFromPoint
    Durch die Flughäfen loopen und die kleinste Flughafen ID nehmen.


    Zwecks der Kompatibilität:
    Am besten du machst einen Array für jedes Flugzeug: FlugzeugName[MAX_FLUGHÄFEN];
    Und dann sagst du 1 = erlaubt, und 0 = nicht erlaubt, also: FlugzeugName[5] = 1; <= für Flughafen ID 5 wäre dieses Flugzeug kompatibel.
    Dann einfach abfragen, ob 1 oder 0, und dann anzeigen oder nicht.
    Den Code musst du aber selber machen, bei Problemen kannst du ja fragen, aber es sollten eigentlich keine Probleme auftauchen, das ist relativ simpel.

  • Erstmal vielen Dank für deine Antwort ! Nur mein Problem ist ich kann die Checkpoints auch auf nicht selbst gemappten Objekten nicht sehen also auf der original Map. Und auch so hänge ich irgentwie fest. Ich hab zwar kapiert wie du es meinst, nur habe ich bei der Umsetzung große Probleme. Es wäre nett wenn du ein Beispiel machst mit der Kompatibilitätsabfrage.
    #define FILTERSCRIPT
    #include <a_samp>
    #include <streamer>
    #include <zcmd>
    #define Checkpoints
    Dodo[MAX_FLUGHÄFEN]
    Shamal[MAX_FLUGHÄFEN]
    Nevada[MAX_FLUGHÄFEN]
    Dodo[0]=1;



    CMD:work(playerid,params[])
    {
    GetPlayerDistanceFromPoint(playerid, x, y, z),
    new CP = random(sizeof(Checkpoints));
    SetPlayerCheckpoint(playerid,Checkpoints[CP][x],Checkpoints[CP][y],Checkpoints[CP][z],Checkpoints[CP][size]);




    return 1;
    }














    enum Check
    {
    Float:x,
    Float:y,
    Float:z,
    size
    }
    //Die Flughäfen
    new Checkpoints[2][Check] = {
    0={1576.9788,1391.3984,10.8483, 10.0},
    1={-1364.0537,-215.1572,14.1484, 10.0}


    };
    Bei GetPlayerDistanceFromPoint habe ich X,Y,Z als Platzhalter eingesetzt weil ich nicht weiß ob ich die Zeile für jeden Airport kopieren muss und immer wieder die Koordinaten einsetzen. Und wie sage ich dem Script jetzt dass er den nähsten Flughafen nimmt ? BIn leider noch ein Anfänger in Sachen Pawn. *edit* Am liebsten wäre mir wenn man es irgentwie scripten kann, dass ich Airports ganz simpel adden kann. Und dass ich nicht zu jedem Flugzeug schreib welcher Flughafen kompatibel ist, sondern dass ich zu jedem Flughafen die Fahrzeug Id's die kompatibel ist dazu schreiben kann.

    4 Mal editiert, zuletzt von Oskaar1994 ()

  • Hab mir mal 15 Minuten Zeit genommen:
    #include <a_samp>


    #define MAX_FLUGHAEFEN 2
    new Dodo[MAX_FLUGHAEFEN];
    new Shamal[MAX_FLUGHAEFEN];
    new Nevada[MAX_FLUGHAEFEN];


    enum Check
    {
    Float:x,
    Float:y,
    Float:z,
    Float:size
    };
    //Die Flughäfen
    new Float:Checkpoints[2][Check] = {
    {1576.9788,1391.3984,10.8483, 10.0},
    {-1364.0537,-215.1572,14.1484, 10.0}
    };


    public OnFilterScriptInit()
    {
    Dodo[0]=1;
    Dodo[1]=0;
    Shamal[0] = 0;
    Shamal[1] = 1;
    Nevada[0] = 1;
    Nevada[1] = 1;
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/work", true))
    {
    new Float:d = 2000000000.0, id = -1;
    for(new i=0; i<MAX_FLUGHAEFEN; i++)
    {
    new Float:tmp = GetPlayerDistanceFromPoint(playerid, Checkpoints[i][x],Checkpoints[i][y],Checkpoints[i][z]);
    if(tmp < d) d = tmp, id = i;
    }
    if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flughafen gefunden.");
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,Checkpoints[id][x],Checkpoints[id][y],Checkpoints[id][z],Checkpoints[id][size]);
    new str[144];
    format(str, sizeof(str), "Info: Flughafen %d wird angezeigt. Erlaubte Flugzeuge:", id);
    SendClientMessage(playerid, 0x00FFFFFF, str);
    if(Dodo[id] == 1) format(str, sizeof(str), "Dodo", str);
    if(Shamal[id] == 1) format(str, sizeof(str), "%s, Shamal", str);
    if(Nevada[id] == 1) format(str, sizeof(str), "%s, Nevada", str);
    return SendClientMessage(playerid, 0x00FFFFFF, str);
    }
    return 0;
    }


    Falls was am Code unklar ist, frag einfach, ansonsten hoffe ich mal, dass du das verstehst, ist ja nicht so schwer.
    Wenn was nicht tut, erklär bitte was nicht funktioniert.

  • Fettes Danke ! Werd es gleich mal ausprobieren :)
    *edit*
    Wollte grade noch ein Onplayerentercheckpoint hinzufügen, dass wenn man in den ersten Checpoint fährt ein zweiter zufällig aus der LIste genommen wird nur Pawno zeigt einen Error. Und mit welcher Funktion mach ich es,dass automatisch ein kompatibeler Flughafen als Start bzw. Ziel ausgewählt wird ? Ich will auch noch hinzufügen,dass du ein Zufallsgehalt und einen Score weiß eigentlich auch wie das geht nur ich will halt, dass man es erst beim zweiten Checkpoint erhält nicht schon beim ersten.
    #include <a_samp>


    #define MAX_FLUGHAEFEN 2
    new Dodo[MAX_FLUGHAEFEN];
    new Shamal[MAX_FLUGHAEFEN];
    new Nevada[MAX_FLUGHAEFEN];


    enum Check
    {
    Float:x,
    Float:y,
    Float:z,
    Float:size
    };
    //Die Flughäfen
    new Float:Checkpoints[2][Check] = {
    {1576.9788,1391.3984,10.8483, 10.0},
    {-1364.0537,-215.1572,14.1484, 10.0}
    };


    public OnFilterScriptInit()
    {
    Dodo[0]=1;
    Dodo[1]=0;
    Shamal[0] = 0;
    Shamal[1] = 1;
    Nevada[0] = 1;
    Nevada[1] = 1;
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/work", true))
    {
    new Float:d = 2000000000.0, id = -1;
    for(new i=0; i<MAX_FLUGHAEFEN; i++)
    {
    new Float:tmp = GetPlayerDistanceFromPoint(playerid, Checkpoints[i][x],Checkpoints[i][y],Checkpoints[i][z]);
    if(tmp < d) d = tmp, id = i;
    }
    if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flughafen gefunden.");
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,Checkpoints[id][x],Checkpoints[id][y],Checkpoints[id][z],Checkpoints[id][size]);
    new str[144];
    format(str, sizeof(str), "Info: Flughafen %d wird angezeigt. Erlaubte Flugzeuge:", id);
    SendClientMessage(playerid, 0x00FFFFFF, str);
    if(Dodo[id] == 1) format(str, sizeof(str), "Dodo", str);
    if(Shamal[id] == 1) format(str, sizeof(str), "%s, Shamal", str);
    if(Nevada[id] == 1) format(str, sizeof(str), "%s, Nevada", str);
    return SendClientMessage(playerid, 0x00FFFFFF, str);
    }
    return 0;
    }



    public OnPlayerEnterCheckpoint(playerid)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,Checkpoints[id][x],Checkpoints[id][y],Checkpoints[id][z],Checkpoints[id][size]);

    return 1;
    }

    2 Mal editiert, zuletzt von Oskaar1994 ()

  • Dieser Teil berechnet den nächsten Flughafen:
    new Float:d = 2000000000.0, id = -1;
    for(new i=0; i<MAX_FLUGHAEFEN; i++)
    {
    new Float:tmp = GetPlayerDistanceFromPoint(playerid, Checkpoints[i][x],Checkpoints[i][y],Checkpoints[i][z]);
    if(tmp < d) d = tmp, id = i;
    }
    if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flughafen gefunden.");


    Aber Achtung: Wenn du an dem Flughafen-CP dir den nächsten zeigen lässt, ist das logischerweise der selbe Flughafen.
    Willst du es so machen, dass dann der nächste Flughafen, der nicht der Flughafen ist auf dem man sich gerade befindet ist?


    Mit dem Geld am 2. CP:
    Spieler-Variable bei /work auf 0 setzen, und nach dem ersten CP auf 1 setzen, Geld nur geben wenn der Wert nicht 0 ist.

  • Oskaar1994:
    #include <a_samp>


    #define MAX_FLUGHAEFEN 2


    #define DODO_ID 593
    #define NEVADA_ID 553
    #define SHAMAL_ID 519


    new Dodo[MAX_FLUGHAEFEN];
    new Shamal[MAX_FLUGHAEFEN];
    new Nevada[MAX_FLUGHAEFEN];


    new Flughafen[MAX_PLAYERS];
    new FlughafenNr[MAX_PLAYERS];


    enum Check
    {
    Float:x,
    Float:y,
    Float:z,
    Float:size
    };
    //Die Flughäfen
    new Float:Checkpoints[2][Check] = {
    {1576.9788,1391.3984,10.8483, 10.0},
    {-1364.0537,-215.1572,14.1484, 10.0}
    };


    public OnFilterScriptInit()
    {
    Dodo[0]=1;
    Dodo[1]=0;
    Shamal[0] = 0;
    Shamal[1] = 1;
    Nevada[0] = 1;
    Nevada[1] = 1;
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/work", true))
    {
    new vehid = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vehid) != DODO_ID && GetVehicleModel(vehid) != NEVADA_ID && GetVehicleModel(vehid) != SHAMAL_ID) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flugzeug.");
    new id = GetNearestAirport(playerid);
    if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flughafen gefunden.");
    Flughafen[playerid] = id;
    FlughafenNr[playerid] = 0;
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,Checkpoints[id][x],Checkpoints[id][y],Checkpoints[id][z],Checkpoints[id][size]);
    new str[144];
    format(str, sizeof(str), "Info: Flughafen %d wird angezeigt. Erlaubte Flugzeuge:", id);
    SendClientMessage(playerid, 0x00FFFFFF, str);
    if(Dodo[id] == 1) format(str, sizeof(str), "Dodo", str);
    if(Shamal[id] == 1) format(str, sizeof(str), "%s, Shamal", str);
    if(Nevada[id] == 1) format(str, sizeof(str), "%s, Nevada", str);
    return SendClientMessage(playerid, 0x00FFFFFF, str);
    }
    return 0;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    FlughafenNr[playerid]++;
    if(FlughafenNr[playerid] == 1)
    {
    //kein Geld
    }
    else
    {
    //Geld...
    }
    //Neuer Flughafen ...
    new vehid = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vehid) != DODO_ID && GetVehicleModel(vehid) != NEVADA_ID && GetVehicleModel(vehid) != SHAMAL_ID) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flugzeug.");
    new id = GetNearestAirport(playerid);
    if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flughafen gefunden.");
    Flughafen[playerid] = id;
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,Checkpoints[id][x],Checkpoints[id][y],Checkpoints[id][z],Checkpoints[id][size]);
    new str[144];
    format(str, sizeof(str), "Info: Flughafen %d wird angezeigt. Erlaubte Flugzeuge:", id);
    SendClientMessage(playerid, 0x00FFFFFF, str);
    if(Dodo[id] == 1) format(str, sizeof(str), "Dodo", str);
    if(Shamal[id] == 1) format(str, sizeof(str), "%s, Shamal", str);
    if(Nevada[id] == 1) format(str, sizeof(str), "%s, Nevada", str);
    return SendClientMessage(playerid, 0x00FFFFFF, str);
    }


    stock GetNearestAirport(playerid)
    {
    new Float:d = 2000000000.0, id = -1, veh = GetVehicleModel(GetPlayerVehicleID(playerid));
    for(new i=0; i<MAX_FLUGHAEFEN; i++)
    {
    if(i == Flughafen[playerid]) continue;
    new Float:tmp = GetPlayerDistanceFromPoint(playerid, Checkpoints[i][x],Checkpoints[i][y],Checkpoints[i][z]);
    if(tmp < d)
    {
    if(veh == DODO_ID && Dodo[i] == 1 ||
    veh == SHAMAL_ID && Shamal[i] == 1 ||
    veh == NEVADA_ID && Nevada[i] == 1) d = tmp, id = i;
    }
    }
    return id;
    }


    Jetzt hab ich dir den halben Server gemacht...anhand dessen solltest du doch nun auch selbst weiter kommen, nicht?
    Ich hoffe es tut soweit.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • #include <a_samp>
    #include <zcmd>


    #define MAX_FLUGHAEFEN 5


    #define DODO_ID 593
    #define NEVADA_ID 553
    #define SHAMAL_ID 519
    #define BEAGLE_ID 511


    new Dodo[MAX_FLUGHAEFEN];
    new Shamal[MAX_FLUGHAEFEN];
    new Nevada[MAX_FLUGHAEFEN];
    new Beagle[MAX_FLUGHAEFEN];


    new Flughafen[MAX_PLAYERS];
    new FlughafenNr[MAX_PLAYERS];


    enum Check
    {
    Float:x,
    Float:y,
    Float:z,
    Float:size
    };
    //Die Flughäfen
    new Float:Checkpoints[5][Check] = {
    {1576.9788,1391.3984,10.8483, 10.0},//lva,0
    {-1364.0537,-215.1572,14.1484, 10.0},//sfa,1
    {-760.1149,1994.4023,5.4734,10.0},//sherman,2
    {1726.6909,-2407.4905,13.5547,10.0},//ls,3
    {2866.5273,1870.2122,14.1785,10.0}//rockshore,4


    };


    public OnFilterScriptInit()
    {
    Dodo[0]=1;
    Dodo[1]=1;
    Dodo[2]=1;
    Dodo[3]=1;
    Dodo[4]=1;
    Shamal[0] = 1;
    Shamal[1] = 1;
    Shamal[2] = 1;
    Shamal[3] = 1;
    Shamal[4] = 1;
    Nevada[0] = 1;
    Nevada[1] = 1;
    Nevada[2] = 1;
    Nevada[3] = 1;
    Beagle[0]=1;
    Beagle[1]=1;
    Beagle[2]=1;
    Beagle[3]=1;
    Beagle[4]=1;

    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/work", true))
    {
    new vehid = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vehid) != DODO_ID && GetVehicleModel(vehid) != NEVADA_ID && GetVehicleModel(vehid) != SHAMAL_ID && GetVehicleModel(vehid) != BEAGLE_ID) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flugzeug.");
    new id = GetNearestAirport(playerid);
    if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: No Airports found (If you get this error use /admin to report this bug to an admin!).");
    Flughafen[playerid] = id;
    FlughafenNr[playerid] = 0;
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,Checkpoints[id][x],Checkpoints[id][y],Checkpoints[id][z],Checkpoints[id][size]);
    new str[144];
    format(str, sizeof(str), "Info: Flughafen %d wird angezeigt. Erlaubte Flugzeuge:", id);
    SendClientMessage(playerid, 0x00FFFFFF, str);
    if(Dodo[id] == 1) format(str, sizeof(str), "Dodo", str);
    if(Shamal[id] == 1) format(str, sizeof(str), "%s, Shamal", str);
    if(Nevada[id] == 1) format(str, sizeof(str), "%s, Nevada", str);
    if(Beagle[id] == 1) format(str, sizeof(str), "%s, Beagle", str);
    return SendClientMessage(playerid, 0x00FFFFFF, str);
    }



    return 0;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    FlughafenNr[playerid]++;
    if(FlughafenNr[playerid] == 1)
    {
    //kein Geld
    }
    else
    {
    //Geld...
    GivePlayerMoney(playerid,random(11000-25000)+25000);
    }
    //Neuer Flughafen ...
    new vehid = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vehid) != DODO_ID && GetVehicleModel(vehid) != NEVADA_ID && GetVehicleModel(vehid) != SHAMAL_ID && GetVehicleModel(vehid) != BEAGLE_ID) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flugzeug.");
    new id = GetNearestAirport(playerid);
    if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flughafen gefunden.");
    Flughafen[playerid] = id;
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,Checkpoints[id][x],Checkpoints[id][y],Checkpoints[id][z],Checkpoints[id][size]);
    new str[144];
    format(str, sizeof(str), "Info: Flughafen %d wird angezeigt. Erlaubte Flugzeuge:", id);
    SendClientMessage(playerid, 0x00FFFFFF, str);
    if(Dodo[id] == 1) format(str, sizeof(str), "Dodo", str);
    if(Shamal[id] == 1) format(str, sizeof(str), "%s, Shamal", str);
    if(Nevada[id] == 1) format(str, sizeof(str), "%s, Nevada", str);
    if(Beagle[id] == 1) format(str, sizeof(str), "%s, Beagle", str);
    return SendClientMessage(playerid, 0x00FFFFFF, str);
    }


    stock GetNearestAirport(playerid)
    {
    new Float:d = 2000000000.0, id = -1, veh = GetVehicleModel(GetPlayerVehicleID(playerid));
    for(new i=0; i<MAX_FLUGHAEFEN; i++)
    {
    if(i == Flughafen[playerid]) continue;
    new Float:tmp = GetPlayerDistanceFromPoint(playerid, Checkpoints[i][x],Checkpoints[i][y],Checkpoints[i][z]);
    if(tmp < d)
    {
    if(veh == DODO_ID && Dodo[i] == 1 ||
    veh == SHAMAL_ID && Shamal[i] == 1 ||
    veh == BEAGLE_ID && Beagle[i] == 1 ||
    veh == NEVADA_ID && Nevada[i] == 1) d = tmp, id = i;
    }
    }
    return id;
    }
    Frage hab ich dir als PN geschickt ;)
    *edit* Problem mit dem Flugahfen adden hat sich erledigt hatte vergessen Server neu zu starten :D

    Einmal editiert, zuletzt von Oskaar1994 ()

  • #include <a_samp>


    #define MAX_FLUGHAEFEN 5


    #define DODO_ID 593
    #define NEVADA_ID 553
    #define SHAMAL_ID 519
    #define BEAGLE_ID 511


    new Dodo[MAX_FLUGHAEFEN];
    new Shamal[MAX_FLUGHAEFEN];
    new Nevada[MAX_FLUGHAEFEN];
    new Beagle[MAX_FLUGHAEFEN];


    new Flughafen[MAX_PLAYERS] = {-1,...};
    new FlughafenNr[MAX_PLAYERS];


    enum Check
    {
    Float:x,
    Float:y,
    Float:z,
    Float:size
    };
    //Die Flughäfen
    new Float:Checkpoints[5][Check] = {
    {1576.9788,1391.3984,10.8483, 10.0},//lva,0
    {-1364.0537,-215.1572,14.1484, 10.0},//sfa,1
    {-760.1149,1994.4023,5.4734,10.0},//sherman,2
    {1726.6909,-2407.4905,13.5547,10.0},//ls,3
    {2866.5273,1870.2122,14.1785,10.0}//rockshore,4


    };


    public OnFilterScriptInit()
    {
    Dodo[0]=1;
    Dodo[1]=1;
    Dodo[2]=1;
    Dodo[3]=1;
    Dodo[4]=1;
    Shamal[0] = 1;
    Shamal[1] = 1;
    Shamal[2] = 1;
    Shamal[3] = 1;
    Shamal[4] = 1;
    Nevada[0] = 1;
    Nevada[1] = 1;
    Nevada[2] = 1;
    Nevada[3] = 1;
    Beagle[0]=1;
    Beagle[1]=1;
    Beagle[2]=1;
    Beagle[3]=1;
    Beagle[4]=1;


    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/work", true))
    {
    new vehid = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vehid) != DODO_ID && GetVehicleModel(vehid) != NEVADA_ID && GetVehicleModel(vehid) != SHAMAL_ID && GetVehicleModel(vehid) != BEAGLE_ID) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flugzeug.");
    new id = GetNearestAirport(playerid);
    if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: No Airports found (If you get this error use /admin to report this bug to an admin!).");
    Flughafen[playerid] = id;
    FlughafenNr[playerid] = 0;
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,Checkpoints[id][x],Checkpoints[id][y],Checkpoints[id][z],Checkpoints[id][size]);
    new str[144];
    format(str, sizeof(str), "Info: Flughafen %d wird angezeigt. Erlaubte Flugzeuge:", id);
    SendClientMessage(playerid, 0x00FFFFFF, str);
    if(Dodo[id] == 1) format(str, sizeof(str), "Dodo", str);
    if(Shamal[id] == 1) format(str, sizeof(str), "%s, Shamal", str);
    if(Nevada[id] == 1) format(str, sizeof(str), "%s, Nevada", str);
    if(Beagle[id] == 1) format(str, sizeof(str), "%s, Beagle", str);
    return SendClientMessage(playerid, 0x00FFFFFF, str);
    }
    return 0;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    FlughafenNr[playerid]++;
    if(FlughafenNr[playerid] == 1)
    {
    //kein Geld, dafür:
    //Neuer Flughafen ...
    new vehid = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vehid) != DODO_ID && GetVehicleModel(vehid) != NEVADA_ID && GetVehicleModel(vehid) != SHAMAL_ID && GetVehicleModel(vehid) != BEAGLE_ID) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flugzeug.");
    new id = GetNearestAirport(playerid);
    if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flughafen gefunden.");
    Flughafen[playerid] = id;
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,Checkpoints[id][x],Checkpoints[id][y],Checkpoints[id][z],Checkpoints[id][size]);
    new str[144];
    format(str, sizeof(str), "Info: Flughafen %d wird angezeigt. Erlaubte Flugzeuge:", id);
    SendClientMessage(playerid, 0x00FFFFFF, str);
    if(Dodo[id] == 1) format(str, sizeof(str), "Dodo", str);
    if(Shamal[id] == 1) format(str, sizeof(str), "%s, Shamal", str);
    if(Nevada[id] == 1) format(str, sizeof(str), "%s, Nevada", str);
    if(Beagle[id] == 1) format(str, sizeof(str), "%s, Beagle", str);
    return SendClientMessage(playerid, 0x00FFFFFF, str);
    }
    else
    {
    //Geld...und kein neuer Flughafen mehr:
    FlughafenNr[playerid]=0;
    Flughafen[playerid]=-1;


    GivePlayerMoney(playerid,random(11000-25000)+25000);
    }
    return 1;
    }


    stock GetNearestAirport(playerid)
    {
    new Float:d = 2000000000.0, id = -1, veh = GetVehicleModel(GetPlayerVehicleID(playerid));
    for(new i=0; i<MAX_FLUGHAEFEN; i++)
    {
    if(i == Flughafen[playerid]) continue;
    new Float:tmp = GetPlayerDistanceFromPoint(playerid, Checkpoints[i][x],Checkpoints[i][y],Checkpoints[i][z]);
    if(tmp < d)
    {
    if(veh == DODO_ID && Dodo[i] == 1 ||
    veh == SHAMAL_ID && Shamal[i] == 1 ||
    veh == BEAGLE_ID && Beagle[i] == 1 ||
    veh == NEVADA_ID && Nevada[i] == 1) d = tmp, id = i;
    }
    }
    return id;
    }


    Oskaar1994:
    Es wird jetzt nach dem 2. Checkpoint beendet.
    Kleiner Fehler repariert.


    Jetzt sollte alles so sein wie du es willst.


    ==> Das das so war, dass er immer zwischen zweien gewechselt hat ist ja logisch. Wenn F1 zu F2 am nächsten ist, dann ist F2 auch zu F1 am nächsten, ist eben so. Das Problem hast du ja aber jetzt nicht mehr, da es nur 2 Flughäfen zum anfliegen gibt, danach ist /work vorbei.

  • Hab jetzt lange herum probiert um es zu ändern, aber habe es leider nicht geschafft. Ich habe mich wahrscheinlich nicht verständlich genug ausgedrückt. Der 2te Checkpoint(airport) soll ein zufällig kompatibler sein also nicht der nähste zu Flughafen 1. Wäre ja langweilig immer zwischen 2 Airports zu wechseln aber wie gesagt der 1.te Checkpoint soll schon am nähsten ein. Ich wollte auch ein streckenabhängiges Gehalt machen wusste nur nicht genau wie. Hatte mir überlegt es vll mit GetPlayerDistanceFromPoint zu machen also z.B 1000m = 1500 $ oder so ähnlich. Und geht es auch den Airports so zusagen Namen zu geben, dass z.B : Flight from Las Venturas Airport to Los Santos Airport, angezeigt wird, müsste doch irgendwie mit Strings gehen oder verwechsele ich hier etwas ?

  • #include <a_samp>


    #define MAX_FLUGHAEFEN 5


    #define DODO_ID 593
    #define NEVADA_ID 553
    #define SHAMAL_ID 519
    #define BEAGLE_ID 511


    new Dodo[MAX_FLUGHAEFEN];
    new Shamal[MAX_FLUGHAEFEN];
    new Nevada[MAX_FLUGHAEFEN];
    new Beagle[MAX_FLUGHAEFEN];


    new Flughafen[MAX_PLAYERS] = {-1,...};
    new FlughafenNr[MAX_PLAYERS];
    new FlughafenName[MAX_FLUGHAEFEN][25];
    new Strecke[MAX_PLAYERS];


    enum Check
    {
    Float:x,
    Float:y,
    Float:z,
    Float:size
    };
    //Die Flughäfen
    new Float:Checkpoints[5][Check] = {
    {1576.9788,1391.3984,10.8483, 10.0},//lva,0
    {-1364.0537,-215.1572,14.1484, 10.0},//sfa,1
    {-760.1149,1994.4023,5.4734,10.0},//sherman,2
    {1726.6909,-2407.4905,13.5547,10.0},//ls,3
    {2866.5273,1870.2122,14.1785,10.0}//rockshore,4


    };


    public OnFilterScriptInit()
    {
    Dodo[0]=1;
    Dodo[1]=1;
    Dodo[2]=1;
    Dodo[3]=1;
    Dodo[4]=1;
    Shamal[0] = 1;
    Shamal[1] = 1;
    Shamal[2] = 1;
    Shamal[3] = 1;
    Shamal[4] = 1;
    Nevada[0] = 1;
    Nevada[1] = 1;
    Nevada[2] = 1;
    Nevada[3] = 1;
    Beagle[0]=1;
    Beagle[1]=1;
    Beagle[2]=1;
    Beagle[3]=1;
    Beagle[4]=1;
    FlughafenName[0] = "Name0";
    FlughafenName[1] = "Name1";
    FlughafenName[2] = "Name2";
    FlughafenName[3] = "Name3";
    FlughafenName[4] = "Name4";
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/work", true))
    {
    new vehid = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vehid) != DODO_ID && GetVehicleModel(vehid) != NEVADA_ID && GetVehicleModel(vehid) != SHAMAL_ID && GetVehicleModel(vehid) != BEAGLE_ID) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flugzeug.");
    new id = GetNearestAirport(playerid);
    if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: No Airports found (If you get this error use /admin to report this bug to an admin!).");
    Flughafen[playerid] = id;
    FlughafenNr[playerid] = 0;
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,Checkpoints[id][x],Checkpoints[id][y],Checkpoints[id][z],Checkpoints[id][size]);
    new str[144];
    format(str, sizeof(str), "Info: Flughafen %s (ID: %d) wird angezeigt. Erlaubte Flugzeuge:", FlughafenName[id], id);
    SendClientMessage(playerid, 0x00FFFFFF, str);
    if(Dodo[id] == 1) format(str, sizeof(str), "Dodo", str);
    if(Shamal[id] == 1) format(str, sizeof(str), "%s, Shamal", str);
    if(Nevada[id] == 1) format(str, sizeof(str), "%s, Nevada", str);
    if(Beagle[id] == 1) format(str, sizeof(str), "%s, Beagle", str);
    return SendClientMessage(playerid, 0x00FFFFFF, str);
    }
    return 0;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    FlughafenNr[playerid]++;
    if(FlughafenNr[playerid] == 1)
    {
    //kein Geld, dafür:
    //Neuer Flughafen ...
    new vehid = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vehid) != DODO_ID && GetVehicleModel(vehid) != NEVADA_ID && GetVehicleModel(vehid) != SHAMAL_ID && GetVehicleModel(vehid) != BEAGLE_ID) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flugzeug.");
    new id = GetRandomAirport(playerid);
    if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Flughafen gefunden.");
    Flughafen[playerid] = id;
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,Checkpoints[id][x],Checkpoints[id][y],Checkpoints[id][z],Checkpoints[id][size]);
    Strecke[playerid] = floatround(GetPlayerDistanceFromPoint(playerid, Checkpoints[id][x],Checkpoints[id][y],Checkpoints[id][z]));
    new str[144];
    format(str, sizeof(str), "Info: Flughafen %s (ID: %d) wird angezeigt. Erlaubte Flugzeuge:", FlughafenName[id], id);
    SendClientMessage(playerid, 0x00FFFFFF, str);
    if(Dodo[id] == 1) format(str, sizeof(str), "Dodo", str);
    if(Shamal[id] == 1) format(str, sizeof(str), "%s, Shamal", str);
    if(Nevada[id] == 1) format(str, sizeof(str), "%s, Nevada", str);
    if(Beagle[id] == 1) format(str, sizeof(str), "%s, Beagle", str);
    return SendClientMessage(playerid, 0x00FFFFFF, str);
    }
    else
    {
    //Geld...und kein neuer Flughafen mehr:
    FlughafenNr[playerid]=0;
    Flughafen[playerid]=-1;


    GivePlayerMoney(playerid,((Strecke[playerid]/1000)*1500)+25000);
    }
    return 1;
    }


    stock GetNearestAirport(playerid)
    {
    new Float:d = 2000000000.0, id = -1, veh = GetVehicleModel(GetPlayerVehicleID(playerid));
    for(new i=0; i<MAX_FLUGHAEFEN; i++)
    {
    if(i == Flughafen[playerid]) continue;
    new Float:tmp = GetPlayerDistanceFromPoint(playerid, Checkpoints[i][x],Checkpoints[i][y],Checkpoints[i][z]);
    if(tmp < d)
    {
    if(veh == DODO_ID && Dodo[i] == 1 ||
    veh == SHAMAL_ID && Shamal[i] == 1 ||
    veh == BEAGLE_ID && Beagle[i] == 1 ||
    veh == NEVADA_ID && Nevada[i] == 1) d = tmp, id = i;
    }
    }
    return id;
    }


    stock GetRandomAirport(playerid)
    {
    new id = -1, veh = GetVehicleModel(GetPlayerVehicleID(playerid)), count;
    for(new i=0; i<MAX_FLUGHAEFEN; i++)
    {
    if(veh == DODO_ID && Dodo[i] == 1 ||
    veh == SHAMAL_ID && Shamal[i] == 1 ||
    veh == BEAGLE_ID && Beagle[i] == 1 ||
    veh == NEVADA_ID && Nevada[i] == 1) count++;
    }
    count = random(count)+1;
    for(new i=0; i<MAX_FLUGHAEFEN; i++)
    {
    if(veh == DODO_ID && Dodo[i] == 1 ||
    veh == SHAMAL_ID && Shamal[i] == 1 ||
    veh == BEAGLE_ID && Beagle[i] == 1 ||
    veh == NEVADA_ID && Nevada[i] == 1)
    {
    count--;
    if(count == 0) id = i;
    }
    }
    return id;
    }


    Hier bitte. Hat 5 Minuten gedauert das zu ändern.
    Sollte funktionieren.