[Dialog] Listing MySQL data inside a List Dialog
#1

Basically, I want to retrieve all the members from the MySQL database of a certain faction and display it inside the dialog, here's what I have so far:

pawn Code:
command(members, playerid, params[])
{
    if(PVar[playerid][factionID] < 1)
    {
        SendClientMessage(playerid, 0x66666666, "You are not currently in a faction");
        return 1;
    }
    else
    {
        new Query[128], members, memberrankdisp[24];
        new resultline[200], membername[24], memberrank;
        new membersonline = 0, membersstring[128];
        new memberlist1[128];
        format(Query, sizeof(Query), "SELECT `username` & `factionRank` FROM `playerinfo` WHERE `factionID` = '%d'", PVar[playerid][factionID]);
        mysql_query(Query);
        if(mysql_fetch_row_format(resultline))
        {
            //you can now use sscanf, explode, split or strtok to split result
            sscanf(resultline,"p<|>s[24]d",membername, memberrank);
        }

        members = mysql_num_rows();
        for(new i=0; i < members; i++)
        {
            if(IsPlayerConnected(i))
            {
                membersonline++;
            }
        }
        format(membersstring, sizeof(membersstring), "%s - Members online: (%d/%d)", FVar[PVar[playerid][factionID]][factionname], membersonline, members);
        ShowPlayerDialog(playerid, MEMBERS, DIALOG_STYLE_LIST, membersstring, " ", "Close", "");
       
        for(new i; i < members; i++)
        {
            //
        }
        return 1;
    }
}
I want to add a line for each member too, any help would be appreciated.
Reply
#2

i dont understand.. what do u mean by

I want to add a line for each member too
Reply
#3

Basically, have a member on each line inside the dialog.
Reply
#4

untested
pawn Code:
command(members, playerid, params[])
{
    if(PVar[playerid][factionID] < 1)
    {
        SendClientMessage(playerid, 0x66666666, "You are not currently in a faction");
        return 1;
    }
    else
    {
        new Query[128], members, memberrankdisp[24];
        new resultline[200], membername[24], memberrank;
        new membersonline = 0, membersstring[128];
        new memberlist1[128];
        format(Query, sizeof(Query), "SELECT `username` & `factionRank` FROM `playerinfo` WHERE `factionID` = '%d'", PVar[playerid][factionID]);
        mysql_query(Query);
        new dialog[1024];
        if(mysql_fetch_row_format(resultline))
        {
            //you can now use sscanf, explode, split or strtok to split result
            sscanf(resultline,"p<|>s[24]d",membername, memberrank);
            format(dialog,sizeof(dialog),"%s\n%s   %d",dialog,membername,memberrank);
        }

        members = mysql_num_rows();
        for(new i=0; i < members; i++)
        {
            if(IsPlayerConnected(i))
            {
                membersonline++;
            }
        }
        format(membersstring, sizeof(membersstring), "%s - Members online: (%d/%d)", FVar[PVar[playerid][factionID]][factionname], membersonline, members);
        ShowPlayerDialog(playerid, MEMBERS, DIALOG_STYLE_LIST, membersstring, dialog, "Close", "");

        for(new i; i < members; i++)
        {
            //
        }
        return 1;
    }
}
Reply
#5

There is an issue with this:

pawn Code:
format(Query, sizeof(Query), "SELECT `username` & `factionRank` FROM `playerinfo` WHERE `factionID` = '%d'", PVar[playerid][factionID]);
        mysql_query(Query);
It's not selecting the information correctly, any idea how I can work this?
Reply
#6

pawn Code:
SELECT `username` & `factionRank`....
i think it's
pawn Code:
SELECT `username` AND `factionRank`
Reply
#7

Quote:
Originally Posted by TheArcher
View Post
pawn Code:
SELECT `username` & `factionRank`....
i think it's
pawn Code:
SELECT `username` AND `factionRank`
Nope.. "/
Reply
#8

Fixed it's now:

pawn Code:
format(Query, sizeof(Query), "SELECT `username`,`factionRank` FROM `playerinfo` WHERE `factionID` = '%d'", PVar[playerid][factionID]);
        mysql_query(Query);
Reply
#9

Ah that's it, I didn't remember MySQL syntax however there were the problem glad you fixed it
Reply
#10

I changed the command to the following:

pawn Code:
command(members, playerid, params[])
{
    if(PVar[playerid][factionID] < 1)
    {
        SendClientMessage(playerid, 0x66666666, "You are not currently in a faction");
        return 1;
    }
    else
    {
        new Query[128], members, memberrankdisp[24];
        new resultline[200], membername[24], memberrank;
        new membersonline = 0, membersstring[128];
        new memberlist1[128];
        new dialog[1024];
        format(Query, sizeof(Query), "SELECT `username`, `factionRank` FROM `playerinfo` WHERE `factionID` = '%d'", PVar[playerid][factionID]);
        mysql_query(Query);
        mysql_store_result();
       
        memberrank = PVar[playerid][factionRank];
        for(new i=0; i < mysql_num_rows(); i++)
        {
            if(mysql_fetch_row_format(resultline))
            {
                //you can now use sscanf, explode, split or strtok to split result
                sscanf(resultline,"p<|>s[24]d", membername, memberrank);
                if(IsPlayerConnected(i))
                {
                    format(dialog,sizeof(dialog),"%s\n{004000}• {FFFFFF}%s, (%s | Rank: %d)",dialog, membername, FactionRankToName(PVar[playerid][factionID], memberrank), memberrank);
                }
                else
                {
                    format(dialog,sizeof(dialog),"%s\n{BF0000}• {FFFFFF}%s, (%s | Rank: %d)",dialog, membername, FactionRankToName(PVar[playerid][factionID], memberrank), memberrank);
                }
            }
        }
        members = mysql_num_rows();
        for(new i=0; i < members; i++)
        {
            if(IsPlayerConnected(i))
            {
                membersonline++;
            }
        }
        format(membersstring, sizeof(membersstring), "%s - Members online: {FFFFFF}(%d/%d)", FVar[PVar[playerid][factionID]][factionname], membersonline, members);
        ShowPlayerDialog(playerid, MEMBERS, DIALOG_STYLE_LIST, membersstring, dialog, "Close", "");
        return 1;
    }
}
BUT, As you can see here:

pawn Code:
if(IsPlayerConnected(i))
                {
                    format(dialog,sizeof(dialog),"%s\n{004000}• {FFFFFF}%s, (%s | Rank: %d)",dialog, membername, FactionRankToName(PVar[playerid][factionID], memberrank), memberrank);
                }
                else
                {
                    format(dialog,sizeof(dialog),"%s\n{BF0000}• {FFFFFF}%s, (%s | Rank: %d)",dialog, membername, FactionRankToName(PVar[playerid][factionID], memberrank), memberrank);
                }
It checks to see if the id of the player is online, rather than the name in the list, meaning if there are two members online, the top two will go green. Any ideas how to work around this?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)