Fahrzeuge werden nicht in der DB gespeichert

  • Hey ich hab ein wahrscheinlich eher kleines Problem aber bin mir da nicht zu 100% sicher, ich nutze die Tutorials auf YouTube von MrMonat da er natürlich eine andere MySQL version nutzt (älter) gibt es ja etwas verschiedene Dinge und schaue mir dann bspw. mein Register/Login System von Jeffry an um ein paar Hilfestellungen zu haben, jedoch bisher ohne erfolg


    Code
    saveCarToDB(playerid, carid)
    {
        new query[128];
        format(query,sizeof(query),"INSERT INTO users_cars (besitzer,model,x,y,z,r) VALUES ('%e','%i','%f',%f',%f',%f')",PlayerInfo[playerid][pName], carInfo[carid][model], carInfo[carid][c_x],carInfo[carid][c_y],carInfo[carid][c_z],carInfo[carid][c_r]);
        mysql_pquery(handle, query, "", "", "");
        return 1;
    }


    Ich möchte das die Fahrzeuge einem Besitzer Namen zugeordnet wird und keiner ID weil wie wir wissen hat man bei jedem "Relog" mit mehreren Usern auf dem Server zu 90% eine neue Playerid


    /edit


    Wollte eigentlich auch noch die Farben in der DB speichern aber dazu muss ich das erstmal im Script schaffen bekomme ständige local variable XYZ shadows a variable at a preceding level

  • Moin!


    Ersteinmal zu deinem Problem mit der Speicherung des Fahrzeugs:

    Du solltest die Datenbank ID des Users an Stelle des Benuternamens speichern. Der Grund hierfür ist, dass der Name variabel sein kann - bestimmt planst du irgendwann auch mal den Namen irgendwie ändern zu können. Wäre das der Fall, würde ein Spieler durch Namensänderung sämtliche Fahrzeuge verlieren und das wäre definitiv nicht in deinem Interesse. :)


    Der Fehler "local variable xyz shadows a variable at a preceding level" kommt daher, dass du eine Variable global definierst, die aber z.B. in Callback oder Funktionen als Parameter bereits existiert.


    Zum Beispiel, du erstellst ein Enumerator und speicherst die playerid als eine Variable. Da sollte man genau den Fehler auch kriegen.



    Melde dich einfach wieder hier im Thread, falls du noch Fragen hast oder Hilfe benötigst. :)

  • Andosius danke für den Ratschlag und die Aufklärung, jetzt hab ich es umgeändert das die p_id genommen wird (ID des Spielers in der DB)


    Mein CMD fürs Fahrzeug für einen Spieler erstellen sieht derzeit so aus


    dazu die createPlayerCar funktion



    dazu die saveCarToDB:


    Code
    saveCarToDB(carid)
    {
        new query[128];
        new pID;
        format(query,sizeof(query),"INSERT INTO users_cars (besitzer,model,x,y,z,r) VALUES ('%i','%i','%i','%i','%f',%f',%f',%f')",PlayerInfo[pID][p_id], carInfo[carid][model],carInfo[carid][car_farbe],carInfo[carid][car_farbe2], carInfo[carid][c_x],carInfo[carid][c_y],carInfo[carid][c_z],carInfo[carid][c_r]);
        mysql_pquery(handle, query);
        return 1;
    }



    Und trotzdem bekomme ich bei der Zeile 574 die warnings:

    3x number of arguments does not match definition

    Zeile ist markiert

  • 3x number of arguments does not match definition

    Du rufst folgendes auf:


    createPlayerCar(pID,vehid,color[0],color[1], Pos[0], Pos[1], Pos[2], Pos[3], -1);


    definiert ist es aber:


    createPlayerCar(playerid, modelid, Float:x,Float:y,Float:z,Float:r)


    Wie du siehst, hast du color[0], color[1] und die -1 am Ende gar nicht in der Funktion oben angegeben.



    Sieht dann so aus.


    Das respawn=-1 in der Parameterliste oben sorgt btw dafür, dass der default wert von der Respawn-Zeit bei -1 liegt.

    Sprich du könntest es auch nur so aufrufen:


    createPlayerCar(pID,vehid,color[0],color[1], Pos[0], Pos[1], Pos[2], Pos[3]);


    und es würde funktionieren (da -1 default gesetzt wird) ;)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Also muss ich garnicht immer pID für einen anderen Spieler nutzen? Weil so wie es scheint, reicht playerid bei solchen funktionen und wenn es dann in den Befehl geht einfach das playerid durch pID ersetzen richtig?

  • Du darfst dich von der Bezeichnung von Variablen nicht verwirren lassen ^^


    C
    new x = 5;
    new playerid = x;
    new pID = x;
    new bla = x;

    Es spielt in diesem Beispiel ja gar keine Rolle, wie du die Variable bezeichnest, alle besitzen den selben Wert von x und zwar 5.


    Das mit dem pID wird nur oft gemacht, damit man in diesem Kontext weiß, dass die Variable den Wert von einer anderen Spielerid enthält.


    Aber in diesem Fall erstellst du ja das Fahrzeug für playerid. Also brauchst du keine weitere Variable.


    Wie du es zuvor gelöst hattest mit dem pID, da war der Wert immer auf 0, das hätte ja so oder so nicht funktioniert. Irgendwo muss der Wert für den Spieler ja herkommen ^^

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • jedoch wird leider nichts in der DB gespeichert

    Dafür empfiehlt es sich den mysql_log auf DEBUG zu setzen unter OnGameModeInit und anschließend den mysql.log mal anzuschauen ;)


    Kannst ihn gerne auch hier posten.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • So wie ich es verstehe benutze ich

    Code
    mysql_pquery(handle, query);

    das hier falsch :D


    /edit


    Zeile :

    SQL
    INSERT INTO users_cars (besitzer,model,x,y,z,r)


    zu

    SQL
    INSERT INTO users_cars (besitzer,model,color,color2,x,y,z,r)

    geändert

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Andosius ah danke, hab es geändert funktioniert leider dennoch nicht


    Code
    [13:11:49] [WARNING] mysql_connect: no password specified
    [13:12:08] [ERROR] error #1064 while executing query "INSERT INTO users_cars (besitzer,model,color,color2,x,y,z,r) VALUES ('1', '411','0','0','1736.464355','-1269.989990','13.544546": 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 ''13.544546' at line 1
    [13:12:12] [ERROR] error #1064 while executing query "INSERT INTO users_cars (besitzer,model,color,color2,x,y,z,r) VALUES ('1', '411','2','2','1728.295898','-1268.436767','13.544373": 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 ''13.544373' at line 1
  • Hab ich geändert jedoch immer noch errors im mysql log und nichts in der DB hinterlegt


    Code
    [13:42:40] [plugins/mysql] error #1064 while executing query "INSERT INTO users_cars (besitzer,model,color,color2,x,y,z,r) VALUES ('1', '1', '411', '0', '0.000000', '1719.357543', '-1269.44": 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 ''-1269.44' at line 1
    [13:42:43] [plugins/mysql] error #1064 while executing query "INSERT INTO users_cars (besitzer,model,color,color2,x,y,z,r) VALUES ('2', '1', '411', '1', '0.000000', '1713.944946', '-1269.95": 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 ''-1269.95' at line 1
  • Daran lag es perfekt!


    jedoch sehe ich gerade das es zwei verschiedene besitzer sind und hatte vorher 2 Fahrzeuge erstellt, diese aber wieder raus gelöscht aus der DB da es ganz falsch war, da war die vehID aufeinmal die colorid dann hab ich die beiden fahrzeuge gelöscht, im script abgeändert

    aber jetzt startet es nicht bei 0 sondern bei 3?


    hier ein bild zum verständnis :D


    Fehler in der Tabelle.png


    bei ID 3 hab ich eigentlich auch beide farben auf 0 0 gesetzt

    bei ID 4 hab ich beide auf 1 1 gesetzt

  • Das kannst du mit dem folgenden Befehl ändern.

    Alternativ in den Tabellen-Einstellungen(/Optionen?!). Irgendwo gibt es da auch die Einstellung in phpMyAdmin.


    Code: .sql
    ALTER TABLE `users_cars` AUTO_INCREMENT = <beliebige Zahl>;


    In deinem Fall musst du, nachdem du die IDs manuell zu 1 und 2 geändert hast, <beliebige Zahl> mit 3 ersetzen. :=)

  • aber jetzt startet es nicht bei 0 sondern bei 3?

    Ja, das ist auch richtig. Die ID ist immer fortlaufend und das ist auch gar nicht schlimm :)


    Beispiel:


    1

    2

    3

    4


    löscht du die 3, bleibt die Zahl danach ja auch erhalten und fügst du nun ein weiteres hinzu, wird es ID 5 :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S