18/04/2022 21:41
(Esta mensagem foi modificada pela última vez a: 18/04/2022 21:43 por Carlos Victor.)
(18/04/2022 10:51)Treze_. Escreveu: Bom dia, estava criando um sistema de up, mas me deparei com problema que os segundos pula em 2 em 2 exemplo: 60 ,58,56,54...
Código:new segup1[MAX_PLAYERS];
new minup1[MAX_PLAYERS];Código:hook OnPlayerSpawn(playerid)
{
segup1[playerid] = 60;
minup1[playerid] = 59;
SetTimerEx("tempoup",1000 ,true ,"d",playerid);
mostrar_up(playerid);
return 1;
}
forward tempoup(playerid);
public tempoup(playerid)
{
segup1[playerid] --;
if(segup1[playerid] == 0)
{
minup1[playerid] --;
segup1[playerid] = 60;
if(minup1[playerid] == 0)
{
minup1[playerid] = 60;
}
}
format(formattempo,6,"%02d:%2d",minup1[playerid],segup1[playerid]);
PlayerTextDrawSetString(playerid,Up_relogio[playerid],formattempo);
PlayerTextDrawShow(playerid,Up_relogio[playerid]);
return 1;
}
Obs:Não existe nenhum outro timer ou variável com mesmo nome e já estou usando timerfix.
Olá, você pode simplesmente otimizar seu código e deixar bem mais viável desse modo:
Código PHP:
new varUpgrade[MAX_PLAYERS];
new timerUpgrade[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
varUpgrade[playerid] = 3600; //Tempo em segundos, 3600 = 1h
timerUpgrade[playerid] = SetTimerEx("OnPlayerUpgradeLevel", 1000, true, "i", playerid);
return 1;
}
forward OnPlayerUpgradeLevel(playerid);
public OnPlayerUpgradeLevel(playerid)
{
if(--varUpgrade[playerid] <= 0)
{
//Função ao terminar o timer aqui
}
else
{
new str[32];
format(str, sizeof(str), "%02d:%02d", varUpgrade[playerid] / 60, varUpgrade[playerid] % 60);
PlayerTextDrawSetString(playerid, Up_relogio[playerid], str);
PlayerTextDrawShow(playerid, Up_relogio[playerid]);
}
}
Ai nesse sistema, você possui duas variáveis, uma para manipular o timer(OnPlayerUpgradeLevel) e outra para manipular o tempo do upgrade
e lembrando que o tempo é em segundos, porque o settimerex é chamado a cada 1s então é -1 a cada 1 segundo da variável varUpgrade.
Você pode usar a variável timerUpgrade para matar o timer e não funcionar mais, recomendo usar em OnPlayerDisconnect pra não passar o timer
para o próximo jogador e a variável varUpgrade para manipular o tempo que irá demorar.