29/02/2024 03:12
(Esta mensagem foi modificada pela última vez a: 29/02/2024 03:32 por Cesar157.)
(26/02/2024 11:49)xbruno1000x Escreveu: O salvamento está saindo como no arquivo? Como você recupera esse dado no momento em que o player loga novamente?Bom dia
Sim! eu criei uma enum para salvar os dados do player
E em onplayerconnect, eu criei uma script pra puxar os dados salvo do player, está tudo certinho! O único problema é que o timer não salva o tempo quando o player desloga
(26/02/2024 16:50)strelo Escreveu: Olá!Para resolver seu problema, você precisa salvar os dados do temporizador (como minutos e segundos restantes) em algum lugar persistente, como um arquivo ou banco de dados, quando o jogador se desconecta. Quando o jogador reconectar, você deve carregar esses dados e continuar o temporizador de onde parou.
Aqui está uma sugestão de como você pode modificar seu código para incluir essa funcionalidade:
Salvar os dados do temporizador ao desconectar: No evento OnPlayerDisconnect, antes de matar o temporizador, salve os minutos e segundos restantes em um arquivo ou banco de dados.
Carregar os dados do temporizador ao conectar: No evento OnPlayerConnect, carregue os dados salvos (se existirem) e ajuste o temporizador de acordo.
Segue um exemplo de como implementar isso usando arquivos. Você precisará ajustar os nomes das funções de acordo com o resto do seu código, como a função para obter o nome do jogador (pName) e as variáveis para minutos e segundos (pDados[playerid][pMinutos], pDados[playerid][pSegundos]).
Ao Desconectar
Código PHP:public OnPlayerDisconnect(playerid, reason)
{
// Obtenha o nome do jogador para usar como nome do arquivo
new playerName[24];
GetPlayerName(playerid, playerName, sizeof(playerName));
// Crie um nome de arquivo único para o jogador
new filename[40];
format(filename, sizeof(filename), "savedTimers/%s.txt", playerName);
// Salve os minutos e segundos restantes em um arquivo
new file:FileHandle = fopen(filename, io_write);
if(FileHandle)
{
fprintf(FileHandle, "%d %d", pDados[playerid][pMinutos], pDados[playerid][pSegundos]);
fclose(FileHandle);
}
// Mate o temporizador
KillTimer(PaydayTimer[playerid]);
return 1;
}
Ao Conectar
Código PHP:public OnPlayerConnect(playerid)
{
// Obtenha o nome do jogador para usar como nome do arquivo
new playerName[24];
GetPlayerName(playerid, playerName, sizeof(playerName));
// Crie um nome de arquivo único para o jogador
new filename[40];
format(filename, sizeof(filename), "savedTimers/%s.txt", playerName);
// Tente abrir o arquivo para carregar os minutos e segundos salvos
new file:FileHandle = fopen(filename, io_read);
if(FileHandle)
{
fscanf(FileHandle, "%d %d", pDados[playerid][pMinutos], pDados[playerid][pSegundos]);
fclose(FileHandle);
// Opcional: Exclua o arquivo após carregar os dados
fremove(filename);
// Recalcule o tempo restante em milissegundos e recrie o temporizador
// Isso é apenas um exemplo, você precisará ajustar conforme sua lógica de temporização
new remainingTime = (pDados[playerid][pMinutos] * 60 + pDados[playerid][pSegundos]) * 1000;
PaydayTimer[playerid] = SetTimerEx("PayDayc", remainingTime, false, "i", playerid);
}
else
{
// Se não houver dados salvos, crie um novo temporizador
PaydayTimer[playerid] = SetTimerEx("PayDayc", 1000, true, "i", playerid);
}
return 1;
}
Note que você precisará criar uma pasta chamada savedTimers no diretório do seu servidor para armazenar os arquivos. Este código é apenas um exemplo básico para ilustrar como você pode implementar a funcionalidade.
Bom dia, amigo! em Onplayerdisconnect, eu fiz algo parecido, porém, percebi que há algumas coisa que posso mudar para resolver o problema. Irei verificar! +rep