Portal SAMP
[Ajuda] duvida sobre código - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] duvida sobre código (/showthread.php?tid=3960)



duvida sobre código - gabrielfulanogg - 11/09/2023

Código:
stock load_Inventory(playerid){
    new string[200];
    new Query[100 + 15];

    format(Query, sizeof(Query), "SELECT * FROM Inventarios WHERE nome = '%s' LIMIT 1", PegarNome(playerid));
    new Cache:result = mysql_query(id_conexao, Query, true);

    new maxSlots = GetPlayerMaxSlots(playerid);

    for(new i = 0; i != maxSlots; i++){
        format(string, 45, "slot%d", i);
        cache_get_value_name_int(i, string, p_Inv[playerid][i][i_slot]);
        format(string, 45, "qtd%d", i);
        cache_get_value_name_int(i, string, p_Inv[playerid][i][i_qtd]);
   
        printf("%i. Item: %d | Quantidade: %d", i + 1, p_Inv[playerid][i][i_slot], p_Inv[playerid][i][i_qtd]);
    }

    cache_delete(result);
    return 1;
}


Alguém consegue dar uma ajuda aqui?

Só esta puxando o primeiro slot...


RE: duvida sobre código - Mist - 12/09/2023

tenta fazer assim meu mano

stock load_Inventory(playerid){
new string[200];
new Query[100 + 15];

format(Query, sizeof(Query), "SELECT * FROM Inventarios WHERE nome = '%s' LIMIT 1", PegarNome(playerid));
new Cache:result = mysql_query(id_conexao, Query, true);

new maxSlots = GetPlayerMaxSlots(playerid);

for(new i = 0; i != maxSlots; i++){
format(string, 45, "slot%d", i);
cache_get_value_name_int(0, string, p_Inv[playerid][i][i_slot]);
format(string, 45, "qtd%d", i);
cache_get_value_name_int(0, string, p_Inv[playerid][i][i_qtd]);

printf("%i. Item: %d | Quantidade: %d", i + 1, p_Inv[playerid][i][i_slot], p_Inv[playerid][i][i_qtd]);
}

cache_delete(result);
return 1;
}


RE: duvida sobre código - Maycon_Felipe - 12/09/2023

Ele só lê uma linha pq você colocou o LIMIT 1.. coloca como o máximo de itens que o player pode ter.
Ex:

Código:
format(Query, sizeof(Query), "SELECT * FROM Inventarios WHERE nome = '%s' LIMIT 75", PegarNome(playerid));



RE: duvida sobre código - xbruno1000x - 12/09/2023

(12/09/2023 02:14)Maycon_Felipe Escreveu: Ele só lê uma linha pq você colocou o LIMIT 1.. coloca como o máximo de itens que o player pode ter.
Ex:

Código:
format(Query, sizeof(Query), "SELECT * FROM Inventarios WHERE nome = '%s' LIMIT 75", PegarNome(playerid));

Eu também pensei nisso, mas acho que essa query apenas puxa a Tabela no nome do jogador. Acho que o problema pode estar no contador de slots, mas pra saber teria que olhar a função GetPlayerMaxSlots(playerid);.


RE: duvida sobre código - White_Blue - 12/09/2023

(12/09/2023 00:37)Mist Escreveu: tenta fazer assim meu mano

stock load_Inventory(playerid){
    new string[200];
    new Query[100 + 15];

    format(Query, sizeof(Query), "SELECT * FROM Inventarios WHERE nome = '%s' LIMIT 1", PegarNome(playerid));
    new Cache:result = mysql_query(id_conexao, Query, true);

    new maxSlots = GetPlayerMaxSlots(playerid);

    for(new i = 0; i != maxSlots; i++){
        format(string, 45, "slot%d", i);
        cache_get_value_name_int(0, string, p_Inv[playerid][i][i_slot]);
        format(string, 45, "qtd%d", i);
        cache_get_value_name_int(0, string, p_Inv[playerid][i][i_qtd]);
 
        printf("%i. Item: %d | Quantidade: %d", i + 1, p_Inv[playerid][i][i_slot], p_Inv[playerid][i][i_qtd]);
    }

    cache_delete(result);
    return 1;
}

Não faz sentido esse loop...

Citar:
Código PHP:
for(new 0!= maxSlotsi++) 

Se a ideia é criar um loop mais otimizado que não rode o MAX_PLAYERS, então é melhor usar o foreach que roda o loop apenas nos jogadores conectados.

Tente o código:

Código PHP:
stock load_Inventory(playerid) {
    new Query[256];
    new string[MAX_PLAYER_NAME], string2[MAX_PLAYER_NAME];
    format(Querysizeof(Query), "SELECT * FROM Inventarios WHERE nome = '%s' LIMIT 1"PegarNome(playerid));
    new Cache:result mysql_query(id_conexaoQuery);
    foreach(Playeri) {
        format(stringsizeof(string), "slot%d"i);
        format(string2sizeof(string2), "qtd%d"i);

        cache_get_value_name_int(resultstringp_Inv[playerid][i][i_slot]);
        cache_get_value_name_int(resultstring2p_Inv[playerid][i][i_qtd]);

        printf("%i. Item: %d | Quantidade: %d"1p_Inv[playerid][i][i_slot], p_Inv[playerid][i][i_qtd]);
        }

        cache_delete(result);
        return 0;
    



RE: duvida sobre código - gabrielfulanogg - 12/09/2023

Resolvi o problema já, obrigado a todos ai.


RE: duvida sobre código - xbruno1000x - 12/09/2023

Qual era o problema e a solução?


RE: duvida sobre código - Maycon_Felipe - 13/09/2023

(12/09/2023 13:32)xbruno1000x Escreveu: Eu também pensei nisso, mas acho que essa query apenas puxa a Tabela no nome do jogador. Acho que o problema pode estar no contador de slots, mas pra saber teria que olhar a função GetPlayerMaxSlots(playerid);.

Putz, realmente kkk
Foquei tanto em ver o que tinha na consulta que esqueci que ele puxa tudo de uma única linha



(12/09/2023 14:52)gabrielfulanogg Escreveu: Resolvi o problema já, obrigado a todos ai.
Mostra para nós e para quem tiver com futuras duvidas qual era o real problema!