Checkpoints liste

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
  • Sers.
    Sitze grad an meinem fahrschul system.
    Möchte machen, das der fahrer die checkpoints abfahren muss.
    Hier mal coordinaten von den checkpoints:
    [pwn1790.7855,-2168.8872,13.0875
    1796.2412,-2168.8850,13.3828,276
    1963.9427,-2053.8076,13.4550
    1824.7738,-1830.5153,13.4141
    1404.1343,-1869.7872,13.3828
    1280.9387,-1799.3966,13.3849[/pwn]


    Wie mache ich, das er alle nacheinander abfahren muss?


    kann ich einfach immer unternanden SetPlayerCheckpoint(playerid,X,Y,Z); machen?

  • Dazu würde ich zuerst ein enum erstellen:

    enum Checkpoint{
    Float:X,
    Float:Y,
    Float:Z,
    Float:R // Radius
    }


    Dann musst du die Koordinaten in ein Array speichern:

    new CPInfo[][Checkpoint] {
    {X,Y,Z,R},
    ...
    };
    new CheckpointCount[MAX_PLAYERS]; // Speichert lediglich die Checkpointnummer jedes Spielers


    Nun gehst du zu deiner Funktion und kannst den ersten Checkpoint anzeigen lassen:

    ocmd:checkpoint(playerid,params)
    {
    CheckpointCount[playerid]=1;
    SetPlayerCheckpoint(playerid,CPInfo[0][X],CPInfo[0][Y],CPInfo[0][Z],CPInfo[0][R]);
    ...
    }


    Nun gehst du zu der Funktion OnPlayerEnterCheckpoint und prüfst ob er in deinem Checkpoint ist:

    public OnPlayerEnterCheckpoint(playerid)
    {
    if(CheckpointCount[playerid]!=0)
    {
    DisablePlayerCheckpoint(playerid);
    CheckpointCount[playerid]++;
    SetPlayerCheckpoint(playerid,CPInfo[CheckpointCount][X],CPInfo[CheckpointCount][Y],CPInfo[CheckpointCount][Z],CPInfo[CheckpointCount][R]);
    }
    }


    Ich hoffe ich konnte dir helfen, falls nicht kannst du dich gerne bei mir melden :D


    /Edit: Die [pwn] anzeige hat wieder gespackt -.-

  • Warum dazu erst ein umständliches enum erstellen?


    luca hast bestimmt eine Funktion im Script, die sekündlich ausgeführt
    wird und genau dort wäre es effektiv, einfach die sechs Positionen
    abzufragen und den Spieler weiterzuleiten.


    Ich würde es nicht so einfach wie möglich halten.


    Mit der Funktion IsPlayerInRangeOfPoint() ist die zu lösen.

  • Weil das unmengen an Ressourcen frisst und man es für mehrere Zwecke verwenden kann.
    Man kann einfach weitere Arrays anlegen und wieder die Koordinaten einfügen.


    Außerdem: Wie willst du Abfragen ob der Checkpoint genau dort ist wo der User sich befindet?