- Mesaj
- 182
- Çözümler
- 3
- Beğeni
- 149
- Puan
- 764
- Ticaret Puanı
- 0
Merhaba arkadaşlar,
Geçenlerde @CagiBoi adlı arkadaşımızın yardım konusu üzerine baya oturdum merak ettiğim ve yapay zekanın hünerlerini test etmek için giriştim bu olaya. Sanırım paylaşılan questler hep farklı ve işlevi olmayan questlerdi. Bu yaptığım Quest tamamen solo oyuncular için, direkt olarak boss odasına ışınlayan ve dungeonı başlatan sadece Boss'u kestiğiniz mob olmayan bir versiyonu. Razador Questi üzerinden örnek alarak yapay zekaya yazdırdım. Baya bir uğraştırdı insanın gerçekten bilgisi olmayınca aşırı zor oluyor....
Ayrıca quest'i eklerken core dumped vermemesi için kullandığım kodlarda bunlar:
Başka Zindana Uyarlama (Kısaca):
Geçenlerde @CagiBoi adlı arkadaşımızın yardım konusu üzerine baya oturdum merak ettiğim ve yapay zekanın hünerlerini test etmek için giriştim bu olaya. Sanırım paylaşılan questler hep farklı ve işlevi olmayan questlerdi. Bu yaptığım Quest tamamen solo oyuncular için, direkt olarak boss odasına ışınlayan ve dungeonı başlatan sadece Boss'u kestiğiniz mob olmayan bir versiyonu. Razador Questi üzerinden örnek alarak yapay zekaya yazdırdım. Baya bir uğraştırdı insanın gerçekten bilgisi olmayınca aşırı zor oluyor....
Ayrıca quest'i eklerken core dumped vermemesi için kullandığım kodlarda bunlar:
bash:
sed -i '' -e 's/\r$//' pre_qc/flame_dungeon_solo.quest
cd /usr/home/main/share/locale/europe/quest
./qc pre_qc/flame_dungeon_solo.quest
flame_dungeon_solo:
------------------------------------------------------------------
-- Flame Dungeon – Tek Kat (Solo) v1.0
-- • NPC 20394 • Bilet 71095 • Harita 351
-- • Cool-down YOK • Süre 15 dk • Boss vnum 6091
------------------------------------------------------------------
quest flame_dungeon_solo begin
state start begin
--------------------------------------------------------------
-- ► NPC diyaloğu / bilet kontrolü / giriş
when 20394.chat."Alev Zindanı (Solo)" begin
if party.is_party() then
say("Grup lideri zindana tek başına girmelidir.")
return
end
if not pc.can_warp() then
say("Şu anda ışınlanamazsın.")
return
end
if pc.get_level() < 100 or pc.get_level() > 120 then
say("Bu zindana girebilmek için seviyen 100 ile 120 arasında olmalıdır.")
return
end
if pc.count_item(71095) < 1 then
say("Giriş için gerekli olan Alev Geçidi Biletin yok.")
return
end
say_title("Zindan Bilgilendirmesi:")
say("Zindanda sadece boss bulunur ve 15 dakikan var.")
say("Girmek istiyor musun?")
local s = select("Evet", "Hayır")
if s == 2 then return end
pc.remove_item(71095, 1)
-- d.new_jump(map, x*100, y*100) ile solo instance oluştur ve ışınla
d.new_jump(351, 8109 * 100, 6867 * 100)
-- pc.get_id() kullanımı kaldırıldı
-- 2 saniye sonra zindanı başlat (zindan map index'i ile)
server_timer("fds_init", 2, d.get_map_index())
end
--------------------------------------------------------------
-- ► Zindan başlangıcı: Boss doğurma ve süre başlatma
when fds_init.server_timer begin
local map_idx = get_server_timer_arg()
-- Zindan map indexi geçerli mi kontrol et
if map_idx >= 3510000 then
-- Zindan örneğini seç
if d.select(map_idx) then
-- Yaratık regenini kapat
d.set_regen_file("")
-- Boss'u (Razador) belirtilen koordinatlarda doğur (dungeon context)
d.spawn_mob(6091, 686, 637)
-- Bitiş zamanını zindan flag'ı olarak ayarla
d.setf("end_time", get_global_time() + 900)
notice_all("[Alev Zindanı] Boss ortaya çıktı! Onu yenmek için 15 dakikan var.")
-- Periyodik uyarı/kontrol zamanlayıcısını başlat (zindan map index'i ile)
server_loop_timer("fds_warn_check", 300, map_idx)
else
-- d.select(map_idx) başarısız olursa logla
syschat("Solo Alev Zindanı: Zindan örneği seçilemedi (fds_init): "..map_idx)
-- Oyuncuyu bulmak zor olabilir, bu yüzden genel bir çıkış denenir
-- Belki bu durumda oyuncuyu direkt ışınlamak daha güvenli olabilir?
-- Şimdilik d.select hatasını loglamakla yetinelim.
end
else
-- Geçici map indexi alınamadıysa logla
syschat("Solo Alev Zindanı: Geçici map indexi alınamadı (fds_init): "..map_idx)
-- Hata durumunda oyuncuyu manuel bulup ışınlamak gerekebilir, ama pc.get_id olmadığı için zor.
end
-- pc.select(pid) mantığı kaldırıldı
end
--------------------------------------------------------------
-- ► Süre uyarıları ve zaman aşımı kontrolü
when fds_warn_check.server_timer begin
local map_idx = get_server_timer_arg()
-- Zindan örneğini seç
if not d.select(map_idx) then
clear_server_timer("fds_warn_check", map_idx)
return
end
-- Bitiş zamanını zindan flag'ından al
local end_time = d.getf("end_time")
if end_time == 0 then return end -- Bitiş süresi yoksa çık
local remain_time = end_time - get_global_time()
if remain_time <= 0 then
-- Süre doldu
clear_server_timer("fds_warn_check", map_idx) -- Uyarı timer'ını temizle
notice_all("[Alev Zindanı] Süren doldu! Zindandan çıkarılıyorsun.")
-- 10 saniye sonra çıkarma işlemini başlat (zindan map index'i ile)
server_timer("fds_kick_timeout", 10, map_idx)
elseif remain_time <= 60 then
notice_all("[Alev Zindanı] Son 1 dakika!")
elseif remain_time <= 300 then
notice_all("[Alev Zindanı] Son 5 dakika!")
end
end
--------------------------------------------------------------
-- ► Süre dolunca oyuncuyu dışarı ışınla
when fds_kick_timeout.server_timer begin
local map_idx = get_server_timer_arg()
-- Zindan örneğini seç
if d.select(map_idx) then
-- Çıkış yerini ayarla (Map Index 62)
d.set_warp_location(62, 6142, 7068)
-- Zindandaki herkesi (bu durumda tek oyuncu) ayarlanmış yere ışınla
d.exit_all()
-- pc.warp ve bayrak kontrolü kaldırıldı
end
end
--------------------------------------------------------------
-- ► Boss yenildiğinde
when 6091.kill begin
-- Boss'un kesildiği zindan örneğini al
local map_idx = d.get_map_index()
-- Zindan map index'i geçerli mi kontrol et (emin olmak için)
if map_idx >= 3510000 then -- Geçici map indexleri genellikle ana index * 10000 ile başlar
clear_server_timer("fds_warn_check", map_idx) -- Uyarı timer'ını temizle
notice_all("[Alev Zindanı] Tebrikler! Boss'u yendin. 60 saniye sonra dışarı çıkarılacaksın.")
-- 60 saniye sonra çıkış işlemini başlat (zindan map index'i ile)
server_timer("fds_exit_success", 60, map_idx)
-- Ödül verme işlemleri buraya eklenebilir (d.spawn_item vb.)
end
-- Oyuncu bayrak kontrolü kaldırıldı
end
-- ► Boss yenildikten sonra oyuncuyu dışarı ışınla
when fds_exit_success.server_timer begin
local map_idx = get_server_timer_arg()
-- Zindan örneğini seç
if d.select(map_idx) then
-- Çıkış yerini ayarla (Map Index 62)
d.set_warp_location(62, 6142, 7068)
-- Zindandaki herkesi (bu durumda tek oyuncu) ayarlanmış yere ışınla
d.exit_all()
-- pc.warp ve bayrak kontrolü kaldırıldı
end
end
--------------------------------------------------------------
end -- state start end
end -- quest end
- Giriş: d.new_jump(YENI_MAP, GIRIS_X * 100, GIRIS_Y * 100)
- Map Index Kontrolü: if map_idx >= YENI_MAP * 10000 then
- Boss/Moblar: d.spawn_mob(YENI_VNUM, BOSS_X, BOSS_Y) ve when YENI_VNUM.kill
- Çıkış: d.set_warp_location(CIKIS_MAP, CIKIS_X, CIKIS_Y) (Burada koordinatları çarpmayın!)
- Diğer: NPC, Bilet, Seviye, Süre, Metinler, Zamanlayıcı isimleri.
Son düzenleme: