- Mesaj
- 14
- Beğeni
- 4
- Puan
- 405
- Ticaret Puanı
- 0
Kod bloklarını kod editörüne ekleyiniz.
arkdaşlar herekse selam hızlı şekilde soruna geçicem yardımıcı olursanız sevinirim sorun ise zindan bekçisini kendi mapından hariç başka yere çagırsam çalişmiyor nasıl çalişmiyor derseniz ise zindana almıyor beni npc kısmı açılıyor fakat zindana almıyor sorunu bulamadım questi atıyorum bir zindan deyil bir kaç zindanda bu sorun var questin içinde düzenlemem gereken yerei bana derseniz sevirim yapay zekaylan yapmaya çaliştim fakat halen aynı
buda questin iç kısmı yardımcı olanlar şimdiden teşekürler
Lua (Quest):
quest alastor_dungeon begin
state start begin
----------------------------------------------------------------
-- AYARLAR
----------------------------------------------------------------
function settings()
return {
["index"] = 175,
["warp"] = {12288, 12032},
["index_out"] = 170,
["out_pos"] = {11520, 12032},
["level_check"] = { ["min"] = 100, ["max"] = 120 },
["pass"] = 20600,
["Items"] = {30751, 20600, 30753},
["main_npc"] = 20602,
["main_npc_pos"] = {134, 148, 5},
["alastor"] = 20600,
["alastor_pos"] = {134, 101, 5},
["regen_wave1"] = "data/dungeon/alastor_dungeon/regen_1a.txt",
["regen_monuments"] = "data/dungeon/alastor_dungeon/regen_2a.txt",
["regen_slots2"] = "data/dungeon/alastor_dungeon/regen_2b.txt",
["slots2_total"] = 1, -- regen_2b.txt içeriğine göre
}
end
----------------------------------------------------------------
-- YARDIMCI FONKSİYONLAR
----------------------------------------------------------------
function party_get_member_pids()
local pids = { party.get_member_pids() }
return pids
end
function is_inside()
local s = alastor_dungeon.settings()
local mi = pc.get_map_index()
return pc.in_dungeon() and mi >= s["index"]*10000 and mi < (s["index"]+1)*10000
end
function clear_all()
d.clear_regen()
d.kill_all()
end
function clear_timers()
clear_server_timer("alastor_20min", get_server_timer_arg())
clear_server_timer("alastor_10min", get_server_timer_arg())
clear_server_timer("alastor_5min", get_server_timer_arg())
clear_server_timer("alastor_1min", get_server_timer_arg())
clear_server_timer("alastor_0min", get_server_timer_arg())
clear_server_timer("alastor_final", get_server_timer_arg())
clear_server_timer("alastor_spawn_countdown", get_server_timer_arg())
end
----------------------------------------------------------------
-- GİRİŞ KONTROLÜ (SOLO + PARTİ) — COOLDOWN PARTİYE DE ENGEL
----------------------------------------------------------------
function check_enter()
local s = alastor_dungeon.settings()
addimage(25, 10, "alastor_bg_01.tga")
addimage(225, 150, "alastor_npc.tga")
say(" ")
say_title(mob_name(20601) .. " ")
-- Solo cooldown kontrolü (partideyken de kişiye uygulanır)
if (get_global_time() - pc.getf("alastor_dungeon","exit_alastor_dungeon_time")) < 60*60 then
local remaining = pc.getf("alastor_dungeon","exit_alastor_dungeon_time") - get_global_time() + 60*60
local dk = math.max(0, math.floor(remaining / 60))
say("Tekrar zindana girebilmek için beklemelisin. ")
say_reward("Kalan süre: "..dk.." dakika. ")
return false
end
-- Parti ise toplu kontroller
if party.is_party() then
if not party.is_leader() then
say_reward("Yalnızca grup lideri giriş başlatabilir. ")
return false
end
if party.get_near_count() < 2 then
say_reward("Grubundaki oyuncular yakında olmalı (min. 2 kişi). ")
say ("Eğer grubundaki oyuncular yanındaysa tekrar dene! ")
return false
end
local pids = alastor_dungeon.party_get_member_pids()
local MemberLow, MemberHigh, MemberNoPass, MemberCooldown = {}, {}, {}, {}
local level_ok, pass_ok, cd_ok = true, true, true
for i, pid in next, pids do
q.begin_other_pc_block(pid)
local name = pc.get_name()
local last_exit = pc.getf("alastor_dungeon","exit_alastor_dungeon_time")
local diff = get_global_time() - last_exit
if diff < 60*60 then
local kalan = math.max(0, 60 - math.floor(diff/60))
table.insert(MemberCooldown, { name = name, minutes = kalan })
cd_ok = false
end
if pc.get_level() < s["level_check"]["min"] then table.insert(MemberLow, name) level_ok = false end
if pc.get_level() > s["level_check"]["max"] then table.insert(MemberHigh, name) level_ok = false end
if pc.count_item(s["pass"]) < 1 then table.insert(MemberNoPass, name) pass_ok = false end
q.end_other_pc_block()
end
if not cd_ok then
say_reward("Üzgünüm, grubundaki bazı oyuncuların soğuma süresi devam ediyor: ")
for i, data in next, MemberCooldown do
say(string.format("- %s (%d dk) ", data.name, data.minutes))
end
return false
end
if not level_ok then
say_reward("Bazı grup üyeleri seviye şartını sağlamıyor: ")
for i, n in next, MemberLow do say_title("- "..n.." ") end
for i, n in next, MemberHigh do say_title("- "..n.." ") end
return false
end
if not pass_ok then
say_reward("Bazı üyelerde giriş eşyası eksik: ")
say_item("Alastor Sihirli Taşı ", s["pass"], " ")
for i, n in next, MemberNoPass do say_title("- "..n.." ") end
return false
end
return true
end
-- Solo ise seviye ve item kontrol
if pc.get_level() < s["level_check"]["min"] then
say("En az "..s["level_check"]["min"].." seviye olmalısın. ")
return false
end
if pc.get_level() > s["level_check"]["max"] then
say("En fazla "..s["level_check"]["max"].." seviye ile girebilirsin. ")
return false
end
if pc.count_item(s["pass"]) < 1 then
say_item("Donmuş Anahtar ", s["pass"], " ")
say("Eşya eksik! ")
return false
end
return true
end
----------------------------------------------------------------
-- DUNGEON OLUŞTURMA + COOLDOWN DAĞITIMI (LİDER DAHİL)
---------------------------------------------------------------->
function create_dungeon()
local s = alastor_dungeon.settings()
if party.is_party() then
local leader_pid = party.get_leader_pid()
-- Lider (aktif pc)
pc.remove_item(s["pass"], 1)
pc.setf("alastor_dungeon","exit_alastor_dungeon_time", get_global_time())
pc.setqf("alastor_dungeon", get_time() + 3600)
-- Diğer üyeler
local pids = alastor_dungeon.party_get_member_pids()
for i, pid in next, pids do
if pid ~= leader_pid then
q.begin_other_pc_block(pid)
pc.remove_item(s["pass"], 1)
pc.setf("alastor_dungeon","exit_alastor_dungeon_time", get_global_time())
pc.setqf("alastor_dungeon", get_time() + 3600)
q.end_other_pc_block()
end
end
d.new_jump_party(s["index"], s["warp"][1], s["warp"][2])
else
-- Solo
pc.remove_item(s["pass"], 1)
d.new_jump(s["index"], s["warp"][1]*100, s["warp"][2]*100)
pc.setf("alastor_dungeon","exit_alastor_dungeon_time", get_global_time())
pc.setqf("alastor_dungeon", get_time() + 3600)
end
d.spawn_mob_dir(s["main_npc"], s["main_npc_pos"][1], s["main_npc_pos"][2], s["main_npc_pos"][3])
d.setf("level", 1)
server_timer("alastor_20min", 5*60, d.get_map_index())
end
----------------------------------------------------------------
-- GİRİŞ DİYALOĞU
----------------------------------------------------------------
when 20601.chat."Kuzey Rüzgarı Derinlikleri (Kolay) " with not alastor_dungeon.is_inside() begin
addimage(25, 10, "alastor_bg_01.tga")
addimage(225, 150, "alastor_npc.tga")
say(" ")
say_title(mob_name(20601) .. " ")
say("Zindana girmek ister misin? ")
if alastor_dungeon.check_enter() then
say_reward("Hazırlan, zindana giriş yapılıyor... ")
wait()
alastor_dungeon.create_dungeon()
end
end
----------------------------------------------------------------
-- LOGIN (DIŞARI WARP KONUMU)
----------------------------------------------------------------
when login with alastor_dungeon.is_inside() begin
local s = alastor_dungeon.settings()
d.set_warp_location(s["index_out"], s["out_pos"][1], s["out_pos"][2])
end
----------------------------------------------------------------
-- GM RESET
----------------------------------------------------------------
when 20601.chat."GM: Zaman sıfırlama (Kolay) " with pc.is_gm() and not alastor_dungeon.is_inside() begin
addimage(25, 10, "alastor_bg_01.tga")
say_title(mob_name(20601) .. " ")
if select("Zamanı sıfırla ","Kapat ") == 1 then
pc.setf("alastor_dungeon","exit_alastor_dungeon_time", 0)
say("Zaman sıfırlandı. ")
end
end
----------------------------------------------------------------
-- 1. AŞAMA: Yumurtadan başlat
----------------------------------------------------------------
when 20602.chat."Çabuk olmalısın! " with alastor_dungeon.is_inside() and d.getf("level")==1 begin
addimage(25, 10, "alastor_bg_02.tga")
addimage(225, 150, "alastor_npc.tga")
say(" ")
say_title("Beyaz Ejderha Yumurtası ")
say("Zindanı başlatmak istiyor musun? ")
if select("Evet ","Hayır ") == 1 then
npc.purge()
d.setf("level", 2)
d.setf("wave1_kill", 0)
d.notice("Alastor Zindanı: İlk dalga başladı! ")
d.notice("Tüm yaratıkları öldür! ")
d.regen_file(alastor_dungeon.settings()["regen_wave1"])
end
end
----------------------------------------------------------------
-- KILL LOGİĞİ
----------------------------------------------------------------
when kill with alastor_dungeon.is_inside() and not npc.is_pc() begin
local s = alastor_dungeon.settings()
local race = npc.get_race()
-- 1. DALGA: 40 yaratık
if d.getf("level") == 2 then
if race == 20604 or race == 20605 or race == 20606 or race == 20607 then
d.setf("wave1_kill", d.getf("wave1_kill") + 1)
local remain = 70 - d.getf("wave1_kill")
if remain > 0 then
d.notice("Kalan yaratık: " .. remain .. " / 70 ")
else
d.setf("level", 3)
d.setf("slots2_kill", 0)
d.setf("slots2_drop_done", 0)
d.setf("monuments", 0)
alastor_dungeon.clear_all()
d.regen_file(s["regen_monuments"])
d.regen_file(s["regen_slots2"])
d.notice("Tüm slotları öldürdün! ")
d.notice("Kuzey Rüzgarı Kristali ortaya çıktı ve Zula Savaş Reisi geldi! ")
d.notice("Zula Savaşı Reisi'ni Yok et ve Donmuş Anahtarı elde et! ")
end
end
return
end
-- 2. DALGA: Anıt koruyucuları (109)
if d.getf("level") == 3 then
if race == 20611 then
d.setf("slots2_kill", d.getf("slots2_kill") + 1)
local k = d.getf("slots2_kill")
if k >= s["slots2_total"] and d.getf("slots2_drop_done") == 0 then
game.drop_item(s["Items"][2], 1)
d.setf("slots2_drop_done", 1)
d.notice("Tüm koruyucular yok edildi! Donmuş Anahtar düştü! ")
say ("Zula Savaş Reisi'ni katlettin! ")
say ("Düşürdüğün donmuş anahtarı Kuzey Rüzgarı Kristaline sürükle. ")
else
d.notice(string.format("Anıt koruyucusu öldürüldü (%d / %d) ", k, s["slots2_total"]))
end
end
return
end
-- BOSS öldürülürse
if d.getf("level") == 4 and race == s["alastor"] then
d.notice("Tebrikler! Alastor'u yendin! ")
d.notice("2 dakika içinde dışarı ışınlanacaksın. ")
alastor_dungeon.clear_all()
alastor_dungeon.clear_timers()
d.setf("level", 5)
server_timer("alastor_final", 120, d.get_map_index())
return
end
end
----------------------------------------------------------------
-- ANIT: 20612 üzerine 20600 bırak
----------------------------------------------------------------
when 20612.take with item.get_vnum()==20600 and alastor_dungeon.is_inside() and d.getf("level")==3 begin
pc.remove_item(20600, 1)
npc.kill()
d.notice("Kristal yok edildi! ")
d.notice("Alastor gelmesine 10 saniye kaldı! ")
d.setf("level", 4)
d.setf("alastor_timer", 10)
server_loop_timer("alastor_spawn_countdown", 1, d.get_map_index())
end
----------------------------------------------------------------
-- GERİ SAYIM + BOSS SPAWN
----------------------------------------------------------------
when alastor_spawn_countdown.server_timer begin
local s = alastor_dungeon.settings()
if not d.select(get_server_timer_arg()) then return end
local t = d.getf("alastor_timer")
if t > 1 then
t = t - 1
d.setf("alastor_timer", t)
d.notice(string.format("Alastor gelmesine son %d saniye. ", t))
else
clear_server_timer("alastor_spawn_countdown", get_server_timer_arg())
d.kill_all()
d.clear_regen()
d.spawn_mob_dir(s["alastor"], s["alastor_pos"][1], s["alastor_pos"][2], s["alastor_pos"][3])
d.notice("Lord Alastor ortaya çıktı! ")
end
end
----------------------------------------------------------------
-- ZAMAN UYARILARI
----------------------------------------------------------------
when alastor_20min.server_timer begin
if d.select(get_server_timer_arg()) then
d.notice("Alastor Zindanı: 15 dakika kaldı! ")
server_timer("alastor_10min", 5*60, d.get_map_index())
end
end
when alastor_10min.server_timer begin
if d.select(get_server_timer_arg()) then
d.notice("Alastor Zindanı: 10 dakika kaldı! ")
server_timer("alastor_5min", 5*60, d.get_map_index())
end
end
when alastor_5min.server_timer begin
if d.select(get_server_timer_arg()) then
d.notice("Alastor Zindanı: 5 dakika kaldı! ")
server_timer("alastor_1min", 4*60, d.get_map_index())
end
end
when alastor_1min.server_timer begin
if d.select(get_server_timer_arg()) then
d.notice("Alastor Zindanı: 1 dakika kaldı! ")
server_timer("alastor_0min", 60, d.get_map_index())
end
end
when alastor_0min.server_timer begin
if d.select(get_server_timer_arg()) then
d.notice("Süre doldu, dışarı ışınlanıyorsun. ")
server_timer("alastor_final", 5, d.get_map_index())
end
end
when alastor_final.server_timer begin
if d.select(get_server_timer_arg()) then
d.exit_all()
end
end
end
end
buda questin iç kısmı yardımcı olanlar şimdiden teşekürler
En son bir moderatör tarafından düzenlenmiş: