das habe ich auch schon versucht der fehler beleibt
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
-
-
Aloha miteinander,
ich habe seit kurzem ein Problem mit meinem Fahrzeugsystem und zwar speichert es die Farbe des Fahrzeuges nicht ab.
Ich habe überhaupt keine Ahnung woran das liegen könnte, da der mysql log leer ist.
Wäre nett wenn ihr nochmal drüber schauen könntet, vielleicht findet ihr ja einen Fehler.
Vielen Dank schonmal im Voraus.
CodeCode zum Speichern des Fahrzeuges mysql_format(dbhandle,query,sizeof(query),"UPDATE autos SET f1='%i',f2='%i', x='%f', y='%f', z='%f' WHERE id='%i'",cInfo[i][farbe1], cInfo[i][farbe2], cInfo[i][c_x], cInfo[i][c_y], cInfo[i][c_z], cInfo[i][db_id]);CodeFunktion zum Laden der Fahrzeuge loadPlayerCars(playerid) { new query[128]; mysql_format(dbhandle,query,sizeof(query),"SELECT * FROM autos WHERE besitzer='%i'",sInfo[playerid][db_id]); mysql_tquery(dbhandle,query,"OnPlayerCarsLoad","d",playerid); return 1; }Code
Alles anzeigenpublic OnPlayerCarsLoad(playerid) { new num_fields,num_rows; cache_get_row_count(num_rows); cache_get_field_count(num_fields); if(!num_rows)return 0; for(new i=0; i<num_rows; i++) { new id=getFreeCarID(); cache_get_value_name_int(i,"model",cInfo[id][model]); cache_get_value_name(i,"besitzer",cInfo[id][besitzer],128); 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]); cache_get_value_name_int(i,"f1+",cInfo[id][farbe1]); cache_get_value_name_int(i,"f2",cInfo[id][farbe2]); cache_get_value_name_float(i,"dl",cInfo[id][dl]); cache_get_value_name(i,"Kennzeichen",cInfo[id][kennzeichen],128); cache_get_value_name_int(i,"tank",tank[id]); cInfo[id][id_x]=CreateVehicle(cInfo[id][model],cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z],cInfo[id][c_r],cInfo[id][farbe1],cInfo[id][farbe2],-1); } return 1; }Grüße
-
send mal alles vom speichern der fahrzeuge sieht mir nach getvehiclecolor aus was fehlt
-
send mal alles vom speichern der fahrzeuge sieht mir nach getvehiclecolor aus was fehlt
Code
Alles anzeigenfor(new i=0; i<sizeof(cInfo); i++) { if(cInfo[i][id_x]==0)continue; if(strcmp(cInfo[i][besitzer],getPlayerName(playerid))==1)continue; GetVehiclePos(cInfo[i][id_x],cInfo[i][c_x],cInfo[i][c_y],cInfo[i][c_z]); GetVehicleZAngle(cInfo[i][id_x],cInfo[i][c_r]); new query[128]; mysql_format(dbhandle,query,sizeof(query),"UPDATE autos SET f1='%i',f2='%i', x='%f', y='%f', z='%f' WHERE id='%i'",cInfo[i][farbe1],cInfo[i][farbe2],cInfo[i][c_x],cInfo[i][c_y],cInfo[i][c_z], cInfo[i][db_id]); mysql_tquery(dbhandle,query); DestroyVehicle(cInfo[i][id_x]); cInfo[i][id_x]=0; } -
In deinem Update Query, speicherst du ja auch nicht die Fahrzeugfarben?!
Wieso sollte das auch funktionieren...
Wie sieht denn die Datenbankstruktur aus?
-
In deinem Update Query, speicherst du ja auch nicht die Fahrzeugfarben?!
Wieso sollte das auch funktionieren...
Wie sieht denn die Datenbankstruktur aus?
Doch das sind ja farbe1 und farbe2.
DB Struktur sieht folgendermaßen aus:
-
Oh sry, sind ja ganz am Anfang, das habe ich übersehen, ist schon spät.
Okay, dann haben die wohl einfach den falschen Wert?
Du kannst mit mysql_log(DEBUG); unter OnGameModeInit den MySQL Log auch kurzzeitig aktivieren, dann wird unter logs/ der MySQL Log angelegt.
Aber ich vermute du musst GetVehicleColor(cInfo[i][id_x], cInfo[i][farbe1],cInfo[i][farbe2]); evtl noch vor dem Update Query aufrufen.
Wenn die Funktion nicht definiert ist, wie stellst du dir sonst so vor an die Farben zu kommen? Setzt du die immer?
Alternativ zu dem Log, kannst auch einfach n print setzen: printf("%d|%d",cInfo[i][farbe1],cInfo[i][farbe2]); und reinschauen, was drinnen steht.
Ich vermute 0|0, weil du es nirgends updatest.
-
Alles anzeigen
Oh sry, sind ja ganz am Anfang, das habe ich übersehen, ist schon spät.
Okay, dann haben die wohl einfach den falschen Wert?
Du kannst mit mysql_log(DEBUG); unter OnGameModeInit den MySQL Log auch kurzzeitig aktivieren, dann wird unter logs/ der MySQL Log angelegt.
Aber ich vermute du musst GetVehicleColor(cInfo[i][id_x], cInfo[i][farbe1],cInfo[i][farbe2]); evtl noch vor dem Update Query aufrufen.
Wenn die Funktion nicht definiert ist, wie stellst du dir sonst so vor an die Farben zu kommen? Setzt du die immer?
Alternativ zu dem Log, kannst auch einfach n print setzen: printf("%d|%d",cInfo[i][farbe1],cInfo[i][farbe2]); und reinschauen, was drinnen steht.
Ich vermute 0|0, weil du es nirgends updatest.
Leider habe ich im Log nichts rausbekommen.
Weder mit der einen Methode noch mit der anderen.
Bei "mysql_log" hatte ich "ALL" drin gehabt.
Außerdem werden die Fahrzeuge mittlerweile nicht mehr gelöscht.

Ich habe die Abfrage auf den Besitzer etwas angepasst, da die DB-ID des Users dort abgespeichert wird und nicht der Name.
Sieht mittlerweile so aus:
C
Alles anzeigenfor(new i=0; i<sizeof(cInfo); i++) { if(cInfo[i][id_x]==0)continue; if(cInfo[i][besitzer] != sInfo[playerid][db_id])continue; GetVehiclePos(cInfo[i][id_x],cInfo[i][c_x],cInfo[i][c_y],cInfo[i][c_z]); GetVehicleZAngle(cInfo[i][id_x],cInfo[i][c_r]); new query[128]; mysql_format(dbhandle,query,sizeof(query),"UPDATE autos SET f1='%i',f2='%i', x='%f', y='%f', z='%f' WHERE id='%i'",cInfo[i][farbe1],cInfo[i][farbe2],cInfo[i][c_x],cInfo[i][c_y],cInfo[i][c_z], cInfo[i][db_id]); mysql_tquery(dbhandle,query); DestroyVehicle(cInfo[i][id_x]); cInfo[i][id_x]=0; } -
Bei "mysql_log" hatte ich "ALL" drin gehabt.
Ja, dann wird es auch geloggt. Das liegt in einer extra Datei...da musst du schon einmal in deinem Verzeichnis gründlich suchen xD
Der Code bringt uns nichts. Wir brauchen entweder die Logs oder per printf den Output...
-
Ich habe die Datei gefunden.
Die war echt schwer zu finden.
Ich habe die Datei durchsucht, aber habe die query zum Speichern nicht gefunden :o
Hier nochmal ein Link zur Datei: https://pastebin.com/W1JWK5cT
-
aber habe die query zum Speichern nicht gefunden :o
Ja, das erklärt ja dann auch, wieso das Auto nicht zerstört wurde.
Einfach weil es nie aufgerufen wurde.
cache_get_value_name(i,"besitzer",cInfo[id][besitzer],128);
Wieso? Besitzer ist doch ein Integer? Oder hast du das etwa als String behandelt? Irgendwas stimmt hier ganz und gar nicht.
Das soll doch eine DB-ID ein. Also deklariere es als Integer und nicht als String. Da steht ja kein Name drinnen, sondern nur die DB id.
Ich denke, wenn du das fixxt und prüfst, dass in der Datenbank deine DB-ID da drinnen steht, dann sollte es klappen.
-
Hab das alles mal nochmal angeschaut und tatsächlich klappt das mit dem Aufrufen.
Leider spuckt der mir das raus:
Code[18:31:14] [DEBUG] mysql_format(1, 0xF5982290, 128, "UPDATE autos SET f1='%i', f2='%i', x='%f', y='%f', z='%f' WHERE id='%i'") [18:31:14] [DEBUG] mysql_format: return value: '86' [18:31:14] [DEBUG] mysql_tquery(1, "UPDATE autos SET f1='0', f2='0', x='0.000000', y='0.000000', z='0.000000' WHERE id='0'", "", "") -
Ja, wie ich schon sagte, 0|0, bedeutet, die Farben sind nicht gesetzt.
Hast du es mit GetVehicleColor probiert?
-
Ja, wie ich schon sagte, 0|0, bedeutet, die Farben sind nicht gesetzt.
Hast du es mit GetVehicleColor probiert?
GetVehicleColor existiert bei mir nicht.
-
Ohne die Farbvariablen zu setzen, wie hast du dir vorgestellt, dass dort die Farbe des Fahrzeuges landet? 🧐
Hier die Include von Ryder damals, die das übernimmt

-
Ohne die Farbvariablen zu setzen, wie hast du dir vorgestellt, dass dort die Farbe des Fahrzeuges landet? 🧐
Hier die Include von Ryder damals, die das übernimmt

Danke dir für den Include.
Ich werde es gleich mal testen

Die Farbe setze ich diese tatsächlich per Befehl.
-
cInfo[vID][farbe1] = c1; cInfo[vID][farbe2] = c2;
Ah okay, ja das hier ist kompletter Quatsch.
Mich wundert es, dass du da keine Fehler bekommst.
Zumindest wenn du crashdetect laufen hättest, würdest du hier einen Overflow sehen.
(Es sei denn, dass du nur ganz wenige Fahrzeuge auf dem Server hast, bzw dein Auto eine niedrige vehicleid bisher hatte)
Cfor(new i; i<sizeof(cInfo); i++) { if(cInfo[i][id_x] != vID) continue; cInfo[i][farbe1] = c1; cInfo[i][farbe2] = c2; break; }Das ist es, was du da eigentlich nutzen magst.
i ist ja schließlich nicht die vehicleid, sondern der Index vom Fahrzeug.
-
Alles anzeigen
Ah okay, ja das hier ist kompletter Quatsch.
Mich wundert es, dass du da keine Fehler bekommst.
Zumindest wenn du crashdetect laufen hättest, würdest du hier einen Overflow sehen.
(Es sei denn, dass du nur ganz wenige Fahrzeuge auf dem Server hast, bzw dein Auto eine niedrige vehicleid bisher hatte)
Cfor(new i; i<sizeof(cInfo); i++) { if(cInfo[i][id_x] != vID) continue; cInfo[i][farbe1] = c1; cInfo[i][farbe2] = c2; break; }Das ist es, was du da eigentlich nutzen magst.
i ist ja schließlich nicht die vehicleid, sondern der Index vom Fahrzeug.
Vielen vielen Dank!
Das Speichern der Fahrzeuge funktioniert endlich vollständig!

-
Ahoi miteinander!
In den letzten Tagen habe ich, während ich an meinem Server gearbeitet habe, festgestellt dass es langsam etwas unübersichtlich wird, da ich den ganzen Code im Gamemode habe.
Meine Frage wäre ob es eine Möglichkeit gäbe ein Modulsystem daraus zu machen, wie in z.b. PHP, JS.
Heißt dass ich eine Datei für die Fraktionen habe, eine für den Spieler selbst etc..
Ich habe mir überlegt das ganze mittels Filterscripts zu machen.
Wollte aber nochmal nachfragen, da ich mir nicht sicher bin ob das der einzigste Weg wäre das zu lösen.
Grüße
-
Filterscript wären eine Möglichkeit, aber du wärst begrenzt auf 16.
Als Alternative könntest du dich mit Hooking auseinandersetzten und auf Includes setzten.
-

