Letzter Checkpoint wird nicht gesetzt

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
  • Guten Abend liebe Brotfischler,


    Eigentlich könnte ich das Teil auch gleich mit dem Vermerk "defekt" in den Showroom stellen aber naja :D. Mein Problem ist das der letzte Checkpoint nicht gesetzt wird und somit die Arbeit nicht beendet werden kann. Habe sogar noch einen command eingebaut um während der Fahrt zu checken ob auch alle checkpoints gezählt werden - werden ordnungsgemäss gezählt (zählt bis 9 ) aber eben der letzte Checkpoint (10) wird nicht gesetzt und somit kann die "Mission " nicht abgeschlossen werden. Wäre sehr dankbar wenn jemand den Fehler finden würde da ich jetzt schon seit 4 Stunden danach suche :(


    #define FARMER_RACE_POINTS 10


    new Float:farmercheckpoints[FARMER_RACE_POINTS][3] =
    {
    {-185.8091,-70.8083,3.1172}, // 1
    {-164.8686,-17.4206,3.1172}, // 2
    {-139.8285,46.8926,3.1172}, // 3
    {-160.3774,55.7224,3.1172}, // 4
    {-184.8810,65.9218,3.1172}, // 5
    {-220.7008,80.8315,3.1172}, // 6
    {-230.4765,58.4977,3.1172}, // 7
    {-245.2507,23.6662,3.1172}, // 8
    {-268.4869,-31.1149,3.1172}, // 9
    {-119.0461,147.0831,3.3763} // 10 letzter Punkt
    };


    enum Info
    {
    farmt,
    gefarmt,
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    if(GetVehicleModel(vehicleid) == 532)
    {
    if(pInfo[playerid][beruf] == JOB_FARMER)
    {
    SendClientMessage(playerid,COLOR_HELLGRUEN, "Fahre nun die Checkpoints ab um Hanf zu ernten");
    pInfo[playerid][farmt] = 1;
    SetPlayerRaceCheckpoint(playerid,0,farmercheckpoints[0][0],farmercheckpoints[0][1],farmercheckpoints[0][2],farmercheckpoints[1][0],farmercheckpoints[1][1],farmercheckpoints[1][2],3.0);
    }
    else
    {
    TogglePlayerControllable(playerid,1);
    SendClientMessage(playerid,COLOR_ROT, "Du bist kein Farmer !");
    }
    return 1;
    }



    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if (IsPlayerInAnyVehicle(playerid))
    {
    if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 532)
    {
    if(pInfo[playerid][farmt] == 1)
    {
    new lastfarmpoint = FARMER_RACE_POINTS;
    pInfo[playerid][gefarmt]++;
    if(pInfo[playerid][gefarmt] < lastfarmpoint)
    {
    DisablePlayerRaceCheckpoint(playerid);
    SetPlayerRaceCheckpoint(playerid,0,farmercheckpoints[pInfo[playerid][gefarmt]][0],farmercheckpoints[pInfo[playerid][gefarmt]][1],farmercheckpoints[pInfo[playerid][gefarmt]][2],farmercheckpoints[pInfo[playerid][gefarmt]+1][0],farmercheckpoints[pInfo[playerid][gefarmt]+1][1],farmercheckpoints[pInfo[playerid][gefarmt]+1][2],3.0);
    }
    if(pInfo[playerid][gefarmt] == lastfarmpoint)
    { //
    pInfo[playerid][farmt] = 0;
    pInfo[playerid][gefarmt] = 0;
    DisablePlayerRaceCheckpoint(playerid);
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,COLOR_HELLGRUEN, "Du hast erstmal genug gefarmt, komme in 30 Minuten wieder.");
    }}}}
    return 1;
    }




    Mit freundlichen Grüßen


    Traxter

    Einmal editiert, zuletzt von Traxter ()

  • An der Stelle hatte ich mit der zeichensetzung auch schon etwas rumprobiert, funktioniert leider auch nicht :(



    Aber was mir aufgefallen ist, man definiert 10 Checkpoints und setzt dann die max checkpoints auf 10. Das Script jedoch fängt nicht mit 1 an zu zählen sondern mit 0 und somit ist der checkpoint 1 nicht nr 1 sondern 0 und checkpoint 10 die 9 - daher es fehlt am ende einer ? Wenn ich aber einen mehr reinsetze gibts einen Fehler da es dann 11 statt der definierten 10 sind. Setze ich max zusätzlich auf 11 wäre 11 der 10te und somit fehlt wieder einer usw.....



    Könnte da das problem liegen ?

    Einmal editiert, zuletzt von Traxter ()

  • sizeof ermittelt die Größe der Array also wäre das die bessere Variante die endgültige Größe zu erfassen ^^


    aso , wenn du die Array auf 10 Maximale Plätze setzt
    sind Slot 0 - 9 gültige Plätze sprich sind es dann trotzdem 10 wenn man es so sieht der letzt Platz enthält den Escape char bzw. den Nullwert \0

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Achso ok, dann kann es daran also schonmal nicht liegen.



    Ich hab es jetzt einfach mit nem Trick gelöst, den Tip habe ich von xam_res bekommen.



    Einfach,


    new lastfarmpoint = FARMER_RACE_POINTS -1;
    if(pInfo[playerid][gefarmt] < lastfarmpoint
    Somit ist jetzt der 9te checkpoint bereits der letzte und die Mission wird beendet.




    Mit -1 klappt es jetzt wunderbar aber die wirkliche Lösung des problems ist es ja nicht da der 10te checkpoint ja dann ignoriert wird und nur ein "platzhalter" im script ist......ich werde mal schauen ob ich rausfinde was du mit sizeof meinst^^ ist mir zwar ein begriff und habe ich auch schön oft verwendet aber wie ich es auf die Geschichte anwenden soll weiß ich noch nicht ?(



    Edit:


    Die Frage ist ja falls das problem dort liegt, warum ist das Script der ansicht das 9 nicht kleiner als 10 ist und somit kein checkpoint mehr erzeugt wird ?(

    2 Mal editiert, zuletzt von Traxter ()

  • Ich habe jetzt
    new lastfarmpoint = sizeof(farmercheckpoints);
    if(pInfo[playerid][gefarmt] < lastfarmpoint)


    versucht, ich denke mal das ist es was du meintest.Funktioniert aber leider auch nicht.
    Es wird nach dem 9ten check kein weiterer checkpoint erzeugt da das script wohl meint 9 wäre nicht kleiner als 10, den anschein macht es jedenfalls da ja offenbar sonst alles richtig ist. Wenn ich aus dem Fahrzeug aussteige und nochmal einsteige wird die Mission neugestartet, allerdings mit den 9 bereits abgefahrenen checks(is imo noch so konfiguriert) in der pinfo. Wenn ich dann nochmal in check nr 1 fahre der zum anfang eienr mission erzeugt wird, wird die mission beendet.

    Einmal editiert, zuletzt von Traxter ()

  • new lastfarmpoint = sizeof(farmercheckpoints)+1;


    ansonsten teste mal per Blank Skript & main()


    main()
    {
    for(new i = 0;i<sizeof(...);i++)printf("%f",Array[i]);


    }


    und schau wie der Inhalt wiedergegeben wird sprich dann musst du nicht jedesmal ins Game einfach nur so testen ( mit +1 & ohne )

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Okay, werde ich mal versuchen. Falls ich zu keiner Lösung komme werde ich es einfach mit -1 machen - ist auch nicht allzu tragisch und wenigstens funktionierts dann.



    Auf jeden Fall vielen dank für deine tatkräfige Hilfe :thumbup: