Da noch immer viele Leute fragen, wegen einer DT Quest, welche auch auf den neuen Game Revisionen funktionieren, hab ich meine schnell umgeschrieben.
Im Grunde wurde nur .kill durch kill with npc.get_race() umgeschrieben, des weiteren ist es die aktuelle .sg quest (übersetzt) ohne Timerbug.
Code:
--Quest modified by .Colossus.
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, 22)
end
pc.set_warp_location(22, 5376+532, 512+596+4)
elseif pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 then
pc.set_warp_location(22, 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
if pc.count_item(30302) >= 1 then
pc.remove_item(30302, pc.count_item(30302))
end
end
when deviltower_man.chat."Dämonenturm" begin
say_title("Wächter des Dämonturmes")
if pc . get_level ( ) < 40 then
say("Du hast noch nicht genügend Erfahrung gesammelt.")
say("Komme wieder, wenn du Level 40 bist!")
return
end
say("Möchtest du den Dämonenturm betreten?")
local s = select ("Betreten", "Abbrechen")
if s == 1 then
pc.warp(216500,727000)
end
end
when kill with npc.get_race() == 8015 begin
timer("devil_stone1_1", 8)
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 kill with npc.get_race() == 1091 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 kill with npc.get_race() == 8016 and 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
d.set_unique("fake" .. i , d.spawn_mob(8017, positions[i][1], positions[i][2]))
end
local vid = d.spawn_mob(8017, positions[7][1], positions[7][2])
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("Du bist nun auf der 4ten Ebene.");
d.notice("Viele falsche Metinsteine werden deine Sinne und Verstand blenden.");
d.notice("Finde den richtigen Metinstein innerhalb 15 Minuten");
d.notice("Es ist der einzige Weg um zur nächsten Ebene zu gelangen.");
end
when devil_stone4_fail1.server_timer begin
if d.select(get_server_timer_arg()) then
d.notice("Noch 10 Minuten verbleibend")
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("Noch 5 Minuten verbleibend")
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()) and d.getf("level") == 4 then
d.notice("Die Zeit ist abgelaufen.")
d.exit_all()
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("Der falsche Metinstein verschwindet...");
end
end
end
else
server_timer("devil_stone4_end", 5, get_server_timer_arg())
d.notice("Du hast einen guten Instinkt bewiesen.");
d.notice("Du hast den richtigen Metinstein zerstört.")
d.purge()
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)
d.jump_all(special.devil_tower[4][1], special.devil_tower[4][2])
d.notice("Du bist nun auf der 5ten Ebene.")
d.notice("Töte die Monster um Schlüsselsteine zu erhalten.")
d.notice("Diese werden die Tore öffnen.")
d.notice("Öffne 5 Tore in 20 Minuten um")
d.notice("auf die nächste Ebene zu gelangen!")
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("Noch 15 Minuten verbleibend")
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("Noch 10 Minuten verbleibend")
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("Noch 5 Minuten verbleibend")
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()) and d.getf("level") == 5 then
d.notice("Die Zeit ist abgelaufen.")
d.exit_all()
end
end
when kill with npc.get_race() == 1062 and pc.in_dungeon() and d.getf("level") == 5 begin
local KILL_COUNT_FOR_DROP_KEY = 50
local n =d.getf("countzi") + 1
d.setf("countzi", n)
if n == KILL_COUNT_FOR_DROP_KEY then
game.drop_item(50084, 1)
d.setf("countzi", 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.clear_regen()
d.kill_all()
d.notice("Du hast das letzte Siegel geöffnet. Du wirst")
d.notice("nun zur 6ten Ebene gelangen!")
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.setf("level", 6)
d.new_jump_all(66, 2420, 6822)
d.regen_file("data/dungeon/deviltower6_regen.txt")
d.notice("Vernichte alle Dämonen auf dem 6ten Ebene")
d.notice("bevor du den König tötest!")
else
d.notice("Du hast ein Siegel geöffnet! Es verbleiben "..d.getf("stone_count")..".")
end
end
when kill with npc.get_race() == 1092 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)
d.spawn_mob(20378, 419, 221)
end
when 20074.chat."Obere Ebenen des Dämonenturms" 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("")
say("Du hast einen Weg zur 7ten Ebene gefunden.")
say("Es braucht spezielle Fähigkeiten um hier hochzukommen.")
say("Hmmmm...")
say("Du siehst stark genug aus um hier zu überleben.....")
wait()
if pc.level >=75 then
say_title(""..mob_name(20074)..":")
say("")
say("You are good to go up.")
say("I will let you know the way..")
timer("devil_jump_7", 6)
npc.unlock()
d.purge()
return
end
say_title(""..mob_name(20074)..":")
say("")
say("Du must mehr trainieren um hier hochzukommen.")
say("Komm wieder wenn du genug Erfahrung gesammelt hast.")
say("")
wait()
pc.warp(50011800, 50009300)
return
end
when 20075.chat."Top floors of Demon Tower" 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("")
say("Du hast einen Weg zur 7ten Ebene gefunden.")
say("Es braucht spezielle Fähigkeiten um hier hochzukommen.")
say("Hmmmm...")
say("Du siehst stark genug aus um hier zu überleben.....")
wait()
if pc.level >=75 then
say_title(""..mob_name(20075)..":")
say("")
say("You are good to go up.")
say("I will let you know the way..")
timer("devil_jump_7", 6)
npc.unlock()
d.purge()
return
end
say_title(""..mob_name(20075)..":")
say("")
say("Du must mehr trainieren um hier hochzukommen.")
say("Komm wieder wenn du genug Erfahrung gesammelt hast.")
say("")
wait()
pc.warp(50011800, 50009300)
return
end
when 20076.chat."Top floors of Demon Tower" 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("")
say("Du benötigst spezielle Fähigkeiten um hochzukommen.")
say("Hmmmm...")
say("Du siehst stark genug aus um hier zu überleben.....")
wait()
if pc.level >=75 then
say_title(""..mob_name(20076)..":")
say("")
say("Du bist in Ordnung.")
say("Ich werde dir den Weg zeigen..")
timer("devil_jump_7", 6)
npc.unlock()
d.purge()
return
end
say_title(""..mob_name(20076)..":")
say("")
say("Du brauchst mehr Training um hier hochzukommen.")
say("Komme wieder wenn du ein höheres Level erreicht hast.")
say("")
wait()
pc.warp(50011800, 50009300)
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)
d.jump_all(2048+590, 6656+638)
end
when kill with npc.get_race() == 8018 and 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 kill with npc.get_race() == 8031 and 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)
local pct = number(1,5)
if pct == 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
-- 8ÃþÀ¸·Î ¿öÇÁ
if d.getf( "level" ) != 7 then
pc.remove_item( "30302", 1)
return
end
say("Mit dieser Karte bringe ich dich auf die nächste Ebene!")
pc.remove_item("30302", 1)
timer("devil_jump_8", 12)
end
--------------------------------------------
-- 8Ãþ ÁøÀÔºÎÅÍ 9Ãþ ±îÁö
--------------------------------------------
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)
local _count = pc.count_item(30302)
pc.remove_item(30302,_count)
end
when kill with npc.get_race() == 1040 and pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
if d.getf("level") < 9 then
local pct1 = number(1, 8)
if pct1 == 1 then
local pct2 = number(1, 4)
if pct2 == 1 then
-- ÁøÂ¥ ¿*¼è µå·Ó
game.drop_item(30304, 1)
else
-- °¡Â¥ ¿*¼è µå·Ó
game.drop_item(30303, 1)
end
else
return
end
end
end
when 20366.take with item.vnum == 30304 begin
-- ºÀÀÎ ÇØÃ¼ 9Ãþ ¤¡¤¡
npc.purge()
item.remove()
d.clear_regen()
d.kill_all()
timer("timerhuhu", 15)
end
when timerhuhu.timer begin
d.jump_all(2048+590, 6656+155)
d.regen_file("data/dungeon/deviltower9_regen.txt")
end
when kill with npc.get_race() == 1093 and pc.in_dungeon() begin
timer("devil_end_jump", 60)
end
when devil_end_jump.timer begin
d.exit_all()
end
end
end






