Advertisement
Bambus3k

Untitled

Jun 23rd, 2023
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.84 KB | None | 0 0
  1. quest deviltower_zone begin
  2. state start begin
  3. when login begin
  4. if pc.get_map_index() == 66 then
  5. -- 1층이 아닐 때만 밖으로 내보낸다.
  6. -- 층 범위
  7. -- 1층 88 577 236 737
  8. -- 2층 91 343 238 504
  9. -- 3층 104 107 248 269
  10. if pc.get_x() < 2048+88 or pc.get_y() < 6656+577 or pc.get_x() > 2048+236 or pc.get_y() > 6656+737 then
  11. pc.warp((5376+532)*100, (512+596+4)*100, 65)
  12. end
  13. pc.set_warp_location(65, 5376+532, 512+596+4)
  14. elseif pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 then
  15. pc.set_warp_location(65, 5376+532, 512+596+4)
  16. end
  17. end
  18.  
  19. when deviltower_man.chat.locale.deviltower_man_chat begin
  20. if pc.get_level() < 40 then
  21. say(locale.deviltower_man_say_you_cant)
  22. else
  23. say(locale.deviltower_man_say)
  24. local s = select(locale.deviltower_enter,locale.deviltower_no_enter)
  25. if s == 1 then
  26. pc.warp(216500,727000)
  27. end
  28. end
  29. end
  30.  
  31. when devil_stone1.kill begin
  32. timer("devil_stone1_1", 6)
  33. end
  34.  
  35. when devil_stone1_1.timer begin
  36. local mapto7 = pc.count_item(30302) -- 혹시 있을찌 모를 진사귀지도타워 지우기
  37. pc.remove_item(30302,mapto7)
  38.  
  39. local boxto7 = pc.count_item(30300) -- 혹시 있을찌 모를 알수없는상자 지우기
  40. pc.remove_item(30300,boxto7)
  41.  
  42. d.new_jump_all(66, special.devil_tower[1][1], special.devil_tower[1][2])
  43. d.regen_file("data/dungeon/deviltower2_regen.txt")
  44. d.set_warp_at_eliminate(4, d.get_map_index(), special.devil_tower[2][1], special.devil_tower[2][2], "data/dungeon/deviltower3_regen.txt")
  45. end
  46.  
  47. when devil_stone3.kill begin
  48. d.set_warp_at_eliminate(4, d.get_map_index(), special.devil_tower[3][1], special.devil_tower[3][2], "data/dungeon/deviltower4_regen.txt")
  49. d.check_eliminated()
  50. end
  51.  
  52. function get_4floor_stone_pos()
  53. local positions = {
  54. {368, 629}, {419, 630}, {428, 653}, {422, 679},
  55. {395, 689}, {369, 679}, {361, 658},
  56. }
  57. for i = 1, 6 do
  58. local j = number(i, 7)
  59. if i != j then
  60. local t = positions[i];
  61. positions[i] = positions[j];
  62. positions[j] = t;
  63. end
  64. end
  65.  
  66. return positions
  67. end
  68.  
  69. when 8016.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
  70. d.setf("level", 4)
  71. -- 잡다한 몹을 리젠하고 가짜 돌과 진짜 돌을 만듬
  72. --d.regen_file("data/dungeon/deviltower4_regen.txt")
  73. local positions = deviltower_zone.get_4floor_stone_pos()
  74. for i = 1, 6 do
  75. chat(positions[i][1], positions[i][2])
  76. d.set_unique("fake" .. i , d.spawn_mob(8017, positions[i][1], positions[i][2]))
  77. end
  78. chat(positions[7][1], positions[7][2])
  79. local vid = d.spawn_mob(8017, positions[7][1], positions[7][2])
  80. chat(vid)
  81. d.set_unique("real", vid)
  82. server_loop_timer('devil_stone4_update', 10, pc.get_map_index())
  83. server_timer('devil_stone4_fail1', 5*60, pc.get_map_index())
  84.  
  85. d.notice("선택의 관문 4층입니다.");
  86. d.notice("수많은 메틴석이 여러분의 눈과 귀를 현혹하고 있습니다.");
  87. d.notice("이중 진짜 메틴석을 15분 내로 찾아 격파하십시오!");
  88. d.notice("그것 만이 이 선택의 관문을 빠져나가는 길입니다.");
  89. end
  90.  
  91. when devil_stone4_fail1.server_timer begin
  92. if d.select(get_server_timer_arg()) then
  93. d.notice("10분 남았습니다.")
  94. server_timer('devil_stone4_fail2', 5*60, get_server_timer_arg())
  95. end
  96. end
  97.  
  98. when devil_stone4_fail2.server_timer begin
  99. if d.select(get_server_timer_arg()) then
  100. d.notice("5분 남았습니다.")
  101. server_timer('devil_stone4_fail', 5*60, get_server_timer_arg())
  102. end
  103. end
  104.  
  105. when devil_stone4_fail.server_timer begin
  106. if d.select(get_server_timer_arg()) then
  107. d.notice("시간제한에 다되어 실패했습니다.")
  108. d.exit_all()
  109. clear_server_timer('devil_stone4_update', get_server_timer_arg())
  110. end
  111. end
  112.  
  113. when devil_stone4_update.server_timer begin
  114. if d.select(get_server_timer_arg()) then
  115. if not d.is_unique_dead("real") then
  116. for i = 1, 6 do
  117. if d.getf("fakedead" .. i) == 0 then
  118. if d.unique_get_hp_perc("fake" .. i) < 50 then
  119. d.purge_unique("fake" .. i)
  120. d.setf("fakedead" .. i, 1)
  121. d.notice("가짜 메틴석이 사라집니다....");
  122. end
  123. end
  124. end
  125. else
  126. server_timer("devil_stone4_end", 5, get_server_timer_arg())
  127. d.kill_all()
  128. d.notice("현명한 판단력과 뛰어난 육감으로 진짜 메틴석을 격파하였습니다!");
  129. d.notice("잠시후 5층으로 이동합니다.")
  130. clear_server_timer('devil_stone4_fail1', get_server_timer_arg())
  131. clear_server_timer('devil_stone4_fail2', get_server_timer_arg())
  132. clear_server_timer('devil_stone4_fail', get_server_timer_arg())
  133. end
  134. else
  135. server_timer('devil_stone4_stop_timer', 1, get_server_timer_arg())
  136. end
  137. end
  138.  
  139. when devil_stone4_stop_timer.server_timer begin
  140. clear_server_timer('devil_stone4_update', get_server_timer_arg())
  141. end
  142.  
  143. when devil_stone4_end.server_timer begin
  144. if d.select(get_server_timer_arg()) then
  145. d.setf("level", 5)
  146. d.setf("stone_count", 5)
  147. d.notice("봉인의 관문, 5층입니다.")
  148. d.notice("이곳의 수많은 몬스터들이 6층으로 올라가는 결계석을 치키고 있습니다.")
  149. d.notice("그리고 결계를 해제할 수 있는 열쇠는 일부 몬스터가 가지고 있습니다.")
  150. d.notice("20분 내에 결계를 해제하여 6층으로 진행하십시오!")
  151. d.jump_all(special.devil_tower[4][1], special.devil_tower[4][2])
  152. server_timer('devil_stone5_fail1', 5*60, get_server_timer_arg())
  153. clear_server_timer('devil_stone4_update', get_server_timer_arg())
  154.  
  155. -- 5 층은 계속 리젠
  156. d.set_regen_file("data/dungeon/deviltower5_regen.txt")
  157.  
  158. -- 5층 봉인석 리젠
  159. d.spawn_mob(20073, 421, 452)
  160. d.spawn_mob(20073, 380, 460)
  161. d.spawn_mob(20073, 428, 414)
  162. d.spawn_mob(20073, 398, 392)
  163. d.spawn_mob(20073, 359, 426)
  164. end
  165. end
  166.  
  167. when devil_stone5_fail1.server_timer begin
  168. if d.select(get_server_timer_arg()) then
  169. d.notice("15분 남았습니다.")
  170. server_timer('devil_stone5_fail2', 5*60, get_server_timer_arg())
  171. end
  172. end
  173.  
  174. when devil_stone5_fail2.server_timer begin
  175. if d.select(get_server_timer_arg()) then
  176. d.notice("10분 남았습니다.")
  177. server_timer('devil_stone5_fail3', 5*60, get_server_timer_arg())
  178. end
  179. end
  180.  
  181. when devil_stone5_fail3.server_timer begin
  182. if d.select(get_server_timer_arg()) then
  183. d.notice("5분 남았습니다.")
  184. server_timer('devil_stone5_fail', 5*60, get_server_timer_arg())
  185. end
  186. end
  187.  
  188. when devil_stone5_fail.server_timer begin
  189. if d.select(get_server_timer_arg()) then
  190. d.notice("시간제한에 다되어 실패했습니다.")
  191. d.exit_all()
  192. end
  193. end
  194.  
  195. when 1062.kill with pc.in_dungeon() and d.getf("level") == 5 begin
  196. local KILL_COUNT_FOR_DROP_KEY = 50
  197. local n =d.getf("count") + 1
  198. d.setf("count", n)
  199. if n == KILL_COUNT_FOR_DROP_KEY then
  200. -- 열쇠를 드롭
  201. game.drop_item(50084, 1)
  202. d.setf("count", 0)
  203. end
  204. end
  205.  
  206. when devil_stone5.take with item.vnum == 50084 begin
  207. npc.purge()
  208. item.remove()
  209. d.setf("stone_count", d.getf("stone_count") - 1)
  210. if d.getf("stone_count") <= 0 then
  211. d.setf("level", 6)
  212. d.clear_regen()
  213. d.regen_file("data/dungeon/deviltower6_regen.txt")
  214.  
  215. d.notice("모든 결계의 봉인이 해제되었습니다. 6층으로 이동합니다.")
  216. d.notice("사귀왕이 지키고 있는 6층의 모든 몬스터를 제거하십시오.")
  217. d.jump_all(special.devil_tower[5][1], special.devil_tower[5][2])
  218.  
  219. local timer_arg = d.get_map_index()
  220. clear_server_timer('devil_stone5_fail1', timer_arg)
  221. clear_server_timer('devil_stone5_fail2', timer_arg)
  222. clear_server_timer('devil_stone5_fail3', timer_arg)
  223. clear_server_timer('devil_stone5_fail', timer_arg)
  224. else
  225. d.notice("봉인을 해제하였습니다! "..d.getf("stone_count").."개 남았습니다.")
  226. end
  227. end
  228.  
  229. when devil_stone6.kill begin
  230. -- 여기서 연금술사가 있는 맵으로 워프를 합시다
  231. -- 아니면 연금술사 만들어주던지
  232. --d.jump_all(special.devil_tower[6][1], special.devil_tower[6][2])
  233. d.kill_all()
  234. -- d.set_warp_at_eliminate(3*60, 65, 5376+532, 512+596+4)
  235. d.check_eliminated()
  236. local reward_alchemist = {20074, 20075, 20076}
  237. d.spawn_mob(reward_alchemist[number(1,3)], 425, 216);
  238. d.setqf2("deviltower_zone", "can_refine", 1)
  239. end
  240.  
  241. --------------------------------------
  242. -- 6층 진입부터 7층 직전 까지
  243. --------------------------------------
  244.  
  245. when 20074.chat."탑의 상층에 대해서.." with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin
  246. say("사귀탑 무기 대장장이")
  247. say("7층으로 가는 방법이 발견되었다네")
  248. say("들어가기위해선 상당한 능력과 기술이 요한다네")
  249. say("흠....")
  250. say("내가 자네가 위층에 올라갈수 있는지 살펴보니..")
  251. wait()
  252. if pc.level >=75 then
  253. say("사귀탑 무기 대장장이")
  254. say("충분히 올라갈 자격이 있구먼")
  255. say("내가 올려 보내주겠네..")
  256. timer("devil_jump_7", 6)
  257. npc.unlock()
  258. d.purge()
  259. return
  260. end
  261. say("사귀탑 무기 대장장이")
  262. say("아직 자네의 수련도가 부족하여")
  263. say("올라가기 어려울듯 허이...")
  264. say("수련을 쌓고 오게")
  265. say("")
  266. wait()
  267. pc.warp(590500, 110500)
  268. end
  269.  
  270. when 20075.chat."탑의 상층에 대해서.." with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin
  271. say("사귀탑 무기 대장장이")
  272. say("사귀탑 방어구 대장장이")
  273. say("7층으로 가는 방법이 발견되었다네")
  274. say("들어가기위해선 상당한 능력과 기술이 요한다네")
  275. say("흠....")
  276. say("내가 자네가 위층에 올라갈수 있는지 살펴보니..")
  277. wait()
  278. if pc.level >=75 then
  279. say("사귀탑 무기 대장장이")
  280. say("충분히 올라갈 자격이 있구먼")
  281. say("내가 올려 보내주겠네..")
  282. timer("devil_jump_7", 6)
  283. npc.unlock()
  284. d.purge()
  285. return
  286. end
  287.  
  288. say("사귀탑 무기 대장장이")
  289. say("아직 자네의 수련도가 부족하여")
  290. say("올라가기 어려울듯 허이...")
  291. say("수련을 쌓고 오게")
  292. say("")
  293. wait()
  294. pc.warp(590500, 110500)
  295. end
  296.  
  297. when 20076.chat."탑의 상층에 대해서.." with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin
  298. say("사귀탑 무기 대장장이")
  299. say("사귀탑 악세사리 대장장이")
  300. say("7층으로 가는 방법이 발견되었다네")
  301. say("들어가기위해선 상당한 능력과 기술이 요한다네")
  302. say("흠....")
  303. say("내가 자네가 위층에 올라갈수 있는지 살펴보니..")
  304. wait()
  305. if pc.level >=75 then
  306. say("사귀탑 무기 대장장이")
  307. say("충분히 올라갈 자격이 있구먼")
  308. say("내가 올려 보내주겠네..")
  309. timer("devil_jump_7", 6)
  310. npc.unlock()
  311. d.purge()
  312. return
  313. end
  314.  
  315. say("사귀탑 무기 대장장이")
  316. say("아직 자네의 수련도가 부족하여")
  317. say("올라가기 어려울듯 허이...")
  318. say("수련을 쌓고 오게")
  319. say("")
  320. wait()
  321. pc.warp(590500, 110500)
  322. end
  323.  
  324. when devil_jump_7.timer begin
  325. d.clear_regen()
  326.  
  327. d.spawn_mob(8018, 639, 658)
  328. d.spawn_mob(8018, 611, 637)
  329. d.spawn_mob(8018, 596, 674)
  330. d.spawn_mob(8018, 629, 670)
  331.  
  332. d.setf("level", 7)
  333.  
  334. d.jump_all(2048+590, 6656+638)
  335. end
  336.  
  337. when 8018.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
  338. local cont = d.getf("7_stone_kill") + 1
  339. d.setf("7_stone_kill", cont)
  340.  
  341. if cont >= 4 then
  342. d.setf("7_stone_kill", 0)
  343. d.regen_file("data/dungeon/deviltower7_regen.txt")
  344. end
  345. end
  346.  
  347. when 8019.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
  348. game.drop_item(30300, 1)
  349. d.clear_regen()
  350. d.kill_all()
  351.  
  352. say("상자를 열어보자")
  353. say("")
  354.  
  355. d.spawn_mob(33001, 620, 635)
  356. end
  357.  
  358. when 30300.use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
  359. pc.remove_item("30300", 1)
  360.  
  361. local pct = number(1,10)
  362.  
  363. if pct == 1 then
  364. game.drop_item(30302, 1) -- 진짜 지도 드롭
  365. d.notice("윗층으로의 지도가 나타났다");
  366. else
  367. game.drop_item(30301, 1) -- 가짜지도 드롭
  368. d.regen_file("data/dungeon/deviltower7_regen.txt")
  369. end
  370. end
  371.  
  372. when 33001.chat."왠 해골이..." with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
  373. say("내가 사귀타워의 공략에 실패했나 보군..")
  374. say("아무리 봐도 내가 밖으로 빠저나갈 방법이 없는 것 같아..")
  375. say("여기 누워있는 해골처럼 되는 것이 아닐까..")
  376. say("그런데 누구의 해골이지???")
  377. say("")
  378.  
  379. wait()
  380.  
  381. say("해골을 뒤져볼까요?")
  382. say("")
  383.  
  384. if 1 == select("네", "아니요") then
  385. say("...")
  386. say("뒤적뒤적")
  387. say("....")
  388. say("쿡!")
  389.  
  390. wait()
  391.  
  392. d.exit_all()
  393. end
  394. end
  395.  
  396. when 30302.use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
  397. -- 8층으로 워프
  398. if d.getf("level") != 7 then
  399. say("이 지도는 지금 전혀 맞지 않는 것 같다")
  400. say("")
  401.  
  402. pc.remove_item("30302", 1)
  403.  
  404. return
  405. end
  406.  
  407. say("이 지도만 있으면 바로 여기를 통과 할수 있어")
  408. say("")
  409.  
  410. pc.remove_item("30302", 1)
  411. timer("devil_jump_8", 6)
  412. d.clear_regen()
  413. end
  414.  
  415. --------------------------------------------
  416. -- 8층 진입부터 9층 까지
  417. --------------------------------------------
  418. when devil_jump_8.timer begin
  419. d.setf("level", 8)
  420. d.jump_all(2048+590, 6656+403)
  421. d.set_regen_file("data/dungeon/deviltower8_regen.txt")
  422. pc.remove_item(30302, pc.count_item(30302)) -- 진 사귀타워 지우기
  423. end
  424.  
  425. when 1040.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and d.getf("level") == 8 begin
  426. if number(1, 5) == 1 then
  427. if number(1, 10) == 1 then
  428. game.drop_item(30304, 1) -- 진짜 열쇠 드롭
  429. d.clear_regen()
  430. d.kill_all()
  431. d.spawn_mob(20366, 640, 460)
  432. else
  433. game.drop_item(30303, 1) -- 가짜 열쇠 드롭
  434. end
  435. end
  436. end
  437.  
  438. when 20366.take with item.vnum == 30304 and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
  439. -- 봉인 해체 9층 ㄱㄱ
  440. d.clear_regen()
  441. d.kill_all()
  442. npc.purge()
  443. item.remove()
  444.  
  445. timer("devil_jump_9", 6)
  446. end
  447.  
  448. when 20366.chat."여기서 포기!!?" with pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
  449. say("")
  450. say("더 이상은 힘들군, 비석의 힘을 빌려 여기를 벗어나야겠어..")
  451. say("")
  452. wait()
  453.  
  454. d.exit_all()
  455. end
  456.  
  457. ---------------------------------------------
  458. -- 9층 진입부터 완료까지
  459. ---------------------------------------------
  460. when devil_jump_9.timer begin
  461. d.setf("level", 9)
  462. d.jump_all(2048+590, 6656+155)
  463. d.regen_file("data/dungeon/deviltower9_regen.txt")
  464. end
  465.  
  466. when 1093.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
  467. d.kill_all()
  468. d.setqf2("deviltower_zone", "9_done", 1)
  469. notice_multiline(locale.deviltower_Notice_final, d.notice)
  470. server_timer("devil_end_jump", 60, d.get_map_index())
  471. end
  472.  
  473.  
  474. when devil_end_jump.server_timer begin
  475. if d.select (get_server_timer_arg()) then
  476. d.clear_regen()
  477. d.exit_all()
  478. end
  479.  
  480. end
  481. end
  482. end
  483.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement