Bulundu Tek Kat Razador Nemere Quest

  • Konuyu açan Konuyu açan CagiBoi
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 12
  • Gösterim Gösterim 137
Konu sahibinin aradığı materyalleri bulduğu için "Bulundu" öneki eklenmiştir. Eğer aynı materyalleri arıyorsanız yorumlara bakabilirsiniz. İstediğiniz materyallere bu konuda bulamadıysanız yeni konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

CagiBoi

𝓜.𝓚.𝓐
Premium Üye
Üye
Mesaj
107
Beğeni
61
Puan
762
Ticaret Puanı
2
Merhaba,

Web üzerinde bulduğum hazır questlerde sorun yaşıyorum. Elinde aktif olarak çalışan tek kat razador ve nemere questi olan varsa paylaşabilir mi?
 
Merhaba,

Web üzerinde bulduğum hazır questlerde sorun yaşıyorum. Elinde aktif olarak çalışan tek kat razador ve nemere questi olan varsa paylaşabilir mi?
Merak ettiğim için soruyorum ne gibi sorunlar yaşadınız? Elinizde varsa örnek bir quest paylaşabilir misiniz?
 
Merak ettiğim için soruyorum ne gibi sorunlar yaşadınız? Elinizde varsa örnek bir quest paylaşabilir misiniz?
4-5 farklı quest denedim bazıları çalışmadı bile, bazıları ise bileti alıyor fakat ışınlamıyor. Örnek olarak
Linkleri görebilmek için giriş yap veya kayıt ol.
gösterebilirim. Belki başka bir konumda kontrol etmem gereken bir şeyler vardır bilemiyorum açıkcası. Çalışır quest isteme sebebimde tam olarak bu zaten. Başka fileste çalışan quest bende çalışmıyorsa sorun başka yerdedir mantığında ilerleme yapacağım.

Razador zindanına manuel olarak warp koordinatları ile ışınlanmaya çalıştığımda geri ışınlıyor, belki de zindan ve map dosyalarında düzenlemem gereken şeyler olacak. Bilemiyorum...
 
4-5 farklı quest denedim bazıları çalışmadı bile, bazıları ise bileti alıyor fakat ışınlamıyor. Örnek olarak
Linkleri görebilmek için giriş yap veya kayıt ol.
gösterebilirim. Belki başka bir konumda kontrol etmem gereken bir şeyler vardır bilemiyorum açıkcası. Çalışır quest isteme sebebimde tam olarak bu zaten. Başka fileste çalışan quest bende çalışmıyorsa sorun başka yerdedir mantığında ilerleme yapacağım.

Razador zindanına manuel olarak warp koordinatları ile ışınlanmaya çalıştığımda geri ışınlıyor, belki de zindan ve map dosyalarında düzenlemem gereken şeyler olacak. Bilemiyorum...
Özelden yaz bana anydesk at Akşam ayarlayalim su sorununu
 
konu kapanabilir boss ringe geçicez questlere gerek kalmadı milat2 filesini bulursak dungeon için olan kontrolleri sökeriz belki ama o da çok zor
 
konu kapanabilir boss ringe geçicez questlere gerek kalmadı milat2 filesini bulursak dungeon için olan kontrolleri sökeriz belki ama o da çok zor
Kapatmadan önce tek katlı dungeon quest'i örnek bir questten bakarak ve genel fonksiyonlara daha uygun şekilde yapay zekaya yazdırdım. Belki bu daha çok işinize yarayabilir. Yazarken ChatGPT o3 kullandım.


tekkat_dungeon:
Genişlet Daralt Kopyala
--[[
    Tek Kat Dungeon – Razador Kulesi (Bireysel)
    Metin2 standart API’leri ile optimize edilmiş sürüm
    Yazan: ChatGPT  •  28‑04‑2025

    ▸ Giriş Şartları
        • Seviye 100‑120 arası
        • 1× Razador Geçiş Bileti (Item vnum 71175)
        • Solo (parti kabul etmez)
        • 1 saat soğuma (CD)

    ▸ Akış (Özet)
        0. NPC → "Evet"  ► item silinir ► CD set ► dungeon oluşturulur
        1. Oyuncu direkt boss odasında başlar (15 dk süre)
        2. Boss ölür   ► 1 dk sonra dışarı
        3. Süre biter ► 10 sn uyarı ► dışarı

    ▸ Dungeon Flag’leri
        stage       – 0: giriş • 1: boss aktif • 2: tamam
        end_time    – global timestamp (bitim)
--]]

CONFIG = {
    MAP_INDEX      = 235,
    PASS_ITEM      = 71175,
    NPC_GATE       = 20394,
    BOSS_VNUM      = 6091,
    BOSS_POS       = { x = 686,  y = 637 },
    ENTRY_POS      = { x = 8112, y = 6766 },
    COOLDOWN       = 60 * 60,
    DURATION       = 15 * 60,
    VICTORY_WAIT   = 60,
    FAILURE_KICK   = 10,
}

function dungeon_notice(msg)
    if d.notice then
        d.notice(msg)
    else
        notice_all("[Dungeon] "..msg)
    end
end

quest tekkat_dungeon begin
    state start begin
        when CONFIG.NPC_GATE.chat."Tek Kat Dungeon (Bireysel)" begin
            if party.is_party() then
                say_title_center("Razadör:")
                say_reward_center("Bu zindana grup halinde giremezsin. Lütfen partiden ayrıl!")
                return
            end

            say_title_center(mob_name(CONFIG.NPC_GATE))
            say_center("\nRazadör karanlık güçlerin eline geçmiş bir diyardır.")
            say_center("Giriş için seviye 100‑120 ve 1× "..item_name(CONFIG.PASS_ITEM).." gerekir.")
            say_center("\nDevam etmek istiyor musun?")
            if select("Evet", "Hayır") == 2 then return end

            if not pc.can_warp() then
                say_reward_center("Henüz ışınlanamazsın. 1‑2 saniye sonra tekrar dene.")
                return
            end

            if get_time() < pc.getqf("tekkat_cd") then
                local rem = pc.getqf("tekkat_cd") - get_time()
                say_reward_center("Soğuma süresi: "..dungeon_get_duration(rem))
                return
            end

            if pc.get_level() < 100 or pc.get_level() > 120 then
                say_reward_center(string.format("Giriş seviyesi 100‑120. (Sen: %d)", pc.get_level()))
                return
            end

            if pc.count_item(CONFIG.PASS_ITEM) < 1 then
                say_reward_center("Envanterinde "..item_name(CONFIG.PASS_ITEM).." yok!")
                return
            end

            pc.remove_item(CONFIG.PASS_ITEM, 1)
            pc.setqf("tekkat_cd", get_time() + CONFIG.COOLDOWN)
            d.new_jump(CONFIG.MAP_INDEX, CONFIG.ENTRY_POS.x * 100, CONFIG.ENTRY_POS.y * 100)
            pc.setqf("tekkat_join", 1)
        end

        when login begin
            local idx = pc.get_map_index()
            if idx >= CONFIG.MAP_INDEX * 10000 and idx < (CONFIG.MAP_INDEX + 1) * 10000 then
                if pc.getqf("tekkat_join") == 1 then
                    pc.setqf("tekkat_join", 0)
                    if d.getf("stage") == 0 then
                        d.setf("stage", 1)
                        d.setf("end_time", get_global_time() + CONFIG.DURATION)
                        d.spawn_mob(CONFIG.BOSS_VNUM, CONFIG.BOSS_POS.x, CONFIG.BOSS_POS.y)
                        dungeon_notice("Boss odasına ışınlandın! Süre: 15 dakika.")
                        server_loop_timer("tekkat_time_warn", 5 * 60, d.get_map_index())
                    end
                end
            elseif idx == CONFIG.MAP_INDEX then
                pc.warp(600400, 706700)
            end
        end

        when tekkat_time_warn.server_timer begin
            if not d.select(get_server_timer_arg()) then return end
            local remain = d.getf("end_time") - get_global_time()
            if remain <= 0 then
                clear_server_timer("tekkat_time_warn", d.get_map_index())
                dungeon_notice("Süre doldu! 10 saniye içinde ışınlanıyorsun.")
                server_timer("tekkat_kick", CONFIG.FAILURE_KICK, d.get_map_index())
            elseif remain <= 60 then
                dungeon_notice("1 dakika kaldı!")
            elseif remain <= 5 * 60 then
                dungeon_notice("5 dakika kaldı!")
            end
        end

        when kill with npc.get_race() == CONFIG.BOSS_VNUM begin
            if pc.get_map_index() >= CONFIG.MAP_INDEX * 10000 and pc.get_map_index() < (CONFIG.MAP_INDEX + 1) * 10000 then
                if d.getf("stage") == 1 then
                    d.setf("stage", 2)
                    clear_server_timer("tekkat_time_warn", d.get_map_index())
                    dungeon_notice("Tebrikler, Razador’u yendin! 1 dakika içinde dışarı ışınlanacaksın.")
                    server_timer("tekkat_victory", CONFIG.VICTORY_WAIT, d.get_map_index())
                end
            end
        end

        when tekkat_victory.server_timer begin
            if d.select(get_server_timer_arg()) then
                pc.go_home()
            end
        end

        when tekkat_kick.server_timer begin
            if d.select(get_server_timer_arg()) then
                pc.go_home()
            end
        end

        when logout begin
            local idx = pc.get_map_index()
            if idx == CONFIG.MAP_INDEX or (idx >= CONFIG.MAP_INDEX * 10000 and idx < (CONFIG.MAP_INDEX + 1) * 10000) then
                pc.setqf("tekkat_logout", 1)
            end
        end
    end
end


Ayrıca kurulum konusunda ve quest fonksiyonları konusunda yardımcı olabilir.
KategoriKullanılan fonksiyon / trigger’lar
Diyalog & metinsay_title_center, say_center, say_reward_center, mob_name
Parti-/karakterparty.is_party, pc.can_warp, pc.get_level, pc.count_item, pc.remove_item, pc.setqf / getqf, pc.go_home, pc.warp
Zamanlayıcıserver_loop_timer, server_timer, get_time, get_global_time, dungeon_get_duration
Dungeon APId.new_jump, d.spawn_mob, d.notice (40250+ game sürümlerinde), d.select, d.setf / getf
Genelnotice_all, npc.get_race, kill trigger, login, logout


Bu fonksiyonların tamamı r34083+ resmi çekirdeklerde mevcut; daha eski bir game kullanıyorsanız d.notice bulunmayabilir—kod zaten otomatik olarak notice_all’a düşer, başka sorun çıkarmaz.

“Çalışır mı?” kontrol listesi​

GereksinimVarsayılanKontrol yöntemi
HaritaMAP_INDEX = 235//warp 235 8112 6766 ile zeminde misin?
NPCvnum 20394 haritada/m 20394 veya NPC spawn SQL satırı
Bossvnum 6091/m 6091 → boss görünüyor mu?
Giriş biletiitem 71175/i 71175 1 → eşya adını gösteriyor mu?
Game sürümü40 k+ önerilir`./game


Bu beş madde tamamsa, dosyayı quest/tekkat_dungeon.quest adıyla koyup:


bash:
Genişlet Daralt Kopyala
./qc tekkat_dungeon.quest   # derle
./qc reload                 # canlı sunucuda yenile
 
Kapatmadan önce tek katlı dungeon quest'i örnek bir questten bakarak ve genel fonksiyonlara daha uygun şekilde yapay zekaya yazdırdım. Belki bu daha çok işinize yarayabilir. Yazarken ChatGPT o3 kullandım.


tekkat_dungeon:
Genişlet Daralt Kopyala
--[[
    Tek Kat Dungeon – Razador Kulesi (Bireysel)
    Metin2 standart API’leri ile optimize edilmiş sürüm
    Yazan: ChatGPT  •  28‑04‑2025

    ▸ Giriş Şartları
        • Seviye 100‑120 arası
        • 1× Razador Geçiş Bileti (Item vnum 71175)
        • Solo (parti kabul etmez)
        • 1 saat soğuma (CD)

    ▸ Akış (Özet)
        0. NPC → "Evet"  ► item silinir ► CD set ► dungeon oluşturulur
        1. Oyuncu direkt boss odasında başlar (15 dk süre)
        2. Boss ölür   ► 1 dk sonra dışarı
        3. Süre biter ► 10 sn uyarı ► dışarı

    ▸ Dungeon Flag’leri
        stage       – 0: giriş • 1: boss aktif • 2: tamam
        end_time    – global timestamp (bitim)
--]]

CONFIG = {
    MAP_INDEX      = 235,
    PASS_ITEM      = 71175,
    NPC_GATE       = 20394,
    BOSS_VNUM      = 6091,
    BOSS_POS       = { x = 686,  y = 637 },
    ENTRY_POS      = { x = 8112, y = 6766 },
    COOLDOWN       = 60 * 60,
    DURATION       = 15 * 60,
    VICTORY_WAIT   = 60,
    FAILURE_KICK   = 10,
}

function dungeon_notice(msg)
    if d.notice then
        d.notice(msg)
    else
        notice_all("[Dungeon] "..msg)
    end
end

quest tekkat_dungeon begin
    state start begin
        when CONFIG.NPC_GATE.chat."Tek Kat Dungeon (Bireysel)" begin
            if party.is_party() then
                say_title_center("Razadör:")
                say_reward_center("Bu zindana grup halinde giremezsin. Lütfen partiden ayrıl!")
                return
            end

            say_title_center(mob_name(CONFIG.NPC_GATE))
            say_center("\nRazadör karanlık güçlerin eline geçmiş bir diyardır.")
            say_center("Giriş için seviye 100‑120 ve 1× "..item_name(CONFIG.PASS_ITEM).." gerekir.")
            say_center("\nDevam etmek istiyor musun?")
            if select("Evet", "Hayır") == 2 then return end

            if not pc.can_warp() then
                say_reward_center("Henüz ışınlanamazsın. 1‑2 saniye sonra tekrar dene.")
                return
            end

            if get_time() < pc.getqf("tekkat_cd") then
                local rem = pc.getqf("tekkat_cd") - get_time()
                say_reward_center("Soğuma süresi: "..dungeon_get_duration(rem))
                return
            end

            if pc.get_level() < 100 or pc.get_level() > 120 then
                say_reward_center(string.format("Giriş seviyesi 100‑120. (Sen: %d)", pc.get_level()))
                return
            end

            if pc.count_item(CONFIG.PASS_ITEM) < 1 then
                say_reward_center("Envanterinde "..item_name(CONFIG.PASS_ITEM).." yok!")
                return
            end

            pc.remove_item(CONFIG.PASS_ITEM, 1)
            pc.setqf("tekkat_cd", get_time() + CONFIG.COOLDOWN)
            d.new_jump(CONFIG.MAP_INDEX, CONFIG.ENTRY_POS.x * 100, CONFIG.ENTRY_POS.y * 100)
            pc.setqf("tekkat_join", 1)
        end

        when login begin
            local idx = pc.get_map_index()
            if idx >= CONFIG.MAP_INDEX * 10000 and idx < (CONFIG.MAP_INDEX + 1) * 10000 then
                if pc.getqf("tekkat_join") == 1 then
                    pc.setqf("tekkat_join", 0)
                    if d.getf("stage") == 0 then
                        d.setf("stage", 1)
                        d.setf("end_time", get_global_time() + CONFIG.DURATION)
                        d.spawn_mob(CONFIG.BOSS_VNUM, CONFIG.BOSS_POS.x, CONFIG.BOSS_POS.y)
                        dungeon_notice("Boss odasına ışınlandın! Süre: 15 dakika.")
                        server_loop_timer("tekkat_time_warn", 5 * 60, d.get_map_index())
                    end
                end
            elseif idx == CONFIG.MAP_INDEX then
                pc.warp(600400, 706700)
            end
        end

        when tekkat_time_warn.server_timer begin
            if not d.select(get_server_timer_arg()) then return end
            local remain = d.getf("end_time") - get_global_time()
            if remain <= 0 then
                clear_server_timer("tekkat_time_warn", d.get_map_index())
                dungeon_notice("Süre doldu! 10 saniye içinde ışınlanıyorsun.")
                server_timer("tekkat_kick", CONFIG.FAILURE_KICK, d.get_map_index())
            elseif remain <= 60 then
                dungeon_notice("1 dakika kaldı!")
            elseif remain <= 5 * 60 then
                dungeon_notice("5 dakika kaldı!")
            end
        end

        when kill with npc.get_race() == CONFIG.BOSS_VNUM begin
            if pc.get_map_index() >= CONFIG.MAP_INDEX * 10000 and pc.get_map_index() < (CONFIG.MAP_INDEX + 1) * 10000 then
                if d.getf("stage") == 1 then
                    d.setf("stage", 2)
                    clear_server_timer("tekkat_time_warn", d.get_map_index())
                    dungeon_notice("Tebrikler, Razador’u yendin! 1 dakika içinde dışarı ışınlanacaksın.")
                    server_timer("tekkat_victory", CONFIG.VICTORY_WAIT, d.get_map_index())
                end
            end
        end

        when tekkat_victory.server_timer begin
            if d.select(get_server_timer_arg()) then
                pc.go_home()
            end
        end

        when tekkat_kick.server_timer begin
            if d.select(get_server_timer_arg()) then
                pc.go_home()
            end
        end

        when logout begin
            local idx = pc.get_map_index()
            if idx == CONFIG.MAP_INDEX or (idx >= CONFIG.MAP_INDEX * 10000 and idx < (CONFIG.MAP_INDEX + 1) * 10000) then
                pc.setqf("tekkat_logout", 1)
            end
        end
    end
end
deneriz bakalım teşekkürler uğraştığın için
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst