housemenu problem

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 Abend Breadfish Community,
    Ich versuche es kurz und knackig. Es geht um den befehl /housemenu der nicht richtig bei mir Funktioniert.
    Dieser befehl funktioniert außerhalb des Hauses und sobald ich in dem Interior drinnen bin heißt es "Du bist nicht in deinem Haus!"
    Ich habe auch die Koordinaten geprintet und Komischerweise sind die Interior Koordinaten von einem Anderem Haus und zwar der HausID 1.


    In dem Zweitem Bild sieht man das Ich die HausID 2 Besitze und auch die Koordinaten vom dem Interior mit meiner Position übereinstimmen.


    Hier ist mal der befehl Ich habe bis jetzt alles versucht aber Jedesmal ist es immer "Du bist nicht in deinem Haus!"
    ocmd:housemenu(playerid, params[])
    {
    if(pInfo[playerid][pHaus] == -1)return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du besitzt kein Haus!");
    for(new i=0; i<sizeof(HouseInfo); i++)
    {
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    printf("Playercoords: %f, %f, %f", X, Y, Z);
    if(IsPlayerInRangeOfPoint(playerid, 50.0, HouseInfo[i][ihX], HouseInfo[i][ihY], HouseInfo[i][ihZ]))return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du bist nicht in deinem Haus!");
    printf("Housecoords: %f, %f, %f", HouseInfo[i][ihX], HouseInfo[i][ihY], HouseInfo[i][ihZ]);
    ShowPlayerDialog(playerid, DIALOG_HOUSE, DIALOG_STYLE_TABLIST_HEADERS, "{FFFF00}Hausmenü",
    "#\tOption\n\
    {FFFF00}1.\t{FFFFFF}Übersicht", "Auswählen", "Abbrechen");
    }
    return 1;
    }


    Ich hoffe mir kann einer Helfen :)


    Mit freundlichen Grüßen.
    Jonny

  • Beitrag von Kasakow ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Ändere:
    if(IsPlayerInRangeOfPoint(playerid, 50.0, HouseInfo[i][ihX], HouseInfo[i][ihY], HouseInfo[i][ihZ]))return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du bist nicht in deinem Haus!");


    Zu:
    if(!IsPlayerInRangeOfPoint(playerid, 50.0, HouseInfo[i][ihX], HouseInfo[i][ihY], HouseInfo[i][ihZ]))return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du bist nicht in deinem Haus!");


    So sollte es eigentlich funktionieren. Mit deiner Abfrage, sagst du: "Bist du in deinem Haus, sagt er dir - Nein geht nicht."


    Grüße

  • Dann änder den kompletten Befehl so:



    ocmd:housemenu(playerid, params[])
    {
    if(pInfo[playerid][pHaus] == -1)return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du besitzt kein Haus!");
    for(new i=0; i<sizeof(HouseInfo); i++)
    {
    if(pInfo[playerid][pHaus] == i){//Solltest du die HausID aus der DB laden, Füge entsprechend "HouseInfo[i][hid]" o.ä ein - wie deine Variable heißt.
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    printf("Playercoords: %f, %f, %f", X, Y, Z);
    if(!IsPlayerInRangeOfPoint(playerid, 50.0, HouseInfo[i][ihX], HouseInfo[i][ihY], HouseInfo[i][ihZ]))return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du bist nicht in deinem Haus!");
    printf("Housecoords: %f, %f, %f", HouseInfo[i][ihX], HouseInfo[i][ihY], HouseInfo[i][ihZ]);
    ShowPlayerDialog(playerid, DIALOG_HOUSE, DIALOG_STYLE_TABLIST_HEADERS, "{FFFF00}Hausmenü",
    "#\tOption\n\
    {FFFF00}1.\t{FFFFFF}Übersicht", "Auswählen", "Abbrechen");
    }
    }
    return 1;
    }

  • Okay das hat Schonmal geklappt. Nur ist jetzt die HausID3 das Problem dort bekomme ich auch das Dialog.
    Kann man da noch sowas wie "HouseInfo[i][hOwned]" mit einbringen ? und wenn ja wäre das dann ==0 ?

  • Solltest du dies wollen, ändere es in dies:



    ocmd:housemenu(playerid, params[])
    {
    if(pInfo[playerid][pHaus] == -1)return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du besitzt kein Haus!");
    for(new i=0; i<sizeof(HouseInfo); i++)
    {
    if(pInfo[playerid][pHaus] == i && HouseInfo[i][hOwned] == 1){//Solltest du die HausID aus der DB laden, Füge entsprechend "HouseInfo[i][hid]" o.ä ein - wie deine Variable heißt.
    //hOwned= 1 in Besitz - 2 Nicht in Besitz - Oder wie du es definiert hast
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    printf("Playercoords: %f, %f, %f", X, Y, Z);
    if(!IsPlayerInRangeOfPoint(playerid, 50.0, HouseInfo[i][ihX], HouseInfo[i][ihY], HouseInfo[i][ihZ]))return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du bist nicht in deinem Haus!");
    printf("Housecoords: %f, %f, %f", HouseInfo[i][ihX], HouseInfo[i][ihY], HouseInfo[i][ihZ]);
    ShowPlayerDialog(playerid, DIALOG_HOUSE, DIALOG_STYLE_TABLIST_HEADERS, "{FFFF00}Hausmenü",
    "#\tOption\n\
    {FFFF00}1.\t{FFFFFF}Übersicht", "Auswählen", "Abbrechen");
    }
    }
    return 1;
    }

  • Okay und warum zur Hölle macht ihr alle eine Schleife??
    Wenn ihr sowieso schon abfragt ob das folgende zutrifft:


    Code
    pInfo[playerid][pHaus] == i

    Dann könnte ihr ja direkt mit der Variable arbeiten. Sprich:


    Code
    HouseInfo[pInfo[playerid][pHaus]][ihX]

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Hab das mit dem hOwned eingefügt aber jetzt funktioniert der Befehl nicht. Es kommt auch keine nachricht wie "Dieser befehlt existiert nicht"
    //Edit
    HouseInfo[pInfo[playerid][pHaus]][ihX] ist genau das gleiche ohne Schleife es passiert in HausID2 und HausID3 obwhol ich HausID2 besitze.


    //Edit
    Ich habe anstatt die Interior Koordinaten mal die Haus Icon Koordinaten genommen und Jetzt wird das Dialog nur noch bei HausID 3 gezeigt obwohl ich HausID 2 besitze.

    3 Mal editiert, zuletzt von JOK3R ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • ocmd:housemenu(playerid, params[])
    {
    if(pInfo[playerid][pHaus] == -1)return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du besitzt kein Haus!");
    for(new i=0; i<sizeof(HouseInfo); i++)
    {
    if(pInfo[playerid][pHaus] == i)
    {
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    printf("Playercoords: %f, %f, %f", X, Y, Z);
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, HouseInfo[i][hX], HouseInfo[i][hY], HouseInfo[i][hZ]))return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du bist nicht an deinem Haus!");
    printf("Housecoords: %f, %f, %f", HouseInfo[i][hX], HouseInfo[i][hY], HouseInfo[i][hZ]);
    ShowPlayerDialog(playerid, DIALOG_HOUSE, DIALOG_STYLE_TABLIST_HEADERS, "{FFFF00}Hausmenü",
    "#\tOption\n\
    {FFFF00}1.\t{FFFFFF}Übersicht", "Auswählen", "Abbrechen");
    }
    }
    return 1;
    }

  • Hab das ganze nur aus dem Kopf geschrieben. Errors darfst behalten :D

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Hab das mal etwas angepasst aber das funktioniert nicht wirklich
    ocmd:housemenu(playerid, params[])
    {
    if(pInfo[playerid][pHaus] == -1) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du besitzt kein Haus!");
    new h = pInfo[playerid][pHaus];
    printf("Owned: %i", HouseInfo[h][hOwned]);
    if(HouseInfo[h][hOwned] == 0) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Dieses Haus gehört dir nicht!");
    new int = GetPlayerInterior(playerid);
    new Float:houseX, Float:houseY, Float:houseZ;
    if(int == HouseInfo[h][hInterior]) //ggf Anpassen
    {
    //im Haus
    houseX = HouseInfo[h][ihX];
    houseY = HouseInfo[h][ihY];
    houseZ = HouseInfo[h][ihZ];
    }
    else
    {
    //Ausserhalb des hauses
    houseX = HouseInfo[h][hX];
    houseY = HouseInfo[h][hY];
    houseZ = HouseInfo[h][hZ];
    }
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, houseX, houseY, houseZ)) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du bist nicht in deinem Haus!");
    ShowPlayerDialog(playerid, DIALOG_HOUSE, DIALOG_STYLE_TABLIST_HEADERS, "{FFFF00}Hausmenü",
    "#\tOption\n\
    {FFFF00}1.\t{FFFFFF}Übersicht", "Auswählen", "Abbrechen");
    return 1;
    }
    Egal bei welchem Haus ich den Command ausführe steht dann "Dieses Haus gehört dir nicht!"
    Und in der Console ist Owned: 0 geprintet.

  • Dann wird hOwned beim Laden wohl nicht richtig gesetzt oder entspricht nicht dem richtigen Haus.
    Zeig mal wie du die Häuser lädst.

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Beim laden lasse ich die Häuser auch in der Console printen.

    public OnHouseLoad()
    {
    new rows;
    cache_get_row_count(rows);
    if(!rows)return 1;
    for(new i=0; i<rows; i++)
    {
    new id = getFreeHouseID();
    cache_get_value_name_int(i, "ID", HouseInfo[id][hID]);
    cache_get_value_name_int(i, "hOwned", HouseInfo[id][hOwned]);
    cache_get_value(i, "hOwner", HouseInfo[id][hOwner], 64);
    cache_get_value_name_int(i, "hMieter", HouseInfo[id][hMieter]);
    cache_get_value_name_int(i, "hMaxMieter", HouseInfo[id][hMaxMieter]);
    cache_get_value_name_int(i, "hPreis", HouseInfo[id][hPreis]);
    cache_get_value_name_float(i, "hX", HouseInfo[id][hX]);
    cache_get_value_name_float(i, "hY", HouseInfo[id][hY]);
    cache_get_value_name_float(i, "hZ", HouseInfo[id][hZ]);
    cache_get_value_name_float(i, "ihX", HouseInfo[id][ihX]);
    cache_get_value_name_float(i, "ihY", HouseInfo[id][ihY]);
    cache_get_value_name_float(i, "ihZ", HouseInfo[id][ihZ]);
    cache_get_value_name_int(i, "hInterior", HouseInfo[id][hInterior]);
    cache_get_value_name_int(i, "hTill", HouseInfo[id][hTill]);
    UpdateHouse(id);
    printf("HausID: %i, Owned: %i, Besitzer:%s, Preis:%i, %f, %f, %f, %f, %f, %f, Interior:%i, Steuern:%i", HouseInfo[id][hID], HouseInfo[id][hOwned], HouseInfo[id][hOwner], HouseInfo[id][hPreis], HouseInfo[id][hX], HouseInfo[id][hY], HouseInfo[id][hZ], HouseInfo[id][ihX], HouseInfo[id][ihY], HouseInfo[id][ihZ], HouseInfo[id][hInterior], HouseInfo[id][hTill]);
    }
    print("<-| [HOUSES] Es wurden alle Häuser erfolgreich geladen.");
    return 1;
    }

  • Aha.
    Versuch mal das folgende:


    Mit der Annahme das du beim Player auf die Datenbank ID des Hauses verweist.

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Mein Held des Tages danke :)
    Es gibt nur noch ein Problem mit dem System und zwar wenn ich dann die Übersicht aufrufe

    Steht bei Besitzer immer noch Frei :x wie behebe ich das bei OnDialogResponse ?


    Hab das oben bei DialogResponse so stehen
    new house = pInfo[playerid][pHaus]


    Und dann das Dialog


    if(dialogid == DIALOG_HOUSE)
    {
    if(response)
    {
    if(listitem == 0)
    {
    format(string, sizeof(string), "{FFFF00}Haus Übersicht:\n\nBesitzer: {FFFFFF}%s\n{FFFF00}Aktuelle Mieter: {FFFFFF}%d\n{FFFF00}Aktueller Mietpreis: {FFFFFF}%s", HouseInfo[house][hOwner], HouseInfo[house][hMieter], NiceMoney(HouseInfo[house][hRent]));
    ShowPlayerDialog(playerid, DIALOG_HOUSE2, DIALOG_STYLE_MSGBOX, "{FFFF00}Haus Übersicht", string, "Zurück", "");
    }
    }
    }