Merhaba arkaşlar mehmet kardesimin paylastıgı filesde devils catacomb sorunu var questle alakalı bir sorun , onu unutmus heralde quest'i veriyorum suanki devilscatacomb questinin içine bu kodları girip , sh make.sh veya ./qc çekin 
Kod:
quest devilscatacomb 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,86 2}}, ["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 = devilscatacomb.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("3. kata ulaşmak için bu kapıların mühürlerini sök!") say("60 dakikan daha var.") 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("devilscatacomb","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) say("Ruh Kristali Anahtarı'nı ele geçirmek için ") say("yaratıkları yok et. Bu ") say("sana sonraki katın kapısını açar. ") 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 = devilscatacomb.setting() if idx == setting.map_idx or idx >= (setting.map_idx * 10000) and idx < ((setting.map_idx + 1) * 10000) then pc.setf("devilscatacomb","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] = "Doğru Metin Taşı'nı bul ve onu yok et!", [4] = "5. aşamaya ulaşmak için labirentten çıkış yolunu bul!", [5] = "Tartarus'u yen ve Surat Totemi'ni al.", [6] = "Kharoon ve cellatlarını yen!", } 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 ( "" ..t_m.." dakikan daha var.") d.set_warp_location (0, 0, 0) end when 20367.chat."Şeytan Katakombu'na gider" with pc.get_map_index() == 65 begin local setting = devilscatacomb.setting() if pc.get_level() < 75 then say_title("Katakomb Bekçisi:") say("75. seviyenin altında olduğun için ") say("Katakomb'a giremezsin...") --elseif pc.getf("deviltower_zone","9_done") == 0 then -- say(locale.devilcatacomb_man_say_deviltop_clear) --elseif ((get_global_time() - pc.getf("devilscatacomb","last_exit_time")) < 1800) then -- say(locale.devilcatacomb_man_say_see_you_later) else say("Şeytan Katakombu'na girmek") say("istiyor musun?") local s = select("Evet, bırak içeri gireyim!","Hayır, girmek istemiyorum.") 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."Karanlık Tapınağa dön" with pc.get_map_index() == 206 begin say_title("Katakomb Bekçisi:") say("") say("Savaşmaktan vazgeçip Karanlık Tapınağa dönmek") say("istediğine emin misin?") say("") local s = select("Evet, çok güçsüzüm.", "Hayır, savaşmaya devam edeceğim!") if s == 1 then pc.warp(591400, 99900) end end -- ¸ó½ºÅͰ¡ Á×À¸¸é ¹ß»ıÇÏ´Â À̺¥Æ®. when kill begin local setting = devilscatacomb.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 = devilscatacomb.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 30101.take begin local setting = devilscatacomb.setting() if item.vnum == setting.rag then if not party.is_party() then say("Katakombun daha alt aşamalarına geçmek için") say("güçlü bir gruba ihtiyacın var.") say("") return elseif party.is_in_dungeon() then say("Senin grubun zaten zindanda.") say("") return end item.remove() say("Mühürlü kapı açıldı. Acele et,") say("aşağı iniyoruz.") wait() say("Asıl macera şimdi başlıyor. Şeytan ") say("Katakombu'nu keşfetmek için sadece") say("bir saatin var.") wait() d.new_jump_party (setting.map_idx, setting.floor2_entry.x + setting.base.x , setting.floor2_entry.y + setting.base.y ) d.setqf2("devilscatacomb","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]) devilscatacomb.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 ("45 dakikan daha var.") 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 ("30 dakikan daha var.") 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 ("15 dakikan daha var.") 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 ("5 dakikan daha var.") 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 ("1 dakikan daha var.") 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("Süre bitti. Kendi güvenliğin için Devil's Catacomb'dan dışarı ışınlanacaksın.") 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 = devilscatacomb.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 30103.click begin local setting = devilscatacomb.setting() if d.getf("devilcatacomb_floor2_stone_clicked") == 0 then --if not devilscatacomb.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("Kaplumbağa Kayalığı'na yaklaştıkça ") say("bazı gravürler dikkat çekiyor... ") wait() say("...Sadece Küçülen Kafa'ya sahip olanlar") say("bir sonraki kademeye geçebilirler. ") say("Küçülen Kafa'ya sahip değilsen yer yüzüne") say("ışınlanacaksın.") wait() local s = select("Evet, geçeceğim!", "Hayır, geçmek istemiyorum.") if s == 1 then if d.getf("devilcatacomb_floor2_stone_clicked") == 0 then d.setf("devilcatacomb_floor2_stone_clicked", 1) d.setqf2("devilscatacomb","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", "Küçülen Kafa'ya sahipsin ve artık 3. kata[ENTER]ışınlanabilirsin.[ENTER][ENTER]", "Küçülen Kafa'ya sahip değilsin.[ENTER]Şimdi Şeytan Katakombunun dışına[ENTER]ışınlanacaksın.[ENTER][ENTER]") timer ("devilcatacomb_floor3_enter_timer", 7) end end else say_title("Devil´s Catacomb:") say ("") say ("Lütfen bekle.") say ("") end end when devilcatacomb_floor3_enter_timer.timer begin local setting = devilscatacomb.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("devilscatacomb","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 8038.kill begin local setting = devilscatacomb.setting() -- µ¹ÀÌ ÆÄ±«µÇ¸é ÁøÂ¥°¡ Á×¾ú´ÂÁö È®ÀÎÇØº»´Ù. -- ÁøÂ¥°¡ Á×¾úÀ¸¸é 4ÃşÀ¸·Î À̵¿ÇÑ´Ù. if d.is_unique_dead("real") then d.notice ("Gerçek Metin Taşı'nı yok ettin! Sonraki kata geçiyorsun.") d.setf ("level",4) d.setqf2("devilscatacomb","level", 4) timer ("devilcatacomb_floor4_enter_timer", 3) else d.notice ("Yanlış Metin Taşı'nı yok ettin. Doğrusunu bul!") end end when devilcatacomb_floor4_enter_timer.timer begin local setting = devilscatacomb.setting() local i = number (1, 4) 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,844) if i == 1 then d.spawn_goto_mob(94,839 , 70,673) d.spawn_goto_mob(141,865 , 369,893) d.spawn_goto_mob(364,893 , 136,865) d.spawn_goto_mob(431,935 , 194,867) d.spawn_goto_mob(194,862 , 426,935) d.spawn_goto_mob(243,853 , 277,637) d.spawn_goto_mob(282,637 , 243,858) d.spawn_goto_mob(181,667 , 323,779) d.spawn_goto_mob(328,779 , 499,811) d.spawn_goto_mob(131,668, 345,560) d.spawn_goto_mob(345,55 , 131,663) d.spawn_goto_mob(180,566 , 401,563) d.spawn_goto_mob(401,558 , 185,566) d.spawn_goto_mob(296,568 , 67,810) d.spawn_goto_mob(67,815 , 291,568) d.spawn_goto_mob(140,822 , 356,717) d.spawn_goto_mob(351,717 , 140,817) d.spawn_goto_mob(189,711 , 414,712) d.spawn_goto_mob(419,712 , 189,716) d.spawn_goto_mob(274,712 , 369,776) d.spawn_goto_mob(364,776 , 274,717) d.spawn_goto_mob(224,779 , 366,814) d.spawn_goto_mob(366,809 , 229,779) d.spawn_goto_mob(274,842 , 352,839) d.spawn_goto_mob(347,839 , 274,837) d.spawn_goto_mob(429,841 , 70,577) d.spawn_goto_mob(55,864 , 55,920) d.spawn_goto_mob(50,920 , 60,864) d.spawn_goto_mob(144,919 , 90,943) d.spawn_goto_mob(90,948 , 139,919) d.spawn_goto_mob(312,852 , 406,876) d.spawn_goto_mob(406,871 , 312,857) elseif i == 2 then d.spawn_goto_mob(70,673 , 312,857) d.spawn_goto_mob(312,852 , 70,668) d.spawn_goto_mob(431,935 , 90,943) d.spawn_goto_mob(90,948 , 426,935) d.spawn_goto_mob(144,919 , 424,841) d.spawn_goto_mob(429,841 , 291,568) d.spawn_goto_mob(296,568 , 70,577) d.spawn_goto_mob(181,667 , 499,811) d.spawn_goto_mob(131,668, 345,560) d.spawn_goto_mob(345,55 , 131,663) d.spawn_goto_mob(180,566 , 401,563) d.spawn_goto_mob(401,558 , 185,566) d.spawn_goto_mob(282,637 , 67,810) d.spawn_goto_mob(67,815 , 277,637) d.spawn_goto_mob(140,822 , 189,716) d.spawn_goto_mob(189,711 , 140,817) d.spawn_goto_mob(274,712 , 229,779) d.spawn_goto_mob(224,779 , 274,717) d.spawn_goto_mob(328,779 , 274,837) d.spawn_goto_mob(274,842 , 323,779) d.spawn_goto_mob(351,717 , 194,867) d.spawn_goto_mob(194,862 , 356,717) d.spawn_goto_mob(419,712 , 243,858) d.spawn_goto_mob(243,853 , 414,712) d.spawn_goto_mob(364,776 , 366,814) d.spawn_goto_mob(366,809 , 369,776) d.spawn_goto_mob(347,839 , 70,673) d.spawn_goto_mob(94,839 , 60,864) d.spawn_goto_mob(55,864 , 94,844) d.spawn_goto_mob(141,865 , 55,920) d.spawn_goto_mob(50,920 , 136,865) d.spawn_goto_mob(364,893 , 406,876) d.spawn_goto_mob(406,871 , 369,893) elseif i == 3 then d.spawn_goto_mob(70,673 , 312,857) d.spawn_goto_mob(312,852 , 70,668) d.spawn_goto_mob(431,935 , 274,717) d.spawn_goto_mob(274,712 , 426,935) d.spawn_goto_mob(224,779 , 140,817) d.spawn_goto_mob(140,822 , 229,779) d.spawn_goto_mob(189,711 , 94,844) d.spawn_goto_mob(94,839 , 189,716) d.spawn_goto_mob(144,919 , 424,841) d.spawn_goto_mob(429,841 , 499,811) d.spawn_goto_mob(131,668 , 185,566) d.spawn_goto_mob(180,566 , 131,663) d.spawn_goto_mob(296,568 , 277,637) d.spawn_goto_mob(282,637 , 291,568) d.spawn_goto_mob(181,667 , 345,560) d.spawn_goto_mob(345,555 , 186,667) d.spawn_goto_mob(401,558 , 67,810) d.spawn_goto_mob(67,815 , 401,563) d.spawn_goto_mob(328,779 , 274,837) d.spawn_goto_mob(274,842 , 323,779) d.spawn_goto_mob(351,717 , 369,776) d.spawn_goto_mob(364,776 , 356,717) d.spawn_goto_mob(419,712 , 366,814) d.spawn_goto_mob(366,809 , 414,712) d.spawn_goto_mob(347,839 , 70,577) d.spawn_goto_mob(55,864 , 55,920) d.spawn_goto_mob(50,920 , 60,864) d.spawn_goto_mob(141,865 , 90,943) d.spawn_goto_mob(90,948 , 136,865) d.spawn_goto_mob(194,862 , 369,893) d.spawn_goto_mob(364,893 , 194,867) d.spawn_goto_mob(243,853 , 406,876) d.spawn_goto_mob(406,871 , 243,858) elseif i == 4 then d.spawn_goto_mob(131,668 , 67,810) d.spawn_goto_mob(67,815 , 185,566) d.spawn_goto_mob(282,637 , 274,717) d.spawn_goto_mob(274,712 , 277,637) d.spawn_goto_mob(274,842 , 94,844) d.spawn_goto_mob(94,839 , 274,837) d.spawn_goto_mob(144,919 , 499,811) d.spawn_goto_mob(70,673 , 345,560) d.spawn_goto_mob(345,555 , 70,668) d.spawn_goto_mob(401,558 , 70,577) d.spawn_goto_mob(296,568 , 186,667) d.spawn_goto_mob(181,667 , 291,568) d.spawn_goto_mob(140,822 , 189,716) d.spawn_goto_mob(189,711 , 140,817) d.spawn_goto_mob(224,779 , 323,779) d.spawn_goto_mob(328,779 , 229,779) d.spawn_goto_mob(351,717 , 352,839) d.spawn_goto_mob(347,839 , 356,617) d.spawn_goto_mob(419,712 , 424,841) d.spawn_goto_mob(429,841 , 414,712) d.spawn_goto_mob(364,776 , 366,814) d.spawn_goto_mob(366,809 , 369,776) d.spawn_goto_mob(55,864 , 194,867) d.spawn_goto_mob(194,862 , 60,864) d.spawn_goto_mob(141,865 , 90,943) d.spawn_goto_mob(90,948 , 136,865) d.spawn_goto_mob(50,920 , 369,893) d.spawn_goto_mob(364,893 , 55,920) d.spawn_goto_mob(243,853 , 406,876) d.spawn_goto_mob(406,871 , 243,858) d.spawn_goto_mob(312,852 , 426,935) d.spawn_goto_mob(431,935 , 312,857) end 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 30104.click begin local setting =devilscatacomb.setting() local n = number (1,5) say("Başardın! Labirentin çıkışı burada. 5. kata in.") 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("devilscatacomb","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 2591.kill begin local value = "1709862138" local a = get_quest_state("the_war_begins") local a_ = string.format("%d", a) if a_== value then set_quest_state("the_war_begins","rewards") end local setting = devilscatacomb.setting() game.drop_item (setting.unlock_stone, 1) end -- »ç½Å±İÁ¦ºñ(30102)¿¡ ±İÁ¦ÇØÃ¼¼®ºÀÀ» µå·¡±×ÇÏ¸é ¸ğµç ¸ó½ºÅ͸¦ Á×À̰í -- 6ÃşÀ¸·Î À̵¿Çϴ ŸÀ̸Ӹ¦ µ¿ÀÛ½ÃŲ´Ù. when 30102.take with item.vnum == 30312 begin local setting = devilscatacomb.setting() item.remove () d.notice("Şeytan Katakombu'nun derinliklerinden tüyler ") d.notice("ürperten bir çığlık duyuldu. Kharoon uyandı! ") -- 6ÃşÀ¸·Î À̵¿ d.clear_regen() d.purge() timer("devilcatacomb_floor6_timer",2) end when devilcatacomb_floor6_timer.timer begin local setting = devilscatacomb.setting() d.setf("level",6) d.setqf2("devilscatacomb","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 2597.kill begin local value = "-880201385" local b = get_quest_state("prince_kharoon") local b_ = string.format("%d", b) if b_== value then set_quest_state("prince_kharoon","finito") end 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).."Kharoon'u yendin! Şimdi Şeytan Katakombu'nun en[ENTER]son katına ışınlanacaksın.") 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).."Kharoon'u yendin! Şimdi Şeytan Katakombu'nun en[ENTER]son katına ışınlanacaksın.") 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 = devilscatacomb.setting() d.setf("level",7) d.setqf2("devilscatacomb","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("Azrail'i yen!") d.notice ("".. t_m.." dakikan daha var.") 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("devilscatacomb","done", 1) say_in_map(get_server_timer_arg(),"Azrail yenildi. Şeytan Katakombu'na nihayet[ENTER]huzur hakim. Şimdi yer yüzüne ışınlanacaksın. ") 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("devilscatacomb","done", 1) say_in_map(get_server_timer_arg(),"Azrail yenildi. Şeytan Katakombu'na nihayet[ENTER]huzur hakim. Şimdi yer yüzüne ışınlanacaksın. ") 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("devilscatacomb","level", 0) d.setqf2("devilscatacomb","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 --state end --quest
Maxmi - TR Server Files v1.2.3 - Catacomb Sorunu Fix!
Metin2 Lobby olarak sunucu dosyaları üzerinde çalışan geliştiricilerin karşılaştığı yaygın sorunlardan birisi olan Catacomb hatalarına dair çözümü sizlere aktarmaktan memnuniyet duyuyoruz. Bu makalede özellikle Maxmi TR Server Files v1.2.3 sürümünde yaşanan Catacomb ile ilgili hata durumları ve bu sorunun detaylı çözüm adımları ele alınacaktır.
Catacomb Nedir?
Catacomb, Metin2 oyununda belirli haritalarda veya alanlarda meydana gelen çökme, donma ya da karakterin hareket edememesi gibi durumlara neden olabilen bir sistemsel sorundur. Özellikle quest sistemlerinde eksiklikler veya hatalar olduğunda bu sorun daha sık karşımıza çıkar.
Sorunun Kaynağı
Maxmi TR Server Files v1.2.3 sürümünde Catacomb sorununun temel kaynağı genellikle quest dosyalarındaki eksik veya hatalı komutlardır. Özellikle quest sistemlerinde timer, trigger ve state yönetimi eksik bırakıldığında, oyuncuların belli bölgelerde takılması veya sunucuda beklenmedik çökmeler yaşanabilmektedir.
Fix Uygulaması
Öncelikle server core dosyaları üzerinden quest_manager.cpp dosyasına bakmalısınız. Burada catacomb ile ilgili hataları takip edebileceğiniz loglama mekanizmaları aktif edilmelidir. Eğer loglama yapılmıyorsa, geliştirici olarak bu kısmı elle eklemelisiniz.
Quest dosyalarında begin ve end arasındaki fonksiyonların doğru çalışıp çalışmadığını kontrol edin. Özellikle quest içindeki flag ve state değişkenlerinin kontrol edildiğinden emin olun. Hatalı bir quest çalıştığında character nesnesi boş kalabilir ve bu da catacomb hatasına sebep olur.
Fix Kod Örneği:
Kod:
if pc.get_character() == nil then[BR][/BR][TAB]syslog(LOG_ERROR, 'Catacomb error detected: character object is null.') [BR][/BR][TAB]return[BR][/BR]end
Yukarıdaki örnek kod sayesinde quest içinde karakter nesnesi boşsa sistem çökmeden uyarı logu bastırılır ve işlem sonlandırılır. Bu tip kontroller quest dosyalarında sıkça yapılmalıdır.
Daily Quest ve Custom Quest sistemlerinde de benzer kontroller yapılmalı. Özellikle lua scriptlerinde karakterin varlığı kontrol edilmeden yapılan işlemler catacomb hatasına yol açabilir.
Test Süreci
Fix uygulandıktan sonra sunucuyu test ederek, quest sistemlerinin tam olarak çalışıp çalışmadığını gözlemlemelisiniz. Oyuncuların Catacomb bölgelerinde takılıp takılmadıklarını kontrol etmek için test karakterleriyle bu alanlarda gezinmelisiniz. Ayrıca server log dosyalarını düzenli olarak takip etmelisiniz.
Sonuç
Maxmi TR Server Files v1.2.3 üzerinde Catacomb sorunlarını çözmek için öncelikle quest dosyalarında eksik kontrolleri tamamlamalı, gerekirse lua scriptlerine güvenlik kontrolleri eklemelisiniz. Metin2 Lobby olarak bu konuda deneyimlediğimiz çözümleri sizlerle paylaşmaya devam edeceğiz. Daha fazla quest hata çözümü ve geliştirme notları için sitemizi takip etmeyi unutmayın.
Maxmi - TR Server Files v1.2.3 - Catacomb Issue Fix!
Metin2 Lobby is pleased to share with you the solution for common problems such as Catacomb errors encountered by developers working on server files. In this article, we will focus on the details and solutions regarding Catacomb related issues occurring in the Maxmi TR Server Files v1.2.3 version.
What is Catacomb?
Catacomb refers to system-related issues in Metin2 that can cause crashes, freezes, or player characters getting stuck in certain areas or maps. These problems often occur more frequently when there are missing or incorrect commands within the quest systems.
Root Cause of the Problem
In the Maxmi TR Server Files v1.2.3 version, the primary cause of Catacomb issues usually lies in incomplete or faulty commands inside the quest files. Especially if timer, trigger, or state management is lacking within quests, players may get stuck in specific areas or unexpected crashes may occur on the server.
Applying the Fix
Firstly, check the quest_manager.cpp file from the server core files. Ensure logging mechanisms related to catacomb errors are active. If logging is not enabled, manually add this part as a developer.
Verify that functions between begin and end in quest files work correctly. Make sure flag and state variables are properly checked within the quests. If a faulty quest runs, the character object might become null, leading to catacomb errors.
Example Fix Code:
Kod:
if pc.get_character() == nil then[BR][/BR][TAB]syslog(LOG_ERROR, 'Catacomb error detected: character object is null.') [BR][/BR][TAB]return[BR][/BR]end
With the above code example, if the character object is empty within a quest, the system logs an error message instead of crashing and terminates the process. Such checks should be frequent in quest files.
Similar checks should also be applied in daily quest and custom quest systems. Particularly in lua scripts, operations performed without checking for character existence can lead to catacomb errors.
Testing Process
After applying the fix, test the server thoroughly, ensuring quest systems function properly. Monitor whether players get stuck in Catacomb areas by moving test characters around those regions. Additionally, continuously review server log files.
Conclusion
To resolve Catacomb issues on Maxmi TR Server Files v1.2.3, complete any missing checks in quest files and add security checks to lua scripts where necessary. As Metin2 Lobby, we will continue to share our experienced solutions on this topic. Don’t forget to follow our site for more quest debugging tips and development notes.
