Ir para conteúdo
  • 0

Piso com time


Lumus

Pergunta

Alguém poderia me auxiliar no addEvent? para que ele faça:

 

Ele se repita durante 30 segundos, enviando a MSG para o player:

 

player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Tempo: ".. left .."")

 

Durante 30 segundos, mas só o player que tiver X storage. Ao dar 30 segundos, ele manda:

player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Seu tempo acabou.") e teleporta pro templo.

 

Tentei de diversas formas mas não consegui. Se puderem ajudar, agradeço imensamente.

 

Editado por Fawz
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Alguém poderia me auxiliar no addEvent? para que ele faça:

 

Ele se repita durante 30 segundos, enviando a MSG para o player:

 

player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Tempo: ".. left .."")

 

Durante 30 segundos, mas só o player que tiver X storage. Ao dar 30 segundos, ele manda:

player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Seu tempo acabou.") e teleporta pro templo.

 

Tentei de diversas formas mas não consegui. Se puderem ajudar, agradeço imensamente.

Esse evento seria ao clicar no item, pisar em um determinado piso, como?

Link para o comentário
Compartilhar em outros sites

  • 0

Esse evento seria ao clicar no item, pisar em um determinado piso, como?

É um NPC funciona assim:

Você começa com tempo de 30 segundos para ir em determinados pisos espalhados num labirinto. A cada piso que você andar, você ganha 15k em gps e mais 10 segundos para continuar dentro dele. Se dentro dos 30 segundos você não pisar em nenhum dos pisos, você é mandado pra fora do labirinto, aonde o NPC está sem ganhar nada.

Cada vez que pisa no piso, ganha 10 segundos a mais que são somados no tempo atual ex: demorei 5 segundos pra achar o primeiro piso, então, tenho 25 segundos pisei no piso ganho mais 10, vou pra 35.

 

Consegui explicar direitinho?

Link para o comentário
Compartilhar em outros sites

  • 0

É um NPC funciona assim:

Você começa com tempo de 30 segundos para ir em determinados pisos espalhados num labirinto. A cada piso que você andar, você ganha 15k em gps e mais 10 segundos para continuar dentro dele. Se dentro dos 30 segundos você não pisar em nenhum dos pisos, você é mandado pra fora do labirinto, aonde o NPC está sem ganhar nada.

Cada vez que pisa no piso, ganha 10 segundos a mais que são somados no tempo atual ex: demorei 5 segundos pra achar o primeiro piso, então, tenho 25 segundos pisei no piso ganho mais 10, vou pra 35.

 

Consegui explicar direitinho?

Testa esse piso...

 

movements.xml:

<movevent event="StepIn" actionid="51993" script="labirinto.lua"/>
labirinto.lua:

 

local config = {
	str = 51993,
	time = 30, -- segundos
	pos = {x = 162, y = 51, z = 6} -- posição para teleportar o player quando o tempo acabar
}

function onStepIn(creature, item, position, fromPosition)
	if not creature:isPlayer() then return false end
	
	creature:setStorageValue(config.str, config.time)
	local function countDown(uid)
		if creature:getStorageValue(config.str) > 0 then
			creature:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Tempo: " .. creature:getStorageValue(config.str))
			creature:setStorageValue(config.str, (creature:getStorageValue(config.str) - 1))
			addEvent(countDown, 1000, creature.uid)
		else
			creature:teleportTo(config.pos)
			creature:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Seu tempo acabou.") 
		end
	end
    
	addEvent(countDown, 1000, creature.uid)
	return true
end

 

Link para o comentário
Compartilhar em outros sites

  • 0

Funcionou perfeitamente. Pode me dar uma luz quanto ao NPC?

 

Tipo: o movement na verdade, só vai dar os 10 segundos a cada vez q ele pisar num piso, ao todo são 10 pisos, e ele só pode pisar 1x em cada. Ai acrescenta 10 segundos no tempo que ele já tem.

Editado por Fawz
Link para o comentário
Compartilhar em outros sites

  • 0

Funcionou perfeitamente. Pode me dar uma luz quanto ao NPC?

 

Tipo: o movement na verdade, só vai dar os 10 segundos a cada vez q ele pisar num piso, ao todo são 10 pisos, e ele só pode pisar 1x em cada. Ai acrescenta 10 segundos no tempo que ele já tem.

Me da mais detalhes do npc...

Link para o comentário
Compartilhar em outros sites

  • 0

Me da mais detalhes do npc...

Tu chega no NPC e fala:

 

Player: Hi

NPC: Olá, Player. Eu tenho um desafio pra hoje! Ou pode reportar um.

Player: Desafio

NPC: Este desafio é bem simples. Você tem 30 segundos iniciais para pisar em certos locais dentro do labirinto. Cada piso que você conseguir pisar, te darão mais 10 segundos para ficar lá dentro e você ganha 15k em gps. Quanto mais você pisar, mais dinheiro vai ganhar. Você aceita?

Sim

Boa sorte! Você tem: X segundos.

---

A partir daqui já começa a mandar a msg:

16:15 Tempo: 30

16:15 Tempo: 29

16:15 Tempo: 28...

 

Ai o player vai e pisa em 1 dos pisos, exemplo:

Antes de pisar ele estava com 23 segundos ele pisa, ganha 15k + 10 segundos... ficando com 33 segundos de tempo. Se ele conseguir pisar nos 10 pisos já definidos no tempo que ele conseguir, ele sai do labirinto e volta a falar com o NPC:

Player: Hi

NPC: Olá, Player. Eu tenho um desafio pra hoje! Ou pode reportar um.

Player: reportar

NPC:Parabéns, você conseguiu, leve mais 500k com você!

Se dentro do prazo dos segundos chegar a 0 ele é mandado pra fora

 

Deu pra entender direitnho bruno? Desde-já agradeço.

Editado por Fawz
Link para o comentário
Compartilhar em outros sites

  • 0

Deu pra entender direitnho bruno? Desde-já agradeço.

Em data/lib/core/constants.lua adicione:

LABIRINTO = {
	STORAGE_MISSION = 51988, -- storage para controle da quest
	STORAGE_TIME = 51989, -- storage para controle do tempo
	STORAGE_AUX = 51987, -- storage auxilair
	TIME_NPC = 30, -- tempo em segundos para o tempo do npc
	TIME_TILES = 10, -- tempo em segundos para o tempo dos pisos
	PRIZE = 15000, -- gold coins que o player ira ganhar ao pisao no piso
	PRIZE_FINISH = 500000, -- gold coins que o player ira ganhar ao finalizar a quest
	POS_START = {x = 5, y = 6, z = 7}, -- posição para começar o labirinto
	POS_LEAVE = {x = 7, y = 8, z = 9},-- posição para teleportar o player quando o tempo acabar
	LAST_AID = 51999 -- actionid do último piso
}
XML do tile:

<movevent event="StepIn" fromuid="51990" touid="51999" script="xxx.lua" />
Ai você colocar uma uniqueid em cada piso (essa uniqueid tem que ser uma para ser usada como storage de controle dos pisos também).

 

Tile:

 

function onStepIn(creature, item, position, fromPosition)
	if not creature:isPlayer() then return false end
	if creature:getStorageValue(item.uid) <= 0 then
		creature:setStorageValue(LABIRINTO.STORAGE_AUX, 1)
		creature:setStorageValue(LABIRINTO.STORAGE_TIME, (creature:getStorageValue(LABIRINTO.STORAGE_TIME) + LABIRINTO.TIME_TILES))
		creature:setStorageValue(item.uid, 1)
		creature:addMoney(LABIRINTO.PRIZE)
		if item.aid == LABIRINTO.LAST_AID then
			creature:setStorageValue(LABIRINTO.STORAGE_MISSION, 2)
		end
	elseif creature:getStorageValue(item.uid) > 0 then
		return true
	end

	local function countDown(uid)
		if creature:getStorageValue(LABIRINTO.STORAGE_TIME) > 0 then
			creature:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Tempo: " .. creature:getStorageValue(LABIRINTO.STORAGE_TIME))
			creature:setStorageValue(LABIRINTO.STORAGE_TIME, (creature:getStorageValue(LABIRINTO.STORAGE_TIME) - 1))
			addEvent(countDown, 1000, creature.uid)
		else
			creature:teleportTo(LABIRINTO.POS_LEAVE)
			creature:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Seu tempo acabou.") 
		end
	end

	addEvent(countDown, 1000, creature.uid)
	return true
end

 

 

Npc:

 

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid)              npcHandler:onCreatureAppear(cid)            end
function onCreatureDisappear(cid)           npcHandler:onCreatureDisappear(cid)         end
function onCreatureSay(cid, type, msg)      npcHandler:onCreatureSay(cid, type, msg)    end
function onThink()                          npcHandler:onThink()                        end

local function greetCallback(cid)
	local player = Player(cid)

	npcHandler:say("Olá, " .. player:getName() .. ". Eu tenho um {desafio} pra hoje! Ou você pode {reportar} um.", cid)
	return true
end

local function countDown(uid)
	local self = Player(uid)
	if self:getStorageValue(LABIRINTO.STORAGE_TIME) > 0 and self:getStorageValue(LABIRINTO.STORAGE_AUX) == 0  then
		self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Tempo: " .. self:getStorageValue(LABIRINTO.STORAGE_TIME))
		self:setStorageValue(LABIRINTO.STORAGE_TIME, (self:getStorageValue(LABIRINTO.STORAGE_TIME) - 1))
		addEvent(countDown, 1000, self.uid)
	else
		self:teleportTo(LABIRINTO.POS_LEAVE)
		self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Seu tempo acabou.") 
	end
end

local function creatureSayCallback(cid, type, msg)
	if not npcHandler:isFocused(cid) then
		return false
	end

	local player = Player(cid)
	if msgcontains(msg, "desafio") and npcHandler.topic[cid] == 0 then
		if player:getStorageValue(LABIRINTO.STORAGE_MISSION) <= 0 then
			npcHandler:say("Este desafio é bem simples. Você tem 30 segundos iniciais para pisar em certos locais dentro do labirinto. Cada piso que você conseguir pisar, te darão mais 10 segundos para ficar lá dentro e você ganha 15k em gps. Quanto mais você pisar, mais dinheiro vai ganhar. Você aceita?", cid)
			npcHandler.topic[cid] = 1
		else
			npcHandler:say("Você já teve sua chance.", cid)
			npcHandler.topic[cid] = 0
		end
	elseif msgcontains(msg, "sim") and npcHandler.topic[cid] == 1 then
		npcHandler:say("Boa sorte! Você tem: " .. LABIRINTO.TIME_NPC .. " segundos.", cid)
		player:teleportTo(LABIRINTO.POS_START)
		player:setStorageValue(LABIRINTO.STORAGE_MISSION, 1)
		player:setStorageValue(LABIRINTO.STORAGE_TIME, LABIRINTO.TIME_NPC)
		player:setStorageValue(LABIRINTO.STORAGE_AUX, 0)
		addEvent(countDown, 1000, player.uid)
		npcHandler.topic[cid] = 0
	elseif msgcontains(msg, "reportar") and player:getStorageValue(LABIRINTO.STORAGE_MISSION) == 2 then
		npcHandler:say("Parabéns, você conseguiu, leve mais " .. math.ceil(LABIRINTO.PRIZE_FINISH / 1000) .. "k com você!", cid)
		creature:addMoney(LABIRINTO.PRIZE_FINISH)
		player:setStorageValue(LABIRINTO.STORAGE_MISSION, 3)
		npcHandler.topic[cid] = 0
	end
	return true
end

npcHandler:setCallback(CALLBACK_ONADDFOCUS, onAddFocus)
npcHandler:setCallback(CALLBACK_ONRELEASEFOCUS, onReleaseFocus)

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Link para o comentário
Compartilhar em outros sites

  • 0

Deu um erro: O NPC teleporta ele normal, porém ao ser teleportado a msg fica:

18:27 Tempo: 30
18:27 Tempo: 30
18:27 Tempo: 30
18:27 Tempo: 30
18:27 Tempo: 30
Quando tu pisa lá nos pisos, buga mais ainda, o tempo só fica repetindo interruptamente.
Editado por Fawz
Link para o comentário
Compartilhar em outros sites

  • 0

Deu um erro: O NPC teleporta ele normal, porém ao ser teleportado a msg fica:

18:27 Tempo: 30

18:27 Tempo: 30

18:27 Tempo: 30

18:27 Tempo: 30

18:27 Tempo: 30

 

Quando tu pisa lá nos pisos, buga mais ainda, o tempo só fica repetindo interruptamente.

Refaz os procedimentos, editei os scripts...

Link para o comentário
Compartilhar em outros sites

  • 0

Refaz os procedimentos, editei os scripts...

Agora o tempo desce beleza só que:

 

ao pisar nos pisos em vez de dar os 10 segundos, está removendo o tempo mais rapidamente.

E seu eu piso em 3 tiles:

 

00:51 Seu tempo acabou.
00:51 Seu tempo acabou.
00:51 Seu tempo acabou.
Link para o comentário
Compartilhar em outros sites

  • 0

Agora o tempo desce beleza só que:

 

ao pisar nos pisos em vez de dar os 10 segundos, está removendo o tempo mais rapidamente.

E seu eu piso em 3 tiles:

 

00:51 Seu tempo acabou.

00:51 Seu tempo acabou.

00:51 Seu tempo acabou.

Editei o script de tile...

Muda a tag xml e o script em si, e no mapa, ao invés de colocar actionid, coloca uniqueid.

Link para o comentário
Compartilhar em outros sites

  • 0

Ele é teleportado para dentro o tempo começa a descer de boa só que:

 

Ao pisar no 1° piso:

O tempo adiciona mais 10 segundos e teleporta ele pra fora com a msg:

12:33 Seu tempo acabou.

 

Ao falar com o NPC:

reportar ele não responde nada e quando falo desafio: Você já teve sua chance.

Link para o comentário
Compartilhar em outros sites

  • 0

Troque:

 

player:setStorageValue(LABIRINTO.STORAGE_TIME, LABIRINTO.TIME_NPC)

por:

 

player:setStorageValue(LABIRINTO.STORAGE_TIME, os.time() + LABIRINTO.TIME_NPC)
Link para o comentário
Compartilhar em outros sites

  • 0

 

Troque:

player:setStorageValue(LABIRINTO.STORAGE_TIME, LABIRINTO.TIME_NPC)

por:

player:setStorageValue(LABIRINTO.STORAGE_TIME, os.time() + LABIRINTO.TIME_NPC)

Agora deu isso:

19:16 Tempo: 1440022644
19:17 Tempo: 1440022643
19:17 Tempo: 1440022642
19:17 Tempo: 1440022641
19:17 Tempo: 1440022640
E quando pisa em qualquer piso: 19:17 Seu tempo acabou.
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...