Segundos > Minutos (Jail System) - Carlos Victor - 25/03/2022
Bom galera, sistema de cadeia administrativa consiste em definir um valor * 60 como o tempo, exemplo: /cadeia Joao 120 Motivo
Código PHP: tempo = 120 * 60; > Igual a '7200' segundos
Depois eu pego a variável e jogo na Textdraw, porém estou tendo muitos problemas na parte dos minutos, que as vezes ultrapassa 59m ficando tipo:
02:119:59.... (O certo: 02:59:59)
E não estou conseguindo solucionar, já procurei em outros sites e outros sistemas mas continuo ainda não conseguindo, irei deixar o código aqui:
Código PHP: CMD:cadeia(playerid, params[]) { new id, tempo, motivo[32]; if(sscanf(params, "uds[32]", id, tempo, motivo)) return SendClientMessage(playerid, Cinza, "* USE: /cadeia [ID] [Tempo] [Motivo]");
ajailInfo[id][ajailTime] = tempo * 60; ajailInfo[id][ajailTimer] = SetTimerEx("onAjailTimer", 1000, true, "i", id); return 1; }
function onAjailTimer(playerid) { if(--ajailInfo[playerid][ajailTime] < 0) { KillTimer(ajailInfo[playerid][ajailTimer]); ajailInfo[playerid][ajailTime] = 0;
SendClientMessage(playerid, Branco, "SERVER: Voce foi solto."); SpawnPlayer(playerid); } else { new string[128];
new horas = ajailInfo[playerid][ajailTime] / 3600; new minutos = ajailInfo[playerid][ajailTime] - (horas * 3600) / 60; new segundos = ajailInfo[playerid][ajailTime] % 60;
format(string, sizeof(string), "Tempo: %02d:%02d:%02d", horas, minutos, segundos); PlayerTextDrawSetString(playerid, ajail_time[playerid][0], string); PlayerTextDrawShow(playerid, ajail_time[playerid][0]); } return 1; }
RE: Segundos > Minutos (Jail System) - k2bi_YT - 25/03/2022
Altere apenas a função OnJailTimer e adicione a função ConvertTime()
Código PHP: function onAjailTimer(playerid) { if(--ajailInfo[playerid][ajailTime] < 0) { KillTimer(ajailInfo[playerid][ajailTimer]); ajailInfo[playerid][ajailTime] = 0;
SendClientMessage(playerid, Branco, "SERVER: Voce foi solto."); SpawnPlayer(playerid); } else { new string[128]; format(string, sizeof(string), "Tempo: %s", ConvertTime(ajailInfo[playerid][ajailTime])); PlayerTextDrawSetString(playerid, ajail_time[playerid][0], string); PlayerTextDrawShow(playerid, ajail_time[playerid][0]); } return 1; }
stock ConvertTime(number) { new hours = 0, mins = 0, secs = 0, string[100]; hours = floatround(number / 3600); mins = floatround((number / 60) - (hours * 60)); secs = floatround(number - ((hours * 3600) + (mins * 60))); new days = 0;
if(hours >= 24) { days = floatround((hours/24), floatround_floor); hours = hours % 24; }
if(days > 0) { format(string, 100, "%d dias, %02d:%02d:%02d", days, hours, mins, secs); } else if(hours > 0) { format(string, 100, "%02d:%02d:%02d", hours, mins, secs); } else { format(string, 100, "%02d:%02d", mins, secs); } return string; }
Essa função ConvertTime(..) é muito util para no caso, você queira mostrar um tempo tanto em textdraw, como chat/dialog
RE: Segundos > Minutos (Jail System) - Carlos Victor - 25/03/2022
O problema foi corrigido, a variável minutos estava dividindo antes de fazer a subtração, colocando alguns parentêses consegui solucionar o erro.
Código com o problema resolvido:
Código PHP: function onAjailTimer(playerid) { if(--ajailInfo[playerid][ajailTime] < 0) { KillTimer(ajailInfo[playerid][ajailTimer]); ajailInfo[playerid][ajailTime] = 0;
SendClientMessage(playerid, Branco, "SERVER: Voce foi solto."); SpawnPlayer(playerid); } else { new string[128];
new horas = ajailInfo[playerid][ajailTime] / 3600; new minutos = (ajailInfo[playerid][ajailTime] - (horas * 3600)) / 60; new segundos = ajailInfo[playerid][ajailTime] % 60;
format(string, sizeof(string), "Tempo: %02d:%02d:%02d", horas, minutos, segundos); PlayerTextDrawSetString(playerid, ajail_time[playerid][0], string); PlayerTextDrawShow(playerid, ajail_time[playerid][0]); } return 1; }
Citar:@k2bi_YT
Altere apenas a função OnJailTimer e adicione a função ConvertTime()
Código PHP:
Código: function onAjailTimer(playerid)
{
if(--ajailInfo[playerid][ajailTime] < 0)
{
KillTimer(ajailInfo[playerid][ajailTimer]);
ajailInfo[playerid][ajailTime] = 0;
SendClientMessage(playerid, Branco, "SERVER: Voce foi solto.");
SpawnPlayer(playerid);
}
else
{
new string[128];
format(string, sizeof(string), "Tempo: %s", ConvertTime(ajailInfo[playerid][ajailTime]));
PlayerTextDrawSetString(playerid, ajail_time[playerid][0], string);
PlayerTextDrawShow(playerid, ajail_time[playerid][0]);
}
return 1;
}
stock ConvertTime(number)
{
new hours = 0, mins = 0, secs = 0, string[100];
hours = floatround(number / 3600);
mins = floatround((number / 60) - (hours * 60));
secs = floatround(number - ((hours * 3600) + (mins * 60)));
new days = 0;
if(hours >= 24)
{
days = floatround((hours/24), floatround_floor);
hours = hours % 24;
}
if(days > 0)
{
format(string, 100, "%d dias, %02d:%02d:%02d", days, hours, mins, secs);
}
else if(hours > 0)
{
format(string, 100, "%02d:%02d:%02d", hours, mins, secs);
}
else
{
format(string, 100, "%02d:%02d", mins, secs);
}
return string;
}
Essa função ConvertTime(..) é muito util para no caso, você queira mostrar um tempo tanto em textdraw, como chat/dialog
> Obrigado pela força, e pela função que tu enviou, eu testei e também funcionou! +rep
RE: Segundos > Minutos (Jail System) - xbruno1000x - 25/03/2022
Apesar do problema já ter sido solucionado, é importante ressaltar o problema para quem tiver o problema futuramente.
Em decorrência da ordem das operações matemáticas o calculo foi feito de forma incorreta. A prioridade do computador é resolver as divisões e multiplicações caso não existam parêntesis. Os parêntesis indicam o calculo que deve ser priorizado.
|