Portal SAMP
[Pedido] Último login - 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: [Pedido] Último login (/showthread.php?tid=5082)



Último login - Blueface - 25/08/2025

Alguém teria algum código com que possa puxar o ultimo login do player?


RE: Último login - xbruno1000x - 26/08/2025

Ficaria algo como:

Código:
#include <a_samp>
#include <DOF2>

#define PATH "Contas/%s.ini"

forward SalvarUltimoLogin(playerid);
forward CarregarUltimoLogin(playerid);

public OnGameModeInit()
{
    DOF2_Init(); // Inicializa o sistema de arquivos
    return 1;
}

public OnPlayerConnect(playerid)
{
    CarregarUltimoLogin(playerid);
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    SalvarUltimoLogin(playerid);
    return 1;
}

SalvarUltimoLogin(playerid)
{
    new arquivo[64];
    new nome[MAX_PLAYER_NAME];
    new data[32];

    GetPlayerName(playerid, nome, sizeof(nome));
    format(arquivo, sizeof(arquivo), PATH, nome);

    // pega a data e hora atual
    getdate(data[0], data[1], data[2]); // ano, mês, dia
    new ano = data[0], mes = data[1], dia = data[2];

    new hora, minuto, segundo;
    gettime(hora, minuto, segundo);

    new ultimaEntrada[64];
    format(ultimaEntrada, sizeof(ultimaEntrada), "%02d/%02d/%04d %02d:%02d:%02d", dia, mes, ano, hora, minuto, segundo);

    // salva no arquivo
    DOF2_SetString(arquivo, "UltimoLogin", ultimaEntrada);
    DOF2_SaveFile();

    return 1;
}

CarregarUltimoLogin(playerid)
{
    new arquivo[64];
    new nome[MAX_PLAYER_NAME];
    new ultimaEntrada[64];

    GetPlayerName(playerid, nome, sizeof(nome));
    format(arquivo, sizeof(arquivo), PATH, nome);

    if (DOF2_FileExists(arquivo))
    {
        DOF2_GetString(arquivo, "UltimoLogin", ultimaEntrada, sizeof(ultimaEntrada));
        if(strlen(ultimaEntrada) > 0)
        {
            new msg[128];
            format(msg, sizeof(msg), "Seu último login foi em: %s", ultimaEntrada);
            SendClientMessage(playerid, -1, msg);
        }
        else
        {
            SendClientMessage(playerid, -1, "Bem-vindo! Este é seu primeiro login.");
        }
    }
    else
    {
        SendClientMessage(playerid, -1, "Bem-vindo! Sua conta foi criada agora.");
    }
    return 1;
}



RE: Último login - Blueface - 26/08/2025

(26/08/2025 00:38)xbruno1000x Escreveu: Ficaria algo como:

Código:
#include <a_samp>
#include <DOF2>

#define PATH "Contas/%s.ini"

forward SalvarUltimoLogin(playerid);
forward CarregarUltimoLogin(playerid);

public OnGameModeInit()
{
    DOF2_Init(); // Inicializa o sistema de arquivos
    return 1;
}

public OnPlayerConnect(playerid)
{
    CarregarUltimoLogin(playerid);
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    SalvarUltimoLogin(playerid);
    return 1;
}

SalvarUltimoLogin(playerid)
{
    new arquivo[64];
    new nome[MAX_PLAYER_NAME];
    new data[32];

    GetPlayerName(playerid, nome, sizeof(nome));
    format(arquivo, sizeof(arquivo), PATH, nome);

    // pega a data e hora atual
    getdate(data[0], data[1], data[2]); // ano, mês, dia
    new ano = data[0], mes = data[1], dia = data[2];

    new hora, minuto, segundo;
    gettime(hora, minuto, segundo);

    new ultimaEntrada[64];
    format(ultimaEntrada, sizeof(ultimaEntrada), "%02d/%02d/%04d %02d:%02d:%02d", dia, mes, ano, hora, minuto, segundo);

    // salva no arquivo
    DOF2_SetString(arquivo, "UltimoLogin", ultimaEntrada);
    DOF2_SaveFile();

    return 1;
}

CarregarUltimoLogin(playerid)
{
    new arquivo[64];
    new nome[MAX_PLAYER_NAME];
    new ultimaEntrada[64];

    GetPlayerName(playerid, nome, sizeof(nome));
    format(arquivo, sizeof(arquivo), PATH, nome);

    if (DOF2_FileExists(arquivo))
    {
        DOF2_GetString(arquivo, "UltimoLogin", ultimaEntrada, sizeof(ultimaEntrada));
        if(strlen(ultimaEntrada) > 0)
        {
            new msg[128];
            format(msg, sizeof(msg), "Seu último login foi em: %s", ultimaEntrada);
            SendClientMessage(playerid, -1, msg);
        }
        else
        {
            SendClientMessage(playerid, -1, "Bem-vindo! Este é seu primeiro login.");
        }
    }
    else
    {
        SendClientMessage(playerid, -1, "Bem-vindo! Sua conta foi criada agora.");
    }
    return 1;
}

Opa muito obrigado meu sistema de salvamento é em mysql irei adaptar para mysql


RE: Último login - White_Blue - 26/08/2025

(26/08/2025 16:23)Blueface Escreveu:
(26/08/2025 00:38)xbruno1000x Escreveu: Ficaria algo como:

Código:
#include <a_samp>
#include <DOF2>

#define PATH "Contas/%s.ini"

forward SalvarUltimoLogin(playerid);
forward CarregarUltimoLogin(playerid);

public OnGameModeInit()
{
    DOF2_Init(); // Inicializa o sistema de arquivos
    return 1;
}

public OnPlayerConnect(playerid)
{
    CarregarUltimoLogin(playerid);
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    SalvarUltimoLogin(playerid);
    return 1;
}

SalvarUltimoLogin(playerid)
{
    new arquivo[64];
    new nome[MAX_PLAYER_NAME];
    new data[32];

    GetPlayerName(playerid, nome, sizeof(nome));
    format(arquivo, sizeof(arquivo), PATH, nome);

    // pega a data e hora atual
    getdate(data[0], data[1], data[2]); // ano, mês, dia
    new ano = data[0], mes = data[1], dia = data[2];

    new hora, minuto, segundo;
    gettime(hora, minuto, segundo);

    new ultimaEntrada[64];
    format(ultimaEntrada, sizeof(ultimaEntrada), "%02d/%02d/%04d %02d:%02d:%02d", dia, mes, ano, hora, minuto, segundo);

    // salva no arquivo
    DOF2_SetString(arquivo, "UltimoLogin", ultimaEntrada);
    DOF2_SaveFile();

    return 1;
}

CarregarUltimoLogin(playerid)
{
    new arquivo[64];
    new nome[MAX_PLAYER_NAME];
    new ultimaEntrada[64];

    GetPlayerName(playerid, nome, sizeof(nome));
    format(arquivo, sizeof(arquivo), PATH, nome);

    if (DOF2_FileExists(arquivo))
    {
        DOF2_GetString(arquivo, "UltimoLogin", ultimaEntrada, sizeof(ultimaEntrada));
        if(strlen(ultimaEntrada) > 0)
        {
            new msg[128];
            format(msg, sizeof(msg), "Seu último login foi em: %s", ultimaEntrada);
            SendClientMessage(playerid, -1, msg);
        }
        else
        {
            SendClientMessage(playerid, -1, "Bem-vindo! Este é seu primeiro login.");
        }
    }
    else
    {
        SendClientMessage(playerid, -1, "Bem-vindo! Sua conta foi criada agora.");
    }
    return 1;
}

Opa muito obrigado meu sistema de salvamento é em mysql irei adaptar para mysql

Eis o código que costumo usar (depende de Pawn-Chrono):

Código PHP:
#include <a_mysql>
#include <chrono>
#include <YSI_Coding/y_hooks>

// OBS:
// Esta parte é opcional. Fiz um hook da função DurationFormat do Pawn-Chrono, pois as strings estavam em inglês e eu não queria alterar o código da include diretamente. 
// Mas você pode optar por criar uma função customizada, modificar as strings diretamente na include ou usar a versão com as strings em inglês.
hook function DurationFormat(Seconds:durationoutput[], len sizeof output) {
    new
        
Seconds:years,
        
Seconds:days,
        
Seconds:hours,
        
Seconds:minutes;

    if(
duration YearInSeconds) {
        
years = (duration YearInSeconds);
        
duration -= (YearInSeconds years);
    }

    if(
duration DayInSeconds) {
        
days = (duration DayInSeconds);
        
duration -= (DayInSeconds days);
    }

    if(
duration HourInSeconds) {
        
hours = (duration HourInSeconds);
        
duration -= (HourInSeconds hours);
    }

    if(
duration MinuteInSeconds) {
        
minutes = (duration MinuteInSeconds);
        
duration -= (MinuteInSeconds minutes);
    }

    if(
years Seconds:0) {
        
format(
            
output,
            
len,
            
"%s%d ano%s",
            
output,
            
_:years,
            (
_:years 1) ? ("s, ") : (", ")
        );
    }
    if(
days Seconds:0) {
        
format(
            
output,
            
len,
            
"%s%d dia%s",
            
output,
            
_:days,
            (
_:days 1) ? ("s, ") : (", ")
        );
    }
    if(
hours Seconds:0) {
        
format(
            
output,
            
len,
            
"%s%d hora%s",
            
output,
            
_:hours,
            (
_:hours 1) ? ("s, ") : (", ")
        );
    }
    if(
minutes Seconds:0) {
        
format(
            
output,
            
len,
            
"%s%d minuto%s",
            
output,
            
_:minutes,
            (
_:minutes 1) ? ("s, ") : (", ")
        );
    }

    if(
duration Seconds:0) {
        
format(
            
output,
            
len,
            
"%s%d segundo%s",
            
output,
            
_:duration,
            (
_:duration 1) ? ("s, ") : (", ")
        );
    }

    
output[strlen(output) - 2] = EOS;
    return 0;
}

public 
OnPlayerConnect(playerid) {
    new query[128], playerName[MAX_PLAYER_NAME], last_login_str[20], output[128];
    GetPlayerName(playeridplayerNamesizeof(playerName));

    mysql_format(db_handlequerysizeof(query), "SELECT last_login FROM players WHERE username = '%e'"playerName);
    mysql_query(db_handlequery);

    if(cache_num_rows()) {
        cache_get_value_name(0"last_login"last_login_str);

        new Timestamp:last_login_ts;
        TimeParse(last_login_str"%Y-%m-%d %H:%M:%S"last_login_ts);

        TimeFormat(last_login_ts"%d/%m/%Y %H:%M:%S"outputsizeof(output));

        new Seconds:diff Now() - last_login_ts;
        
        
new duration_str[128];
        DurationFormat(diffduration_strsizeof(duration_str));

        format(querysizeof(query), "Seu último login foi em %s, há %s atrás."outputduration_str);
        SendClientMessage(playerid, -1query);
    } else {
        SendClientMessage(playerid, -1"Bem-vindo! Este é seu primeiro login!");
        
        mysql_format
(db_handlequerysizeof(query), "INSERT INTO players (username, last_login) VALUES ('%e', NOW())"playerName);
        mysql_tquery(db_handlequery);
    }
    return 1;
}

public 
OnPlayerDisconnect(playeridreason) {
    new query[128], playerName[MAX_PLAYER_NAME];
    GetPlayerName(playeridplayerNamesizeof(playerName));

    mysql_format(db_handlequerysizeof(query), "UPDATE players SET last_login = NOW() WHERE username = '%e'"playerName);
    mysql_tquery(db_handlequery);
    return 1;


Adapte conforme suas necessidades.