Zum einen nehme nicht so riesen Strings 128 Zeichen reichen da locker
if (strcmp("/briefe", cmdtext, true, 10) == 0)
{
new query[128],bname[MAX_PLAYER_NAME];
GetPlayerName(playerid, bname, MAX_PLAYER_NAME);
format(query,128,"SELECT * FROM letters WHERE Username='%s'", bname);
mysql_function_query(dbhandle, query, true, "OnLetters", "i", playerid);
return 1;
}
Das return in der Schleife bricht automatisch die Funktion ab , daher mach das ganze anders oder nutz break, ebenfalls kannst du nur 144 Zeichen anzeigen lassen bei SendClientMessage und keine 1200. Zum überprüfen ob der String leer ist reicht auch die Abfrage nach dem ersten index des Strings ob dieser nicht 1 ist.
Falls
if(!Brief[playerid][i][lbBetreff][0])
Denoch habe ich das ganze mal entfernt, so wird der Inhalt lediglich ersetzt. Ich würde dein Code dennoch mal überdenken, da es nicht wirklich effektiv ist abhängig von der Spielerid immer einen freien Slot zu finden, obwohl der Eintrag bereits im Array enthalten ist.
public OnLetters(playerid)
{
new num_rows,num_fields;
cache_get_data(num_rows, num_fields, dbhandle);
new strings[144];
if(num_rows == 0)return SendClientMessage(playerid, 0xFFFFFFFF, "Du hast keine Briefe!");
for(new i=0; i<num_rows; i++)
{
cache_get_field_content(i, "Betreff", Brief[playerid][i][lbBetreff], dbhandle, 64);
cache_get_field_content(i, "Nachricht", Brief[playerid][i][lbNachricht], dbhandle, 128);
format(strings,144, "Betreff: %s | Nachricht: %s", Brief[playerid][i][lbBetreff], Brief[playerid][i][lbNachricht]);
SendClientMessage(playerid, 0xFFFFFFFF, strings);
}
return 1;
}