Jump to content

Shogun

Miembro
  • Contador contenido

    378
  • Ingreso

  • Última visita

  • Días ganados

    51

Todo lo publicado 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. Te aconsejo que te leas algun tutorial básico de MySQL.
  3. Trabájatelo un poco mas la próxima vez, esto no merece el nombre de release. Tema cerrado.
  4. Lo que está mal es que cierra la db antes de los games cuando debe hacerse en este orden: auth games db
  5. 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
  6. Shogun

    MysqlTuner

    hm? cd /root fetch http://mysqltuner.pl chmod 755 mysqltuner.pl ./mysqltuner.pl
  7. pon en el config de cada core SPEEDHACK_LIMIT_COUNT: 300 SPEEDHACK_LIMIT_BONUS: 150
  8. no tengo ni idea de python
  9. No se que es lo que dices que está mal, si te refieres a que hay un espacio alrededor eso es apropósito ya que sino el UI quedaría debajo del mapa.
  10. Quizás haría falta algún moderador desde el día 1 del mes se ha triplicado la actividad del foro y estamos algo sobrepasados
  11. Ya lo he probado y se come la mayoría de los ataques Layer 7 Lo ideal es tener las dos cosas no pienses que por estar detrás de un sistema de mitigación no te va a pasar nada porque te puedes llevar sorpresas desagradables.
  12. Se me olvidó ese detalle gracias. Este pf es para alguien que tenga la web en el mismo servidor, a ver si mañana añado el tema de las IP con libre acceso.
  13. Ni el AntiDDoS de OVH detiene todos los ataques ni el firewall está solo para parar DDoS.
  14. La diferencia es que no tiene 50.000 bugs absurdos por lo que a alguien le puede interesar como base para su propio cliente.
  15. ¿sabes lo que es un firewall y lo que es un sistema de mitigación o un ataque Layer 7?
  16. 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. https://mega.co.nz/#!TtB2EaCa!Oo3_sS4KQdo6vfAhqVqbvP6MLGUCmSfuKjGenWx_cqA Bugs conocidos: Es necesario cambiar en root uiTooltip.py APPLY_DEF_GRADE por APPLY_DEF_GRADE_BONUS
  17. 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
  18. 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: YMIR - Metin2 Concept Art.zip 14.6 MB https://mega.co.nz/#!upIyHbQa!KVDihvZvlOSO9riAbZkVX_O1MYJzcSsIGL--35Etfg
  19. fijate que debes tener dos carpetas en el cliente upload y mark
  20. Es un game 40k mejorado, trae todo lo que tiene el oficial ahora mismo.
  21. Crea una carpeta "mark" en el servidor en game99 y mete el tga y crea un fichero vacio que se llame mark_index (touch mark_index) Luego reinicia el server y debería funcionar
  22. Te paso el mio: zone/dungeon/haven_dungeon https://mega.co.nz/#!X0p0ACgJ!1kDwkM7-leRZaP9Ybf5hQuvXWETp3LMa3XZ0WKmRgmo metin2_map_skipia cliente (1, 2 y boss) https://mega.co.nz/#!70I1SDCA!XnDs8pmwDQEusTqXR839c4KgZpko_B0VugIUr8JLP1g
  23. Te faltan los ficheros mdatr en zone/haven_dungeon... o eso o server_attr no recuerdo... me paso hace muchos años lo mismo
  24. Suelo tener muchas cosas abiertas y en el modo clásico caben mas cosas en la barra de tareas.
×
×
  • Crear nuevo...