Jump to content

Salvar Dx Painel


Recommended Posts

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

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()time.timestamp para pegar tempo real

Edited by #DaNiLiN
  • Thanks 1
Link to comment
  • Other Languages Moderators

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
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 by FeniXMTA
Link to comment
  • Other Languages Moderators

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

 

  • Thanks 1
Link to comment
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

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
  • Other Languages Moderators

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 by Lord Henry
  • Thanks 1
Link to comment
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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...