Ir para conteúdo

Featured Replies

Postado

Olá pessoal, eu estou tentando criar um script de um Tile que só de pra passar em um horário certo e caso contrario ele te manda uma mensagem, só que está um pouco complicado pra fazer pois não entendi bem esse negocio de por tempo em storage...

 

O que eu preciso

Basicamente eu preciso de 3 scripts (creio eu que não de pra fazer em um só kk) para definir o Tile, de quanto em quanto tempo se pode passar e por quanto tempo fica "passavel" .

#1: Gostaria muito que esse Tile permitisse os players a passar todos os dias (permite hoje, permite amanha, permite sempre) das 18:30 até as 19:30.

#2: Este segundo Tile, deve permitir que os players passem a dia sim, dia não (permite hoje e não permite amanha) das 19:30 as 21:00.

#3: O terceiro e ultimo Tile, deve permitir que os players passem a cada três dias (permite hoje, amanha e depois de amanha não permite) das 21:00 as 22:30.

 

Um detalhe que esqueci!!

Em todos eles quando dar o horario final, os players na area do ponto A ao ponto B teriam que ser teleportados pro ponto C (Isso deve ser muito dificil de fazer, entao se nao for possivel não tem problema).

 

Observação final

Eu queria por uma mensagem pra quando o player pudesse passar e outra pra quando ele não pudesse mas isso eu mesmo posso arrumar depois...

Pessoal, agradeço pela ajuda e desculpe-me pela ignorância. Tenho o doc de lua functions mas não faço a mínima ideia de como usar storage pra mexer com tempo...

Editado por Davi R. (veja o histórico de edições)

"Feliz ou não a lei da vida é sempre seguir em frente com a cabeça erguida."

contato: [email protected]

Postado

Os scripts 2 e 3 ficaram um pouco gambiarrados e não estou com meu desktop aqui pra fazer os devidos testes, mas a lógica creio eu que funcione:

function onStepIn(cid, item, pos)
	-- Configuracoes globais
	teleportTo = {script1Pos = {x = , y = , z = }, script2Pos = {x = , y = , z = }, script3Pos = {x = , y = , z = }}
	actionIDs = {script1 = 13000, script2 = 13001, script3 = 13002}
	-- Fim das configuracoes globais
	if isPlayer(cid) then
		
		if item.actionid == actionIDs.script1 then
			executeScript1 (teleportTo)
		elseif item.actionid == actionIDs.script2 then
			executeScript2 (teleportTo)
		elseif item.actionid == actionIDs.script3 then
			executeScript3 (teleportTo)
		end
	end
end

function executeScript1 (teleportTo)
	-- Configuracoes Script 1
	horMin = {horas = 18, minutos = 30}
	horMax = {horas = 19, minutos = 30}
	-- Fim das configuracoes Script 1
	hor = {horas = os.date('%H'), minutos = os.date('%M')}
	
	if not isInInterval (hor, horMin, horMax) then
		doTeleportThing(cid, teleportTo.script1Pos)
		doPlayerSendCancel(cid,"Closed.")
	end
end

function executeScript2 (teleportTo)
	-- Configuracoes do Script 2
	horMin = {horas = 19, minutos = 30}
	horMax = {horas = 21, minutos = 00}
	-- Fim das configuracoes do Script 2
	hor = {horas = os.date('%H'), minutos = os.date('%M')}

	if not isInInterval (hor, horMin, horMax) then
		if not isTheDay ()
			doTeleportThing(cid, teleportTo.script2Pos)
			doPlayerSendCancel(cid,"Closed.")		
		end
	end	
end

function executeScript3 (teleportTo)
	-- Configuracoes do Script 3
	horMin = {horas = 21, minutos = 00}
	horMax = {horas = 22, minutos = 30}	
	diasDisponiveis = {1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31}
	-- Fim das configuracoes
	hor = {horas = os.date('%H'), minutos = os.date('%M')}
	if not isInInterval (hor, horMin, horMax) then
		if not isInArray(diasDisponiveis, os.date("%d")) then
			doTeleportThing(cid, teleportTo.script3Pos)
			doPlayerSendCancel(cid,"Closed.")			
		end
	end
end

function isInInterval(hor, horMin, horMax)
	if hor.horas == horMin.horas then
		if hor.minutos >= horMin.minutos then
			return TRUE
		end
	elseif hor.horas == horMax.horas then
		if hor.minutos <= horMax.minutos then
			return TRUE
		end
	elseif hor.horas > horMin.horas and hor.horas < horMax.horas then
		return TRUE
	end
	
	return FALSE
end

function isTheDay ( )
	day = os.date( "%d")
	if (day % 2) == 0 then
		return TRUE
	else
		return FALSE
	end
end

Note que tem umas partes pra você completar (como posições, actionsID e etc.), mas qualquer erro que der só dar o toque que eu tento corrigir, pois como disse acima, estou sem meu desktop pra testar.

Postado
  • Autor

@marcot Obrigado pela ajuda cara! Está praticamente perfeito, eu não entendo muito essa parte do .lua então tentei alterar e não funcionou, mas, no script 2 e no 3, não seria possível ao invés de colocar os dias exatos colocar pra ele pegar o dia atual e somar 3 dias pra saber o proximo dia pra abrir?

Tipo assim, entendi que tem esse

os.date( "%d")

Então pensei que seria possível pegar esse valor antes de fechar o evento e somar três dias pra abrir novamente. (digo antes de fechar o evento pra que dê o loop certinho, ele soma, fecha, depois do tempo ele abre... fica aberto, soma, fecha.. e fica dando esse loop)

-- tipo um

openday = os.date( "%d") + 3
setGlobalStorageValue(seila, openday)

-- e ai na hora de abrir ele da um get no value e confere se é o dia

if os.date( "%d") == getGlobalStorageValue(valor)  then
  doPlayerSendCancel(cid,"vai lá meu querido!")
  else
  doPlayerSendCancel(cid,"só lamento")
  doTeleportThing(cid, fromPosition)
end

deixo claro que não sei se isso está certo ou errado, eu mexo com php, ainda to aprendendo .lua kkk

Eu não sei se isso é complexo de se fazer, na real, não to entendendo muito do script pois nem sabia que existia esses parâmetros, mas se puder me ajudar ficarei muito grato.

Na realidade mesmo se não puder, obrigado parceiro!

Que esse primeiro dia do ano seja bom e os outros sejam melhores ainda.

 

NAAA VERDADE... ACABEI DE PERCEBER QUE ISSO NAO DARIA CERTO

Nem tinha pensado nisso, mas se for assim, se algum dia nenhum player entrar, vai bugar tudo... Fora isso, do jeito que eu falei, cada player que entrar vai aumentar +3 dias no tempo da próxima abertura, ridiculamente burro da minha parte kkkk

 

Uma outra opção eu acho que seria fazer esse script só checar o day e criar um globalevent script pra definir o dia de abertura +3, o que acha? Por que ai nesse caso não buga se ninguém entrar e nem se muita gente entrar kk talvez de certo

Editado por Davi R.
Percebi que cometi um erro bem bobo kk (veja o histórico de edições)

"Feliz ou não a lei da vida é sempre seguir em frente com a cabeça erguida."

contato: [email protected]

Postado

Script 1 consertado, com o bug especificado por PM com o doTeleportThing.

local config = {
	horMin = {horas = 18, minutos = 30}, -- Horario de abrir
	horMax = {horas = 19, minutos = 30}, -- Horario de fechar
	successText = "Lets go there, little boy.", -- Texto enviado quando o player passa com sucesso
	failText = "Open at 18:30 and close at 19:30, come back later." -- Texto enviado quando o player nao consegue passar
}

function onStepIn(cid, fromPosition, item, pos)
	hor = {horas = tonumber(os.date('%H')), minutos = tonumber(os.date('%M'))}

	if isInInterval (cid, hor, config.horMin, config.horMax) == FALSE then
		doTeleportThing(cid, fromPosition)
		doPlayerSendCancel(cid, config.failText)
	else
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, config.successText)
	end

	return 1
end

function isInInterval(cid, hor, horMin, horMax)
	if hor.horas == horMin.horas then
		if hor.minutos >= horMin.minutos then
			return TRUE
		end
	elseif hor.horas == horMax.horas then
		if hor.minutos <= horMax.minutos then
			return TRUE
		end
	elseif hor.horas > horMin.horas and hor.horas < horMax.horas then
		return TRUE
	end
	
	return FALSE
end

 

Agora, para os outros 2 scripts, do jeito que montei, precisaria salvar num arquivo a data em que o evento abriu pela ultima vez, mas mexer com arquivo pesa muito.

Editado por marcot (veja o histórico de edições)

  • 1 year later...
Postado

dá pra configurar mais de uma hora de abrir e fechar ??

 

 

Em 01/01/2018 em 15:06, marcot disse:

Script 1 consertado, com o bug especificado por PM com o doTeleportThing.


local config = {
	horMin = {horas = 18, minutos = 30}, -- Horario de abrir
	horMax = {horas = 19, minutos = 30}, -- Horario de fechar
	successText = "Lets go there, little boy.", -- Texto enviado quando o player passa com sucesso
	failText = "Open at 18:30 and close at 19:30, come back later." -- Texto enviado quando o player nao consegue passar
}

function onStepIn(cid, fromPosition, item, pos)
	hor = {horas = tonumber(os.date('%H')), minutos = tonumber(os.date('%M'))}

	if isInInterval (cid, hor, config.horMin, config.horMax) == FALSE then
		doTeleportThing(cid, fromPosition)
		doPlayerSendCancel(cid, config.failText)
	else
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, config.successText)
	end

	return 1
end

function isInInterval(cid, hor, horMin, horMax)
	if hor.horas == horMin.horas then
		if hor.minutos >= horMin.minutos then
			return TRUE
		end
	elseif hor.horas == horMax.horas then
		if hor.minutos <= horMax.minutos then
			return TRUE
		end
	elseif hor.horas > horMin.horas and hor.horas < horMax.horas then
		return TRUE
	end
	
	return FALSE
end

 

Agora, para os outros 2 scripts, do jeito que montei, precisaria salvar num arquivo a data em que o evento abriu pela ultima vez, mas mexer com arquivo pesa muito.

 

 

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo