Eve geçince paylaşayımMerhaba,
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?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?
4-5 farklı quest denedim bazıları çalışmadı bile, bazıları ise bileti alıyor fakat ışınlamıyor. Örnek olarakMerak ettiğim için soruyorum ne gibi sorunlar yaşadınız? Elinizde varsa örnek bir quest paylaşabilir misiniz?
Özelden yaz bana anydesk at Akşam ayarlayalim su sorununu4-5 farklı quest denedim bazıları çalışmadı bile, bazıları ise bileti alıyor fakat ışınlamıyor. Örnek olarakLinkleri 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...
Beraber çalıştığım geliştirici arkadaşım var, düşünmen yeter teşekkür ediyorum.Özelden yaz bana anydesk at Akşam ayarlayalim su sorununu
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.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
--[[
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
Kategori | Kullanılan fonksiyon / trigger’lar |
---|---|
Diyalog & metin | say_title_center , say_center , say_reward_center , mob_name |
Parti-/karakter | party.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 API | d.new_jump , d.spawn_mob , d.notice (40250+ game sürümlerinde), d.select , d.setf / getf |
Genel | notice_all , npc.get_race , kill trigger, login , logout |
Gereksinim | Varsayılan | Kontrol yöntemi |
---|---|---|
Harita | MAP_INDEX = 235 | //warp 235 8112 6766 ile zeminde misin? |
NPC | vnum 20394 haritada | /m 20394 veya NPC spawn SQL satırı |
Boss | vnum 6091 | /m 6091 → boss görünüyor mu? |
Giriş bileti | item 71175 | /i 71175 1 → eşya adını gösteriyor mu? |
Game sürümü | 40 k+ önerilir | `./game |
./qc tekkat_dungeon.quest # derle
./qc reload # canlı sunucuda yenile
deneriz bakalım teşekkürler uğraştığın içinKapatmadan ö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:--[[ 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
Ne demek rica ederimdeneriz bakalım teşekkürler uğraştığın için
Eline, emeğine sağlık hocam teşekkür ederim.Selamlar biraz uzun sürdü ama geceden beridir yapay zekayla uğraş dur bir tane quest çıkardım sonunda.
Tek Katlı Solo Dungeon Quest - onuda burada paylaştım umarım işinize yarar.