Dynamisches Haussystem mit MYSQL Fehler

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
  • Sehr geehrte Breadfish User,
    ich habe leider ein Problem mit meinem Haussystem. Es wird bei LoadHaus(hausid) entweder gar keine Abfrage gemacht oder das Pickup erscheint einfach nicht.


    P.S mysql_getfloat erfordert bei dem 4. Argument einen String, daher die Umwandlung.


    ////////////////// HAUS - SYSTEM ///////////////
    stock CreateHouse(Float:x,Float:y,Float:z,preis,inhaber[32],interior)
    {
    new query[256];
    format(query, sizeof(query), "INSERT INTO `houses` (`x`, `y`,`z`,`preis`,`inhaber`,`interior`) VALUES ('%d', '%d','%d','%d','%s','%d')",x,y,z,preis,inhaber,interior);
    mysql_query(query);
    return LoadHaus(mysql_insert_id());
    }
    ocmd:hcreate(playerid,params[])
    {
    if(GetPVarInt(playerid,"Adminlevel")< 5)
    {
    SendClientMessage(playerid,ROT,"Sie sind nicht befugt diesen Befehl zu benutzen!");
    }
    else
    {
    new hauspreis;
    new interior;
    if(sscanf(params,"dd",hauspreis,interior))
    {
    return SendClientMessage(playerid,WEISS,"Benutze:/hcreate [preis][interior]");
    }
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    CreateHouse(x,y,z,hauspreis,"Zu verkaufen",interior);
    }
    return 1;
    }
    stock LoadHaus(hausid)
    {
    new haus[32];
    format(haus,sizeof(haus),"%d",hausid);
    HausInfo[hausid][haus_x] = mysql_GetFloat("houses","x","id",haus);
    HausInfo[hausid][haus_y] = mysql_GetFloat("houses","y","id",haus);
    HausInfo[hausid][haus_z] = mysql_GetFloat("houses","z","id",haus);
    HausInfo[hausid][haus_preis] = mysql_GetInt("houses","preis","id",haus);
    //HausInfo[hausid][haus_verkauft] = mysql_GetInt("houses","verkauft","id",haus);
    HausInfo[hausid][haus_interior] = mysql_GetInt("houses","interior","id",haus);
    HausInfo[hausid][haus_miete] = mysql_GetInt("houses","miete","id",haus);
    format(HausInfo[hausid][mieter][0],MAX_PLAYER_NAME,"%s",mysql_GetString("houses","mieter1","id",haus));
    format(HausInfo[hausid][mieter][1],MAX_PLAYER_NAME,"%s",mysql_GetString("houses","mieter2","id",haus));
    format(HausInfo[hausid][mieter][2],MAX_PLAYER_NAME,"%s",mysql_GetString("houses","mieter3","id",haus));
    format(HausInfo[hausid][mieter][4],MAX_PLAYER_NAME,"%s",mysql_GetString("houses","mieter4","id",haus));
    HausInfo[hausid][haus_mietbar]=mysql_GetInt("houses","mietbar","id",haus);
    HausInfo[hausid][haus_virtualworld]=mysql_GetInt("houses","virtualworld","id",haus);
    format(HausInfo[hausid][haus_inhaber],32,"%s",mysql_GetString("houses","inhaber","id",haus));
    if(!strcmp(HausInfo[hausid][haus_inhaber],"Zu verkaufen"))
    {
    HausInfo[hausid][haus_symbol] = CreatePickup(1273 ,23,HausInfo[hausid][haus_x],HausInfo[hausid][haus_y],HausInfo[hausid][haus_z],0);
    new label[192];
    format(label,sizeof(label),"HAUS ID: %d\nZu verkaufen\nPreis:%d",hausid,HausInfo[hausid][haus_preis]);
    HausInfo[hausid][haus_label] = Create3DTextLabel(label,WEISS,HausInfo[hausid][haus_x],HausInfo[hausid][haus_y],HausInfo[hausid][haus_z],20.0,0);
    }
    else
    {
    HausInfo[hausid][haus_symbol] = CreatePickup(1272 ,23,HausInfo[hausid][haus_x],HausInfo[hausid][haus_y],HausInfo[hausid][haus_z],0);
    new label[192];
    new freiraum[MAX_HAUS];
    for(new i=0;i<4;i++)
    {
    new besetzt[MAX_HAUS];
    if(!strcmp(HausInfo[hausid][mieter][i],""))
    besetzt[hausid]++;
    freiraum[hausid]=4-besetzt[hausid];
    }
    if(freiraum[hausid] < 0)
    {
    freiraum[hausid]=0;
    }
    format(label,sizeof(label),"HAUS ID: %d\nBesitzer:%s\nMiete:%d\nFreie Räume:%d",hausid,HausInfo[hausid][haus_inhaber],HausInfo[hausid][haus_miete],freiraum[hausid]);
    HausInfo[hausid][haus_label] = Create3DTextLabel(label,WEISS,HausInfo[hausid][haus_x],HausInfo[hausid][haus_y],HausInfo[hausid][haus_z],20.0,0);
    }
    return 1;
    }



    OnPlayerAsks(playerid,text)
    {
    new needhelp[192];
    format(needhelp,sizeof(needhelp),"%s",text);
    if(playerid == needhelp)
    {
    SendPrivateMessage(a6150,0xF0F0F0FF,text);
    }
    return 1;
    }

  • Sorry, hatte bisher nur mit dini gearbeitet ^^
    Was auch interessant ist: Der Server returnt UNKNOWN Command .... obwohl überall return 1 steht..?
    ID wird richtig übergeben. Laut mysql_log findet kein Zugriff auf die DB statt.



    OnPlayerAsks(playerid,text)
    {
    new needhelp[192];
    format(needhelp,sizeof(needhelp),"%s",text);
    if(playerid == needhelp)
    {
    SendPrivateMessage(a6150,0xF0F0F0FF,text);
    }
    return 1;
    }

  • Das ist aber ja nicht der Fehler. LoadHaus (); wird definitiv aufgerufen.



    OnPlayerAsks(playerid,text)
    {
    new needhelp[192];
    format(needhelp,sizeof(needhelp),"%s",text);
    if(playerid == needhelp)
    {
    SendPrivateMessage(a6150,0xF0F0F0FF,text);
    }
    return 1;
    }

  • Nach Slash's Hilfe sehen die Befehle anders aus. Trotzdem funktioniert das System nicht. Nach "x" hört es auf.


    stock CreateHouse(Float:x,Float:y,Float:z,preis,inhaber[32],interior)
    {
    new query[256];
    format(query, sizeof(query), "INSERT INTO `houses` (`x`, `y`,`z`,`preis`,`inhaber`,`interior`) VALUES ('%f', '%f','%f','%d','%s','%d')",x,y,z,preis,inhaber,interior);
    mysql_query(query);
    new test[32];
    format(test,sizeof(test),"%d",mysql_insert_id());
    printf(test);
    LoadHaus(mysql_insert_id());
    }
    ocmd:hcreate(playerid,params[])
    {
    if(GetPVarInt(playerid,"Adminlevel")< 5)
    {
    SendClientMessage(playerid,ROT,"Sie sind nicht befugt diesen Befehl zu benutzen!");
    }
    else
    {
    new hauspreis;
    new interior;
    if(sscanf(params,"dd",hauspreis,interior))
    {
    return SendClientMessage(playerid,WEISS,"Benutze:/hcreate [preis][interior]");
    }
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    CreateHouse(x,y,z,hauspreis,"Zu verkaufen",interior);
    }
    return 1;
    }
    stock LoadHaus(hausid)
    {
    new data[50],query[100];
    format(query,sizeof(query),"SELECT * FROM `houses` WHERE `id`='%d'",hausid);
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows())
    {
    if(mysql_retrieve_row())
    {
    mysql_fetch_field_row(data,"x");
    HausInfo[hausid][haus_x]=floatstr(data);
    mysql_fetch_field_row(data,"y");
    HausInfo[hausid][haus_y]=floatstr(data);
    mysql_fetch_field_row(data,"z");
    HausInfo[hausid][haus_z]=floatstr(data);//söllte so funktionieren. MOMENT ^^ Siehst du das? sieht so aus als hat er nach X kein bock mehr. aber wieso?
    mysql_fetch_field_row(data,"preis");
    HausInfo[hausid][haus_preis]=strval(data);
    mysql_fetch_field_row(data,"interior");
    HausInfo[hausid][haus_interior]=strval(data);
    mysql_fetch_field_row(data,"miete");
    HausInfo[hausid][haus_miete]=strval(data);
    mysql_fetch_field_row(data,"mieter1");
    format(HausInfo[hausid][mieter][0],MAX_PLAYER_NAME,"%s",data);
    mysql_fetch_field_row(data,"mieter2");
    format(HausInfo[hausid][mieter][1],MAX_PLAYER_NAME,"%s",data);
    mysql_fetch_field_row(data,"mieter3");
    format(HausInfo[hausid][mieter][2],MAX_PLAYER_NAME,"%s",data);
    mysql_fetch_field_row(data,"mieter4");
    format(HausInfo[hausid][mieter][3],MAX_PLAYER_NAME,"%s",data);
    mysql_fetch_field_row(data,"mietbar");
    HausInfo[hausid][haus_mietbar]=strval(data);
    mysql_fetch_field_row(data,"virtualworld");
    HausInfo[hausid][haus_virtualworld]=strval(data);
    mysql_fetch_field_row(data,"inhaber");
    format(HausInfo[hausid][haus_inhaber],MAX_PLAYER_NAME,"%s",data);
    }
    }
    if(!strcmp(HausInfo[hausid][haus_inhaber],"Zu verkaufen"))
    {
    HausInfo[hausid][haus_symbol] = CreatePickup(1273 ,23,HausInfo[hausid][haus_x],HausInfo[hausid][haus_y],HausInfo[hausid][haus_z],0);
    new label[192];
    format(label,sizeof(label),"HAUS ID: %d\nZu verkaufen\nPreis:%d",hausid,HausInfo[hausid][haus_preis]);
    HausInfo[hausid][haus_label] = Create3DTextLabel(label,WEISS,HausInfo[hausid][haus_x],HausInfo[hausid][haus_y],HausInfo[hausid][haus_z],20.0,0);
    }
    else
    {
    HausInfo[hausid][haus_symbol] = CreatePickup(1272 ,23,HausInfo[hausid][haus_x],HausInfo[hausid][haus_y],HausInfo[hausid][haus_z],0);
    new label[192];
    new freiraum[MAX_HAUS];
    for(new i=0;i<4;i++)
    {
    new besetzt[MAX_HAUS];
    if(!strcmp(HausInfo[hausid][mieter][i],""))
    besetzt[hausid]++;
    freiraum[hausid]=4-besetzt[hausid];
    }
    if(freiraum[hausid] < 0)return freiraum[hausid]=0;
    format(label,sizeof(label),"HAUS ID: %d\nBesitzer:%s\nMiete:%d\nFreie Räume:%d",hausid,HausInfo[hausid][haus_inhaber],HausInfo[hausid][haus_miete],freiraum[hausid]);
    HausInfo[hausid][haus_label] = Create3DTextLabel(label,WEISS,HausInfo[hausid][haus_x],HausInfo[hausid][haus_y],HausInfo[hausid][haus_z],20.0,0);
    }
    mysql_free_result();
    return 1;
    }



    OnPlayerAsks(playerid,text)
    {
    new needhelp[192];
    format(needhelp,sizeof(needhelp),"%s",text);
    if(playerid == needhelp)
    {
    SendPrivateMessage(a6150,0xF0F0F0FF,text);
    }
    return 1;
    }

  • Ich würd die Daten mit Sscanf auslesen z.B. so


    stock LoadHaus(hausid)
    {
    format(query, sizeof(query), "SELECT * FROM `Houses` WHERE id='%d'",hausid);
    mysql_query(query);
    mysql_store_result();

    while(mysql_fetch_row(query))
    {
    sscanf(query, "p<|>fffddds[24]s[24]s[24]dds[24]",
    HausInfo[hausid][haus_x],
    HausInfo[hausid][haus_y],
    HausInfo[hausid][haus_z],
    HausInfo[hausid][haus_preis],
    HausInfo[hausid][haus_interior],
    HausInfo[hausid][haus_miete],
    HausInfo[hausid][mieter][0],
    HausInfo[hausid][mieter][1],
    HausInfo[hausid][mieter][2],
    HausInfo[hausid][mieter][3],
    HausInfo[hausid][haus_mietbar],
    HausInfo[hausid][haus_virtualworld],
    HausInfo[hausid][haus_inhaber]);
    mysql_free_result(query);
    }
    return 1;
    }


    * Beachte es ist nur eine Denkhilfe.

  • Denkt ihr es liegt wirklich an der Abfrage? Die funktioniert auf meine Weise auch mal sehr gut. Doch dann auf einmal nicht mehr....ohne im Quelltext irgendwas zu ändern



    OnPlayerAsks(playerid,text)
    {
    new needhelp[192];
    format(needhelp,sizeof(needhelp),"%s",text);
    if(playerid == needhelp)
    {
    SendPrivateMessage(a6150,0xF0F0F0FF,text);
    }
    return 1;
    }

  • Sehr gut, hast du Skype??
    // IMMER NOCH KEINE LÖSUNG GEFUNDEN!


    ////////////////// HAUS - SYSTEM ///////////////
    stock CreateHouse(Float:x,Float:y,Float:z,preis,inhaber[32],interior)
    {
    new query[256];
    format(query, sizeof(query), "INSERT INTO `houses` (`x`, `y`,`z`,`preis`,`inhaber`,`interior`) VALUES ('%f', '%f','%f','%d','%s','%d')",x,y,z,preis,inhaber,interior);
    mysql_query(query);
    LoadHaus(mysql_insert_id());
    }
    ocmd:hcreate(playerid,params[])
    {
    if(GetPVarInt(playerid,"Adminlevel")< 5)
    {
    SendClientMessage(playerid,ROT,"Sie sind nicht befugt diesen Befehl zu benutzen!");
    }
    else
    {
    new hauspreis;
    new interior;
    if(sscanf(params,"dd",hauspreis,interior))
    {
    return SendClientMessage(playerid,WEISS,"Benutze:/hcreate [preis][interior]");
    }
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    CreateHouse(x,y,z,hauspreis,"Zu verkaufen",interior);
    }
    return 1;
    }

    stock LoadHaus(hausid)
    {
    new query[500];
    format(query, sizeof(query), "SELECT * FROM `houses` WHERE id='%d'",hausid);
    mysql_query(query);
    mysql_store_result();
    while(mysql_fetch_row(query))
    {
    sscanf(query, "p<|>is[24]fffdddds[24]s[24]s[24]s[24]d",
    HausInfo[hausid][hID],
    HausInfo[hausid][haus_inhaber],
    HausInfo[hausid][haus_x],
    HausInfo[hausid][haus_y],
    HausInfo[hausid][haus_z],
    HausInfo[hausid][haus_preis],
    HausInfo[hausid][haus_interior],
    HausInfo[hausid][haus_miete],
    HausInfo[hausid][haus_mietbar],
    HausInfo[hausid][mieter][0],
    HausInfo[hausid][mieter][1],
    HausInfo[hausid][mieter][2],
    HausInfo[hausid][mieter][3],
    HausInfo[hausid][haus_mietbar],
    HausInfo[hausid][haus_virtualworld]);
    CreateHouseOnMap(hausid);
    mysql_free_result();
    printf(query);
    }
    return 1;
    }


    stock CreateHouseOnMap(hausid)
    {
    new Text[100];
    if(HausInfo[hausid][haus_miete] == 1)
    {
    format(Text,sizeof(Text),"Besitzer: %s",HausInfo[hausid][haus_inhaber]);
    HausInfo[hausid][haus_symbol] = CreateDynamicPickup(1239, 1, HausInfo[hausid][haus_x],HausInfo[hausid][haus_y],HausInfo[hausid][haus_z], -1);//Enter
    }else{
    printf("works");
    format(Text,sizeof(Text),"Das Haus ist zu verkaufen\nPreis: %d$\n/buyhouse - Haus kaufen", HausInfo[hausid][haus_preis]);
    HausInfo[hausid][haus_symbol] = CreateDynamicPickup(1273, 1, HausInfo[hausid][haus_x],HausInfo[hausid][haus_y],HausInfo[hausid][haus_z], -1);//Enter
    }
    HausInfo[hausid][haus_label] = Create3DTextLabel(Text,WEISS, HausInfo[hausid][haus_x],HausInfo[hausid][haus_y],HausInfo[hausid][haus_z], 15, 0);
    return 1;
    }


    P.S Skript speichert das Haus korrekt in die Datenbank. Skript lädt dieses auch korrekt, jedoch scheint der Server dabei "abzustürzen". Innerhalb von LoadHaus() wird kein einziges printf() ausgeführt und auch andere Pickups ( z.B LSPD Enter) funktionieren danach nicht mehr. Wenn ich LoadHaus() bei GameModeInit ausführe, so werden gar keine Pickups mehr geladen!



    OnPlayerAsks(playerid,text)
    {
    new needhelp[192];
    format(needhelp,sizeof(needhelp),"%s",text);
    if(playerid == needhelp)
    {
    SendPrivateMessage(a6150,0xF0F0F0FF,text);
    }
    return 1;
    }

    Einmal editiert, zuletzt von a6150 () aus folgendem Grund: Nach wie vor selber fehler