Jump to content

Dúvida - Quest


Marco
 Share

Recommended Posts

Boas pessoal, tenho uma pequena questão, gostaria de saber se alguém me poderia ajudar numa quest.
Quest do dragão azul, é possível verificar se todos os membros do grupo estão online?

Isto pq? Porque eu tenho 1 hora para poderem entrar no dragão após entrar 1 vez, no entanto imaginemos um grupo de 3 pessoas, 1 delas altera, o líder pede para entrar, as 2 personagens online entram e a que estava alterada não entrou, no entanto após aqueles 2 saírem do dragão e a que estava alterada fizer grupo as outras 2 podem entrar de novo, e deveria aparecer que eles tinham de esperar :/  Não sei se conseguiram entender..

( mas se estiverem os 3 on e forem os 3 para o dragão ao saírem já diz que têm de esperar, só acontece se estiver 1 off e depois esse off ficar grupo já podem entrar, dai querer saber se é possível "verificar" se o todos os membros estão ligados )

Caso não tenham entendido eu tento explicar melhor...

Cumprimentos, 

Link to comment
Share on other sites

16 minutos atrás, PACI disse:

^this
E deixa para aí a quest.

@PACI
 Imagina... 3 jogadores, 2 Guerreiros e 1 shaman.

Eu tu e o tierri (foi o que me veio á cabeça)
O tierri altera, ficamos nós 2 on certo? Entramos nós 2 no dragão, o tierri não entrou, alterou ou desligou o char  ( mas continuamos os 3 em grupo ) .
Matámos o Dragão... supostamente nós já não poderíamos entrar logo, teríamos de esperar 1 hora ( na quest está 5 minutos, mas pronto é suposto ser 1 hora )
No entanto se o tierri entrar no char, sair do grupo e fizer grupo connosco, nós podemos entrar de novo com ele. 
O que queria era tipo, obrigar a pedir que estejam todos os jogadores on se fosse possível :/ 

Qualquer dúvida diz

A quest salvo erro até foi feita por ti, para o nexus/quantum na altura 
Quest: 

quest dragonlair begin
	state start begin
		when 30121.chat."Quero enfrentar o Beran-Setaou" begin
			say_title("Fantasma de um Sura:")
			say("")
			if pc.count_item(30179) < 3 then
				say("Calma! Achas que isto é assim, sem mais, nem menos? ")
				say("Precisas de 3 "..item_name(30179)..", tu e os membros ")
				say("da tua guild! Derrotem o Capitão Yonghan!")
				say_item_vnum(30179)
				return
			elseif not party.is_party() then
				say("Pensas enfrentar-te a este monstro sozinho? Não sejas")
				say("imprudente! Vai, obtém um grupo forte e venham!")
				return
			elseif not party.is_leader() then
				say("Apenas o Líder do Grupo deve pedir entrada para este")
				say("inferno gelado.")
				return
			end
			local pids = {party.get_member_pids()}
			local cantEnter = {{},{}}
			for _, pid in ipairs(pids) do	
				q.begin_other_pc_block(pid)
				if pc.count_item(30179) < 3 then
					table.insert(cantEnter[1], pc.get_name())
				elseif pc.getqf("entry_time") > get_time() then
					table.insert(cantEnter[2], pc.get_name())
				end
				q.end_other_pc_block(pid)
			end 

			if table.getn(cantEnter[1]) > 0 then
				say("Lamento "..pc.get_name().."," )
				say("Alguns membros do teu grupo não têm o item.")
				say("Eu não posso deixar ninguém entrar sem o item!")
				say_reward("Os membros que não têm o item são:")			
				for i = 1, table.getn(cantEnter[1]) do
					say(color(1,1,0), "  "..cantEnter[1][i])
				end
				return
			elseif table.getn(cantEnter[2]) > 0 then
				say("Lamento "..pc.get_name().."," )
				say("Alguns membros do teu grupo á passaram por cá.")
				say("Eu não os posso deixar entrar, visto que já cá,")
				say("estiverem à menos de uma hora.")
				say_reward("Os membros que não podem entrar:")			
				for i = 1, table.getn(cantEnter[2]) do
					say(color(1,1,0), "  "..cantEnter[2][i])
				end
				return
			end

			say("Aparentas ser uma pessoa forte "..pc.get_name().."... ")
			say("Mas tentar entrar no Templo do Dragão? ")
			say("É muito perigoso, mas ... " )
			say("Posso deixar-vos ir caso tenham todas as Chaves Torcidas. ")
			say("Lembra-te que o poder das Chaves dura apenas 60 minutos. " )
			say("Até lá terás de ter derrotado o Dragão. ")
			say("")
			say("")
			wait()
			say_title("Fantasma de um Sura:")
			say("")
			say("Hmmm... "..pc.get_name()..", "..pc.get_name().."...")
			say("Levar-te-ei a ti e aos teus companheiros até lá.")
			say("Mas tem em conta uma coisa, Beran-Setaou não irá ")
			say("estar logo presente na sala, terás algumas etapas. ")
			say("Possuem 1 hora para completar esta tarefa. ")
			say("Ainda querem ir? ")
			local s = select("Sim, claro! " , "Não, ainda não estou preparado. " )
			if s == 1 then
			d.new_jump_party(207, 8435, 10666)
			else
			end
		end
		

		function in_lair()
			return pc.get_map_index() >= 207*10000 and pc.get_map_index() < 209*10000
		end

		when logout with dragonlair.in_lair() begin
			pc.set_warp_location(73, 1807, 12208)
			pc.setqf("entry_time", get_time()+60*5)
		end

		when login with dragonlair.in_lair() begin
			if pc.count_item(30179) < 3 then
				pc.set_warp_location(73, 1807, 12208)
				d.exit()
				return
			end
			pc.remove_item(30179, 3)
			if d.getf("first") == 0 then
				d.regen_file("locale/portugal/map/metin2_map_skipia_dungeon_boss/regen.txt")
				mob.spawn(8058, 212, 143, 0, 0)
				mob.spawn(8058, 152, 143, 0, 0)
				mob.spawn(8058, 152, 202, 0, 0)
				mob.spawn(8058, 212, 203, 0, 0)
				server_timer("dragonlair_45m_remaining", 60*45, d.get_map_index())
				d.notice("|cFF32CD32[Templo do Dragão] |cFFFFA500|hParte todas as metins existentes!")
				d.setf("first", 1)
			end
		end

		when 8058.kill or 8058.kill or 8058.kill or 8058.kill with dragonlair.in_lair() begin
			local count = d.getf("metin") + 1
			d.setf("metin", count)
			if count >= 4 then
				d.kill_all()
				d.clear_regen()
				notice_multiline("|cFF32CD32[Templo do Dragão] |cFFFFA500|hAguardem pela chegada Bruxa de Gelo!", d.notice)
				notice_multiline("|cFF32CD32[Templo do Dragão] |cFFFFA500|hUm rugido enorme ouve-se no fundo da Gruta...", d.notice)
				server_timer("dragonlair_next_step", 20*1, d.get_map_index())
				
			end
		end

		when 1191.kill with dragonlair.in_lair() begin
			d.kill_all()
			d.clear_regen()
			notice_multiline("|cFF32CD32[Templo do Dragão] |cFFFFA500|hA temperatura dentro da gruta diminuiu drásticamente!", d.notice)
			notice_multiline("|cFF32CD32[Templo do Dragão] |cFFFFA500|hBeran-Setaou está furioso!", d.notice)
			server_timer("dragonlair_final_step", 10*1, d.get_map_index())
		end

		when dragonlair_next_step.server_timer begin
			if d.select(get_server_timer_arg()) then
				d.notice("|cFF32CD32[Templo do Dragão] |cFFFFA500|hA Bruxa de Gelo chegou!")
				d.regen_file("locale/portugal/map/metin2_map_skipia_dungeon_boss/regen.txt")
				d.spawn_mob(1191, 182, 173, 0, 0)
			end
		end

		when dragonlair_final_step.server_timer begin
			if d.select(get_server_timer_arg()) then
				d.notice("|cFF32CD32[Templo do Dragão] |cFFFFA500|hA raiva de Beran-Setaou sente-se desde o início do Gruta!")
				d.regen_file("locale/portugal/map/metin2_map_skipia_dungeon_boss/regen2.txt")
				d.spawn_mob(2493, 175, 172, 0, 0)
			end
		end

		when 8031.kill or 8032.kill or 8033.kill or 8034.kill with dragonlair.in_lair() begin
			if (number(1,3) <= 2) then
				local group_group = {2425, 2425,2426, 2426,2427}
				local group_vnum = group_group[number(1,table.getn(group_group))]
				mob.spawn_group(group_vnum, pc.get_local_x(), pc.get_local_y(), 1, 1, 1) 
			end
		end

		when 2493.kill with dragonlair.in_lair() begin
			d.kill_all()
			notice_all("|cFF32CD32[Templo do Dragão] |cFFFFA500|hO grupo de "..pc.get_name().." derrotou o Beran-Setaou!")
			game.drop_item_with_ownership(71123, 1)
			game.drop_item_with_ownership(71129, 1)
			server_timer("dragonlair_end_timer", 60*1, d.get_map_index())
		end

		when dragonlair_45m_remaining.server_timer begin
			if d.select(get_server_timer_arg()) then
				d.notice("|cFF32CD32[Templo do Dragão] |cFFFFA500|hRestam 45 minutos.")
				server_timer("dragonlair_30m_remaining", 60*30, d.get_map_index())
			end
		end
		
		when dragonlair_30m_remaining.server_timer begin
			if d.select(get_server_timer_arg()) then
				d.notice("|cFF32CD32[Templo do Dragão] |cFFFFA500|hRestam 30 minutos.")
				server_timer("dragonlair_15m_remaining", 60*15, d.get_map_index())
			end
		end
		
		when dragonlair_15m_remaining.server_timer begin
			if d.select(get_server_timer_arg()) then
				d.notice("|cFF32CD32[Templo do Dragão] |cFFFFA500|hRestam 15 minutos.")
				server_timer("dragonlair_5m_remaining", 60*5, d.get_map_index())
			end
		end
		
		when dragonlair_5m_remaining.server_timer begin
			if d.select(get_server_timer_arg()) then
				d.notice("|cFF32CD32[Templo do Dragão] |cFFFFA500|hRestam 5 minutos.")
				server_timer("dragonlair_10s_remaining", 60*5, d.get_map_index())
			end
		end
		
		when dragonlair_10s_remaining.server_timer begin
			if d.select(get_server_timer_arg()) then
				d.notice("|cFF32CD32[Templo do Dragão] |cFFFFA500|hO tempo terminou! ")
				server_timer("dragonlair_end_timer", 3*1, d.get_map_index())
			end
		end

		when dragonlair_end_timer.server_timer begin
			if d.select(get_server_timer_arg()) then
				d.set_warp_location(73, 1807, 12208)
				d.exit_all()
			end
		end
	end
end

 

Edited by L2P
Link to comment
Share on other sites

Se fizerem logout dentro da dungeon, isso não deve acontecer pois:

when logout with dragonlair.in_lair() begin
			pc.set_warp_location(73, 1807, 12208)
			pc.setqf("entry_time", get_time()+60*5)
		end

 

 

Vejo estas três soluções

;Líder do grupo ao abrir quest, adiciona logo o quest state ao grupo inteiro (party.setfqf).

;Crias nova função para verificar se jogador está online

;Usas o loop para fazer por exemplo pc.can_warp() a cada jogador, caso algum dos jogadores não possa (se estiver offline também deverá dar false), não fazes o jump

A última parece ser a mais rápida

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...