Çözüldü Zindan Bilgisi Penceresindeki Süre Sorunu (Dungeon Info Time Problem)

  • Konuyu açan Konuyu açan Mavi Ruh
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 9
  • Gösterim Gösterim 111
Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

Mavi Ruh

WWW.MR-3DWORK.COM
Grafiker
Yardımsever Üye
Usta Üye
Mesaj
1.007
Çözümler
91
Beğeni
1.375
Puan
1.350
Ticaret Puanı
1
Zindanları tek kata çeviriyorum. Bu panelde giriş yapılabilir yerine kalan süre neden yazmıyor, anlayamadım. Questleri inceliyorum ama belli bir yazı göremedim yani tanımlanması için __xx ibaresi gibi bir şey yani. Neye göre çekiyor?

pc.setqf("enchanted_forest", get_time()+60*45*1)

1746265866202.webp

1746266020252.webp
 
Son düzenleme:
Çözüm
py kısmını inceleyemiyorum bilişim filesi olduğu için py dosyalarını başka bir packa atıp packi paylaşmıyorlar. Hani şunu düşündüm py dosyasında tanımlama olsa bile questte bir şeyin o paneli tetiklemesi lazım questlerini iyice inceliyorum ama panel ile alakalı CMD, WARP kısmından başka bir şey göremiyorum.
bu sistem luiginanın paylaştığının gui değiştirilmiş haline benziyor. o yüzden bunda py taraflı bi timer tutan bişey yok.
Bu sistemi bilmiyorum fakat genelinde questin kalan süresinin hesaplandığı kısmına cooldown quest flagını tetikletmen gerekiyor.

İlk önce src kısmından sistem hangi flag tetiklediğinde süre saymaya başlıyor onu bul sonra questin kalan sürenim hesaplandığı kısımda tetikle olması lazım
 
Bu sistemi bilmiyorum fakat genelinde questin kalan süresinin hesaplandığı kısmına cooldown quest flagını tetikletmen gerekiyor.

İlk önce src kısmından sistem hangi flag tetiklediğinde süre saymaya başlıyor onu bul sonra questin kalan sürenim hesaplandığı kısımda tetikle olması lazım
deneyip dönüş sağlayacağım teşekkür ederim
 
Bu sistemi bilmiyorum fakat genelinde questin kalan süresinin hesaplandığı kısmına cooldown quest flagını tetikletmen gerekiyor.

İlk önce src kısmından sistem hangi flag tetiklediğinde süre saymaya başlıyor onu bul sonra questin kalan sürenim hesaplandığı kısımda tetikle olması lazım

@Ken 'in de dediği gibi cooldown'a dair bir tanımlama hiçbirinde yok.

Bu questte mesela süre tanımlaması sorunsuz görünüyor.

example.lua:
Genişlet Daralt Kopyala
quest devil_tower2_plechito begin
    state start begin
        function get_regens(level)
            local regens = {
                [1] = "data/dungeon/devil_tower2_regens/floor_1.txt",
                [2] = "data/dungeon/devil_tower2_regens/floor_2.txt",
                [3] = "data/dungeon/devil_tower2_regens/floor_3.txt",
                [4] = "data/dungeon/devil_tower2_regens/floor_4.txt",
                [5] = "data/dungeon/devil_tower2_regens/floor_5.txt",
                [6] = "data/dungeon/devil_tower2_regens/floor_6.txt",
                [7] = "data/dungeon/devil_tower2_regens/floor_7.txt",
                [8] = "data/dungeon/devil_tower2_regens/floor_8.txt"};
            
            return d.set_regen_file(regens[level])
        end
        
        function spawn_boss(level)
            local boss_settings = {
                [2] = {806, 382, 191},
                [4] = {817, 394, 394},
                [7] = {1095, 209, 609},
                [8] = {816, 564, 613}};
            
            return d.spawn_mob(boss_settings[level][1], boss_settings[level][2], boss_settings[level][3])
        end
        
        function settings()
            return
            {
                ["map_index"] = 18,
                ["spawm_pos"] = {
                    [1] = {21086, 22099},
                    [2] = {332+21000, 109+22000},
                    [3] = {598+21000, 96+22000},
                    [4] = {330+21000, 360+22000},
                    [5] = {166+21000, 333+22000},
                    [6] = {166+21000, 333+22000},
                    [7] = {212+21000, 540+22000},
                    [8] = {560+21000, 546+22000}
                },
                ["level_check1"] = {
                    ["minimum"] = 40,
                    --["maximum"] = 120
                },
                ["keys"] = {30330, 30330}
            }
        end
        
        function party_get_member_pids()
            local pids = {party.get_member_pids()}
            
            return pids
        end
        
        function make_dungeon()
            local setting = devil_tower2_plechito.settings()
            
            d.new_jump_party(setting["map_index"], setting["spawm_pos"][1][1], setting["spawm_pos"][1][2])
            d.setf("lair_check1", 1)
            devil_tower2_plechito.get_regens(1)
        end

        when login begin
            local mid = pc.get_map_index()
            local setting = devil_tower2_plechito.settings()
            local get_flag = d.getf("lair_check1")
            
            if get_flag == 2 then
                if d.getf("level_two_login") == 0 then
                    d.setf("level_two_login", 1)
                    clear_server_timer("level_two_timer",d.get_map_index())
                    server_timer("level_two_timer", 10 * 60, d.get_map_index())
                end
            end
            
            if mid == setting["map_index"] then
                if not pc.in_dungeon() then
                    warp_to_village()
                end
            end
        end
        
        when logout with pc.get_map_index() >= 180000 and pc.get_map_index() < 189999 begin
            pc.setf("devil_tower2","dungeon_turn",1)
        end
        
        when kill with npc.get_race() == 801 or npc.get_race() == 802 or npc.get_race() == 803 or npc.get_race() == 804 or npc.get_race() == 805 begin
            local count, check = d.getf("mobs") + 1, false;
            
            if d.getf("lair_check1") == 1 then
                if count < 650 and check == false then
                    d.setf("mobs", count)
                    local c = 650-d.getf("mobs")
                    d.zodiac_notice_clear()
                    d.zodiac_notice("(1.Görev)Dikkat! Dalga dalga gelecek olan iblisleri temizle! Kalan yaratık: "..c.."")
                else
                    if d.getf("metin_stone") == 0 then
                        d.clear_regen()
                        d.kill_all()
                        d.spawn_mob(8401, 146, 151)
                        d.zodiac_notice_clear()
                        d.zodiac_notice(string.format("(1.2 Görev) %s Ortaya Çıktı ! Onu bul ve ruhu serbest bırak  !", mob_name(8401)))
                        d.setf("metin_stone", 1)
                    end
                    check = true
                end
            end
        end
        
        when kill with npc.get_race() == 8401 and pc.in_dungeon() begin
            local setting = devil_tower2_plechito.settings()
            
            if d.getf("lair_check1") == 1 then
                d.setf("lair_check1", 2)
                cleartimer("level_timer1")
                timer("level_timer1", 3)
            end
            if d.getf("lair_check1") == 3 then
                local items = {setting["keys"][1], setting["keys"][2]}
                local chance = number(1, 3)

                if chance <= 2 then
                    game.drop_item(items[1], 1)
                elseif chance == 3 then
                    game.drop_item(items[2], 1)
                end
            end
        end
        
        when 9201.take with item.vnum == 30330 and pc.in_dungeon() begin
            local setting = devil_tower2_plechito.settings()
            pc.remove_item(30330, 1)

            d.notice("Doğru anahtarı buldun ! sonraki aşamaya geçiyorsun !")
            npc.purge()
            d.clear_regen()
            d.kill_all()
            d.setf("lair_check1", 4)
            cleartimer("level_timer1")
            timer("level_timer1", 3)
        end
        
        when kill with npc.get_race() == 805 or npc.get_race() == 804 or npc.get_race() == 803 or npc.get_race() == 809 or npc.get_race() == 810 begin
            local count, check_2 = d.getf("mobs_level_2") + 1, false;
            
            if d.getf("lair_check1") == 2 then
                if count < 60 and check_2 == false then
                    d.setf("mobs_level_2", count)
                else
                    if d.getf("boss_check1") == 0 then
                        d.clear_regen()
                        d.kill_all()
                        d.zodiac_notice_clear()
                        d.zodiac_notice(string.format("(2.1 Görev) %s belirdi bul ve yok et !", mob_name(806)))
                        devil_tower2_plechito.spawn_boss(2)
                        d.setf("boss_check1", 1)
                    end
                    check_2 = true
                end
            end
        end
        
        when kill with npc.get_race() == 806 and pc.in_dungeon() begin
            d.notice(string.format("%s başarı ile yok edildi !", mob_name(806)))
            d.notice("Bir sonraki göreve hazırlan  !")
            d.setf("lair_check1", 3)
            cleartimer("level_timer1")
            cleartimer("level_two_timer")
            timer("level_timer1", 3)
        end
        
        when kill with npc.get_race() == 807 or npc.get_race() == 808 or npc.get_race() == 809 or npc.get_race() == 812 begin
            local count, check_3 = d.getf("mobs_level_3") + 1, false;
            
            if d.getf("lair_check1") == 4 then
                if count < 30 and check_3 == false then
                    d.setf("mobs_level_3", count)
                else
                    if d.getf("boss_check1_2") == 0 then
                        d.clear_regen()
                        d.kill_all()
                        devil_tower2_plechito.spawn_boss(4)
                        d.zodiac_notice_clear()
                        d.zodiac_notice(string.format("(4.1 Görev) %s a belirdi! Onu yoket !", mob_name(817)))
                        d.setf("boss_check1_2", 1)
                    end
                    check_3 = true
                end
            end
        end
        
        when kill with npc.get_race() == 817 and pc.in_dungeon() begin
            d.notice(string.format("Harika !  %s'yi yok ettin bir sonraki aşamaya geçiliyor ! ", mob_name(817)))
            d.setf("lair_check1", 5)
            cleartimer("level_timer1")
            timer("level_timer1", 3)
        end
        
        when kill with npc.get_race() == 8402 and pc.in_dungeon() begin
            local chance = number(1, 4)
            
            if chance < 2 then
                if d.getf("first_root") == 0 then
                    d.zodiac_notice_clear()
                    d.zodiac_notice("(5.Görev) Doğru metin yok edildi ! Kalan doğru metin: 1 !")   
                    d.setf("first_root", 1)
                else   
                    d.notice("Son doğru metin taşını buldun !")
                    d.notice("Bir sonraki aşamada canavarları öldürerek kapıların kilidini açmalısın!")
                    d.setf("lair_check1", 6)
                    cleartimer("level_timer1")
                    timer("level_timer1", 3)
                end
            else
                d.zodiac_notice_clear()
                d.zodiac_notice(string.format("(5. Görev) Yanlış %s yokettin !", mob_name(8402)))   
            end
        end
        
        when kill with npc.get_race() == 812 or npc.get_race() == 813 or npc.get_race() == 814 begin
            local count = d.getf("mobs_level_4") + 1;
            local purge_count = d.getf("purge_count")
            
            if d.getf("lair_check1") == 6 then
                if count < 10 then
                    d.setf("mobs_level_4", count)
                else
                    if purge_count < 10 then
                        d.setf("purge_count", purge_count+1)
                        d.zodiac_notice_clear()
                        d.zodiac_notice(string.format("Canavar gruplarını yok et ! Kalan grup %s !", 10-d.getf("purge_count")+1))
                        d.setf("mobs_level_4", 0)
                    else
                        d.notice("Tüm anıtları serbest bıraktın !")
                        d.notice("Bir sonraki seviyede tüm canavarları öldür ve Mavi Ölüm sana görünecek !")
                        d.setf("lair_check1", 7)
                        cleartimer("level_timer1")
                        timer("level_timer1", 3)
                    end
                end
            end
        end
        
        when kill with npc.get_race() == 811 or npc.get_race() == 814 or npc.get_race() == 815 begin
            local count, check_4 = d.getf("mobs_level_5") + 1, false;
            
            if d.getf("lair_check1") == 7 then
                if count < 10 and check_4 == false then
                    d.setf("mobs_level_5", count)
                else
                    if d.getf("boss_check1_4") == 0 then
                        d.clear_regen()
                        d.kill_all()
                        devil_tower2_plechito.spawn_boss(7)
                        d.zodiac_notice_clear()
                        d.zodiac_notice(string.format("(7.1 Görev) %s göründü ! onu mağlub et !", mob_name(1095)))
                        d.setf("boss_check1_4", 1)
                    end
                    check_4 = true
                end
            end
        end
        
        when kill with npc.get_race() == 1095 and pc.in_dungeon() begin
            d.notice(string.format("İyi iş! Grubun %s karşı kazandı !", mob_name(1095)))
            d.notice("Bu zindandaki son patronu mağlub et !")
            d.clear_regen()
            d.kill_all()
            d.setf("lair_check1", 8)
            cleartimer("level_timer1")
            timer("level_timer1", 15)
            d.zodiac_notice_clear()
            d.zodiac_notice(string.format("15 Saniye içerisinde bir sonraki kata gönderileceksiniz."))
        end
        
        when kill with npc.get_race() == 816 and pc.in_dungeon() begin
            d.zodiac_notice_clear()
            d.zodiac_notice(string.format("%s Mağlub edildi , Tebrikler!", mob_name(816)))
            notice_all(string.format("%s grubu Mavi Ölüm Kulesini başarı ile tamamladı!", pc.get_name()))
            d.notice("2 dakika içide ışınlanıyorsun !")
            d.clear_regen()
            d.kill_all()
            d.setf("lair_check1", 0)
            timer("final1", 60*2)
        end
        
        when level_timer1.timer begin
            local get_flag = d.getf("lair_check1")
            local setting = devil_tower2_plechito.settings()
            
            d.clear_regen()
            d.kill_all()
            
            if get_flag == 2 then
                d.jump_all (setting["spawm_pos"][2][1], setting["spawm_pos"][2][2])
                devil_tower2_plechito.get_regens(2)
                d.setf("lair_check1", 2)
                d.zodiac_notice_clear()
                d.zodiac_notice("(2.Görev) Bu aşamadaki canavarları 10 dakika içerisinde yok et !")
            end
            if get_flag == 3 then
                d.jump_all (setting["spawm_pos"][3][1], setting["spawm_pos"][3][2])
                devil_tower2_plechito.get_regens(3)
                d.setf("lair_check1", 3)
                d.zodiac_notice_clear()
                d.zodiac_notice("(3.Görev)Metinden Maat Taşı düşür ve Şeytani anıta sürükleyerk üst kata geç.")
            end
            if get_flag == 4 then
                d.jump_all (setting["spawm_pos"][4][1], setting["spawm_pos"][4][2])
                devil_tower2_plechito.get_regens(4)
                d.setf("lair_check1", 4)
                d.zodiac_notice_clear()
                d.zodiac_notice("(4.Görev) Bütün yaratıkları temizle ve Patronu çağır !")
            end
            if get_flag == 5 then
                d.jump_all (setting["spawm_pos"][5][1], setting["spawm_pos"][5][2])
                devil_tower2_plechito.get_regens(5)
                d.setf("lair_check1", 5)
                d.zodiac_notice_clear()
                d.zodiac_notice("(5. Görev) Doğru metin taşını bulana kadar metinleri yoket !")
            end
            if get_flag == 6 then
                d.jump_all (setting["spawm_pos"][6][1], setting["spawm_pos"][6][2])
                devil_tower2_plechito.get_regens(6)
                d.setf("lair_check1", 6)
                d.zodiac_notice_clear()
                d.zodiac_notice("(6. Görev) Dalga Dalga canavarları yok et !")
            end
            if get_flag == 7 then
                d.jump_all (setting["spawm_pos"][7][1], setting["spawm_pos"][7][2])
                devil_tower2_plechito.get_regens(7)
                d.setf("lair_check1", 7)
                d.zodiac_notice_clear()
                d.zodiac_notice("(7. Görev) Canavarları temizle ve sana görünecek Mavi Ölümü yoket !")
            end
            if get_flag == 8 then
                d.jump_all (setting["spawm_pos"][8][1], setting["spawm_pos"][8][2])
                devil_tower2_plechito.get_regens(8)
                d.setf("lair_check1", 8)
                d.zodiac_notice_clear()
                d.zodiac_notice("(Son Görev) Şeytanı Kurt'u yok et !")
            end
        end
        
        when level_two_timer.server_timer begin
            if d.select(get_server_timer_arg()) then
                d.set_warp_location(41, 9694, 2786)
                d.notice("Zindan tamamlanamadı !")
                d.notice("Zaman doldu !")
                server_timer('fail_bt1', 5,d.get_map_index())
                clear_server_timer("level_two_timer",d.get_map_index())
            end
        end
        
        when fail_bt1.server_timer begin
            if d.select(get_server_timer_arg()) then
                d.exit_all_to_start_position()
            end
        end
        
        when final1.timer begin
            clear_server_timer("level_two_timer",d.get_map_index())
            d.exit_all_to_start_position()
        end
        
        when 9201.chat."Mavi Ölüm Kulesi " begin
            addimage(35,35,'deneme31.tga')
            local settings = devil_tower2_plechito.settings()
            
            say_title_center(mob_name(9201))
            say("")

            if game.get_event_flag("enable_bluetower_dungeon") == 1 then
                addimage(35,35,'deneme31.tga')
                say("")
                say("")
                say("")
                say("")
                say("")
                say_reward_center("Harita şuanda bakım modunda.")
                return
            end
            
            if not party.is_party() then
                addimage(35,35,'deneme31.tga')say("")say("")say("")say("")say("")

                say_center("Bu zindana giriş yapabilmen için,")
                say_center("bir grupta bulunman gerekiyor .")
                return
            end
            
            if not party.is_leader() then
                addimage(35,35,'deneme31.tga')say("")say("")say("")say("")

                say_center("Mavi ölüm kulesine girmek istiyorsanız,")
                say_center("bir grubun lideri olmalısın .")
                return
            end
            
            if party.get_near_count() < 2 then
                addimage(35,35,'deneme31.tga')say("")say("")say("")say("")

                say_center("Mavi ölüm kulesine girmek istiyorsanız ")
                say_center("bir grupta bulunmalısınız.")
                return
            end
            
            local levelCheck, maximlevelCheck, itemCheck, durationCheck = true, true, true, true
            local noDurationMembers, noLevelMembers, noitemCheckMembers = {},{},{}
            
            for i, pid in next, devil_tower2_plechito.party_get_member_pids(), nil do
                q.begin_other_pc_block(pid)
                
                if pc.get_level() < settings["level_check1"]["minimum"] then
                    table.insert(noLevelMembers, pc.get_name())
                    levelCheck = false
                end

                if pc.count_item(55035) <= 0 then
                    table.insert(noitemCheckMembers, pc.get_name())
                    itemCheck = false
                end
                
                if get_time() < pc.getqf("bt_player_time_duration") then
                    table.insert(noDurationMembers, pc.get_name())
                    durationCheck = false
                end

                q.end_other_pc_block()
            end
            
            if not levelCheck then
                addimage(35,35,'deneme31.tga')say("")say("")say("")say("")

                say_center("Mavi ölüm kulesine girmek istiyorsanız,")
                say_center("grubun her üyesi")
                say_center(string.format("Minimum seviye: %s.", settings["level_check1"]["minimum"]))
                say_center("")
                say_center("Grubunuzdaki bazı üyeler bu şartı yerine getirmiyor !")
                for i, name in next, noLevelMembers, nil do
                    say(color(1,1,0), "    "..name)
                end
                return
            end
            
            if not itemCheck then
                addimage(35,35,'deneme31.tga')say("")say("")say("")say("")

                say_center("Bu zindana giriş yapabilmen için,")
                say_center("grubun her üyesinin zindan biletine")
                say_center("sahip olması gerekiyor bir üyenin")
                say_center("Envanterinde yeterli miktarda yok:")
                say_item(item_name(55035),55035, "")
                for i, name in next, noitemCheckMembers, nil do
                    say(color(1,1,0), "    "..name)
                end
                return
            end

            
            if not durationCheck then
                addimage(35,35,'deneme31.tga')say("")say("")say("")say("")

                say_center("Bu zindana giriş yapabilmen için,")
                say_center("grubun her üyesinin soguma süresinin")
                say_center("sona ermiş olması gerekiyor")
                say_center("soguma süresini tamamlamamış olanlar var:")
                for i, name in next, noDurationMembers, nil do
                    say(color(1,1,0), "    "..name)
                end
                return
            end
            
            if (pc.get_channel_id() == 2 or pc.get_channel_id() == 3 or pc.get_channel_id() == 4 or pc.get_channel_id() == 5 or pc.get_channel_id() == 6) then
                addimage(35,35,'deneme31.tga')say("")say("")say("")say("")
                say_center("Sadece 1. kanaldan giriş yapabilirsin.")
                return
            end

            for i, pid in next, devil_tower2_plechito.party_get_member_pids(), nil do
                q.begin_other_pc_block(pid)
                pc.remove_item(55035, 1)
                pc.setqf("bt_player_time_duration", get_time()+60*60*2)
                q.end_other_pc_block()
            end
            
            addimage(35,35,'deneme31.tga')say("")say("")say("")say("")say("")

            say_center("Mavi ölüm kalesine ışınlanıyorsun,")
            say_center("'Devam' dedikten sonra bütün üyeler ışınlanacaklar .")
            wait()
            devil_tower2_plechito.make_dungeon()
        end
        when 9201.chat."Mağara Süre sıfırla " with (game.get_event_flag("bt_dung_time") == 1) begin
            local select_timer = select("Sıfırla", "Sıfırlama")
            if select_timer == 1 then
                pc.setqf("bt_player_time_duration", 0)
            end
        end
    end
end
 
questte olsa bile pyde sadece giriş yapılabilir ve yapılamaz tanımlaması olması lazım py taraflı bir süre tutucu yok
 
questte olsa bile pyde sadece giriş yapılabilir ve yapılamaz tanımlaması olması lazım py taraflı bir süre tutucu yok
py kısmını inceleyemiyorum bilişim filesi olduğu için py dosyalarını başka bir packa atıp packi paylaşmıyorlar. Hani şunu düşündüm py dosyasında tanımlama olsa bile questte bir şeyin o paneli tetiklemesi lazım questlerini iyice inceliyorum ama panel ile alakalı CMD, WARP kısmından başka bir şey göremiyorum.
 
py kısmını inceleyemiyorum bilişim filesi olduğu için py dosyalarını başka bir packa atıp packi paylaşmıyorlar. Hani şunu düşündüm py dosyasında tanımlama olsa bile questte bir şeyin o paneli tetiklemesi lazım questlerini iyice inceliyorum ama panel ile alakalı CMD, WARP kısmından başka bir şey göremiyorum.
bu sistem luiginanın paylaştığının gui değiştirilmiş haline benziyor. o yüzden bunda py taraflı bi timer tutan bişey yok.
 
Çözüm
bu sistem luiginanın paylaştığının gui değiştirilmiş haline benziyor. o yüzden bunda py taraflı bi timer tutan bişey yok.
Söylediğin sisteme baktım alt yapısında 1-1 aynısı gibi görünüyor. Bilişime ilettik onlar süreleri düzenleyecekler direkt yansır diye tahmin ediyorum. Teşekkür ederim.
 
Py tarafıyla alakalı yorum yapamıyorum ancak py'nin cooldownu display etmesi için serverin cliente yolluyor olması lazım.
Bu, quest içerisinde login bloğunun içerisinde "cmdchat" kullanarak yapılıyor genelde.

Onun dışında, zindan takip sisteminin kullandığı özel lua fonksiyonları tanımlanmış olabilir. Yine zindan questlerinin login bloklarını incelemeni öneririm.

Yaygın bir yöntem olmasa da pc.setqf içerisine de c++ taraflı yerleşik olarak paket yollayacak bir kod kullanmış olabilirler.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst