HausSystem Problem

  • HausSystem Problem

    Abend,

    ich sitze derzeit an meinem HausSystem von meinem neuen Selfmade (altes durch festplattenfehler weg) und habe nun das selbe Problem wie früher, undzwar werden Häuser nach dem erstellen nicht richtig gespeichert (ich weiß nicht wie ichs früher hinbekommen hab)

    Code
    [pwn]ocmd:hcreate(playerid, params[])
    {
    if(IsPlayerInGame(playerid))
    {
    if(SpielerInfo[playerid][pAdmin] >= 4)
    {
    new preis, level, SQL[250];
    if(sscanf(params, "ii", preis, level))return SendClientMessage(playerid, WEIß, "Nutze: /hcreate [Preis] [Level]");
    if(level <= 2) return SendClientMessage(playerid, ROT, "Das level muss mindestens 3 betragen!");
    if(preis <= 49999)return SendClientMessage(playerid, ROT, "Der Preis muss mindestens $50.000 betragen!");
    GetPlayerPos(playerid, PosX, PosY, PosZ);
    format(SQL, sizeof(SQL), "INSERT INTO Haus (Preis, Level, EnterX, EnterY, EnterZ) VALUES ('%d', '%d', '%f', '%f', '%f')", preis, level, PosX, PosY, PosZ);
    mysql_query(SQL);
    printf("%s", SQL);
    SendClientMessage(playerid, GELB, "--> Du hast das Haus erfolgreich erstellt!");
    for(new Var; Var < MaxHaus; Var++)
    {
    DestroyHouse(Var);
    }
    LoadHouses();
    }
    }
    return 1;
    }[/pwn]


    #e
    Nun hatte vergessen in der DB die Coords in einem Float Speichern zu lassen nun sind die Coords auch richtig aber trotzdem ist da wo ichs erstelle nix (hab auch die Virtuellen Welten durchgeschaut, NIX)

    MfG

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von SweizY ()

  • Beschreib das Problem mal bitte genauer.
    "werden [...] nicht richtig gespeichert..." kann alles möglich bedeuten.

    Wo genau liegt denn das Problem?
    - Werden keine Datensätze in die Datenbank eingetragen?
    - Oder werden Datensätze mit falschen Werten eingetragen?
    - Oder ...

    So wie du es beschreibst (in deinem Editvermerk) scheint mglw. ein Problem beim Laden (bzw. Anzeigen) der Häuser vorzuliegen:
    aber trotzdem ist da wo ichs erstelle nix

    Was genau sollte dort sein? Ein Pickup? Ein 3D-Textlabel?
  • Du brauchst hier nicht auf das Breadfish Niveau herab zu sinken den dort steht das es keine Probleme mit der MySQL DB gibt und dort steht auch das alle Werte richtig eingetragen werden ;) es fehlen nur die Pickups + 3DTextLabel und damit du nicht schreibst "ey zeig mal deinen Haus laden stock" schreibe ich diesen.
    Bevor du das nächste mal dashier schreibst:
    - Werden keine Datensätze in die Datenbank eingetragen?
    - Oder werden Datensätze mit falschen Werten eingetragen?

    Solltest du besser lesen ;)
    [pwn]stock LoadHouse(ID)
    {
    new Text[100], sql[100];
    format(string, sizeof string, "%i", ID);
    HausInfo[ID][hEnterX] = mysql_GetInt("Haus", "EnterX", "ID", string);
    HausInfo[ID][hEnterY] = mysql_GetInt("Haus", "EnterY", "ID", string);
    HausInfo[ID][hEnterZ] = mysql_GetInt("Haus", "EnterZ", "ID", string);
    HausInfo[ID][hExitX] = mysql_GetInt("Haus", "ExitX", "ID", string);
    HausInfo[ID][hExitY] = mysql_GetInt("Haus", "ExitY", "ID", string);
    HausInfo[ID][hExitZ] = mysql_GetInt("Haus", "ExitZ", "ID", string);
    HausInfo[ID][hInterior] = mysql_GetInt("Haus", "Interior", "ID", string);
    HausInfo[ID][hVW] = mysql_GetInt("Haus", "VW", "ID", string);
    format(sql, sizeof(sql), "UPDATE Haus SET `VW` = '%d' WHERE ID = '%d'", ID+1, ID);
    mysql_query(sql);
    HausInfo[ID][hPreis] = mysql_GetInt("Haus", "Preis", "ID", string);
    HausInfo[ID][hLevel] = mysql_GetInt("Haus", "Preis", "ID", string);
    format(HausInfo[ID][hBesitzer], MAX_PLAYER_NAME, mysql_GetString("Haus", "Besitzer", "ID", string));
    HausInfo[ID][hMiete] = mysql_GetInt("Haus", "Miete", "ID", string);
    HausInfo[ID][hKasse] = mysql_GetInt("Haus", "Kasse", "ID", string);
    HausInfo[ID][hLocked] = mysql_GetInt("Haus", "Locked", "ID", string);
    if(strlen(HausInfo[ID][hBesitzer]) < 2)
    {
    format(Text, sizeof Text, "Haus zu verkaufen!\nPreis: $%i\nLevel: %i", HausInfo[ID][hPreis], HausInfo[ID][hLevel]);
    HausInfo[ID][hPickup] = CreatePickup(1273, 23, HausInfo[ID][hEnterX], HausInfo[ID][hEnterY], HausInfo[ID][hEnterZ], 0);
    }/*else if(HausInfo[ID][hMiete] == 0)
    {
    format(Text, sizeof Text, "Besitzer: %s", HausInfo[ID][hBesitzer]);
    HausInfo[ID][hPickup] = CreatePickup(1239, 23, HausInfo[ID][hEnterX], HausInfo[ID][hEnterY], HausInfo[ID][hEnterZ], 0);
    }else if(HausInfo[ID][hMiete] >= 1)
    {
    format(Text, sizeof Text, "Besitzer: %s\nMiete: %i", HausInfo[ID][hBesitzer], HausInfo[ID][hMiete]);
    HausInfo[ID][hPickup] = CreatePickup(1239, 23, HausInfo[ID][hEnterX], HausInfo[ID][hEnterY], HausInfo[ID][hEnterZ], 0);
    }*/
    HausInfo[ID][hText] = Create3DTextLabel(Text, GRÜN, HausInfo[ID][hEnterX], HausInfo[ID][hEnterY], HausInfo[ID][hEnterZ], 50, 0);
    Update3DTextLabelText(HausInfo[ID][hText], GRÜN, Text);
    return 1;
    }[/pwn]
  • Wie ich selbst geschrieben habe, gehen aus deinem Startpost keine genaueren (bzw. nur in geringem Maße) Informationen zum Problem hervor.
    Das hat nichts mit "Breadfish Niveau" zu tun (und auch nichts damit, dass ich deinen Beitrag nicht richtig gelesen hätte).


    Jetzt aber weg von den unnötigen Vorwürfen und Anschuldigungen und wieder zurück zum Thema.

    Was mir direkt schon mal auffällt:
    [pwn]HausInfo[ID][hEnterX] = mysql_GetInt("Haus", "EnterX", "ID", string);
    // usw.[/pwn]
    hEnterX steht scheinbar für eine Koordinate, daher ist der Datentyp der Variable Float statt Int.
    Statt mysql_GetInt also mysql_GetFloat hier.

    [pwn]HausInfo[ID][hText] = Create3DTextLabel(Text, GRÜN, HausInfo[ID][hEnterX], HausInfo[ID][hEnterY], HausInfo[ID][hEnterZ], 50, 0);[/pwn]
    Der Parameter "DrawDistance" (hier der vorletzte) ist ebenfalls vom Datentyp Float.
    Daher sollte an die Funktion statt 50 lieber 50.0 als Parameter übergeben werden.
  • Ah okay danke jedoch spinnt nun der Stock zum auslesen eines Floats 8| ?
    [pwn]Current directory: C:\Users\Shufro\Desktop\0.3e\gamemodes
    selfmade.pwn(1605) : warning 213: tag mismatch
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


    1 Warning.
    ================ READY ================[/pwn]
    [pwn]stock mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Float:sqlfloat;
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT %s FROM %s WHERE %s = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_float(sqlfloat);
    mysql_free_result();
    return sqlfloat;//Errorzeile
    }[/pwn]
  • Da die Funktion eine Variable mit dem Tag "Float" zurückgibt, muss vor den Namen der Funktion auch der jeweilige Tag stehen.
    [pwn]stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])[/pwn]

    Weiterhin muss man noch darauf achten, dass die Funktion im Script möglich weit oben definiert wird. Denn Funktionen
    mit Tags müssen definiert werden, bevor sie das erste Mal aufgerufen werden.
    Ist leider so und führt oft zu Fehlern. :S

    Mit freundlichen Grüßen
  • Das hatte ich bereits gefixxt nur vergessen zu editieren ^^
    hab aber das Problem sobald ich die Pos des hauses ändere das nichts in die DB eingetragen wird...

    Code:
    [pwn]GetPlayerPos(playerid, PosX, PosY, PosZ);
    format(SQL, sizeof(SQL), "UPDATE Haus SET `ExitX`, `ExitY`, `ExitZ`, `Interior` = '%f', '%f', '%f', '%d' WHERE ID = '%d'", PosX, PosY, PosZ, GetPlayerInterior(playerid), GetPVarInt(playerid, "AtHouse"));
    mysql_query(SQL);
    printf("%s", SQL);[/pwn]

    Ausgabe:

    SQL-Abfrage

    1. UPDATE Haus SET `ExitX`, `ExitY`, `ExitZ`, `Interior` = '-100.465682', '-24.632596', '1000.718750', '3' WHERE ID = '3'

    Aber in der DB steht noch der vorherige Wert?
  • Okay, danke funktioniert nun alles soweit nur ein Problem wen ich die Position ändere ist steht im 3DTextLabel bei "Level" der Preis des Hauses?

    laden tue ich es ja so
    [pwn]format(Text, sizeof Text, "Haus zu verkaufen!\nPreis: $%i\nLevel: %i", HausInfo[schleife][hPreis], HausInfo[schleife][hLevel]);[/pwn]
    und da finde ich keinen Fehler ...
  • Hätte noch eine Frage, undzwar ich habe es so gemacht das ein 3DText label text aus der DB ausgelesen wird, wen ich z.b. schreibe "Test\nInterior" wird das nicht gesaved? :/

    Code:
    [pwn]IntInfo[GetPVarInt(playerid, "AtInt")][i3DText] = strval(inputtext);
    format(SQL, sizeof(SQL), "UPDATE Interiors SET 3DText = '%s' WHERE ID = '%d'", IntInfo[GetPVarInt(playerid, "AtInt")][i3DText], GetPVarInt(playerid, "AtInt"));
    mysql_query(SQL);
    SendClientMessage(playerid, GELB, "Du hast die Beschreibung in %s geändert", strval(inputtext));
    DestroyInteriors(GetPVarInt(playerid, "AtInt"));
    LoadInterior(GetPVarInt(playerid, "AtInt"));[/pwn]
  • Die 3DTexte werden zwar jetzt gespeichert jedoch werden nur die ersten 4 bustaben zahlen etc angezeigt z.b. nenne ich es "Medic-Base" aber es steht dort "Medi" ?

    So wirds geladen:
    [pwn] format(Text, sizeof Text, "%s", IntInfo[ID][i3DText]);
    IntInfo[ID][iPick1] = CreatePickup(1239, 23, IntInfo[ID][iEnterX], IntInfo[ID][iEnterY], IntInfo[ID][iEnterZ], 0);
    IntInfo[ID][iPick2] = CreatePickup(1239, 23, IntInfo[ID][iExitX], IntInfo[ID][iExitY], IntInfo[ID][iExitZ], IntInfo[ID][iVW]);
    IntInfo[ID][iText] = Create3DTextLabel(Text, BLAU, IntInfo[ID][iEnterX], IntInfo[ID][iEnterY], IntInfo[ID][iEnterZ], 50, 0);
    Update3DTextLabelText(IntInfo[ID][iText], BLAU, Text);[/pwn]