465 lines
14 KiB
Plaintext
465 lines
14 KiB
Plaintext
quest deviltower_zone begin
|
||
state start begin
|
||
when login begin
|
||
if pc.get_map_index() == 66 then
|
||
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
|
||
pc.warp((5376+532)*100, (512+596+4)*100, 65)
|
||
end
|
||
pc.set_warp_location(65, 5376+532, 512+596+4)
|
||
elseif pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 then
|
||
pc.set_warp_location(65, 5376+532, 512+596+4)
|
||
end
|
||
end
|
||
|
||
when logout begin
|
||
if pc.count_item(30300) >= 1 then
|
||
pc.remove_item(30300, pc.count_item(30300))
|
||
end
|
||
-- not used in the game
|
||
-- pc.remove_item(30301, pc.count_item(30301))
|
||
if pc.count_item(30302) >= 1 then
|
||
pc.remove_item(30302, pc.count_item(30302))
|
||
end
|
||
end
|
||
|
||
when deviltower_man.chat.gameforge.deviltower_zone._10_npcChat begin
|
||
if pc.get_level() < 40 then
|
||
say_title(gameforge.deviltower_zone._20_sayTitle)
|
||
say(gameforge.deviltower_zone._30_say)
|
||
else
|
||
say_title(gameforge.deviltower_zone._20_sayTitle)
|
||
say(gameforge.deviltower_zone._40_say)
|
||
local s = select(gameforge.locale.monkey_dungeon.enter, gameforge.locale.monkey_dungeon.no_enter)
|
||
if s == 1 then
|
||
pc.warp(216500,727000)
|
||
end
|
||
end
|
||
end
|
||
when devil_stone1.kill begin
|
||
timer("devil_stone1_1", 6)
|
||
end
|
||
when devil_stone1_1.timer begin
|
||
d.new_jump_all(66, special.devil_tower[1][1], special.devil_tower[1][2])
|
||
d.regen_file("data/dungeon/deviltower2_regen.txt")
|
||
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")
|
||
end
|
||
when devil_stone3.kill begin
|
||
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")
|
||
d.check_eliminated()
|
||
end
|
||
|
||
function get_4floor_stone_pos()
|
||
local positions =
|
||
{
|
||
{368, 629}, {419, 630}, {428, 653}, {422, 679},
|
||
{395, 689}, {369, 679}, {361, 658},
|
||
}
|
||
for i = 1, 6 do
|
||
local j = number(i, 7)
|
||
if i != j then
|
||
local t = positions[i];
|
||
positions[i] = positions[j];
|
||
positions[j] = t;
|
||
end
|
||
end
|
||
return positions
|
||
end
|
||
|
||
when 8016.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||
d.setf("level", 4)
|
||
local positions = deviltower_zone.get_4floor_stone_pos()
|
||
|
||
for i = 1, 6 do
|
||
chat(positions[i][1], positions[i][2])
|
||
d.set_unique("fake" .. i , d.spawn_mob(8017, positions[i][1], positions[i][2]))
|
||
end
|
||
|
||
chat(positions[7][1], positions[7][2])
|
||
|
||
local vid = d.spawn_mob(8017, positions[7][1], positions[7][2])
|
||
chat(vid)
|
||
d.set_unique("real", vid)
|
||
server_loop_timer('devil_stone4_update', 10, pc.get_map_index())
|
||
server_timer('devil_stone4_fail1', 5*60, pc.get_map_index())
|
||
|
||
notice_multiline(gameforge.deviltower_zone._50_dNotice,d.notice)
|
||
|
||
end
|
||
|
||
when devil_stone4_fail1.server_timer begin
|
||
if d.select(get_server_timer_arg()) then
|
||
notice_multiline(gameforge.deviltower_zone._60_dNotice,d.notice)
|
||
server_timer('devil_stone4_fail2', 5*60, get_server_timer_arg())
|
||
end
|
||
end
|
||
|
||
when devil_stone4_fail2.server_timer begin
|
||
if d.select(get_server_timer_arg()) then
|
||
notice_multiline(gameforge.deviltower_zone._70_dNotice,d.notice)
|
||
server_timer('devil_stone4_fail', 5*60, get_server_timer_arg())
|
||
end
|
||
end
|
||
|
||
when devil_stone4_fail.server_timer begin
|
||
if d.select(get_server_timer_arg()) then
|
||
notice_multiline(gameforge.deviltower_zone._80_dNotice,d.notice)
|
||
d.exit_all()
|
||
clear_server_timer('devil_stone4_update', get_server_timer_arg())
|
||
end
|
||
end
|
||
|
||
when devil_stone4_update.server_timer begin
|
||
if d.select(get_server_timer_arg()) then
|
||
if not d.is_unique_dead("real") then
|
||
for i = 1, 6 do
|
||
if d.getf("fakedead" .. i) == 0 then
|
||
if d.unique_get_hp_perc("fake" .. i) < 50 then
|
||
d.purge_unique("fake" .. i)
|
||
d.setf("fakedead" .. i, 1)
|
||
notice_multiline(gameforge.deviltower_zone._90_dNotice,d.notice)
|
||
end
|
||
end
|
||
end
|
||
else
|
||
server_timer("devil_stone4_end", 5, get_server_timer_arg())
|
||
d.kill_all()
|
||
notice_multiline(gameforge.deviltower_zone._100_dNotice,d.notice)
|
||
clear_server_timer('devil_stone4_fail1', get_server_timer_arg())
|
||
clear_server_timer('devil_stone4_fail2', get_server_timer_arg())
|
||
clear_server_timer('devil_stone4_fail', get_server_timer_arg())
|
||
end
|
||
else
|
||
server_timer('devil_stone4_stop_timer', 1, get_server_timer_arg())
|
||
end
|
||
end
|
||
|
||
when devil_stone4_stop_timer.server_timer begin
|
||
clear_server_timer('devil_stone4_update', get_server_timer_arg())
|
||
end
|
||
|
||
when devil_stone4_end.server_timer begin
|
||
if d.select(get_server_timer_arg()) then
|
||
clear_server_timer('devil_stone4_update', get_server_timer_arg())
|
||
clear_server_timer('devil_stone4_fail1', get_server_timer_arg())
|
||
clear_server_timer('devil_stone4_fail2', get_server_timer_arg())
|
||
clear_server_timer('devil_stone4_fail', get_server_timer_arg())
|
||
|
||
d.setf("level", 5)
|
||
d.setf("stone_count", 5)
|
||
notice_multiline(gameforge.deviltower_zone._110_dNotice,d.notice)
|
||
d.jump_all(special.devil_tower[4][1], special.devil_tower[4][2])
|
||
server_timer('devil_stone5_fail1', 5*60, get_server_timer_arg())
|
||
clear_server_timer('devil_stone4_update', get_server_timer_arg())
|
||
|
||
d.set_regen_file("data/dungeon/deviltower5_regen.txt")
|
||
|
||
d.spawn_mob(20073, 421, 452)
|
||
d.spawn_mob(20073, 380, 460)
|
||
d.spawn_mob(20073, 428, 414)
|
||
d.spawn_mob(20073, 398, 392)
|
||
d.spawn_mob(20073, 359, 426)
|
||
end
|
||
end
|
||
when devil_stone5_fail1.server_timer begin
|
||
if d.select(get_server_timer_arg()) then
|
||
notice_multiline(gameforge.deviltower_zone._120_dNotice,d.notice)
|
||
server_timer('devil_stone5_fail2', 5*60, get_server_timer_arg())
|
||
end
|
||
end
|
||
|
||
when devil_stone5_fail2.server_timer begin
|
||
if d.select(get_server_timer_arg()) then
|
||
notice_multiline(gameforge.deviltower_zone._60_dNotice,d.notice)
|
||
server_timer('devil_stone5_fail3', 5*60, get_server_timer_arg())
|
||
end
|
||
end
|
||
|
||
when devil_stone5_fail3.server_timer begin
|
||
if d.select(get_server_timer_arg()) then
|
||
notice_multiline(gameforge.deviltower_zone._70_dNotice,d.notice)
|
||
server_timer('devil_stone5_fail', 5*60, get_server_timer_arg())
|
||
end
|
||
end
|
||
|
||
when devil_stone5_fail.server_timer begin
|
||
if d.select(get_server_timer_arg()) then
|
||
notice_multiline(gameforge.deviltower_zone._80_dNotice,d.notice)
|
||
d.exit_all()
|
||
end
|
||
end
|
||
|
||
|
||
when 1062.kill with pc.in_dungeon() and d.getf("level") == 5 begin
|
||
local KILL_COUNT_FOR_DROP_KEY = 50
|
||
local n =d.getf("count") + 1
|
||
d.setf("count", n)
|
||
if n == KILL_COUNT_FOR_DROP_KEY then
|
||
game.drop_item(50084, 1)
|
||
d.setf("count", 0)
|
||
end
|
||
end
|
||
|
||
when devil_stone5.take with item.vnum == 50084 begin
|
||
npc.purge()
|
||
item.remove()
|
||
d.setf("stone_count", d.getf("stone_count") - 1)
|
||
if d.getf("stone_count") <= 0 then
|
||
d.setf("level", 6)
|
||
d.clear_regen()
|
||
d.regen_file("data/dungeon/deviltower6_regen.txt")
|
||
|
||
notice_multiline(gameforge.deviltower_zone._130_dNotice,d.notice)
|
||
d.jump_all(special.devil_tower[5][1], special.devil_tower[5][2])
|
||
clear_server_timer('devil_stone5_fail1', get_server_timer_arg())
|
||
clear_server_timer('devil_stone5_fail2', get_server_timer_arg())
|
||
clear_server_timer('devil_stone5_fail3', get_server_timer_arg())
|
||
clear_server_timer('devil_stone5_fail', get_server_timer_arg())
|
||
else
|
||
d.notice(string.format(gameforge.deviltower_zone._140_dNotice, d.getf("stone_count")))
|
||
end
|
||
end
|
||
|
||
when devil_stone6.kill begin
|
||
d.kill_all()
|
||
notice_multiline(gameforge.deviltower_zone._150_dNotice,d.notice)
|
||
d.check_eliminated()
|
||
notice_multiline(gameforge.deviltower_zone._160_dNotice,d.notice)
|
||
local reward_alchemist = {20074, 20075, 20076}
|
||
d.spawn_mob(reward_alchemist[number(1,3)], 425, 216);
|
||
d.setqf("can_refine", 1)
|
||
end
|
||
|
||
|
||
when 20074.chat.gameforge.deviltower_zone._170_npcChat with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin
|
||
say_title(mob_name(20074))
|
||
say(gameforge.deviltower_zone._190_say)
|
||
wait()
|
||
if pc.level >=75 then
|
||
say_title(mob_name(20074))
|
||
|
||
say(gameforge.deviltower_zone._200_say)
|
||
local s= select(gameforge.deviltower_zone._210_select, gameforge.locale.cancel, gameforge.deviltower_zone._220_select)
|
||
if s==3 then
|
||
pc.warp(590500, 110500)
|
||
return
|
||
end
|
||
if s==2 then
|
||
return
|
||
end
|
||
|
||
timer("devil_jump_7", 6)
|
||
npc.unlock()
|
||
d.purge()
|
||
return
|
||
end
|
||
say_title(mob_name(20074))
|
||
say(gameforge.deviltower_zone._230_say)
|
||
wait()
|
||
pc.warp(590500, 110500)
|
||
return
|
||
end
|
||
|
||
when 20075.chat.gameforge.deviltower_zone._170_npcChat with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin
|
||
say_title(mob_name(20075))
|
||
say(gameforge.deviltower_zone._190_say)
|
||
wait()
|
||
if pc.level >=75 then
|
||
say_title(mob_name(20075))
|
||
|
||
say(gameforge.deviltower_zone._200_say)
|
||
local s= select(gameforge.deviltower_zone._210_select, gameforge.deviltower_zone._220_select)
|
||
if s==3 then
|
||
pc.warp(590500, 110500)
|
||
return
|
||
end
|
||
if s==2 then
|
||
return
|
||
end
|
||
|
||
timer("devil_jump_7", 6)
|
||
npc.unlock()
|
||
d.purge()
|
||
return
|
||
end
|
||
say_title(mob_name(20075))
|
||
say(gameforge.deviltower_zone._230_say)
|
||
wait()
|
||
pc.warp(590500, 110500)
|
||
return
|
||
end
|
||
when 20076.chat.gameforge.deviltower_zone._170_npcChat with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin
|
||
say_title(mob_name(20076))
|
||
say(gameforge.deviltower_zone._190_say)
|
||
wait()
|
||
if pc.level >=75 then
|
||
say_title(mob_name(20076))
|
||
|
||
say(gameforge.deviltower_zone._200_say)
|
||
local s= select(gameforge.deviltower_zone._210_select, gameforge.deviltower_zone._220_select)
|
||
if s==3 then
|
||
pc.warp(590500, 110500)
|
||
return
|
||
end
|
||
if s==2 then
|
||
return
|
||
end
|
||
|
||
timer("devil_jump_7", 6)
|
||
npc.unlock()
|
||
d.purge()
|
||
return
|
||
end
|
||
say_title(mob_name(20076))
|
||
say(gameforge.deviltower_zone._230_say)
|
||
wait()
|
||
pc.warp(590500, 110500)
|
||
return
|
||
end
|
||
when devil_jump_7.timer begin
|
||
d.clear_regen()
|
||
|
||
d.spawn_mob(8018, 639, 658)
|
||
d.spawn_mob(8018, 611, 637)
|
||
d.spawn_mob(8018, 596, 674)
|
||
d.spawn_mob(8018, 629, 670)
|
||
|
||
d.setf("level", 7)
|
||
|
||
|
||
notice_multiline(gameforge.deviltower_zone._240_dNotice,d.notice)
|
||
d.jump_all(2048+590, 6656+638)
|
||
end
|
||
|
||
when 8018.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||
local cont = d.getf("7_stone_kill") + 1
|
||
d.setf("7_stone_kill", cont)
|
||
|
||
if cont >= 4 then
|
||
d.setf("7_stone_kill", 0)
|
||
d.regen_file("data/dungeon/deviltower7_regen.txt")
|
||
end
|
||
end
|
||
|
||
when 8019.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||
game.drop_item(30300, 1)
|
||
d.clear_regen()
|
||
d.kill_all()
|
||
say("<22><><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD><EEBAB8>")
|
||
say("")
|
||
d.spawn_mob(33001, 620, 635)
|
||
end
|
||
|
||
when 30300.use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||
pc.remove_item("30300", 1)
|
||
|
||
local pct = number(1,10)
|
||
|
||
if pct == 1 then
|
||
game.drop_item(30302, 1)
|
||
d.notice("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD>");
|
||
else
|
||
game.drop_item(30301, 1)
|
||
d.regen_file("data/dungeon/deviltower7_regen.txt")
|
||
end
|
||
end
|
||
when 33001.chat."<22><> <20>ذ<EFBFBD><D8B0><EFBFBD>..." with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||
say("<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> <20><><EFBFBD><EFBFBD>..")
|
||
say("<22>ƹ<EFBFBD><C6B9><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>..")
|
||
say("<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20>ذ<EFBFBD>ó<EFBFBD><C3B3> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ƴұ<C6B4>..")
|
||
say("<22><EFBFBD><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ذ<EFBFBD><D8B0><EFBFBD><EFBFBD><EFBFBD>???")
|
||
say("")
|
||
|
||
wait()
|
||
|
||
say("<22>ذ<EFBFBD><D8B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?")
|
||
say("")
|
||
|
||
if 1 == select("<22><>", "<22>ƴϿ<C6B4>") then
|
||
say("...")
|
||
say("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
say("....")
|
||
say("<22><>!")
|
||
|
||
wait()
|
||
|
||
d.exit_all()
|
||
end
|
||
end
|
||
|
||
when 30302.use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||
if d.getf( "level" ) != 7 then
|
||
say("<22><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>")
|
||
say("")
|
||
pc.remove_item( "30302", 1)
|
||
return
|
||
end
|
||
|
||
say_title(gameforge.blacksmith._40_sayTitle)
|
||
say(gameforge.deviltower_zone._250_say)
|
||
pc.remove_item("30302", 1)
|
||
timer("devil_jump_8", 6)
|
||
d.clear_regen()
|
||
end
|
||
|
||
when devil_jump_8.timer begin
|
||
d.setf("level", 8)
|
||
|
||
notice_multiline(gameforge.deviltower_zone._260_dNotice,d.notice)
|
||
d.jump_all(2048+590, 6656+403)
|
||
d.set_regen_file("data/dungeon/deviltower8_regen.txt")
|
||
pc.remove_item(30302, pc.count_item(30302))
|
||
end
|
||
|
||
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
|
||
if number(1, 5) == 1 then
|
||
if number(1, 10) == 1 then
|
||
game.drop_item(30304, 1)
|
||
d.clear_regen()
|
||
d.kill_all()
|
||
d.spawn_mob(20366, 640, 460)
|
||
else
|
||
game.drop_item(30303, 1)
|
||
end
|
||
end
|
||
end
|
||
|
||
when 20366.take with item.vnum == 30304 and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||
d.clear_regen()
|
||
d.kill_all()
|
||
npc.purge()
|
||
item.remove()
|
||
timer("devil_jump_9", 6)
|
||
end
|
||
|
||
when 20366.chat."<22><><EFBFBD>⼭ <20><><EFBFBD><EFBFBD>!!?" with pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||
say("")
|
||
say("<22><> <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD>鱺, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>⸦ <20><><EFBFBD><EFBFBD>߰ھ<DFB0>..")
|
||
say("")
|
||
wait()
|
||
|
||
d.exit_all()
|
||
end
|
||
when devil_jump_9.timer begin
|
||
d.setf("level", 9)
|
||
|
||
|
||
notice_multiline(gameforge.deviltower_zone._270_dNotice,d.notice)
|
||
d.jump_all(2048+590, 6656+155)
|
||
d.regen_file("data/dungeon/deviltower9_regen.txt")
|
||
end
|
||
|
||
when 1093.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||
d.kill_all()
|
||
|
||
|
||
notice_multiline(gameforge.deviltower_zone._280_dNotice,d.notice)
|
||
timer("devil_end_jump", 60)
|
||
end
|
||
|
||
when devil_end_jump.timer begin
|
||
d.clear_regen()
|
||
d.exit_all()
|
||
end
|
||
end
|
||
end
|