quest hwang_temple_dungeon begin
state start begin
function hybrid_settings()
return {
map=400, entry_map=65, min_level=55, max_level=80,
ticket=900017, boss=65024, x=12700, y=4220, test_x=12700, test_y=4220,
exit_map=65, exit_x=5918, exit_y=1002, cooldown=1800
}
end
function stone_slots()
return {{124,139},{147,124},{124,108},{101,124}}
end
function wave_slots()
return {{65019,140,88,2},{65020,140,88,2},{65021,140,88,2},{65019,140,88,2},{65019,156,118,2},{65020,156,118,2},{65021,156,118,2},{65019,156,118,2},{65019,145,160,2},{65020,145,160,2},{65021,145,160,2},{65019,145,160,2},{65019,108,154,2},{65020,108,154,2},{65021,108,154,2},{65019,108,154,2},{65019,90,120,2},{65020,90,120,2},{65021,90,120,2},{65019,90,120,2},{65019,112,88,2},{65020,112,88,2},{65021,112,88,2},{65019,125,100,2},{65020,125,100,2},{65021,125,100,2},{65019,126,144,2},{65020,126,144,2},{65021,126,144,2},{65019,111,110,2},{65020,111,110,2},{65021,111,110,2},{65019,160,140,2},{65020,160,140,2},{65021,160,140,2}}
end
function clear_rejoin()
pc.setf("hwang_temple_dungeon","rejoin_map",0)
pc.setf("hwang_temple_dungeon","rejoin_id",0)
pc.setf("hwang_temple_dungeon","rejoin_time",0)
pc.setf("hwang_temple_dungeon","rejoin_channel",0)
pc.setf("hwang_temple_dungeon","rejoin_floor",0)
pc.setf("hwang_temple_dungeon","rejoin_x",0)
pc.setf("hwang_temple_dungeon","rejoin_y",0)
end
function spawn_required(key,vnum,x,y,radius)
if d.getf(key.."_vid") > 0 then return true end
local vid=d.spawn_mob(vnum,x,y,radius,1)
if vid <= 0 then return false end
d.setf(key.."_vid",vid)
d.set_unique(key,vid)
return true
end
function spawn_stage()
local stage=d.getf("hwang_stage")
local ok=true
if stage == 1 then
local slots=hwang_temple_dungeon.wave_slots()
for i=1,table.getn(slots) do
local row=slots[i]
if not hwang_temple_dungeon.spawn_required("hwang_wave_"..i,row[1],row[2],row[3],row[4]) then ok=false end
end
elseif stage == 2 then
if not hwang_temple_dungeon.spawn_required("hwang_leader",65022,87,124,0) then ok=false end
elseif stage == 3 then
local slots=hwang_temple_dungeon.stone_slots()
for i=1,4 do
if not hwang_temple_dungeon.spawn_required("hwang_stone_"..i,65025,slots[i][1],slots[i][2],0) then ok=false end
end
elseif stage == 4 then
if not hwang_temple_dungeon.spawn_required("hwang_invoker",65023,123,124,0) then ok=false end
elseif stage == 5 then
if not hwang_temple_dungeon.spawn_required("hwang_guardian",65024,124,162,0) then ok=false end
local slots=hwang_temple_dungeon.stone_slots()
for i=1,4 do
if not hwang_temple_dungeon.spawn_required("hwang_seal_"..i,65026,slots[i][1],slots[i][2],0) then ok=false end
end
else return false end
return ok
end
function try_spawn()
if d.getf("finished") == 1 or d.getf("transition") != 0 then return end
if hwang_temple_dungeon.spawn_stage() then d.setf("spawn_retry",0);return end
local retry=d.getf("spawn_retry")+1
d.setf("spawn_retry",retry)
if retry < 6 then server_timer("hwang400_retry",2,d.get_map_index())
else
d.notice("Zindan nesnesi olusturulamadi. Harita ve mob proto kurulumunu kontrol edin.")
d.setf("finished",1)
server_timer("hwang400_exit",2,d.get_map_index())
end
end
function stage_notice()
local stage=d.getf("hwang_stage")
if stage == 1 then d.notice("1. Asama: Tapinaktaki 35 karanlik ruhu yok et.")
elseif stage == 2 then d.notice("2. Asama: Hwang Liderini yen.")
elseif stage == 3 then d.notice("3. Asama: 4 Hwang Ates Metinini yok et.")
elseif stage == 4 then d.notice("4. Asama: Hwang Cagiricisini yen.")
elseif stage == 5 then
if d.getf("hwang_guardian_protected") == 1 then d.notice("5. Asama: Koruyucunun kalkanini kaldirmak icin 4 muhru yok et.")
else d.notice("Koruyucunun kalkani kirildi. Hwang Tapinak Koruyucusunu yen!") end
end
end
function next_stage(stage)
if d.getf("finished") == 1 or d.getf("transition") != 0 then return end
d.setf("transition",stage)
server_timer("hwang400_prepare",3,d.get_map_index())
end
function sync_ui()
local remain=d.getf("real_time")-get_global_time()
if remain < 0 then remain=0 end
cmdchat(string.format("RefreshDungeonTimer %d %d",d.getf("floor"),remain))
cmdchat(string.format("RefreshDungeonFloor %d",d.getf("floor")))
if d.update_info then d.update_info() end
end
when 65027.chat."Hwang Tapinagi" begin
say_title("Hwang Tapinagi")
say("Normal giris veya mevcut zindana geri donus sec.")
local choice=select("Normal Giris","Test Girisi (GM)","Zindana Geri Don","Kapat")
if choice == 4 then return end
if not d.hybrid_enabled or not d.hybrid_enter or not d.hybrid_enabled(400) then
syschat("Hwang Tapinagi icin guncel game ve P2P zindan kurulumu gerekiyor.")
return
end
-- Admission validates every member, HWID and return record before any debit.
d.hybrid_enter(hwang_temple_dungeon.hybrid_settings(),choice-1)
end
when login with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin
timer("hwang400_init",1)
end
when hwang400_init.timer with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin
d.set_warp_location(65,5918,1002)
if d.getf("finished") == 1 then return end
if d.getf("hwang_initialized") == 0 then
d.setf("hwang_initialized",1)
d.setf("finished",0)
d.setf("transition",0)
d.setf("wave_killed",0)
d.setf("seals_killed",0)
d.setf("metins_killed",0)
d.setf("spawn_retry",0)
d.setf("real_time_fastest",get_global_time())
d.setf("start_time",get_global_time())
local test=0
if pc.getf("__hwang_safe","test_mode") == 1 or pc.getf("__dungeon_helper","test_mode") == 1 then test=1 end
d.setf("test",test);d.setf("dungeon_test",test)
local stage=1
local duration=60*60
if test == 1 then stage=5;duration=10*60 end
d.setf("hwang_stage",stage);d.setf("floor",stage)
if stage == 5 then d.setf("hwang_guardian_protected",1) end
d.setf("real_time",get_global_time()+duration)
if test == 0 then d.setf("cooldown_end",get_global_time()+hwang_temple_dungeon.hybrid_settings().cooldown) end
server_timer("hwang400_timeout",duration,d.get_map_index())
server_timer("hwang400_start",1,d.get_map_index())
end
if d.getf("test") == 0 then pc.setf("hwang_temple_dungeon","cooldown",d.getf("cooldown_end")) end
pc.setf("__hwang_safe","test_mode",0)
pc.setf("__dungeon_helper","test_mode",0)
hwang_temple_dungeon.clear_rejoin()
hwang_temple_dungeon.stage_notice()
hwang_temple_dungeon.sync_ui()
timer("hwang400_ui",5)
end
when hwang400_ui.timer with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin
if d.getf("finished") == 0 then hwang_temple_dungeon.sync_ui();timer("hwang400_ui",5) end
end
when hwang400_start.server_timer or hwang400_retry.server_timer begin
local map=get_server_timer_arg()
if map >= 4000000 and map < 4010000 and d.select(map) then hwang_temple_dungeon.try_spawn() end
end
when hwang400_prepare.server_timer begin
local map=get_server_timer_arg()
if map < 4000000 or map >= 4010000 or not d.select(map) then return end
local stage=d.getf("transition")
if stage < 2 or stage > 5 or d.getf("finished") == 1 then return end
d.setf("hwang_stage",0)
d.clear_regen();d.purge()
d.setf("hwang_stage",stage);d.setf("floor",stage)
if stage == 5 then d.setf("hwang_guardian_protected",1) end
d.setf("transition",0);d.setf("spawn_retry",0)
hwang_temple_dungeon.stage_notice();hwang_temple_dungeon.try_spawn()
end
when kill with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin
if d.getf("finished") == 1 or d.getf("transition") != 0 or npc.is_pc() then return end
local stage=d.getf("hwang_stage")
local vid=npc.get_vid()
local count=0
local prefix=""
local flag=""
if stage == 1 then count=35;prefix="hwang_wave_";flag="wave_killed"
elseif stage == 3 then count=4;prefix="hwang_stone_";flag="metins_killed"
elseif stage == 5 then count=4;prefix="hwang_seal_";flag="seals_killed" end
for i=1,count do
local key=prefix..i
if d.getf(key.."_vid") == vid and d.getf(key.."_dead") == 0 then
d.setf(key.."_dead",1)
local killed=d.getf(flag)+1;d.setf(flag,killed)
d.notice("Tamamlanan hedef: "..killed.."/"..count)
if killed >= count then
if stage == 5 then
d.setf("hwang_guardian_protected",0)
hwang_temple_dungeon.stage_notice()
else hwang_temple_dungeon.next_stage(stage+1) end
end
return
end
end
if stage == 2 and d.getf("hwang_leader_vid") == vid then
hwang_temple_dungeon.next_stage(3)
elseif stage == 4 and d.getf("hwang_invoker_vid") == vid then
hwang_temple_dungeon.next_stage(5)
elseif stage == 5 and d.getf("hwang_guardian_vid") == vid and d.getf("hwang_guardian_protected") == 0 then
local map=pc.get_map_index()
d.setf("finished",1);d.setf("hwang_stage",6)
hwang_temple_dungeon.clear_rejoin()
give_event_reward(hwang_temple_dungeon.hybrid_settings().ticket,check_if_test())
d.notice("Hwang Tapinagi tamamlandi. 30 saniye sonra disari cikacaksin.")
-- Let the normal boss death/drop callback finish before cleanup.
server_timer("hwang400_finish_cleanup",1,map)
killed_boss(65024,check_if_test(),d.getf("real_time_fastest"),map)
end
end
when hwang400_finish_cleanup.server_timer begin
local map=get_server_timer_arg()
if map >= 4000000 and map < 4010000 and d.select(map) and d.getf("finished") == 1 then d.kill_all() end
end
when logout with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin
if d.hybrid_owned and d.hybrid_owned() then return end
if d.getf("finished") == 1 then hwang_temple_dungeon.clear_rejoin();return end
pc.setf("hwang_temple_dungeon","rejoin_map",pc.get_map_index())
pc.setf("hwang_temple_dungeon","rejoin_time",get_global_time()+300)
pc.setf("hwang_temple_dungeon","rejoin_channel",pc.get_channel_id())
pc.setf("hwang_temple_dungeon","rejoin_floor",d.getf("floor"))
pc.setf("hwang_temple_dungeon","rejoin_x",pc.get_x())
pc.setf("hwang_temple_dungeon","rejoin_y",pc.get_y())
end
when hwang400_timeout.server_timer begin
local map=get_server_timer_arg()
if map >= 4000000 and map < 4010000 and d.select(map) and d.getf("finished") == 0 then
d.setf("finished",1);d.notice("Hwang Tapinagi suresi doldu.")
server_timer("hwang400_exit",1,map)
end
end
when hwang400_exit.server_timer begin
local map=get_server_timer_arg()
if map >= 4000000 and map < 4010000 and d.select(map) then d.setf("finished",1);d.exit_all() end
end
when timer_end.server_timer begin
local map=get_server_timer_arg()
if map >= 4000000 and map < 4010000 and d.select(map) then
d.setf("finished",1)
execute_timer(false,591800,100200,map,1)
end
end
end
end
Test eder misiniz?Kod:quest hwang_temple_dungeon begin state start begin function hybrid_settings() return { map=400, entry_map=65, min_level=55, max_level=80, ticket=900017, boss=65024, x=12700, y=4220, test_x=12700, test_y=4220, exit_map=65, exit_x=5918, exit_y=1002, cooldown=1800 } end function stone_slots() return {{124,139},{147,124},{124,108},{101,124}} end function wave_slots() return {{65019,140,88,2},{65020,140,88,2},{65021,140,88,2},{65019,140,88,2},{65019,156,118,2},{65020,156,118,2},{65021,156,118,2},{65019,156,118,2},{65019,145,160,2},{65020,145,160,2},{65021,145,160,2},{65019,145,160,2},{65019,108,154,2},{65020,108,154,2},{65021,108,154,2},{65019,108,154,2},{65019,90,120,2},{65020,90,120,2},{65021,90,120,2},{65019,90,120,2},{65019,112,88,2},{65020,112,88,2},{65021,112,88,2},{65019,125,100,2},{65020,125,100,2},{65021,125,100,2},{65019,126,144,2},{65020,126,144,2},{65021,126,144,2},{65019,111,110,2},{65020,111,110,2},{65021,111,110,2},{65019,160,140,2},{65020,160,140,2},{65021,160,140,2}} end function clear_rejoin() pc.setf("hwang_temple_dungeon","rejoin_map",0) pc.setf("hwang_temple_dungeon","rejoin_id",0) pc.setf("hwang_temple_dungeon","rejoin_time",0) pc.setf("hwang_temple_dungeon","rejoin_channel",0) pc.setf("hwang_temple_dungeon","rejoin_floor",0) pc.setf("hwang_temple_dungeon","rejoin_x",0) pc.setf("hwang_temple_dungeon","rejoin_y",0) end function spawn_required(key,vnum,x,y,radius) if d.getf(key.."_vid") > 0 then return true end local vid=d.spawn_mob(vnum,x,y,radius,1) if vid <= 0 then return false end d.setf(key.."_vid",vid) d.set_unique(key,vid) return true end function spawn_stage() local stage=d.getf("hwang_stage") local ok=true if stage == 1 then local slots=hwang_temple_dungeon.wave_slots() for i=1,table.getn(slots) do local row=slots[i] if not hwang_temple_dungeon.spawn_required("hwang_wave_"..i,row[1],row[2],row[3],row[4]) then ok=false end end elseif stage == 2 then if not hwang_temple_dungeon.spawn_required("hwang_leader",65022,87,124,0) then ok=false end elseif stage == 3 then local slots=hwang_temple_dungeon.stone_slots() for i=1,4 do if not hwang_temple_dungeon.spawn_required("hwang_stone_"..i,65025,slots[i][1],slots[i][2],0) then ok=false end end elseif stage == 4 then if not hwang_temple_dungeon.spawn_required("hwang_invoker",65023,123,124,0) then ok=false end elseif stage == 5 then if not hwang_temple_dungeon.spawn_required("hwang_guardian",65024,124,162,0) then ok=false end local slots=hwang_temple_dungeon.stone_slots() for i=1,4 do if not hwang_temple_dungeon.spawn_required("hwang_seal_"..i,65026,slots[i][1],slots[i][2],0) then ok=false end end else return false end return ok end function try_spawn() if d.getf("finished") == 1 or d.getf("transition") != 0 then return end if hwang_temple_dungeon.spawn_stage() then d.setf("spawn_retry",0);return end local retry=d.getf("spawn_retry")+1 d.setf("spawn_retry",retry) if retry < 6 then server_timer("hwang400_retry",2,d.get_map_index()) else d.notice("Zindan nesnesi olusturulamadi. Harita ve mob proto kurulumunu kontrol edin.") d.setf("finished",1) server_timer("hwang400_exit",2,d.get_map_index()) end end function stage_notice() local stage=d.getf("hwang_stage") if stage == 1 then d.notice("1. Asama: Tapinaktaki 35 karanlik ruhu yok et.") elseif stage == 2 then d.notice("2. Asama: Hwang Liderini yen.") elseif stage == 3 then d.notice("3. Asama: 4 Hwang Ates Metinini yok et.") elseif stage == 4 then d.notice("4. Asama: Hwang Cagiricisini yen.") elseif stage == 5 then if d.getf("hwang_guardian_protected") == 1 then d.notice("5. Asama: Koruyucunun kalkanini kaldirmak icin 4 muhru yok et.") else d.notice("Koruyucunun kalkani kirildi. Hwang Tapinak Koruyucusunu yen!") end end end function next_stage(stage) if d.getf("finished") == 1 or d.getf("transition") != 0 then return end d.setf("transition",stage) server_timer("hwang400_prepare",3,d.get_map_index()) end function sync_ui() local remain=d.getf("real_time")-get_global_time() if remain < 0 then remain=0 end cmdchat(string.format("RefreshDungeonTimer %d %d",d.getf("floor"),remain)) cmdchat(string.format("RefreshDungeonFloor %d",d.getf("floor"))) if d.update_info then d.update_info() end end when 65027.chat."Hwang Tapinagi" begin say_title("Hwang Tapinagi") say("Normal giris veya mevcut zindana geri donus sec.") local choice=select("Normal Giris","Test Girisi (GM)","Zindana Geri Don","Kapat") if choice == 4 then return end if not d.hybrid_enabled or not d.hybrid_enter or not d.hybrid_enabled(400) then syschat("Hwang Tapinagi icin guncel game ve P2P zindan kurulumu gerekiyor.") return end -- Admission validates every member, HWID and return record before any debit. d.hybrid_enter(hwang_temple_dungeon.hybrid_settings(),choice-1) end when login with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin timer("hwang400_init",1) end when hwang400_init.timer with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin d.set_warp_location(65,5918,1002) if d.getf("finished") == 1 then return end if d.getf("hwang_initialized") == 0 then d.setf("hwang_initialized",1) d.setf("finished",0) d.setf("transition",0) d.setf("wave_killed",0) d.setf("seals_killed",0) d.setf("metins_killed",0) d.setf("spawn_retry",0) d.setf("real_time_fastest",get_global_time()) d.setf("start_time",get_global_time()) local test=0 if pc.getf("__hwang_safe","test_mode") == 1 or pc.getf("__dungeon_helper","test_mode") == 1 then test=1 end d.setf("test",test);d.setf("dungeon_test",test) local stage=1 local duration=60*60 if test == 1 then stage=5;duration=10*60 end d.setf("hwang_stage",stage);d.setf("floor",stage) if stage == 5 then d.setf("hwang_guardian_protected",1) end d.setf("real_time",get_global_time()+duration) if test == 0 then d.setf("cooldown_end",get_global_time()+hwang_temple_dungeon.hybrid_settings().cooldown) end server_timer("hwang400_timeout",duration,d.get_map_index()) server_timer("hwang400_start",1,d.get_map_index()) end if d.getf("test") == 0 then pc.setf("hwang_temple_dungeon","cooldown",d.getf("cooldown_end")) end pc.setf("__hwang_safe","test_mode",0) pc.setf("__dungeon_helper","test_mode",0) hwang_temple_dungeon.clear_rejoin() hwang_temple_dungeon.stage_notice() hwang_temple_dungeon.sync_ui() timer("hwang400_ui",5) end when hwang400_ui.timer with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin if d.getf("finished") == 0 then hwang_temple_dungeon.sync_ui();timer("hwang400_ui",5) end end when hwang400_start.server_timer or hwang400_retry.server_timer begin local map=get_server_timer_arg() if map >= 4000000 and map < 4010000 and d.select(map) then hwang_temple_dungeon.try_spawn() end end when hwang400_prepare.server_timer begin local map=get_server_timer_arg() if map < 4000000 or map >= 4010000 or not d.select(map) then return end local stage=d.getf("transition") if stage < 2 or stage > 5 or d.getf("finished") == 1 then return end d.setf("hwang_stage",0) d.clear_regen();d.purge() d.setf("hwang_stage",stage);d.setf("floor",stage) if stage == 5 then d.setf("hwang_guardian_protected",1) end d.setf("transition",0);d.setf("spawn_retry",0) hwang_temple_dungeon.stage_notice();hwang_temple_dungeon.try_spawn() end when kill with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin if d.getf("finished") == 1 or d.getf("transition") != 0 or npc.is_pc() then return end local stage=d.getf("hwang_stage") local vid=npc.get_vid() local count=0 local prefix="" local flag="" if stage == 1 then count=35;prefix="hwang_wave_";flag="wave_killed" elseif stage == 3 then count=4;prefix="hwang_stone_";flag="metins_killed" elseif stage == 5 then count=4;prefix="hwang_seal_";flag="seals_killed" end for i=1,count do local key=prefix..i if d.getf(key.."_vid") == vid and d.getf(key.."_dead") == 0 then d.setf(key.."_dead",1) local killed=d.getf(flag)+1;d.setf(flag,killed) d.notice("Tamamlanan hedef: "..killed.."/"..count) if killed >= count then if stage == 5 then d.setf("hwang_guardian_protected",0) hwang_temple_dungeon.stage_notice() else hwang_temple_dungeon.next_stage(stage+1) end end return end end if stage == 2 and d.getf("hwang_leader_vid") == vid then hwang_temple_dungeon.next_stage(3) elseif stage == 4 and d.getf("hwang_invoker_vid") == vid then hwang_temple_dungeon.next_stage(5) elseif stage == 5 and d.getf("hwang_guardian_vid") == vid and d.getf("hwang_guardian_protected") == 0 then local map=pc.get_map_index() d.setf("finished",1);d.setf("hwang_stage",6) hwang_temple_dungeon.clear_rejoin() give_event_reward(hwang_temple_dungeon.hybrid_settings().ticket,check_if_test()) d.notice("Hwang Tapinagi tamamlandi. 30 saniye sonra disari cikacaksin.") -- Let the normal boss death/drop callback finish before cleanup. server_timer("hwang400_finish_cleanup",1,map) killed_boss(65024,check_if_test(),d.getf("real_time_fastest"),map) end end when hwang400_finish_cleanup.server_timer begin local map=get_server_timer_arg() if map >= 4000000 and map < 4010000 and d.select(map) and d.getf("finished") == 1 then d.kill_all() end end when logout with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin if d.hybrid_owned and d.hybrid_owned() then return end if d.getf("finished") == 1 then hwang_temple_dungeon.clear_rejoin();return end pc.setf("hwang_temple_dungeon","rejoin_map",pc.get_map_index()) pc.setf("hwang_temple_dungeon","rejoin_time",get_global_time()+300) pc.setf("hwang_temple_dungeon","rejoin_channel",pc.get_channel_id()) pc.setf("hwang_temple_dungeon","rejoin_floor",d.getf("floor")) pc.setf("hwang_temple_dungeon","rejoin_x",pc.get_x()) pc.setf("hwang_temple_dungeon","rejoin_y",pc.get_y()) end when hwang400_timeout.server_timer begin local map=get_server_timer_arg() if map >= 4000000 and map < 4010000 and d.select(map) and d.getf("finished") == 0 then d.setf("finished",1);d.notice("Hwang Tapinagi suresi doldu.") server_timer("hwang400_exit",1,map) end end when hwang400_exit.server_timer begin local map=get_server_timer_arg() if map >= 4000000 and map < 4010000 and d.select(map) then d.setf("finished",1);d.exit_all() end end when timer_end.server_timer begin local map=get_server_timer_arg() if map >= 4000000 and map < 4010000 and d.select(map) then d.setf("finished",1) execute_timer(false,591800,100200,map,1) end end end end
quest hwang_temple_dungeon begin
state start begin
function hybrid_settings()
return {
map=400, entry_map=65, min_level=55, max_level=80,
ticket=900017, boss=65024, x=12700, y=4220, test_x=12700, test_y=4220,
exit_map=65, exit_x=5918, exit_y=1002, cooldown=1800
}
end
function wave_goal()
return 35
end
function stage_goal(stage)
if stage == 1 then
local goal=hwang_temple_dungeon.wave_goal()
local total=table.getn(hwang_temple_dungeon.wave_slots())
if goal > total then goal=total end
return goal
elseif stage == 3 or stage == 5 then
return table.getn(hwang_temple_dungeon.stone_slots())
end
return 0
end
function count_dead(prefix,total)
local dead=0
for i=1,total do
if d.getf(prefix..i.."_dead") == 1 then dead=dead+1 end
end
return dead
end
function stone_slots()
return {{124,139},{147,124},{124,108},{101,124}}
end
function wave_slots()
return {{65019,140,88,2},{65020,140,88,2},{65021,140,88,2},{65019,140,88,2},{65019,156,118,2},{65020,156,118,2},{65021,156,118,2},{65019,156,118,2},{65019,145,160,2},{65020,145,160,2},{65021,145,160,2},{65019,145,160,2},{65019,108,154,2},{65020,108,154,2},{65021,108,154,2},{65019,108,154,2},{65019,90,120,2},{65020,90,120,2},{65021,90,120,2},{65019,90,120,2},{65019,112,88,2},{65020,112,88,2},{65021,112,88,2},{65019,125,100,2},{65020,125,100,2},{65021,125,100,2},{65019,126,144,2},{65020,126,144,2},{65021,126,144,2},{65019,111,110,2},{65020,111,110,2},{65021,111,110,2},{65019,160,140,2},{65020,160,140,2},{65021,160,140,2}}
end
function clear_rejoin()
pc.setf("hwang_temple_dungeon","rejoin_map",0)
pc.setf("hwang_temple_dungeon","rejoin_id",0)
pc.setf("hwang_temple_dungeon","rejoin_time",0)
pc.setf("hwang_temple_dungeon","rejoin_channel",0)
pc.setf("hwang_temple_dungeon","rejoin_floor",0)
pc.setf("hwang_temple_dungeon","rejoin_x",0)
pc.setf("hwang_temple_dungeon","rejoin_y",0)
end
function spawn_required(key,vnum,x,y,radius)
if d.getf(key.."_vid") > 0 then return true end
local vid=d.spawn_mob(vnum,x,y,radius,1)
if vid <= 0 then return false end
d.setf(key.."_vid",vid)
d.set_unique(key,vid)
return true
end
function spawn_stage()
local stage=d.getf("hwang_stage")
local ok=true
if stage == 1 then
local slots=hwang_temple_dungeon.wave_slots()
for i=1,hwang_temple_dungeon.stage_goal(1) do
local row=slots[i]
if not hwang_temple_dungeon.spawn_required("hwang_wave_"..i,row[1],row[2],row[3],row[4]) then ok=false end
end
elseif stage == 2 then
if not hwang_temple_dungeon.spawn_required("hwang_leader",65022,87,124,0) then ok=false end
elseif stage == 3 then
local slots=hwang_temple_dungeon.stone_slots()
for i=1,hwang_temple_dungeon.stage_goal(3) do
if not hwang_temple_dungeon.spawn_required("hwang_stone_"..i,65025,slots[i][1],slots[i][2],0) then ok=false end
end
elseif stage == 4 then
if not hwang_temple_dungeon.spawn_required("hwang_invoker",65023,123,124,0) then ok=false end
elseif stage == 5 then
if not hwang_temple_dungeon.spawn_required("hwang_guardian",65024,124,162,0) then ok=false end
local slots=hwang_temple_dungeon.stone_slots()
for i=1,hwang_temple_dungeon.stage_goal(5) do
if not hwang_temple_dungeon.spawn_required("hwang_seal_"..i,65026,slots[i][1],slots[i][2],0) then ok=false end
end
else return false end
return ok
end
function try_spawn()
if d.getf("finished") == 1 or d.getf("transition") != 0 then return end
if hwang_temple_dungeon.spawn_stage() then d.setf("spawn_retry",0);return end
local retry=d.getf("spawn_retry")+1
d.setf("spawn_retry",retry)
if retry < 6 then server_timer("hwang400_retry",2,d.get_map_index())
else
d.notice("Zindan nesnesi olusturulamadi. Harita ve mob proto kurulumunu kontrol edin.")
d.setf("finished",1)
server_timer("hwang400_exit",2,d.get_map_index())
end
end
function stage_notice()
local stage=d.getf("hwang_stage")
if stage == 1 then d.notice("1. Asama: Tapinaktaki "..hwang_temple_dungeon.stage_goal(1).." karanlik ruhu yok et.")
elseif stage == 2 then d.notice("2. Asama: Hwang Liderini yen.")
elseif stage == 3 then d.notice("3. Asama: "..hwang_temple_dungeon.stage_goal(3).." Hwang Ates Metinini yok et.")
elseif stage == 4 then d.notice("4. Asama: Hwang Cagiricisini yen.")
elseif stage == 5 then
if d.getf("hwang_guardian_protected") == 1 then d.notice("5. Asama: Koruyucunun kalkanini kaldirmak icin "..hwang_temple_dungeon.stage_goal(5).." muhru yok et.")
else d.notice("Koruyucunun kalkani kirildi. Hwang Tapinak Koruyucusunu yen!") end
end
end
function next_stage(stage)
if d.getf("finished") == 1 or d.getf("transition") != 0 then return end
d.setf("transition",stage)
server_timer("hwang400_prepare",3,d.get_map_index())
end
function sync_ui()
local remain=d.getf("real_time")-get_global_time()
if remain < 0 then remain=0 end
cmdchat(string.format("RefreshDungeonTimer %d %d",d.getf("floor"),remain))
cmdchat(string.format("RefreshDungeonFloor %d",d.getf("floor")))
if d.update_info then d.update_info() end
end
when 65027.chat."Hwang Tapinagi" begin
say_title("Hwang Tapinagi")
say("Normal giris veya mevcut zindana geri donus sec.")
local choice=select("Normal Giris","Test Girisi (GM)","Zindana Geri Don","Kapat")
if choice == 4 then return end
if not d.hybrid_enabled or not d.hybrid_enter or not d.hybrid_enabled(400) then
syschat("Hwang Tapinagi icin guncel game ve P2P zindan kurulumu gerekiyor.")
return
end
-- Admission validates every member, HWID and return record before any debit.
d.hybrid_enter(hwang_temple_dungeon.hybrid_settings(),choice-1)
end
when login with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin
timer("hwang400_init",1)
end
when hwang400_init.timer with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin
d.set_warp_location(65,5918,1002)
if d.getf("finished") == 1 then return end
if d.getf("hwang_initialized") == 0 then
d.setf("hwang_initialized",1)
d.setf("finished",0)
d.setf("transition",0)
d.setf("wave_killed",0)
d.setf("seals_killed",0)
d.setf("metins_killed",0)
d.setf("spawn_retry",0)
d.setf("real_time_fastest",get_global_time())
d.setf("start_time",get_global_time())
local test=0
if pc.getf("__hwang_safe","test_mode") == 1 or pc.getf("__dungeon_helper","test_mode") == 1 then test=1 end
d.setf("test",test);d.setf("dungeon_test",test)
local stage=1
local duration=60*60
if test == 1 then stage=5;duration=10*60 end
d.setf("hwang_stage",stage);d.setf("floor",stage)
if stage == 5 then d.setf("hwang_guardian_protected",1) end
d.setf("real_time",get_global_time()+duration)
if test == 0 then d.setf("cooldown_end",get_global_time()+hwang_temple_dungeon.hybrid_settings().cooldown) end
server_timer("hwang400_timeout",duration,d.get_map_index())
server_timer("hwang400_start",1,d.get_map_index())
end
if d.getf("test") == 0 then pc.setf("hwang_temple_dungeon","cooldown",d.getf("cooldown_end")) end
pc.setf("__hwang_safe","test_mode",0)
pc.setf("__dungeon_helper","test_mode",0)
hwang_temple_dungeon.clear_rejoin()
hwang_temple_dungeon.stage_notice()
hwang_temple_dungeon.sync_ui()
timer("hwang400_ui",5)
end
when hwang400_ui.timer with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin
if d.getf("finished") == 0 then hwang_temple_dungeon.sync_ui();timer("hwang400_ui",5) end
end
when hwang400_start.server_timer or hwang400_retry.server_timer begin
local map=get_server_timer_arg()
if map >= 4000000 and map < 4010000 and d.select(map) then hwang_temple_dungeon.try_spawn() end
end
when hwang400_prepare.server_timer begin
local map=get_server_timer_arg()
if map < 4000000 or map >= 4010000 or not d.select(map) then return end
local stage=d.getf("transition")
if stage < 2 or stage > 5 or d.getf("finished") == 1 then return end
d.setf("hwang_stage",0)
d.clear_regen();d.purge()
d.setf("hwang_stage",stage);d.setf("floor",stage)
if stage == 5 then d.setf("hwang_guardian_protected",1) end
d.setf("transition",0);d.setf("spawn_retry",0)
hwang_temple_dungeon.stage_notice();hwang_temple_dungeon.try_spawn()
end
when kill with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin
if d.getf("finished") == 1 or d.getf("transition") != 0 or npc.is_pc() then return end
local stage=d.getf("hwang_stage")
local vid=npc.get_vid()
if vid <= 0 then return end
local prefix=""
local flag=""
if stage == 1 then prefix="hwang_wave_";flag="wave_killed"
elseif stage == 3 then prefix="hwang_stone_";flag="metins_killed"
elseif stage == 5 then prefix="hwang_seal_";flag="seals_killed" end
local count=hwang_temple_dungeon.stage_goal(stage)
for i=1,count do
local key=prefix..i
if d.getf(key.."_vid") == vid then
if d.getf(key.."_dead") == 1 then return end
d.setf(key.."_dead",1)
local killed=hwang_temple_dungeon.count_dead(prefix,count)
d.setf(flag,killed)
d.notice("Tamamlanan hedef: "..killed.."/"..count)
if killed >= count then
if stage == 5 then
if d.getf("hwang_guardian_protected") == 1 then
d.setf("hwang_guardian_protected",0)
hwang_temple_dungeon.stage_notice()
end
else hwang_temple_dungeon.next_stage(stage+1) end
end
return
end
end
if stage == 2 and d.getf("hwang_leader_vid") == vid then
hwang_temple_dungeon.next_stage(3)
elseif stage == 4 and d.getf("hwang_invoker_vid") == vid then
hwang_temple_dungeon.next_stage(5)
elseif stage == 5 and d.getf("hwang_guardian_vid") == vid and d.getf("hwang_guardian_protected") == 0 then
local map=pc.get_map_index()
d.setf("finished",1);d.setf("hwang_stage",6)
hwang_temple_dungeon.clear_rejoin()
give_event_reward(hwang_temple_dungeon.hybrid_settings().ticket,check_if_test())
d.notice("Hwang Tapinagi tamamlandi. 30 saniye sonra disari cikacaksin.")
-- Let the normal boss death/drop callback finish before cleanup.
server_timer("hwang400_finish_cleanup",1,map)
killed_boss(65024,check_if_test(),d.getf("real_time_fastest"),map)
end
end
when hwang400_finish_cleanup.server_timer begin
local map=get_server_timer_arg()
if map >= 4000000 and map < 4010000 and d.select(map) and d.getf("finished") == 1 then d.kill_all() end
end
when logout with pc.get_map_index() >= 4000000 and pc.get_map_index() < 4010000 begin
if d.hybrid_owned and d.hybrid_owned() then return end
if d.getf("finished") == 1 then hwang_temple_dungeon.clear_rejoin();return end
pc.setf("hwang_temple_dungeon","rejoin_map",pc.get_map_index())
pc.setf("hwang_temple_dungeon","rejoin_time",get_global_time()+300)
pc.setf("hwang_temple_dungeon","rejoin_channel",pc.get_channel_id())
pc.setf("hwang_temple_dungeon","rejoin_floor",d.getf("floor"))
pc.setf("hwang_temple_dungeon","rejoin_x",pc.get_x())
pc.setf("hwang_temple_dungeon","rejoin_y",pc.get_y())
end
when hwang400_timeout.server_timer begin
local map=get_server_timer_arg()
if map >= 4000000 and map < 4010000 and d.select(map) and d.getf("finished") == 0 then
d.setf("finished",1);d.notice("Hwang Tapinagi suresi doldu.")
server_timer("hwang400_exit",1,map)
end
end
when hwang400_exit.server_timer begin
local map=get_server_timer_arg()
if map >= 4000000 and map < 4010000 and d.select(map) then d.setf("finished",1);d.exit_all() end
end
when timer_end.server_timer begin
local map=get_server_timer_arg()
if map >= 4000000 and map < 4010000 and d.select(map) then
d.setf("finished",1)
execute_timer(false,591800,100200,map,1)
end
end
end
end