Es lädt nur ein Brief?

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
  • Hallo,


    ich habe ein problem, undswar habe ich so gemacht das man /briefe eingibt und er soll alle Briefe auflisten nur listet er nur den ersten auf hier mein Code:
    public OnLetters(playerid)
    {
    new num_rows,num_fields;
    cache_get_data(num_rows, num_fields, dbhandle);
    new strings[1283];
    if(num_rows == 0)return SendClientMessage(playerid, 0xFFFFFFFF, "Du hast keine Briefe!");
    for(new i=0; i<num_rows; i++)
    {
    for(new o=0; o<50; o++)
    {
    if(!strcmp(Brief[playerid][o][lbBetreff], "", true))
    {
    cache_get_field_content(i, "Betreff", Brief[playerid][o][lbBetreff], dbhandle, 64);
    cache_get_field_content(i, "Nachricht", Brief[playerid][o][lbNachricht], dbhandle, 999);
    format(strings,1283, "Betreff: %s | Nachricht: %s", Brief[playerid][o][lbBetreff], Brief[playerid][o][lbNachricht]);
    SendClientMessage(playerid, 0xFFFFFFFF, strings);
    return 1;
    }
    }
    }
    return 1;
    }
    if (strcmp("/briefe", cmdtext, true, 10) == 0)
    {
    new query[1024],bname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, bname, MAX_PLAYER_NAME);
    format(query,1024,"SELECT * FROM letters WHERE Username='%s'", bname);
    mysql_function_query(dbhandle, query, true, "OnLetters", "i", playerid);
    return 1;
    }


    LG,
    Skoam

  • 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;
    }