Auto parken funktioniert nicht

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
  • Moin, mein Script macht aus komischen Gründen Probleme. Damals hat alles funktioniert und heute geht garnichts mehr ^^
    Ich hab ein Autohaus System, wo man Createcar Modelid Farbe1 Farbe2 Preis eingeben kann um Dynamisch Autos zu Spawnen und dann mit /carpark dort Parkt wo diese hin sollen,
    Wenn man dann Carpark gemacht hat kann man in das Auto nicht mehr einsteigen ohne das eigentlich ein Menü kommen soll ob man es kaufen möchte.
    Dieses Menü kommt aber leider nicht mehr und somit kann man sich ganz normal ins Auto setzen. In der Datenbank wird alles gespeichert es geht nur darum das man es nicht kaufen kann.



    Wenn ich in meine Console schaue bekomme ich diesen Fehler:
    [debug] Run time error 4: "Array index out of bounds"
    [debug] Accessing element at negative index -400
    [debug] AMX backtrace:
    [debug] #0 00047684 in public OnPlayerStateChange (0, 2, 1) from newrl.amx


    Frag mich jetzt die ganze Zeit was das nun ist und habe auch schon so viel ausprobiert aber nichts hilft.
    Hat einer von euch einen Rat?


    Freundliche Grüße



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • PlayerVehicle[modellid - 400]

    Du sprengst dieses Array, da modellid den Wert 0 hat (eventuell durch Lag oder so).


    Schreibe es zur Sicherheit so:
    format(fstring, sizeof(fstring), "{00FF46}Name: {FEFEFE}%s [{00FF46}Modell: {FEFEFE}%d]\n{00FF46}Preis: {FEFEFE}%d$\n{00FF46}Verkaufspreis: {FEFEFE}%d$\n",PlayerVehicle[modellid - 400],CarInfo[i][modelID], CarInfo[i][c_Preis], CarInfo[i][c_Preis] / 100 * 75);
    zu:
    if(modellid == 0)
    {
    modellid = GetVehicleModel(vehicleid);
    if(modellid == 0)
    {
    format(fstring, sizeof(fstring), "{00FF46}Name: {FEFEFE}Unknown [{00FF46}Modell: {FEFEFE}%d]\n{00FF46}Preis: {FEFEFE}%d$\n{00FF46}Verkaufspreis: {FEFEFE}%d$\n",CarInfo[i][modelID], CarInfo[i][c_Preis], CarInfo[i][c_Preis] / 100 * 75);
    }
    }
    else
    {
    format(fstring, sizeof(fstring), "{00FF46}Name: {FEFEFE}%s [{00FF46}Modell: {FEFEFE}%d]\n{00FF46}Preis: {FEFEFE}%d$\n{00FF46}Verkaufspreis: {FEFEFE}%d$\n",PlayerVehicle[modellid - 400],CarInfo[i][modelID], CarInfo[i][c_Preis], CarInfo[i][c_Preis] / 100 * 75);
    }


    Dann dürfte der Fehler nicht mehr auftreten.

  • Daran liegt es nicht, da vehicleid nicht -400 sein kann.

    Hab ich auch gar nicht behauptet - ich meine folgendes:


    Er deklariert in Zeile 1 vehicleid und modelid und initialisiert sie auch mit den richtigen Werten. In Zeile 5 jedoch überschreibt er modelid mit dem Wert aus AutoSkin[vehicleid], was eigentlich gar nicht nötig ist, da er den Wert bereits durch die Initialisierung hat. Gehen wir nun davon aus, und so scheint es auch, dass AutoSkin[vehicleid] 0 entspricht. 0 - 400 ergibt -400 -> dadurch wird der Array gesprengt. Das ist für mich deutlich plausibler und logischer, oder übersehe ich da etwas?

  • Also Jeffry deine Methode hat leider nicht funktioniert. Nachdem ich Carpark benutzt habe und aussteige und natürlich wieder einsteige um es zu testen, kann ich das Auto nicht kaufen bzw es kommt kein Dialog und ich bin einfach nur gefreezt.


    So sieht carpark aus:



    // EDIT: Die Version von Douq hat funktioniert! Danke :)



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Er deklariert in Zeile 1 vehicleid und modelid und initialisiert sie auch mit den richtigen Werten. In Zeile 5 jedoch überschreibt er modelid mit dem Wert aus AutoSkin[vehicleid], was eigentlich gar nicht nötig ist, da er den Wert bereits durch die Initialisierung hat. Gehen wir nun davon aus, und so scheint es auch, dass AutoSkin[vehicleid] 0 entspricht. 0 - 400 ergibt -400 -> dadurch wird der Array gesprengt. Das ist für mich deutlich plausibler und logischer, oder übersehe ich da etwas?

    Stimmt, dem könnte tatsächlich so sein, das ist zwei mal die gleiche if-Abfrage, darauf habe ich nicht geschaut. Ich habe deine Aussage so aufgefasst, dass die vehicleid den Fehler erzeugt. Mein Fehler, sorry.
    Wobei dann auch hier etwas nicht passen dürfte.



    Nachdem ich Carpark benutzt habe und aussteige und natürlich wieder einsteige um es zu testen, kann ich das Auto nicht kaufen bzw es kommt kein Dialog und ich bin einfach nur gefreezt.

    Oh ja, der else-Teil wird nicht aufgerufen wenn das einmal 0 war.
    Schreibe es so:
    if(modellid == 0)
    {
    modellid = GetVehicleModel(vehicleid);
    if(modellid == 0)
    {
    format(fstring, sizeof(fstring), "{00FF46}Name: {FEFEFE}Unknown [{00FF46}Modell: {FEFEFE}%d]\n{00FF46}Preis: {FEFEFE}%d$\n{00FF46}Verkaufspreis: {FEFEFE}%d$\n",CarInfo[i][modelID], CarInfo[i][c_Preis], CarInfo[i][c_Preis] / 100 * 75);
    }
    }
    if(modellid != 0)
    {
    format(fstring, sizeof(fstring), "{00FF46}Name: {FEFEFE}%s [{00FF46}Modell: {FEFEFE}%d]\n{00FF46}Preis: {FEFEFE}%d$\n{00FF46}Verkaufspreis: {FEFEFE}%d$\n",PlayerVehicle[modellid - 400],CarInfo[i][modelID], CarInfo[i][c_Preis], CarInfo[i][c_Preis] / 100 * 75);
    }


    Und am besten du entfernst modellid = AutoSkin[vehicleid]; wie Douq sagte.


    Außerdem kannst du die PlayerTextDrawSetPreviewModel-Zeile direkt in die Zeile vor die for-Schleife schreiben, dann wird die obere if-Abfrage komplett leer, und du kannst den Part löschen.


    EDIT:
    Ich würde dir dennoch zu dem etwas angepassten Code raten, da es wie gesagt durch Lag auch zu dem Fehler kommen kann, bei Arrays ist es immer gut, auf Nummer sicher zu gehen.