Jump to content
Close
maicao22

Scripting Ajuda com script da anihi modificado

Recommended Posts

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

 





Share this post


Link to post
Share on other sites

O que você precisa é que o script teleport aqueles que terminaram(mesmo se for no tempo menor do que o defnidido? ao invés de aguardar todos terminarem?



Contribuições:
 

=> Distribuições/Servidores

  1. [8.60] The Forgotten Server 1.3 (COMPILADO WIN x64)

 

=> Scripts/Códigos/Tutoriais

  1. Pokemon pescado aparece em volta do seu pokemon
  2. [Gesior]Dobrar pontos PagSeguro a partir de x valor doado

 

 Gostou de alguma contribuição? Rep +😁




Share this post


Link to post
Share on other sites

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.





Share this post


Link to post
Share on other sites

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

 



[OTX3 - 8.60] Projeto STYLLER 2019 (Download)

 




Share this post


Link to post
Share on other sites

Mas tipo, isso dai vai fazer com que nao teleporte quem ainda não conseguiu concluir a quest no tempo estipulado. pelo menos foi o que entendi.





Share this post


Link to post
Share on other sites

Isso que eu disse é para não teleportar no tempo estipulado quem já saiu pelo teleport do fim da quest.



[OTX3 - 8.60] Projeto STYLLER 2019 (Download)

 




Share this post


Link to post
Share on other sites

entendi. estarei fazendo aqui e testando. Mas no caso, precisarei de um creaturescripts também para caso ele morra remover a storage, certo?





Share this post


Link to post
Share on other sites

Sim, ou coloca no onLogin caso algum player logue com a storage com valor 1 ele é teleportado pro templo.

 

tbem colocar noLogout no local.


Edited by luanluciano93 (see edit history)

[OTX3 - 8.60] Projeto STYLLER 2019 (Download)

 




Share this post


Link to post
Share on other sites

Certo, implementei aqui. Porem apenas para o player que puxou a alavanca está funcionando. Os demais são teleportados para a quest sem receber a determinada storage.





Share this post


Link to post
Share on other sites

você tem que colocar a storage dentro desse laço de repetição: 

	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


[OTX3 - 8.60] Projeto STYLLER 2019 (Download)

 




Share this post


Link to post
Share on other sites

Veja como está:

 

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) and getPlayerStorageValue(cid,18441) == 1 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
		setPlayerStorageValue(cid,18441,1)
		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

 





Share this post


Link to post
Share on other sites
setPlayerStorageValue(cid,18441,1)

muda o cid para tid



[OTX3 - 8.60] Projeto STYLLER 2019 (Download)

 




Share this post


Link to post
Share on other sites

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 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"}
	} 
}

local 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

local function VarAnihiPlayer(cid)
	if not isCreature(cid) then return LUA_ERROR end
	if isInRange(getPlayerPosition(cid), 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

 



vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

Dota System 8.6 Com Buffs Automáticos + MAPA (100%) - PVP

Link para Downloadhttps://www.4shared.com/rar/SMta8CQ8fi/Dota_Venda.html?

[+]--------------------------------------[+]-------------------------------------------[+]

 

DISCORDvodkart#6090

 




Share this post


Link to post
Share on other sites

Muito obrigado meus amigos deu super certo aqui. Rep + para vocês.

 

Sem querer aproveitar da boa vontade, seria pedir muito a implementação do tempo restante subindo na alavanca, igual do global? Para que os outros players que estão esperando para fazer a quest tenha uma noção de quanto tempo aguardar. Visto que se trata de uma quest um tanto demorada para onde vou usar esse script.





Share this post


Link to post
Share on other sites

@maicao22 se tiver dúvidas ainda pode olhar na minha assinatura eu trabalhei em cima de uma anihi a um tempo da uma olhada
 

 





Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...