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
Ao Conectar
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.
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.