Checkpoints abfahren

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
  • Beides hat mMn Vor- und Nachteile.
    Was man in Beiden Fällen machen müsste, wäre zusätzlich sich die Routen-ID merken.
    enum e_PlayerMuellInfo {
    bool:pmi_bAktiv, // Könnte man entfernen, wenn pmi_RoutenID = 0 bedeutet Inaktiv und alles 1>= Aktiv
    pmi_Checkpoint,
    pmi_Route //Neu
    }


    Ein extra enum für jede Route ist nicht so klug. Da würde ich eher nur ein extra Wert anlegen um die Route zu speichern.
    Also so:
    //Methode 1)
    enum e_Muell {
    Float:M_fX,
    Float:M_fY,
    Float:M_fZ,
    Float:M_fRad,
    M_iRoute //Neu
    }
    new
    Muellabfuhr_Stationen[][e_Muell] = { ... };
    Dann muss man aber zusätzlich durchzählen, bei welchem Index in der Variable Muellabfuhr_Stationen die Route für den Spieler beginnt und wie viele
    Checkpoints diese hat (zB 12).
    Also zB:

    Zitat

    Route 1 beginnt bei Index 0 und hat 7 Checkpoints (0-6)
    Route 2 beginnt bei Index 7 und hat 12 Checkpoints (7-18)
    etc


    Das könnte man in eine extra Variable auslagern ( zb: Muellabfuhr_Routen mit Routen-ID und Anzahl an CPs ) oder man sammelt die Information jedes mal wenn
    die benötigt werden.


    Eine Andere Möglichkeit wäre, man legt für jede Route eine extra Variable an.
    //Methode 2)
    // Keine Veränderung am enum
    enum e_Muell {
    Float:M_fX,
    Float:M_fY,
    Float:M_fZ,
    Float:M_fRad
    }
    new
    Muellabfuhr_Stationen_Route1[][e_Muell] = { ... },
    Muellabfuhr_Stationen_Route2[][e_Muell] = { ... },
    Muellabfuhr_Stationen_Route3[][e_Muell] = { ... };
    Könnte man auch machen, allerdings müsste man mit jeder neuen Route auch den Code anpassen (Abgesehen von den Daten für die Routen).
    Möglich wäre auch, dass mit der Pointer Include zu machen. Damit
    sollte es sogar einfacher sein,die 2. Methode umzusetzen. Bin mir aber auch nicht ganz sicher, ob das funktioniert (denke aber schon).


    So oder so, in Beiden Fällen müsste man den Code etwas umschreiben. Ich würde aber die 1.Methode nehmen, wenn ich sowas machen müsste.

  • hallo Goldkiller


    habe nun folgendes gemacht


    enum busroutenEnum{ //brInfo
    Float:b_x,
    Float:b_y,
    Float:b_z,
    Float:b_rad,
    win,
    r_id

    }
    enum busstartsenum{ //brInfo

    Float:b_x,
    Float:b_y,
    Float:b_z,
    bool:aktiv,
    Checkpoints



    }


    new brInfo[][busstartsenum] = {
    {2221.6140,1866.6394,10.3858,false,10}
    //{},


    };
    //brInfo[playerid][b_x]
    //brroutes[playerid][b_x]
    new brroutes[][busroutenEnum] = {
    // X Y Z Radius Gewinn,RoutenID


    //RoutenID 0 = LV nach LS
    {2154.9355,1961.0078,10.2405,5.0,250,0},
    {2178.5608,2349.9243,10.2335,5.0,250,0},
    {2119.5234,2061.8625,10.2251,5.0,250,0},
    {2039.7462,1005.9709,10.2359,5.0,250,0},
    {1789.3076,801.3461,10.6779,5.0,250,0},
    {1673.3729,-785.5421,54.4621,5.0,250,0},
    {1186.4357,-934.5354,42.2987,5.0,250,0},
    {958.2468,-1080.1121,24.5061,5.0,250,0},
    {1028.4401,-1331.0526,12.9473,5.0,250,0},
    {1151.0576,-1409.2263,13.0779,5.0,250,0}



    oben das ist der Startpunkt welcher zuerst aufgerufen werden soll, dann halt die mehreren unten


    dann bei OnPlayerEnterCheckpoint


    if(brInfo[playerid][aktiv])
    {
    brInfo[playerid][Checkpoints] ++; // ++ ist das gleiche wie +1
    DisablePlayerCheckpoint(playerid);
    new playercp = brInfo[playerid][Checkpoints];
    if(playercp == sizeof(brroutes))
    {
    brInfo[playerid][aktiv]=false;
    }
    else
    {
    SetPlayerCheckpoint(playerid,brroutes[playerid][b_x],brroutes[playerid][b_y],brroutes[playerid][b_z],brroutes[playerid][b_rad]);
    SCMTOADMIN("TEst neuer Checkpoint");
    }

    }


    und bei der Routenwahl hab ich folgendes gemacht


    if (listitem == 2) //LV TO LS
    {
    brInfo[playerid][aktiv] = true;
    SetPlayerCheckpoint(playerid,brroutes[playerid][b_x],brroutes[playerid][b_y],brroutes[playerid][b_z],brroutes[playerid][b_rad]);
    Busfahrer1[playerid] = -1;
    Busfahrer2[playerid] = -1;
    brInfo[playerid][Checkpoints] = 0;

    return 1;
    }




    ist das so korrekt? so in deiner Vorstellung des umsetzens?


    danke im vorraus


    LG stormi

  • Könnte teilweise richtig sind, Fehler sind aber trotzdem drin.


    if(playercp == sizeof(brroutes))
    Wird nicht klappen, außer es gibt nur 1 Route. Ich hatte im vorherigen Post dazu geschrieben, dass man ebend manuell durchzählen muss wann die Route endet oder wie viele CPs man durchfahren muss bei Route X.


    SetPlayerCheckpoint(playerid,brroutes[playerid][b_x],brroutes[playerid][b_y],brroutes[playerid][b_z],brroutes[playerid][b_rad]);
    playerid als Index schon mal gar nicht. Als Index muss der in CP gewählt werden, der in der Route als nächstes folgt. Im ursprünglichen Tutorial ist das Muellmann[playerid][pmi_Checkpoint] gewesen.


    Sehe außerdem nicht, wo du die aktuelle Route des Spielers in einer Variable speicherst.


    Zitat

    hallo Goldkiller


    Ist deaktiviert, bekomme bewusst keine Benachrichtigung.