MySQL Problem Häuser! siehe Unten

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 Mitscripter!


    Ich hab gestern n Haussystem angefangen und wollte mir eig. nur n paar Pickups per Array erstellen lassen, aber
    irgendwo ist ein Haken, denn es wird nur das Pickup des ersten Hauses erstellt. (HausID 0)


    Vielleicht findet ja einer von euch den Fehler.
    Habe übrigens ein Ammunation-Shop-System, welches genauso arbeitet/funktioniert. :D


    enum p_HausDaten
    {
    h_ID,
    Float:h_x,
    Float:h_y,
    Float:h_z,
    h_interior,
    h_vworld,
    Float:h_px,
    Float:h_py,
    Float:h_pz,
    h_Preis,
    h_locked,
    h_Name[32],
    h_Besitzer[MAX_PLAYER_NAME]
    }
    new HausInfo[MAX_HAUS][p_HausDaten] = {
    {0,2527.654052,-1679.388305,1015.498596,1,300,2459.5750,-1690.8630,13.5434,1250},
    {1,2454.717041,-1700.871582,1013.515197,2,300,2523.7327,-1658.7029,15.4935,1230},
    {2,2807.619873,-1171.899902,1025.570312,8,300,2512.8721,-1651.3833,13.9735,1240}
    };
    new HausPickups[MAX_HAUS];
    new Text3D:HausLabels[MAX_HAUS];

    stock CreateHouses()
    {
    new str[128];
    for(new i;i<MAX_HAUS;i++)
    {
    HausPickups[i] = CreatePickup(1239,23,HausInfo[i][h_px],HausInfo[i][h_py],HausInfo[i][h_pz],0);
    format(str,sizeof(str),"%s\nHausID: %d\nBesitzer: %s\nPreis: $%d",HausInfo[i][h_Name],HausInfo[i][h_ID],HausInfo[i][h_Besitzer],HausInfo[i][h_Preis]);
    HausLabels[i] = Create3DTextLabel(str,0xFFFFFFFF,HausInfo[i][h_px],HausInfo[i][h_py],HausInfo[i][h_pz],10,0,0);
    }
    return 1;
    }
    stock KillHouses()
    {
    for(new i;i<MAX_HAUS;i++)
    {
    DestroyPickup(HausPickups[i]);
    Delete3DTextLabel(HausLabels[i]);
    }
    return 1;
    }


    //Gelöst.

  • Ändert nichts.
    Wie gesagt, Ammunation System basiert auf dem selben Prinzip. Hab hier nur kopiert
    und neue Werte eingesetzt für's Haussystem.


    //Edit:
    Okey, doch nicht gelöst.
    1x nachm restart funktioniert alles perfekt und man kann die namen ändern (sie werden auch gespeichert) etc. , aber wenn man
    dann restartet lädt wieder nur das Pickup von HausID 0.
    Ich versteh es nicht, hat vllt jmd. Erfahrung mit ID Verschiebungen etc?
    //Edit2:
    Hier noch die Speicher und Laden Funktion.
    stock SaveHouses()
    {
    new Query[128];
    for(new i;i<MAX_HAUS;i++)
    {
    if(!CheckHaus(i))
    {
    format(Query,128,"INSERT INTO Häuser (HausID, Besitzer, Hausname) VALUES ('%d', '%s', '%s')",HausInfo[i][h_ID],HausInfo[i][h_Besitzer],HausInfo[i][h_Name]);
    mysql_query(Query);
    }
    else
    {
    mysql_SetString("Häuser", "Besitzer", HausInfo[i][h_Besitzer], "HausID", HausInfo[i][h_ID]);
    mysql_SetString("Häuser", "Hausname", HausInfo[i][h_Name], "HausID", HausInfo[i][h_ID]);
    }
    }
    return 1;
    }
    stock LoadHouses()
    {
    for(new i;i<MAX_HAUS;i++)
    {
    if(CheckHaus(i))
    {
    format(HausInfo[i][h_Besitzer],MAX_PLAYER_NAME,"%s",mysql_GetString("Häuser", "Besitzer", "HausID", HausInfo[i][h_ID]));
    format(HausInfo[i][h_Name],32,"%s",mysql_GetString("Häuser", "Hausname", "HausID", HausInfo[i][h_ID]));
    }
    }
    return 1;
    }

  • Brauchst mir die Kleinigkeiten (auch wenns nett gemeint ist :) ) nicht zu erklären, kannst sowas ruhig außer Acht lassen. Spart Zeit für uns Beide :P


    Und ja, nur HausID 0 (also erstes Haus :D ) wird erstellt.
    Per printf kam auch nicht so viel Info, da dies mir nur gezeigt hat, dass
    die Pickups nicht gesetzt werden.


    Also selbst wenn der stock zum Laden nicht funken würde (tut er aber, da bei HausID 0 der Name noch stimmt als anfangs alle geladen wurden), müssten die Pickups ja erstellt werden.


    Komischer Bug. :S

  • Weiß ich nicht. Das ist ja das komische an der ganzen Sache.
    Beim ersten Restart nachm Uploaden des Scripts werden alle Pickups erstellt und man kann "Hausname" einspeichern.
    Laut Tabelle stimmen die Namen auch.
    Nach dem nächsten gmx-restart fehlen HausID 1 & 2 und nur 0 ist noch mit dem richtigen Namen vorhanden.


    // Die Tabelle behält aber alle Namen bei. Da wird auch nichts gelöscht.

  • Woher weißt du denn, dass es definitiv ein mysql Fehler ist?


    //Edit:
    Also ich bin mir auch ziemlich sicher, dass es einer ist, da ich die Pickups mal "erzwungen" habe, indem
    ich ein extra enum für sie angelegt habe, aber man weiß ja nie. :D


    //Edit 2:
    Und als ich dann alle hatte, wurden sie alle mit den Infos von HausID 0 bestückt. ^^


    //Edit 3:
    Ok hab's mir gerade selbst erklärt xD


    Dann such ich jetzt jmd. mit MySQL Kentnissen, der mir helfen kann.

  • Ich check nicht woran das liegen kann.
    1x funktioniert doch alles, dann wird nur noch HausID 0 geladen, aber die Namen wurden trotzdem alle gespeichert.


    //Edit:


    Das mit den Pickups funktioniert nun!
    Problem: Eingetragene Strings werden nicht richtig ausgelesen.


    Aktuelle Codes:


    enum p_HausDaten
    {
    h_ID,
    Float:h_x,
    Float:h_y,
    Float:h_z,
    h_interior,
    h_vworld,
    Float:h_px,
    Float:h_py,
    Float:h_pz,
    h_Preis,
    h_locked,
    h_Name[32],
    h_Besitzer[MAX_PLAYER_NAME]
    }
    new HausInfo[MAX_HAUS][p_HausDaten] = {
    {0,2527.654052,-1679.388305,1015.498596,1,300,2459.5750,-1690.8630,13.5434,1250},
    {1,2454.717041,-1700.871582,1013.515197,2,301,2523.7327,-1658.7029,15.4935,1230},
    {2,2807.619873,-1171.899902,1025.570312,8,302,2512.8721,-1651.3833,13.9735,1240}
    };
    new HausPickups[MAX_HAUS];
    new Text3D:HausLabels[MAX_HAUS];


    stock CheckHaus(id)
    {
    new Query[128];
    format(Query,128,"SELECT * FROM `Houses` WHERE `HausID` = '%d'",id);
    mysql_query(Query);
    mysql_store_result();
    new ergb = mysql_num_rows();
    return ergb;
    }


    stock SaveHouses()
    {
    new Query[128];
    for(new i;i<MAX_HAUS;i++)
    {
    if(!CheckHaus(i))
    {
    format(Query,128,"INSERT INTO Houses (HausID, Besitzer, Hausname) VALUES ('%d', '%s', '%s')",HausInfo[i][h_ID],HausInfo[i][h_Besitzer],HausInfo[i][h_Name]);
    mysql_query(Query);
    }
    else
    {
    mysql_SetString("Houses", "Besitzer", HausInfo[i][h_Besitzer], "HausID", HausInfo[i][h_ID]);
    mysql_SetString("Houses", "Hausname", HausInfo[i][h_Name], "HausID", HausInfo[i][h_ID]);
    }
    DestroyPickup(HausPickups[i]);
    Delete3DTextLabel(HausLabels[i]);
    }
    return 1;
    }


    stock LoadHouses()
    {
    new str[124];
    for(new i;i<MAX_HAUS;i++)
    {
    if(CheckHaus(i))
    {
    format(HausInfo[i][h_Besitzer],MAX_PLAYER_NAME,"%s",mysql_GetString2("Houses", "Besitzer", "HausID", HausInfo[i][h_ID]));
    format(HausInfo[i][h_Name],32,"%s",mysql_GetString2("Houses", "Hausname", "HausID", HausInfo[i][h_ID]));
    }
    HausPickups[i] = CreatePickup(1239,23,HausInfo[i][h_px],HausInfo[i][h_py],HausInfo[i][h_pz],0);
    format(str,sizeof(str),"%s\nHausID: %d\nBesitzer: %s\nPreis: $%d",HausInfo[i][h_Name],HausInfo[i][h_ID],HausInfo[i][h_Besitzer],HausInfo[i][h_Preis]);
    HausLabels[i] = Create3DTextLabel(str,0xFFFFFFFF,HausInfo[i][h_px],HausInfo[i][h_py],HausInfo[i][h_pz],10,0,0);
    }
    return 1;
    }


    Alle Labels haben die Werte von HausID 0.
    Entweder funktioniert der stock CheckHaus nicht oder es liegt am Laden.


    //Edit:
    Worttrennung.