Jump to content
  • 0

Problema /emails


Rayan

Question

Salut, am o problema la /emails, faza este ca atunci cand un jucator primeste un email il are ca necitit, insa, daca gen primeste 11 email-uri noi (si sunt 11 necitite) in /emails arata doar primele 10 sortate dupa ID, faza e ca le face pe toate cele 10 citite, insa mai ramane 1 de citit insa nu il poate selecta deoarece in lista de /emails apar doar primele 10.

Cum as putea face ca atunci cand dai /emails sa iti arate mai intai mesajele necitite si mai jos de ele cele citite sortate dupa ID?

CMD:email(playerid, params[])
{
    if(gPlayerLogged[playerid] == 0) return SendClientMessage(playerid, COLOR_LIGHTRED, "You need to log in first.");
    if(IsPlayerConnected(playerid))
    {
        new result[300],message[300],string[5000],read,message2[100],finalmessage[100],query[500],emailid,idd=0;
        format(query, sizeof(query), "SELECT * FROM `emails` WHERE `playerid` = '%d' ORDER BY `ID` DESC LIMIT 10", PlayerInfo[playerid][pSQLID]);
        new Cache: emailresult = mysql_query(SQL, query);
        if(cache_get_row_count() > 0)
        {
            for(new i, j = cache_get_row_count (); i != j; ++i)
            {
                cache_get_field_content(i, "Message", result); format(message, sizeof(message), result);
                read                    = cache_get_field_content_int(i, "EmailRead");
                emailid                 = cache_get_field_content_int(i, "ID");
                EmailId[playerid][idd] = emailid;
                idd++;
                if(strlen(message) > 49)
                {
                    strmid(message2, message, 0, 50, sizeof(message2));
                      format(finalmessage,sizeof(finalmessage), "%s...",message2);
                }
                    if(read > 0)
                {
                    if(PlayerInfo[playerid][pLanguage] == 2)
                    {
                        format(string, sizeof(string), "%s[NECITIT]%s\n", string, finalmessage);
                    }
                    else
                    {
                        format(string, sizeof(string), "%s[UNREAD]%s\n", string, finalmessage);
                    }
                }
                else
                {
                    format(string, sizeof(string), "%s%s\n", string, finalmessage);
                }
            }
        }
        else return SendClientMessage(playerid, COLOR_WHITE, "You don't have a email!");
        cache_delete(emailresult);
        ShowPlayerDialog(playerid,DIALOG_EMAILS,DIALOG_STYLE_LIST,"Emails",string,"Read","Exit");
    }
    return 1;
}
Edited by Rayan
Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Este foarte ciudat. Ar fi trebuit sa sorteze descrescator id-ul si crescator emailRead ( https://www.w3schools.com/sql/sql_orderby.asp  , ultima chestie)

format(query, sizeof(query), "SELECT * FROM `emails` WHERE `playerid` = %d ORDER BY `EmailRead` ASC ,`ID` DESC,  LIMIT 20

Ultima chestie, altcumva chiar nu mai stiu cum sa le asez

  • Like 1
Link to comment
Share on other sites

  • 0
format(query, sizeof(query), "SELECT * FROM `emails` WHERE `playerid` = '%d' ORDER BY `ID` DESC LIMIT 10

In:

format(query, sizeof(query), "SELECT * FROM `emails` WHERE `playerid` = %d ORDER BY `ID` DESC LIMIT 20 // primele 20

Si ca sa afiseze mai multe modifici doar acel limit

Link to comment
Share on other sites

  • 0
Acum 8 minute, Banditul a spus:

format(query, sizeof(query), "SELECT * FROM `emails` WHERE `playerid` = '%d' ORDER BY `ID` DESC LIMIT 10

In:


format(query, sizeof(query), "SELECT * FROM `emails` WHERE `playerid` = %d ORDER BY `ID` DESC LIMIT 20 // primele 20

Si ca sa afiseze mai multe modifici doar acel limit

Da stiu asta, insa daca are mai multe email-uri necitite decat cate poate sa arate /emails? gen pot pune 20 si daca are 21? 1 ii ramane necitita si il tot spameaza* acel timer la 2 min (asa am setat) ca atunci cand are un email nou sa ii dea un mesaj "You have a new email, use /email".

Faza e ca as vrea sa stiu cum as putea face sa arate mai mesajele necitite si dupa cele necitite sa fie cele sortate dupa ID(adica ultimele trimise citite)

Edited by Rayan
Link to comment
Share on other sites

  • 0

A stai asa atunci , trebuia sa ma gandesc mai devreme

format(query, sizeof(query), "SELECT * FROM `emails` WHERE `playerid` = %d AND `EmailRead` = 0 ORDER BY `ID` DESC LIMIT 20

Si asa selecteaza doar emailurile necitite

Edited by Banditul
Link to comment
Share on other sites

  • 0
Acum 28 minute, Banditul a spus:

A stai asa atunci , trebuia sa ma gandesc mai devreme


format(query, sizeof(query), "SELECT * FROM `emails` WHERE `playerid` = %d AND `EmailRead` = 0 ORDER BY `ID` DESC LIMIT 20

Si asa selecteaza doar emailurile necitite

Merge, insa imi apar doar mesajele necitite, eu vreau gen sa arate ca primele mesaje fiind cele necitite si dupa mai jos de ele sa fie cele citite

ceva de genu:

	[NECTITI] ai primit wanted 4
	[NECTITI] ai fost dat afara din factiune
	[CITIT] ai acceptat invitatia lui Alex in factiunea LSPD.

Link to comment
Share on other sites

  • 0
Acum 18 minute, Banditul a spus:

Hmmm atunci:


format(query, sizeof(query), "SELECT * FROM `emails` WHERE `playerid` = %d ORDER BY `ID` DESC, EmailRead ASC LIMIT 20

Si iti va grupa emailurile de la ultimu la primu, si de la necitit la citit

Imi da SERVER: Unknown command.

server_log

[17:50:27] [debug] Run time error 4: "Array index out of bounds"
[17:50:27] [debug] AMX backtrace:
[17:50:27] [debug] #0 0022e488 in public cmd_email (playerid=0, params[]=@0362126c "") at D:\gamemode\gamemodes\exgaming.pwn:34890
[17:50:27] [debug] #1 0022dfbc in public cmd_emails (playerid=0, params[]=@0362126c "") at D:\gamemode\gamemodes\exgaming.pwn:34872
[17:50:27] [debug] #2 native CallLocalFunction () from samp-server.exe
[17:50:27] [debug] #3 00037b18 in public OnPlayerCommandText (playerid=0, cmdtext[]=@0362124c "/emails") at D:\gamemode\pawno\include\zcmd.inc:102
[17:50:29] [debug] Run time error 4: "Array index out of bounds"
[17:50:29] [debug] AMX backtrace:
[17:50:29] [debug] #0 0022e488 in public cmd_email (playerid=0, params[]=@03621268 "") at D:\gamemode\gamemodes\exgaming.pwn:34890
[17:50:29] [debug] #1 native CallLocalFunction () from samp-server.exe
[17:50:29] [debug] #2 00037b18 in public OnPlayerCommandText (playerid=0, cmdtext[]=@0362124c "/email") at D:\gamemode\pawno\include\zcmd.inc:102

 

Edited by Rayan
Link to comment
Share on other sites

  • 0
Acum 30 minute, Banditul a spus:

EmailId[playerid][idd]

Asta cel mai probabil este pagubasu. Ori maresti array-ul EmailID (EmailID[MAX_PLAYERS][10] ma gandesc) ori scazi acel LIMIT

am rezolvat asta, legat de functie, e la fel ca inainte, imi apare la fel ca prima oara, nu sorteaza necititele, la fel, gen arata primele 20 insa daca mai jos de 20 sunt necitite nu apar primele, raman tot acolo gen sorteaza doar dupa ID si nu si dupa EmailRead

Edited by Rayan
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.