Jump to content

Shogun

Miembro
  • Contador contenido

    378
  • Ingreso

  • Última visita

  • Días ganados

    51

Mensajes publicados por Shogun

  1. La oficial de las catacumbas, en inglés:

    quest devilcatacomb_zone begin	state start begin	function setting()		return		{		["base"]={["x"] = 3072  , ["y"]= 12032 ,},		["floor1_s"] = { ["x"] = 20, ["y"] = 20, },		["floor1_e"] = { ["x"] = 500, ["y"] = 470,},		["floor2_s"] = { ["x"] = 510, ["y"] = 18, },		["floor2_e"] = { ["x"] = 978, ["y"] = 470,},		["floor1_entry"] = {["x"] = 73, ["y"] = 63,},		["floor2_entry"] = {["x"] = 550, ["y"] = 45,},		["floor3_entry"] = {["x"] = 1378, ["y"] = 249,},		["floor4_entry"] = {["x"] = 70, ["y"] = 592,},		["floor5_entry"] = {["x"] = 846, ["y"] = 898},		["floor6_entry"] = {["x"] = 1362, ["y"] = 666},		["floor7_entry"] = {["x"] = 73, ["y"] = 1156},		["map_idx"] = 206,		["rag"] = 30311,		["devil_king"] = 2591,		["reapers_credit1"] = 30319,		["reapers_credit2"] = 30320,		["reapers_credit3"] = 76002,		["reapers_credit4"] = 79001,		["floor3_stone"] = 8038,  		["floor3_stone_pos"] = {				{1366,	150},				{1366,	351},				{1234,	365},				{1234,	140},				{1150,	135},				{1130,	365},				{1135,	253}		},		["mob_regen_file_path"] = "data/dungeon/devilcatacomb/",		["floor4_regen_file"] = {"devilcatacomb_floor4_regen1.txt",		                       "devilcatacomb_floor4_regen2.txt",							   "devilcatacomb_floor4_regen3.txt",							   "devilcatacomb_floor4_regen4.txt",							   "devilcatacomb_floor4_regen5.txt"} ,		["credit_stone"] = 30101,		["credit_stone_pos"] = {307,323},		["floor2_stone"] = 30103,		["floor2_stone_pos"] = {741,217},		["floor2_merchant_npc"] = 20368,		["floor2_merchant_npc_pos"] = {734,214},				["floor4_npc"] = 30104,		["floor4_npc_pos"] = {500, 717},		["devil_king_pos"] = {{673,829},{691,638},{848,568},{1026,642},{1008,862}},		["unlock_stone"] = 30312,		["floor5_stone"] = 30102,		["floor5_stone_pos"] = {848, 735},		["devil_great_king"] = 2597 ,		["devil_great_king_pos"] = {1303,704},		["devil_emperor"] = 2598,		["devil_emperor_pos"] = {74,1103},		["dc2_door_set_size"] = {4,2,3,2},		["dc2_door_set1"] = {								{{30111,    566,    117,    5},{30112,  562,    311,    5,},{30118, 663,    434,    7},{30119,  881,    434,    7}},								{{30116,    743,    390,    3},{30119,  612,    251,    1,}},								{{30113,    654,    211,    5},{30111,  707,    338,    7,},{30112, 775,    336,    7}},								{{30117,    733,    294,    3},{30113,  694,    271,    1,}}							},		["dc2_door_set2"] = {								{{30115,    942,    141,    5},{30116,  942,    245,    5},{30117,  942,    321,    5},{30115,  763,    64, 7}},								{{30118,    643,    116,    3},{30114,  900,    167,    1}},								{{30114,    850,    293,    5},{30113,  715,    164,    7},{30114,  817,    162,    7}},								{{30111,    802,    277,    1},{30112,  800,    241,    1}}							},		}	end		when login begin			local setting = devilcatacomb_zone.setting()			local idx = pc.get_map_index()			if idx >= (setting.map_idx * 10000) and idx < ((setting.map_idx + 1) * 10000) then--				pc.set_warp_location(65, 5914, 992)         -----------¾Æ±Íµ¿±¼ ÁÂÇ¥·Î				local level = d.getf("level")				-- warp locationÀÌ 0,0 ÀÌ¸é ½Ã½ºÅÛ »óÀ¸·Î, Á¾·á ½Ã, Á¾·á À§Ä¡¸¦ ½ÃÀÛ À§Ä¡·Î ÀúÀåÇÑ´Ù.				d.set_warp_location (0, 0, 0)									if level == 2 then					say_title("The Devil´s Catacomb: Level 2")					say("")					say("Destroy the seal of this door to reach Level 3.")					say("You have 60 minutes left.")					say("")				elseif level == pc.getqf ("level") then--					say ("³«¿ÀµÇÁö ¾Ê±â À§ÇØ µ¿·áµé°ú ÇÕ·ùÇϽʽÿÀ.")					--say (locale.devilcatacomb_follow_peer)				else--					say (locale.devilcatacomb_dropout)--					say ("´ç½ÅÀº ³«¿ÀµÇ¾ú½À´Ï´Ù. ¿ë½ÅÀÇ ÈûÀ» ºô¾î Àá½Ã µÚ µ¿±¼ ¹ÛÀ¸·Î À̵¿ÇÕ´Ï´Ù.")--					timer ("devilcatacomb_ban_timer", 5)				end			end			if idx == setting.map_idx then				pc.setf("devilcatacomb_zone","last_exit_time", get_global_time())				-- 2ÃþÀÌ»óÀ̸é, ÂѰܳª				if pc.get_x() < setting.floor1_s.x + setting.base.x					or pc.get_y() < setting.floor1_s.y + setting.base.y					or pc.get_x() > setting.floor1_e.x + setting.base.x					or pc.get_y() > setting.floor1_e.y + setting.base.y				then					-- ¾Æ±Íµ¿±¼ ÀÔ±¸·Î--					if not is_test_server() then						--say (locale.devilcatacomb_dropout)						timer ("devilcatacomb_ban_timer", 5)--					end				else 					-- ¾Æ±Íµ¿±¼ ÀÔ±¸·Î--					pc.set_warp_location(65, 5914, 992)					addimage(20, 12, "catacombs.tga")					say("")					say("")					say("")					say("")					say_title("The Devil´s Catacomb: Level 1")					say("")					say("Hunt monsters in this area to obtain the Soul")					say("Crystal Key and unlock the next level.")					say("")					say_item("Soul Crystal Key", 30311, "")					pc.remove_item(30311, pc.count_item(30311))					pc.remove_item(30312, pc.count_item(30312))				end			end		end		when logout begin			local idx = pc.get_map_index()			local setting = devilcatacomb_zone.setting()			if idx == setting.map_idx or idx >= (setting.map_idx * 10000) and idx < ((setting.map_idx + 1) * 10000) then				pc.setf("devilcatacomb_zone","last_exit_time", get_global_time())			end		end		when devilcatacomb_ban_timer.timer begin			pc.warp((5914)*100, (992)*100, 65)		end		when warp_timer.timer begin			local level = d.getf("level")			local level_switch = {				[3] = "Find the correct metin stone and destroy it!",				[4] = "Find the right way.",				[5] = "Kill the Demon-Guards to obtain the Totem Faces. They serve as the key to Level 6!",				[6] = "Slay Grim Reaper and his minions!",			}			local t = 3600 -(get_global_time() - d.getf("enter_time"))			local t_r = math.mod (t, 60)			local t_m = (t - t_r) / 60			d.notice ( level_switch[level] )			d.notice ( "You have " ..t_m.." minutes left.")			d.set_warp_location (0, 0, 0)		end		when 20367.chat."Enter the Devil's Catacomb" with pc.get_map_index() == 65 begin			local setting = devilcatacomb_zone.setting()			if pc.get_level() < 75 then				say_title("Guardian of the Catacombs:")				say("")				say("I will not give access to the Devil's Catacomb")				say("to an unexperienced knight such as you.")				say("")				say("It is for your own safety.")				say("")				say_reward("Level 75 is required to enter.")				say("")			--elseif pc.getf("deviltower_zone","9_done") == 0 then			--	say(locale.devilcatacomb_man_say_deviltop_clear)			--elseif ((get_global_time() - pc.getf("devilcatacomb_zone","last_exit_time")) < 1800) then			--	say(locale.devilcatacomb_man_say_see_you_later)			else				say_title("Guardian of the Catacombs:")				say("")				say("Do you wish to enter Devil's Catacomb now?")				say("")				local s = select("Yes, I want to enter.", "No, I want to leave.")				if s == 1 then					pc.warp ((setting.floor1_entry.x + setting.base.x )* 100, (setting.floor1_entry.y + setting.base.y) * 100)				end			end		end				when 20367.chat."Back to the Dark Temple" with pc.get_map_index() == 206 begin			say_title("Guardian of the Catacombs:")			say("")			say("Are you sure you want to give up and")			say("return to the Dark Temple?")			say("")			local s = select("Yes, I am too weak.", "No, I will fight on!")			if s == 1 then				pc.warp(591400, 99900)			end		end			-- ¸ó½ºÅÍ°¡ Á×À¸¸é ¹ß»ýÇÏ´Â À̺¥Æ®.		when kill begin			local setting = devilcatacomb_zone.setting()			-- ¾Æ±Íµ¿±¼ 1ÃþÀ̸é 1% È®·ü·Î ±Ý½Ã°ÇÀ» µå¶øÇÑ´Ù.			if pc.get_x() > setting.floor1_s.x + setting.base.x					and pc.get_y() > setting.floor1_s.y + setting.base.y					and pc.get_x() < setting.floor1_e.x + setting.base.x					and pc.get_y() < setting.floor1_e.y + setting.base.y then				local j = number(1, 100)				if j == 1 then					game.drop_item (setting.rag, 1)				end			end		end	function spawn_doors ()		local setting = devilcatacomb_zone.setting()		for i = 1, 4 do			local mob_set = setting.dc2_door_set1[i]			local set_size = setting.dc2_door_set_size[i]			for j = 1, set_size do				d.set_unique (i.."_1_"..j, d.spawn_mob_dir (mob_set[j][1], mob_set[j][2], mob_set[j][3], mob_set[j][4]))			end			mob_set = setting.dc2_door_set2[i]			for j = 1, set_size do				d.set_unique (i.."_2_"..j, d.spawn_mob_dir (mob_set[j][1], mob_set[j][2], mob_set[j][3], mob_set[j][4]))			end		end	end		-- ±Ý½Ã°ÇÀ» ³ªÂûÀÎÁõ¼®¿¡ µå·¡±×Çϸé 2ÃþÀ¸·Î º¸³½´Ù. 2ÃþºÎÅÍ´Â ´øÀüÀÌ´Ù.		when devilcatacomb_credit_stone. take  begin			local setting = devilcatacomb_zone.setting()					if item.vnum == setting.rag then 				if not party.is_party() then					say_title("Statue of Kud:")					say("")					say("You need a strong party to adventure into the")					say("Devil´s Catacomb.")					say("")					return				elseif party.is_in_dungeon() then					say_title("Statue of Kud:")					say("")					say("Your Party is already in a dungeon.")					say("")					return				end				item.remove()				say_title("Statue of Kud:")				say("")				say("The entrance has been unlocked.")				say("Pass it quickly!!")				say("")				wait()				say_title("Statue of Kud:")				say("")				say("Here is where the real adventure starts.")				say("")				say("From now on you will only have one hour")				say("to explore the Devil's Catacomb.")				say("")				wait()				d.new_jump_party (setting.map_idx, setting.floor2_entry.x + setting.base.x  , setting.floor2_entry.y + setting.base.y )				d.setqf2("devilcatacomb_zone","level", 2)				d.setf ("level",2)				--d.regen_file (setting.mob_regen_file_path.."dc_2f_regen.txt")				d.regen_file(get_locale_base_path().."/map/metin2_map_dd/base2_regen.txt")				--d.regen_file(get_locale_base_path().."/map/metin2_map_dd/base2_npc.txt")								-- d.spawn_mob (setting.floor2_merchant_npc, setting.floor2_merchant_npc_pos[1], setting.floor2_merchant_npc_pos[2])				d.spawn_mob (setting.floor2_stone, setting.floor2_stone_pos[1], setting.floor2_stone_pos[2])								devilcatacomb_zone.spawn_doors ()				server_timer('devilcatacomb_45m_left_timer',60 * 15, d.get_map_index())				d.setf("enter_time", get_global_time())			end			end			when devilcatacomb_45m_left_timer.server_timer begin			if d.select(get_server_timer_arg()) then				d.notice ("You have 45 minutes left.")				server_timer('devilcatacomb_30m_left_timer', 60 * 15, get_server_timer_arg())			end		end		when devilcatacomb_30m_left_timer.server_timer begin			if d.select(get_server_timer_arg()) then				d.notice ("You have 30 minutes left.")				server_timer('devilcatacomb_15m_left_timer', 60 * 15, get_server_timer_arg())			end		end			when devilcatacomb_15m_left_timer.server_timer begin			if d.select(get_server_timer_arg()) then				d.notice ("You have 15 minutes left.")				server_timer('devilcatacomb_5m_left_timer', 60 * 10, get_server_timer_arg())			end		end		when devilcatacomb_5m_left_timer.server_timer begin			if d.select(get_server_timer_arg()) then				d.notice ("You have 5 minutes left.")				server_timer('devilcatacomb_1m_left_timer', 60 * 4, get_server_timer_arg())			end		end				when devilcatacomb_1m_left_timer.server_timer begin			if d.select(get_server_timer_arg()) then				d.notice ("You have 1 minute left.")				server_timer ("devilcatacomb_0m_left_timer", 60 * 1, get_server_timer_arg())			end		end				when devilcatacomb_0m_left_timer.server_timer begin			if d.select(get_server_timer_arg()) then				d.notice("Your time is up. You failed to release the Catacombs")				d.notice("from the claws of evil.")				d.set_warp_location (65, 5914, 992)				server_timer('devilcatacomb_exit_timer', 7, get_server_timer_arg())			end		end		function is_dc2_doors_clear ()		local setting = devilcatacomb_zone.setting()		local clear = true		for i = 1, 4 do			local set_clear = true			local mob_set = setting.dc2_door_set1[i]			local set_size = setting.dc2_door_set_size[i]			for j = 1, set_size do				set_clear = set_clear and d.is_unique_dead (i.."_1_"..j)			end			if not set_clear then				set_clear = true				mob_set = setting.dc2_door_set2[i]				for j = 1, set_size do					set_clear = set_clear and d.is_unique_dead (i.."_2_"..j)				end			end			clear = clear and set_clear		end		return clear	end			-- ÇöȲ¼®À» Ŭ¸¯Çϸé 3Ãþ ÁøÀÔ ¿©ºÎ¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ°í		-- ÁøÀԽà »ç½ÅÀÇÁõÇ¥¸¦ °Ë»çÇÑ´Ù.		-- »ç½ÅÀÇ ÁõÇ¥°¡ ¾ø´Ù¸é ¹ÛÀ¸·Î ¿öÇÁµÈ´Ù.		when devilcatacomb_floor2_stone.click begin			local setting = devilcatacomb_zone.setting()						if d.getf("devilcatacomb_floor2_stone_clicked") == 0 then				if not devilcatacomb_zone.is_dc2_doors_clear () and not is_test_server() then					say_title ("The Devil´s Catacomb:")					say ("You first have to kill each door.")					say ("")					wait ()					return				end				say_title("Tortoise Rock:")				say("")				say("As you observe the stone closely, you")				say("encounter an inscription.")				say("")				wait()				say_title("The Devil´s Catacomb:")				say("")				say("Only the one who possesses the shrunken head")				say("may enter once the seal of three doors has")				say("been broken.")				say("")				say_reward("If you do not possess this relic, you will")				say_reward("be warped out from the Devil's Catacomb.")				say("")				wait()				local s = select("Yes, let me enter.", "I don't have a Relic.")				if s == 1 then					if d.getf("devilcatacomb_floor2_stone_clicked") == 0 then						d.setf("devilcatacomb_floor2_stone_clicked", 1)						d.setqf2("devilcatacomb_zone","last_exit_time", get_global_time())						d.set_item_group ("reapers_credit", 4, setting.reapers_credit4, 1, setting.reapers_credit3, 1, setting.reapers_credit2, 1, setting.reapers_credit1, 1)						d.say_diff_by_item_group ("reapers_credit", "The Devil´s Catacomb:[ENTER][ENTER]You possess the shrunken head and you will now[ENTER]enter Level 3.[ENTER][ENTER]", "The Devil´s Catacomb:[ENTER][ENTER]You do not possess the shrunken head.[ENTER]You will now be warped out from[ENTER]the Devil's Catacomb..[ENTER][ENTER]")						timer ("devilcatacomb_floor3_enter_timer", 7)					end				end			else				say_title("The Devil´s Catacomb:")				say ("")				say ("Please wait.")				say ("")			end		end				when devilcatacomb_floor3_enter_timer.timer begin			local setting = devilcatacomb_zone.setting()			d.set_warp_location (65, 5914, 992)			d.exit_all_by_item_group ("reapers_credit")			d.delete_item_in_item_group_from_all ("reapers_credit")			d.purge ()			d.jump_all (setting.floor3_entry.x + setting.base.x , setting.floor3_entry.y + setting.base.y)			d.setf("level",3)			d.setqf2("devilcatacomb_zone","level", 3)			--d.regen_file (setting.mob_regen_file_path.."dc_3f_regen.txt")			d.regen_file(get_locale_base_path().."/map/metin2_map_dd/base3_regen.txt")						timer("warp_timer",3)						local position = setting.floor3_stone_pos					local n = number(1,7)			for i = 1, 7 do				if (i != n)				then					d.set_unique("fake"..i, d.spawn_mob( setting.floor3_stone, position[i][1], position[i][2]))				end			end					local vid = d.spawn_mob( setting.floor3_stone, position[n][1], position[n][2])			d.set_unique ("real",vid)			if (is_test_server()) then				-- real stone pos				chat (position[n][1],position[n][2])			end			end		when devilcatacomb3_stone.kill begin			local setting = devilcatacomb_zone.setting()			-- µ¹ÀÌ Æı«µÇ¸é ÁøÂ¥°¡ Á×¾ú´ÂÁö È®ÀÎÇغ»´Ù.			-- ÁøÂ¥°¡ Á×¾úÀ¸¸é 4ÃþÀ¸·Î À̵¿ÇÑ´Ù.			if d.is_unique_dead("real") then				d.notice ("You have destroyed the correct metin stone. You will now enter Level 4.")								d.setf ("level",4)				d.setqf2("devilcatacomb_zone","level", 4)				timer ("devilcatacomb_floor4_enter_timer", 3)			else				d.notice ("This was a false metin stone. Find the correct one, quick!")			end		end		when devilcatacomb_floor4_enter_timer.timer begin			local setting = devilcatacomb_zone.setting()			local i = number (1, 5)			timer("warp_timer",3)			d.purge ()			d.jump_all (setting.floor4_entry.x + setting.base.x , setting.floor4_entry.y + setting.base.y)			--d.regen_file (setting.mob_regen_file_path.."dc_4f_regen.txt")			--d.regen_file (setting.mob_regen_file_path..setting.floor4_regen_file[i])			d.regen_file(get_locale_base_path().."/map/metin2_map_dd/base4_regen.txt")			d.spawn_goto_mob(70, 673, 94, 847)			d.spawn_goto_mob(91, 948, 347, 564)			d.spawn_goto_mob(401, 558, 272, 829)			d.spawn_goto_mob(274, 713, 141, 807)			d.spawn_goto_mob(68, 815, 313, 868)			d.spawn_goto_mob(431, 935, 355, 840)			d.spawn_goto_mob(430, 842, 499, 787)						if (is_test_server()) then				d.notice (setting.floor4_regen_file[i])			end			d.spawn_mob (setting.floor4_npc, setting.floor4_npc_pos[1], setting.floor4_npc_pos[2])		end		-- devilcatacomb_floor4_stone´Â Ŭ¸¯ ½Ã 4Ãþ¿¡¼­ 5ÃþÀ¸·Î À̵¿½ÃÅ°´Â npcÀÌ´Ù.		when devilcatacomb_floor4_stone.click begin			local setting = devilcatacomb_zone.setting()			local n = number (1,5)			say_title("The Devil´s Catacomb:")			say("")			say("YES, found the way out! Let´s go down to the 5th")			say("level!")			wait()			if (is_test_server()) then				-- devil_king pos				chat (setting.devil_king_pos[n][1], setting.devil_king_pos[n][2])			end			d.purge ()			d.jump_all (setting.floor5_entry.x + setting.base.x, setting.floor5_entry.y + setting.base.y )			d.setf ("level",5)			d.setqf2("devilcatacomb_zone","level", 5)			timer("warp_timer",3)			--d.regen_file (setting.mob_regen_file_path.."dc_5f_regen.txt")			d.regen_file(get_locale_base_path().."/map/metin2_map_dd/base5_regen.txt")			d.spawn_mob (setting.devil_king, setting.devil_king_pos[n][1], setting.devil_king_pos[n][2])			d.spawn_mob (setting.floor5_stone, setting.floor5_stone_pos[1], setting.floor5_stone_pos[2])		end				-- ¾Æ±Í¿Õ(2591)ÀÌ Á×À¸¸é ºÀÀÎÇØü¼® µå¶ø		when devilcatacomb_devil_king.kill begin			local setting = devilcatacomb_zone.setting()			game.drop_item (setting.unlock_stone, 1)		end		-- »ç½Å±ÝÁ¦ºñ(30102)¿¡ ±ÝÁ¦ÇØü¼®ºÀÀ» µå·¡±×ÇÏ¸é ¸ðµç ¸ó½ºÅ͸¦ Á×ÀÌ°í		-- 6ÃþÀ¸·Î À̵¿Çϴ ŸÀ̸Ӹ¦ µ¿ÀÛ½ÃŲ´Ù.		when devilcatacomb_floor5_stone.take begin			local setting = devilcatacomb_zone.setting()			if item.vnum == setting.unlock_stone then				item.remove ()				d.notice("From the dephts of the Devil's Catacomb comes a furious brawl.")				d.notice("The Grim Reaper has awakened!")				-- 6ÃþÀ¸·Î À̵¿				d.clear_regen()				d.purge()				timer("devilcatacomb_floor6_timer",2)			end		end		when devilcatacomb_floor6_timer.timer begin			local setting = devilcatacomb_zone.setting()			d.setf("level",6)			d.setqf2("devilcatacomb_zone","level", 6)			d.jump_all (setting.floor6_entry.x + setting.base.x, setting.floor6_entry.y + setting.base.y )			--d.regen_file (setting.mob_regen_file_path.."dc_6f_regen.txt")			d.regen_file(get_locale_base_path().."/map/metin2_map_dd/base6_regen.txt")			d.spawn_mob (setting.devil_great_king, setting.devil_great_king_pos[1], setting.devil_great_king_pos[2])			timer("warp_timer",3)		end				-- ¾Æ°É(2597)ÀÌ Á×À¸¸é, 6ÃþÀÇ Å¸À̸Ó1ÀÌ µ¿ÀÛÇÑ´Ù.		when devilcatacomb_devil_great_king.kill begin			server_timer ("floor6_eli_check_timer_1", 5,d.get_map_index())		end		-- 6ÃþÀÇ Å¸À̸Ó1Àº ´øÀüÀÇ ¸ðµç ¸ó½ºÅÍ ¼ýÀÚ¸¦ º¸°í,		-- 0À̸é 7ÃþÀ¸·Î ¿öÇÁÇϴ ŸÀ̸Ӹ¦ µ¿ÀÛÇÑ´Ù.		-- ¹Ù·Î 7ÃþÀ¸·Î °¡Áö ¾Ê´Â ÀÌÀ¯´Â, À¯Àú¿¡°Ô ÁغñÇÒ ½Ã°£À» ÁÖ±â À§Çؼ­ÀÌ´Ù.		-- 1À̸é ŸÀ̸Ó2¸¦ µ¿ÀÛ½ÃŲ´Ù.		-- ŸÀ̸Ó1À» recursiveÇÏ°Ô µ¿ÀÛ½ÃÅ°Áö ¾ÊÀº °ÍÀº,		-- ±×·² °æ¿ì resetÇÑ Å¸À̸Ó1ÀÌ µ¿ÀÛÇÏÁö ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù.		when floor6_eli_check_timer_1.server_timer begin			if d.select(get_server_timer_arg()) then				if d.count_monster() == 0 then					say_in_map(get_server_timer_arg(), color256(255, 230, 186).."The Devil´s Catacomb:[ENTER]"..color256(196, 196, 196).."You have gained victory over Charon![ENTER]You will now enter the last Level[ENTER]of the Devil's Catacomb![ENTER]")					server_timer ("devilcatacomb_floor7_timer", 3, get_server_timer_arg())				else					server_timer ("floor6_eli_check_timer_2", 5, get_server_timer_arg())				end			end		end		when floor6_eli_check_timer_2.server_timer begin			if d.select(get_server_timer_arg()) then				if d.count_monster() == 0 then					say_in_map(get_server_timer_arg(), color256(255, 230, 186).."The Devil´s Catacomb:[ENTER]"..color256(196, 196, 196).."You have gained victory over Charon![ENTER]You will now enter the last Level[ENTER]of the Devil's Catacomb![ENTER]")					server_timer("devilcatacomb_floor7_timer", 3, get_server_timer_arg())				else					server_timer ("floor6_eli_check_timer_1", 5, get_server_timer_arg())				end			end		end				when devilcatacomb_floor7_timer.server_timer begin			if d.select(get_server_timer_arg()) then				local setting = devilcatacomb_zone.setting()				d.setf("level",7)				d.setqf2("devilcatacomb_zone","level", 7)				d.jump_all (setting.floor7_entry.x + setting.base.x, setting.floor7_entry.y + setting.base.y )				--d.regen_file (setting.mob_regen_file_path.."dc_7f_regen.txt")				d.regen_file(get_locale_base_path().."/map/metin2_map_dd/base7_regen.txt")				d.spawn_mob (setting.devil_emperor, setting.devil_emperor_pos[1], setting.devil_emperor_pos[2])				server_timer ("devilcatacomb_floor7_say_timer", 2, get_server_timer_arg())			end			end		when devilcatacomb_floor7_say_timer.server_timer begin			if d.select(get_server_timer_arg()) then				local t = 3600 -(get_global_time() - d.getf("enter_time"))				local t_r = math.mod (t, 60)				local t_m = (t - t_r) / 60				d.notice("Kill Lord Gahnasel!")				d.notice ("You have ".. t_m.." minutes left.")				d.set_warp_location (0, 0, 0)			end		end		-- 6Ãþ°ú ¸¶Âù°¡Áö·Î »ç¸¶ÈÖ(2598)ÀÌ Á×À¸¸é		-- 7ÃþÀÇ Å¸À̸Ӱ¡ ÀÛµ¿ÇÑ´Ù.		when 2598.kill begin			notice_all(pc.get_name().."'s party has defeated Lord Gahnasel!")			server_timer ("floor7_eli_check_timer_1", 5, d.get_map_index())		end				-- 7ÃþÀÇ Å¸À̸Ӵ 6Ãþ ŸÀÌ¸Ó¿Í ºñ½ÁÇϸç,		-- ¸ó½ºÅÍ ¼ýÀÚ°¡ 0À̸é exit ŸÀ̸Ӹ¦ ¹ß»ý½ÃŲ´Ù.		-- ¹Ù·Î exitÇÏÁö ¾Ê´Â ÀÌÀ¯´Â, À¯Àúµé¿¡°Ô ÁغñÇÒ ½Ã°£À» ÁÖ±â À§Çؼ­ÀÌ´Ù.		when floor7_eli_check_timer_1.server_timer begin			if d.select(get_server_timer_arg()) then				if d.count_monster() == 0 then					d.set_warp_location (65, 5914, 992)					d.setqf2("devilcatacomb_zone","done", 1)					say_in_map(get_server_timer_arg(), color256(255, 230, 186).."The Devil´s Catacomb:[ENTER]"..color256(196, 196, 196).."Lord Gahnasel has been killed. Finally[ENTER]peace can return to the Catacombs.[ENTER]You will now be warped back out.[ENTER]")					clear_server_timer ("devilcatacomb_0m_left_timer", get_server_timer_arg())					server_timer("devilcatacomb_exit_timer", 60, get_server_timer_arg())				else					server_timer ("floor7_eli_check_timer_2", 5, get_server_timer_arg())				end			end		end		when floor7_eli_check_timer_2.server_timer begin			if d.select(get_server_timer_arg()) then				if d.count_monster() == 0 then					d.set_warp_location (65, 5914, 992)					d.setqf2("devilcatacomb_zone","done", 1)					say_in_map(get_server_timer_arg(), color256(255, 230, 186).."The Devil´s Catacomb:[ENTER]"..color256(196, 196, 196).."Lord Gahnasel has been killed. Finally[ENTER]peace can return to the Catacombs.[ENTER]You will now be warped back out.[ENTER]")						clear_server_timer ("devilcatacomb_0m_left_timer", get_server_timer_arg())					server_timer("devilcatacomb_exit_timer", 30, get_server_timer_arg())				else					server_timer ("floor7_eli_check_timer_1", 5, get_server_timer_arg())				end			end		end		when devilcatacomb_exit_timer.server_timer begin			if d.select(get_server_timer_arg()) then				d.setqf2("devilcatacomb_zone","level", 0)				d.setqf2("devilcatacomb_zone","last_exit_time", get_global_time())				clear_server_timer("devilcatacomb_5m_left_timer", get_server_timer_arg())				clear_server_timer("devilcatacomb_1m_left_timer", get_server_timer_arg())				clear_server_timer("devilcatacomb_0m_left_timer", get_server_timer_arg())				clear_server_timer("floor6_eli_check_timer_1", get_server_timer_arg())				clear_server_timer("floor6_eli_check_timer_2", get_server_timer_arg())				clear_server_timer("floor7_eli_check_timer_1", get_server_timer_arg())				clear_server_timer("floor7_eli_check_timer_2", get_server_timer_arg())				clear_server_timer("devilcatacomb_floor7_say_timer", get_server_timer_arg())				clear_server_timer("devilcatacomb_floor7_timer", 3, get_server_timer_arg())				d.clear_regen()				d.exit_all()			end		end	end  --stateend   --quest
  2. Esto no es la guerra de imperios es un mapa de eventos y la quest la hice yo. Aqui tienes el original:

    quest sg_eventarena begin	state start begin		when login with pc.get_map_index() == 103 begin			if game.get_event_flag("sg_eventarena") == 0 and pc.is_gm() == false then				warp_to_village()			end		end                when 11001.chat."Mount Baekdu"                or 11003.chat."Mount Baekdu"                or 11005.chat."Mount Baekdu" with game.get_event_flag("sg_eventarena") > 0 begin                	say_title("Archer Guardian:")                	say("")                	say("The people are gathering at the pass in Mount Baekdu.")                	say("Let me see if you are prepared to endure the journey there.")                	say("")                	wait()                	if game.get_event_flag("sg_eventarena_open"..pc.get_empire()) == 0 then				say_title("Archer Guardian:")				say("")				----"111111222222333333444444555555666666777777888888999999000000"                		say("Sorry, your empire can't access the mountain at the moment.")                		say("")                		return                	end                	if game.get_event_flag("sg_eventarena_minlv") > pc.level then						say_title("Archer Guardian:")						say("")                		say("Sorry, you need level "..game.get_event_flag("sg_eventarena_minlv").." to join.")                		say("")                		return                	end                	if game.get_event_flag("sg_eventarena_maxlv") < pc.level then						say_title("Archer Guardian:")						say("")                		say("Your level is too high. A maximum of "..game.get_event_flag("sg_eventarena_maxlv").." is allowed.")                		say("")                		return                	end                	say_title("Archer Guardian:")                	say("")                	say("You are allowed to join.")                	say("Off to the mountains we go...")                	say("")                	wait()                	if pc.get_empire() == 1 then                		pc.warp(46942, 45372)                	elseif pc.get_empire() == 2 then                		pc.warp(20754, 55748)                	else                		                		pc.warp(45253, 83437)                	end                end                when 11001.chat."GM: Event Arena"                or 11003.chat."GM: Event Arena"                 or 11005.chat."GM: Event Arena" with pc.is_gm() begin                	say_title("Event Arena Manager")                	say("")	               	if game.get_event_flag("sg_eventarena") > 0 then                		msg = "Arena is open."                		statuschange = "Close"                		new = 0                	else                		msg = "Arena is closed."                		statuschange = "Open"                		new = 1                	end                	say(msg.." Current settings:")                	say("Minimum level: "..game.get_event_flag("sg_eventarena_minlv").." Maximum level: "..game.get_event_flag("sg_eventarena_maxlv").." ")                	say("")                	say("")                	local s = select("Edit Level requirement", "Edit allowed empires", statuschange.." Event Arena", "Exit")                	if s == 1 then                		say("Enter minimum level:")                		say("")                		local min = input()            			say("Enter maximum level")            			say("")            			local max = input()            			if min > max then            				say("Maximum level must be higher than minimum!")            				say("")            				return            			end				game.set_event_flag("sg_eventarena_minlv",min)				game.set_event_flag("sg_eventarena_maxlv",max)				say("Level requirement has been set.")			elseif s == 2 then				if game.get_event_flag("sg_eventarena_open1") > 0 then					statuschange1 = "Disallow"					new1 = 0				else					statuschange1 = "Allow"					new1 = 1				end								if game.get_event_flag("sg_eventarena_open2") > 0 then					statuschange2 = "Disallow"					new2 = 0				else					statuschange2 = "Allow"					new2 = 1				end								if game.get_event_flag("sg_eventarena_open3") > 0 then					statuschange3 = "Disallow"					new3 = 0				else					statuschange3 = "Allow"					new3 = 1				end				s=select(statuschange1.." Pandemonia Kingdom", statuschange2.." Asmodia Kingdom", statuschange3.." Elgoria Kingdom", "Cancel")				if s == 1 then					game.set_event_flag("sg_eventarena_open1",new1)					say("Pandemonia Kingdom "..statuschange1.."ed")					say("")				elseif s ==2 then					game.set_event_flag("sg_eventarena_open2",new2)					say("Asmodia Kingdom "..statuschange2.."ed")					say("")				elseif s== 3 then					game.set_event_flag("sg_eventarena_open3",new3)					say("Elgoria Kingdom "..statuschange3.."ed")					say("")				end                	elseif s == 3 then                		if new == 0 then                			notice_all("Mountain Pass is closing now.")                			warp_all_to_village(103, 10)                		else                		        notice_all("Mountain Pass is open! The Archer Guardian")                			notice_all("in town is recruiting the bravest soldiers.")                		end                		game.set_event_flag("sg_eventarena",new)                		say("Event arena is now "..statuschange..".")                		say("")                	end                end     endend                	                	
  3. Buenas,

     

    Como se que hay muchos que aún usan el game 2089 (también conocido como files 2011)  os traigo este cliente oficial. Ningún pack está encriptado.

     

    No trae nada que no hubiera en el 2011 os decir no hay atuendos, pets, ni nada de eso.

     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

     

    Bugs conocidos:

     

    Es necesario cambiar en root uiTooltip.py APPLY_DEF_GRADE por APPLY_DEF_GRADE_BONUS

  4. Hola a todos,

     

    Hoy os voy a explicar cómo instalar y configurar el firewall pf que viene integrado desde hace mucho tiempo en FreeBSD. Por tanto este tutorial debería servir en cualquier versión de FreeBSD que utilicéis.

     

    Además de bloquear los puertos que no queramos que estén abiertos al público, configuraremos un limitador de frecuencia que bloqueará las IP que hagan demasiadas conexiones o demasiado rápidas, lo cual es muy útil para protegerse de ciertos ataques DDoS.

     

    En primer lugar crearemos un fichero llamado /etc/pf.conf con el Easy Editor:

     

    ee /etc/pf.conf

     

    Nota: Esta configuración asume que tenemos página web, base de datos y juego, en la misma máquina. Si tenéis la web en otro sitio, cerrad los puertos 80 y 443 borrándolos de service_ports y añadir la IP de vuestro servidor web en /var/db/trusted_hosts. Para otras configuraciones preguntad en el hilo.

     

    Copiamos y pegamos lo que viene a continuación en el putty:

    ext_if="igb1"
    service_ports="{ 22, 80, 443 }"
    game_ports="{ 11000, 13000, 13001, 13002, 13010, 13011, 13012, 13020, 13021, 13022, 13099 }"
    table <abusive_hosts> persist
    table <trusted_hosts> persist file "/var/db/trusted_hosts"
    set block-policy return
    set loginterface $ext_if
    set skip on lo
    scrub on $ext_if reassemble tcp no-df set-tos lowdelay random-id
    antispoof quick for { lo0 $ext_if }
    block in
    pass out all keep state
    pass out on $ext_if all modulate state
    pass in quick from <trusted_hosts>
    block in quick from <abusive_hosts>
    pass in on $ext_if inet proto icmp all icmp-type echoreq keep state
    pass in on $ext_if proto tcp to any port $game_ports flags S/SA synproxy state /
            (max-src-conn 30, max-src-conn-rate 20/5, overload <abusive_hosts> flush)
    pass in on $ext_if proto tcp to any port $service_ports flags S/SA keep state / 
            (max-src-conn 30, max-src-conn-rate 20/5, overload <abusive_hosts> flush)

    Las tres primeras líneas debéis cambiarlas de esta forma:

     

    ext_if: nombre del interface público, lo podemos averiguar con el comando ifconfig:

     

    En este caso mi interface público, el que tiene asignado mi IP pública de internet, es igb1.

     

    service_ports: puertos usados para ssh, web, etc. En el ejemplo he puesto 22 (SSH), 80 (HTTP), 443 (HTTPS)

     

    game_ports: todos los puertos del metin, separados por coma: auth y los game cores (no pongáis el de db que suele ser 15000 por defecto ya que db no debe estar accesible a internet sólo a los game cores)

     

    Si tienes tu página web en otro servidor o quieres por cualquier otro motivo que una o más direcciones IP tengan acceso libre a tu servidor sin pasar por el firewall debes ponerlas, una por línea, en este fichero que crearemos con:

     

    ee /var/db/trusted_hosts

     

    Terminada la configuración haremos lo siguiente:

     

    kldload pf

    pfctl -e

     

    A partir de este momento estará activado nuestro firewall, aunque para que sea plenamente funcional debemos añadir una línea a /etc/rc.conf que ponga:

     

    pf_enable="YES"

     

    Y reiniciar FreeBSD. Ya estamos protegidos contra algunos tipos de ataque DDoS bastante comunes.

     

    Manejo del firewall

     

    Para ver las IP baneadas:

     

    pfctl -t abusive_hosts -T show

     

    Para borrar la tabla de bans entera:

     

    pfctl -t abusive_hosts -T flush

     

    Para añadir una IP a la tabla de bans:

     

    pfctl -t abusive_hosts -T add 8.8.8.8

     

    Para borrar una IP de la tabla de bans

     

    pfctl -t abusive_hosts -T del 8.8.8.8

     

    Para deshabilitar temporalmente el firewall:

     

    pfctl -d

     

    Si por cualquier motivo queremos desinstalar el firewall será necesario borrar la línea que escribimos en /etc/rc.conf y reiniciar la máquina. Tened cuidado también ya que os podéis bloquear a vosotros mismos sin querer, en ese caso la única solución es cambiar vuestra IP o pedirle a otro administrador que nos desbloquee con el comando correspondiente.

     

    Cualquier duda os responderé en este hilo cuando pueda :)

  5. Buenas a todos,

     

    Hoy os traigo el concept art original creado para Metin2, para quien no lo sepa el concept art son los bocetos a partir de los cuales los modeladores crean los escenarios, personajes y armas.

     

    Estos bocetos fueron creados hace ya más de diez años por un diseñador coreano que firma con el seudónimo de Latte.

     

    Seguramente los habéis visto muchas veces pero aquí estan al completo y a gran tamaño perfecto para quien los quiera usar en sus propios diseños :)

     

    Además incluyo los wallpapers originales. Una muestra:

     

     

    Imagen enviada

     

     

    YMIR - Metin2 Concept Art.zip 14.6 MB
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

     

×
×
  • Crear nuevo...