LoadCars - Unerklärliche weise der Variablenmisshandlung....

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!
    Mensch, geht mir die Pumpe wenn ich daran denke wie mich mein SA:MP Server veräppelt....
    Folgendes....


    Ich versuche gerade in meinem Gamemode Fahrzeuge aus der Datenbank zu laden. Das ganze erfolgt mit dem Strickenkid Plugin und zum Test auf meiner Windows 7 Ultimate 64Bit Maschine. Ich lade alle Daten in ein Enum, welches genau so aussieht:
    enum FahrzeugDaten{
    cCar,
    cModel,
    cOwnerID,
    cColor1,
    cColor2,
    cType,
    cHealthDes=0,
    Float:cHealth,
    Float:cXCord,
    Float:cYCord,
    Float:cZCord,
    Float:cRCord,
    cKey1,
    cKey2,
    cKey3,
    cFrak
    }
    new CarInfo[MAX_VEHICLES][FahrzeugDaten];


    Wenn ich nun mittels meiner "mysql_GetInt" Funktion das Enum füllen möchte klappt so einiges nicht wie es soll.


    stock mysql_GetInt(Table[], Field[], Where[], Is[]){
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    new sqlint = mysql_fetch_int();
    mysql_free_result();
    return sqlint;
    }


    Funktion ansich sollte korrekt sein. Tabellen existieren auch alle. Laut der mysql Log wird auch ALLES richtig ausgelesen. Laut meinem PrintF wird sogar ALLES richtig returnt!
    Wieso steht dann in der Variable solch ein Humbug?
    Hiermal der Code zum laden der Cars.


    stock LoadCars(){
    printf("//////////////////////////////////////");
    new i=1, id[4], snp[10];
    mysql_query("SELECT * FROM `cars`");
    mysql_store_result();
    carcount = mysql_num_rows();
    mysql_free_result();
    if(carcount != 0){
    for(; i<=carcount; i++) {
    format(id, sizeof(id), "%i", i);
    format(snp, sizeof(snp), "SA-%i", i);
    CarInfo[i][cModel] = mysql_GetInt("cars", "cModelID", "cID", id);
    CarInfo[i][cOwnerID] = mysql_GetInt("cars", "cOwnerID", "cID", id);
    CarInfo[i][cColor1] = mysql_GetInt("cars", "cColor1", "cID", id);
    CarInfo[i][cColor2] = mysql_GetInt("cars", "cColor2", "cID", id);
    CarInfo[i][cKey1] = mysql_GetInt("cars", "cKey1", "cID", id);
    CarInfo[i][cKey2] = mysql_GetInt("cars", "cKey2", "cID", id);
    CarInfo[i][cKey3] = mysql_GetInt("cars", "cKey3", "cID", id);
    CarInfo[i][cType] = mysql_GetInt("cars", "cType", "cID", id);
    CarInfo[i][cXCord] = floatstr(mysql_GetString("cars", "cXCord", "cID", id));
    CarInfo[i][cYCord] = floatstr(mysql_GetString("cars", "cYCord", "cID", id));
    CarInfo[i][cZCord] = floatstr(mysql_GetString("cars", "cZCord", "cID", id));
    CarInfo[i][cRCord] = floatstr(mysql_GetString("cars", "cRCord", "cID", id));

    printf("Model: %i - Owner: %i/%i - C1: %i - C2: %i - K1: %i - K2: %i - K3: %i - Type: %i - X: %f - Y: %f - Z: %f - R: %f", CarInfo[i][cModel], CarInfo[i][cOwnerID], mysql_GetInt("cars", "cOwnerID", "cID", id), CarInfo[i][cColor1], CarInfo[i][cColor2], CarInfo[i][cKey1], CarInfo[i][cKey2], CarInfo[i][cKey3], CarInfo[i][cType], CarInfo[i][cXCord], CarInfo[i][cYCord], CarInfo[i][cZCord], CarInfo[i][cRCord]);

    CarInfo[i][cCar] = AddStaticVehicle(CarInfo[i][cModel], CarInfo[i][cXCord], CarInfo[i][cYCord], CarInfo[i][cZCord], CarInfo[i][cRCord], CarInfo[i][cColor1], CarInfo[i][cColor2]);
    SetVehicleNumberPlate(CarInfo[i][cCar], snp);


    CarInfoParams[i][cpMotor] = mysql_GetInt("cars_params", "cpMotor", "cpID", id);
    CarInfoParams[i][cpLights] = mysql_GetInt("cars_params", "cpLights", "cpID", id);
    CarInfoParams[i][cpAlarm] = mysql_GetInt("cars_params", "cpAlarm", "cpID", id);
    CarInfoParams[i][cpDoors] = mysql_GetInt("cars_params", "cpDoors", "cpID", id);
    CarInfoParams[i][cpBonnet] = mysql_GetInt("cars_params", "cpBonnet", "cpID", id);
    CarInfoParams[i][cpBoot] = mysql_GetInt("cars_params", "cpBoot", "cpID", id);
    CarInfoParams[i][cpObjective] = mysql_GetInt("cars_params", "cpObjective","cpID", id);


    CarInfo[i][cHealthDes] = 0;
    if(CarInfo[i][cType]==1) CarInfoParams[i][cpDoors] = 0;


    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(i, engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(i, CarInfoParams[i][cpMotor], CarInfoParams[i][cpLights], CarInfoParams[i][cpAlarm], CarInfoParams[i][cpDoors], CarInfoParams[i][cpBonnet], CarInfoParams[i][cpBoot], CarInfoParams[i][cpObjective]);
    }
    }
    printf("%i Autos geladen", carcount);
    printf("//////////////////////////////////////");
    return true;
    }


    Das Ergebnis des PrintF sieht wie folgt aus:

    Code
    Model: 462 - Owner: 1155123200/1 - C1: -993370440 - C2: 1095914278 - K1: 0 - K2: 0 - K3: 0 - Type: 1132774195 - X: 1742.250000 - Y: -1618.959960 - Z: 13.145299 - R: 265.524993


    Kann mir nun mal bitte wer erklären, wieso "Owner: 1155123200/1" so ausschaut?
    "1155123200" = Variable "CarInfo[cOwnerID]", sie so gespeichert wird: CarInfo[i][cOwnerID] = mysql_GetInt("cars", "cOwnerID", "cID", id);
    und "1" = mysql_GetInt("cars", "cOwnerID", "cID", id) korrekt ausgegeben wird?


    Ich erkenne keinen logischen Fehler, der mir das ganze erklären kann..... :/

  • Hey, dir passiert ja schon fast son Kotz wie mir^^


    Wo ich jetze noch nicht ganz mitkomm ist wofür dieses cOwnerID gut sein soll (oder wie dat heisst, Opera Mini formatiert das sehr sehr scheisse)


    Also wenn ich das jetzt richtig gelesen hab, wird dieser OwnerID int nicht richtig ausgelesen..


    Wird die Variable denn in der Datenbank richtig abgespeichert? Versuch mal speziell für diese Variable nochmal nen eigenen Code anstatt dem stock zu benutzen. Das hat mir manchmal geholfen, wenn mein Script mich verarscht hat^^


    Verzeih mir andernfalls bitte die Blödheit, MySQL is auch net mein Fachgebiet xD

  • Was in der Variable gespeichert wird, ist ja erstmal nicht von belangen.
    Alle Float Werte werden korrekt ausgelesen. ModelID ebenfalls.
    Sprich 4 Floats und 1 Integer wird korrekt ausgelesen.
    Der rest ist absoluter Mist und existiert in der Form nicht wirklich.


    Laut der MySQL Log wird der Query aber ordnungsgemäß ausgeführt und der Inhalt - der RICHTIGE Inhalt - returnt. Mist wird in der Variable gemacht. Irgendwas sorgt dafür das die Variable den Wert des mySQL Returns nicht vernünftig speichert.


    Verschiebe ich aber nun EINE Abfrage z.b. die von "CarInfo[cType] = mysql_GetInt("cars", "cType", "cID", id);" ein Stück weiter nach unten, wird zumindest in dieser Variable alles richtig gespeichert. Schiebe ich eine weitere hinterher, sind beide weider falsch.




    //EDIT
    Wenn ich nun


    CarInfo[i][cXCord] = floatstr(mysql_GetString("cars", "cXCord", "cID", id));
    CarInfo[i][cYCord] = floatstr(mysql_GetString ("cars", "cYCord", "cID", id));
    CarInfo[i][cZCord] = floatstr(mysql_GetString ("cars", "cZCord", "cID", id));
    CarInfo[i][cRCord] = floatstr(mysql_GetString ("cars", "cRCord", "cID", id));
    Entferne, funktioniert nun alles wieder... Wo denn da das Problem o.O?

    Einmal editiert, zuletzt von Radanua ()