Szerző Téma: [MySQL] Offline és online tagok kilistázása  (Megtekintve 1223 alkalommal)

[MySQL] Offline és online tagok kilistázása
« Dátum: 2017. Június 13. - 17:34:03 »
0
Hali!
 
Valaki meg bírná mondani, hogy ez a szkript miért nem jó? Folyamatosan azt írja ki, hogy senki sincsen a frakcióban amikor 2 karakternek a fraction értéke 0.
 

CMD:members(playerid,params[])
{
    if(pInfo[playerid][pAdmin] >= 1)
    {
        new id;
        if(sscanf(params,\"d\",id)) return SCM(playerid,COLOR_WHITE,\"(( Használat: /members [frakció id] ))\");
        if(id >= 0 && id <= MAX_FRACTIONS)
        {
            mysql_format(mysql_id, query, sizeof(query), \"SELECT * FROM `users` WHERE `fraction` = \'%d\'\", id);
            mysql_tquery(mysql_id, query, \"\", \"\");
            new num_rows,num_fields;
            cache_get_data(num_rows,num_fields,mysql_id);
            new username[MAX_PLAYER_NAME];
            new rang;
            new string[128];
            if(num_rows > 0)
            {
                 for(new i = 0; i < num_rows; i++)
                 {
                       cache_get_field_content(i,\"name\",username);
                       rang = cache_get_field_content_int(i,\"rank\");
                       if(ReturnUser(username))
                       {
                            format(string, sizeof(string), \"%d. NÉV: %s | RANG: %d - ONLINE\", i, username, rang);
                            return SendClientMessage(playerid, -1, string);
                       }
                       format(string, sizeof(string), \"%d. NÉV: %s | RANG: %d - OFFLINE\", i, username, rang);
                       SendClientMessage(playerid, -1, string);
                 }
            }
            else SCM(playerid,COLOR_WHITE,\"(( A frakció üres! ))\");
        }
        else SCM(playerid,COLOR_ORANGE,\"(( A frakció id-nek 0 és 30 között kell lennie! ))\");
    }
    else perm(playerid);
    return 1;
}

[MySQL] Offline és online tagok kilistázása
« Válasz #1 Dátum: 2017. Június 14. - 22:05:06 »
0
Szia!
 
Nem néztem utána mélyrehatóan, de ha jól értem a leírását, a mysql_tquery-nek szüksége van egy callback-re, ami akkor hívódik meg, ha a lekérdezés sikeres volt. Elképzelhető, hogy kell egy kis idő, míg a lekérdezésedre eredményt ad a szerver, és mivel Te közvetlenül a lekérdezés elküldése után hívod meg a cache funkciókat, nem biztos, hogy addig végez és úgy érzékeled, mintha nem lenne eredmény.
 
Nézd meg, hogy csinálja a példa kódban: http://wiki.sa-mp.com/wiki/MySQL/R40#mysql_tquery
 
Ebben az esetben valahogy így kéne kinézzen a történet, ha jól értelmeztem a dokumentációt:
 

forward successQuery_members(playerid);
public successQuery_members(playerid) {
new num_rows,num_fields;
cache_get_data(num_rows,num_fields,mysql_id);
new username[MAX_PLAYER_NAME];
new rang;
new string[128];
if(num_rows > 0)
{
    for(new i = 0; i < num_rows; i++)
    {
         cache_get_field_content(i,\"name\",username);
         rang = cache_get_field_content_int(i,\"rank\");
         if(ReturnUser(username))
         {
            format(string, sizeof(string), \"%d. NÉV: %s | RANG: %d - ONLINE\", i, username, rang);
            return SendClientMessage(playerid, -1, string);
         }
         format(string, sizeof(string), \"%d. NÉV: %s | RANG: %d - OFFLINE\", i, username, rang);
         SendClientMessage(playerid, -1, string);
    }
}
else SCM(playerid,COLOR_WHITE,\"(( A frakció üres! ))\");
}
CMD:members(playerid,params[])
{
if(pInfo[playerid][pAdmin] >= 1)
{
   new id;
   if(sscanf(params,\"d\",id)) return SCM(playerid,COLOR_WHITE,\"(( Használat: /members [frakció id] ))\");
   if(id >= 0 && id <= MAX_FRACTIONS)
   {
      mysql_format(mysql_id, query, sizeof(query), \"SELECT * FROM `users` WHERE `fraction` = \'%d\'\", id);
      mysql_tquery(mysql_id, query, \"successQuery_members\", \"i\", playerid);
   }
   else SCM(playerid,COLOR_ORANGE,\"(( A frakció id-nek 0 és 30 között kell lennie! ))\");
}
else perm(playerid);
return 1;
}

 
Sok sikert, ha bármilyen kérdésed van, írj nyugodtan. :)

[MySQL] Offline és online tagok kilistázása
« Válasz #2 Dátum: 2017. Június 16. - 10:00:48 »
0
Igen nagyjából megy, viszont van kettő olyan felhasználó a táblázatban aminek a frakciója 0 viszont csak az egyiket listázza ki, szerinted mi lehet a baj? Illetve az amikor online vagyok offline-t ír, ha offline vlki annak online-t
« Utoljára szerkesztve: 2017. Június 16. - 10:06:38 írta Zippanto »

[MySQL] Offline és online tagok kilistázása
« Válasz #3 Dátum: 2017. Június 19. - 00:15:27 »
0
Megoldva

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal