Das sieht so aus, als rufst du erst das Query zum Laden der Fahrzeuge auf und stellst danach erst die Verbindung zur MySQL Datenbank her.
Stelle die Verbindung ganz als erstes bei OnGameModeInit her.
Beiträge von Jeffry
-
-
ich habe zwar mysql_log(); drinne allerdings erstellt der keine mysql log^^
Schau mal im Ordner /logs/plugins/mysql.txt
Der Code sieht gut aus.
-
Sollte so eigentlich klappen.
Kannst du den Code nochmal posten?Gibt dir der MySQL Log etwas aus?
-
new vInfo[][vehData];
zu:
new vInfo[50][vehData];Die Anzahl der Fahrzeuge musst du einmal definieren, sonst weiß der Code nicht, wie viel Speicher er reservieren soll.
Die ID des Fahrzeugs würde ich beim Erstellen noch speichern, die wirst du sicher brauchen:
vInfo[i][vehVID] = CreateVehicle(vInfo[i][vehMID], vInfo[i][vehX], vInfo[i][vehY], vInfo[i][vehZ], vInfo[i][vehA], vInfo[i][vehColor1], vInfo[i][vehColor2], -1);EDIT:
Plus das, was LeonMrBonnie sagte. Das über mysql_pquery aufgerufene Callback muss ein public sein, sprich auch mit forward Zeile.
stock OnLoadCars(){
zu:
forward OnLoadCars();
public OnLoadCars(){EDIT 2:
Und die ID ebenfalls auslesen:
cache_get_value_name_int(i, "id", vInfo[i][vehID]);
Die brauchst du später beim Speichern. -
Führt leider nicht zu dem gewünschten Erfolg. Es gibt im Grunde keine Verbesserung. Das Return wird weiterhin nicht aufgerufen.
Poste bitte den ganzen Befehl.
-
Ich weiß auch leider nicht woran es liegt. Ich kann mir zwar vorstellen, dass die zuweisung mit vInfo ... nicht ganz stimmt... muss ich noch irgendwie beim enum MAX_VEHICLES oder so eintragen ?
Wie sieht dein Code jetzt aus, und wie sieht die Datenbank aus?
-
Das Problem ist, dass du die ID 0 immer direkt wieder löschst. Das ist ein Problem, welches ich schon zu dutzenden hier gesehen habe, sprich irgendwo her kommt, wo es falsch erklärt ist.
Um das Problem zu beheben, füge folgendes ganz oben in OnGameModeInit ein:
for(new i = 0; i < sizeof(ShopInfo); i++)
{
ShopInfo[id][spickup] = -1;
ShopInfo[id][stext] = Text3D:-1;
}Ändere dann
if(ShopInfo[id][spickup])
{
DestroyPickup(ShopInfo[id][spickup]);
}
if(ShopInfo[id][stext])
{
Delete3DTextLabel(ShopInfo[id][stext]);
}
zu:
if(ShopInfo[id][spickup] != -1)
{
DestroyPickup(ShopInfo[id][spickup]);
}
if(ShopInfo[id][stext] != Text3D:-1)
{
Delete3DTextLabel(ShopInfo[id][stext]);
} -
Okay. Nun werden allerdings zu viele nullen angezeigt, kann man das auch irgendwie reduzieren ? Ich würde das ganz gerne dann so auch fürs Tacho übernehmen haha^^
%0.2f
Damit kannst du zum Beispiel 2 Nachkommastellen anzeigen.Also brauche ich sozusagen 2 Callbacks / stocks um die Funktion für die Fahrzeuge zu machen oder kann ich den Query auch unter OnGameModeInit ausführen und dann an LoadCars geben ?
Das SELECT Query kannst du bei OnGameModeInit ausführen und darüber das Callback mit den Cache Funktionen aufrufen.
-
Beim Laden:
for(new i; i<sizeof(ShopInfo); i++)
Zu
for(new i; i<rows; i++) -
Das cache_insert_id musst du bei OnHausCreated machen, da dort das INSERT Query ausgeführt wurde.
Das ShopFinished brauchst du nicht über das mysql_pquery aufrufen, sondern kannst es direkt aufrufen. Einen Cache hast du bei einem Update ja nicht, du liest ja nichts aus, sondern schreibst nur in die Datenbank.
-
enum modelData{
mID,
mName[32],
mBat,
fuelTyp[16],
Float:maxTank
} -
mysql_format(handle, query, sizeof(query), "UPDATE `Houses` SET `h_exitx` = '%f', `h_exity` = '%f', ´h_exitz´ = '%f',`interior` = '%d' WHERE ´shopid´ = '%d'", xc, yc, zc,ShopInfo[id][interior],id);
Zu
mysql_format(handle, query, sizeof(query), "UPDATE Houses SET h_exitx = '%f', h_exity = '%f', h_exitz = '%f', interior = '%d' WHERE shopid = '%d'", xc, yc, zc,ShopInfo[id][interior],ShopInfo[id][shopid]); -
´
Mach im Query mal die ganzen Zeichen da weg. Manche davon sind falsch rum, das führt zu einem Fehler im Query.
Den solltest du eigentlich im MySQL Log sehen.Bis auf die geraden Anführungszeichen ' kannst du alle weg machen, die brauchst du nur, wenn du eine Spalte wie einen MySQL Befehl (z.B. ALTER) nennst.
-
pInfo[playerid][pRegisterDatum] - gettime();
zu:
pInfo[playerid][pRegisterDatum] = gettime();PS:
Jetzt waren alle Info's im Post drin, so muss es sein! -
Dann musst du es so schreiben:
for(new i=0; i<sizeof(cInfo); i++)
{
if(cInfo[i][id_x] == 0) continue;
if(cInfo[i][id_x] != GetVehicleTrailer(veh)) continue;
if(isEventVehicle[cInfo[i][id_x]] == 1) return SendClientMessage(playerid,-1,"Event Fahrzeuge können nicht abgeschleppt werden.");
cInfo[i][c_gespeert] = 1;
DestroyVehicle(cInfo[i][id_x]);
cInfo[i][id_x]=0;
break;
} -
Wie sieht der Rest vom Code zu der Abfrage aus?
-
Was muss ich noch machen geht ja so noch nicht.
Warum nicht?
-
Ich dachte man scrollt hoch und schaut sich dann den letzten LoadPlayerCars Code an damit ich nicht so Spam.
Du könntest den Code ja inzwischen geändert haben, daher mache ich das nicht. Sonst könnte es sein, wir überschreiben uns gegenseitig, oder erst durch eine Änderung tritt der Fehler auf.
Bitte poste auch die Screenshots aus der Datenbank (User und Fahrzeuge) und nenne die IDs, die geladen werden sollen.
Außerdem prüfe den MySQL Log, ob dort Meldungen drin sind (vorher leeren).Achte auch darauf, nicht immer nur die Hälfte zu machen, die ich dir sage. Das verzögert den Prozess nur unnötig.
-
Das einfachste wäre ein Char Feld mit 10 (bzw. 11 falls "End-of-String" mit benötigt wird) Zeichen anzulegen.
Dann wie folgt zu speichern:
new d, m, y;
getdate(y, m, d);
mysql_format(handle, query, sizeof(query), "UPDATE ... SET ... , regdatum = '%02d.%02d.%d', ... WHERE ...", d, m y);Besser wäre es aber, ein Integer Feld zu nehmen und den Timestamp zu speichern.
nmysql_format(handle, query, sizeof(query), "UPDATE ... SET ... , regdatum = '%d', ... WHERE ...", gettime());Das muss bei der Anzeige dann wieder umgewandelt werden.
https://forum.sa-mp.com/showthread.php?t=347605 (Meinen Post auf Seite 8 beachten). -
Er lädt das Fahrzeug nach dem Login nicht, es wird einfach nicht erstellt.
Dann stimmt irgendwo etwas nicht.
Eine solche Antwort wäre jetzt eigentlich angemessen.
Wie soll ich dir ohne Code und ohne die Daten aus der Datenbank sagen, wo der Fehler ist bzw. was angepasst werden muss?
Ich habe das jetzt schon mehrmals in diesem Thread erwähnt.