Da ist an sich nichts falsch. Poste mal den MySQL Log, wenn du die ID 0 löschst.
Autohaus Problem
- ENEF
- Geschlossen
- Erledigt
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
-
-
Sorry, ist doch nicht ID 0, es ist nur das letzte Fahrzeug bzw das einzigste.
Jetzt ist es grad ID 2 und es wird glaub dann die ID 0 gelöscht?SQL[12:33:59] [DEBUG] CMySQLResult::~CMySQLResult() - deconstructor called [12:34:12] [DEBUG] mysql_tquery - connection: 1, query: "DELETE FROM Cars WHERE ID = '0'", callback: "(null)", format: "(null)" [12:34:13] [DEBUG] CMySQLQuery::Execute[] - starting query execution [12:34:13] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 0.489 milliseconds [12:34:13] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving
//Edit:
Ich weiß jetzt wo der Fehler liegt/lag
Ich hab ein /versichern befehl zum Testen gemacht, für ein späteres System.
Der soll dann in dem Auto wo man sitzt und das einem gehört die Versicherung ändern.
Und jenachdem welche man hat wird das Fahrzeug halt gelöscht oder nicht und ich merke gerade das der Versicherungsbefehl nur bei ID 0 versichert egal in welchem Auto man sitzt
Spoiler anzeigen ocmd:versichern(playerid)
{
new vrs[128];
for(new i=0; i<MAX_AUTOS; i++)
{
CarInfo[i][c_Versicherung] = 1;
format(vrs, sizeof(vrs), "%s hat den Wagen(Modell: %d) auf Versicherungsstufe %d versichert.", CarInfo[i][Besitzer], CarInfo[i][modelID], CarInfo[i][c_Versicherung]);
SendClientMessage(playerid, info, vrs);
return 1;
}
return 1;
}
Ich bekomme immer 'Niemand' hat den Wagen.....' egal in welchem Auto, weil er es immer aus ID0 ausliest und ich hab bsp ID2 gekauft.
Jeffry:Mit freundlichen Grüßen
-
ocmd:versichern(playerid)
{
new vrs[128], veh = GetPlayerVehicleID(playerid);
if(!veh) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du musst in einem Fahrzeug sein.");
for(new i=0; i<MAX_AUTOS; i++)
{
if(CarInfo[i][c_vID] != veh) continue;
CarInfo[i][c_Versicherung] = 1;
format(vrs, sizeof(vrs), "%s hat den Wagen(Modell: %d) auf Versicherungsstufe %d versichert.", CarInfo[i][Besitzer], CarInfo[i][modelID], CarInfo[i][c_Versicherung]);
SendClientMessage(playerid, info, vrs);
return 1;
}
return 1;
}Geht das andere jetzt?
-
Hi,
danke, das Versichern funktioniert nun!^^
Ab und zu ist es so, dass ich bsp die ID 2 nicht löschen kann.
Aber das auch nur, wenn ID 2 als einzigste in der DB ist, dann will das System nämlich immer ID0 löschen.Mit freundlichen Grüßen
-
Ohja, ich merke grade, das das ein Fehler in meinem Tutorial ist.
Das hatte ich so gar nie getestet.Poste bitte den Code mit dem du die Fahrzeuge aus der Datenbank lädst, den aktuellsten. Und einen Screenshot von der Tabelle aus der Datenbank, dann mache ich dir das kurz.
Den Fehler im Tutorial repariere ich dann natürlich sofort, wenn es bei dir geht. -
Fehler können passieren
Hier mal LoadCars_Data
Spoiler anzeigen forward LoadCars_Data();
public LoadCars_Data()
{Spoiler anzeigen new rows;
rows = cache_num_rows();
for(new i=0; i<rows; i++)
{
cache_get_field_content(i, "Besitzer", CarInfo[i][Besitzer],handle,34);
CarInfo[i][modelID] = cache_get_field_content_int(i, "ModelID");
CarInfo[i][c_x] = cache_get_field_content_float(i, "PosX");
CarInfo[i][c_y] = cache_get_field_content_float(i, "PosY");
CarInfo[i][c_z] = cache_get_field_content_float(i, "PosZ");
CarInfo[i][c_a] = cache_get_field_content_float(i, "PosA");
CarInfo[i][c_color1] = cache_get_field_content_int(i, "Color1");
CarInfo[i][c_color2] = cache_get_field_content_int(i, "Color2");
CarInfo[i][c_Preis] = cache_get_field_content_int(i, "Preis");
CarInfo[i][c_Gekauft] = cache_get_field_content_int(i, "Gekauft");
CarInfo[i][c_Versicherung] = cache_get_field_content_int(i, "Versicherung");Spoiler anzeigen if(CarInfo[i][modelID] >= 400 && CarInfo[i][modelID] <= 611)
{
new text[64];
CarInfo[i][c_vID] = CreateVehicle(CarInfo[i][modelID], CarInfo[i][c_x], CarInfo[i][c_y], CarInfo[i][c_z], CarInfo[i][c_a], CarInfo[i][c_color1], CarInfo[i][c_color2], -1);
format(text, sizeof(text), "Besitzer: %s\nKaufpreis: %d\nReparier Kosten: %d",CarInfo[i][Besitzer],CarInfo[i][c_Preis], CarInfo[i][c_Preis] / 10);
CarInfo[i][Carlable] = Create3DTextLabel(text,0x0FFF00FF,CarInfo[i][c_x], CarInfo[i][c_y], CarInfo[i][c_z],20.0,0,1);
Attach3DTextLabelToVehicle(CarInfo[i][Carlable],CarInfo[i][modelID], 0.0, 0.0, 2.0);
}
else
{
printf("[Error] Model-ID %d existiert nicht (ID: %d).", CarInfo[i][modelID], i);
}
if(GetVehicleModel(MAX_VEHICLES-1) != 0) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_VEHICLES) erreicht.");Spoiler anzeigen if(i == MAX_AUTOS-1) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_AUTOS) erreicht.");
}
return 1;
}Und Screen :p
Mit freundlichen Grüßen
-
Teste es bitte so:
Spoiler anzeigen forward LoadCars_Data();
public LoadCars_Data()
{
new rows, id, createdVehs;
rows = cache_num_rows();
for(new i=0; i<rows; i++)
{
id = cache_get_field_content_int(i, "id");
if(id < 0 || id >= sizeof(CarInfo)) continue;
cache_get_field_content(i, "Besitzer", CarInfo[id][Besitzer],handle,34);
CarInfo[id][modelID] = cache_get_field_content_int(i, "ModelID");
CarInfo[id][c_x] = cache_get_field_content_float(i, "PosX");
CarInfo[id][c_y] = cache_get_field_content_float(i, "PosY");
CarInfo[id][c_z] = cache_get_field_content_float(i, "PosZ");
CarInfo[id][c_a] = cache_get_field_content_float(i, "PosA");
CarInfo[id][c_color1] = cache_get_field_content_int(i, "Color1");
CarInfo[id][c_color2] = cache_get_field_content_int(i, "Color2");
CarInfo[id][c_Preis] = cache_get_field_content_int(i, "Preis");
CarInfo[id][c_Gekauft] = cache_get_field_content_int(i, "Gekauft");
CarInfo[id][c_Versicherung] = cache_get_field_content_int(i, "Versicherung");
if(CarInfo[id][modelID] >= 400 && CarInfo[id][modelID] <= 611)
{
new text[64];
CarInfo[id][c_vID] = CreateVehicle(CarInfo[id][modelID], CarInfo[id][c_x], CarInfo[id][c_y], CarInfo[id][c_z], CarInfo[id][c_a], CarInfo[id][c_color1], CarInfo[id][c_color2], -1);
format(text, sizeof(text), "Besitzer: %s\nKaufpreis: %d\nReparier Kosten: %d",CarInfo[id][Besitzer],CarInfo[id][c_Preis], CarInfo[id][c_Preis] / 10);
CarInfo[id][Carlable] = Create3DTextLabel(text,0x0FFF00FF,CarInfo[id][c_x], CarInfo[id][c_y], CarInfo[id][c_z],20.0,0,1);
Attach3DTextLabelToVehicle(CarInfo[id][Carlable],CarInfo[id][modelID], 0.0, 0.0, 2.0);
}
else
{
printf("[Error] Model-ID %d existiert nicht (ID: %d).", CarInfo[id][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_AUTOS) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_AUTOS) erreicht.");
}
return 1;
}
Dann dürfte es gehen.
-
Mir wird jetzt immer bei jedem Auto den Besitzer von ID 0 angezeigt.^^
Dazu kommt, dass ID 2(eigentlich Model 411) als Model 560 gespawnt wird und auch bei der Position von ID 0 (Also übereinander)
Aber in der Datenbank steht es noch richtigMit freundlichen Grüßen
-
Das mit dem Owner sollte jetzt passen, hatte dort das id vergessen, kopiere den Code von oben nochmal.
Löst das auch das Problem mit den Models? Das kann ich nämlich so nicht direkt nachvollziehen.
EDIT:
Aufgrund der aktuellen Änderung im Tutorial hier die korrekte Version:
Spoiler anzeigen forward LoadCars_Data();
public LoadCars_Data()
{
new rows, id, createdVehs;
rows = cache_num_rows();
for(new i=0; i<rows; i++)
{
id = cache_get_field_content_int(i, "id");
if(id < 0 || id >= sizeof(CarInfo)) continue;
cache_get_field_content(i, "Besitzer", CarInfo[id][Besitzer],handle,34);
CarInfo[id][modelID] = cache_get_field_content_int(i, "ModelID");
CarInfo[id][c_x] = cache_get_field_content_float(i, "PosX");
CarInfo[id][c_y] = cache_get_field_content_float(i, "PosY");
CarInfo[id][c_z] = cache_get_field_content_float(i, "PosZ");
CarInfo[id][c_a] = cache_get_field_content_float(i, "PosA");
CarInfo[id][c_color1] = cache_get_field_content_int(i, "Color1");
CarInfo[id][c_color2] = cache_get_field_content_int(i, "Color2");
CarInfo[id][c_Preis] = cache_get_field_content_int(i, "Preis");
CarInfo[id][c_Gekauft] = cache_get_field_content_int(i, "Gekauft");
CarInfo[id][c_Versicherung] = cache_get_field_content_int(i, "Versicherung");
if(CarInfo[id][modelID] >= 400 && CarInfo[id][modelID] <= 611)
{
new text[64];
CarInfo[id][c_vID] = CreateVehicle(CarInfo[id][modelID], CarInfo[id][c_x], CarInfo[id][c_y], CarInfo[id][c_z], CarInfo[id][c_a], CarInfo[id][c_color1], CarInfo[id][c_color2], -1);
format(text, sizeof(text), "Besitzer: %s\nKaufpreis: %d\nReparier Kosten: %d",CarInfo[id][Besitzer],CarInfo[id][c_Preis], CarInfo[id][c_Preis] / 10);
CarInfo[id][Carlable] = Create3DTextLabel(text,0x0FFF00FF,CarInfo[id][c_x], CarInfo[id][c_y], CarInfo[id][c_z],20.0,0,1);
Attach3DTextLabelToVehicle(CarInfo[id][Carlable],CarInfo[id][modelID], 0.0, 0.0, 2.0);
}
else
{
printf("[Error] Model-ID %d existiert nicht (ID: %d).", CarInfo[id][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_AUTOS) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_AUTOS) erreicht.");
}
return 1;
}
-
/*Hi Jeffry,
es scheint zu funktionieren :thumbup:
Kleine Frage, da ich ja ein Versicherungssystem hinzufüge, wollte ich jetzt wissen wie ich das mache.
Du hast mir ja vorhin mein Befehl korrigiert, jedoch hast du es so gemacht, dass das Auto in dem man ist Versichert wird.
Ich wollte es jetzt aber in Dialoge umschreiben, so dass man es so macht:Man geht zu einem bestimmten Punkt zufuß und dann öffnet sich das Dialog, bis dahin hab ich es.
Dann sollen in dem Dialog die Gekauften Fahrzeuge angezeigt werden und auf das wo man klickt, bekommt man dann ein weiteres Dialog wo man die Versicherung für das Fahrzeug wählen kann.Mir ist jetzt nur unklar wie ich die gekauften Fahrzeuge anzeigen lasse, das Versichern kann ich ja selbst ^^
Mit freundlichen Grüßen*/
Komisch.. jetzt wird alles wieder komisch gespeichert und die Fahrzeuge werden manchmal trotzdem übereinander gespawnt
Ich weiß nicht mehr weiter, jetzt hatte ich 2 Super GTS gespawnt, ein Infernus und ein Sultan, einen Super GT habe ich gekauft.
Als ich jetzt den Server restartet habe, war in der Datenbank mein SuperGT wieder "Verkauft" also Besitzer war "Niemand"
Und sie spawnten an der gleichen Pos. -
-
Hast du den Code auch wirklich so wie ich es dir gemacht habe?
Kannst du die Tabelle in der Datenbank mal leeren und es dann erneut testen? Ich kann mir nicht vorstellen, dass alle diese Probleme nur durch diese kleine Änderung, die ich vorgenommen habe, auftreten, das würde keinen Sinn machen.
Bist du sicher, dass sonst alles passt, beim Speichern? -
Jo, hab grad alles nochmal getestet.
Ist immer noch gleichSchau:
Spoiler anzeigen forward SaveAllCars();
public SaveAllCars()
{
printf("Starte SaveAllCars");
new query[512];
for(new i=0; i<MAX_AUTOS; i++)
{
printf("i: %d | Model: %d | Besitzer: %s", i, CarInfo[i][modelID], CarInfo[i][Besitzer]);
if(CarInfo[i][modelID] >= 400 && CarInfo[i][modelID] <= 611)
{
printf("Gekauft: %d", CarInfo[i][c_Gekauft]);
if(CarInfo[i][c_Gekauft] == 0)
{
GetVehiclePos(CarInfo[i][c_vID], CarInfo[i][c_x], CarInfo[i][c_y], CarInfo[i][c_z]);
GetVehicleZAngle(CarInfo[i][c_vID], CarInfo[i][c_a]);
format(query, sizeof(query), "UPDATE Cars SET Besitzer = '%s',ModelID = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', Color1 = '%d', Color2 = '%d',Preis = '%d',Gekauft = '%d', Versicherung = '%d' WHERE ID = '%d'",
CarInfo[i][Besitzer],CarInfo[i][modelID], CarInfo[i][c_x], CarInfo[i][c_y], CarInfo[i][c_z], CarInfo[i][c_a], CarInfo[i][c_color1], CarInfo[i][c_color2],CarInfo[i][c_Preis],CarInfo[i][c_Gekauft], CarInfo[i][c_Versicherung], i);
mysql_tquery(handle, query);
SendClientMessageToAll(info, "Nicht gekauft Autos wurden gespeichert!");
}
if(CarInfo[i][c_Gekauft] == 1)
{
new Float:VehPos[4];
GetVehiclePos(CarInfo[i][c_vID],VehPos[0],VehPos[1],VehPos[2]);
GetVehicleZAngle(CarInfo[i][c_vID], VehPos[3]);
format(query, sizeof(query), "UPDATE Cars SET Besitzer = '%s',ModelID = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', Color1 = '%d', Color2 = '%d',Preis = '%d',Gekauft = '%d', Versicherung = '%d' WHERE ID = '%d'",
CarInfo[i][Besitzer],CarInfo[i][modelID], VehPos[0], VehPos[1], VehPos[2], VehPos[3], CarInfo[i][c_color1], CarInfo[i][c_color2],CarInfo[i][c_Preis],CarInfo[i][c_Gekauft],CarInfo[i][c_Versicherung], i);
mysql_tquery(handle, query);
SendClientMessageToAll(info, "Gekaufte Autos wurden gespeichert!");
}
}
}
SendClientMessageToAll(info, "Alle Fahrzeuge wurden gespeichert!");
printf("Fertig.");
return 1;
}Spoiler anzeigen forward LoadCars_Data();
public LoadCars_Data()
{
new rows, id, createdVehs;
rows = cache_num_rows();
for(new i=0; i<rows; i++)
{
id = cache_get_field_content_int(i, "id");
if(id < 0 || id >= sizeof(CarInfo)) continue;
cache_get_field_content(i, "Besitzer", CarInfo[id][Besitzer],handle,34);
CarInfo[id][modelID] = cache_get_field_content_int(i, "ModelID");
CarInfo[id][c_x] = cache_get_field_content_float(i, "PosX");
CarInfo[id][c_y] = cache_get_field_content_float(i, "PosY");
CarInfo[id][c_z] = cache_get_field_content_float(i, "PosZ");
CarInfo[id][c_a] = cache_get_field_content_float(i, "PosA");
CarInfo[id][c_color1] = cache_get_field_content_int(i, "Color1");
CarInfo[id][c_color2] = cache_get_field_content_int(i, "Color2");
CarInfo[id][c_Preis] = cache_get_field_content_int(i, "Preis");
CarInfo[id][c_Gekauft] = cache_get_field_content_int(i, "Gekauft");
CarInfo[id][c_Versicherung] = cache_get_field_content_int(i, "Versicherung");Spoiler anzeigen if(CarInfo[id][modelID] >= 400 && CarInfo[id][modelID] <= 611)
{
new text[64];
CarInfo[id][c_vID] = CreateVehicle(CarInfo[id][modelID], CarInfo[id][c_x], CarInfo[id][c_y], CarInfo[id][c_z], CarInfo[id][c_a], CarInfo[id][c_color1], CarInfo[id][c_color2], -1);
format(text, sizeof(text), "Besitzer: %s\nKaufpreis: %d\nReparier Kosten: %d",CarInfo[id][Besitzer],CarInfo[id][c_Preis], CarInfo[id][c_Preis] / 10);
CarInfo[id][Carlable] = Create3DTextLabel(text,0x0FFF00FF,CarInfo[id][c_x], CarInfo[id][c_y], CarInfo[id][c_z],20.0,0,1);
Attach3DTextLabelToVehicle(CarInfo[id][Carlable],CarInfo[id][c_vID], 0.0, 0.0, 2.0);
}
else
{
printf("[Error] Model-ID %d existiert nicht (ID: %d).", CarInfo[id][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_AUTOS) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_AUTOS) erreicht.");
}
return 1;
}Mit freundlichen Grüßen
/Edit:
Am Carpark kanns nicht liegen oder?
bekomme da immer ein Unknow Command
ocmd:carpark(playerid)
{
if(SpielerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid, error, "Du bist kein Admin!");
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, error, "Du bist in keinem Fahrzeug.");
new vehicleid = GetPlayerVehicleID(playerid);
if(SaveCarCheck(vehicleid)) return SendClientMessage(playerid, erfolg, "Fahrzeug geparkt."), MachtAuto[playerid] = 0;
else return SendClientMessage(playerid, error, "Dieses Fahrzeug kann nicht geparkt werden.");
} -
Dann poste bitte mal den MySQL Log der kommt, wenn die Fahrzeuge gespeichert werden (LOG_ALL).
Funktioniert es denn alles, wenn du den Schritt mit dem Kauf weg lässt? Poste dann ggf. noch den Befehl um das Fahrzeug zu kaufen.Zum Edit:
Poste bitte dein SaveCarCheck. -
Also, nach einem GMX habe ich gemerkt wird nur noch 1 Fahrzeug gespeichert und auch als ein Kaufbares Auto anerkannt.
Mein Buy Befehl ist zum Dialog geworden:Buycar if(dialogid == DIALOG_BUYCAR)
{
if(response == 1)
{
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, error, "Du bist in keinem Fahrzeug");
new vehicleid = GetPlayerVehicleID(playerid);
for(new i=0; i<MAX_AUTOS; i++)
{
if(CarInfo[i][c_vID] != vehicleid) continue;
if(CarInfo[i][c_Gekauft] == 0)
{
if(SpielerInfo[playerid][pGeld] < CarInfo[i][c_Preis]) return SendClientMessage(playerid, error, "Du hast nicht genug Geld!");
format(CarInfo[i][Besitzer], 34, "%s",SpielerName(playerid));
CarInfo[i][c_Gekauft] = 1;
GivePlayerMoney(playerid, -CarInfo[i][c_Preis]);
SendClientMessage(playerid, erfolg, "Herzlichen Glückwunsch, du hast dieses Auto gekauft!");
TogglePlayerControllable(playerid,1);
buytcar[playerid] = false;
SaveAllCars();
return 1;
}
else
{
RemovePlayerFromVehicle(playerid);
TogglePlayerControllable(playerid,1);
buytcar[playerid] = false;
SendClientMessage(playerid, error, "Dieses Auto steht nicht zum Verkauf!");
return 1;
}
}
return SendClientMessage(playerid, error, "Du bist in keinem Fahrzeug.");
}
else if(response ==0)
{
buytcar[playerid] = false;
RemovePlayerFromVehicle(playerid);
TogglePlayerControllable(playerid,1);
SendClientMessage(playerid, error, "Du hast den Vorgang abgebrochen!");
}
}MySQL Log [14:28:36] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE Cars SET Besitzer = 'Niemand',ModelID = '506', PosX = '-1944.176513', PosY = '266.577911', PosZ = '35.150806', PosA = '264.041778', Color1 = '1', Color2 = '1',Preis = '1',Gekauft = '0', Versicherung = '0' WHERE ID = '0'", callback: "(null)", format: "(null)"
[14:28:36] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[14:28:37] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 1141.587 milliseconds
[14:28:37] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving
[14:28:40] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE Cars SET Besitzer = 'Niemand',ModelID = '506', PosX = '-1944.176513', PosY = '266.577911', PosZ = '35.150806', PosA = '264.041778', Color1 = '1', Color2 = '1',Preis = '1',Gekauft = '0', Versicherung = '0' WHERE ID = '0'", callback: "(null)", format: "(null)"
[14:28:40] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[14:28:41] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 1129.50 milliseconds
[14:28:41] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving
Da ja nur noch 1 Fahrzeug von eigentlich 4 gespeichert werden(3 Kaufbare, 1 gekauftes)Und wenn ich keins Kaufe, wird halt trotzdem nur noch 1 gespeichert.
SaveCarCheck stock SaveCarCheck(vehicleid)
{
new query[256];
for(new i=0; i<MAX_AUTOS; i++)
{
if(CarInfo[i][c_vID] == vehicleid)
{
if(CarInfo[i][c_Gekauft] == 0) {
GetVehiclePos(CarInfo[i][c_vID], CarInfo[i][c_x], CarInfo[i][c_y], CarInfo[i][c_z]);
GetVehicleZAngle(CarInfo[i][c_vID], CarInfo[i][c_a]);
format(query, sizeof(query), "UPDATE Cars SET Besitzer = '%s',ModelID = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', Color1 = '%d', Color2 = '%d',Preis = '%d',Gekauft = '%d', Versicherung = '%d' WHERE ID = '%d'",
CarInfo[i][Besitzer],CarInfo[i][modelID], CarInfo[i][c_x], CarInfo[i][c_y], CarInfo[i][c_z], CarInfo[i][c_a], CarInfo[i][c_color1], CarInfo[i][c_color2],CarInfo[i][c_Preis],CarInfo[i][c_Gekauft], CarInfo[i][c_Versicherung], i);
mysql_tquery(handle, query);
}
else if(CarInfo[i][c_Gekauft] == 1) {
new Float:VehPos[4];
GetVehiclePos(CarInfo[i][c_vID],VehPos[0],VehPos[1],VehPos[2]);
GetVehicleZAngle(CarInfo[i][c_vID], VehPos[3]);
format(query, sizeof(query), "UPDATE Cars SET Besitzer = '%s',ModelID = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', Color1 = '%d', Color2 = '%d',Preis = '%d',Gekauft = '%d',Versicherung = '%d' WHERE ID = '%d'",
CarInfo[i][Besitzer],CarInfo[i][modelID], VehPos[0], VehPos[1], VehPos[2], VehPos[3], CarInfo[i][c_color1], CarInfo[i][c_color2],CarInfo[i][c_Preis],CarInfo[i][c_Gekauft],CarInfo[i][c_Versicherung], i);
mysql_tquery(handle, query);
}
return 1;
}
}
return 0;
}Mit freundlichen Grüßen
-
Hm, hast du zufällig eine mehrzeilige Meldung mit vielen Zahlen im Compiler stehen?
-
Nein
Gibt es sonst nichts
Mit freundlichen Grüßen
-
Debugge das Speichern mal so und poste dann was im Log, wenn du deine Fahrzeuge speicherst und es nicht geht:
Spoiler anzeigen forward SaveAllCars();
public SaveAllCars()
{
printf("Starte SaveAllCars");
new query[512];
for(new i=0; i<MAX_AUTOS; i++)
{
printf("i: %d | Model: %d | Besitzer: %s", i, CarInfo[i][modelID], CarInfo[i][Besitzer]);
if(CarInfo[i][modelID] >= 400 && CarInfo[i][modelID] <= 611)
{
printf("Gekauft: %d", CarInfo[i][c_Gekauft]);
if(CarInfo[i][c_Gekauft] == 0)
{
GetVehiclePos(CarInfo[i][c_vID], CarInfo[i][c_x], CarInfo[i][c_y], CarInfo[i][c_z]);
GetVehicleZAngle(CarInfo[i][c_vID], CarInfo[i][c_a]);
format(query, sizeof(query), "UPDATE Cars SET Besitzer = '%s',ModelID = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', Color1 = '%d', Color2 = '%d',Preis = '%d',Gekauft = '%d', Versicherung = '%d' WHERE ID = '%d'",
CarInfo[i][Besitzer],CarInfo[i][modelID], CarInfo[i][c_x], CarInfo[i][c_y], CarInfo[i][c_z], CarInfo[i][c_a], CarInfo[i][c_color1], CarInfo[i][c_color2],CarInfo[i][c_Preis],CarInfo[i][c_Gekauft], CarInfo[i][c_Versicherung], i);
mysql_tquery(handle, query);
printf("query: %s", query);
SendClientMessageToAll(info, "Nicht gekauft Autos wurden gespeichert!");
}
if(CarInfo[i][c_Gekauft] == 1)
{
new Float:VehPos[4];
GetVehiclePos(CarInfo[i][c_vID],VehPos[0],VehPos[1],VehPos[2]);
GetVehicleZAngle(CarInfo[i][c_vID], VehPos[3]);
format(query, sizeof(query), "UPDATE Cars SET Besitzer = '%s',ModelID = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', Color1 = '%d', Color2 = '%d',Preis = '%d',Gekauft = '%d', Versicherung = '%d' WHERE ID = '%d'",
CarInfo[i][Besitzer],CarInfo[i][modelID], VehPos[0], VehPos[1], VehPos[2], VehPos[3], CarInfo[i][c_color1], CarInfo[i][c_color2],CarInfo[i][c_Preis],CarInfo[i][c_Gekauft],CarInfo[i][c_Versicherung], i);
mysql_tquery(handle, query);
printf("query: %s", query);
SendClientMessageToAll(info, "Gekaufte Autos wurden gespeichert!");
}
}
}
SendClientMessageToAll(info, "Alle Fahrzeuge wurden gespeichert!");
printf("Fertig.");
return 1;
} -
MySQL:
SQL[15:26:03] [DEBUG] CMySQLResult::~CMySQLResult() - deconstructor called[15:26:12] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE Cars SET Besitzer = 'Niemand',ModelID = '412', PosX = '-1989.932373', PosY = '263.207916', PosZ = '36.216743', PosA = '270.217132', Color1 = '1', Color2 = '1',Preis = '1',Gekauft = '0', Versicherung = '0' WHERE ID = '0'", callback: "(null)", format: "(null)"[15:26:12] [DEBUG] CMySQLQuery::Execute[] - starting query execution[15:26:12] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 161.951 milliseconds[15:26:12] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving
Server:
SQL[15:26:12] Starte SaveAllCars[15:26:12] i: 0 | Model: 412 | Besitzer: Niemand[15:26:12] Gekauft: 0[15:26:12] query: UPDATE Cars SET Besitzer = 'Niemand',ModelID = '412', PosX = '-1989.932373', PosY = '263.207916', PosZ = '36.216743', PosA = '270.217132', Color1 = '1', Color2 = '1',Preis = '1',Gekauft = '0', Versicherung = '0' WHERE ID = '0'[15:26:12] i: 1 | Model: 0 | Besitzer: [15:26:12] i: 2 | Model: 0 | Besitzer: [15:26:12] i: 3 | Model: 0 | Besitzer: [15:26:12] i: 4 | Model: 0 | Besitzer: [15:26:12] i: 5 | Model: 0 | Besitzer: [15:26:12] i: 6 | Model: 0 | Besitzer: [15:26:12] i: 7 | Model: 0 | Besitzer: [15:26:12] i: 8 | Model: 0 | Besitzer: [15:26:12] i: 9 | Model: 0 | Besitzer: [15:26:12] Fertig.
Und wie gesagt jetzt ist es wieder genau so, dass aufeinmal 2 Fahrzeuge übereinander spawnen.
Das was über dem anderen Spawnt hat dann auch die ModelID, also wird einfach sozusagen kopiert.Wie kann das möglich sein
Mit freundlichen Grüßen
-
Lädst du die Fahrzeuge möglicherweise doppelt?
Also laut dem Log stimmt beim Speichern alles, es wird genau das eine existierende Fahrzeug gespeichert.Hast du auch nur das eine Fahrzeug in der Datenbank, oder warum speichert es nur eins?
-