Portal SAMP
[Ajuda] Comando - 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] Comando (/showthread.php?tid=4890)



Comando - Enila182 - 08/10/2024

Eae pessoal, estou com uma dificuldade. 
Criei um comando pra puxar dados do jogadores no MySQL só que não acontece nada.
Código:
CMD:login(playerid, params[]) {
    new player[24];
    if(IsPlayerAdmin(playerid)) {
        if(sscanf(params, "s[24]", player)) {
            SendClientMessage(playerid, Vermelho, "| ERRO | Digite: /login [Nick]");
            return 1;
        }

        new query[256];
        format(query, sizeof(query), "SELECT `ContaID`, `Email`, `Ultimo_Login_Dia`, `Ultimo_Login_Mes`, `Ultimo_Login_Ano`, `Ultimo_Login_Hora`, `Ultimo_Login_Minutos`, `Ultimo_Login_Segundos` FROM `jogador` WHERE `Nome` = '%s' LIMIT 1", player);
        mysql_tquery(Conexao, query, "OnPlayerLoginInfo", "i", playerid);
    } else SendClientMessage(playerid, Vermelho, "| ERRO | Você não tem permissão!");
    return 1;
}

function:OnPlayerLoginInfo(playerid) {
    if(cache_num_rows() == 0) {
        SendClientMessage(playerid, Vermelho, "| ERRO | Jogador não encontrado!");
        return 1;
    }

    new conta_id;
    new email[64];
    new login_dia, login_mes, login_ano;
    new login_hora, login_minutos, login_segundos;
    new nome[24];
   
    cache_get_value_index_int(0, 0, conta_id);
    cache_get_value_index(0, 1, email, sizeof(email));
    cache_get_value_index(0, 2, nome, sizeof(nome));
    cache_get_value_index_int(0, 3, login_dia);
    cache_get_value_index_int(0, 4, login_mes);
    cache_get_value_index_int(0, 5, login_ano);
    cache_get_value_index_int(0, 6, login_hora);
    cache_get_value_index_int(0, 7, login_minutos);
    cache_get_value_index_int(0, 8, login_segundos);

    // Formata a data e hora de login
    new login_data[64];
    format(login_data, sizeof(login_data), "%02d/%02d/%04d - %02d:%02d:%02d",
        login_dia, login_mes, login_ano, login_hora, login_minutos, login_segundos);

    // Exibe as informações no diálogo
    new str[512];
    format(str, sizeof(str), "{FFFFFF}Nome: {FFFF00}%s\n{FFFFFF}Conta ID: {FFFF00}%d\n{FFFFFF}Email: {FFFF00}%s\n{FFFFFF}Último Login: {FFFF00}%s\n", nome, conta_id, email, login_data);
    ShowPlayerDialog(playerid, D_PUXAR_LOGIN, DIALOG_STYLE_MSGBOX, "{FFFF00}Informações da Conta", str, "OK", "");
    return 1;
}



RE: Comando - Enila182 - 10/10/2024

Alguém sabe como corrigir?


RE: Comando - Carlos Victor - 10/10/2024

Acredito que o problema esteja na coluna Nome que você tenta acessar em OnPlayerLoginInfo sem antes ter selecionado ela na consulta. Eu alterei um pouco o comando, dá uma olhada e qualquer deixa do seu jeito, mas eu tenho algumas dicas e alterações que eu com certeza faria:

1. Utilizar o ; no final de toda query, para dizer ao MySQL que a consulta termina ali.
2. Ao invés de criar 6 colunas para armazenar o último login, você pode só criar uma coluna com o o tipo DATETIME e depois manipular como quer mostrar. O tipo DATETIME salva o tempo da forma 00/00/0000 00:00:00 e você pode manipular ele como timestamp, ou então formatar da forma que quiser.
3. Procurar sempre otimizar o código, evitar ficar criando variáveis de forma excessiva e reutilizar variáveis grandes, apenas limpando e inserindo informações nela.

Código PHP:
CMD:login(playeridparams[])
{
    
    
if (IsPlayerAdmin(playerid))
        return SendClientMessage(playeridVermelho"| ERRO | Você não tem permissão!");

    if ((strlen(params) < || strlen(params) > 24) || isnull(params))
        return SendClientMessage(playeridVermelho"| ERRO | Digite: /login [Nick]");
    
    
new 
        query[78]
    ;

    format(querysizeof query"SELECT * FROM `jogador` WHERE `Nome`='%s' LIMIT 1;"params);
    mysql_tquery(Conexaoquery"OnPlayerLoginInfo""i"playerid);
    return 1;
}

forward OnPlayerLoginInfo(playerid);
public 
OnPlayerLoginInfo(playerid)
{
    if(!cache_num_rows())
        return SendClientMessage(playeridVermelho"| ERRO | Jogador não encontrado!");

    new conta_id;
    new email[64];
    new login_dialogin_meslogin_ano;
    new login_horalogin_minutoslogin_segundos;
    new nome[24];
   
    cache_get_value_name_int
(0"ContaID"conta_id);    
    cache_get_value_name_int
(0"Ultimo_Login_Dia"login_dia);
    cache_get_value_name_int(0"Ultimo_Login_Mes"login_mes);
    cache_get_value_name_int(0"Ultimo_Login_Ano"login_ano);
    cache_get_value_name_int(0"Ultimo_Login_Hora"login_hora);
    cache_get_value_name_int(0"Ultimo_Login_Minutos"login_minutos);
    cache_get_value_name_int(0"Ultimo_Login_Segundos"login_segundos);

    cache_get_value_name(0"Email"email);
    cache_get_value_name(0"Nome"nome);

    // Formata a data e hora de login
    new login_data[21 1];
    format(login_datasizeof(login_data), "%02d/%02d/%04d - %02d:%02d:%02d",
        login_dialogin_meslogin_anologin_horalogin_minutoslogin_segundos);

    // Exibe as informações no diálogo
    new str[512];
    format(strsizeof(str), "{FFFFFF}Nome: {FFFF00}%s\n{FFFFFF}Conta ID: {FFFF00}%d\n{FFFFFF}Email: {FFFF00}%s\n{FFFFFF}Último Login: {FFFF00}%s\n"nomeconta_idemaillogin_data);
    ShowPlayerDialog(playeridD_PUXAR_LOGINDIALOG_STYLE_MSGBOX"{FFFF00}Informações da Conta"str"OK""");
    return 1;




RE: Comando - Enila182 - 12/10/2024

deu certo
Vlw parceiro