An dem Code ist soviel komisch, da bin ich gerade zu faul auf das alles ein zugehen.
Ich hoffe du siehst, dass man den Code auch etwas verkürzen und vereinfachen kann:
forward ShowMembers(Showid);
public ShowMembers(Showid)
{
new rows=cache_num_rows(), Name[MAX_PLAYER_NAME], string[250], playerid, Rang, fID = pInfo[Showid][pFraktion];
for(new i = 0; i<rows; i++)
{
cache_get_value(i, "Name", Name);
cache_get_value_name_int(i, "Rang", Rang);
playerid = GetPlayerIdFromName(Name);
format(string, sizeof(string), "%s\n%s\t%d\t%s", string, Name, GetFrakRangName(Rang, fID), (IsPlayerConnected(playerid))?("Online"):("Offline"));
}
strins(string,"{FFFFFF}Name\tRang\tOnline/Offline\n",0,sizeof(string));
ShowPlayerDialog(Showid, DIALOG_MEMBERS, DIALOG_STYLE_TABLIST_HEADERS, "{FFFFFF}Fraktionsmember", string, "Ok", "");
return 1;
}
Alles anzeigen
Versuche den Code mal 
Ich denke das kam daher, dass du viel zu oft direkt auf diese playerid zugegriffen hast und wenn der Spieler nicht online ist, wird playerid = INVALID_PLAYER_ID zugewiesen.
INVALID_PLAYER_ID = 65535
Und ich denke eine andere Funktion konnte diesen Wert nicht handeln und hat dann verkackt 