Und wo, bzw wann rufst du das auf?
Beiträge von Kaliber
-
-
Naja, da scheint ja alles richtig zu sein, da ist der Wert ja auf 1.
Wie rufst du denn saveCar auf?
Das wäre mal interessant, in welchem Kontext die Funktion aufgerufen wird.
-
Ja, weil besitzer immernoch auf 0 ist.
Da wird der falsche Wert genommen.
Wie setzt du denn von PlayerInfo die db_id?
Beim laden dieser id machst du irgendwas falsch...
-
Was soll ich den als Verschlüsselung nutzen hab das halt von Jeffry genommen
und wie würde ich das denn jetzt noch ändern (ist es einfach und fix oder recht schwer)?
1. Ist das keine Verschlüsselung, lies dir meinen Beitrag (den ich doch eben verlinkt habe) dazu mal durch.
2. Jeffry solltest das Tutorial mal in dieser Hinsicht updaten, das wirklich keine gute Idee, das so zu gestalten.
Was genau soll ich jetzt in der Tabelle aus der DB löschen (die beiden Fahrzeuge)?
Exakt.
-
- Bitte nutze kein MD5 beim Passwort, da kannst du es eig schon gleich bleiben lassen...Zudem steht dein Passwort jetzt hier in Klartext...(Hash Verfahren genauer erklärt)
- Das Select query ist nun richtig, aber ich sehe kein Insert query. Lösche nochmal die Sachen aus der Tabelle und mache das von Neu.
- Lösche jetzt die Log Datei, damit sie gleich frisch erstellt wird.
Zeige dann nochmal den Log.
-
Da musst du den Fehler suchen.
Entweder bei der Zuweisung oder bei der Speicherung...printe es halt mal oder zeig uns mal deinen MySQL Log.
(Den aktivierst du indem du unter OnGameModeInit mysql_log(ALL); eingibst)
-
aber besitzer wurder doch als INT gespeichert
Ja, aber 1 wäre glaube ich richtig und nicht 0.
-
besitzer = 0 in der Datenbank sieht irgendwie falsch aus, meinst du nicht?
Da ist wohl beim Speichern oder der ID Zuweisung was schief gelaufen...
-
bei einem gmx sind diese leider komplett weg
Super.
...wie sieht die Datenbank aus?
Was sagen die Querys?
Hast du irgendwas geprintet?
Du solltest immer Informationen liefern, einfach nur sagen ja, bla bla geht nicht, da kann man dir meist nicht helfen.
-
aber jetzt sollte alles ohne Probleme funktionieren?
Ohhh du mächtige Kristallkugel🔮
Wat weiß ich, wie dein Code aussieht...probiers aus und Debugge zur Not
-
Da ist der Fehler, wieso hast du db_id im Car-Enum stehen?
Das muss in das PlayerInfo enum.
-
Wie ist denn db_id im enum definiert?
-
loadPlayerCars(playerid,carid)
{
new query[200];
mysql_format(handle, query, sizeof(query), "SELECT * FROM autos WHERE besitzer=%d, model='%d', x='%f', y='%f', z='%f', r='%f'",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]); //966
mysql_tquery(handle, query);
return 1;
}Fast...
-
Hab es mehr oder weniger copy&pasted (selbst eingegeben etc.)
Jetzt nichts für ungut oder so, aber du hast das komplett falsch abgetippt und benannt, wtf
Du kannst doch sogar in der Beschreibung dir den Quellcode downloaden und anschauen/nutzen.
Was bei dir loadPlayerCars heißt (was ein absolut Quatsch-Name für die Funktion ist), sieht bei ihm so aus:
CsaveCarToDB(playerid,carid) { new query[128]; format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%i','%i','%f','%f','%f','%f')",sInfo[playerid][db_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]); mysql_function_query(dbhandle,query,true,"carSavedToDB","i",carid); return 1; }
Fallen dir Unterschiede im Query und im Namen auf?
//Edit: Jetzt hab ich erstmal den Anfang des Threads gelesen, die Syntax hat Maho vorgegeben. Das ist super verwirrend für Neulinge von der Standard-Syntax abzuweichen, generell ist das bad practice, wenn es keinen krassen Vorteil bietet.
Schau dir nochmal in Ruhe seinen Quellcode an (hier für dich mal der Direktlink https://pastebin.com/wvdygCFN)
-
Kaliber habe gerade in der Datenbank den besitzer von INT auf VARCHAR geändert und an meinem enum bei besitzer[MAX_PLAYER_NAME] dran gehangen ist das so besser?
Kannst es ruhig so lassen, wie du es hattest, das war schon sauber gelöst.
Wie gesagt, ich dachte du hattest es anders gelöst.
-
Achso, warte mal, dein besitzer ist ja doch ein int.
Du referenzierst da also auf den Spieler, achso (verwirrende Bezeichnung).
Dann bringst du playerid und carid durcheinander.
Ufff, es ist sehr schwer dir so zu helfen, denn selbst wenn man die Compiler Fehler beseitigt, heißt das ja noch lange nicht, dass das System fehlerfrei funktioniert.
Bei dir wird es das vermutlich nicht tun, da haufenweise Dinge durcheinander gewürfelt werden.
Für so komplexe Systeme solltest du evtl Tutorials folgen oder dir spezifisch helfen lassen.
CloadPlayerCars(playerid,carid) //Musst die carid noch mit angeben...oder du machst das in der Funktion...kp wie da dein Code aufgebaut ist { new query[200]; mysql_format(handle, query, sizeof(query), "INSERT INTO autos SET besitzer=%d, model='%d', x='%f', y='%f', z='%f', r='%f'",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]); //966 mysql_tquery(handle, query); return 1; }
Cpublic carSavedToDB(carid) { cInfo[carid][db_id]= cache_insert_id(); //Einfach ohne handle return 1; }
C
Alles anzeigenpublic OnPlayerCarsLoad() //ohne playerid { new num_rows; cache_get_row_count(num_rows); if(!num_rows) return 1; for(new i,id; i<num_rows; i++) { id=getFreeCarID(); cache_get_value_name_int(i, "model", cInfo[id][model]); cache_get_value_name_int(i, "besitzer", cInfo[id][besitzer]); //und doch mit int cache_get_value_name_float(i, "x", cInfo[id][c_x]); cache_get_value_name_float(i, "y", cInfo[id][c_y]); cache_get_value_name_float(i, "z", cInfo[id][c_z]); cache_get_value_name_float(i, "r", cInfo[id][c_r]); cache_get_value_name_int(i, "id", cInfo[id][db_id]); CreateVehicle(cInfo[id][model],cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z],cInfo[id][c_r],-1,-1,-1); } return 1; }
//Edit:
Dein Insert INTO Query ist völliger Quatsch, sollte das eventuell ein Update sein?
-
Achso, ja ich hatte da mich an deinem Code orientiert, muss natürlich c_x, anstatt x heißen:
Ccache_get_value_name_float(i, "x", cInfo[id][c_x]); cache_get_value_name_float(i, "y", cInfo[id][c_y]); cache_get_value_name_float(i, "z", cInfo[id][c_z]); cache_get_value_name_float(i, "r", cInfo[id][c_r]);
Ansonsten zeig uns mal die Zeilen 966 (hier etwas mehr code so + - 5 Zeilen), 1069 und 1073
-
Nein, der Besitzer ist natürlich kein Int, sondern ein String.
Es sollte dann ungefähr so aussehen:
C
Alles anzeigenpublic OnPlayerCarsLoad(playerid) //1062 { new num_rows; //1064 cache_get_row_count(num_rows); //1065 if(!num_rows) return 1; for(new i,id; i<num_rows; i++) //1067 { id=getFreeCarID(); cache_get_value_name_int(i, "model", cInfo[id][model]); cache_get_value_name(i, "besitzer", cInfo[id][besitzer]); cache_get_value_name_float(i, "x", cInfo[id][x]); cache_get_value_name_float(i, "y", cInfo[id][y]); cache_get_value_name_float(i, "z", cInfo[id][z]); cache_get_value_name_float(i, "r", cInfo[id][r]); cache_get_value_name_int(i, "id", cInfo[id][db_id]); CreateVehicle(cInfo[id][model],cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z],cInfo[id][c_r],-1,-1,-1); } return 1; }
-
Dann war dein Versuch doch schon ganz richtig.
Darfst nur nicht überall cache_get_value_name_int verwenden, sondern, wenn es sich um floats handelt eben cache_get_value_name_float.
Und verwende nicht 0 als index, sondern eben einfach i
-
Welche MySQL Version nutzt du denn?
Die cache_get_field_content_int Funktion ist R33, anscheinend nutzt du eine neuere Version (was auch zu empfehlen ist).
Eigener Versuch hier drunter
Ja, das ist ja auch evtl ganz richtig...(Zumindest die Funktion, evtl nicht wie du es anwendest).