[MySQL][R5]Haussystem Bugt.

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 Tag liebe Community,


    Ich habe mir gerade ein Haussystem gescriptet was auch "eigentlich" funktioniert.
    Das Problem ist halt wenn ich auf meinem Server Joine und mich einlogge dann Spawne ich da wo
    die Farm ist und dort ist auch ein Haus-Icon obwohl ich da keins erstellt habe. Speichern und laden
    tut er allerdings die Häuser. Also wie gesagt ich habe kein Haus erstellt,logge mich ein Spawne da wo die Farm ist
    und da ist auch ein Haus-Icon. Bitte um dringende Hilfe. Danke im voraus. ;)


    Hier der stock wo das erstellt wird:


    stock CreateHaus(Float:x,Float:y,Float:z,Float:xi,Float:yi,Float:zi,preis,level,int,rooms)
    {
    for(new i=0;i<MAX_HAUS;i++)
    {
    i+=1;
    new query[800];
    format(query, sizeof(query), "INSERT INTO `haus` (`Besitzer`, `Preis`, `X`, `Y`, `Z`, `XI`, `YI`, `ZI`, `Level`, `Rooms`, `Interior`, `Lock`, `Hausid`) VALUES ('Niemand', '%i', '%f', '%f', '%f', '%f', '%f', '%f', '%i', '%i', '%i', '1', '%i')", preis,x,y,z,xi,yi,zi,level,rooms,int,i);
    mysql_query(query);
    printf("Haus %d wurde erstellt.",i);
    return LoadHaus(i);
    }
    return 1;
    }



    PS: Die MySQL-Log sagt das alles erfolgreich gespeichert und geladen wurde.

    Einmal editiert, zuletzt von SA:MP. ()

  • So kann man dir nicht wirklich helfen, dazu poste doch mal deine Funktion LoadHaus.


    Aber so nebenbei die logik deines Codes muss man nicht wirklich verstehen ?


    Die wird in dem fall immer 1 sein in der Datenbank es sei den du hast hausid auf AUTO_INCREMENT gestellt.


    Zu dem so wie du die Schleife nutzt ist das eher eine Zweckentfremdung, da du diese gleich abbrichst.


    Ich vermute jedoch eher das dein Fehler wie schon oben angemerkt bei "LoadHaus" befindet.

  • Ja ich habe `Hausid` auf AUTO_INCREMENT gestellt.
    Zu dem arbeite ich immer erst grob dann überarbeite ich immer das System wenn es erstmal Bugfrei funktioniert.
    Ich mach es halt so die anderen machen es halt immer direckt Perfekt. Hier mal mein stock zum laden des Hauses.
    Ich zeige jetzt nur das wichtigste in diesem Stock:


    for(new i=0;i<MAX_HAUS;i++)
    {
    new string[128],str[64];
    format(string,sizeof(string),"%d",hausid);
    HausInfo[hausid][haus_vw] = hausid;
    HausInfo[hausid][haus_id] = mysql_GetInt("haus", "Hausid", "Hausid", string);
    HausInfo[hausid][haus_x] = mysql_GetFloat("haus", "X", "Hausid", string);
    HausInfo[hausid][haus_y] = mysql_GetFloat("haus", "Y", "Hausid", string);
    HausInfo[hausid][haus_z] = mysql_GetFloat("haus", "Z", "Hausid", string);
    HausInfo[hausid][haus_xi] = mysql_GetFloat("haus", "XI", "Hausid", string);
    HausInfo[hausid][haus_yi] = mysql_GetFloat("haus", "YI", "Hausid", string);
    HausInfo[hausid][haus_zi] = mysql_GetFloat("haus", "ZI", "Hausid", string);
    HausInfo[hausid][haus_preis] = mysql_GetInt("haus", "Preis", "Hausid", string);
    HausInfo[hausid][haus_level] = mysql_GetInt("haus", "Level", "Hausid", string);
    HausInfo[hausid][haus_rooms] = mysql_GetInt("haus", "Rooms", "Hausid", string);
    HausInfo[hausid][haus_int] = mysql_GetInt("haus", "Interior", "Hausid", string);
    HausInfo[hausid][haus_lock] = mysql_GetInt("haus", "Lock", "Hausid", string);
    HausInfo[hausid][haus_vkt] = mysql_GetInt("haus", "Verkauft", "Hausid", string);
    HausInfo[hausid][haus_kasse] = mysql_GetInt("haus", "Kasse", "Hausid", string);
    }
    return 1;


  • hausid ist schon ein argument deiner Funktion LoadHaus
    sprich:



    stock LoadHaus(hausid)

  • Mach mir mal bitte ein Beispiel was du damit meinst. Komme gerade nicht mit deinem Satz klar.




    stock CreateHaus(Float:x,Float:y,Float:z,Float:xi,Float:yi,Float:zi,preis,level,int,rooms)
    {
    new i;
    for(;i != MAX_HAUS; ++i)if(HausInfo[i][haus_id] == 0)break;
    if(i == (MAX_HAUS-1))return 1;
    new query[500];
    format(query, 500, "INSERT INTO `haus` (`Besitzer`, `Preis`, `X`, `Y`, `Z`, `XI`, `YI`, `ZI`, `Level`, `Rooms`, `Interior`, `Lock`, `Hausid`) VALUES ('Niemand', '%i', '%f', '%f', '%f', '%f', '%f', '%f', '%i', '%i', '%i', '1', 0)", preis,x,y,z,xi,yi,zi,level,rooms,int);
    mysql_query(query);
    return LoadHaus(i,mysql_insert_id());
    }
    stock LoadHaus(hausid,lastinsert){
    new query[400];
    format(query,64,"SELECT * FROM `haus` WHERE `Hausid` == %d;",lastinsert);
    HausInfo[hausid][haus_vw] = lastinsert;
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row_format(query);
    sscanf(query, .....
    return mysql_free_result(query);


    }




    Also ich würde das ganze in Abhängigkeit von deiner Vorgehensweise so machen.



    Persönlich nochmal ganz anders die ganzen Häuser erst laden wenn der Server hochfährt und beim erstellen ingame erst der datenbank hinzufügen und aus den restlichen Standartwerten das direkt ohne erneut zu laden erstellen, jedoch benötigt man dennoch dafür die id des datensatzes hier hausid