Jump to content

Problema - Warp


Marco

Recommended Posts

Boas pessoal, é o seguinte.

Andava a colocar o nemere/razador, no entanto 1 de cada vez e quando coloquei o mapa do nemere e depois a quest, ao "tentar" subir não dá.

Tenho grupo tal como é pedido, mas ao clicar não sobe, nenhum membro dá warp como era suposto, a quest usada foi uma postada pelo runah, dono do mt2quantum.

 

 

-----------------------------------------------------
----------- Criado / modificado por Runah -----------
-----------------------------------------------------
quest snow_dungeon begin
state start begin
	function setting()
		return
		{
			["bossroom_entry_pos"] = {6047,1927},
			["dungeon_entry_pos"] = {5293, 1816},
			["outside_entry_pos"] = {4319,1644},
			["room_pos"] = {
				{5540,1803}, -- 2nd
				{5880,1809}, -- 3rd
				{5292,2067}, -- 4th
				{5539,2072}, -- 5th
				{5865,2074}, -- 6th
				{5423,2251}, -- 7th
				{5691,2238}, -- 8th
				{5969,2229} -- 9th
			},
			["szer_pos"] = {
				{302,642},
				{324,651},
				{299,679},
				{287,670},
				{273,657}
			},
			["cube_pos"] = {
				{394,488},
				{382,458},
				{419,420},
				{452,440},
				{450,485}
			},
			["metin_stone_pos"] = {745,495},
			["tower_pos"] = {849,655},
			["boss_pos"] = {927,334}
		}
	end

	function is_snowd()
		return pc.get_map_index() >= 352*10000 and pc.get_map_index() < 353*10000
	end

	function clear_level()
		d.clear_regen()
		d.purge_area(512000, 153600, 609300, 261600)
		clear_server_timer("respawn_moobs")
	end

	function cube_take(idx)
		if idx == 0 then
			d.setf("stonekill", 2)
		elseif idx == -1 then
			say("Esta não é a ordem correta.")
			return
		elseif idx == 5 then
			snow_dungeon.clear_level()
			npc.purge()
			notice_multiline("A sexta ronda irá começar dentro de 10 segundos.", d.notice)
			server_timer("snow_round5", 10, d.get_map_index())
			return
		else
			d.setf("stonekill", d.getf("stonekill")+1)
		end
		npc.purge()
	end

	when 20395.chat."Torre de Vigia" with pc.get_map_index() == 61 begin
		local setting = snow_dungeon.setting()
		if party.is_party() then
			local pids = {party.get_member_pids()}
			local shamanMembers, ninjaMembers = {}, {}
			local notEnoughLevelMembers = {}, {}
			local delayedMembers = {}

			for idx,pid in ipairs(pids) do
				q.begin_other_pc_block(pid)
				if pc.get_level() < 100 then
					table.insert(notEnoughLevelMembers, pc.name)
				end
				if pc.get_job() == 1 then table.insert(ninjaMembers, pc.name) end
				if pc.get_job() == 3 then table.insert(shamanMembers, pc.name) end
				if get_global_time() - pc.getf("snow_dungeon","exit_time") < 60*60*2 then table.insert(delayedMembers, pc.name) end
				q.end_other_pc_block(pid)
			end

			say("Não vais sobreviver na Torre de Vigia de Nemere sozinho,")
			say("precisas de pelo menos dois companheiros que te ajudem a")
			say("combater na Torre. Deve haver um Ninja e um Xamã no grupo.")

			if table.getn(notEnoughLevelMembers) ~= 0 then
				say("Os seguintes membros do grupo não têm nível 90:")
				for _,name in ipairs(notEnoughLevelMembers) do
					say(color(1,1,0), "	"..name)
				end
				return
			elseif table.getn(ninjaMembers) == 0 then
				say(color(1,1,0), "Não há Ninjas no grupo! Precisas de um!")
				return
			elseif table.getn(shamanMembers) == 0 then
				say(color(1,1,0), "Não há Xamãs no grupo! Precisas de um!")
				return
			elseif table.getn(delayedMembers) ~= 0 then
				say("Os seguintes membros do grupo não podem entrar:")
				for _, name in ipairs(delayedMembers) do
					say(color(1,1,0), "	"..name)
				end
				local cooldown = 120 - math.floor((get_global_time() - pc.getqf("snow_dungeon","exit_time")) / 60)
				if cooldown == 1 then
					say_reward("Falta "..cooldown.." minuto.")
				elseif cooldown < 0 then
					say("")
				else
					say_reward("Faltam "..cooldown.." minutos.")
				end
				return
			end

			if party.is_leader() then
				say("Então queres entrar na Torre de Vigia de Nemere?")
				if select("Claro!", "Nem por isso.") == 1 then
					d.new_jump_party(352, setting.dungeon_entry_pos[1], setting.dungeon_entry_pos[2])
				end
			else
				say(color(1,1,0), "Apenas o Líder do Grupo pode pedir para entrar.")
			end
		else
			say("Precisas de um grupo para entrar!")
		end
	end

	when login with snow_dungeon.is_snowd() and party.is_leader() begin
		if d.getf("started") == 0 then
			local setting = snow_dungeon.setting()
			party.setf("dungeon_index", d.get_map_index())
			d.setf("started", 1)
			d.setf("level", 1)
			d.setf("party_leader_pid", party.get_leader_pid())
			d.regen_file("data/dungeon/snow_dungeon/sd_1.txt")
			d.setf("moobs", d.count_monster())
			notice_multiline("Primeira ronda.", d.notice)
			notice_multiline("Derrota todos os inimigos!", d.notice)
		end
	end

	when login with snow_dungeon.is_snowd() and d.getf("started") == 1 begin
		local idx = party.getf("dungeon_index")
		if pc.get_x() != d.getf_from_map_index("dungeon_x", idx) and pc.get_y() != d.getf_from_map_index("dungeon_y", idx) then
			pc.warp(d.getf_from_map_index("dungeon_x", idx)*100, d.getf_from_map_index("dungeon_y", idx)*100, idx)
		end
	end

	when logout with snow_dungeon.is_snowd() and d.getf("started") == 1 begin
		pc.setf("snow_dungeon", "exit_time", get_global_time())
	end

	when kill with snow_dungeon.is_snowd() and d.getf("level") == 1 begin
		local remain_moobs = d.getf("moobs") - 1
		d.setf("moobs", remain_moobs)
		if remain_moobs <= 0 then
			snow_dungeon.clear_level()
			notice_multiline("A segunda ronda irá começar dentro de 10 segundos.", d.notice)
			server_timer("snow_round1", 10, d.get_map_index())
		end
	end

	when snow_round1.server_timer begin
		if d.select(get_server_timer_arg()) then
			local setting = snow_dungeon.setting()
			snow_dungeon.clear_level()
			d.regen_file("data/dungeon/snow_dungeon/sd_2.txt")
			d.setf("moobs", d.count_monster())
			notice_multiline("Segunda ronda.", d.notice)
			notice_multiline("Alguns monstros da Geada estão na posse de Chaves de Geada.[ENTER]Obtém as chaves deles e descobre a correta![ENTER]No entanto, apenas Xamãs podem usar a chave.", d.notice)
			d.jump_all(setting.room_pos[d.getf("level")][1], setting.room_pos[d.getf("level")][2])
			d.setf("dungeon_x", setting.room_pos[d.getf("level")][1])
			d.setf("dungeon_y", setting.room_pos[d.getf("level")][2])
			d.setf("level", 2)
			d.setf("key_done", 0)
		end
	end

	when kill with snow_dungeon.is_snowd() and d.getf("level") == 2 begin
		if number(1,100) < 5 then
			game.drop_item(30331)
		end
		local remain_moobs = d.getf("moobs") - 1
		d.setf("moobs", remain_moobs)
		if remain_moobs <= 0 then
			snow_dungeon.clear_level()
			notice_multiline("Mais monstros irão spawnar dentro de 10 segundos.", d.notice)
			server_timer("respawn_moobs", 10, d.get_map_index())
		end
	end

	when 30331.use with snow_dungeon.is_snowd() and pc.get_job() == 3 and d.getf("level") == 2 begin
		if number(1,100) < 10 then
			if d.getf("key_done") != 1 then
				d.setf("key_done", 1)
				snow_dungeon.clear_level()
				say("Esta é a chave correcta!")
				notice_multiline("A terceira ronda irá começar dentro de 10 segundos.", d.notice)
				server_timer("snow_round2", 10, d.get_map_index())
			end
		else
			say("Esta chave é falsa.")
		end
		item.remove()
	end

	when snow_round2.server_timer begin
		if d.select(get_server_timer_arg()) then
			local setting = snow_dungeon.setting()
			snow_dungeon.clear_level()
			d.regen_file("data/dungeon/snow_dungeon/sd_3.txt")
			d.setf("moobs", d.count_monster())
			notice_multiline("Terceira ronda.", d.notice)
			notice_multiline("Derrota todos os inimigos!", d.notice)
			d.jump_all(setting.room_pos[d.getf("level")][1], setting.room_pos[d.getf("level")][2])
			d.setf("dungeon_x", setting.room_pos[d.getf("level")][1])
			d.setf("dungeon_y", setting.room_pos[d.getf("level")][2])
			d.setf("level", 3)
		end
	end

	when kill with snow_dungeon.is_snowd() and d.getf("level") == 3 begin
		local remain_moobs = d.getf("moobs") - 1
		d.setf("moobs", remain_moobs)
		if remain_moobs <= 0 then
			snow_dungeon.clear_level()
			notice_multiline("A quarta ronda irá começar dentro de 10 segundos.", d.notice)
			server_timer("snow_round3", 10, d.get_map_index())
		end
	end

	when snow_round3.server_timer begin
		if d.select(get_server_timer_arg()) then
			local setting = snow_dungeon.setting()
			snow_dungeon.clear_level()
			d.regen_file("data/dungeon/snow_dungeon/sd_4.txt")
			d.setf("moobs", d.count_monster())
			notice_multiline("Quarta ronda.", d.notice)
			notice_multiline("Derrota todos os inimigos![ENTER]A Bênção irá encher-te de poder para a segunda vaga.", d.notice)
			d.jump_all(setting.room_pos[d.getf("level")][1], setting.room_pos[d.getf("level")][2])
			d.setf("dungeon_x", setting.room_pos[d.getf("level")][1])
			d.setf("dungeon_y", setting.room_pos[d.getf("level")][2])
			d.setf("level", 4)
			d.setf("first_spawn", 1)
		end
	end

	when kill with snow_dungeon.is_snowd() and d.getf("level") == 4 and d.getf("first_spawn") == 1 begin
		local remain_moobs = d.getf("moobs") - 1
		d.setf("moobs", remain_moobs)
		if remain_moobs <= 0 then
			snow_dungeon.clear_level()
			notice_multiline("A segunda vaca irá spawnar dentro de 10 segundos.", d.notice)
			server_timer("respawn_moobs", 10, d.get_map_index())
		end
	end

	when kill with snow_dungeon.is_snowd() and d.getf("level") == 4 and d.getf("first_spawn") == 2 begin
		local remain_moobs = d.getf("moobs") - 1
		d.setf("moobs", remain_moobs)
		if remain_moobs <= 0 then
			snow_dungeon.clear_level()
			notice_multiline("A quinta ronda irá começar dentro de 10 segundos.", d.notice)
			server_timer("snow_round4", 10, d.get_map_index())
		end
	end

	when snow_round4.server_timer begin
		if d.select(get_server_timer_arg()) then
			local setting = snow_dungeon.setting()
			snow_dungeon.clear_level()
			d.regen_file("data/dungeon/snow_dungeon/sd_5.txt")
			d.setf("moobs", d.count_monster())
			notice_multiline("Quinta ronda.", d.notice)
			notice_multiline("Abre os selos no Cubo Ártico na ordem correta para chegares ao próximo andar.[ENTER]Derrota os monstros da geada e obtém a sua Estrela Polar para abrires os selos!", d.notice)
			local vis = {0,0,0,0,0}
			for i = 1, 5 do
				local ran = number(1,5)
				local sum = 0
				for k = 1, 50 do
					sum = sum+1
					if sum > 5 then
						sum = 1
					end
					if vis[sum] == 0 then
						ran = ran-1
						if ran == 0 then
							vis[sum] = 1
							d.set_unique("stone_"..sum, d.spawn_mob(20398, setting.cube_pos[i][1], setting.cube_pos[i][2]))
							break
						end
					end
				end
			end
			d.jump_all(setting.room_pos[d.getf("level")][1], setting.room_pos[d.getf("level")][2])
			d.setf("dungeon_x", setting.room_pos[d.getf("level")][1])
			d.setf("dungeon_y", setting.room_pos[d.getf("level")][2])
			d.setf("level", 5)
		end
	end

	when kill with snow_dungeon.is_snowd() and d.getf("level") == 5 begin
		if number(1,100) < 5 then
			game.drop_item(30332)
		end
		local remain_moobs = d.getf("moobs") - 1
		d.setf("moobs", remain_moobs)
		if remain_moobs <= 0 then
			snow_dungeon.clear_level()
			notice_multiline("Mais monstros irão spawnar dentro de 10 segundos.", d.notice)
			server_timer("respawn_moobs", 10, d.get_map_index())
		end
	end

	when 20398.take with snow_dungeon.is_snowd() and item.vnum == 30332 and d.getf("level") == 5 begin
		local vid, kill = npc.get_vid(), d.getf("stonekill")
		if vid == d.get_unique_vid("stone_1") then
			snow_dungeon.cube_take(0)
		elseif vid == d.get_unique_vid("stone_2") then
			snow_dungeon.cube_take(kill == 2 and 2 or -1)
		elseif vid == d.get_unique_vid("stone_3") then
			snow_dungeon.cube_take(kill == 3 and 3 or -1)
		elseif vid == d.get_unique_vid("stone_4") then
			snow_dungeon.cube_take(kill == 4 and 4 or -1)
		else
			snow_dungeon.cube_take(kill == 5 and 5 or -1)
		end
		item.remove()
	end

	when snow_round5.server_timer begin
		if d.select(get_server_timer_arg()) then
			local setting = snow_dungeon.setting()
			snow_dungeon.clear_level()
			d.regen_file("data/dungeon/snow_dungeon/sd_6.txt")
			d.setf("moobs", d.count_monster())
			notice_multiline("Sexta ronda.", d.notice)
			notice_multiline("Derrota todos os monstros da geada e depois destrói a Metin do Frio.[ENTER]Apenas Xamãs lhe conseguem infligir dano.", d.notice)
			d.jump_all(setting.room_pos[d.getf("level")][1], setting.room_pos[d.getf("level")][2])
			d.setf("dungeon_x", setting.room_pos[d.getf("level")][1])
			d.setf("dungeon_y", setting.room_pos[d.getf("level")][2])
			d.setf("level", 6)
			d.setf("first_spawn", 1)
		end
	end

	when kill with snow_dungeon.is_snowd() and d.getf("level") == 6 and d.getf("first_spawn") == 1 begin
		local remain_moobs = d.getf("moobs") - 1
		d.setf("moobs", remain_moobs)
		if remain_moobs <= 0 then
			snow_dungeon.clear_level()
			d.setf("first_spawn", 2)
			d.notice("A Metin do Frio apareceu!")
			local setting = snow_dungeon.setting()
			d.spawn_mob(8058, setting.metin_stone_pos[1], setting.metin_stone_pos[2])
		end
	end

	when 8058.kill with snow_dungeon.is_snowd() and d.getf("level") == 6 begin
		snow_dungeon.clear_level()
		notice_multiline("A sétima ronda irá começar dentro de 10 segundos.", d.notice)
		server_timer("snow_round6", 10, d.get_map_index())
	end

	when snow_round6.server_timer begin
		if d.select(get_server_timer_arg()) then
			local setting = snow_dungeon.setting()
			snow_dungeon.clear_level()
			d.regen_file("data/dungeon/snow_dungeon/sd_7.txt")
			for i = 1, 5 do
				d.spawn_mob(6151, setting.szer_pos[i][1], setting.szer_pos[i][2])
			end
			d.setf("moobs", d.count_monster())
			notice_multiline("Sétima ronda.", d.notice)
			notice_multiline("Encontra e derrota Szel, o Lorde do Gelo e do Frio.[ENTER]Apenas aqueles que combatem com a Ajuda do Dragão[ENTER]serão vitoriosos.", d.notice)
			d.jump_all(setting.room_pos[d.getf("level")][1], setting.room_pos[d.getf("level")][2])
			d.setf("dungeon_x", setting.room_pos[d.getf("level")][1])
			d.setf("dungeon_y", setting.room_pos[d.getf("level")][2])
			d.setf("level", 7)
		end
	end

	when 6151.kill with snow_dungeon.is_snowd() and d.getf("level") == 7 and d.getf("7th_floor_killed") == 0 begin
		local count = d.getf("count_7")+1
		d.setf("count_7", count)
		if number(count-1, 3) == count-1 then
			d.setf("7th_floor_killed", 1)
			snow_dungeon.clear_level()
			notice_multiline("A oitava ronda irá começar dentro de 10 segundos.", d.notice)
			server_timer("snow_round7", 10, d.get_map_index())
		else
			d.notice("O seu duplo desaparece.")
		end
	end

	when snow_round7.server_timer begin
		if d.select(get_server_timer_arg()) then
			local setting = snow_dungeon.setting()
			snow_dungeon.clear_level()
			d.regen_file("data/dungeon/snow_dungeon/sd_8.txt")
			d.setf("moobs", d.count_monster())
			notice_multiline("Oitava ronda.", d.notice)
			notice_multiline("Derrota todos os monstros da geada e encontra a Chave da Flor da Geada.[ENTER]Apenas Ninjas e Xamãs a podem usar.", d.notice)
			d.jump_all(setting.room_pos[d.getf("level")][1], setting.room_pos[d.getf("level")][2])
			d.setf("dungeon_x", setting.room_pos[d.getf("level")][1])
			d.setf("dungeon_y", setting.room_pos[d.getf("level")][2])
			d.setf("level", 8)
			d.setf("key_done", 0)
		end
	end

	when kill with snow_dungeon.is_snowd() and d.getf("level") == 8 begin
		if number(1,100) < 5 then
			game.drop_item(30333)
		end
		local remain_moobs = d.getf("moobs") - 1
		d.setf("moobs", remain_moobs)
		if remain_moobs <= 0 then
			snow_dungeon.clear_level()
			notice_multiline("Mais monstros irão spawnar dentro de 10 segundos.", d.notice)
			server_timer("respawn_moobs", 10, d.get_map_index())
		end
	end

	when 30333.use with snow_dungeon.is_snowd() and (pc.get_job() == 1 or pc.get_job() == 3) and d.getf("level") == 8 begin
		if number(1,100) < 10 then
			if d.getf("key_done") != 1 then
				d.setf("key_done", 1)
				snow_dungeon.clear_level()
				say("Esta é a chave correcta!")
				notice_multiline("A nona ronda irá começar dentro de 10 segundos.", d.notice)
				server_timer("snow_round8", 10, d.get_map_index())
			end
		else
			say("Esta chave é falsa.")
		end
		item.remove()
	end

	when snow_round8.server_timer begin
		if d.select(get_server_timer_arg()) then
			local setting = snow_dungeon.setting()
			snow_dungeon.clear_level()
			d.regen_file("data/dungeon/snow_dungeon/sd_9.txt")
			d.setf("moobs", d.count_monster())
			notice_multiline("Nona ronda.", d.notice)
			notice_multiline("Destrói o Pilar do Dragão do Norte.[ENTER]Apenas Ninjas e Xamãs lhe conseguem infligir dano.", d.notice)
			d.spawn_mob(20399, setting.tower_pos[1], setting.tower_pos[2])
			d.jump_all(setting.room_pos[d.getf("level")][1], setting.room_pos[d.getf("level")][2])
			d.setf("dungeon_x", setting.room_pos[d.getf("level")][1])
			d.setf("dungeon_y", setting.room_pos[d.getf("level")][2])
			d.setf("level", 9)
		end
	end

	when 20399.kill with snow_dungeon.is_snowd() and d.getf("level") == 9 begin
		snow_dungeon.clear_level()
		notice_multiline("A décima ronda irá começar dentro de 10 segundos.", d.notice)
		server_timer("snow_round9", 10, d.get_map_index())
	end

	when snow_round9.server_timer begin
		if d.select(get_server_timer_arg()) then
			local setting = snow_dungeon.setting()
			snow_dungeon.clear_level()
			d.regen_file("data/dungeon/snow_dungeon/sd_10.txt")
			d.setf("moobs", d.count_monster())
			notice_multiline("Derrota Nemere, Rei do Gelo e da Geada.", d.notice)
			d.spawn_mob(6191, setting.boss_pos[1], setting.boss_pos[2])
			d.jump_all(setting.bossroom_entry_pos[1], setting.bossroom_entry_pos[2])
			d.setf("dungeon_x", setting.bossroom_entry_pos[1])
			d.setf("dungeon_y", setting.bossroom_entry_pos[2])
			d.setf("level", 10)
		end
	end

	when respawn_moobs.server_timer begin
		if d.select(get_server_timer_arg()) then
			if d.getf("level") == 2 then
				snow_dungeon.clear_level()
				d.regen_file("data/dungeon/snow_dungeon/sd_2.txt")
				d.setf("moobs", d.count_monster())
			elseif d.getf("level") == 4 then
				snow_dungeon.clear_level()
				d.setf("first_spawn", 2)
				d.regen_file("data/dungeon/snow_dungeon/sd_4.txt")
				d.spawn_mob(6108, 159, 489)
				d.spawn_mob(6109, 208, 454)
				d.setf("moobs", d.count_monster())
			elseif d.getf("level") == 5 then
				snow_dungeon.clear_level()
				d.regen_file("data/dungeon/snow_dungeon/sd_5.txt")
				d.setf("moobs", d.count_monster())
			elseif d.getf("level") == 8 then
				snow_dungeon.clear_level()
				d.regen_file("data/dungeon/snow_dungeon/sd_8.txt")
				d.setf("moobs", d.count_monster())
			end
		end
	end

	when 6191.kill with snow_dungeon.is_snowd() and d.getf("level") == 10 begin
		snow_dungeon.clear_level()
		notice_multiline("Derrotaste o Nemere, Rei do Gelo e da Geada, serás teleportado dentro de 2 minutos.", d.notice)
		notice_all("O grupo de "..pc.name.." derrotou o Rei do Gelo e da Geada, Nemere!")
		server_timer("snow_dungeon_end_timer", 120, d.get_map_index())
	end

	when snow_dungeon_end_timer.server_timer begin
		if d.select(get_server_timer_arg()) then
			d.set_warp_location(61, snow_dungeon.setting().outside_entry_pos[1] , snow_dungeon.setting().outside_entry_pos[2])
			d.setf("party_leader_pid", 0)
			d.exit_all()
		end
	end
end
end

Link to comment
  • 2 weeks later...

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
×
×
  • Create New...