Advertisement
Guest User

Untitled

a guest
Jul 5th, 2014
423
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 28.65 KB | None | 0 0
  1. define BLOCK_DOOR 20387
  2. define DUNGEON_MAN 20385
  3. define DUNGEON_MAN_DIR 0
  4. define DUNGEON_MAP_INDEX 351
  5. define ENTER_LIMIT_TIME 30
  6. define ENTRY_MAN 20394
  7. define ENTRY_MAP_INDEX 62
  8. define FINAL_BOSS 6091
  9. define LEVEL2_KEY 30329
  10. define LEVEL2_STONE 20386
  11. define LEVEL4_TARGET 6051
  12. define LEVEL5_REALKEY 30330
  13. define LEVEL5_STONE 20386
  14. define LEVEL5_GEN_LIMIT 100
  15. define LEVEL6_TARGET 8057
  16. define LEVEL_CUT 100
  17. define MOB_REGEN_FILE_PATH = "data/dungeon/flame_dungeon/"
  18. define IN_DOOR 20388
  19. define NPC_REGEN_FILE_PATH = "data/dungeon/flame_dungeon/npc.txt"
  20. define TICKET_GROUP 10033
  21. define LIMITED_PASS_TICKET 71175
  22.  
  23. quest flame_dungeon begin
  24.     state start begin  
  25.         when ENTRY_MAN.click with pc.get_level() >= 90 begin
  26.             pc.give_item2(LIMITED_PASS_TICKET, 1)
  27.             set_state(run)
  28.         end
  29.     end
  30.  
  31.     state run begin
  32.    
  33.     function setting()
  34.         return
  35.         {
  36.         ["bossroom_entry_pos"] = {8109,6867},
  37.         ["boss_pos"] = {686,637},
  38.         ["doors_pos"] = {
  39.             {320,394},
  40.             {293,359},
  41.             {333,321},
  42.             {378,320},
  43.             {400,355},
  44.             {394,401}
  45.         },
  46.         ["idoors_pos"] = {
  47.             {268,447},
  48.             {234,359},
  49.             {300,264},
  50.             {454,217},
  51.             {470,355},
  52.             {467,469}
  53.         },
  54.         ["doors_dir"] = {135,90,210,152,90,223},
  55.         ["idoors_dir"] = {135,90,210,135,90,239},
  56.         ["dungeon_entry_pos"] = {7762, 6739},-- 던전에 처음 들어오는 곳
  57.         ["DUNGEON_MAN_bpos"] = {690,722},
  58.         ["DUNGEON_MAN_pos"] = {354,362},
  59.         ["LEVEL2_STONE_pos"] = {195,352},
  60.         ["LEVEL4_TARGET_pos"] = {470,175},
  61.         ["LEVEL5_STONE_pos"] = {
  62.                 {486, 345},
  63.                 {511, 336},
  64.                 {525, 349},
  65.                 {521, 365},
  66.                 {503, 372},
  67.                 {486, 365},
  68.                 {500, 354}
  69.         },
  70.         ["LEVEL6_TARGET_pos"] = {511,480},
  71.         ["outside_entry_pos"] = {6142,7068}, --입장시켜주는애 서있는 곳
  72.         ["YAK_pos"] = {376, 397} -- 약환 부하
  73.        
  74.         }
  75.     end
  76.     function is_flamed(idx) -- 적룡성에 있는지 확인
  77.         return idx >= DUNGEON_MAP_INDEX * 10000 and idx < (DUNGEON_MAP_INDEX + 1) *10000
  78.     end
  79.     function make_dungeon() -- 던전 만들기
  80.         local setting = flame_dungeon.setting()
  81.         d.new_jump_party(DUNGEON_MAP_INDEX, setting.dungeon_entry_pos[1], setting.dungeon_entry_pos[2])
  82.         -- d.spawn_mob_ac_dir(DUNGEON_MAN, setting.DUNGEON_MAN_pos[1], setting.DUNGEON_MAN_pos[2],DUNGEON_MAN_DIR)
  83.         -- d.spawn_mob(YAK,setting.YAK_pos[1],setting.YAK_pos[2])
  84.         d.regen_file(NPC_REGEN_FILE_PATH)
  85.         d.setf("level",0)
  86.         for i=1,6 do
  87.             d.set_unique("door"..i, d.spawn_mob_ac_dir(BLOCK_DOOR, setting.doors_pos[i][1], setting.doors_pos[i][2],setting.doors_dir[i]))
  88.         end
  89.         for i=1,6 do
  90.             d.set_unique("idoor"..i, d.spawn_mob_ac_dir(IN_DOOR, setting.idoors_pos[i][1], setting.idoors_pos[i][2],setting.idoors_dir[i]))
  91.         end
  92.         d.setf("clear_count",0)
  93.         d.setf("started",0)
  94.         d.setf("dungeon_enter",0) -- 정상적으로 입장했는지? // 비정상 : 0 정상 : 1 // 튕기면 입장제한시간을 기록 안함
  95.     end
  96.     function go_boss() -- 보스룸 가기
  97.         local setting = flame_dungeon.setting()
  98.         if pc.get_level() < 104 then --레벨확인
  99.             -- syschat(translate.flame_dungeon._580_notice)
  100.             say(translate.flame_dungeon._580_notice)
  101.             return
  102.         else
  103.             if pc.getf("main_quest_flame_lv103", "__status")==main_quest_flame_lv103.__COMPLETE__ then -- 선행퀘스트 확인
  104.                 -- say_title(translate.flame_dungeon._010_say)
  105.                 say(translate.flame_dungeon._010_say)
  106.                 local warp = select(translate.flame_dungeon._020_select,translate.flame_dungeon._030_select)
  107.                 if warp == 1 then
  108.                     d.setf("level",17)
  109.                     d.jump_all(setting.bossroom_entry_pos[1],setting.bossroom_entry_pos[2])
  110.                     d.set_regen_file (MOB_REGEN_FILE_PATH.."fd_fild_boss.txt")
  111.                 --  d.spawn_mob(DUNGEON_MAN,setting.DUNGEON_MAN_bpos[1],setting.DUNGEON_MAN_bpos[2])
  112.                     d.spawn_mob(FINAL_BOSS,setting.boss_pos[1],setting.boss_pos[2])
  113.                 end
  114.             else
  115.                 -- syschat(translate.flame_dungeon._040_notice)
  116.                 say(translate.flame_dungeon._040_notice)
  117.                 return
  118.             end
  119.         end
  120.     end
  121.     function level_clear() -- 레벨 깼을때, 리젠클리어, 지역클리어
  122.         d.setf("level",0)
  123.         d.clear_regen()
  124.         d.purge_area(750000,620000,817400,689400) -- 맵전체 -- d.purge() 사용고려
  125.     end
  126.     function clear_timer(inx) -- 타이머 다지우기
  127.         clear_server_timer ("flame_dungeon_0m_left_timer", inx)
  128.         clear_server_timer ("flame_dungeon_1m_left_timer", inx)
  129.         clear_server_timer ("flame_dungeon_5m_left_timer", inx)
  130.         clear_server_timer ("flame_dungeon_10m_left_timer", inx)
  131.         clear_server_timer ("flame_dungeon_15m_left_timer", inx)
  132.         clear_server_timer ("flame_dungeon_30m_left_timer", inx)
  133.         clear_server_timer ("flame_dungeon_45m_left_timer", inx)
  134.         clear_server_timer ("killed_A_1", inx)
  135.         clear_server_timer ("killed_A_2", inx)
  136.         clear_server_timer ("flame_dungeon_ticket_remove", inx)
  137.     end
  138.    
  139.         when login begin
  140.             local idx = pc.get_map_index()
  141.             local setting = flame_dungeon.setting()
  142.             if idx == DUNGEON_MAP_INDEX then
  143.                 pc.warp(setting.outside_entry_pos[1]*100, setting.outside_entry_pos[2] * 100, ENTRY_MAP_INDEX)
  144.             elseif flame_dungeon.is_flamed(idx) then -- 던전 입장, 보스룸 입장 예외
  145.             ------------------------------------------------------------------------------------------------------------------------------------------------------
  146.             --아래의 두줄중 위에줄을 사용하면 던전에서 종료했을경우 다시 원래 위치로 돌아온다. 아래줄을 활성화 하면 던전에서 종료했을 경우 던전 밖으로 나가게 된다.
  147.             --던전에서 종료했을 경우 다시 원래 위치로 돌아올 경우, 던전에서 나가는 방법을 만들어줘야 하기 때문에 적룡성비의 나가기란 옵션을 활성화 해줘야 한다.
  148.             ------------------------------------------------------------------------------------------------------------------------------------------------------
  149.                 -- pc.set_warp_location(0, 0 , 0) --튕겼을때 다시 돌아오게 만들어 주는 부분
  150.                 pc.set_warp_location(ENTRY_MAP_INDEX, setting.outside_entry_pos[1] , setting.outside_entry_pos[2]) -- 던전 나갔을 때 밖으로 튕기게함
  151.                 local ticketGroup = {get_special_item_group (TICKET_GROUP)}
  152.                 if d.getf("dungeon_enter") == 0 then -- 진행중이 아니면
  153.                     local canPass = false
  154.                     for i=1, table.getn(ticketGroup),2 do
  155.                         if pc.count_item(ticketGroup[i]) >= ticketGroup[i+1] then
  156.                             canPass = true
  157.                             break
  158.                         end
  159.                     end
  160.  
  161.                     if get_global_time() - pc.getf("flame_dungeon","exit_time") < ENTER_LIMIT_TIME * 60 then -- 입장제한시간이 걸렸으면
  162.                         notice_multiline(translate.flame_dungeon._050_notice,d.notice)
  163.                         say(translate.flame_dungeon._060_say)
  164.                         timer("flame_dungeon_warp_timer", 5)
  165.                     elseif not canPass then
  166.                         notice_multiline(translate.flame_dungeon._070_notice,d.notice)
  167.                         say(translate.flame_dungeon._080_say)
  168.                         timer("flame_dungeon_warp_timer", 5)
  169.                     elseif pc.get_level() < 100 then
  170.                         notice_multiline(translate.flame_dungeon._090_notice,d.notice)
  171.                         say(translate.flame_dungeon._100_say)
  172.                         timer("flame_dungeon_warp_timer", 5)
  173.                     end
  174.                 elseif pc.getf("flame_dungeon","ticket_delete") == 0 then -- 진행중인데 티켓이 안지워졌을경우
  175.                    
  176.                     for i=1, table.getn(ticketGroup),2 do
  177.                         if pc.count_item(ticketGroup[i]) >= ticketGroup[i+1] then
  178.                             pc.remove_item(ticketGroup[i], ticketGroup[i+1])
  179.                             break
  180.                         end
  181.                     end
  182.                     pc.setf("flame_dungeon","ticket_delete",1)
  183.                 end
  184.             else
  185.                 pc.setf("flame_dungeon","ticket_delete",0)
  186.             end
  187.         end
  188.         when flame_dungeon_warp_timer.timer begin
  189.             local setting = flame_dungeon.setting()
  190.             pc.warp(setting.outside_entry_pos[1]*100, setting.outside_entry_pos[2] * 100, ENTRY_MAP_INDEX)
  191.         end
  192.         when logout begin
  193.             local idx = pc.get_map_index()
  194.             if flame_dungeon.is_flamed(idx) then
  195.                 if d.getf("dungeon_enter") == 1 then -- 정상적인 던전 입장 후 로그아웃
  196.                     pc.setf("flame_dungeon","exit_time",get_global_time()) -- 인스턴스 안에서의 마지막 시간을 기록, 근데 시간제한 때문에 or 그냥 튕긴거면 안기록
  197.                 end
  198.                
  199.  
  200.             end
  201.         end
  202.         when ENTRY_MAN.chat.translate.flame_dungeon._110_npcChat begin
  203.        
  204.             local setting = flame_dungeon.setting()
  205.             if party.is_party() then
  206.                 -- 던전 도중 나갈 경우 재입장 가능하도록
  207.                 local party_check = 0
  208.                 if d.find(party.getf("dungeon_index")) then
  209.                     party_check = (d.getf_from_map_index("party_leader_pid", party.getf("dungeon_index")) == party.get_leader_pid())
  210.                 end
  211.                
  212.                 if d.find(party.getf("dungeon_index")) and party_check then
  213.                     if get_global_time() - pc.getf("flame_dungeon","exit_time") < 5 * 60 then -- 접종 이후 5분 내?
  214.                         local dungeon_level = d.getf_from_map_index("level", party.getf("dungeon_index"))
  215.                         if dungeon_level == 17 then -- 보스
  216.                             pc.warp(setting.bossroom_entry_pos[1] * 100, setting.bossroom_entry_pos[2] * 100, party.getf("dungeon_index"))
  217.                         else
  218.                             pc.warp(setting.dungeon_entry_pos[1] * 100, setting.dungeon_entry_pos[2] * 100, party.getf("dungeon_index"))
  219.                         end
  220.                     else -- 5분 초과하여 재 입장 불가
  221.                         say_title(mob_name(ENTRY_MAN))
  222.                         say(translate.flame_dungeon._590_say)
  223.                     end
  224.                 else
  225.                     local pids = {party.get_member_pids()}
  226.                     local noTicketMembers = {}
  227.                     local notEnoughLevelMembers = {}
  228.                     local ticketCheck = true
  229.                     local levelCheck = true
  230.                     local ticketGroup = {get_special_item_group (TICKET_GROUP)}
  231.                     for i, pid in next, pids, nil do
  232.                         q.begin_other_pc_block(pid)
  233.                         local canPass = false
  234.                         for idx=1, table.getn(ticketGroup),2 do
  235.                             if pc.count_item(ticketGroup[idx]) >= ticketGroup[idx+1] then
  236.                                 canPass = true
  237.                                 break
  238.                             end
  239.                         end
  240.                        
  241.                         if not canPass then
  242.                             table.insert(noTicketMembers, pc.get_name())
  243.                             ticketCheck = false
  244.                         end
  245.                         if pc.level < LEVEL_CUT then
  246.                             table.insert(notEnoughLevelMembers, pc.get_name())
  247.                             levelCheck = false
  248.                         end
  249.                         q.end_other_pc_block()
  250.                     end
  251.  
  252.                     if not ticketCheck then
  253.                         say_title(mob_name(ENTRY_MAN))
  254.                         say(translate.flame_dungeon._610_say)
  255.                         for i, name in next, noTicketMembers, nil do
  256.                             say(color(1,1,0), "    "..name)
  257.                         end
  258.                         if levelCheck then
  259.                             return
  260.                         else
  261.                             wait()
  262.                         end
  263.                     end
  264.  
  265.                     if not levelCheck then
  266.                         say_title(mob_name(ENTRY_MAN))
  267.                         say(translate.flame_dungeon._630_say)
  268.                         for i, name in next, notEnoughLevelMembers, nil do
  269.                             say(color(1,1,0), "    "..name)
  270.                         end
  271.                         return
  272.                     end
  273.  
  274.                     if party.is_leader() then
  275.                         say(translate.flame_dungeon._120_say)
  276.                         local warp = select(translate.flame_dungeon._130_select,translate.flame_dungeon._140_select)
  277.                         if warp == 1 then
  278.                             if party.is_map_member_flag_lt("exit_time", get_global_time() - ENTER_LIMIT_TIME * 60 ) then
  279.                                 flame_dungeon.make_dungeon()
  280.                             else
  281.                                 --say("test : 파티원의 입장 제한시간이 끝나지 않았습니다.")
  282.                                 say(translate.flame_dungeon._600_say)
  283.                             end
  284.                         end
  285.                        
  286.                         party.setf("flame_dungeon_boss_kill_count", 0)
  287.                        
  288.                     else
  289.                         say(translate.flame_dungeon._150_say)
  290.                     end
  291.                 end
  292.             else
  293.                 say(translate.flame_dungeon._160_say)
  294.             end
  295.         end
  296.         -- when ENTRY_MAN.chat."Test : 리소스확인" with is_test_server() begin -- 테스트용
  297.             -- local setting = flame_dungeon.setting()
  298.             -- pc.setf("flame_dungeon","fdRtest",1)
  299.             -- pc.warp( setting.dungeon_entry_pos[1]*100, setting.dungeon_entry_pos[2]*100, DUNGEON_MAP_INDEX)
  300.         -- end
  301.        
  302.        
  303.         when ENTRY_MAN.chat."TEST : Init time limit init" with is_test_server() begin -- 테스트용
  304.             pc.setf("flame_dungeon","exit_time",get_global_time()-1800)
  305.             say("Done")
  306.         end
  307.         -- when DUNGEON_MAN.chat."Test : 현재 상태" with is_test_server() begin -- 테스트용
  308.             -- say("남은 몬스터 : "..d.count_monster())
  309.             -- say("level : "..d.getf("level"))
  310.             -- say("Dmap index : "..d.get_map_index())
  311.             -- say("Pmap index : "..pc.get_map_index())
  312.             -- say("access limit : "..pc.getf("flame_dungeon","exit_time"))
  313.             -- say("global time : "..get_global_time())
  314.             -- if flame_dungeon.is_flamed(d.get_map_index()) then
  315.                 -- say("in dungeon") -- is_flamed 함수 체크
  316.             -- end
  317.             -- if d.is_unique_dead("stone1") then
  318.                 -- say("stone1 is dead")
  319.             -- else
  320.                 -- say("stone1 is not dead")
  321.             -- end
  322.         -- end
  323.         -- when DUNGEON_MAN.chat."처음으로" begin -- 테스트용
  324.             -- say("초기화 합니다")
  325.             -- flame_dungeon.clear_timer(d.get_map_index())
  326.             -- flame_dungeon.make_dungeon()
  327.         -- end
  328.         when DUNGEON_MAN.chat."Test : Boss Room" with is_test_server() begin -- 테스트용
  329.             flame_dungeon.go_boss()
  330.         end
  331.        
  332.         -- < 시간 경과 타이머>
  333.         -- when DUNGEON_MAN.chat."나가기" begin -- 던전에서 튕기지 않게 할 경우 활성화
  334.             -- local setting = flame_dungeon.setting()
  335.             -- say("밖으로 나가시겠습니까?")
  336.             -- local warp = select("확인","취소")
  337.             -- if warp == 1 then
  338.                 -- pc.warp(setting.outside_entry_pos[1]*100, setting.outside_entry_pos[2] * 100, ENTRY_MAP_INDEX)
  339.             -- end
  340.         -- end
  341.         when flame_dungeon_45m_left_timer.server_timer begin
  342.             if d.select(get_server_timer_arg()) then
  343.                 notice_multiline(string.format(translate.flame_dungeon._180_notice, 45),d.notice)
  344.                 notice_multiline(translate.flame_dungeon._170_notice,d.notice)
  345.                 server_timer('flame_dungeon_30m_left_timer', 15*60, get_server_timer_arg())
  346.             end
  347.         end
  348.         when flame_dungeon_30m_left_timer.server_timer begin
  349.             if d.select(get_server_timer_arg()) then
  350.                 notice_multiline(string.format(translate.flame_dungeon._180_notice, 30),d.notice)
  351.                 notice_multiline(translate.flame_dungeon._170_notice,d.notice)
  352.                 server_timer('flame_dungeon_15m_left_timer', 15*60, get_server_timer_arg())
  353.             end
  354.         end
  355.         when flame_dungeon_15m_left_timer.server_timer begin
  356.             if d.select(get_server_timer_arg()) then
  357.                 notice_multiline(string.format(translate.flame_dungeon._180_notice, 15),d.notice)
  358.                 notice_multiline(translate.flame_dungeon._170_notice,d.notice)
  359.                 server_timer('flame_dungeon_5m_left_timer', 10*60, get_server_timer_arg())
  360.             end
  361.         end
  362.         when flame_dungeon_5m_left_timer.server_timer begin
  363.             if d.select(get_server_timer_arg()) then
  364.                 notice_multiline(string.format(translate.flame_dungeon._180_notice, 5),d.notice)
  365.                 notice_multiline(translate.flame_dungeon._170_notice,d.notice)
  366.                 server_timer('flame_dungeon_1m_left_timer', 4*60, get_server_timer_arg())
  367.             end
  368.         end
  369.         when flame_dungeon_1m_left_timer.server_timer begin
  370.             if d.select(get_server_timer_arg()) then
  371.                 notice_multiline(string.format(translate.flame_dungeon._180_notice, 1),d.notice)
  372.                 notice_multiline(translate.flame_dungeon._170_notice,d.notice)
  373.                 server_timer ("flame_dungeon_0m_left_timer", 60, get_server_timer_arg())
  374.             end
  375.         end
  376.         when flame_dungeon_0m_left_timer.server_timer begin
  377.             local setting = flame_dungeon.setting()
  378.             if d.select(get_server_timer_arg()) then       
  379.                 notice_multiline(translate.flame_dungeon._190_notice,d.notice)
  380.                 notice_multiline(translate.flame_dungeon._200_notice,d.notice)
  381.                 server_timer("dungeon_end_timer",10,d.get_map_index()) 
  382.             end
  383.         end
  384.  
  385.  
  386.         -- <<<< 던전 진행>>>> --
  387.         when DUNGEON_MAN.chat.translate.flame_dungeon._210_npcChat with npc.lock() begin -- '0x'는 x번째 레벨 퀘스트 받을 수 있는 상태 , '1x'는 x번째 레벨 퀘스트 진행중
  388.             local setting = flame_dungeon.setting()
  389.             if d.getf("started") == 0 then
  390.                 say(translate.flame_dungeon._230_say)
  391.                 say(translate.flame_dungeon._240_say)
  392.                 wait()
  393.                 d.setf("started",1)
  394.                 -- 파티원이 튕겨버렸는데 자기만 남아서 exit timer가 리셋되면 안되니깐 다음레벨을 눌렀을때를 시작할때로 봄
  395.                 server_timer ("flame_dungeon_45m_left_timer",15*60, d.get_map_index())
  396.                 notice_multiline(translate.flame_dungeon._250_notice,d.notice)
  397.                 notice_multiline(translate.flame_dungeon._170_notice,d.notice)
  398.                
  399.                 -- 통행증 관련된 처리
  400.                 -- 입장 후에 티켓을 없앤 사람을 튕겨내기 위해서 타이머를 이용해 티켓을 제거한다.
  401.                 local pids = {party.get_member_pids()}
  402.                 local ticketGroup = {get_special_item_group (TICKET_GROUP)}
  403.                 for i, pid in next, pids, nil do
  404.                     q.begin_other_pc_block(pid)
  405.                     local canPass = false
  406.                     for idx=1, table.getn(ticketGroup),2 do
  407.                         if pc.count_item(ticketGroup[idx]) >= ticketGroup[idx+1] then
  408.                             canPass = true
  409.                             pc.remove_item(ticketGroup[idx], ticketGroup[idx+1])
  410.                             break
  411.                         end
  412.                     end
  413.                    
  414.                     if not canPass then
  415.                         pc.warp(setting.outside_entry_pos[1]*100, setting.outside_entry_pos[2] * 100, ENTRY_MAP_INDEX)
  416.                     end
  417.                     q.end_other_pc_block()
  418.                 end
  419.                 d.setqf2("flame_dungeon","ticket_delete",1)
  420.                 d.setf("dungeon_enter",1)
  421.                
  422.                 -- 던전과 파티에 서로에 대한 정보를 저장한다.
  423.                 party.setf("dungeon_index", d.get_map_index())
  424.                 d.setf("party_leader_pid", party.get_leader_pid())
  425.             end
  426.             if d.getf("level") < 7 then --진행중이 아니면
  427.                 if d.getf("clear_count") == 6 then -- 방 여섯개 했으면 보스방
  428.                     d.setf("level",7)
  429.                 else
  430.                     local rand = number(1,6)--랜덤에서 방문체크는 따로 배열없이 방의 문의 열려있는지로 체크함
  431.                     local setlev = 0
  432.                     d.setf("level",7) -- 혹시 모를 문제가 생겨 레벨이 안잡힐경우를 대비해 보스룸으로 셋팅해둠
  433.                     for i=1,50 do
  434.                         setlev = setlev + 1
  435.                         if setlev > 6 then
  436.                             setlev = 1
  437.                         end
  438.                         if not d.is_unique_dead("door"..setlev) then
  439.                             rand = rand - 1
  440.                             if rand == 0 then
  441.                                 d.setf("level",setlev)
  442.                                 d.setf("clear_count",d.getf("clear_count")+1)
  443.                                 break
  444.                             end
  445.                         end
  446.                     end
  447.                 end
  448.             end
  449.                 if d.getf("level") == 1 then
  450.                     say(translate.flame_dungeon._260_say)
  451.                     notice_multiline(translate.flame_dungeon._260_say,d.notice)
  452.                     d.kill_unique("door1")
  453.                     d.kill_unique("idoor1")
  454.                     d.setf("level",11)
  455.                     d.regen_file (MOB_REGEN_FILE_PATH.."fd_a.txt")
  456.                        
  457.                     server_timer ("killed_A_1", 12, d.get_map_index())
  458.                 elseif d.getf("level") == 11 then
  459.                     say(translate.flame_dungeon._270_say)
  460.                     say_title(translate.flame_dungeon._280_sayTitle .. d.count_monster())
  461.                 elseif d.getf("level") == 2 then
  462.                         say(translate.flame_dungeon._290_say)
  463.                         say(translate.flame_dungeon._300_say)
  464.                         notice_multiline(translate.flame_dungeon._290_say,d.notice)
  465.                         notice_multiline(translate.flame_dungeon._300_say,d.notice)
  466.                         d.spawn_mob(LEVEL2_STONE, setting.LEVEL2_STONE_pos[1], setting.LEVEL2_STONE_pos[2]) -- 봉인석 소환
  467.                         d.kill_unique("door2")
  468.                         d.kill_unique("idoor2")
  469.                         d.set_regen_file (MOB_REGEN_FILE_PATH.."fd_b.txt")
  470.                         d.setf("level",12)
  471.                 elseif d.getf("level") == 12 then
  472.                     say(translate.flame_dungeon._310_say)
  473.                 elseif d.getf("level") == 3 then
  474.                     say(translate.flame_dungeon._260_say)
  475.                     notice_multiline(translate.flame_dungeon._260_say,d.notice)
  476.                     d.kill_unique("door3")
  477.                     d.kill_unique("idoor3")
  478.                     d.setf("level",13)
  479.                     d.regen_file (MOB_REGEN_FILE_PATH.."fd_c.txt")
  480.                     server_timer ("killed_A_1", 12, d.get_map_index())
  481.                 elseif d.getf("level") == 13 then
  482.                     say(translate.flame_dungeon._270_say)
  483.                     say_title(translate.flame_dungeon._280_sayTitle..d.count_monster())
  484.                 elseif d.getf("level") == 4 then -- 474 178
  485.                     say(translate.flame_dungeon._320_notice)
  486.                     notice_multiline(translate.flame_dungeon._320_notice,d.notice)
  487.                     d.setf("level",14)
  488.                     d.kill_unique("door4")
  489.                     d.kill_unique("idoor4")
  490.                     d.set_regen_file (MOB_REGEN_FILE_PATH.."fd_d.txt")
  491.                     d.spawn_mob(LEVEL4_TARGET,setting.LEVEL4_TARGET_pos[1],setting.LEVEL4_TARGET_pos[2] ) -- 타겟몬스터 소한
  492.                 elseif d.getf("level") == 14 then
  493.                     say(translate.flame_dungeon._330_say)
  494.                     say(translate.flame_dungeon._340_say)
  495.                 elseif d.getf("level") == 5 then -- 510 355
  496.                     say(translate.flame_dungeon._350_say)
  497.                     say(translate.flame_dungeon._360_say)
  498.                     notice_multiline(translate.flame_dungeon._350_say,d.notice)
  499.                     notice_multiline(translate.flame_dungeon._360_say,d.notice)
  500.                     d.kill_unique("door5")
  501.                     d.kill_unique("idoor5")
  502.                     d.setf("level",15)
  503.                     d.set_regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
  504.                     local vis = { 0,0,0,0,0,0,0}
  505.                     for i=1,7 do
  506.                         vis[i] = 0
  507.                     end
  508.                     for i = 1, 7 do -- 랜덤하게 돌소환
  509.                         local ran = number(1,7)
  510.                         local st = 0
  511.                         for j = 1, 50 do
  512.                             st = st + 1
  513.                             if st > 7 then
  514.                                 st = 1
  515.                             end
  516.                             if vis[st] == 0 then
  517.                                 ran = ran - 1
  518.                                 if ran == 0 then
  519.                                     vis[st] = 1
  520.                                     d.set_unique("stone5_"..st, d.spawn_mob(LEVEL5_STONE, setting.LEVEL5_STONE_pos[i][1], setting.LEVEL5_STONE_pos[i][2]))
  521.                                     break
  522.                                 end
  523.                             end
  524.                         end
  525.                     end  
  526.                 elseif d.getf("level") == 15 then
  527.                     say(translate.flame_dungeon._370_say)
  528.                 elseif d.getf("level") == 6 then -- 507 490
  529.                     say(translate.flame_dungeon._380_say)
  530.                     notice_multiline(translate.flame_dungeon._380_say,d.notice)
  531.                     d.setf("level",16)
  532.                     d.kill_unique("door6")
  533.                     d.kill_unique("idoor6")
  534.                     d.set_regen_file (MOB_REGEN_FILE_PATH.."fd_f.txt")
  535.                     d.spawn_mob(LEVEL6_TARGET, setting.LEVEL6_TARGET_pos[1],setting.LEVEL6_TARGET_pos[2]) -- 타겟오브젝트 소환
  536.                 elseif d.getf("level") == 16 then
  537.                     say(translate.flame_dungeon._390_say)
  538.                     say(translate.flame_dungeon._400_say)
  539.                 elseif d.getf("level") == 7 then
  540.                     -- setskin(NOWINDOW)
  541.                     flame_dungeon.go_boss()
  542.                 else
  543.                     say(translate.flame_dungeon._410_say)
  544.                 end
  545.             npc.unlock()       
  546.         end
  547.    
  548.  
  549.  
  550.         when dungeon_end_timer.server_timer begin -- 종료 타이머 (끝나고 나가는거)
  551.             local setting = flame_dungeon.setting()
  552.             if d.select(get_server_timer_arg()) then
  553.                 flame_dungeon.clear_timer(d.get_map_index())       
  554.                 d.set_warp_location(ENTRY_MAP_INDEX, setting.outside_entry_pos[1] , setting.outside_entry_pos[2])
  555.                 d.exit_all()
  556.                 d.setf("party_leader_pid", 0)
  557.             end
  558.         end
  559.  
  560.         when killed_A_1.server_timer begin -- 타이머 돌리기1 (level1,level3)
  561.             if d.select(get_server_timer_arg()) then
  562.                 if d.count_monster() <= 0 then -- 1레벨 몬스터 전멸시
  563.                     if d.getf("level") == 11 then
  564.                         notice_multiline(translate.flame_dungeon._420_notice,d.notice)
  565.                         notice_multiline(translate.flame_dungeon._430_notice,d.notice)
  566.                     else
  567.                         notice_multiline(translate.flame_dungeon._420_notice,d.notice)
  568.                         notice_multiline(translate.flame_dungeon._430_notice,d.notice)
  569.                     end
  570.                     d.setf("level",0)
  571.                 else
  572.                     server_timer ("killed_A_2", 6, get_server_timer_arg())
  573.                 end
  574.             end
  575.         end
  576.         when killed_A_2.server_timer begin -- 타이머 돌리기2 (1과 2 번갈아가면서 돌아감)
  577.             if d.select(get_server_timer_arg()) then
  578.                 if d.count_monster() <= 0 then -- 1레벨 몬스터 전멸시
  579.                     if d.getf("level") == 11 then
  580.                         notice_multiline(translate.flame_dungeon._420_notice,d.notice)
  581.                         notice_multiline(translate.flame_dungeon._430_notice,d.notice)
  582.                     else
  583.                         notice_multiline(translate.flame_dungeon._420_notice,d.notice)
  584.                         notice_multiline(translate.flame_dungeon._430_notice,d.notice)
  585.                     end
  586.                     d.setf("level",0)
  587.                 else
  588.                     server_timer ("killed_A_1", 6, get_server_timer_arg())
  589.                 end
  590.             end
  591.         end
  592.  
  593.         when kill with flame_dungeon.is_flamed(pc.get_map_index()) and d.getf("level") == 12 begin -- 2레벨 봉인석 열쇠 드랍
  594.             local i = number(1, 100) -- 100분의 1 확률로 열쇠드랍
  595.             if i == 1 then
  596.                 game.drop_item (LEVEL2_KEY, 1)
  597.             end
  598.         end
  599.         when LEVEL2_STONE.take with flame_dungeon.is_flamed(pc.get_map_index()) and item.vnum == LEVEL2_KEY and d.getf("level") == 12 begin -- 2레벨 열쇠 먹었을때
  600.             local i = number(1, 5) -- 5분의 1 확률로 진짜 열쇠
  601.             if i == 1 then
  602.                 npc.purge()
  603.                 item.remove()
  604.                 notice_multiline(translate.flame_dungeon._440_notice,d.notice)
  605.                 notice_multiline(translate.flame_dungeon._430_notice,d.notice)
  606.                 flame_dungeon.level_clear()
  607.             else
  608.                 item.remove()
  609.                 say(translate.flame_dungeon._450_say)
  610.             end
  611.         end
  612.  
  613.         when LEVEL4_TARGET.kill with flame_dungeon.is_flamed(pc.get_map_index()) and d.getf("level") == 14 begin
  614.             notice_multiline(translate.flame_dungeon._460_notice,d.notice)
  615.             notice_multiline(translate.flame_dungeon._430_notice,d.notice)
  616.             flame_dungeon.level_clear()
  617.         end
  618.  
  619.         when kill with flame_dungeon.is_flamed(pc.get_map_index()) and d.getf("level") == 15 begin -- 5레벨 봉인석 열쇠 드랍
  620.             local i = number(1, 30) -- 30분의 1 확률로 열쇠드랍
  621.             if i == 1 then
  622.                 game.drop_item (LEVEL5_REALKEY, 1)
  623.             end
  624.         end
  625.         when LEVEL5_STONE.take with flame_dungeon.is_flamed(d.get_map_index()) and item.vnum == LEVEL5_REALKEY and d.getf("level") == 15 begin -- 5레벨 진짜열쇠 먹었을때
  626.             local setting = flame_dungeon.setting()
  627.             if npc.get_vid() == d.get_unique_vid("stone5_1") then -- 첫번째 꺼는 선행되어야 할 일이 필요없으니 찾자마자 제거해줌
  628.                 npc.purge()
  629.                 item.remove()
  630.                 say(translate.flame_dungeon._470_say)
  631.                 d.setf("stonekill",2) -- 2번 돌을 죽여라
  632.                 if d.count_monster() < LEVEL5_GEN_LIMIT then
  633.                     d.regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
  634.                 end
  635.             elseif npc.get_vid() == d.get_unique_vid("stone5_2") then
  636.                 if d.getf("stonekill") == 2 then -- 2번돌을 죽일 차롄데 2번돌에게 열쇠를 먹였을 때
  637.                     npc.purge()
  638.                     item.remove()
  639.                     say(translate.flame_dungeon._480_say)
  640.                     d.setf("stonekill",3)
  641.                     if d.count_monster() < LEVEL5_GEN_LIMIT then
  642.                         d.regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
  643.                     end
  644.                 else
  645.                     item.remove()
  646.                     say(translate.flame_dungeon._490_say)
  647.             --      say("2번")
  648.                 end
  649.             elseif npc.get_vid() == d.get_unique_vid("stone5_3") then
  650.                 if d.getf("stonekill") == 3 then
  651.                     npc.purge()
  652.                     item.remove()
  653.                     say(translate.flame_dungeon._500_say)
  654.                     d.setf("stonekill",4)
  655.                     if d.count_monster() < LEVEL5_GEN_LIMIT then
  656.                         d.regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
  657.                     end
  658.                 else
  659.                     item.remove()
  660.                     say(translate.flame_dungeon._490_say)
  661.             --      say("3번")
  662.                 end
  663.             elseif npc.get_vid() == d.get_unique_vid("stone5_4") then
  664.                 if d.getf("stonekill") == 4 then
  665.                     npc.purge()
  666.                     item.remove()
  667.                     say(translate.flame_dungeon._510_say)
  668.                     d.setf("stonekill",5)
  669.                     if d.count_monster() < LEVEL5_GEN_LIMIT then
  670.                         d.regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
  671.                     end
  672.                 else
  673.                     item.remove()
  674.                     say(translate.flame_dungeon._490_say)
  675.                 --  say("4번")
  676.                 end
  677.             elseif npc.get_vid() == d.get_unique_vid("stone5_5") then
  678.                 if d.getf("stonekill") == 5 then
  679.                     npc.purge()
  680.                     item.remove()
  681.                     say(translate.flame_dungeon._520_say)
  682.                     d.setf("stonekill",6)
  683.                     if d.count_monster() < LEVEL5_GEN_LIMIT then
  684.                         d.regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
  685.                     end
  686.                 else
  687.                     item.remove()
  688.                     say(translate.flame_dungeon._490_say)
  689.             --      say("5번")
  690.                 end
  691.             elseif npc.get_vid() == d.get_unique_vid("stone5_6") then
  692.                 if d.getf("stonekill") == 6 then
  693.                     npc.purge()
  694.                     item.remove()
  695.                     say(translate.flame_dungeon._530_say)
  696.                     d.setf("stonekill",7)
  697.                     if d.count_monster() < LEVEL5_GEN_LIMIT then
  698.                         d.regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
  699.                     end
  700.                 else
  701.                     item.remove()
  702.                     say(translate.flame_dungeon._490_say)
  703.             --      say("6번")
  704.                 end
  705.             else
  706.                 if d.getf("stonekill") == 7 then
  707.                     npc.purge()
  708.                     item.remove()
  709.                     notice_multiline(translate.flame_dungeon._440_notice,d.notice)
  710.                     notice_multiline(translate.flame_dungeon._430_notice,d.notice)
  711.                     flame_dungeon.level_clear()
  712.                 else
  713.                     item.remove()
  714.                     say(translate.flame_dungeon._490_say)
  715.             --      say("7번")
  716.                 end
  717.             end
  718.         end
  719.  
  720.         when LEVEL6_TARGET.kill with flame_dungeon.is_flamed(d.get_map_index()) and d.getf("level") ==16 begin -- 망마석 파괴했을 때
  721.             notice_multiline(translate.flame_dungeon._540_notice,d.notice)
  722.             notice_multiline(translate.flame_dungeon._430_notice,d.notice)
  723.             flame_dungeon.level_clear()
  724.         end
  725.  
  726.         when FINAL_BOSS.kill with flame_dungeon.is_flamed(d.get_map_index()) and d.getf("level") ==17 begin -- 보스 죽였을때
  727.             notice_multiline(translate.flame_dungeon._550_notice,d.notice)
  728.             notice_multiline(translate.flame_dungeon._560_notice,d.notice)
  729.             server_timer("dungeon_end_timer", 60,d.get_map_index())
  730.             flame_dungeon.level_clear()
  731.            
  732.             -- 파티원 중, 야마천 잡는 퀘스트(104렙, 105렙 퀘스트) 진행중인 사람이 있으면 퀘스트 클리어 되도록.
  733.             if party.is_party() then
  734.                 party.setf("flame_dungeon_boss_kill_count", 1)
  735.             end
  736.            
  737.         end
  738.     end
  739. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement