Befehl scripten /Checkpoint [Checkpoints] ?

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
  • Wie kann ich ein befehl scripten /Checkpoint [Checkpoints] das in einer ganz bestimmen area so und so viele checkpoints kommen man aber nur einen sieht und wenn er in dem ist der nächste angezeigt wird wie macht man das ? ._.

  • ok new Checkpoinnt so fertig funzt aber net
    //Wäre besser wenn man das mal ein bissen erläutert

  • new Checkpoint[playerid] = 0;


    wenn der spieler nun /Checkpoint eingibt:


    SetPlayerCheckpoint(playerid,X,Y,Z,Größe);
    Checkpoint[playerid] ++;


    Nun unter "OnPlayerEnterCheckpoint"
    if(Checkpoint[playerid] == 1)
    {
    // mach etwas hier
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,X,Y,Z,Größe);
    Checkpoint[playerid] ++;
    return 1;
    }


    und das machst du eben weiter alles unter OnPlayerEnterCheckpoint


    else if(Checkpoint[playerid] == 2)
    {
    // mach etwas hier
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,X,Y,Z,Größe);
    Checkpoint[playerid] ++;
    return 1;
    }


    und zum Schluss setzt du ganz einfach wieder Checkpoint[playerid] auf 0:
    DisablePlayerCheckpoint(playerid);
    Checkpoint[playerid] = 0;

  • /Checkpont [PID] [Wie viele checkponts er ablaufen soll] so ist das gedacht ._.

  • Ganz oben zu "new Checkpoint[playerid] = 0;"
    new CheckpointPointer[playerid] = 0;


    ocmd:checkpoint(playerid,params[])
    {
    new pID,Checkpoints;
    if(sscanf(params, "ui", pID, Checkpoints)) return SendClientMessage(playerid,COLOR,"Benutze: /Checkpoint [ID] [Anzahl der Checkpoints]");


    if(Checkpoints == 0) return SendClientMessage(playerid,COLOR,"Mindestens 1 Checkpoint");
    CheckpointPointer[playerid] = Checkpoints;
    SetPlayerCheckpoint(playerid,X,Y,Z,Größe); // Min. 1 muss er doch wohl abfahren
    Checkpoint[playerid] = 1;
    }


    Nun wird es bisschen komplizierter weil du müsstest einen Maximalen Wert an Checkpoints vordefinieren. Ansonsten kannst du unter OnPlayerEnterCheckpoint folgendes schreiben:
    if(Checkpoint[playerid] == 1)
    {
    // Hier machen was ich unten getan habe.
    if(Checkpoint[playerid] == CheckpointPointer[playerid]) break; // das heißt er bricht hier ab weil es der letzte Checkpoint ist
    }
    else if(Checkpoint[playerid] == 2)
    {
    // Hier machen was ich unten getan habe.
    if(Checkpoint[playerid] == CheckpointPointer[playerid]) break; // hier genauso
    }
    Das ist natürlich nur eine von vielen Möglichkeiten. Aber ich glaube dass ist die einfachste (Sorry, falls ich daneben liege)

  • max soll 100 sein :S soll ich das mit else if(Checkpoint 100 mal copyn ? ._.

  • Es ist ja im Grunde genommen identisch das gleiche, außer die Zahl die erhöht sich immer um 1. Und bei deinem Befehl musst du noch eine Abfrage einfügen:
    ocmd:checkpoint(playerid,params[])
    {
    new pID,Checkpoints;
    if(sscanf(params, "ui", pID, Checkpoints)) return SendClientMessage(playerid,COLOR,"Benutze: /Checkpoint [ID] [Anzahl der Checkpoints]");


    if(Checkpoints == 0) return SendClientMessage(playerid,COLOR,"Mindestens 1 Checkpoint");
    if(Checkpoints > 100) return SendClientMessage(playerid,COLOR,"Es dürfen nicht mehr als 100 Checkpoints erscheinen"); // Diese Zeile hier einfügen
    CheckpointPointer[playerid] = Checkpoints;
    SetPlayerCheckpoint(playerid,X,Y,Z,Größe); // Min. 1 muss er doch wohl abfahren
    Checkpoint[playerid] = 1;
    }