Beim Befehl Server = "Closed"

  • Beim Befehl Server = "Closed"

    Hallo Leute.
    Ich habe ein kleines Problem mit MySQL, undzwar hängt sich mein Server immer auf, sobald ich folgenden Befehl im Spiel eintippe. (Es wird alles ausgeführt, habs schon selber debuggt.)
    [pwn]
    forward SaveHouses();
    public SaveHouses()
    {
    new str[15];
    new house = 1;
    while(house < MAX_HOUSES)
    {
    format(str, sizeof(str), "%d", house);
    mysql_SetFloat("Houses", "EnterX", Haus[house][EnterX], "ID", str);
    mysql_SetFloat("Houses", "EnterY", Haus[house][EnterY], "ID", str);
    mysql_SetFloat("Houses", "EnterZ", Haus[house][EnterZ], "ID", str);
    mysql_SetFloat("Houses", "ExitX", Haus[house][ExitX], "ID", str);
    mysql_SetFloat("Houses", "ExitY", Haus[house][ExitY], "ID", str);
    mysql_SetFloat("Houses", "ExitZ", Haus[house][ExitZ], "ID", str);
    mysql_SetString("Houses", "Besitzer", Haus[house][hBesitzer], "ID", str);
    mysql_SetString("Houses", "Name", Haus[house][hName], "ID", str);
    mysql_SetInt("Houses", "Preis", Haus[house][hPreis], "ID", str);
    mysql_SetInt("Houses", "Mieten", Haus[house][hMieten], "ID", str);
    mysql_SetInt("Houses", "Lock", Haus[house][hLock], "ID", str);
    mysql_SetInt("Houses", "MietPreis", Haus[house][hMietPreis], "ID", str);
    mysql_SetInt("Houses", "Interior", Haus[house][hInterior], "ID", str);
    Delete3DTextLabel(Haus[house][hText]);
    DestroyPickup(Haus[house][hPickup]);
    }
    return 1;
    }

    forward LoadHouses();
    public LoadHouses()
    {
    new str[15], str2[128];
    new house = 1;
    while(house < MAX_HOUSES)
    {
    format(str, sizeof(str), "%d", house);
    Haus[house][hID] = mysql_GetInt("Houses", "ID", "ID", str);
    Haus[house][EnterX] = mysql_GetFloat("Houses", "EnterX", "ID", str);
    Haus[house][EnterY] = mysql_GetFloat("Houses", "EnterY", "ID", str);
    Haus[house][EnterZ] = mysql_GetFloat("Houses", "EnterZ", "ID", str);
    Haus[house][ExitX] = mysql_GetFloat("Houses", "ExitX", "ID", str);
    Haus[house][ExitY] = mysql_GetFloat("Houses", "ExitY", "ID", str);
    Haus[house][ExitZ] = mysql_GetFloat("Houses", "ExitZ", "ID", str);
    format(Haus[house][hBesitzer], MAX_PLAYER_NAME, mysql_GetString("Houses", "Besitzer", "ID", str));
    format(Haus[house][hName], MAX_PLAYER_NAME, mysql_GetString("Houses", "Name", "ID", str));
    Haus[house][hPreis] = mysql_GetInt("Houses", "Preis", "ID", str);
    Haus[house][hMieten] = mysql_GetInt("Houses", "Mieten", "ID", str);
    Haus[house][hLock] = mysql_GetInt("Houses", "Lock", "ID", str);
    Haus[house][hMietPreis] = mysql_GetInt("Houses", "MietPreis", "ID", str);
    Haus[house][hInterior] = mysql_GetInt("Houses", "Interior", "ID", str);
    if(strcmp(Haus[house][hBesitzer], "Niemand", true) == 0)
    {
    format(str2, sizeof(str2), "Dieses Haus gehört: Niemand\n \nPreis: %i$\nBeschreibung: %s\n \nTippe /buyhouse zum kaufen", Haus[house][hPreis], Haus[house][hName]);
    }
    else
    {
    if(Haus[house][hMieten] == 0)
    {
    format(str2, sizeof(str2), "Dieses Haus gehört: %s.\n \nBeschreibung: %s", Haus[house][hBesitzer], Haus[house][hName]);
    }
    else if(Haus[house][hMieten] == 1)
    {
    format(str2, sizeof(str2), "Dieses Haus gehört: %s.\n \nBeschreibung: %s\nMiete: %i$", Haus[house][hBesitzer], Haus[house][hPreis], Haus[house][hMietPreis]);
    }
    }
    Haus[house][hText] = Create3DTextLabel(str2, COLOR_PROP, Haus[house][EnterX], Haus[house][EnterY], Haus[house][EnterZ],10.0,0,0);
    Haus[house][hPickup] = CreatePickup(1239, 1, Haus[house][EnterX], Haus[house][EnterY], Haus[house][EnterZ],0);
    printf("House-Name: %s", Haus[house][hName]);
    house++;
    }
    return 1;
    }[/pwn]

    Achja, PS: Die Häuser werden bei OnGameModeInit geladen und bei OnGameModeExit gespeichert. ;)
    Mit freundlichen Grüßen, Ap0llinaris.

    [Blockierte Grafik: http://img6.imagebanana.com/img/lb4rwabb/newsig111.png]
  • Bei SaveHouses() erhöhst du house nicht, dadurch wirds zu ner endlos schleife.

    Und ich würde dir wirklich empfehlen das ganze nicht mit den mysql_GetX und mysql_SetX funktionen zu machen.
    Du musst bedenken, SaveHouses() sind 13*MAX_HOUSES Querys. Das könnte man Theoretisch auf 1 (!) zusammen führen. Das würde deinen Server sicher auch entlasten.

    Gleiches auch bei LoadHouses(). Da kann man wunderbar mit MySQL arbeiten, weil du praktisch nur alle Häuser aus der DB holen musst, und dann einfach per While durch die einzelnen Häuse loopen musst und dir dann die entsprechenden Werte raus holen kannst.

    Wenn du magst, kann ich dir dazu ein bisschen was machen (Natürlich nicht alles, aber so das du verstehst was ich meine und wie du arbeiten musst, falls du es nicht selbst weisst). Falls nicht, hoffe ich das dir der Post trotzdem in irgendeiner Form geholfen hat :P

    Mfg.