Yardım Duyuruların üst üste binmesi

  • Konuyu açan Konuyu açan batuan
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 3
  • Gösterim Gösterim 58
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

batuan

Üye
Üye
Mesaj
235
Çözümler
8
Beğeni
54
Puan
500
Ticaret Puanı
1
Boss kesiyorum 20 slot kesmem lazım sayac 1/20 2/20 diye gidiyor slotlar bitince bile bu sayaç devam ediyor bunları sıralı değil de anlık olarak yansıması ya da farklı bir şekilde nasıl düzeltebilirim ?
 
Kod:
Genişlet Daralt Kopyala
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
 
Kod:
Genişlet Daralt Kopyala
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?

Lua (Quest):
Genişlet Daralt Kopyala
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
 
Geri
Üst