--[[
questlib.lua:
special.devil_tower =
{
{2048 + 126, 6656 + 384},
{2048 + 134, 6656 + 147},
{2048 + 369, 6656 + 629},
{2048 + 369, 6656 + 401},
{2048 + 374, 6656 + 167},
{2048 + 579, 6656 + 616},
{2048 + 578, 6656 + 392},
2048 + 575, 6656 + 148},
}
]]
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 20348.chat."Войти в Башню Демонов " begin
if pc.get_level() < 40 then
say_title(mob_name(npc.get_race())..": ")
say("Войти в Башню Демонов могут только игроки ")
say("40 уровня и выше. ")
else
say("Вы уверены, что хотите войти в Башню Демонов? ")
if select("Да, уверен ", "Я передумал") == 2 then
return
end
pc.remove_item(30302, pc.count_item(30302))
pc.remove_item(30300, pc.count_item(30300))
pc.warp(216500, 727000)
end
end
when 8015.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 1091.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())
d.notice("Найдите и разрушьте настоящий метин. У вас есть 15 минут. ")
end
when devil_stone4_fail1.server_timer begin
if d.select(get_server_timer_arg()) then
d.notice("У вас осталось 10 минут. ")
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
d.notice("У вас осталось 5 минут. ")
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
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)
d.notice("Вы уничтожили фальшивый метин. ")
end
end
end
else
server_timer("devil_stone4_end", 5, get_server_timer_arg())
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
d.setf("level", 5)
d.setf("stone_count", 5)
d.notice("Убивайте демонов, чтобы выбить из них ключи. Переносите ключи на печати, чтобы открыть их. ")
d.notice("У вас есть 20 минут. ")
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
d.notice("У вас осталось 15 минут. ")
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
d.notice("У вас осталось 10 минут. ")
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
d.notice("У вас осталось 5 минут. ")
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
d.notice("Время вышло. ")
d.exit_all()
end
end
when 1062.kill with pc.in_dungeon() and d.getf("level") == 5 begin
local n = d.getf("count") + 1
d.setf("count", n)
if n == 50 then
game.drop_item(50084, 1)
d.setf("count", 0)
end
end
when 20073.take with item.get_id() and item.get_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")
d.notice("Вы открыли все печати. Сейчас вы будете телепортированы на следующий этаж. ")
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())
d.jump_all(special.devil_tower[5][1], special.devil_tower[5][2])
else
d.notice("Осталось открыть "..d.getf("stone_count").." печатей. ")
end
end
when 1092.kill begin
d.kill_all()
d.check_eliminated()
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."Подняться выше " or 20075.chat."Подняться выше " or 20076.chat."Подняться выше " with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
say_title(mob_name(npc.get_race())..": ")
if pc.get_level() < 75 then
say("Подняться на следующий этаж могут ")
say("только игроки 75 уровня и выше. ")
if select("Выйти из Башни Демона ", "Закрыть ") == 2 then
return
end
pc.warp(590500, 110500)
else
say("Вы уверены, что хотите подняться выше? ")
if select("Да, уверен ", "Нет, я передумал ") == 2 then
return
end
d.notice(pc.get_name().." решил телепортировать всех на следующий этаж. ")
timer("devil_jump_7", 6)
end
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)
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.set_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)
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)
if number(1, 10) == 1 then
game.drop_item(30302, 1)
d.clear_regen()
-- else
-- game.drop_item(30301, 1)
end
end
when 30302.use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
item.remove()
d.notice("Сейчас вы будете телепортированы на следующий этаж. ")
timer("devil_jump_8", 6)
d.clear_regen()
end
when devil_jump_8.timer begin
d.setf("level", 8)
d.jump_all(2048 + 590, 6656 + 403)
d.set_regen_file("data/dungeon/deviltower8_regen.txt")
d.spawn_mob(20366, 640, 460)
end
when 1040.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
if number(1, 5) == 1 then
if number(1, 10) == 1 then
game.drop_item(30304, 1)
-- else
-- game.drop_item(30303, 1)
end
end
end
when 20366.take with item.get_id() and item.get_vnum() == 30304 begin
npc.purge()
item.remove()
timer("devil_jump_9", 6)
end
when devil_jump_9.timer begin
d.setf("level", 9)
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()
timer("devil_end_jump", 60)
end
when devil_end_jump.timer begin
d.exit_all()
end
end
end