26/08/2025 20:05
(Esta mensagem foi modificada pela última vez a: 26/08/2025 20:08 por White_Blue.)
(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:duration, output[], 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(playerid, playerName, sizeof(playerName));
mysql_format(db_handle, query, sizeof(query), "SELECT last_login FROM players WHERE username = '%e'", playerName);
mysql_query(db_handle, query);
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", output, sizeof(output));
new Seconds:diff = Now() - last_login_ts;
new duration_str[128];
DurationFormat(diff, duration_str, sizeof(duration_str));
format(query, sizeof(query), "Seu último login foi em %s, há %s atrás.", output, duration_str);
SendClientMessage(playerid, -1, query);
} else {
SendClientMessage(playerid, -1, "Bem-vindo! Este é seu primeiro login!");
mysql_format(db_handle, query, sizeof(query), "INSERT INTO players (username, last_login) VALUES ('%e', NOW())", playerName);
mysql_tquery(db_handle, query);
}
return 1;
}
public OnPlayerDisconnect(playerid, reason) {
new query[128], playerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, playerName, sizeof(playerName));
mysql_format(db_handle, query, sizeof(query), "UPDATE players SET last_login = NOW() WHERE username = '%e'", playerName);
mysql_tquery(db_handle, query);
return 1;
}
Adapte conforme suas necessidades.
Não estou disponível para realizar serviços relacionados ao SA-MP e não costumo responder a mensagens privadas, a menos que estejam relacionadas à moderação do fórum.