Beiträge von Jeffry

    Was wird dir so im Server Log ausgegeben?
    ocmd:deletefcar(playerid, params[])
    {
    new vid;
    if(!IsNumeric(params) || !strlen(params)) return SendClientMessage(playerid, COLOR_GREY, "INFO: {FF9600}/deletefcar {B3B3B3}[Vehicle ID]");
    vid = strval(params);
    printf("params: %s / vid: %d", params, vid);
    if(vid <= 0) return SendClientMessage(playerid, COLOR_DRED, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");
    for(new i=0; i<MAX_FRAC_VEHICLES; i++)
    {
    printf("i: %d / e_vID: %d / vid: %d", i, fcInfo[i][e_vID], vid);
    if(fcInfo[i][e_vID] == vid)
    {
    printf("Lösche.");
    fcInfo[i][e_modelID] = 0;
    fcInfo[i][e_x] = 0.0;
    fcInfo[i][e_y] = 0.0;
    fcInfo[i][e_z] = 0.0;
    fcInfo[i][e_a] = 0.0;
    fcInfo[i][e_color1] = 0;
    fcInfo[i][e_color2] = 0;
    fcInfo[i][e_fracID] = -1;
    new query[128];
    format(query, sizeof(query), "DELETE FROM FracVehicles WHERE ID = '%d'", i);
    mysql_function_query(dbhandle,query,false,"","");
    DestroyVehicle(fcInfo[i][e_vID]);
    fcInfo[i][e_vID] = 0;
    return SendClientMessage(playerid, COLOR_DGREEN, "** Das Fahrzeug wurde Erfolgreich gelöscht. **");
    }
    }
    printf("Keins gefunden.");
    return SendClientMessage(playerid, COLOR_DRED, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");
    }


    PS: Danke ^^

    Hm, das sieht alles gut aus.
    Du kannst ja nochmal alle Fahrzeuge löschen und neu erstellen. Davor fügst du bei jedem Query von den Fahrzeugen einen print hinzu, und schaust, ab wann es die beiden vertauscht. An sich sind die beiden Codes aber korrekt.

    Ahh, ich seh's:
    for(new i=0; i<rows; i++)
    zu:
    for(new i=0; i<num_rows; i++)


    Zwecks dem Vertauschen: Schau mal beim Speichern, ob du da nicht etwas vertauscht hast.

    Sorry, hab die Anzahl vergessen.
    Mache es so:
    public LoadFracVehicles_Data()
    {
    printf("LoadFracVehicles_Data aufgerufen.");
    new rows, id, createdVehs;
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    printf("%d Fahrzeuge gefunden.", num_rows);
    for(new i=0; i<rows; i++)
    {
    id = cache_get_field_content_int(i, "ID");
    printf("id: %d", id);
    if(id < 0 || id >= MAX_FRAC_VEHICLES) continue;
    fcInfo[id][e_modelID] = cache_get_field_content_int(i, "ModelID");
    fcInfo[id][e_x] = cache_get_field_content_float(i, "PosX");
    fcInfo[id][e_y] = cache_get_field_content_float(i, "PosY");
    fcInfo[id][e_z] = cache_get_field_content_float(i, "PosZ");
    fcInfo[id][e_a] = cache_get_field_content_float(i, "PosA");
    fcInfo[id][e_color1] = cache_get_field_content_int(i, "Color1");
    fcInfo[id][e_color2] = cache_get_field_content_int(i, "Color2");
    fcInfo[id][e_fracID] = cache_get_field_content_int(i, "FracID");
    if(fcInfo[id][e_modelID] >= 400 && fcInfo[id][e_modelID] <= 611)
    {
    printf("%d %f %f %f %f %d %d", fcInfo[id][e_modelID], fcInfo[id][e_x], fcInfo[id][e_y], fcInfo[id][e_z], fcInfo[id][e_a], fcInfo[id][e_color1], fcInfo[id][e_color2]);
    fcInfo[id][e_vID] = CreateVehicle(fcInfo[id][e_modelID], fcInfo[id][e_x], fcInfo[id][e_y], fcInfo[id][e_z], fcInfo[id][e_a], fcInfo[id][e_color1], fcInfo[id][e_color2], -1);
    printf("Erstellt: %d", fcInfo[id][e_vID]);
    }
    else
    {
    printf("[ERROR] Model-ID %d existiert nicht (ID: %d).", fcInfo[id][e_modelID], id);
    }
    if(GetVehicleModel(MAX_VEHICLES-1) != 0) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_VEHICLES) erreicht.");
    createdVehs++;
    if(createdVehs == MAX_FRAC_VEHICLES) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_FRAC_VEHICLES) erreicht.");
    }
    return 1;
    }


    Dem Log kann man aber wohl entnehmen, dass die Anzahl 0 ist.


    Heißt deine Tabelle auch wirklich frakautos?

    Debugge es bitte so und poste dann was im Server Log steht:
    public LoadFracVehicles_Data()
    {
    printf("LoadFracVehicles_Data aufgerufen.");
    new rows, id, createdVehs;
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    printf("%d Fahrzeuge gefunden.");
    for(new i=0; i<rows; i++)
    {
    id = cache_get_field_content_int(i, "ID");
    printf("id: %d", id);
    if(id < 0 || id >= MAX_FRAC_VEHICLES) continue;
    fcInfo[id][e_modelID] = cache_get_field_content_int(i, "ModelID");
    fcInfo[id][e_x] = cache_get_field_content_float(i, "PosX");
    fcInfo[id][e_y] = cache_get_field_content_float(i, "PosY");
    fcInfo[id][e_z] = cache_get_field_content_float(i, "PosZ");
    fcInfo[id][e_a] = cache_get_field_content_float(i, "PosA");
    fcInfo[id][e_color1] = cache_get_field_content_int(i, "Color1");
    fcInfo[id][e_color2] = cache_get_field_content_int(i, "Color2");
    fcInfo[id][e_fracID] = cache_get_field_content_int(i, "FracID");
    if(fcInfo[id][e_modelID] >= 400 && fcInfo[id][e_modelID] <= 611)
    {
    printf("%d %f %f %f %f %d %d", fcInfo[id][e_modelID], fcInfo[id][e_x], fcInfo[id][e_y], fcInfo[id][e_z], fcInfo[id][e_a], fcInfo[id][e_color1], fcInfo[id][e_color2]);
    fcInfo[id][e_vID] = CreateVehicle(fcInfo[id][e_modelID], fcInfo[id][e_x], fcInfo[id][e_y], fcInfo[id][e_z], fcInfo[id][e_a], fcInfo[id][e_color1], fcInfo[id][e_color2], -1);
    printf("Erstellt: %d", fcInfo[id][e_vID]);
    }
    else
    {
    printf("[ERROR] Model-ID %d existiert nicht (ID: %d).", fcInfo[id][e_modelID], id);
    }
    if(GetVehicleModel(MAX_VEHICLES-1) != 0) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_VEHICLES) erreicht.");
    createdVehs++;
    if(createdVehs == MAX_FRAC_VEHICLES) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_FRAC_VEHICLES) erreicht.");
    }
    return 1;
    }

    oder so:


    Bitte so auf keinen Fall. Das einzige was das bewirkt, ist dass du pSleep anstatt SetTimer schreibst. Zudem ist das Makro falsch, da du es nur definierst, es aber nichts macht.


    #define pSleep SetTimer
    Wäre korrekt, aber das bringt ja keinen Vorteil. ;)

    Versuche es so:
    Function OnPlayerCarLogin(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    for(new x = 0; x < num_rows; x++)
    {
    if(!Dtc_PlayerHaveCar[playerid][x])
    {
    Dtc_PlayerHaveCar[playerid][x] = 1;
    Dtc_PlayerKey[playerid] = cache_get_field_content_int(x,"CarKey",dbhandle);
    PlayerCar[playerid][x][CarId] = cache_get_field_content_int(x,"CarId",dbhandle);
    PlayerCar[playerid][x][CarModel] = cache_get_field_content_int(x,"CarModel",dbhandle);
    PlayerCar[playerid][x][CarPos_x] = cache_get_field_content_float(x,"CarPos_x",dbhandle);
    PlayerCar[playerid][x][CarPos_y] = cache_get_field_content_float(x,"CarPos_y",dbhandle);
    PlayerCar[playerid][x][CarPos_z] = cache_get_field_content_float(x,"CarPos_z",dbhandle);
    PlayerCar[playerid][x][CarRotate] = cache_get_field_content_float(x,"CarRotate",dbhandle);
    PlayerCar[playerid][x][CarNitro] = cache_get_field_content_int(x,"CarNitro",dbhandle);
    PlayerCar[playerid][x][CarHyd] = cache_get_field_content_int(x,"CarHyd",dbhandle);
    PlayerCar[playerid][x][CarAusp] = cache_get_field_content_int(x,"CarAusp",dbhandle);
    PlayerCar[playerid][x][CarSideL] = cache_get_field_content_int(x,"CarSideL",dbhandle);
    PlayerCar[playerid][x][CarSideR] = cache_get_field_content_int(x,"CarSideR",dbhandle);
    PlayerCar[playerid][x][CarFB] = cache_get_field_content_int(x,"CarFB",dbhandle);
    PlayerCar[playerid][x][CarRB] = cache_get_field_content_int(x,"CarRB",dbhandle);
    PlayerCar[playerid][x][CarSpoiler] = cache_get_field_content_int(x,"CarSpoiler",dbhandle);
    PlayerCar[playerid][x][CarRoof] = cache_get_field_content_int(x,"CarRoof",dbhandle);
    PlayerCar[playerid][x][CarHood] = cache_get_field_content_int(x,"CarHood",dbhandle);
    PlayerCar[playerid][x][CarVents] = cache_get_field_content_int(x,"CarVents",dbhandle);
    PlayerCar[playerid][x][CarLamps] = cache_get_field_content_int(x,"CarLamp",dbhandle);
    PlayerCar[playerid][x][CarPJ] = cache_get_field_content_int(x,"CarPJ",dbhandle);
    PlayerCar[playerid][x][CarC1] = cache_get_field_content_int(x,"CarC1",dbhandle);
    PlayerCar[playerid][x][CarC2] = cache_get_field_content_int(x,"CarC2",dbhandle);
    PlayerCar[playerid][x][CarArrest] = cache_get_field_content_int(x,"CarArrest",dbhandle);
    PlayerCarSpawn(playerid,x);
    }
    }
    return 1;
    }


    EDIT:
    J0a9: Ich habe noch etwas ausgebessert, nutze die neue Version, sonst klappt es nicht, wenn du mehrere Fahrzeuge hast.

    Du müsstest nach dem pSleep Aufruf das "string" Array nochmals deklarieren, sonst ist das nicht definiert.
    Das widerspricht aber dem guten Aufbau eines Codes, denn es würde ja eigentlich eine Warnung geben, da es bereits auf gleicher Ebene deklariert ist, allerdings baut das Makro ja die Funktion auf.


    Klar kann man es so machen, ich würde das so allerdings nie empfehlen, alleine schon weil es falsch aussieht. Ressourcentechnisch ändert es ja nichts.

    Das kannst du in so tiefer Verschachtelung nicht nutzen, es geht nur auf Ebene 1 (eine Klammer auf).
    Ich rate dir, dort einfach einen Timer zu starten, das ist unwesentlich mehr Aufwand.

    Hast du die ID in deiner Tabelle auf A_I (Auto Increment) gesetzt?
    Falls ja, nimm das raus und versuche es noch einmal, mit einer leeren Tabelle die Fahrzeuge zu erstellen.

    SetObjectMaterialText(obj,"Willkommen auf Blakhawk-Reallife",0,OBJECT_MATERIAL_SIZE_256x128,"Arial",24,1,rot,weiß,0);
    So zeigt es bei mir dann etwas an, musst eben die Schrift dann anpassen, bzw. ein zweites Objekt setzen.

    Ich sehe grade, dass du es schon drin hast.
    Hm, dann lösche mal alles aus der Tabelle raus (alle Fahrzeuge) und erstelle sie neu, klappt es dann? Wenn nicht, poste was der MySQL Log sagt.