Jump to content

Váriavel de Horas


Recommended Posts

estou editando um script de agencia e aqui para o player pegar certo trabalho ele precisa de ter "x" lvl , porém eu tava querendo colocar por tempo jogado.

no caso como faria?

function EntregadorDeJornal()
local Level = getElementData ( source, "Level" ) or 0
if Level >= 0 then

é assim que funciona para pegar o lvl , para pegar horas como faço?

Edited by Renazz
Link to comment
  • Other Languages Moderators

Sim, eu entendi que é isso que vc quer. Como eu disse, usando timestamp.

  1. Vc salva na conta do jogador o instante que ele logou com o timestamp. (vai salvar um número bem grande de segundos)
  2. Quando o jogador for deslogar ou desconectar do servidor, pega outro timestamp (outro número grande, maior do que o que estava salvo na conta dele) e diminui com o que estava salvo na conta dele. Isso vai marcar quantos segundos ele permaneceu logado nessa sessão de jogo. Esses segundos vc soma em outra accountData do jogador, que vai somar com os segundos de jogo que ele já tinha.
  3. Dai pra saber em horas ou minutos, só fazer uma conversão simples de segundos > hora ou segundos > minuto.
  • Thanks 1
Link to comment
2 minutes ago, Lord Henry said:

 Quando o jogador for deslogar ou desconectar do servidor, pega outro timestamp (outro número grande, maior do que o que estava salvo na conta dele) e diminui com o que estava salvo na conta dele. Isso vai marcar quantos segundos ele permaneceu logado nessa sessão de jogo. Esses segundos vc soma em outra accountData do jogador, que vai somar com os segundos de jogo que ele já tinha.

achei meio confuso , terei que fazer tudo manualmente ou dá pra automatizar?

Link to comment
  • Other Languages Moderators
function loadPeriodo (_, currentAcc)
	if not getAccountData (currentAcc, "periodo.Total") then -- Se o jogador não tem registro de tempo total, então cria uma data na conta e atribui valor 0.
		setAccountData (currentAcc, "periodo.Total", 0)
	end
	local agora = getRealTime().timestamp -- agora = instante que o jogador logou.
	setAccountData (currentAcc, "periodo.Sessao", agora) -- Inicia o período da sessão do jogador quando ele loga, salvando o instante de login nela.
	outputChatBox ("Bem Vindo ao servidor. Você já jogou um total de "..getAccountData (currentAcc, "periodo.Total").." segundos de jogo.", source)
end
addEventHandler ("onPlayerLogin", root, loadPeriodo)

function savePeriodo (previousAcc, _)
	if not getAccountData (previousAcc, "periodo.Total") then
		setAccountData (previousAcc, "periodo.Total", 0)
	end
	local agora = getRealTime().timestamp -- agora = instante que o jogador deslogou.
	local antes = getAccountData (previousAcc, "periodo.Sessao") or agora -- Se por algum motivo o jogador não tem registro do instante de login, considera como login feito agora. (logou no mesmo instante que deslogou)
	local tempoSessao = agora - antes -- Calcula quantos segundos se passaram desde o login até o logout do jogador (tempo que ele ficou online nesta Sessão)
	local tempoTotal = getAccountData (previousAcc, "periodo.Total") -- Recebe quanto tempo o jogador já possui acumulado na conta.
	setAccountData (previousAcc, "periodo.Total", tempoTotal + tempoSessao) -- Soma o tempo que o jogador já tinha salvo na conta com o tempo que ele ficou online nesta sessão.
end
addEventHandler ("onPlayerLogout", root, savePeriodo)

function loadEverybody ()
	for i, player in ipairs (getElementsByType("player")) do -- Para cada jogador conectado no servidor (incluindo os que estão em download deslogados) faça:
		local acc = getPlayerAccount(player)
		if not isGuestAccount (acc) then -- Se o jogador não está deslogado, então:
			if not getAccountData (acc, "periodo.Sessao") then -- Se o jogador não tem registro do login de sua sessão, então:
				local agora = getRealTime().timestamp
				setAccountData (acc, "periodo.Sessao", agora) -- Salva o registro de login como agora.
			end
		end
	end
end
addEventHandler ("onResourceStart", resourceRoot, loadEverybody) -- Executa isso quando este resource iniciar.

 

  • Thanks 1
Link to comment

getAccountData com os minutos ou segundos que o cara tem que estar logado pra poder pegar o emprego. 

function EntregadorDeJornal ()
	local Level = getElementData ( source, "Level" ) or 0
	if Level >= 0 then
		if getAccountData (getPlayerAccount (source), "periodo.Total", 1) -- Se o jogador estiver logado a 1 segundo então:
			-- Código do emprego
		else --Senão:
			outputChatBox ("Você precisa estar logado x segundos para poder pegar este emprego.", source, 230, 30, 30)
		end
	end
end  
      		

 

Edited by Jonas^
Correção: getAccountData.
Link to comment

Fiz uns testes aqui e vi que parece que o código do Lord esta com problema na hora de setar na conta do jogador o tempo total fiz um comando pra testar se quiser testar ai também:

addCommandHandler ("checkt", function (thePlayer, cmd)
	local tempoEmprego = getAccountData (getPlayerAccount (thePlayer), "periodo.Total")
	if tempoEmprego >= 15 then -- Se o jogador estiver logado a 15 ou mais segundos então:
		outputChatBox ("Você jogou "..getAccountData (getPlayerAccount (thePlayer), "periodo.Total").." e agora esta trabalhando neste emprego.", thePlayer, 0, 255, 0)
	else
		outputChatBox ("Você ainda não jogou 15 segundos", thePlayer, 230, 30, 30)
	end
end)

Dai eu setei manualmente na db o valor 1 e executou normal.

@Lord Henry

Na verdade é só adicionar o evento onPlayerQuit pra salvar também quando o jogador quitar.

Edited by Jonas^
  • Like 1
Link to comment
  • Other Languages Moderators

Sim. Eu estava com pressa pois eu tinha compromisso e também era só um exemplo, nem testei fiz tudo de cabeça.

Mas agradeço pela correção.

  • Like 1
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...