[jTuT] Fraktions-Fahrzeug-System mit MySQL R39-5

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

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

      C-Quellcode

      1. new query[256];
      2. format(query, sizeof(query), "UPDATE FracVehicles SET tuning0 = %d", GetVehicleComponentInSlot(fracVehicle[i][e_vID] , 0));
      3. for(new s=1; s<14; s++)
      4. {
      5. format(query, sizeof(query), "%s, tuning%d = %d ", query, s, GetVehicleComponentInSlot(fracVehicle[i][e_vID] , s));
      6. }
      7. format(query, sizeof(query), "%sWHERE ID = %d", query, i);
      8. mysql_pquery(db, query);
      In der Tabelle musst du dann die Attribute tuning0, tuning1, ... tuning13 anlegen.

      Dieser Beitrag wurde bereits 1 mal 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?

      PAWN-Quellcode

      1. enum fracVehEnum
      2. {
      3. e_modelID,
      4. e_gekauft,
      5. e_zerstoert,
      6. Float:e_x,
      7. Float:e_y,
      8. Float:e_z,
      9. Float:e_a,
      10. Float:carheal,
      11. e_color1,
      12. e_color2,
      13. e_fracID,
      14. e_vID
      15. };
      Alles anzeigen

      Hier die Publics:

      PAWN-Quellcode

      1. public LoadFracVehicles_Data()
      2. {
      3. //Deklaration neuer temporärer Variablen:
      4. new rows, id, createdVehs;
      5. //Anzahl der gelesenen Datensätze abfragen:
      6. rows = cache_num_rows();
      7. //Schleife durch alle Datensätze:
      8. for(new i=0; i<rows; i++)
      9. {
      10. //Fahrzeug existiert in der Datenbank, wir laden die Daten jetzt aus dem Cache.
      11. id = cache_get_field_content_int(i, "ID");
      12. //Um Fehler bei der Verarbeitung zu vermeiden:
      13. if(id < 0 || id >= MAX_FRAC_VEHICLES) continue;
      14. //Danach die restlichen Daten laden. Unser Index (der Wert mit dem wir auf das
      15. //Fahrzeug in der Datenbank zugreifen) ist die "ID".
      16. fracVehicle[id][e_modelID] = cache_get_field_content_int(i, "ModelID");
      17. fracVehicle[id][e_gekauft] = cache_get_field_content_int(i, "Gekauft");
      18. fracVehicle[id][e_zerstoert] = cache_get_field_content_int(i, "Zerstoert");
      19. fracVehicle[id][e_x] = cache_get_field_content_float(i, "PosX");
      20. fracVehicle[id][e_y] = cache_get_field_content_float(i, "PosY");
      21. fracVehicle[id][e_z] = cache_get_field_content_float(i, "PosZ");
      22. fracVehicle[id][e_a] = cache_get_field_content_float(i, "PosA");
      23. fracVehicle[id][carheal] = cache_get_field_content_float(i, "CarHealth");
      24. fracVehicle[id][e_color1] = cache_get_field_content_int(i, "Color1");
      25. fracVehicle[id][e_color2] = cache_get_field_content_int(i, "Color2");
      26. fracVehicle[id][e_fracID] = cache_get_field_content_int(i, "FracID");
      27. //Zur Sicherheit fragen wir hier nun ab, ob das angegebene Modell auch existiert,
      28. //sollte das nicht der Fall sein, dann wird das Fahrzeug nicht erstellt.
      29. if(fracVehicle[id][e_modelID] >= 400 && fracVehicle[id][e_modelID] <= 611)
      30. {
      31. if(fracVehicle[id][e_gekauft] == 1)
      32. {
      33. //Nachdem das Fahrzeug geladen wurde, wird es erstellt.
      34. 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);
      35. SetVehicleHealth(fracVehicle[id][e_vID],fracVehicle[id][carheal]);
      36. }
      37. else
      38. {
      39. //Falls eine nicht existierende Model-ID angegeben wurde, geben wir eine Information aus.
      40. printf("[Error] Model-ID %d existiert nicht (ID: %d).", fracVehicle[id][e_modelID], id);
      41. }
      42. }
      43. //Zur Sicherheit fragen wir noch ab, ob das Fahrzeug-Limit noch nicht überschritten wurde.
      44. //Existiert ein Fahrzeug mit der höchsten ID, dann kann kein weiteres mehr erstellt werden.
      45. if(GetVehicleModel(MAX_VEHICLES-1) != 0) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_VEHICLES) erreicht.");
      46. //Zur weiteren Sicherheit prüfen wir noch, ob die maximale Anzahl an Fraktions-Fahrzeugen erreicht ist.
      47. createdVehs++;
      48. if(createdVehs == MAX_FRAC_VEHICLES) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_FRAC_VEHICLES) erreicht.");
      49. }
      50. return 1;
      51. }
      52. public SaveAllFracVehs()
      53. {
      54. //Deklaration neuer temporärer Variablen:
      55. new query[256];
      56. //Schleife durch alle Fraktions-Fahrzeuge
      57. for(new i=0; i<MAX_FRAC_VEHICLES; i++)
      58. {
      59. //Wenn das Fahrzeug existiert
      60. if(fracVehicle[i][e_modelID] >= 400 && fracVehicle[i][e_modelID] <= 611)
      61. {
      62. //Wir fragen die Position des Fahrzeugs ab:
      63. GetVehiclePos(fracVehicle[i][e_vID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z]);
      64. GetVehicleZAngle(fracVehicle[i][e_vID], fracVehicle[i][e_a]);
      65. GetVehicleHealth(fracVehicle[i][e_vID], fracVehicle[i][carheal]);
      66. //Und wir erstellen das Query:
      67. 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'",
      68. 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);
      69. //handle = die Connection Handle ID die vor mysql_connect steht.
      70. mysql_tquery(handle, query);
      71. }
      72. }
      73. return 1;
      74. }
      Alles anzeigen

      Hier das Stock

      PAWN-Quellcode

      1. stock SaveFracVehCheck(vehicleid)
      2. {
      3. //Deklaration neuer temporärer Variablen:
      4. new query[256];
      5. //Schleife durch alle Fraktions-Fahrzeuge
      6. for(new i=0; i<MAX_FRAC_VEHICLES; i++)
      7. {
      8. //Wenn die vehicleid die gleiche ist, wie die des Fraktions-Fahrzeugs
      9. if(fracVehicle[i][e_vID] == vehicleid)
      10. {
      11. //Wir fragen die Position des Fahrzeugs ab:
      12. GetVehiclePos(fracVehicle[i][e_vID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z]);
      13. GetVehicleZAngle(fracVehicle[i][e_vID], fracVehicle[i][e_a]);
      14. GetVehicleHealth(fracVehicle[i][e_vID], fracVehicle[i][carheal]);
      15. //Und wir erstellen das Query:
      16. 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'",
      17. 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);
      18. //handle = die Connection Handle ID die vor mysql_connect steht.
      19. mysql_tquery(handle, query);
      20. return 1; //Es gibt ja keine zwei gleichen Fahrzeuge
      21. }
      22. }
      23. return 0; //Fahrzeug ist kein Fraktions-Fahrzeug
      24. }
      Alles anzeigen

      Und hier die Befehle:

      PAWN-Quellcode

      1. ocmd:fferstellen(playerid, params[])
      2. {
      3. //Zuerst fragen wir ab, ob wir noch Fahrzeuge erstellen können
      4. if(GetVehicleModel(MAX_VEHICLES-1) != 0) return SendClientMessage(playerid, 0xFF0000FF, "Es können keine weiteren Fahrzeuge erstellt werden, Limit (MAX_VEHICLES) erreicht.");
      5. //Wir deklarieren die benötigten temporären Variablen.
      6. new tmp[20], idx, model, fID, color1 = -1, color2 = -1;
      7. //Anschließend teilen wir mit strtok die eingegebenen Paramater auf und wandeln sie in eine Zahl um.
      8. //Falls etwas falsches eingegeben wurde, geben wir eine entsprechende Meldung zurück.
      9. tmp = strtok(params, idx);
      10. if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
      11. model = strval(tmp);
      12. //Eine solche Abfrage kann man auch für nachfolgende FraktionsID (fID) machen, falls gewünscht.
      13. if(model < 400 || model > 611) return SendClientMessage(playerid, 0xFF0000FF, "Error: Model ID existiert nicht.");
      14. tmp = strtok(params, idx);
      15. if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
      16. fID = strval(tmp);
      17. tmp = strtok(params, idx);
      18. if(strlen(tmp) && IsNumeric(tmp)) color1 = strval(tmp);
      19. tmp = strtok(params, idx);
      20. if(strlen(tmp) && IsNumeric(tmp)) color2 = strval(tmp);
      21. //Sind alle Parameter korrekt übergeben worden, dann suchen wir uns einen freien Index in den wir das Fraktions-Fahrzeug speichern können.
      22. for(new i=0; i<MAX_FRAC_VEHICLES; i++)
      23. {
      24. //Frei:
      25. if(fracVehicle[i][e_vID] == 0)
      26. {
      27. //Daten werden übergeben
      28. new Float:x, Float:y, Float:z, Float:a;
      29. GetPlayerPos(playerid, x, y, z);
      30. GetPlayerFacingAngle(playerid, a);
      31. fracVehicle[i][e_modelID] = model;
      32. fracVehicle[i][e_gekauft] = 1;
      33. fracVehicle[i][e_zerstoert] = 0;
      34. fracVehicle[i][e_x] = x;
      35. fracVehicle[i][e_y] = y;
      36. fracVehicle[i][e_z] = z;
      37. fracVehicle[i][e_a] = a;
      38. fracVehicle[i][carheal] = 1000;
      39. fracVehicle[i][e_color1] = color1;
      40. fracVehicle[i][e_color2] = color2;
      41. fracVehicle[i][e_fracID] = fID;
      42. //und anschließend in die Datenbank geschrieben.
      43. new query[256];
      44. 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')",
      45. 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]);
      46. mysql_tquery(handle, query);
      47. //Zuletzt wird dann noch das Fahrzeug erstellt und der Spieler in das Fahrzeug gesetzt.
      48. 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);
      49. SetVehicleHealth(fracVehicle[i][e_vID],fracVehicle[i][carheal]);
      50. PutPlayerInVehicle(playerid, fracVehicle[i][e_vID], 0);
      51. return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gespeichert.");
      52. }
      53. }
      54. return SendClientMessage(playerid, 0xFF0000FF, "Error: Limit für Fraktions-Fahrzeuge erreicht.");
      55. }
      56. ocmd:ffloeschen(playerid, params[])
      57. {
      58. //Wir deklarieren die benötigte temporäre Variable.
      59. new vid;
      60. //Wenn der Spieler keine Vehicle-ID eingibt wird die gelöscht, in der sich der Spieler befindet,
      61. //ansonsten die eingegebene ID.
      62. if(!IsNumeric(params) || !strlen(params)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Nutze: /ffloeschen [Vehicle ID]");
      63. vid = strval(params);
      64. if(vid <= 0) return SendClientMessage(playerid, 0xFF0000FF, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");
      65. for(new i=0; i<MAX_FRAC_VEHICLES; i++)
      66. {
      67. //Eingegebene ID und die des Fraktions-Fahrzeugs stimmen überein.
      68. if(fracVehicle[i][e_vID] == vid)
      69. {
      70. //Daten werden entfernt
      71. fracVehicle[i][e_modelID] = 0;
      72. fracVehicle[i][e_gekauft] = 0;
      73. fracVehicle[i][e_zerstoert] = 0;
      74. fracVehicle[i][e_x] = 0.0;
      75. fracVehicle[i][e_y] = 0.0;
      76. fracVehicle[i][e_z] = 0.0;
      77. fracVehicle[i][e_a] = 0.0;
      78. fracVehicle[i][carheal] = 0.0;
      79. fracVehicle[i][e_color1] = 0;
      80. fracVehicle[i][e_color2] = 0;
      81. fracVehicle[i][e_fracID] = -1;
      82. //und anschließend in der Datenbank gelöscht.
      83. new query[128];
      84. format(query, sizeof(query), "DELETE FROM FracVehicles WHERE ID = '%d'", i);
      85. mysql_tquery(handle, query);
      86. DestroyVehicle(fracVehicle[i][e_vID]);
      87. fracVehicle[i][e_vID] = 0;
      88. return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gelöscht.");
      89. }
      90. }
      91. return SendClientMessage(playerid, 0xFF0000FF, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");
      92. }
      93. ocmd:parken(playerid)
      94. {
      95. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "Du bist in keinem Fahrzeug.");
      96. new vehicleid = GetPlayerVehicleID(playerid);
      97. if(SaveFracVehCheck(vehicleid)) return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug geparkt.");
      98. else return SendClientMessage(playerid, 0xFF0000FF, "Dieses Fahrzeug kann nicht geparkt werden.");
      99. }
      Alles anzeigen


      Hoffe du kannst mir helfen, mit freundlichem Gruß,
      SebMcpepp
    • PAWN-Quellcode

      1. 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:

      PAWN-Quellcode

      1. 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:

      Quellcode

      1. [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:

      PAWN-Quellcode

      1. CreateFVTable()
      2. {
      3. new query[512];
      4. format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS `FracVehicles` (");
      5. format(query, sizeof(query), "%s`ID` int(11) NOT NULL PRIMARY KEY,", query);
      6. format(query, sizeof(query), "%s `ModelID` int(11) NOT NULL DEFAULT '0',", query);
      7. format(query, sizeof(query), "%s `Gekauft` int(11) NOT NULL DEFAULT '1',", query);
      8. format(query, sizeof(query), "%s `Zerstoert` int(11) NOT NULL DEFAULT '0',", query);
      9. format(query, sizeof(query), "%s `PosX` float NOT NULL DEFAULT '0',", query);
      10. format(query, sizeof(query), "%s `PosY` float NOT NULL DEFAULT '0',", query);
      11. format(query, sizeof(query), "%s `PosZ` float NOT NULL DEFAULT '0',", query);
      12. format(query, sizeof(query), "%s `PosA` float NOT NULL DEFAULT '0',", query);
      13. format(query, sizeof(query), "%s `CarHealth` float NOT NULL DEFALUT '1000',", query);
      14. format(query, sizeof(query), "%s `Color1` int(11) NOT NULL DEFAULT '0',", query);
      15. format(query, sizeof(query), "%s `Color2` int(11) NOT NULL DEFAULT '0',", query);
      16. format(query, sizeof(query), "%s `FracID` int(11) NOT NULL DEFAULT '-1',", query);
      17. format(query, sizeof(query), "%s) ENGINE=InnoDB DEFAULT CHARSET=latin1;", query);
      18. //handle = die Connection Handle ID die vor mysql_connect steht.
      19. mysql_tquery(handle, query);
      20. return 1;
      21. }
      Alles anzeigen

    • 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:

      PAWN-Quellcode

      1. 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:

      Quellcode

      1. [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.

      PAWN-Quellcode

      1. 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:


      Quellcode

      1. [20:44:05] [DEBUG] mysql_connect - host: "GEAENDERT", user: "GEAENDERT", database: "GEAENDERT", password: "GEAENDERT", port: GEAENDERT, autoreconnect: true, pool_size: 2
      2. [20:44:05] [DEBUG] CMySQLHandle::Create - creating new connection..
      3. [20:44:05] [DEBUG] CMySQLHandle::CMySQLHandle - constructor called
      4. [20:44:05] [DEBUG] CMySQLHandle::Create - connection created (id: 1)
      5. [20:44:05] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
      6. [20:44:05] [DEBUG] CMySQLConnection::Connect - connection was successful
      7. [20:44:05] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
      8. [20:44:05] [DEBUG] mysql_errno - connection: 1
      9. [20:44:05] [DEBUG] mysql_tquery - connection: 1, query: "CREATE TABLE IF NOT EXISTS `FracVehicles` (`ID` int(11) NOT NULL", callback: "(null)", format: "(null)"
      10. [20:44:05] [DEBUG] mysql_tquery - connection: 1, query: "SELECT * FROM FracVehicles ORDER BY ID ASC", callback: "LoadFracVehicles_Data", format: "(null)"
      11. [20:44:05] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
      12. [20:44:05] [DEBUG] CMySQLConnection::Connect - connection was successful
      13. [20:44:05] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
      14. [20:44:05] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
      15. [20:44:05] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
      16. [20:44:05] [DEBUG] CMySQLQuery::Execute[] - starting query execution
      17. [20:44:05] [DEBUG] CMySQLConnection::Connect - connection was successful
      18. [20:44:05] [DEBUG] CMySQLConnection::Connect - connection was successful
      19. [20:44:05] [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
      20. [20:44:05] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
      21. [20:44:05] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
      22. [20:44:05] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError
      23. [20:44:05] [DEBUG] CMySQLQuery::Execute[LoadFracVehicles_Data] - starting query execution
      24. [20:44:05] [DEBUG] CMySQLQuery::Execute[LoadFracVehicles_Data] - query was successfully executed within 0.656 milliseconds
      25. [20:44:05] [DEBUG] CMySQLResult::CMySQLResult() - constructor called
      26. [20:44:05] [DEBUG] Calling callback "LoadFracVehicles_Data"..
      27. [20:44:05] [DEBUG] cache_get_row_count - connection: 1
      28. [20:44:05] [DEBUG] cache_get_field_content_int - row: 0, field_name: "ID", connection: 1
      29. [20:44:05] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "ID", data: "0"
      Alles anzeigen
      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.

      PAWN-Quellcode

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

      Zu

      PAWN-Quellcode

      1. 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:

      Quellcode

      1. [21:10:44] [DEBUG] CMySQLQuery::Execute[] - starting query execution
      2. [21:10:44] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 1.240 milliseconds
      3. [21:10:44] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving
      4. [21:10:55] [DEBUG] mysql_tquery - connection: 1, query: "INSERT INTO FracVehicles (ID, ModelID, Gekauft, Zerstoert, PosX,", callback: "(null)", format: "(null)"
      5. [21:10:55] [DEBUG] CMySQLQuery::Execute[] - starting query execution
      6. [21:10:55] [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 '0', '-1988.578125', '200.177536', '27.687500', '0.000000', '1000.000000', '3', '' at line 1
      7. [21:10:55] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError
      8. [21:11:12] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE FracVehicles SET ModelID = '407', Gekauft = '1', Zerstoer", callback: "(null)", format: "(null)"
      9. [21:11:12] [DEBUG] CMySQLQuery::Execute[] - starting query execution
      10. [21:11:12] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 0.488 milliseconds
      11. [21:11:12] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving
      Alles anzeigen
      Der /fferstellen Befehl sieht so aus:

      PAWN-Quellcode

      1. ocmd:fferstellen(playerid, params[])
      2. {
      3. //Zuerst fragen wir ab, ob wir noch Fahrzeuge erstellen können
      4. if(GetVehicleModel(MAX_VEHICLES-1) != 0) return SendClientMessage(playerid, 0xFF0000FF, "Es können keine weiteren Fahrzeuge erstellt werden, Limit (MAX_VEHICLES) erreicht.");
      5. //Wir deklarieren die benötigten temporären Variablen.
      6. new tmp[20], idx, model, fID, color1 = -1, color2 = -1;
      7. //Anschließend teilen wir mit strtok die eingegebenen Paramater auf und wandeln sie in eine Zahl um.
      8. //Falls etwas falsches eingegeben wurde, geben wir eine entsprechende Meldung zurück.
      9. tmp = strtok(params, idx);
      10. if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
      11. model = strval(tmp);
      12. //Eine solche Abfrage kann man auch für nachfolgende FraktionsID (fID) machen, falls gewünscht.
      13. if(model < 400 || model > 611) return SendClientMessage(playerid, 0xFF0000FF, "Error: Model ID existiert nicht.");
      14. tmp = strtok(params, idx);
      15. if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
      16. fID = strval(tmp);
      17. tmp = strtok(params, idx);
      18. if(strlen(tmp) && IsNumeric(tmp)) color1 = strval(tmp);
      19. tmp = strtok(params, idx);
      20. if(strlen(tmp) && IsNumeric(tmp)) color2 = strval(tmp);
      21. //Sind alle Parameter korrekt übergeben worden, dann suchen wir uns einen freien Index in den wir das Fraktions-Fahrzeug speichern können.
      22. for(new i=0; i<MAX_FRAC_VEHICLES; i++)
      23. {
      24. //Frei:
      25. if(fracVehicle[i][e_vID] == 0)
      26. {
      27. //Daten werden übergeben
      28. new Float:x, Float:y, Float:z, Float:a;
      29. GetPlayerPos(playerid, x, y, z);
      30. GetPlayerFacingAngle(playerid, a);
      31. fracVehicle[i][e_modelID] = model;
      32. fracVehicle[i][e_gekauft] = 1;
      33. fracVehicle[i][e_zerstoert] = 0;
      34. fracVehicle[i][e_x] = x;
      35. fracVehicle[i][e_y] = y;
      36. fracVehicle[i][e_z] = z;
      37. fracVehicle[i][e_a] = a;
      38. fracVehicle[i][carheal] = 1000;
      39. fracVehicle[i][e_color1] = color1;
      40. fracVehicle[i][e_color2] = color2;
      41. fracVehicle[i][e_fracID] = fID;
      42. //und anschließend in die Datenbank geschrieben.
      43. new query[512];
      44. 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')",
      45. 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]);
      46. mysql_tquery(handle, query);
      47. //Zuletzt wird dann noch das Fahrzeug erstellt und der Spieler in das Fahrzeug gesetzt.
      48. 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);
      49. SetVehicleHealth(fracVehicle[i][e_vID],fracVehicle[i][carheal]);
      50. PutPlayerInVehicle(playerid, fracVehicle[i][e_vID], 0);
      51. return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gespeichert.");
      52. }
      53. }
      54. return SendClientMessage(playerid, 0xFF0000FF, "Error: Limit für Fraktions-Fahrzeuge erreicht.");
      55. }
      Alles anzeigen
    • PAWN-Quellcode

      1. 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

      PAWN-Quellcode

      1. 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?:

      PAWN-Quellcode

      1. if(fracVehicle[id][e_modelID] >= 400 && fracVehicle[id][e_modelID] <= 611)
      2. {
      3. if(fracVehicle[id][e_gekauft] == 1)
      4. {
      5. //Nachdem das Fahrzeug geladen wurde, wird es erstellt.
      6. 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);
      7. SetVehicleHealth(fracVehicle[id][e_vID],fracVehicle[id][carheal]);
      8. }
      9. }
      10. else
      11. {
      12. //Falls eine nicht existierende Model-ID angegeben wurde, geben wir eine Information aus.
      13. printf("[Error] Model-ID %d existiert nicht (ID: %d).", fracVehicle[id][e_modelID], id);
      14. }
      15. }
      Alles anzeigen