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.