Ir para conteúdo
  • 0

[PEDIDO] Remover tempo quando entra em portal


LeoPetryScript

Pergunta

Eu fiz esse script, porém falta uma coisa. Nesse lugar, tem um portal para se o player quiser sair antes do tempo acabar, porém mesmo ele saindo, quando o tempo acaba ele é teleportado para a kick position, alguém poderia me dizer como faço pra quando ele entrar no portal, parar o temporizador? 

function onUse(cid, item, frompos, item2, topos)
positiOn = {x=1088,y=1084,z=9}
kick = {x = 1081, y = 1081, z = 9}
tempo = 2 * 60
storage = 30001

local p = getTopCreature({x=positiOn.x, y=positiOn.y, z=9}).uid
if p~= 1 and isPlayer(p) then
return     doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Já tem alguém no altar, aguarde sua vez!")
else
        doTeleportThing(cid, positiOn, true)
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você será jogado para fora em 2 minutos!")
        doSetStorage(storage, os.time() + tempo)
        addEvent(function()
       doTeleportThing(cid, kick)
       doSendMagicEffect(kick, CONST_ME_TELEPORT)
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Seu tempo acabou.")
   end, tempo * 1000)

return true
end
end

 

Editado por LeoPetryScript
esqueci de um detalhe
Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

Quando ele sai do portal ele vai para onde? Porque é estranho ele ser teleportado pelo portal e depois que o tempo acaba ser novamente sendo que saiu da área. Ficou um pouco ambíguo, pode explicar mais detalhadamente? Como funciona e/ou você quer que funciona? Explica tudo que qualquer coisa eu refaço o script para você.

Link para o comentário
Compartilhar em outros sites

  • 0
Em 16/07/2020 em 18:08, Yan18 disse:

Quando ele sai do portal ele vai para onde? Porque é estranho ele ser teleportado pelo portal e depois que o tempo acaba ser novamente sendo que saiu da área. Ficou um pouco ambíguo, pode explicar mais detalhadamente? Como funciona e/ou você quer que funciona? Explica tudo que qualquer coisa eu refaço o script para você.

então, eu mudei o sistema da porta para ficar mais simples, decidi fazer o sistema de kick pela function de stepIn e stepOut, estou usando essa script que peguei em um site, porém o stop event não está funcionando, se puder me ajudar, fico grato

local config = {
	time = 1,                       --Tempo, em minutos, parado para ser teleportado.
        toPos = {x = 1081, y = 1081, z = 9},   --Para onde o player será teleportado.
	events = {},
}
function onStepIn(cid)
	config.events[cid] = addEvent(function()
		if isPlayer(cid) then
			doTeleportThing(cid, config.toPos)
		end	
	end, config.time * 60 * 1000)
	return true
end
function onStepOut(cid)
	stopEvent(config.events[cid])
	return true
end

 

 

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

  • 0
12 horas atrás, LeoPetryScript disse:

então, eu mudei o sistema da porta para ficar mais simples, decidi fazer o sistema de kick pela function de stepIn e stepOut, estou usando essa script que peguei em um site, porém o stop event não está funcionando, se puder me ajudar, fico grato


local config = {
	time = 1,                       --Tempo, em minutos, parado para ser teleportado.
        toPos = {x = 1081, y = 1081, z = 9},   --Para onde o player será teleportado.
	events = {},
}
function onStepIn(cid)
	config.events[cid] = addEvent(function()
		if isPlayer(cid) then
			doTeleportThing(cid, config.toPos)
		end	
	end, config.time * 60 * 1000)
	return true
end
function onStepOut(cid)
	stopEvent(config.events[cid])
	return true
end

 

 

Qual é a versão da sua TFS?

Link para o comentário
Compartilhar em outros sites

  • 0
Em 24/07/2020 em 11:12, Yan18 disse:

Qual é a versão da sua TFS?

[27/07/2020 19:00:00] We Do OTS, version 0.1.0 (Beta Version)

 

até queria trocar pra uma versão que agrupe os itens automaticamente na backpack, mas nao sei como se faz isso

 

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

  • 0

Testa assim:

local function teleportPlayer(cid, position)
   if isPlayer(cid) then
       doTeleportThing(cid, position)
   end
end

local config = {
time = 1, --Tempo, em minutos, parado para ser teleportado.
toPos = {x = 1081, y = 1081, z = 9}, --Para onde o player será teleportado.
event = 0
}

--------------------------------------------------------------------------------------------------

function onStepIn(cid)
     config.event = addEvent(teleportPlayer, config.time * 60 * 1000, cid, config.toPos)
end

function onStepOut(cid)
	stopEvent(config.event)
return true
end

Vê se permanece sem funcionar.

Link para o comentário
Compartilhar em outros sites

  • 0
28 minutos atrás, Yan18 disse:

Testa assim:


local function teleportPlayer(cid, position)
   if isPlayer(cid) then
       doTeleportThing(cid, position)
   end
end

local config = {
time = 1, --Tempo, em minutos, parado para ser teleportado.
toPos = {x = 1081, y = 1081, z = 9}, --Para onde o player será teleportado.
event = 0
}

--------------------------------------------------------------------------------------------------

function onStepIn(cid)
     config.event = addEvent(teleportPlayer, config.time * 60 * 1000, cid, config.toPos)
end

function onStepOut(cid)
	stopEvent(config.event)
return true
end

Vê se permanece sem funcionar.

acabei de testar, ele continua teleportando para fora mesmo depois de sair do sqm

 

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

  • 0
18 minutos atrás, LeoPetryScript disse:

acabei de testar, ele continua teleportando para fora mesmo depois de sair do sqm

 

Que estranho. Mas, é uma quest? Me explica como funciona do começo ao fim, como que o player inicia, se clica em algo antes. Explica todo o procedimento. 

Link para o comentário
Compartilhar em outros sites

  • 0
6 minutos atrás, Yan18 disse:

Que estranho. Mas, é uma quest? Me explica como funciona do começo ao fim, como que o player inicia, se clica em algo antes. Explica todo o procedimento. 

Assim, é uma sala onde só pode entrar uma pessoa por vez, pois é uma sala de fusão e são colocados os itens em cima do altar para fazer a fusão. Entra na sala por uma porta que teleporta pra dentro.

Então como só pode entrar uma pessoa por vez, alguém pode entrar e ficar lá trancando a sala, pra não acontecer isso eu preciso de um script de que se o player fica na sala por mais de tantos minutos, ele é jogado pra fora, assim como está acontecendo, porém, se sair pela porta, cancele esse teleport, pois ele ja saiu da sala.

Link para o comentário
Compartilhar em outros sites

  • 0
40 minutos atrás, LeoPetryScript disse:

Assim, é uma sala onde só pode entrar uma pessoa por vez, pois é uma sala de fusão e são colocados os itens em cima do altar para fazer a fusão. Entra na sala por uma porta que teleporta pra dentro.

Então como só pode entrar uma pessoa por vez, alguém pode entrar e ficar lá trancando a sala, pra não acontecer isso eu preciso de um script de que se o player fica na sala por mais de tantos minutos, ele é jogado pra fora, assim como está acontecendo, porém, se sair pela porta, cancele esse teleport, pois ele ja saiu da sala.

Entendi, se tivesse explicado isso no tópico tinha ficado bem mais fácil de entender kkk.

 

Eu fiz um outro script para você, em movements mesmo. Mas, antes do script, abre o mapa no Remere's e coloca um unique_id em todos os pisos (um único unique id para todos os pisos) da área da fusão onde só fica 1 player. E após isso, substitua o seu código por esse:

 

-- FUNÇÃO PARA TELEPORTAR O JOGADOR --
local function TimerToKick(cid, pos, texto, time)
	if time <= 0 then
		doTeleportThing(cid, pos)
		cid:sendMessageText(MESSAGE_STATUS_CONSOLE_BLUE, texto)
	
	else
		if time > 1 then
			cid:sendMessageText(MESSAGE_STATUS_CONSOLE_BLUE, "Você tem " ..time.. " minutos até ser teleportado.")
		elseif time == 1 then
			cid:sendMessageText(MESSAGE_STATUS_CONSOLE_BLUE, "Você tem " ..time.. " minuto até ser teleportado.")
		end
		
		addEvent(TimerToKick, 60000, cid, pos, text, time-1)
	end	
	
end
--------------------------------------------------------------------------------------------------------------------

local unique_id = 6325 -- UNIQUE ID QUE COLOCOU NO PISO NO REMERES
local kick_position = Position(1000, 1000, 7) -- POSIÇÃO ONDE O PLAYER SERÁ TELEPORTADO
local texto = "Você foi teleportado." -- TEXTO QUE O PLAYER RECEBERÁ AO SER TELEPORTADO

----------------------------- CÓDIGO -----------------------------

function onStepIn(cid, item, position, fromPosition)
	if item.uid == unique_id then
		TimerToKick(cid, kick_position, texto, 5) -- O ÚLTIMO PARÂMETRO É O TEMPO EM MINUTOS PARA O PLAYER SER TELEPORTADO
	return true
	
	else
		return true
	end

end

Deixei tudo comentado, mas, você só precisa colocar o número do unique id que colocou nos piso no Remeres na variável unique_id no script e colocar a coordenada correta para onde o player vai ser teleportado na variável kick_position.

 

E na tag xml em movements.xml:

<movevent event="StepIn" itemid="ID DO PISO" script="NOME DO ARQUIVO.lua"/>

Não sei se já configurou certo o xml do script, mas, só colocar o nome do arquivo onde falei e o id do piso da área.

 

Testa e me fala se der algum erro ou problema.

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

  • 0
1 hora atrás, Yan18 disse:

Entendi, se tivesse explicado isso no tópico tinha ficado bem mais fácil de entender kkk.

 

Eu fiz um outro script para você, em movements mesmo. Mas, antes do script, abre o mapa no Remere's e coloca um unique_id em todos os pisos (um único unique id para todos os pisos) da área da fusão onde só fica 1 player. E após isso, substitua o seu código por esse:

 


-- FUNÇÃO PARA TELEPORTAR O JOGADOR --
local function TimerToKick(cid, pos, texto, time)
	if time <= 0 then
		doTeleportThing(cid, pos)
		cid:sendMessageText(MESSAGE_STATUS_CONSOLE_BLUE, texto)
	
	else
		if time > 1 then
			cid:sendMessageText(MESSAGE_STATUS_CONSOLE_BLUE, "Você tem " ..time.. " minutos até ser teleportado.")
		elseif time == 1 then
			cid:sendMessageText(MESSAGE_STATUS_CONSOLE_BLUE, "Você tem " ..time.. " minuto até ser teleportado.")
		end
		
		addEvent(TimerToKick, 60000, cid, pos, text, time-1)
	end	
	
end
--------------------------------------------------------------------------------------------------------------------

local unique_id = 6325 -- UNIQUE ID QUE COLOCOU NO PISO NO REMERES
local kick_position = Position(1000, 1000, 7) -- POSIÇÃO ONDE O PLAYER SERÁ TELEPORTADO
local texto = "Você foi teleportado." -- TEXTO QUE O PLAYER RECEBERÁ AO SER TELEPORTADO

----------------------------- CÓDIGO -----------------------------

function onStepIn(cid, item, position, fromPosition)
	if item.uid == unique_id then
		TimerToKick(cid, kick_position, texto, 5) -- O ÚLTIMO PARÂMETRO É O TEMPO EM MINUTOS PARA O PLAYER SER TELEPORTADO
	return true
	
	else
		return true
	end

end

Deixei tudo comentado, mas, você só precisa colocar o número do unique id que colocou nos piso no Remeres na variável unique_id no script e colocar a coordenada correta para onde o player vai ser teleportado na variável kick_position.

 

E na tag xml em movements.xml:


<movevent event="StepIn" itemid="ID DO PISO" script="NOME DO ARQUIVO.lua"/>

Não sei se já configurou certo o xml do script, mas, só colocar o nome do arquivo onde falei e o id do piso da área.

 

Testa e me fala se der algum erro ou problema.

vou testar, xml só precisa stepin ou stepout tbm?

 

1 hora atrás, Yan18 disse:

Entendi, se tivesse explicado isso no tópico tinha ficado bem mais fácil de entender kkk.

 

Eu fiz um outro script para você, em movements mesmo. Mas, antes do script, abre o mapa no Remere's e coloca um unique_id em todos os pisos (um único unique id para todos os pisos) da área da fusão onde só fica 1 player. E após isso, substitua o seu código por esse:

 


-- FUNÇÃO PARA TELEPORTAR O JOGADOR --
local function TimerToKick(cid, pos, texto, time)
	if time <= 0 then
		doTeleportThing(cid, pos)
		cid:sendMessageText(MESSAGE_STATUS_CONSOLE_BLUE, texto)
	
	else
		if time > 1 then
			cid:sendMessageText(MESSAGE_STATUS_CONSOLE_BLUE, "Você tem " ..time.. " minutos até ser teleportado.")
		elseif time == 1 then
			cid:sendMessageText(MESSAGE_STATUS_CONSOLE_BLUE, "Você tem " ..time.. " minuto até ser teleportado.")
		end
		
		addEvent(TimerToKick, 60000, cid, pos, text, time-1)
	end	
	
end
--------------------------------------------------------------------------------------------------------------------

local unique_id = 6325 -- UNIQUE ID QUE COLOCOU NO PISO NO REMERES
local kick_position = Position(1000, 1000, 7) -- POSIÇÃO ONDE O PLAYER SERÁ TELEPORTADO
local texto = "Você foi teleportado." -- TEXTO QUE O PLAYER RECEBERÁ AO SER TELEPORTADO

----------------------------- CÓDIGO -----------------------------

function onStepIn(cid, item, position, fromPosition)
	if item.uid == unique_id then
		TimerToKick(cid, kick_position, texto, 5) -- O ÚLTIMO PARÂMETRO É O TEMPO EM MINUTOS PARA O PLAYER SER TELEPORTADO
	return true
	
	else
		return true
	end

end

Deixei tudo comentado, mas, você só precisa colocar o número do unique id que colocou nos piso no Remeres na variável unique_id no script e colocar a coordenada correta para onde o player vai ser teleportado na variável kick_position.

 

E na tag xml em movements.xml:


<movevent event="StepIn" itemid="ID DO PISO" script="NOME DO ARQUIVO.lua"/>

Não sei se já configurou certo o xml do script, mas, só colocar o nome do arquivo onde falei e o id do piso da área.

 

Testa e me fala se der algum erro ou problema.

[27/07/2020 23:16:29] [Error - MoveEvents Interface] 
[27/07/2020 23:16:29] data/movements/scripts/tpStorages.lua:onStepIn
[27/07/2020 23:16:29] Description: 
[27/07/2020 23:16:29] data/movements/scripts/tpStorages.lua:11: attempt to index local 'cid' (a number value)
[27/07/2020 23:16:29] stack traceback:
[27/07/2020 23:16:29]     data/movements/scripts/tpStorages.lua:11: in function 'TimerToKick'
[27/07/2020 23:16:29]     data/movements/scripts/tpStorages.lua:28: in function <data/movements/scripts/tpStorages.lua:26>

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, LeoPetryScript disse:

vou testar, xml só precisa stepin ou stepout tbm?

 

[27/07/2020 23:16:29] [Error - MoveEvents Interface] 
[27/07/2020 23:16:29] data/movements/scripts/tpStorages.lua:onStepIn
[27/07/2020 23:16:29] Description: 
[27/07/2020 23:16:29] data/movements/scripts/tpStorages.lua:11: attempt to index local 'cid' (a number value)
[27/07/2020 23:16:29] stack traceback:
[27/07/2020 23:16:29]     data/movements/scripts/tpStorages.lua:11: in function 'TimerToKick'
[27/07/2020 23:16:29]     data/movements/scripts/tpStorages.lua:28: in function <data/movements/scripts/tpStorages.lua:26>

Eu inverti o nome da função sendTextMessage haha, fiz tudo de cabeça. Testa agora:

 

 

-- FUNÇÃO PARA TELEPORTAR O JOGADOR --
local function TimerToKick(cid, pos, texto, time)
	if time <= 0 then
		doTeleportThing(cid, pos)
		cid:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, texto)
	
	else
		if time > 1 then
			cid:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Você tem " ..time.. " minutos até ser teleportado.")
		elseif time == 1 then
			cid:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Você tem " ..time.. " minuto até ser teleportado.")
		end
		
		addEvent(TimerToKick, 60000 * 5 * 60, cid, pos, text, time-1)
	end	
	
end
--------------------------------------------------------------------------------------------------------------------

local unique_id = 6325 -- UNIQUE ID QUE COLOCOU NO PISO NO REMERE'S
local kick_position = Position(1000, 1000, 7) -- POSIÇÃO ONDE O PLAYER SERÁ TELEPORTADO
local texto = "Você foi teleportado." -- TEXTO QUE O PLAYER RECEBERÁ AO SER TELEPORTADO

----------------------------- CÓDIGO -----------------------------

function onStepIn(cid, item, position, fromPosition)
	if item.uid == unique_id then
		TimerToKick(cid, kick_position, texto, 5) -- O ÚLTIMO PARÂMETRO É O TEMPO EM MINUTOS PARA O PLAYER SER TELEPORTADO
	return true
	
	else
		return true
	end

end

 

Link para o comentário
Compartilhar em outros sites

  • 0
4 horas atrás, Yan18 disse:

Eu inverti o nome da função sendTextMessage haha, fiz tudo de cabeça. Testa agora:

 

 


-- FUNÇÃO PARA TELEPORTAR O JOGADOR --
local function TimerToKick(cid, pos, texto, time)
	if time <= 0 then
		doTeleportThing(cid, pos)
		cid:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, texto)
	
	else
		if time > 1 then
			cid:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Você tem " ..time.. " minutos até ser teleportado.")
		elseif time == 1 then
			cid:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Você tem " ..time.. " minuto até ser teleportado.")
		end
		
		addEvent(TimerToKick, 60000 * 5 * 60, cid, pos, text, time-1)
	end	
	
end
--------------------------------------------------------------------------------------------------------------------

local unique_id = 6325 -- UNIQUE ID QUE COLOCOU NO PISO NO REMERE'S
local kick_position = Position(1000, 1000, 7) -- POSIÇÃO ONDE O PLAYER SERÁ TELEPORTADO
local texto = "Você foi teleportado." -- TEXTO QUE O PLAYER RECEBERÁ AO SER TELEPORTADO

----------------------------- CÓDIGO -----------------------------

function onStepIn(cid, item, position, fromPosition)
	if item.uid == unique_id then
		TimerToKick(cid, kick_position, texto, 5) -- O ÚLTIMO PARÂMETRO É O TEMPO EM MINUTOS PARA O PLAYER SER TELEPORTADO
	return true
	
	else
		return true
	end

end

 

Deu erro, mudei varias linhas pra ver se dava certo, continuava dando erro, então eu pensei no sistema de colocar storage... sistema resolvido :

---sistema de Kick por tempo---
local pos = {x = 1081, y = 1081, z = 9} -- localização para onde vai
local tempo = 2 -- tempo em minutos

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    setPlayerStorageValue(cid, 29109, 1)
    addEvent(function()
        if getPlayerStorageValue(cid, 29109) == 1 then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você foi jogado para fora.") -- para não bugar acento deixe em codificação ANSI
            doTeleportThing(cid, pos)
            setPlayerStorageValue(cid, 29109, 0)
        end
    end, tempo*60*1000)
    return true
end

function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    doPlayerSetStorageValue(cid, 29109, 0)
    return true
end

 

No Movements XML:

	<movevent type="StepIn" uniqueid="xxxx" event="script" value="Nome do arquivo.lua"/>
	<movevent type="StepOut" uniqueid="xxxx" event="script" value="Nome do arquivo.lua"/>

 

Link para o comentário
Compartilhar em outros sites

  • 0
5 horas atrás, LeoPetryScript disse:

Deu erro, mudei varias linhas pra ver se dava certo, continuava dando erro, então eu pensei no sistema de colocar storage... sistema resolvido :


---sistema de Kick por tempo---
local pos = {x = 1081, y = 1081, z = 9} -- localização para onde vai
local tempo = 2 -- tempo em minutos

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    setPlayerStorageValue(cid, 29109, 1)
    addEvent(function()
        if getPlayerStorageValue(cid, 29109) == 1 then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você foi jogado para fora.") -- para não bugar acento deixe em codificação ANSI
            doTeleportThing(cid, pos)
            setPlayerStorageValue(cid, 29109, 0)
        end
    end, tempo*60*1000)
    return true
end

function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    doPlayerSetStorageValue(cid, 29109, 0)
    return true
end

 

No Movements XML:


	<movevent type="StepIn" uniqueid="xxxx" event="script" value="Nome do arquivo.lua"/>
	<movevent type="StepOut" uniqueid="xxxx" event="script" value="Nome do arquivo.lua"/>

 

E que erro estava dando? Porque não adianta sair mudando várias linhas aleatoriamente. Mas enfim, que bom que deu certo.

Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, Yan18 disse:

E que erro estava dando? Porque não adianta sair mudando várias linhas aleatoriamente. Mas enfim, que bom que deu certo.

De cabeçar eu não lembro, porém eu mudava a linha que dava erro, e quando arrumava aquela, outra dava problema, exemplo de uma que foi simples é 

"cid:sendtextmessage" meu tfs não reconheceu esse comando. Mesmo não dando nenhum erro no carregamento das movements, quando pisava no sqm ou dava erro, ou nada acontecia

E outra coisa simples foi o tempo, você colocou 60000 ms oq já seria 60 seg, então ficou 60s * 5 * 60

 

Fico grato pela ajuda de qualquer forma, obrigado por tentar resolver meu problema

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, LeoPetryScript disse:

De cabeçar eu não lembro, porém eu mudava a linha que dava erro, e quando arrumava aquela, outra dava problema, exemplo de uma que foi simples é 

"cid:sendtextmessage" meu tfs não reconheceu esse comando. Mesmo não dando nenhum erro no carregamento das movements, quando pisava no sqm ou dava erro, ou nada acontecia

E outra coisa simples foi o tempo, você colocou 60000 ms oq já seria 60 seg, então ficou 60s * 5 * 60

 

Fico grato pela ajuda de qualquer forma, obrigado por tentar resolver meu problema

Tem que ver qual era o erro. Sobre o tempo, eu tinha feito uma função recursiva e regressiva, então como o addEvent era a cada 1 minuto (60000ms) e no último parâmetro passava os minutos (5), então a cada 1 minuto ele verificava a condição que fiz e se fosse igual a 0 o parâmetro time ele teleportava, senão ia exibindo a mensagem falando o tempo restante.

 

Mas, que bom que funcionou.

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

×
×
  • Criar Novo...