Ir para conteúdo

Featured Replies

Postado

Ola pessoal. Venho mais uma vez aqui no TibiaKing solicitar a ajuda dos amigos com o seguinte script.

 

Seguinte, andei trabalhando em um script da anihi que tinha aqui e deixei ele quase 100% do jeito que queria. Com tempo para permanecer na sala e tals. Contudo, estou usando esse script da anihi como base para uma outra quest que envolve uma área maior. Até ai tudo bem, quando acaba o tempo dos jogadores que estavam a fazer a quest eles são teleportador para o templo normalmente. Mas ocorre que caso tais players tenham chegado até o final da quest e a feito em menos tempo do que o tempo necessário, (que no caso ai no script está definido para 2 minutos por conta de testes) ele pode estar em qualquer outro lugar do mapa depois que é mandado para o templo.

 

Portanto estarei deixando o script aqui para quem puder me ajudar a modificá-lo para funcionar 100%. Até tentei usar outros como base aqui trabalhando com storages mas ainda não obtive sucesso. Se alguém pude me ajudar agradeço. 

 

Abraços!

 

local config = {
	from = {x = 22987, y = 19805, z = 7}, -- coordenada do canto superior esquerdo da área.
	to = {x = 23024, y = 19992, z = 7}, -- coordenada do canto inferior direito da área.
	}

local t = {
	lvl = 100,
	Time = 2, -- em minutos
	entrada =
	{
		{x = 23052, y = 19991, z = 7}, -- pos players
		{x = 23051, y = 19991, z = 7},
		{x = 23050, y = 19991, z = 7},
		{x = 23049, y = 19991, z = 7}
	},
	saida =
	{
		{x = 23017, y = 19985, z = 7}, -- pos para onde eles irão
		{x = 23019, y = 19985, z = 7},
		{x = 23017, y = 19987, z = 7},
		{x = 23019, y = 19987, z = 7}
	},
	monstros =
	{
		{{x = 23004, y = 19832, z = 7}, "Juggernaut"}, -- defina pos dos montros e nomes
		{{x = 23004, y = 19834, z = 7}, "Ghazbaran"}
	} 
}
function getPlayersInArea(fromPos, toPos)
	local players = {}
	for _, pid in ipairs(getPlayersOnline()) do
		if isInRange(getPlayerPosition(pid), fromPos, toPos) then
			table.insert(players, pid)
		end
	end
	return players
end

function VarAnihiPlayer(cid)
	if not isCreature(cid) then return LUA_ERROR end
	if #getPlayersInArea(config.from, config.to) then
		doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
	end
end
function onUse(cid, item, fromPosition, itemEx, toPosition)
	local check = {}
	if #getPlayersInArea(config.from, config.to) > 0 then
		doPlayerSendCancel(cid, 'Aguarde, tem jogadores fazendo a quest.') return true
	end
	for _, k in ipairs(t.entrada) do
		local x = getTopCreature(k).uid
		if(x == 0 or not isPlayer(x) or getPlayerLevel(x) < t.lvl) then
			doPlayerSendCancel(cid, 'Está faltando player ou alguém não possui level '..t.lvl..' ou mais.') return true
		end
		table.insert(check, x)
	end
	for _, summon in pairs(t.monstros) do
		local creature = getTopCreature(summon[1]).uid
		if(creature > 0 and not isPlayer(creature)) then
			doRemoveCreature(creature)
		end
		doCleanTile(summon[1])
		doCreateMonster(summon[2], summon[1])
	end
	for i, tid in ipairs(check) do
		doSendMagicEffect(t.entrada[i], CONST_ME_POFF)
		doTeleportThing(tid, t.saida[i], false)
		addEvent(VarAnihiPlayer, t.Time*60*1000, tid)
		doSendMagicEffect(t.saida[i], CONST_ME_ENERGYAREA)
	end
	doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
	return true
end

 

  • Respostas 14
  • Visualizações 1.4k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • luanluciano93
    luanluciano93

    Coloque uma storage no teleport de saida setando ela como 0. Antes dessa linha:  doSendMagicEffect(t.saida[i], CONST_ME_ENERGYAREA) Coloca setando esta storage como 1. E na verificação c

  • na verdade n precisa nem atribuir storage, a função da anihi no caso para esse codigo, está errada... use assim:   local config = { from = {x = 22987, y = 19805, z = 7}, -- coordenada do can

Postado
  • Autor

Não brother. Apenas uma forma de parar a contagem para quem terminou. Por exemplo:

 

Os players puxam a alavanca e tem 30 minutos no máximo para concluir a quest, do contrário, caso acabe esse tempo todos são teleportador para o templo. O que já ocorre normalmente e está funcionando perfeitamente.

 

No entanto, digamos que os players concluíram a quest em 20 minutos pegaram sua recompensa no bau e entraram no tp para ir pro templo. Então a vida continua e não importa onde ele esteja, os dez minutos restantes continuarão a correr e ele vai ser mandando para o templo mesmo já estando em uma outra quest ou em uma hunt ou fazendo qualquer outra coisa.

 

Só preciso de uma forma para pausar, digamos assim, a contagem do tempo quando os players concluir a quest e passar pelo teleporte. O que acho que da para ser feito com storage.

@Vodkart  Você é o cara indicado para me ajudar nessa rsrsrs.

Postado

Coloque uma storage no teleport de saida setando ela como 0.

Antes dessa linha: 

doSendMagicEffect(t.saida[i], CONST_ME_ENERGYAREA)

Coloca setando esta storage como 1.

E na verificação coloca uma condição de teleportar apenas quem tem a storage com valor 1.

function VarAnihiPlayer(cid)
	if not isCreature(cid) then return LUA_ERROR end
	if #getPlayersInArea(config.from, config.to) then
		doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
	end
end

 

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.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo