Problem beim MySQL Haussystem

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
  • Moin,
    Bei meinem Haussystem gibts ein Problem.

    mysql_query("SELECT * FROM Hauser");
    mysql_store_result();
    new number;
    while(mysql_fetch_row_format(Data, "|"))
    {
    sscanf(Data, "p<|>ffffs[256]fffs[256]s[256]s[256]", LoadedP[0], LoadedP[1], LoadedP[2], LoadedP[3], LoadedP[4], LoadedP[5], LoadedP[6], LoadedP[7], LoadedP[8], LoadedP[9], LoadedP[10]);
    /*new string[256];
    format(string, sizeof(string), "%f",LoadedP[1]);
    new cid = strval(string);*/
    CreatePickup(1273, 23, LoadedP[5], LoadedP[6], LoadedP[7]);
    xhouse[number] = LoadedP[5]; yhouse[number] = LoadedP[6]; zhouse[number] = LoadedP[7];
    besitzerhouse[number] = LoadedP[4]; //Hier
    number += 1;
    }
    mysql_free_result();


    So werden die Daten aus der MySQL Datenbank gelesen. es Lädt die Positionen und erstellt das Pickup. Jedoch kommt in der Markierten Zeile der Fehler warning 213: tag mismatch .


    Die Variable wurde so erstellt:
    new Float:xhouse[200], Float:yhouse[200], Float:zhouse[200], besitzerhouse[200];


    Das sollte praktisch für alle Häuser die Position in einer Variable speichern, um nicht jedesmal die MySQL Datenbank aufrufen zu müssen.


    MfG

  • LoadedP[4] ist ja ein string ... wenn es eine Zahl ist dann solltest es umändern statt s[256] halt ein d


    new besitzerhouse[Zahl][Zahl];


    dann beim auslesen


    format(besitzerhouse[number],sizeof(besitzerhouse[number]),"%s",LoadedP[4]); // du musst es nicht mit format machen , oder du kannst es ja auch gleich mit sscanf zuweisen statt dem LoadedP[4] besitzerhouse[number] hinschreiben ..


    edit: verbessert

  • Okay, ich habs nun so gemacht:
    sscanf(Data, "p<|>ffffs[256]fffs[256]s[256]s[256]", LoadedP[0], LoadedP[1], LoadedP[2], LoadedP[3], besitzerhouse[number], LoadedP[5], LoadedP[6], LoadedP[7], LoadedP[8], LoadedP[9], LoadedP[10]);


    Ich habs bereits getestet, bei einer Abfrage wird auch der richtige Wert ausgegeben. Das sieht so aus:



    stock mysql_CheckAccountID(idd)
    {
    new query[128];
    format(query, sizeof(query), "SELECT Name FROM spieler WHERE id = %s", idd);
    mysql_query(query);
    mysql_store_result();
    new strid[32];
    new intid[32];
    mysql_fetch_row(strid);
    return intid;
    }


    for(new i = 0; i < Houses; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,2,xhouse[i],yhouse[i],zhouse[i]))
    {
    format(string, sizeof(string), "Besitzer: %d",besitzerhouse[i]);
    SendClientMessage(playerid,COLOR_RED,string);

    format(string, sizeof(string), "Besitzer: %s",mysql_CheckAccountID(besitzerhouse[i]));
    SendClientMessage(playerid,COLOR_RED,string);
    }
    }

    Leider wird bei der Abfrage mysql_CheckAccountID nur 0 Ausgegeben, wieso?


    MfG

  • Jeder Spieler hat in der MySQL Tabelle eine ID und einen Namen.
    Der Code soll durch die ID herausfinden wie der Name des Spielers ist, wo das Haus besitzt


    Edit: Fehler gefunden, und funktioniert jetzt.
    Ich hab ne Neue Variable erstellt und Ausgegeben X(

    Einmal editiert, zuletzt von Intrepidus ()

  • Dann versuchs mal so
    stock mysql_CheckAccountID(idd)
    {
    new query[128], Get[MAX_PLAYER_NAME];
    format(query, 128, "SELECT `Name` FROM `spieler` WHERE `id` = '%d'", idd);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    return Get;
    }
    //Edit: ok hat sich dann ja wohl erledigt^^

    The fact is, I am right. And if you think I'm wrong, you are wrong.