Haus System | Mieter auflisten

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
  • Sehr geehrte Damen und Herren,



    Ich habe folgendes Problem das mir keine Mieter angezeigt werden obwohl ein Mieter besteht.


  • Ich habe den Code mal etwas aufgeräumt und performanter gemacht.
    if(listitem == 5) //Mieter auflisten
    {
    new id = INVALID_HOUSE_KEY, string[512];
    for(new i = 0; i <MAX_HOUSES; i++)
    {
    if(Spieler[playerid][pHouseKey] == i)
    {
    if(strcmp(Haus[i][hBesitzer], GetName(playerid), true) == 0)
    {
    id = i;
    }
    break;
    }
    }
    if(id != INVALID_HOUSE_KEY)
    {
    format(string,sizeof(string),"Liste aller Mieter, die derzeit Online sind:\n");
    for(new x;x <MAX_PLAYERS; x++)
    {
    if(IsPlayerConnected(x) && x != playerid)
    {
    if(Spieler[x][pHouseKey] == id)
    {
    format(string,sizeof(string),"%s\n%s (ID: %d),",string, GetName(x), x);
    }
    }
    }
    ShowPlayerDialog(playerid, DIALOG_MIETER_LISTE ,DIALOG_STYLE_MSGBOX,"Hausbearbeitung",string,"Weiter","");
    }
    }


    Versuche es so.

  • Hey,


    Ich wollte machen wen man z.b ein Command eingibt das ein DIALOG_STYLE_INPUT kommt wo man dann z.b die Spieler ID der eingemietet ist den man dann den Mietvertrag kündigen kann. Also "Rausschmeissen".


    Und nochmal eine MSGBOX wo man dann bestätigt das man alle Mieter rauswerfen kann.


    Wie macht man das am besten?

  • Ein Spieler: ShowPlayerDialog -> ID eingeben -> bei OnDialogResponse strval(inputtext) auslesen -> ID rauswerfen
    Alle Spieler: ShowPlayerDialog -> OnDialogResponse -> Schleife durch alle Spieler -> Prüfen ob Mieter -> ID rauswerfen


    Ich würde das ganze über eine Dialog-Liste machen, über eine Befehl wie /haus, und in der Liste dann anzeigen lassen:

    • ...
    • Einen Mieter rauswerfen
    • Alle Mieter rauswerfen
    • ...


    So kommt man dann über einen Befehl an alle Funktionen des Hauses ran.

  • Wieso wird überhaupt eine Schleife verwendet, wenn pHouseKey scheinbar den zugehörigen Index für den Hau-Array enthält?

    Stimmt, darauf habe ich gar nicht geachtet, die Beziehung ist hier wirklich 1:1. Danke für den Hinweis.
    Dann kann man es auch so schreiben:
    if(listitem == 5) //Mieter auflisten
    {
    new id = INVALID_HOUSE_KEY, hKey = Spieler[playerid][pHouseKey], string[512];
    if(hKey >= 0 && hKey < MAX_HOUSES)
    {
    if(strcmp(Haus[hKey][hBesitzer], GetName(playerid), true) == 0)
    {
    id = hKey;
    }
    }
    if(id != INVALID_HOUSE_KEY)
    {
    format(string,sizeof(string),"Liste aller Mieter, die derzeit Online sind:\n");
    for(new x;x <MAX_PLAYERS; x++)
    {
    if(IsPlayerConnected(x) && x != playerid)
    {
    if(Spieler[x][pHouseKey] == id)
    {
    format(string,sizeof(string),"%s\n%s (ID: %d),",string, GetName(x), x);
    }
    }
    }
    ShowPlayerDialog(playerid, DIALOG_MIETER_LISTE ,DIALOG_STYLE_MSGBOX,"Hausbearbeitung",string,"Weiter","");
    }
    }


    Das geht dann aber wirklich nur, wenn der pHouseKey exakt immer dem Index des Haus-Arrays entspricht (wie es hier aktuell ist).
    Sollte sich das ändern, geht das nicht mehr und es muss wieder mit der Schleife gearbeitet werden. Der Fall wäre dann, wenn das Haus-Array eine Eigenschaft "hID" (z.B.) bekommt, welches dann die ID wiedergibt.
    Beide Varianten sind möglich und haben ihre Vor- und Nachteile.


  • Also das ist das Enum vom Haus system.


    Und das mit den Mieter kicken & mit allen rauswerfen verstehe ich gerade nicht ganz.


    Ich weiß nicht wie ich das alles setzen soll.
    Heißt den Sein Schlüssel auf 0 das er eben das haus nichtmehr betreten kann.


  • Ist das so korrekt?


    @Jeffry

  • Die if-Abfrage darf nicht mit strval gemacht werden, sondern mit strlen, sonst kannst du die ID 0 nicht eingeben.


    pID sollte auch noch den Wert zugewiesen bekommen, sonst steht dort ja nie was drin.


    PS:
    Du könntest es auch einfach im Spiel ausprobieren.

  • Das ist vom Prinzip exakt das gleiche, nur dass dort nicht "params" steht, sondern "inputtext". Das zu übertragen ist das angesprochene Grundverständnis.
    Du machst das ja nicht erst seit gestern, von daher solltest du dieses Grundverständnis schnellstens aufbauen. Nimm dir das zu Herzen und arbeite an dir.


  • Hei,


    Wollte machen das man die Beschreibung für 1kk ändern kann aber funktioniert irgendwie nicht warum?
    Es passiert garnichts


  • So habe das Problem gefunden und mal behoben so funktioniert es dankeschön @Jeffry