PHP Code:
quest deviltower_zone begin
state start begin
when login begin
if pc.get_map_index() == 66 then
-- 並非在1樓時, 送返外面.
-- 層數 範圍
-- 1樓 88 577 236 737
-- 2樓 91 343 238 504
-- 3樓 104 107 248 269
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 deviltower_man.chat.locale.deviltower_man_chat begin
if pc . get_level ( ) < 50 then
say ( "Du hast noch nicht genuegend Erfahrung gesammelt. Komme wieder, wenn du Level 50 bist!" )
else
say ( "Moechtest du den Daemonenturm betreten?" )
local s = select ( "Betreten" , "In das Shinsoo Reich teleportieren" , "In das Chunjo Reich teleportieren" , "In das Jinno Reich teleportieren" , "Abbrechen" )
if s == 1 then
pc . warp ( 216500 , 727000 )
end
if s == 5 then
end
if s == 2 then
say ( "Du wirst nun in das Shinsoo Reich teleportiert!" )
local s = select ( "OK" )
pc . warp ( 469300 , 964200 )
end
if s == 3 then
say ( "Du wirst nun in das Chunjo Reich teleportiert!" )
local s = select ( "OK" )
pc . warp ( 55700 , 157900 )
end
if s == 4 then
say ( "Du wirst nun in das Jinno Reich teleportiert!" )
local s = select ( "OK" )
pc . warp ( 969600 , 278400 )
end
end
end
when devil_stone1.kill begin
timer("devil_stone1_1", 6)
end
when devil_stone1_1.timer begin
local mapto7= pc.count_item(30302) -- 消滅不知是否存在的真亡靈塔
pc.remove_item(30302,mapto7)
local boxto7= pc.count_item(30300) -- 消滅不知是否存在的不知名的箱子
pc.remove_item(30300,boxto7)
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_stone2.kill begin
--d.jump_all_local(special.devil_tower[2][1], special.devil_tower[2][2])
--end
when devil_stone3.kill begin
--d.jump_all_local(special.devil_tower[3][1], special.devil_tower[3][2])
--d.set_exit_all_at_eliminate(6)
--d.set_warp_at_eliminate(6, d.get_map_index(), 100, 100)
--d.set_warp_at_eliminate(4, 65, 5376+532, 512+596+4)
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()
--d.exit_all()
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
--for i = 1, 7 do
-- positions[i][1] = positions[i][1] * 100
-- positions[i][2] = positions[i][2] * 100
-- 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)
-- 再現大量怪物及製造真石頭和假石頭
--d.regen_file("data/dungeon/deviltower4_regen.txt")
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("Findet den richtigen Metinstein");
d.notice("und zerst顤t ihn. Die falschen");
d.notice("Metinsteine werden verschwinden!");
d.notice("Ihr habt 15 Minuten zeit!");
end
when devil_stone4_fail1.server_timer begin
if d.select(get_server_timer_arg()) then
d.notice("Verbleibende Zeit: 10 Minuten")
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("Verbleibende Zeit: 5 Minuten")
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("Die Zeit ist abgelaufen")
d.notice("Ihr werdet nun nach drau絽n teleportiert")
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("Die falschen Metinsteine verschwinden..");
end
end
end
else
--d.clear_regen()
--d.regen_file("data/dungeon/deviltower5_regen.txt")
server_timer("devil_stone4_end", 5, get_server_timer_arg())
d.notice("Ihr habt den richtigen Metinstein")
d.notice("zerst顤t. Ihr werdet nun in die n踄hste")
d.notice("Etage teleportiert")
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("Du bist nun in der 5. Ebene ")
d.notice("猈fne alle Alten Siegel um in die n踄hste Ebene zu gelangen.")
d.notice("Du hast 20 Minuten Zeit um alle Siegel zu 鐪fnen.")
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())
-- 5樓繼續再現
d.set_regen_file("data/dungeon/deviltower5_regen.txt")
-- 5樓封印石再現
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("Verbleibende Zeit: 15 Minuten")
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("Verbleibende Zeit: 10 Minuten")
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("Verbleibende Zeit: 5 Minuten")
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("Die Zeit ist abgelaufen")
d.notice("Ihr werdet nun nach drau絽n teleportiert")
d.exit_all()
end
end
--when devil_stone4.kill begin
--d.setf("level", 5)
--d.setf("stone_count", 4)
--d.clear_regen()
--d.regen_file("data/dungeon/deviltower5_regen.txt")
--d.jump_all_local(special.devil_tower[4][1], special.devil_tower[4][2])
--end
when 1062.kill with pc.in_dungeon() and d.getf("level") == 5 begin
local KILL_COUNT_FOR_DROP_KEY = 50
--if is_test_server() then
--KILL_COUNT_FOR_DROP_KEY = 1
--end
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")
d.notice("Ihr habt alle alten Siegel ge鐪fnet. Ihr werdet nun")
d.notice("in die 6. Ebene teleportiert.")
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("Es verbleibt eine Anzahl von "..d.getf("stone_count").." Siegeln")
end
end
when devil_stone6.kill begin
-- 傳送到煉聖所在的地圖
-- 否則,開設一個新煉聖
--d.jump_all(special.devil_tower[6][1], special.devil_tower[6][2])
d.kill_all()
-- d.set_warp_at_eliminate(3*60, 65, 5376+532, 512+596+4)
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
--------------------------------------
-- 由進入7樓至到達8樓之前
--------------------------------------
when 20074.chat."Die h鐬eren Etagen.." with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
say_title(""..mob_name(20074).."")
say("Ihr m鐼htet in die 7.Etage?")
say("Ihr haben Glk! Heute erlaube ich es ihnen vielleicht!")
say("")
say("Aber voher muss ich euch noch pren..")
say("Mal sehen..")
wait()
if pc.level >=75 then
say("Ich erlaube euch weiterzugehen!")
say("Viel Glk und passt auf euch auf da oben!")
timer("devil_jump_7", 6)
return
end
say_reward("Betreten der 7.Etage nicht erlaubt!")
say("")
say("Ihr seid nicht qualifiziert genug!")
say("Erreicht LvL 75 oder h鐬er,")
say("damit ihr eure Fertigkeiten steigern k霵nt")
say("und kommt dann wieder!")
say("")
wait()
pc.warp(590500, 110500)
return
end
when 20075.chat."Die h鐬eren Etagen.." with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
say_title(""..mob_name(20075).."")
say("Ihr m鐼htet in die 7.Etage?")
say("Ihr haben Glk! Heute erlaube ich es ihnen vielleicht!")
say("")
say("Aber voher muss ich euch noch pren..")
say("Mal sehen..")
wait()
if pc.level >=75 then
say("Ich erlaube euch weiterzugehen!")
say("Viel Glk und passt auf euch auf da oben!")
timer("devil_jump_7", 6)
return
end
say_reward("Betreten der 7.Etage nicht erlaubt!")
say("")
say("Ihr seid nicht qualifiziert genug!")
say("Erreicht LvL 75 oder h鐬er,")
say("damit ihr eure Fertigkeiten steigern k霵nt")
say("und kommt dann wieder!")
say("")
wait()
pc.warp(590500, 110500)
return
end
when 20076.chat."Die h鐬eren Etagen.." with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
say_title(""..mob_name(20076).."")
say("Ihr m鐼htet in die 7.Etage?")
say("Ihr haben Glk! Heute erlaube ich es ihnen vielleicht!")
say("")
say("Aber voher muss ich euch noch pren..")
say("Mal sehen..")
wait()
if pc.level >=75 then
say("Ich erlaube euch weiterzugehen!")
say("Viel Glk und passt auf euch auf da oben!")
timer("devil_jump_7", 6)
return
end
say_reward("Betreten der 7.Etage nicht erlaubt!")
say("")
say("Ihr seid nicht qualifiziert genug!")
say("Erreicht LvL 75 oder h鐬er,")
say("damit ihr eure Fertigkeiten steigern k霵nt")
say("und kommt dann wieder!")
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)
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)
local pct = number(1,10)
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樓
say("Die Karte wird euch alle in die n踄hste Ebene")
say("des D鄝onenturms bringen.")
pc.remove_item("30302", 1)
timer("devil_jump_8", 6)
d.clear_regen()
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 1040.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
local pct1 = number(1, 5)
if pct1 == 1 then
local pct2 = number(1, 10)
if pct2 == 1 then
-- 掉下真鎖匙
game.drop_item(30304, 1)
else
-- 掉下假鎖匙
game.drop_item(30303, 1)
end
else
return
end
end
when 20366.take with item.vnum == 30304 begin
-- 9樓封印解除
npc.purge()
item.remove()
timer("devil_jump_9", 6)
end
---------------------------------------------
-- 由進入9樓至結束
---------------------------------------------
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()
d.notice("Ihr habt den Sensenmann get飆et..");
d.notice("Ihr werdet in einer Minute aus dem Run teleportiert.");
notice_all(pc.get_name().." hat den Sensenmann bezwungen.")
server_timer('dragonlair_exit', 60, pc.get_map_index())
pc.setqf("dragon_lair", get_time()+60*10)
end
when dragonlair_exit.server_timer begin
if d.select(get_server_timer_arg()) then
d.exit_all()
end
end
end
end
Ich möchte das bei jedem die Zin-Karten nach dem benutzen einer Zin-Karte entfernt werden. Das Funktioniert leider nur bei dem Charakter, der die Zin-Karte aktiviert. Der zweite Charakter kann alle Karten behalten.