FeniXMTA Posted February 10, 2019 Share Posted February 10, 2019 Estou precisando de uma ajudinha ; Ex: Fiz um Dx de um Painel por tempo , e nesse dx coloquei uma contagem , ex: 30 , 29 , 28 e etc , quero impor nesse dx um salvamento , para que quando o player relogar esse dx continuará aberto com o tempo que parou . Um informação bem mais clara , quando o jogador vai preso , vai aparecer um dx mostrando seu tempo de prisão. Link to comment
#DaNiLiN Posted February 10, 2019 Share Posted February 10, 2019 (edited) Agora entendi sua dúvida. Bom, você teria que salvar o tempo pelo setAccountData modo mais fácil. Após salvar esse tempo você teria que usar um Evento onPlayerLogin use getElementData pra verificar se o jogador estava preso antes de sair. Edit #1 Use getRealTime() e time.timestamp para pegar tempo real Edited February 10, 2019 by #DaNiLiN 1 Link to comment
Other Languages Moderators Lord Henry Posted February 11, 2019 Other Languages Moderators Share Posted February 11, 2019 Por se tratar de um tempo curto, creio que não precisa de timestamp. Vc pode trabalhar com um setTimer normal. Mostrar na DX o tempo restante desse timer. Para saber o tempo restante de um setTimer, use getTimerDetails. (Ele retornará em milissegundos, então vc vai precisar converter em segundos antes de mostrar no DX.) Se o player deslogar/perder conexão/quitar do server antes de terminar o tempo, salve esses milissegundos restantes na conta dele com setAccountData e dê killTimer pra não ficar contando tempo de um jogador inexistente. Depois quando ele voltar, crie o timer de volta, usando os milissegundos restantes que estão salvos na conta dele com getAccountData. Ao terminar o tempo e o jogador ficar livre, remova essa data da conta do jogador, caso contrário ele será preso de novo na próxima vez que logar. Para remover uma data de uma conta, basta setar essa data com valor false. ------------------ A propósito, para converter de milissegundos para segundos, basta dividir o valor por 1000 e depois usar math.floor. Link to comment
FeniXMTA Posted February 11, 2019 Author Share Posted February 11, 2019 (edited) 11 minutes ago, Lord Henry said: Por se tratar de um tempo curto, creio que não precisa de timestamp. Vc pode trabalhar com um setTimer normal. Mostrar na DX o tempo restante desse timer. Para saber o tempo restante de um setTimer, use getTimerDetails. (Ele retornará em milissegundos, então vc vai precisar converter em segundos antes de mostrar no DX.) Se o player deslogar/perder conexão/quitar do server antes de terminar o tempo, salve esses milissegundos restantes na conta dele com setAccountData e dê killTimer pra não ficar contando tempo de um jogador inexistente. Depois quando ele voltar, crie o timer de volta, usando os milissegundos restantes que estão salvos na conta dele com getAccountData. Ao terminar o tempo e o jogador ficar livre, remova essa data da conta do jogador, caso contrário ele será preso de novo na próxima vez que logar. Para remover uma data de uma conta, basta setar essa data com valor false. ------------------ A propósito, para converter de milissegundos para segundos, basta dividir o valor por 1000 e depois usar math.floor. Vou por parte KKK , então eu converti o tempo , confere para min. function convertTime(ms) local min = math.floor ( ms/60000 ) local sec = math.floor( (ms/1000)%60 ) return min, sec end Edited February 11, 2019 by FeniXMTA Link to comment
Other Languages Moderators Lord Henry Posted February 11, 2019 Other Languages Moderators Share Posted February 11, 2019 Link to comment
FeniXMTA Posted February 11, 2019 Author Share Posted February 11, 2019 4 minutes ago, Lord Henry said: Arrumei ali em cima. Link to comment
Other Languages Moderators Lord Henry Posted February 11, 2019 Other Languages Moderators Share Posted February 11, 2019 Agora me explique qual droga vc está usando. Pra inventar aquele 60000 ali e aquele %60. De onde vc inventou isso? Hahuahauhauah function miliToSeconds (ms) local sec = math.floor(ms/1000) return sec end 1 Link to comment
FeniXMTA Posted February 11, 2019 Author Share Posted February 11, 2019 2 minutes ago, Lord Henry said: Agora me explique qual droga vc está usando. Pra inventar aquele 60000 ali e aquele %60. De onde vc inventou isso? Hahuahauhauah Para ta convertendo em segundo KKKKKKKKKKKK function convertTime(ms) local min = math.floor ( ms/60000 ) return min end Então eu só usaria isso ? Link to comment
Other Languages Moderators Lord Henry Posted February 11, 2019 Other Languages Moderators Share Posted February 11, 2019 Atualize a página. Coloquei a conversão correta no comentário anterior. Link to comment
FeniXMTA Posted February 11, 2019 Author Share Posted February 11, 2019 Just now, Lord Henry said: Atualize a página. Coloquei a conversão correta no comentário anterior. Vlw , agora vou para a segunda ETAPA. Link to comment
Other Languages Moderators Lord Henry Posted February 11, 2019 Other Languages Moderators Share Posted February 11, 2019 E não precisa ficar me citando em toda resposta, só tem eu e você nesta conversa neste instante. Link to comment
FeniXMTA Posted February 11, 2019 Author Share Posted February 11, 2019 Para ta colocando o tempo no dx , eu utilizaria isso ? local timer = interpolateBetween(1000, 0, 0, 0, 0, 0, (getTickCount()-tick)/1000, "Linear") local minutes, seconds = miliToSeconds(timer) Link to comment
Other Languages Moderators Lord Henry Posted February 11, 2019 Other Languages Moderators Share Posted February 11, 2019 Não. Não tem nada de interpolateBetween. Lembra oq eu disse? "Use setTimer" Link to comment
#DaNiLiN Posted February 11, 2019 Share Posted February 11, 2019 Eu recomendo usar essa função function getTimeLeft(timer) if isTimer(timer) then local ms = getTimerDetails(timer) local m = math.floor(ms/60000) local s = math.floor((ms-m*60000)/1000) if m < 10 then m = "0"..m end if s < 10 then s = "0"..s end return m..":"..s end end E na dx você utilizaria getTimeLeft(Nome do timer) Link to comment
FeniXMTA Posted February 11, 2019 Author Share Posted February 11, 2019 5 minutes ago, Lord Henry said: Não. Não tem nada de interpolateBetween. Lembra oq eu disse? "Use setTimer" setTimer(function() dxDrawText("Tempo restante : ", screenW * 0.3975, screenH * 0.4935, screenW * 0.6010, screenH * 0.5169, tocolor(255, 255, 255, 255), 1.00, dxfont0_fonte , "left", "top", false, false, false, true, false) end, 10000, 1) Link to comment
Other Languages Moderators Lord Henry Posted February 11, 2019 Other Languages Moderators Share Posted February 11, 2019 (edited) dxDrawText não pode estar dentro de um timer, ele precisa estar dentro de uma função com evento onClientRender. Exemplo juntando com o código do Danilin: local screenW, screenH = guiGetScreenSize() function getTimeLeft(timer) if isTimer(timer) then local ms = getTimerDetails(timer) local m = math.floor(ms/60000) local s = math.floor((ms-m*60000)/1000) if m < 10 then m = "0"..m end if s < 10 then s = "0"..s end return m..":"..s else return "Nenhum" end end local theTimer = setTimer (function() outputChatBox ("Tempo acabou.") end, 10000, 1) addEventHandler ("onClientRender", getRootElement(), function () dxDrawText("Tempo restante: "..getTimeLeft(theTimer), screenW * 0.3975, screenH * 0.4935, screenW * 0.6010, screenH * 0.5169, tocolor(255, 255, 255, 255), 1.00, "default" , "left", "top", false, false, false, true, false) end) Obs: Código testado. Edited February 11, 2019 by Lord Henry 1 Link to comment
FeniXMTA Posted February 12, 2019 Author Share Posted February 12, 2019 On 10/02/2019 at 23:38, Lord Henry said: dxDrawText não pode estar dentro de um timer, ele precisa estar dentro de uma função com evento onClientRender. Exemplo juntando com o código do Danilin: local screenW, screenH = guiGetScreenSize() function getTimeLeft(timer) if isTimer(timer) then local ms = getTimerDetails(timer) local m = math.floor(ms/60000) local s = math.floor((ms-m*60000)/1000) if m < 10 then m = "0"..m end if s < 10 then s = "0"..s end return m..":"..s else return "Nenhum" end end local theTimer = setTimer (function() outputChatBox ("Tempo acabou.") end, 10000, 1) addEventHandler ("onClientRender", getRootElement(), function () dxDrawText("Tempo restante: "..getTimeLeft(theTimer), screenW * 0.3975, screenH * 0.4935, screenW * 0.6010, screenH * 0.5169, tocolor(255, 255, 255, 255), 1.00, "default" , "left", "top", false, false, false, true, false) end) Obs: Código testado. Entendi maninho. Agora eu faria o getElement para salvar o tempo e após ele relogar estiver no tempo ainda , o painel é aberto e o tempo. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now