Massives Garagensystem Problem

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,


    ich habe das Problem, dass ich einen Runtime Error bekomme, sodern ein Fahrzeug in der Garage steht.



    command(garage, playerid, params[])
    {
    new Float:x, Float:y, Float:z, string[128], mainstring[2000];
    GetPlayerPos(playerid, x, y, z);
    for(new i=0;i<MAX_HAUS;i++){
    if(HausInfo[i][h_erstellt] == 1){
    if(IsPlayerInRangeOfPoint(playerid, 5.0, HausInfo[i][g_x], HausInfo[i][g_y], HausInfo[i][g_z])){
    for(new ii=0;ii<3;ii++){
    if(Spieler[playerid][pHaus][ii] == i){
    //SetPVarInt(playerid, "Haussss", i);
    //printf("Haussss = %d", GetPVarInt(playerid, "Haussss"));
    if(IsPlayerInAnyVehicle(playerid)){
    //ShowPlayerDialog(playerid, DIALOG_GARAGE, DIALOG_STYLE_LIST, "Test", "Fahrzeug reinstellen","Weiter","Abbruch");
    if(HausInfo[i][g_slot][0] == 0 && HausInfo[i][g_fahrzeug][0] == -1){
    HausInfo[i][g_slot][0] = 1;
    HausInfo[i][g_fahrzeug][0] = GetVehicleModel(GetPlayerVehicleID(playerid));
    DestroyVehicle(GetPlayerVehicleID(playerid));
    return 1;
    }
    else if(HausInfo[i][g_slot][1] == 0 && HausInfo[i][g_fahrzeug][1] == -1){
    HausInfo[i][g_slot][1] = 1;
    HausInfo[i][g_fahrzeug][1] = GetVehicleModel(GetPlayerVehicleID(playerid));
    DestroyVehicle(GetPlayerVehicleID(playerid));
    return 1;
    }
    else if(HausInfo[i][g_slot][2] == 0 && HausInfo[i][g_fahrzeug][2] == -1){
    HausInfo[i][g_slot][2] = 1;
    HausInfo[i][g_fahrzeug][2] = GetVehicleModel(GetPlayerVehicleID(playerid));
    DestroyVehicle(GetPlayerVehicleID(playerid));
    return 1;
    }
    }
    else{
    for(new g=0;g<3;g++){
    if(HausInfo[i][g_slot][g] == 0 && HausInfo[i][g_fahrzeug][g] == -1){
    format(string, sizeof(string), "Frei\n");
    strcat(mainstring, string);
    }
    else if(HausInfo[i][g_slot][g] != 0 && HausInfo[i][g_fahrzeug][g] != -1){
    format(string, sizeof(string), "%d - %s\n", HausInfo[i][g_fahrzeug][g], VehicleNames[GetVehicleModel(HausInfo[i][g_fahrzeug][g]) - 400]);
    strcat(mainstring, string);
    }
    }
    }
    }
    }
    }
    }
    }
    ShowPlayerDialog(playerid, DIALOG_GARAGE_RAUS, DIALOG_STYLE_LIST, "Test", mainstring, "Rausholen", "Abbruch");
    return 1;
    }



    forward LoadHouseSystem();
    public LoadHouseSystem()
    {
    new rows, fields, HouseText[250], content[120];
    cache_get_data(rows, fields);
    if(rows)
    {
    for(AktuelleHaus = 0; AktuelleHaus < rows; AktuelleHaus++)
    {
    HausInfo[AktuelleHaus][h_erstellt] = 1;
    HausInfo[AktuelleHaus][h_owned] = cache_get_field_content_int(AktuelleHaus,"h_owned");
    cache_get_field_content(AktuelleHaus,"h_besitzer", content);
    format(HausInfo[AktuelleHaus][h_besitzer], 128, "%s", content);
    HausInfo[AktuelleHaus][h_preis] = cache_get_field_content_int(AktuelleHaus,"h_preis");
    HausInfo[AktuelleHaus][h_x] = cache_get_field_content_float(AktuelleHaus,"h_x");
    HausInfo[AktuelleHaus][h_y] = cache_get_field_content_float(AktuelleHaus,"h_y");
    HausInfo[AktuelleHaus][h_z] = cache_get_field_content_float(AktuelleHaus,"h_z");
    HausInfo[AktuelleHaus][hk_x] = cache_get_field_content_float(AktuelleHaus,"hk_x");
    HausInfo[AktuelleHaus][hk_y] = cache_get_field_content_float(AktuelleHaus,"hk_y");
    HausInfo[AktuelleHaus][hk_z] = cache_get_field_content_float(AktuelleHaus,"hk_z");
    HausInfo[AktuelleHaus][hr_x] = cache_get_field_content_float(AktuelleHaus,"hr_x");
    HausInfo[AktuelleHaus][hr_y] = cache_get_field_content_float(AktuelleHaus,"hr_y");
    HausInfo[AktuelleHaus][hr_z] = cache_get_field_content_float(AktuelleHaus,"hr_z");
    HausInfo[AktuelleHaus][h_garage] = cache_get_field_content_int(AktuelleHaus,"h_garage");
    HausInfo[AktuelleHaus][g_x] = cache_get_field_content_float(AktuelleHaus,"g_x");
    HausInfo[AktuelleHaus][g_y] = cache_get_field_content_float(AktuelleHaus,"g_y");
    HausInfo[AktuelleHaus][g_z] = cache_get_field_content_float(AktuelleHaus,"g_z");
    HausInfo[AktuelleHaus][i_x] = cache_get_field_content_float(AktuelleHaus,"i_x");
    HausInfo[AktuelleHaus][i_y] = cache_get_field_content_float(AktuelleHaus,"i_y");
    HausInfo[AktuelleHaus][i_z] = cache_get_field_content_float(AktuelleHaus,"i_z");
    HausInfo[AktuelleHaus][h_locked] = cache_get_field_content_int(AktuelleHaus,"h_locked");
    HausInfo[AktuelleHaus][i_int] = cache_get_field_content_int(AktuelleHaus,"i_int");
    HausInfo[AktuelleHaus][i_vw] = cache_get_field_content_int(AktuelleHaus,"i_vw");



    if(HausInfo[AktuelleHaus][h_garage] == 1){
    HausInfo[AktuelleHaus][g_pickup] = CreateDynamicPickup(1239, 1, HausInfo[AktuelleHaus][g_x], HausInfo[AktuelleHaus][g_y], HausInfo[AktuelleHaus][g_z]);
    }
    if(HausInfo[AktuelleHaus][h_owned] == 0){
    format(HouseText, sizeof(HouseText), "{FFFFFF} Diese Immobilie steht zum Verkauf.\nKosten: %d Euro\nZum Interagieren nutze\ndas Verkaufsschild", HausInfo[AktuelleHaus][h_preis]);
    HausInfo[AktuelleHaus][h_text] = Create3DTextLabel(HouseText, COLOR_WHITE, HausInfo[AktuelleHaus][h_x], HausInfo[AktuelleHaus][h_y], HausInfo[AktuelleHaus][h_z], 10, 0);
    HausInfo[AktuelleHaus][h_obj] = CreateObject(19470, HausInfo[AktuelleHaus][hk_x], HausInfo[AktuelleHaus][hk_y], HausInfo[AktuelleHaus][hk_z], HausInfo[AktuelleHaus][hr_x], HausInfo[AktuelleHaus][hr_y], HausInfo[AktuelleHaus][hr_z]);
    }
    else if(HausInfo[AktuelleHaus][h_owned] == 1){
    format(HouseText,sizeof(HouseText),"{FFFFFF} Diese Immobilie steht nicht zum Verkauf.", HausInfo[AktuelleHaus][h_besitzer], AktuelleHaus);
    HausInfo[AktuelleHaus][h_text] = Create3DTextLabel(HouseText, COLOR_WHITE, HausInfo[AktuelleHaus][h_x], HausInfo[AktuelleHaus][h_y], HausInfo[AktuelleHaus][h_z], 10, 0);
    }
    }
    }
    printf("[HAUSSYSTEM]: Es wurden %d Häuser geladen.", rows);
    return 1;
    }


    Fehler:


    Aktuell wird leider auch nichts mehr geladen, also nichts mehr angezeigt im Spiel.


    Der Fehler bei /garage wenn ein Fahrzeug drin ist:


    Code
    [debug] Run time error 4: "Array index out of bounds"
    [debug]  Accessing element at negative index -400
    [debug] AMX backtrace:
    [debug] #0 0002ad60 in public cmd_garage (0, 13685620) from selfmade.amx
    [debug] #1 native CallLocalFunction () from samp-server.exe
    [debug] #2 00000720 in public OnPlayerCommandText (0, 13685588) from selfmade.amx
  • C
    HausInfo[i][g_fahrzeug][g]

    Das darf nicht 0 sein, denn die vehicle IDs fangen bei 1 an. Achte darauf, dass das bei dir richtig ist.

  • Warum ist es standardmäßig auf -1? Setze es doch standardmäßig auf 0.
    Das macht jetzt aber keinen großen Unterschied.


    Lasse dir die Werte mal vor dieser Zeile format(string, sizeof(string), "%d - %s\n", HausInfo[i][g_fahrzeug][g], VehicleNames[GetVehicleModel(HausInfo[i][g_fahrzeug][g]) - 400]); ausgeben (also printen mit printf).

  • Ja, weil die Fahrzeug ID 0 ist, das entspricht ModelID = 0 und 0 - 400 = -400.

  • Fehler liegt beim auslesen des Fahrzeugsnamens, fast ganz unten wegen dem GetVehicleModel() wo du versuchst die Variable in die Funktion zu packen, mach da das GetVehicleModel weg und dann sollte es passen.

  • Zwecks dem Runtime Error, der könnte so umgangen werden:
    format(string, sizeof(string), "%d - %s\n", HausInfo[i][g_fahrzeug][g], VehicleNames[GetVehicleModel(HausInfo[i][g_fahrzeug][g]) - 400]);
    zu:
    new model = GetVehicleModel(HausInfo[i][g_fahrzeug][g]);
    if(model < 400 || model > 611) format(string, sizeof(string), "%d - *?*\n", HausInfo[i][g_fahrzeug][g]);
    else format(string, sizeof(string), "%d - %s\n", HausInfo[i][g_fahrzeug][g], VehicleNames[model - 400]);