Problem mit MySQL basierendem Frakcarsystem

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
  • Hallo,


    wie die Überschrift schon verrät habe ich ein Problem mit meinem MySQL basierendem Frakcarsystem .


    Wenn ich ein Auto spawnen lassen will (aus der DB heraus), spawnt es nicht.
    Hier mein Code:
    #define MAX_FRAK_CARS 300
    enum FrakAuto {
    cID,
    cFrak,
    cVehModel,
    cNumplate[16],
    cColor1,
    cColor2,
    Float:cPosX,
    Float:cPosY,
    Float:cPosZ,
    Float:cPosA,
    cTank,
    Float:cHealth,
    cLocked,
    cEngine,
    cLights,
    cBattery,
    cDestroyed,
    cSpawned,
    cVehObj
    }
    new FrakCar[MAX_FRAK_CARS][FrakAuto];


    ocmd:spawnfcars(playerid,params[])
    {
    for(new i;i<MAX_FRAK_CARS;i++)
    {
    LoadFrakCar(i);
    }
    return 1;
    }


    stock LoadFrakCar(CarID)
    {
    new str[2048];
    format(str,sizeof(str),"SELECT * FROM `Frakcars` WHERE `ID` = '%d'",CarID);
    mysql_query(str);
    mysql_store_result();
    while(mysql_fetch_row(str))
    {
    sscanf(str, "e<p<|>{i}ddds[16]ddffffdfdddd>",FrakCar[CarID]);
    }
    SetVehicleNumberPlate(FrakCar[CarID][cVehObj],FrakCar[CarID][cNumplate]);
    FrakCar[CarID][cVehObj]=CreateVehicle(FrakCar[CarID][cVehModel],FrakCar[CarID][cPosX],FrakCar[CarID][cPosY],FrakCar[CarID][cPosZ],FrakCar[CarID][cPosA],FrakCar[CarID][cColor1],FrakCar[CarID][cColor2],-1);
    SetVehicleZAngle(FrakCar[CarID][cVehObj],FrakCar[CarID][cPosA]);
    GetVehicleParamsEx(FrakCar[CarID][cVehObj],engine,lights,alarm,doors,bonnet,boot,objective);
    if(FrakCar[CarID][cEngine] == 1){SetVehicleParamsEx(FrakCar[CarID][cVehObj],VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective); Motor[FrakCar[CarID][cVehObj]] = true;}
    if(FrakCar[CarID][cLights] == 1){SetVehicleParamsEx(FrakCar[CarID][cVehObj],engine,VEHICLE_PARAMS_ON,alarm,doors,bonnet,boot,objective); Licht[FrakCar[CarID][cVehObj]] = true;}
    if(FrakCar[CarID][cLocked] == 1){SetVehicleParamsEx(FrakCar[CarID][cVehObj],engine,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);}
    Tank[FrakCar[CarID][cVehObj]] = FrakCar[CarID][cTank];
    SetVehicleHealth(FrakCar[CarID][cVehObj],FrakCar[CarID][cHealth]);
    mysql_free_result();
    return 1;
    }
    In der Datenbank stehen folgende Fahrzeuge:

    SQL
    INSERT INTO `Frakcars` (`ID`, `Frak`, `VehModel`, `Numplate`, `Color1`, `Color2`, `PosX`, `PosY`, `PosZ`, `PosA`, `Tank`, `Health`, `Locked`, `Battery`, `Destroyed`) VALUES
    (1, 7, 411, '', 128, 128, 1531.5, -1699.71, 13.3828, 0, 0, 0, 0, 0, 0),
    (2, 7, 411, 'dsadsa', 22, 22, 1531.5, -1699.71, 13.3828, 0, 35, 100, 0, 0, 0);


    Was mache ich falsch?


    lg
    Deagle



    PS: Der Eintrag mit der ID 1 wurde InGame getätigt, der mit der ID 2 wurde von mir per Hand eingetragen.

  • SQL
    [09:20:01] X: 0.000000 | Y: 0.000000 | Z: 0.000000


    Das gibt er aus.


    stock LoadFrakCar(CarID)
    {
    new str[2048];
    format(str,sizeof(str),"SELECT * FROM `Frakcars` WHERE `ID` = '%d'",CarID);
    mysql_query(str);
    mysql_store_result();
    while(mysql_fetch_row(str))
    {
    sscanf(str, "e<p<|>{i}ddds[16]ddffffdfdddd>",FrakCar[CarID]);
    }
    printf("X: %f | Y: %f | Z: %f",FrakCar[CarID][cPosX],FrakCar[CarID][cPosY],FrakCar[CarID][cPosZ]);
    SetVehicleNumberPlate(FrakCar[CarID][cVehObj],FrakCar[CarID][cNumplate]);
    FrakCar[CarID][cVehObj]=CreateVehicle(FrakCar[CarID][cVehModel],FrakCar[CarID][cPosX],FrakCar[CarID][cPosY],FrakCar[CarID][cPosZ],FrakCar[CarID][cPosA],FrakCar[CarID][cColor1],FrakCar[CarID][cColor2],-1);
    SetVehicleZAngle(FrakCar[CarID][cVehObj],FrakCar[CarID][cPosA]);
    GetVehicleParamsEx(FrakCar[CarID][cVehObj],engine,lights,alarm,doors,bonnet,boot,objective);
    if(FrakCar[CarID][cEngine] == 1){SetVehicleParamsEx(FrakCar[CarID][cVehObj],VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective); Motor[FrakCar[CarID][cVehObj]] = true;}
    if(FrakCar[CarID][cLights] == 1){SetVehicleParamsEx(FrakCar[CarID][cVehObj],engine,VEHICLE_PARAMS_ON,alarm,doors,bonnet,boot,objective); Licht[FrakCar[CarID][cVehObj]] = true;}
    if(FrakCar[CarID][cLocked] == 1){SetVehicleParamsEx(FrakCar[CarID][cVehObj],engine,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);}
    Tank[FrakCar[CarID][cVehObj]] = FrakCar[CarID][cTank];
    SetVehicleHealth(FrakCar[CarID][cVehObj],FrakCar[CarID][cHealth]);
    mysql_free_result();
    return 1;
    }


    /e:
    Hier werden Sie geladen:
    //ONGAMEMODEINIT
    mysql_query("SELECT * FROM `Frakcars`");
    mysql_store_result();
    rows = mysql_num_rows();
    mysql_free_result();
    for(new c;c<rows;c++)
    {
    LoadFrakCar(c);
    }

  • stock SaveAllFrakCars()
    {
    for(new i;i<MAX_FRAK_CARS;i++)
    {
    if(FrakCar[i][cSpawned] == 1)
    {
    new str[16];
    format(str,sizeof str,"%d",FrakCar[i][cID]);
    SetMySQLint("Frakcars", "Model", FrakCar[i][cVehModel], "ID", str);
    SetMySQLstring("Frakcars", "Numplate", FrakCar[i][cNumplate], "ID", str);
    SetMySQLint("Frakcars", "Color1", FrakCar[i][cColor1], "ID", str);
    SetMySQLint("Frakcars", "Color2", FrakCar[i][cColor2], "ID", str);
    SetMySQLint("Frakcars", "Tank", FrakCar[i][cTank], "ID", str);
    SetMySQLint("Frakcars", "Battery", FrakCar[i][cBattery], "ID", str);
    SetMySQLint("Frakcars", "Engine", FrakCar[i][cEngine], "ID", str);
    SetMySQLint("Frakcars", "Lights", FrakCar[i][cLight], "ID", str);
    SetMySQLint("Frakcars", "Locked", FrakCar[i][cLocked], "ID", str);
    }
    }
    return 1;
    }


    stock ParkFrakCar(CarID)
    {
    new str[16];
    format(str,sizeof str, "%d", CarID);
    GetVehiclePos(CarID,FrakCar[CarID][cPosX],FrakCar[CarID][cPosY],FrakCar[CarID][cPosZ]);
    GetVehicleZAngle(CarID,FrakCar[CarID][cPosA]);
    GetVehicleHealth(CarID,FrakCar[CarID][cHealth]);
    SetMySQLfloat("Frakcars", "PosX", FrakCar[CarID][cPosX], "ID", str);
    SetMySQLfloat("Frakcars", "PosY", FrakCar[CarID][cPosY], "ID", str);
    SetMySQLfloat("Frakcars", "PosZ", FrakCar[CarID][cPosZ], "ID", str);
    SetMySQLfloat("Frakcars", "PosA", FrakCar[CarID][cPosA], "ID", str);
    SetMySQLfloat("Frakcars", "Health", FrakCar[CarID][cHealth], "ID", str);
    return 1;
    }


    stock SaveFrakCar(CarID)
    {
    new str[16];
    format(str,sizeof str,"%d",CarID);
    SetMySQLstring("Frakcars", "Numplate", FrakCar[CarID][cNumplate], "ID", str);
    SetMySQLint("Frakcars", "Color1", FrakCar[CarID][cColor1], "ID", str);
    SetMySQLint("Frakcars", "Color2", FrakCar[CarID][cColor2], "ID", str);
    SetMySQLint("Frakcars", "Tank", FrakCar[CarID][cTank], "ID", str);
    SetMySQLint("Frakcars", "Battery", FrakCar[CarID][cBattery], "ID", str);
    SetMySQLint("Frakcars", "Engine", FrakCar[CarID][cEngine], "ID", str);
    SetMySQLint("Frakcars", "Lights", FrakCar[CarID][cLights], "ID", str);
    SetMySQLint("Frakcars", "Locked", FrakCar[CarID][cLocked], "ID", str);
    SetMySQLint("Frakcars", "Destroyed", FrakCar[CarID][cDestroyed], "ID", str);
    return 1;
    }


    Ich habs auch schon geparkt, nix getan.


    ocmd:fpark(playerid,params[])
    {
    new veh = GetPlayerVehicleID(playerid);
    ParkFrakCar(veh);
    return 1;
    }

  • Schreib mal in die while-Schleife vor oder nach "sscanf(str, "e<p<|>[...]" das hier:
    print(str);


    Am Speichern liegt es ja wohl nicht, da die Daten doch gespeichert werden, er hat doch oben den Inhalt der Tabelle geschrieben.


  • stock SaveFrakCar(CarID)
    {
    while(mysql_fetch_row())
    {
    new str[16];
    format(str,sizeof str,"%d",CarID);
    SetMySQLstring("Frakcars", "Numplate", FrakCar[CarID][cNumplate], "ID", str);
    SetMySQLint("Frakcars", "Color1", FrakCar[CarID][cColor1], "ID", str);
    SetMySQLint("Frakcars", "Color2", FrakCar[CarID][cColor2], "ID", str);
    SetMySQLint("Frakcars", "Tank", FrakCar[CarID][cTank], "ID", str);
    SetMySQLint("Frakcars", "Battery", FrakCar[CarID][cBattery], "ID", str);
    SetMySQLint("Frakcars", "Engine", FrakCar[CarID][cEngine], "ID", str);
    SetMySQLint("Frakcars", "Lights", FrakCar[CarID][cLights], "ID", str);
    SetMySQLint("Frakcars", "Locked", FrakCar[CarID][cLocked], "ID", str);
    SetMySQLint("Frakcars", "Destroyed", FrakCar[CarID][cDestroyed], "ID", str);
    }
    return 1;
    }

    Denke ich, ich habe eine while Schleife auch bei meinem FrakCar Sys drin. ^^

  • mysql_RETRIEVE_row
    Er "retrieve"t (bekommt) doch nichts vom Server, sondern speichert etwas.
    Da ist diese Funktion fehl am Platz!

  • Ich würde vorschlagen wenn ihr keine vorschläge habt woran es liegen könnte lasst es doch gleich ne .. :)


    Also, in der Datenbank stehen die koordinaten aber richtig oder?
    Du könntest zum Debug noch den string vom sscanf printen lassen.
    Andernfalls überprüfe doch ob die parameter im sscanf genau die reihenfolge wie im enum sind.

  • Ich würde vorschlagen wenn ihr keine vorschläge habt woran es liegen könnte lasst es doch gleich ne .. :)


    Also, in der Datenbank stehen die koordinaten aber richtig oder?
    Du könntest zum Debug noch den string vom sscanf printen lassen.
    Andernfalls überprüfe doch ob die parameter im sscanf genau die reihenfolge wie im enum sind.


    Den Vorschlag mit dem Debuggen habe ich oben bereits erwähnt :)


    "In der Datenbank stehen folgende Fahrzeuge"
    Im Anfangsposts stehen doch die Koordinaten ;)


    ps. MySQL-Log aktiviert? Bzw. mal aktivieren und schauen ob ein Error drin ist!

  • MySQL Log sagt alles OK


    Und was ist mit dem Debug-Vorschlag?
    Dass du dir einfach mal den string von jeder Zeile printen lässt (siehe oben)?

  • SQL
    [15:17:39] SELECT * FROM `Frakcars` WHERE `ID` = '0'


    Gibt er aus bei:


    stock LoadFrakCar(CarID)
    {
    new str[2048];
    format(str,sizeof(str),"SELECT * FROM `Frakcars` WHERE `ID` = '%d'",CarID);
    mysql_query(str);
    mysql_store_result();
    while(mysql_fetch_row(str))
    {
    sscanf(str, "e<p<|>{i}ddds[16]ddffffdfdddd>",FrakCar[CarID]);
    }
    printf("%s",str); :o