Haussystem geht nicht richtig

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
  • Hay,


    wenn ich immer Ingame "/Hauserstellen" eingebe und dazu die Daten, passiert nicht viel... es wird zwar was in der Tabelle erstellt, aber es wird nicht ein PickUp erstellt, geschweige noch 3D-Text



    ocmd:hauserstellen(playerid,params[]) if(SpielerInfo[playerid][pAlevel] >= 5)[/size][size=10] {[/size][size=10] new Preis,Level,AZimmer = 0, MZimmer,Beschreibung[MaxHausBeschreibung];[/size][size=10] if(sscanf(params,"iiis[100]",Preis, Level, MZimmer, Beschreibung))return SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} Benutze: /Hauserstellen [Preis] [Level] [M.Zimmeranzahl] [Beschreibung]");[/size][size=10] if(strlen(Beschreibung) < MinHausBeschreibung || strlen(Beschreibung) > MaxHausBeschreibung)return SendClientMessage(playerid, 0xFF0000FF, "[FEHLER]{FFFFFF}Die Beschreibung ist zu kurz oder zu lang!(Mind. 4 Zeichen || Max. 12 Zeichen)");[/size][size=10] if(Preis < MinHausPreis || Preis > MaxHausPreis)return SendClientMessage(playerid, 0xFF0000FF, "[FEHLER]{FFFFFF}Der Preis ist zu hoch oder zu tief!(Mind. 1$ || Max. 1000000$)");[/size][size=10] if(MZimmer < MinHausZimmer || MZimmer > MaxHausZimmer)return SendClientMessage(playerid, 0xFF0000FF, "[FEHLER]{FFFFFF}Die Zimmer sind zu wenig oder zu viel!(Mind. 1 Zimmer || Max. 100 Zimmer)");[/size][size=10] if(Level < MinHausLevel || Level > MaxHausLevel)return SendClientMessage(playerid, 0xFF0000FF, "[FEHLER]{FFFFFF}Der Level ist zu hoch oder zu niedrig!(Mind. Level 1 || Max. Level 99)");[/size][size=10] {[/size][size=10] new Float:x,Float:y,Float:z,SQL[300];[/size][size=10] GetPlayerPos(playerid, x, y, z); //Die Hauspostion/Spielerpostion wird geholt.[/size][size=10] format(SQL, sizeof(SQL), "INSERT INTO hauser (Beschreibung, Preis, AZimmer, MZimmer , Level, HausPosX, HausPosY, HausPosZ) VALUES ('%s', '%i', '%i', '%i', '%i', '%f', '%f', '%f')",Beschreibung, Preis, AZimmer, MZimmer, Level, x, y, z);[/size][size=10] mysql_query(SQL);[/size][size=10] SendClientMessage(playerid, 0xFF0000FF, "[H-INFO] {FFFFFF}Das Haus wurde erfolgreich erstellt!");[/size][size=10] printf("Es wurde ein Haus erstellt!");[/size][size=10] for(new Var; Var < MaxHaus; Var++)[/size][size=10] { [/size][size=10] DestroyHouse(Var); [/size][size=10] }[/size][size=10] LoadHouses();[/size][size=10] }[/size][size=10] [/size][size=10] }[/size][size=10] return 1;[/size][size=10]}[/size]
    [size=10]
    stock LoadHouses()
    {
    new Schleife = 1,String[5],Text[150];
    while(Schleife < MaxHaus)
    {
    format(String, sizeof(String), "%d", Schleife);
    Haus[Schleife][hID] = mysql_GetInt("hauser", "hID", "ID", String);
    format(Haus[Schleife][hBesitzer], MAX_PLAYER_NAME, mysql_GetString("hauser", "Besitzer", "ID", String));
    format(Haus[Schleife][hBeschreibung], MaxHausBeschreibung, mysql_GetString("hauser", "Beschreibung", "ID", String));
    Haus[Schleife][hPreis] = mysql_GetInt("hauser", "Preis", "ID", String);
    Haus[Schleife][hZimmerA] = mysql_GetInt("hauser", "AZimmer", "ID", String);
    Haus[Schleife][hZimmerM] = mysql_GetInt("hauser", "MZimmer", "ID", String);
    Haus[Schleife][hLevel] = mysql_GetInt("hauser", "Level", "ID", String);
    Haus[Schleife][hX] = mysql_GetFloat("hauser", "HausPosX", "ID", String);
    Haus[Schleife][hY] = mysql_GetFloat("hauser", "HausPosY", "ID", String);
    Haus[Schleife][hZ] = mysql_GetFloat("hauser", "HausPosZ", "ID", String);
    if(strlen(Haus[Schleife][hBesitzer]) < 2 )
    {
    format(Text, sizeof(Text), "%s zu verkaufen!\nPreis: $%i\nLevel: %i\nZimmer: %i/%i", Haus[Schleife][hBeschreibung], Haus[Schleife][hPreis], Haus[Schleife][hLevel], Haus[Schleife][hZimmerA], Haus[Schleife][hZimmerM]);
    }
    else
    {
    format(Text, sizeof(Text), "%s\nBesitzer: %s\nZimmer %i/%i", Haus[Schleife][hBeschreibung], Haus[Schleife][hBesitzer], Haus[Schleife][hZimmerA], Haus[Schleife][hZimmerM]);
    }
    Haus[Schleife][hText] = Create3DTextLabel(Text, -1, Haus[Schleife][hX], Haus[Schleife][hY], Haus[Schleife][hZ], MaxHausTextSehbar, 0);
    Haus[Schleife][hPickup] = CreatePickup(HausPickupModel, 23, Haus[Schleife][hX], Haus[Schleife][hY], Haus[Schleife][hZ], 0);
    Update3DTextLabelText(Haus[Schleife][hText], 0xFF0000FF, Text);
    Schleife++;
    }
    return 1;
    }


    stock DestroyHouse(ID)
    {
    DestroyPickup(Haus[ID][hPickup]);
    Delete3DTextLabel(Haus[ID][hText]);
    return 1;
    }


    Und wie würdet ihr das schreiben? Denn deswegen laggt der start immer.


    public OnGameModeInit()
    {
    //MQSL
    Connect_To_Database();
    //Haussystem
    new Hausx;
    mysql_debug(1);
    while(Hausx < MaxHaus)
    {
    LoadHouse(Hausx);
    Hausx++;
    }
    return 1;
    }


    public OnGameModeExit()
    {
    //Haussystem
    new Hausy;
    while(Hausy < MaxHaus)
    {
    DestroyHouse(Hausy);
    Hausy++;
    }
    return 1;
    }


    Jeffry

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

    Einmal editiert, zuletzt von [KoSoVa] ()

  • Alles klar, hier einmal der code:


    public OnGameModeInit()
    {
    Connect_To_Database();
    mysql_debug(1);
    for(new Var; Var < MaxHaus; Var++)
    {
    LoadHouse(Var);
    }
    return 1;
    }
    public OnGameModeExit()
    {
    //Haussystem
    for(new Var; Var < MaxHaus; Var++)
    {
    DestroyHouse(Var);
    }
    return 1;
    }


    ocmd:hauserstellen(playerid,params[])
    {
    if(SpielerInfo[playerid][pAlevel] >= 5)
    {
    new Preis,Level,AZimmer = 0, MZimmer,Beschreibung[MaxHausBeschreibung];
    if(sscanf(params,"iiis[100]",Preis, Level, MZimmer, Beschreibung))return SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} Benutze: /Hauserstellen [Preis] [Level] [M.Zimmeranzahl] [Beschreibung]");
    if(strlen(Beschreibung) < MinHausBeschreibung || strlen(Beschreibung) > MaxHausBeschreibung)return SendClientMessage(playerid, 0xFF0000FF, "[FEHLER]{FFFFFF}Die Beschreibung ist zu kurz oder zu lang!(Mind. 4 Zeichen || Max. 12 Zeichen)");
    if(Preis < MinHausPreis || Preis > MaxHausPreis)return SendClientMessage(playerid, 0xFF0000FF, "[FEHLER]{FFFFFF}Der Preis ist zu hoch oder zu tief!(Mind. 1$ || Max. 1000000$)");
    if(MZimmer < MinHausZimmer || MZimmer > MaxHausZimmer)return SendClientMessage(playerid, 0xFF0000FF, "[FEHLER]{FFFFFF}Die Zimmer sind zu wenig oder zu viel!(Mind. 1 Zimmer || Max. 100 Zimmer)");
    if(Level < MinHausLevel || Level > MaxHausLevel)return SendClientMessage(playerid, 0xFF0000FF, "[FEHLER]{FFFFFF}Der Level ist zu hoch oder zu niedrig!(Mind. Level 1 || Max. Level 99)");
    {
    new Float:x,Float:y,Float:z,SQL[300];
    GetPlayerPos(playerid, x, y, z); //Die Hauspostion/Spielerpostion wird geholt.
    format(SQL, sizeof(SQL), "INSERT INTO hauser (Beschreibung, Preis, AZimmer, MZimmer , Level, HausPosX, HausPosY, HausPosZ) VALUES ('%s', '%d', '%d', '%d', '%d', '%f', '%f', '%f')",Beschreibung, Preis, AZimmer, MZimmer, Level, x, y, z);
    mysql_query(SQL);
    SendClientMessage(playerid, 0xFF0000FF, "[H-INFO] {FFFFFF}Das Haus wurde erfolgreich erstellt!");
    printf("[H-INFO]Es wurde ein Haus erstellt!");
    for(new Var; Var < MaxHaus; Var++)
    {
    DestroyHouse(Var);
    }
    LoadHouses();
    }

    }
    return 1;
    }


    //Haussystem


    stock GetNearHausID(playerid)
    {
    for(new hWhich; hWhich != MaxHaus; hWhich++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, Haus[hWhich][hX], Haus[hWhich][hY], Haus[hWhich][hZ])) return hWhich;
    }
    return -1;
    }
    stock LoadHouse(ID)
    {
    new String[24],Text[150];
    format(String, sizeof(String), "%d", ID);
    Haus[ID][hID] = mysql_GetInt("hauser", "ID", "ID", String);
    format(Haus[ID][hBesitzer], MAX_PLAYER_NAME, mysql_GetString("hauser", "Besitzer", "ID", String));
    format(Haus[ID][hBeschreibung], MaxHausBeschreibung, mysql_GetString("hauser", "Beschreibung", "ID", String));
    Haus[ID][hPreis] = mysql_GetInt("hauser", "Preis", "ID", String);
    Haus[ID][hZimmerA] = mysql_GetInt("hauser", "AZimmer", "ID", String);
    Haus[ID][hZimmerM] = mysql_GetInt("hauser", "MZimmer", "ID", String);
    Haus[ID][hLevel] = mysql_GetInt("hauser", "Level", "ID", String);
    Haus[ID][hX] = mysql_GetFloat("hauser", "HausPosX", "ID", String);
    Haus[ID][hY] = mysql_GetFloat("hauser", "HausPosY", "ID", String);
    Haus[ID][hZ] = mysql_GetFloat("hauser", "HausPosZ", "ID", String);
    if(strlen(Haus[ID][hBesitzer]) < 2)
    {
    format(Text, sizeof(Text), "Haus '%s' zu verkaufen!\nPreis: $%d\nLevel: %d\nZimmer: %d/%d", Haus[ID][hBeschreibung], Haus[ID][hPreis], Haus[ID][hLevel], Haus[ID][hZimmerA], Haus[ID][hZimmerM]);
    }
    else
    {
    format(Text, sizeof(Text), "Haus '%s'\nBesitzer: %s\nZimmer %d/%d", Haus[ID][hBeschreibung], Haus[ID][hBesitzer], Haus[ID][hZimmerA], Haus[ID][hZimmerM]);
    }
    Update3DTextLabelText(Haus[ID][hText], 0x00FFAAFF, Text); //ändere/update den TextLabel mit dem formatieren String
    return 1;
    }


    stock LoadHouses()
    {
    new Schleife = 1,String[5],Text[150];
    while(Schleife < MaxHaus)
    {
    format(String, sizeof(String), "%d", Schleife);
    Haus[Schleife][hID] = mysql_GetInt("hauser", "ID", "ID", String);
    format(Haus[Schleife][hBesitzer], MAX_PLAYER_NAME, mysql_GetString("hauser", "Besitzer", "ID", String));
    format(Haus[Schleife][hBeschreibung], MaxHausBeschreibung, mysql_GetString("hauser", "Beschreibung", "ID", String));
    Haus[Schleife][hPreis] = mysql_GetInt("hauser", "Preis", "ID", String);
    Haus[Schleife][hZimmerA] = mysql_GetInt("hauser", "AZimmer", "ID", String);
    Haus[Schleife][hZimmerM] = mysql_GetInt("hauser", "MZimmer", "ID", String);
    Haus[Schleife][hLevel] = mysql_GetInt("hauser", "Level", "ID", String);
    Haus[Schleife][hX] = mysql_GetFloat("hauser", "HausPosX", "ID", String);
    Haus[Schleife][hY] = mysql_GetFloat("hauser", "HausPosY", "ID", String);
    Haus[Schleife][hZ] = mysql_GetFloat("hauser", "HausPosZ", "ID", String);
    HAUSSYSTEM FERTIG MACHEN!
    if(strlen(Haus[Schleife][hBesitzer]) < 2)
    {
    format(Text, sizeof(Text), "Haus '%s' zu verkaufen!\nPreis: $%d\nLevel: %d\nZimmer: %d/%d", Haus[Schleife][hBeschreibung], Haus[Schleife][hPreis], Haus[Schleife][hLevel], Haus[Schleife][hZimmerA], Haus[Schleife][hZimmerM]);
    }
    else
    {
    format(Text, sizeof(Text), "Haus '%s'\nBesitzer: %s\nZimmer %d/%d", Haus[Schleife][hBeschreibung], Haus[Schleife][hBesitzer], Haus[Schleife][hZimmerA], Haus[Schleife][hZimmerM]);
    }
    Haus[Schleife][hText] = Create3DTextLabel(Text, 0x00FFAAFF, Haus[Schleife][hX], Haus[Schleife][hY], Haus[Schleife][hZ], MaxHausTextSehbar, 0);
    Haus[Schleife][hPickup] = CreatePickup(HausPickupModel, 23, Haus[Schleife][hX], Haus[Schleife][hY], Haus[Schleife][hZ], -1);
    Update3DTextLabelText(Haus[Schleife][hText], 0x00FFAAFF, Text);
    Schleife++;
    }
    return 1;
    }


    stock DestroyHouse(ID)
    {
    DestroyPickup(Haus[ID][hPickup]);
    Delete3DTextLabel(Haus[ID][hText]);
    return 1;
    }


    stock SaveHouse()
    {
    for(new Haeuser; Haeuser < MaxHaus; Haeuser++)
    {
    mysql_SetInt("hauser", "Zimmer", Haus[Haeuser][hZimmerA], "ID", Haus[Haeuser][hID]);
    mysql_SetString("hauser", "Besitzer", Haus[Haeuser][hBesitzer], "ID", Haus[Haeuser][hID]);
    }
    return 1;
    }


    Und jetzt nochmal ein Bild von der Datenbank:



    Jeffry
    Kaliber

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • Das laggt am Anfang so, weil diese Funktionen die du da verwendest (mysql_GetInt etc) sehr sehr schlecht sind (ressourcenlastig).
    Ändere außerdem das OnGameModeInit zu:
    public OnGameModeInit()
    {
    Connect_To_Database();
    mysql_debug(1);
    LoadHouses();
    return 1;
    }
    Sonst erstellt es dir keine Labels/Pickups.


    Wie lange lädt es denn eigentlich?


    Schreibe den Befehl so, und warte dann ab, bis die Erfolgs-Meldung im Chat kommt. Siehst du dann auch das Pickup und das Label?
    Die Zeit die du warten musst ist die Zeit, die du auch zum Server-Start warten musst, plus ein Haus.
    ocmd:hauserstellen(playerid,params[])
    {
    if(SpielerInfo[playerid][pAlevel] >= 5)
    {
    new Preis,Level,AZimmer = 0, MZimmer,Beschreibung[MaxHausBeschreibung];
    if(sscanf(params,"iiis[100]",Preis, Level, MZimmer, Beschreibung))return SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} Benutze: /Hauserstellen [Preis] [Level] [M.Zimmeranzahl] [Beschreibung]");
    if(strlen(Beschreibung) < MinHausBeschreibung || strlen(Beschreibung) > MaxHausBeschreibung)return SendClientMessage(playerid, 0xFF0000FF, "[FEHLER]{FFFFFF}Die Beschreibung ist zu kurz oder zu lang!(Mind. 4 Zeichen || Max. 12 Zeichen)");
    if(Preis < MinHausPreis || Preis > MaxHausPreis)return SendClientMessage(playerid, 0xFF0000FF, "[FEHLER]{FFFFFF}Der Preis ist zu hoch oder zu tief!(Mind. 1$ || Max. 1000000$)");
    if(MZimmer < MinHausZimmer || MZimmer > MaxHausZimmer)return SendClientMessage(playerid, 0xFF0000FF, "[FEHLER]{FFFFFF}Die Zimmer sind zu wenig oder zu viel!(Mind. 1 Zimmer || Max. 100 Zimmer)");
    if(Level < MinHausLevel || Level > MaxHausLevel)return SendClientMessage(playerid, 0xFF0000FF, "[FEHLER]{FFFFFF}Der Level ist zu hoch oder zu niedrig!(Mind. Level 1 || Max. Level 99)");
    {
    new Float:x,Float:y,Float:z,SQL[300];
    GetPlayerPos(playerid, x, y, z); //Die Hauspostion/Spielerpostion wird geholt.
    format(SQL, sizeof(SQL), "INSERT INTO hauser (Beschreibung, Preis, AZimmer, MZimmer , Level, HausPosX, HausPosY, HausPosZ) VALUES ('%s', '%d', '%d', '%d', '%d', '%f', '%f', '%f')",Beschreibung, Preis, AZimmer, MZimmer, Level, x, y, z);
    mysql_query(SQL);
    for(new Var; Var < MaxHaus; Var++)
    {
    DestroyHouse(Var);
    }
    LoadHouses();
    SendClientMessage(playerid, 0xFF0000FF, "[H-INFO] {FFFFFF}Das Haus wurde erfolgreich erstellt!");
    printf("[H-INFO]Es wurde ein Haus erstellt!");
    }
    }
    return 1;
    }

  • Wie lange lädt es denn eigentlich?
    -> habe bei mir oben ein #define MAX_HAUS 3 (Solange dauert es dann.. so Pro haus 2,5 sek)


    EDIT:


    Es nun, aber warum bleibt bei mir in der Tablle unter ID , immer 0? Es soll immer 1,2,3,4 usw?

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

    Einmal editiert, zuletzt von [KoSoVa] ()

  • Beitrag von Dr.Almighty ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Wie lange lädt es denn eigentlich?
    -> habe bei mir oben ein #define MAX_HAUS 3 (Solange dauert es dann.. so Pro haus 2,5 sek)


    EDIT:


    Es nun, aber warum bleibt bei mir in der Tablle unter ID , immer 0? Es soll immer 1,2,3,4 usw?


    Auto Increment bei ID nicht ausgewählt, Guck mal bitte danach.



    MfG DjNightcore. 8)