Problem beim Mysql Carload

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
  • Guten Arbend


    und zwar habe ich ein problem bei meinem Car load, ich habe als beispiel einfach abgefragt in welches Auto er steigt wenn Auto 1 dan kommt "Das ist Wagen 1" bei Wagen 2 kommt "Das ist Wagen 2" doch das ist nicht der fall, aus irgenteinem grund bekomme ich nur bei einem Auto eine rückmeldung.


    Hier mal meine Codes


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(vehicleid == norm_car[0]) {
    SendClientMessage(playerid,Color_Saccess,"Das ist Wagen 1");
    }
    else if(vehicleid == norm_car[1]) {
    SendClientMessage(playerid,Color_Saccess,"Das ist Wagen 2");
    }
    return 1;
    }
    stock load_normcars()
    {
    new query[128],data[25],counter[11];
    format(counter,sizeof(counter),"%i",MAX_CARS);
    format(query,sizeof(query),"SELECT `carid`,`car_posx`,`car_posy`,`car_posz`,`car_posa`,`carcolor1`,`carcolor2` FROM `norm_cars` LIMIT %s",counter);
    mysql_query(query);
    mysql_store_result();
    for(new i = 0; i <= MAX_CARS; i++) {
    while(mysql_fetch_row_format(data, "|")) {
    sscanf(data, "p<|>iffffii", CarInfo[i][ModelId], CarInfo[i][Car_PosX], CarInfo[i][Car_PosY],CarInfo[i][Car_PosZ],CarInfo[i][Car_PosA],CarInfo[i][CarColor1],CarInfo[i][CarColor2]);
    norm_car[i] = CreateVehicle(CarInfo[i][ModelId], CarInfo[i][Car_PosX], CarInfo[i][Car_PosY], CarInfo[i][Car_PosZ],CarInfo[i][Car_PosA],CarInfo[i][CarColor1],CarInfo[i][CarColor2],5);
    }
    printf("%d",i);
    }

    mysql_free_result();
    return 1;
    }


    Da ich neu im sachen Mysql Scrippting bin, habe ich keine ahnung warum!


    Bei einem printf kommt:


    Auto Id: 0
    Auto Id: 1
    Auto Id: 2
    Auto Id: 3


    Und das obwohl es bis jetzt nur 3 Autos sind!


  • public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER || PLAYER_STATE_PASSENGER)
    {
    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(vehicleid == norm_car[0])
    {
    SendClientMessage(playerid,Color_Saccess,"Das ist Wagen 1");
    }
    else if(vehicleid == norm_car[1])
    {
    SendClientMessage(playerid,Color_Saccess,"Das ist Wagen 2");
    }
    return 1;
    }
    stock load_normcars()
    {
    new query[128],data[25],counter[11];
    format(counter,sizeof(counter),"%i",MAX_CARS);
    format(query,sizeof(query),"SELECT `carid`,`car_posx`,`car_posy`,`car_posz`,`car_posa`,`carcolor1`,`carcolor2` FROM `norm_cars` LIMIT %s",counter);
    mysql_query(query);
    mysql_store_result();
    for(new i = 0; i <= MAX_CARS; i++)
    {
    while(mysql_fetch_row_format(data, "|"))
    {
    sscanf(data, "p<|>iffffii", CarInfo[i][ModelId], CarInfo[i][Car_PosX], CarInfo[i][Car_PosY],CarInfo[i][Car_PosZ],CarInfo[i][Car_PosA],CarInfo[i][CarColor1],CarInfo[i][CarColor2]);
    norm_car[i] = CreateVehicle(CarInfo[i][ModelId], CarInfo[i][Car_PosX], CarInfo[i][Car_PosY], CarInfo[i][Car_PosZ],CarInfo[i][Car_PosA],CarInfo[i][CarColor1],CarInfo[i][CarColor2],5);
    }
    printf("%d",i);
    }
    mysql_free_result();
    return 1;
    }
    }
    }

  • Deine Lösunger ist totaler Schrott,firestormZ.
    Wieso fügst du ein Callback unter OnPlayerStateChange ein und noch zusätzlich eine Funktion ? Das klappt nicht.


    Zitat

    Bei einem printf kommt:


    Auto Id: 0
    Auto Id: 1
    Auto Id: 2
    Auto Id: 3


    Und das obwohl es bis jetzt nur 3 Autos sind!


    Deine Auswertung der Daten ist falsch. So wirst du niemals richtige Daten erhalten.
    Vom Prinzip her ist die for-Schleife unnötig und du müsstest lediglich in der while-Schleife den Index für die Fahrzeuge ( z.B. i ) erhöhen.


    Spoiler anzeigen
    for(new i = 0; i <= MAX_CARS; i++) { // Wir machen also MAX_CARS's mal alles hier drunter
    while(mysql_fetch_row_format(data, "|")) { // Eine While Schleife durch ALLE Ergebnisse die wir durch store_result() haben.
    sscanf(data, "p<|>iffffii", CarInfo[i][ModelId], CarInfo[i][Car_PosX], CarInfo[i][Car_PosY],CarInfo[i][Car_PosZ],CarInfo[i][Car_PosA],CarInfo[i][CarColor1],CarInfo[i][CarColor2]);
    norm_car[i] = CreateVehicle(CarInfo[i][ModelId], CarInfo[i][Car_PosX], CarInfo[i][Car_PosY], CarInfo[i][Car_PosZ],CarInfo[i][Car_PosA],CarInfo[i][CarColor1],CarInfo[i][CarColor2],5);
    }
    printf("%d",i); // <-- i wird erst im NÄCHSTEN Schleifen Durchgang erhöht. Da haben wir aber keine weiteren Ergebnisse mehr in store_result(), da wir alle durch die while-Schleife ausgelesen haben
    }

  • Ein "Ne geht auch nicht" hilft Niemanden. Wie sieht es denn bei dir aus,nachdem du den Lösungsvorschlag von mir umgesetzt hast.


    Übrigens,
    printf("norm_car[%d] = %d",i,norm_car[i]);
    wäre sinnvoller für eine Auswertung der Daten.

  • Ne war an firestormZ gerichtet, doch du warst schneller mit schreiben als ich ^^ doch dank deiner hilfe gehts jetzt kamm mit dem print durch einander ^^


    Deswegen ein dickes THX an dich Goldkiller für deine schnelle hilfe. Natürlich auch ein thx an die anderen für die Versuche.


    Und da mein Problem nun gelöst ist denke ich kann dieser Thread auch geclosed werden!!