Problem Fraktionsfahrzeuge mit MYSQL zu spawnen/erstellen.

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 Leute,


    ich habe ein Problem damit Fraktionsfahrzeuge mit MYSQL spawnen/erstellen zu lassen.
    Laut Console wurden die Fraktionsfahrzeuge gespawnt/erstellt, aber dennoch sind die nirgends.


    Ich habe nicht so wirklich viel Ahnung mit Mysql, daher fällt es mir schon etwas schwer
    den Fehler selbst zu finden, ich habe die Zeilen vom Loginsystem zusammengewürfelt.


    Vielleicht findet ihr einen/den Fehler:
    enum FrakCarDaten
    {
    fcVehid,
    fcModel,
    Float:fcPosX,
    Float:fcPosY,
    Float:fcPosZ,
    Float:fcPosA,
    fcCol1,
    fcCol2
    }
    new FrakCarInfo[MAX_VEHICLES][FrakCarDaten];


    public OnGameModeInit()
    {
    LoadFrakCars();
    return 1;
    }


    stock LoadFrakCars()
    {
    new fcarload;
    for(new v = 0; v < MAX_VEHICLES; v++)
    {
    FrakCarInfo[v][fcVehid] = mysql_GetInt("frakcars", "Vehid", "Vehid", FrakCarInfo[v][fcVehid]);
    FrakCarInfo[v][fcModel] = mysql_GetInt("frakcars", "Model", "Vehid", FrakCarInfo[v][fcVehid]);
    FrakCarInfo[v][fcPosX] = mysql_GetFloat("frakcars", "PosX", "Vehid", FrakCarInfo[v][fcVehid]);
    FrakCarInfo[v][fcPosY] = mysql_GetFloat("frakcars", "PosY", "Vehid", FrakCarInfo[v][fcVehid]);
    FrakCarInfo[v][fcPosZ] = mysql_GetFloat("frakcars", "PosZ", "Vehid", FrakCarInfo[v][fcVehid]);
    FrakCarInfo[v][fcPosA] = mysql_GetFloat("frakcars", "PosA", "Vehid", FrakCarInfo[v][fcVehid]);
    FrakCarInfo[v][fcCol1] = mysql_GetInt("frakcars", "Col1", "Vehid", FrakCarInfo[v][fcVehid]);
    FrakCarInfo[v][fcCol2] = mysql_GetInt("frakcars", "Col2", "Vehid", FrakCarInfo[v][fcVehid]);
    FrakCarInfo[v][fcVehid] = CreateVehicle(FrakCarInfo[v][fcModel], FrakCarInfo[v][fcPosX], FrakCarInfo[v][fcPosY], FrakCarInfo[v][fcPosZ], FrakCarInfo[v][fcPosA], FrakCarInfo[v][fcCol1], FrakCarInfo[v][fcCol2], -1);
    fcarload = 1;
    }
    if(fcarload == 1) { print("<-| [MYSQL] | Alle Fraktionsfahrzeuge wurden erfolgreich geladen!"); }
    else { print("<-| [ERROR] | Die Fraktionsfahrzeuge konnten nicht erfolgreich geladen werden!"); }
    return 1;
    }


    Die Tabelle:
    CREATE TABLE `frakcars` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `Vehid` int(11) NOT NULL,
    `Model` int(11) NOT NULL,
    `PosX` float(9,5) NOT NULL,
    `PosY` float(9,5) NOT NULL,
    `PosZ` float(9,5) NOT NULL,
    `PosA` float(9,5) NOT NULL,
    `Col1` int(11) NOT NULL,
    `Col2` int(11) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=263 DEFAULT CHARSET=latin1;



    Es wäre echt nett, wenn mir jemand helfen könnte!




    Gruß
    AlphaGen!

    DIVIDE ET IMPERA

  • So sollte es gehen ich bin generel kein freund dieser funktionen , welche maddin gepostet hatte in seinen Tutorial


    stock LoadFrakCars()
    {
    new Query[128], v;
    mysql_query("SELECT * FROM `frakcars`");
    mysql_store_result();
    while(mysql_fetch_row_format(Query))
    {
    sscanf(str, "p<|>e<-i{i}iffffii>", FrakCarInfo[v]);
    FrakCarInfo[v][fcVehid] = CreateVehicle(FrakCarInfo[v][fcModel], FrakCarInfo[v][fcPosX], FrakCarInfo[v][fcPosY], FrakCarInfo[v][fcPosZ], FrakCarInfo[v][fcPosA], FrakCarInfo[v][fcCol1], FrakCarInfo[v][fcCol2], -1);
    v++;
    }
    mysql_free_result();
    return print("Fraktionsautos geladen");
    }


    Du benötigst das sscanf plugin


    //edit hab nun den richtige sscanf abfolge noch hinzugefügt die genau das tut was sie soll :D
    also an fcVehid keinen wert übergeben und einen Wert überspringen, den aus der datenbank also die id

  • SSCANF habe ich nicht als Plugin, sondern als Stock ganz untem im Script. Das sollte doch keinen Unterschied machen, oder?
    "str" wurde mir als undefiniertes Symbol gemeldet (siehe Zeile 8 in deinem Quelltext), ich bin mal davon ausgegangen, dass damit "Query" gemeint war? ?(


    Desweiteren hat es nicht funktioniert, ich habe mir das, was zb. fcModel und fcPosX wiedergeben direkt nachdem das Fahrzeug erstellt sein sollte printen lassen:
    new string[128]
    format(string,sizeof(string),"<-| [MYSQL] | Das Fraktionsfahrzeug mit der Modelid (%i) an PosX (%f) wurde erfolgreich geladen!",FrakCarInfo[v][fcModel], FrakCarInfo[v][fcPosX]); print(string);


    Folgendes gab die Console aus:
    ,,[19:51:57] <-| [MYSQL] | Das Fraktionsfahrzeug mit der Modelid (0) an PosX (0.000000) wurde erfolgreich geladen!"


    In der Tabelle habe ich die Daten für ein Fahrzeug in einer Zeile reingeschrieben.
    Das es daran liegt, dass der Stock kein Fahrzeug zum erstellen hat, kann es also eigentlich nicht sein.

    DIVIDE ET IMPERA

  • 1. ja du brauchst das plugin mit dem normalen sscanf code geht das nicht
    2. Es war Query gemeint ich hab was mit dem sscanf code besser gesagt mit der parameter abfolge was getestet

    stock LoadFrakCars()
    {
    new Query[128], v;
    mysql_query("SELECT * FROM `frakcars`");
    mysql_store_result();
    while(mysql_fetch_row_format(Query))
    {
    sscanf(Query, "p<|>e<-i{i}iffffii>", FrakCarInfo[v]);
    FrakCarInfo[v][fcVehid] = CreateVehicle(FrakCarInfo[v][fcModel], FrakCarInfo[v][fcPosX], FrakCarInfo[v][fcPosY], FrakCarInfo[v][fcPosZ], FrakCarInfo[v][fcPosA], FrakCarInfo[v][fcCol1], FrakCarInfo[v][fcCol2], -1);
    v++;
    }
    mysql_free_result();
    return print("Fraktionsautos geladen");
    }

  • Ich habe nun das Sscanf-Plugin installiert, scheint auch zu funktionieren.
    Dennoch wird das Test-Fahrzeug nicht erstellt, in der Console steht immer noch:
    ,,<-| [MYSQL] | Das Fraktionsfahrzeug mit der Modelid (0) an PosX (0.000000) wurde erfolgreich geladen!"

    DIVIDE ET IMPERA

  • poste bitte den momentanen code rein und lass dir das ganze ausgeben das query


    also oben
    printf("%s",Query);


    sollte es dann an sscanf liegen kannst das ganze auch nochmal umändern in


    sscanf(Query, "p<|>e<iiiffffii>", FrakCarInfo[v]);


    und steht vllt ihrgend was in der mysql_log ?

  • Hier die jetzigen Zeilen:



    stock LoadFrakCars()
    {
    new Query[128], v;
    mysql_query("SELECT * FROM `frakcars`");
    mysql_store_result();
    while(mysql_fetch_row_format(Query))
    {
    printf("%s",Query);
    sscanf(Query, "p<|>e<iiiffffii>", FrakCarInfo[v]);
    //sscanf(Query, "p<|>e<-i{i}iffffii>", FrakCarInfo[v]);
    FrakCarInfo[v][fcVehid] = CreateVehicle(FrakCarInfo[v][fcModel], FrakCarInfo[v][fcPosX], FrakCarInfo[v][fcPosY], FrakCarInfo[v][fcPosZ], FrakCarInfo[v][fcPosA], FrakCarInfo[v][fcCol1], FrakCarInfo[v][fcCol2], -1);
    printf("<-| [MYSQL] | Das Fraktionsfahrzeug mit der Modelid (%i) an PosX (%f) wurde erfolgreich geladen!",FrakCarInfo[v][fcModel], FrakCarInfo[v][fcPosX]);
    v++;
    }
    mysql_free_result();
    return 1;
    }


    Hier fogendes steht bezüglich dieser Angelegenheit im Server_Log


    [20:34:07] 262|0|565|241.03120|1873.37366|11.12780|173.69389|67|43
    [20:34:07] <-| [MYSQL] | Das Fraktionsfahrzeug mit der Modelid (0) an PosX (0.000000) wurde erfolgreich geladen!


    Der letzte Eintrag im mysql_log ist vom 17.02.2013.

    DIVIDE ET IMPERA

  • 262|0|565|241.03120|1873.37366|11.12780|173.69389|67|43


    Ok das liegt wieder am sscanf code ich habe die id nicht berücksichtigt warum speicherst du die fahrzeugid auch ? macht doch kein sinn die ändern sicht sowieso je nach dem.


    nun gut hier der richtige sscanf code womit es geht.


    sscanf(Query, "p<|>e<{i}-i{i}iffffii>", FrakCarInfo[v]);

  • Es hat sich leider immer noch nichts geändert.


    Derzeitiger Code:


    stock LoadFrakCars()
    {
    new Query[128], v;
    mysql_query("SELECT * FROM `frakcars`");
    mysql_store_result();
    while(mysql_fetch_row_format(Query))
    {
    printf("%s",Query);
    sscanf(Query, "p<|>e<{i}-i{i}iffffii>", FrakCarInfo[v]);
    //sscanf(Query, "p<|>e<iiiffffii>", FrakCarInfo[v]);
    //sscanf(Query, "p<|>e<-i{i}iffffii>", FrakCarInfo[v]);
    FrakCarInfo[v][fcVehid] = CreateVehicle(FrakCarInfo[v][fcModel], FrakCarInfo[v][fcPosX], FrakCarInfo[v][fcPosY], FrakCarInfo[v][fcPosZ], FrakCarInfo[v][fcPosA], FrakCarInfo[v][fcCol1], FrakCarInfo[v][fcCol2], -1);
    printf("<-| [MYSQL] | Das Fraktionsfahrzeug mit der Modelid (%i) an PosX (%f) wurde erfolgreich geladen!",FrakCarInfo[v][fcModel], FrakCarInfo[v][fcPosX]);
    v++;
    }
    mysql_free_result();
    return 1;
    }

    DIVIDE ET IMPERA

  • Das ist dann fraglich wo der fehler sein könnte


    Da es eigentlich klappen müsste siehe testcode
    new v,str[100] = "262|0|565|241.03120|1873.37366|11.12780|173.69389|67|43";
    sscanf(str, "p<|>e<{i}-i{i}iffffii>", FrakCarInfo[v]);
    printf("%d %d %f",FrakCarInfo[v][fcVehid],FrakCarInfo[v][fcModel],FrakCarInfo[v][fcPosX]);


    hast du den alten sscanf code noch drinne ? wenn ja entfernen


    weil ich seh hier auch kein fehler mehr


    //edit du kannst nochmal mein code testen wenn dort nix raus kommt dann liegt es an deinem skirpt das du ihrgend was enthalten hast was den code stört
    um einen vergleich zu ziehen kannst du nochmal ein neues skript öffnen dne ocde rein packen und testen.

  • Den Stock Sscanf habe ich mit /* & */ deaktiviert und das Sscanf-Plugin included. Ansonsten habe ich nur noch einen Ordner namens "sscanf" wo einige Dateien drin sind.
    Dieser Ordner ist meines erachtens allerdings unbenutzt.


    Dein Code gibt auch außer Nullen nichts aus.



    Könnte es evtl. an Mysql liegen?

    DIVIDE ET IMPERA


  • nein tut es nicht ^^ ihrgend was läuft bei dir nicht richtig da bei mir hier nix falsches ausgegeben wird
    du hast oben


    #include<sscanf2> drinne und lässt auch das plugin laden testest du das über deinen homeserver oder direkt über einen gehosteten bei samp4you oder sonst wo , root , vserver

  • Ich, bzw. Du hast gerade meinen Fehler gefunden!
    Anstatt "sscanf2" habe ich "sscanf" included, nun habe ich sscanf2 included und lt. Console sollte es nun funktionieren.


    //Edit: Fahrzeug wurde InGame gespawnt!


    Vielen Dank, dass Du dir die Zeit genommen hast mir zu Helfen! :love:

    DIVIDE ET IMPERA

    Einmal editiert, zuletzt von [GSD]AlphaGen ()