[jTuT] Fraktions-Fahrzeug-System mit MySQL R41-4

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
  • Information:
    Es wurde ein Fehler im LoadFracVehicles_Data() Callback gefunden und behoben. Je nach eigenem System-Aufbau sollte der eigene Code in diesem Callback überarbeitet werden.


    Dank geht an @_iPit_: der auf den Fehler gestoßen ist.

  • Das kannst du bei der jeweiligen Speicherung der Fahrzeuge so machen:


    C
    new query[256];
    format(query, sizeof(query), "UPDATE FracVehicles SET tuning0 = %d", GetVehicleComponentInSlot(fracVehicle[i][e_vID] , 0));
    for(new s=1; s<14; s++)
    {
    	format(query, sizeof(query), "%s, tuning%d = %d ", query, s, GetVehicleComponentInSlot(fracVehicle[i][e_vID] , s));
    }
    format(query, sizeof(query), "%sWHERE ID = %d", query, i);
    mysql_pquery(db, query);

    In der Tabelle musst du dann die Attribute tuning0, tuning1, ... tuning13 anlegen.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry () aus folgendem Grund: Fehler behoben.

  • Moin,


    bei mir speichert er keine fahrzeuge mehr. Es funktionierte bis ich e_gekauft und e_zerstoert hinzugefügt habe. Was ist der fehler?



    enum fracVehEnum
    {
    e_modelID,
    e_gekauft,
    e_zerstoert,
    Float:e_x,
    Float:e_y,
    Float:e_z,
    Float:e_a,
    Float:carheal,
    e_color1,
    e_color2,
    e_fracID,
    e_vID
    };

    Hier die Publics:

    public LoadFracVehicles_Data()
    {
    //Deklaration neuer temporärer Variablen:
    new rows, id, createdVehs;



    //Anzahl der gelesenen Datensätze abfragen:
    rows = cache_num_rows();



    //Schleife durch alle Datensätze:
    for(new i=0; i<rows; i++)
    {
    //Fahrzeug existiert in der Datenbank, wir laden die Daten jetzt aus dem Cache.
    id = cache_get_field_content_int(i, "ID");



    //Um Fehler bei der Verarbeitung zu vermeiden:
    if(id < 0 || id >= MAX_FRAC_VEHICLES) continue;



    //Danach die restlichen Daten laden. Unser Index (der Wert mit dem wir auf das
    //Fahrzeug in der Datenbank zugreifen) ist die "ID".
    fracVehicle[id][e_modelID] = cache_get_field_content_int(i, "ModelID");
    fracVehicle[id][e_gekauft] = cache_get_field_content_int(i, "Gekauft");
    fracVehicle[id][e_zerstoert] = cache_get_field_content_int(i, "Zerstoert");
    fracVehicle[id][e_x] = cache_get_field_content_float(i, "PosX");
    fracVehicle[id][e_y] = cache_get_field_content_float(i, "PosY");
    fracVehicle[id][e_z] = cache_get_field_content_float(i, "PosZ");
    fracVehicle[id][e_a] = cache_get_field_content_float(i, "PosA");
    fracVehicle[id][carheal] = cache_get_field_content_float(i, "CarHealth");
    fracVehicle[id][e_color1] = cache_get_field_content_int(i, "Color1");
    fracVehicle[id][e_color2] = cache_get_field_content_int(i, "Color2");
    fracVehicle[id][e_fracID] = cache_get_field_content_int(i, "FracID");



    //Zur Sicherheit fragen wir hier nun ab, ob das angegebene Modell auch existiert,
    //sollte das nicht der Fall sein, dann wird das Fahrzeug nicht erstellt.
    if(fracVehicle[id][e_modelID] >= 400 && fracVehicle[id][e_modelID] <= 611)
    {
    if(fracVehicle[id][e_gekauft] == 1)
    {
    //Nachdem das Fahrzeug geladen wurde, wird es erstellt.
    fracVehicle[id][e_vID] = CreateVehicle(fracVehicle[id][e_modelID], fracVehicle[id][e_x], fracVehicle[id][e_y], fracVehicle[id][e_z], fracVehicle[id][e_a], fracVehicle[id][e_color1], fracVehicle[id][e_color2], -1);
    SetVehicleHealth(fracVehicle[id][e_vID],fracVehicle[id][carheal]);
    }
    else
    {
    //Falls eine nicht existierende Model-ID angegeben wurde, geben wir eine Information aus.
    printf("[Error] Model-ID %d existiert nicht (ID: %d).", fracVehicle[id][e_modelID], id);
    }
    }
    //Zur Sicherheit fragen wir noch ab, ob das Fahrzeug-Limit noch nicht überschritten wurde.
    //Existiert ein Fahrzeug mit der höchsten ID, dann kann kein weiteres mehr erstellt werden.
    if(GetVehicleModel(MAX_VEHICLES-1) != 0) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_VEHICLES) erreicht.");



    //Zur weiteren Sicherheit prüfen wir noch, ob die maximale Anzahl an Fraktions-Fahrzeugen erreicht ist.
    createdVehs++;
    if(createdVehs == MAX_FRAC_VEHICLES) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_FRAC_VEHICLES) erreicht.");
    }
    return 1;
    }
    public SaveAllFracVehs()
    {
    //Deklaration neuer temporärer Variablen:
    new query[256];



    //Schleife durch alle Fraktions-Fahrzeuge
    for(new i=0; i<MAX_FRAC_VEHICLES; i++)
    {
    //Wenn das Fahrzeug existiert
    if(fracVehicle[i][e_modelID] >= 400 && fracVehicle[i][e_modelID] <= 611)
    {
    //Wir fragen die Position des Fahrzeugs ab:
    GetVehiclePos(fracVehicle[i][e_vID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z]);
    GetVehicleZAngle(fracVehicle[i][e_vID], fracVehicle[i][e_a]);
    GetVehicleHealth(fracVehicle[i][e_vID], fracVehicle[i][carheal]);



    //Und wir erstellen das Query:
    format(query, sizeof(query), "UPDATE FracVehicles SET ModelID = '%d', Gekauft = '%d', Zerstoert = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', CarHealth = '%f', Color1 = '%d', Color2 = '%d', FracID = '%d' WHERE ID = '%d'",
    fracVehicle[i][e_modelID], fracVehicle[i][e_gekauft], fracVehicle[i][e_zerstoert], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][carheal], fracVehicle[i][e_color1], fracVehicle[i][e_color2], fracVehicle[i][e_fracID], i);
    //handle = die Connection Handle ID die vor mysql_connect steht.
    mysql_tquery(handle, query);
    }
    }
    return 1;
    }

    Hier das Stock

    stock SaveFracVehCheck(vehicleid)
    {
    //Deklaration neuer temporärer Variablen:
    new query[256];



    //Schleife durch alle Fraktions-Fahrzeuge
    for(new i=0; i<MAX_FRAC_VEHICLES; i++)
    {
    //Wenn die vehicleid die gleiche ist, wie die des Fraktions-Fahrzeugs
    if(fracVehicle[i][e_vID] == vehicleid)
    {
    //Wir fragen die Position des Fahrzeugs ab:
    GetVehiclePos(fracVehicle[i][e_vID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z]);
    GetVehicleZAngle(fracVehicle[i][e_vID], fracVehicle[i][e_a]);
    GetVehicleHealth(fracVehicle[i][e_vID], fracVehicle[i][carheal]);



    //Und wir erstellen das Query:
    format(query, sizeof(query), "UPDATE FracVehicles SET ModelID = '%d', Gekauft = '%d', Zertoert = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', CarHealth = '%f', Color1 = '%d', Color2 = '%d', FracID = '%d' WHERE ID = '%d'",
    fracVehicle[i][e_modelID], fracVehicle[i][e_gekauft], fracVehicle[i][e_zerstoert], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][carheal], fracVehicle[i][e_color1], fracVehicle[i][e_color2], fracVehicle[i][e_fracID], i);
    //handle = die Connection Handle ID die vor mysql_connect steht.
    mysql_tquery(handle, query);
    return 1; //Es gibt ja keine zwei gleichen Fahrzeuge
    }
    }
    return 0; //Fahrzeug ist kein Fraktions-Fahrzeug
    }

    Und hier die Befehle:

    ocmd:fferstellen(playerid, params[])
    {
    //Zuerst fragen wir ab, ob wir noch Fahrzeuge erstellen können
    if(GetVehicleModel(MAX_VEHICLES-1) != 0) return SendClientMessage(playerid, 0xFF0000FF, "Es können keine weiteren Fahrzeuge erstellt werden, Limit (MAX_VEHICLES) erreicht.");



    //Wir deklarieren die benötigten temporären Variablen.
    new tmp[20], idx, model, fID, color1 = -1, color2 = -1;



    //Anschließend teilen wir mit strtok die eingegebenen Paramater auf und wandeln sie in eine Zahl um.
    //Falls etwas falsches eingegeben wurde, geben wir eine entsprechende Meldung zurück.
    tmp = strtok(params, idx);
    if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
    model = strval(tmp);
    //Eine solche Abfrage kann man auch für nachfolgende FraktionsID (fID) machen, falls gewünscht.
    if(model < 400 || model > 611) return SendClientMessage(playerid, 0xFF0000FF, "Error: Model ID existiert nicht.");
    tmp = strtok(params, idx);
    if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
    fID = strval(tmp);
    tmp = strtok(params, idx);
    if(strlen(tmp) && IsNumeric(tmp)) color1 = strval(tmp);
    tmp = strtok(params, idx);
    if(strlen(tmp) && IsNumeric(tmp)) color2 = strval(tmp);



    //Sind alle Parameter korrekt übergeben worden, dann suchen wir uns einen freien Index in den wir das Fraktions-Fahrzeug speichern können.
    for(new i=0; i<MAX_FRAC_VEHICLES; i++)
    {
    //Frei:
    if(fracVehicle[i][e_vID] == 0)
    {
    //Daten werden übergeben
    new Float:x, Float:y, Float:z, Float:a;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    fracVehicle[i][e_modelID] = model;
    fracVehicle[i][e_gekauft] = 1;
    fracVehicle[i][e_zerstoert] = 0;
    fracVehicle[i][e_x] = x;
    fracVehicle[i][e_y] = y;
    fracVehicle[i][e_z] = z;
    fracVehicle[i][e_a] = a;
    fracVehicle[i][carheal] = 1000;
    fracVehicle[i][e_color1] = color1;
    fracVehicle[i][e_color2] = color2;
    fracVehicle[i][e_fracID] = fID;



    //und anschließend in die Datenbank geschrieben.
    new query[256];
    format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, Gekauft, Zerstoert, PosX, PosY, PosZ, PosA, CarHealth, Color1, Color2, FracID) VALUES ('%d', '%d', '%d, '%d', '%f', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
    i, fracVehicle[i][e_modelID], fracVehicle[i][e_gekauft], fracVehicle[i][e_zerstoert], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][carheal], fracVehicle[i][e_color1], fracVehicle[i][e_color2], fracVehicle[i][e_fracID]);
    mysql_tquery(handle, query);



    //Zuletzt wird dann noch das Fahrzeug erstellt und der Spieler in das Fahrzeug gesetzt.
    fracVehicle[i][e_vID] = CreateVehicle(fracVehicle[i][e_modelID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][e_color1], fracVehicle[i][e_color2], -1);
    SetVehicleHealth(fracVehicle[i][e_vID],fracVehicle[i][carheal]);
    PutPlayerInVehicle(playerid, fracVehicle[i][e_vID], 0);
    return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gespeichert.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Error: Limit für Fraktions-Fahrzeuge erreicht.");
    }



    ocmd:ffloeschen(playerid, params[])
    {
    //Wir deklarieren die benötigte temporäre Variable.
    new vid;



    //Wenn der Spieler keine Vehicle-ID eingibt wird die gelöscht, in der sich der Spieler befindet,
    //ansonsten die eingegebene ID.
    if(!IsNumeric(params) || !strlen(params)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Nutze: /ffloeschen [Vehicle ID]");
    vid = strval(params);



    if(vid <= 0) return SendClientMessage(playerid, 0xFF0000FF, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");



    for(new i=0; i<MAX_FRAC_VEHICLES; i++)
    {
    //Eingegebene ID und die des Fraktions-Fahrzeugs stimmen überein.
    if(fracVehicle[i][e_vID] == vid)
    {
    //Daten werden entfernt
    fracVehicle[i][e_modelID] = 0;
    fracVehicle[i][e_gekauft] = 0;
    fracVehicle[i][e_zerstoert] = 0;
    fracVehicle[i][e_x] = 0.0;
    fracVehicle[i][e_y] = 0.0;
    fracVehicle[i][e_z] = 0.0;
    fracVehicle[i][e_a] = 0.0;
    fracVehicle[i][carheal] = 0.0;
    fracVehicle[i][e_color1] = 0;
    fracVehicle[i][e_color2] = 0;
    fracVehicle[i][e_fracID] = -1;



    //und anschließend in der Datenbank gelöscht.
    new query[128];
    format(query, sizeof(query), "DELETE FROM FracVehicles WHERE ID = '%d'", i);
    mysql_tquery(handle, query);



    DestroyVehicle(fracVehicle[i][e_vID]);
    fracVehicle[i][e_vID] = 0;
    return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gelöscht.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");
    }



    ocmd:parken(playerid)
    {
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "Du bist in keinem Fahrzeug.");
    new vehicleid = GetPlayerVehicleID(playerid);
    if(SaveFracVehCheck(vehicleid)) return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug geparkt.");
    else return SendClientMessage(playerid, 0xFF0000FF, "Dieses Fahrzeug kann nicht geparkt werden.");
    }


    Hoffe du kannst mir helfen, mit freundlichem Gruß,
    SebMcpepp

  • format(query, sizeof(query), "UPDATE FracVehicles SET ModelID = '%d', Gekauft = '%d', Zertoert = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', CarHealth = '%f', Color1 = '%d', Color2 = '%d', FracID = '%d' WHERE ID = '%d'",
    zu:
    format(query, sizeof(query), "UPDATE FracVehicles SET ModelID = '%d', Gekauft = '%d', Zerstoert = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', CarHealth = '%f', Color1 = '%d', Color2 = '%d', FracID = '%d' WHERE ID = '%d'",


    Bei Zerstoert hat das "s" gefehlt.

  • Stimmt, danke für den Tipp. Ich habe das nun mal verbessert mit der Zertoert in Zerstoert aber er macht es immer noch nicht.


    Wenn ich den Server starte kommt diese Errorline:

    Code
    [20:15:54] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1000',  `Color1` int(11) NOT NULL DEFAULT '0',  `Color2` int(11) NOT NULL DEFAU' at line 1

    Kannst du mir eventuell erklären was ich daraus an Informationen entnehmen kann?

  • Sorry vergessen, ich denke er meint etwas in diesem Abschnitt:



    CreateFVTable()
    {
    new query[512];
    format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS `FracVehicles` (");
    format(query, sizeof(query), "%s`ID` int(11) NOT NULL PRIMARY KEY,", query);
    format(query, sizeof(query), "%s `ModelID` int(11) NOT NULL DEFAULT '0',", query);
    format(query, sizeof(query), "%s `Gekauft` int(11) NOT NULL DEFAULT '1',", query);
    format(query, sizeof(query), "%s `Zerstoert` int(11) NOT NULL DEFAULT '0',", query);
    format(query, sizeof(query), "%s `PosX` float NOT NULL DEFAULT '0',", query);
    format(query, sizeof(query), "%s `PosY` float NOT NULL DEFAULT '0',", query);
    format(query, sizeof(query), "%s `PosZ` float NOT NULL DEFAULT '0',", query);
    format(query, sizeof(query), "%s `PosA` float NOT NULL DEFAULT '0',", query);
    format(query, sizeof(query), "%s `CarHealth` float NOT NULL DEFALUT '1000',", query);
    format(query, sizeof(query), "%s `Color1` int(11) NOT NULL DEFAULT '0',", query);
    format(query, sizeof(query), "%s `Color2` int(11) NOT NULL DEFAULT '0',", query);
    format(query, sizeof(query), "%s `FracID` int(11) NOT NULL DEFAULT '-1',", query);
    format(query, sizeof(query), "%s) ENGINE=InnoDB DEFAULT CHARSET=latin1;", query);



    //handle = die Connection Handle ID die vor mysql_connect steht.
    mysql_tquery(handle, query);
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Anhand der Fehlermeldung erkennst du ja, dass vor Color1 ein Fehler sein muss. Dann kannst du dort nachschauen.


    Dadurch sehe ich, dass hier ein Schreibfehler ist:
    format(query, sizeof(query), "%s `CarHealth` float NOT NULL DEFALUT '1000',", query);
    DEFALUT zu DEFAULT ändern, dann passt es.

  • Ah okey, dann weiß ich in Zukunft wie ich diese Fehler zu verstehen habe, vielen Dank.
    Ein Problem ist nun das mir beim Starten immernoch ein Error gezeigt wird welcher wie folgt aussieht:

    Code
    [20:34:15] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1

    Den kann ich mir nun wirklich nicht erklären. Und wüsste auch nicht wo ich da nach dem Fehler schauen müsste. Mfg

  • Dazu musst du den Debug Modus einschalten, um zu sehen, welches Query abgesendet wird.
    mysql_log(LOG_ALL);


    Dann lasse dir den Fehler nochmal ausgeben, und schaue welches Query zuvor im MySQL Log steht. Entsprechend kannst du dann den Code posten bzw. anschauen.
    Bei der Fehlermeldung ist es schwieriger den Fehler zu finden, da keine Position angegeben wird.

  • Okey, habe den Debugmodus angeschaltet und daraufhin den Server gestartet. Dann erscheint folgendes in der mysql_log Datei:



    GEAENDERT steht da oben nur da ich meine Daten da raus entfernt habe. Wie man sieht startet er die Verbindung baut sich auf zeigt einen Error und lädt dann ganz normal die Sachen. Schlauer bin ich daraus noch nicht geworden :P

  • Der Log zeigt, dass der Fehler beim CREATE TABLE Query sein sollte. Durch genaues Hinschauen und die Erfahrung ist mir dann aufgefallen, dass bei der letzten Spalte ein Komma am Ende ist, das darf da nicht sein.


    format(query, sizeof(query), "%s `FracID` int(11) NOT NULL DEFAULT '-1',", query);
    Zu
    format(query, sizeof(query), "%s `FracID` int(11) NOT NULL DEFAULT '-1'", query);

  • Ja hatte getestet ob es vielleicht daran liegt und dann vergessen wieder zu löschen.


    Also wenn ich in Fahrzeug erstelle schreibt er mir folgendes in die mysql_log Datei:


    Der /fferstellen Befehl sieht so aus:

    ocmd:fferstellen(playerid, params[])
    {
    //Zuerst fragen wir ab, ob wir noch Fahrzeuge erstellen können
    if(GetVehicleModel(MAX_VEHICLES-1) != 0) return SendClientMessage(playerid, 0xFF0000FF, "Es können keine weiteren Fahrzeuge erstellt werden, Limit (MAX_VEHICLES) erreicht.");



    //Wir deklarieren die benötigten temporären Variablen.
    new tmp[20], idx, model, fID, color1 = -1, color2 = -1;



    //Anschließend teilen wir mit strtok die eingegebenen Paramater auf und wandeln sie in eine Zahl um.
    //Falls etwas falsches eingegeben wurde, geben wir eine entsprechende Meldung zurück.
    tmp = strtok(params, idx);
    if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
    model = strval(tmp);
    //Eine solche Abfrage kann man auch für nachfolgende FraktionsID (fID) machen, falls gewünscht.
    if(model < 400 || model > 611) return SendClientMessage(playerid, 0xFF0000FF, "Error: Model ID existiert nicht.");
    tmp = strtok(params, idx);
    if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
    fID = strval(tmp);
    tmp = strtok(params, idx);
    if(strlen(tmp) && IsNumeric(tmp)) color1 = strval(tmp);
    tmp = strtok(params, idx);
    if(strlen(tmp) && IsNumeric(tmp)) color2 = strval(tmp);



    //Sind alle Parameter korrekt übergeben worden, dann suchen wir uns einen freien Index in den wir das Fraktions-Fahrzeug speichern können.
    for(new i=0; i<MAX_FRAC_VEHICLES; i++)
    {
    //Frei:
    if(fracVehicle[i][e_vID] == 0)
    {
    //Daten werden übergeben
    new Float:x, Float:y, Float:z, Float:a;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    fracVehicle[i][e_modelID] = model;
    fracVehicle[i][e_gekauft] = 1;
    fracVehicle[i][e_zerstoert] = 0;
    fracVehicle[i][e_x] = x;
    fracVehicle[i][e_y] = y;
    fracVehicle[i][e_z] = z;
    fracVehicle[i][e_a] = a;
    fracVehicle[i][carheal] = 1000;
    fracVehicle[i][e_color1] = color1;
    fracVehicle[i][e_color2] = color2;
    fracVehicle[i][e_fracID] = fID;



    //und anschließend in die Datenbank geschrieben.
    new query[512];
    format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, Gekauft, Zerstoert, PosX, PosY, PosZ, PosA, CarHealth, Color1, Color2, FracID) VALUES ('%d', '%d', '%d, '%d', '%f', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
    i, fracVehicle[i][e_modelID], fracVehicle[i][e_gekauft], fracVehicle[i][e_zerstoert], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][carheal], fracVehicle[i][e_color1], fracVehicle[i][e_color2], fracVehicle[i][e_fracID]);
    mysql_tquery(handle, query);



    //Zuletzt wird dann noch das Fahrzeug erstellt und der Spieler in das Fahrzeug gesetzt.
    fracVehicle[i][e_vID] = CreateVehicle(fracVehicle[i][e_modelID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][e_color1], fracVehicle[i][e_color2], -1);
    SetVehicleHealth(fracVehicle[i][e_vID],fracVehicle[i][carheal]);
    PutPlayerInVehicle(playerid, fracVehicle[i][e_vID], 0);
    return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gespeichert.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Error: Limit für Fraktions-Fahrzeuge erreicht.");
    }

  • format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, Gekauft, Zerstoert, PosX, PosY, PosZ, PosA, CarHealth, Color1, Color2, FracID) VALUES ('%d', '%d', '%d, '%d', '%f', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
    Zu
    format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, Gekauft, Zerstoert, PosX, PosY, PosZ, PosA, CarHealth, Color1, Color2, FracID) VALUES ('%d', '%d', '%d', '%d', '%f', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",


    Beim dritten %d hat ein ' gefehlt.

  • Wow da muss man ja wirklich genau schauen, vielen Dank für die Mühe. Jetzt wird wieder alles gespeichert wie es soll. Vielen Dank.


    Eine kleine Frage nebenbei noch:
    Würde das funktionieren wenn die FracCars geladen werden?:

    if(fracVehicle[id][e_modelID] >= 400 && fracVehicle[id][e_modelID] <= 611)
    {
    if(fracVehicle[id][e_gekauft] == 1)
    {
    //Nachdem das Fahrzeug geladen wurde, wird es erstellt.
    fracVehicle[id][e_vID] = CreateVehicle(fracVehicle[id][e_modelID], fracVehicle[id][e_x], fracVehicle[id][e_y], fracVehicle[id][e_z], fracVehicle[id][e_a], fracVehicle[id][e_color1], fracVehicle[id][e_color2], -1);
    SetVehicleHealth(fracVehicle[id][e_vID],fracVehicle[id][carheal]);
    }
    }
    else
    {
    //Falls eine nicht existierende Model-ID angegeben wurde, geben wir eine Information aus.
    printf("[Error] Model-ID %d existiert nicht (ID: %d).", fracVehicle[id][e_modelID], id);
    }
    }