Comando Online e Offline - Enila182 - 19/10/2024
Eae pessoal tudo bem? como faço pra procurar no banco de dados MySQL todos os jogadores de uma organização?
Alguém poderia me dar um exemplo de comando?
Tipo:
/pcc
Variavel da organização do banco de dados 'Org_PCC'
ai vai mostrar todos que estão nessa organização sendo offline ou online
Nick_exemplo_01 (Offiline) - Dono do PCC
Nick_exemplo_02 (Online) - Traficante
RE: Comando Online e Offline - White_Blue - 19/10/2024
Código PHP: SELECT * FROM tabela WHERE org = 'nome';
A query acima deve retornar todos os dados da tabela. Daí basta você mostrar esses dados da forma que quiser para o jogador na callback da query.
RE: Comando Online e Offline - Enila182 - 19/10/2024
(19/10/2024 04:40)White_Blue Escreveu: Código PHP: SELECT * FROM tabela WHERE org = 'nome';
A query acima deve retornar todos os dados da tabela. Daí basta você mostrar esses dados da forma que quiser para o jogador na callback da query.
Você tem um exemplo de comando? Tentei fazer um aqui. só que nao da certo.
Código: CMD:pccnew(playerid) {
BuscarMembrosPCC(playerid);
return 1;
}
forward BuscarMembrosPCC(playerid);
public BuscarMembrosPCC(playerid)
{
new query[256]; // Define o tamanho da query
format(query, sizeof(query), "SELECT Nome, Status FROM jogadores WHERE Org_PCC > 0");
// Execute a query no banco de dados
mysql_tquery(Conexao, query, "OnBuscarMembrosPCC", "i", playerid);
}
public OnBuscarMembrosPCC(playerid, cacheid) {
new total_rows = cache_get_row_count(); // Pega o total de resultados
if (total_rows == 0) {
SendClientMessage(playerid, -1, "Nenhum membro encontrado.");
return;
}
new listaMembros[1024]; // Buffer para armazenar os membros
for (new i = 0; i < total_rows; i++)
{
new nome[24], status[16], orgPCC[32];
new org_id;
cache_get_field_content(i, "Nome", nome); // Pega o nome
cache_get_field_content(i, "Status", status); // Pega o status (online/offline)
org_id = cache_get_field_content_int(i, "Org_PCC"); // Pega o ID da organização
// Verifica o cargo de acordo com o valor de Org_PCC
switch (org_id) {
case 1: format(orgPCC, sizeof(orgPCC), "Traficante 1");
case 2: format(orgPCC, sizeof(orgPCC), "Traficante 2");
case 3: format(orgPCC, sizeof(orgPCC), "Traficante 3");
case 4: format(orgPCC, sizeof(orgPCC), "Traficante 4");
case 5: format(orgPCC, sizeof(orgPCC), "Dono");
}
format(listaMembros, sizeof(listaMembros), "%s%s (%s) - %s\n", listaMembros, nome, orgPCC, (strcmp(status, "1") == 0) ? "Online" : "Offline");
}
// Mostra o dialog com a lista de membros
ShowPlayerDialog(playerid, D_COMANDOS_GERAL, DIALOG_STYLE_MSGBOX, "Lista de Membros PCC", listaMembros, "Fechar", "");
}
RE: Comando Online e Offline - White_Blue - 21/10/2024
(19/10/2024 17:55)Enila182 Escreveu: (19/10/2024 04:40)White_Blue Escreveu: Código PHP: SELECT * FROM tabela WHERE org = 'nome';
A query acima deve retornar todos os dados da tabela. Daí basta você mostrar esses dados da forma que quiser para o jogador na callback da query.
Você tem um exemplo de comando? Tentei fazer um aqui. só que nao da certo.
Código: CMD:pccnew(playerid) {
BuscarMembrosPCC(playerid);
return 1;
}
forward BuscarMembrosPCC(playerid);
public BuscarMembrosPCC(playerid)
{
new query[256]; // Define o tamanho da query
format(query, sizeof(query), "SELECT Nome, Status FROM jogadores WHERE Org_PCC > 0");
// Execute a query no banco de dados
mysql_tquery(Conexao, query, "OnBuscarMembrosPCC", "i", playerid);
}
public OnBuscarMembrosPCC(playerid, cacheid) {
new total_rows = cache_get_row_count(); // Pega o total de resultados
if (total_rows == 0) {
SendClientMessage(playerid, -1, "Nenhum membro encontrado.");
return;
}
new listaMembros[1024]; // Buffer para armazenar os membros
for (new i = 0; i < total_rows; i++)
{
new nome[24], status[16], orgPCC[32];
new org_id;
cache_get_field_content(i, "Nome", nome); // Pega o nome
cache_get_field_content(i, "Status", status); // Pega o status (online/offline)
org_id = cache_get_field_content_int(i, "Org_PCC"); // Pega o ID da organização
// Verifica o cargo de acordo com o valor de Org_PCC
switch (org_id) {
case 1: format(orgPCC, sizeof(orgPCC), "Traficante 1");
case 2: format(orgPCC, sizeof(orgPCC), "Traficante 2");
case 3: format(orgPCC, sizeof(orgPCC), "Traficante 3");
case 4: format(orgPCC, sizeof(orgPCC), "Traficante 4");
case 5: format(orgPCC, sizeof(orgPCC), "Dono");
}
format(listaMembros, sizeof(listaMembros), "%s%s (%s) - %s\n", listaMembros, nome, orgPCC, (strcmp(status, "1") == 0) ? "Online" : "Offline");
}
// Mostra o dialog com a lista de membros
ShowPlayerDialog(playerid, D_COMANDOS_GERAL, DIALOG_STYLE_MSGBOX, "Lista de Membros PCC", listaMembros, "Fechar", "");
}
Verifique e anexe o log de erro do MySQL (/logs/plugins/mysql.log), muitas vezes, ele registra a exata causa pela qual a query falhou.
P.S.:
Notei que você está utilizando uma versão ultrapassada do MySQL. Eu recomendaria migrar para a versão mais recente.
Também notei alguns problemas no código:
1- Você está usando a função `format` padrão, para formatar queries, sempre utilize a função `mysql_format`para evitar criar vulnerabilidades de SQL injection.
2 - Não faz sentido encapsular o código do comando em uma função separada, já que não será reutilizado em outro ponto.
3 - A callback da query tem um parâmetro `cacheid`, mas em momento nenhum esse parâmetro é usado ou tem um valor atribuído.
4 - Não faz sentido a `status` ser tratada como uma string, uma vez que pode ser armazenada como um inteiro.
RE: Comando Online e Offline - Slach - 22/10/2024
Código: CMD:pccnew(playerid)
{
new Cache:Result, Name[24], OrgID, Loga, OnOff[25], CargoPCC[50], fString[1000], cString[1500];
//PROCURA NO BANCO DE DADOS AS CONTAS DOS JOGADORES, AQUELE "DESC" SIGNIFICA QUE VAI PUXAR DO CARGO MAIOR PRO MENOR, PODE MUDAR O LIMIT 30 PARA O LIMITE QUE QUISER
Result = mysql_query(Conexao, "SELECT Nome, Status, Org_PCC FROM jogadores ORDER BY Org_PCC DESC LIMIT 30");
format(cString, sizeof cString, "{FFFFFF}N°\t{FFFFFF}Nome\t{FFFFFF}Status\t{FFFFFF}Cargo\n");
for(new i; i < 30; ++i)
{
if(i < cache_num_rows())
{
///AQUI VAI PUXAR AS INFORMAÇÕES DO BANCO DE DADOS
cache_get_value(i, "Nome", Name, 24);
cache_get_value_name_int(i, "Status", Loga);
cache_get_value_name_int(i, "Org_PCC", OrgID);
//SALVAR NA VARIAVEL OnOff, se o jogador ta Online ou OFF
if(Loga == 1) { OnOff = "{009000}Online"; } else if(Loga == 0) { OnOff = "{FF0000}Offline"; }
//SALVAR NA VARIALVE CargoPCC, o cargo do mesmo
if(OrgID == 5) { CargoPCC = "{FFFFFF}Dono"; } else if(OrgID == 4) { CargoPCC = "{FFFFFF}Traficante 4"; } else if(OrgID == 3) { CargoPCC = "{FFFFFF}Traficante 3"; }
else if(OrgID == 2) { CargoPCC = "{FFFFFF}Traficante 2"; } else if(OrgID == 1) { CargoPCC = "{FFFFFF}Traficante 1"; }
//ABRE UM LOOP DE ATÉ 30 SLOTS COM AS INFORMAÇÕES BUSCADAS
format(fString, sizeof fString, "{FFFFFF}%d°\t{FFFFFF}%s\t[color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif]{FFFFFF}[/font][/size][/color]%s\t[color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif]{FFFFFF}[/font][/size][/color]%s\n", i+1, Name, CargoPCC, OnOff);
strcat(cString, fString);
}
else
{
//SE BUSCAR SÓ 5 INFORMAÇÕES, AS OUTRAS 25 TABELAS SERÁ PRENCHIDO AUTOMATICAMENTE COM ESSA LOGO ABAIXO
format(fString, sizeof fString, "{328E0A}%d°\t{FFFFFF}N/A\t{FF0000}Offline\t{FFFFFF}N/A\n", i+1);
strcat(cString, fString);
}
}
cache_delete(Result);
ShowPlayerDialog(playerid, 555, DIALOG_STYLE_TABLIST_HEADERS, "{FFFFFF}Membros do PCC", cString, "Fechar", "");
return 1;
}
Lembrando, atualize seu MySQL para a versão mais atualizada.
Acredito que vai funcionar, ainda não testei o mesmo, mas se colocar da forma certa e substituir o que coloquei pelas informaões corretas do seu banco de dados, funcionará tranquilamente. Espero ter ajudado! +Rep pra mim ai, nunca ganhei nesse fórum.
|