Hikayeler

Reklam vermek için turkmmo@gmail.com

Görev Questi

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!

--------------------------------------------
-- metin2_multi_hunt_chain.quest
-- Çoklu yaratık + çoklu ödül + ardışık görev zinciri
-- İbrahim için örnek/iskelet
--------------------------------------------
quest multi_hunt_chain begin
state start begin
-- ==============================
-- 1) ANA GÖREV TABLOSU
-- ==============================
-- mobs alanı: [mob_vnum] = gerekli_kill_adedi
-- rewards:
-- exp = sayı (opsiyonel)
-- yang = sayı (opsiyonel)
-- items = { {vnum, count}, ... } (opsiyonel, çoklu destek)
local QUESTS = {
[1] = {
level = 10,
mobs = { [101]=10, [102]=5 }, -- Örnek: Yaban Köpeği 10, Kurt 5
text = "Orman sakinleşmiyor. Bu çevredeki saldırgan yaratıkları avla!",
rewards= { exp = 50000, yang = 10000, items = { {27992,1} } } -- Ör: İksir/kitap
},
[2] = {
level = 15,
mobs = { [103]=15, [104]=10 }, -- Örnek: Yaban Domuzu 15, Mavi Kurt 10
text = "Kuzey patikasını güvene al. Daha kalabalık sürüler dolaşıyor.",
rewards= { exp = 120000, yang = 20000, items = { {27993,2} } }
},
[3] = {
level = 20,
mobs = { [112]=20, [114]=10, [116]=5 }, -- Üçlü aynı anda
text = "Vadiyi temizle. Liderleri de var, dikkatli ol!",
rewards= { exp = 300000, yang = 50000, items = { {50037,1}, {71084,3} } }
},
}

-- ==============================
-- 2) KÜÇÜK YARDIMCI FONKSİYONLAR
-- ==============================
local function stage_key() return "stage" end -- aktif görev indeksi
local function kill_key(vnum) return "kill_"..vnum end -- her mob için sayaç
local function total_stages() return table.getn(QUESTS) end
local function current_stage() return pc.getqf(stage_key()) end
local function set_stage(i) pc.setqf(stage_key(), i) end

local function reset_kill_flags(mobmap)
for vnum, _ in pairs(mobmap) do
pc.setqf(kill_key(vnum), 0)
end
end

local function is_vnum_tracked(vnum, mobmap)
return mobmap[vnum] ~= nil
end

local function inc_kill(vnum, mobmap)
local need = mobmap[vnum]
local cur = pc.getqf(kill_key(vnum))
if cur < need then
pc.setqf(kill_key(vnum), cur + 1)
return true
end
return false
end

local function all_done(mobmap)
for vnum, need in pairs(mobmap) do
if pc.getqf(kill_key(vnum)) < need then
return false
end
end
return true
end

local function mob_progress_line(mobmap)
-- Basit ilerleme satırı: "101: 3/10, 102: 5/5"
local parts = {}
for vnum, need in pairs(mobmap) do
local cur = pc.getqf(kill_key(vnum))
table.insert(parts, string.format("%d: %d/%d", vnum, cur, need))
end
return table.concat(parts, ", ")
end

local function give_rewards(r)
if r == nil then return end
if r.exp and r.exp > 0 then
pc.give_exp2(r.exp)
end
if r.yang and r.yang ~= 0 then
pc.change_money(r.yang)
end
if r.items then
for i=1, table.getn(r.items) do
local v, c = r.items[1], r.items[2] or 1
pc.give_item2(v, c)
end
end
end

local function open_letter_for(stage_idx)
local q = QUESTS[stage_idx]
if not q then return end
send_letter(string.format("[Görev %d/%d] Çoklu Av Görevi", stage_idx, total_stages()))
q.set_icon("scroll_open.tga")
end

local function start_stage_if_ready()
local st = current_stage()
if st == 0 then
set_stage(1)
st = 1
end
local q = QUESTS[st]
if not q then return end
if pc.get_level() >= q.level then
-- Görev başlamış mı? (kill flaglerinden anlarız)
local any_has = false
for vnum, _ in pairs(q.mobs) do
if pc.getqf(kill_key(vnum)) > 0 then
any_has = true
break
end
end
-- başlamadıysa sıfırla ve mektubu aç
if not any_has then
reset_kill_flags(q.mobs)
end
open_letter_for(st)
end
end

-- ==============================
-- 3) GÖREV TETİKLEYİCİLERİ
-- ==============================
when login or levelup begin
if current_stage() == 0 then set_stage(1) end
start_stage_if_ready()
end

when button or info begin
local st = current_stage()
local q = QUESTS[st]
if not q then return end

say_title(string.format("Çoklu Av Görevi (%d/%d)", st, total_stages()))
say_reward(string.format("Minimum seviye: %d", q.level))
say("")
say(q.text)
say("")
say("Hedef(ler) [vnum:adet]:")
for vnum, need in pairs(q.mobs) do
say(string.format("- %d : %d adet", vnum, need))
end
say("")
if q.rewards then
say("Ödüller:")
if q.rewards.exp then say(string.format("- EXP: %d", q.rewards.exp)) end
if q.rewards.yang then say(string.format("- Yang: %d", q.rewards.yang)) end
if q.rewards.items then
for i=1, table.getn(q.rewards.items) do
local v, c = q.rewards.items[1], q.rewards.items[2] or 1
say(string.format("- Item: %d x%d", v, c))
end
end
end
say("")
say(string.format("İlerleme: %s", mob_progress_line(q.mobs)))
say("")
say("İpucu: Aynı anda birden çok yaratığı avlayabilirsin.")
end

-- Tek bir 'when kill' ile tüm vnumları kapsıyoruz.
when kill begin
local st = current_stage()
local q = QUESTS[st]
if not q then return end
-- Seviye kontrol: görev ancak level şartı sağlandıysa işler
if pc.get_level() < q.level then return end

local vnum = npc.get_race() -- öldürülen yaratığın vnum'u
if is_vnum_tracked(vnum, q.mobs) then
if inc_kill(vnum, q.mobs) then
-- anlık bilgilendirme
syschat(string.format("[Görev %d] %d icin ilerleme: %s",
st, vnum, mob_progress_line(q.mobs)))
end
if all_done(q.mobs) then
notice_all(string.format("%s görevini tamamladı! (%d/%d)",
pc.get_name(), st, total_stages()))
say_title("Görev Tamamlandı!")
say_reward("Tebrikler, tüm hedefleri temizledin!")
give_rewards(q.rewards)

-- Bir sonraki göreve geç
if st < total_stages() then
set_stage(st + 1)
local next_q = QUESTS[st + 1]
-- Sonraki görev, ancak sırası geldiğinde ve seviyesi tutarsa açılır:
if pc.get_level() >= next_q.level then
reset_kill_flags(next_q.mobs)
open_letter_for(st + 1)
syschat(string.format("Yeni görev açıldı (%d/%d).", st+1, total_stages()))
else
-- seviye yetmiyorsa mektup açmadan beklesin
syschat(string.format("Sonraki görev için en az seviye %d gerekli.", next_q.level))
end
else
-- Zincir bitti
set_stage(total_stages()) -- son kademede sabit kalsın
q.set_icon("scroll_close.tga")
syschat("Tüm görev zincirini tamamladın!")
end
end
end
end
end
end

 
ne istediğini bilicen

 
Biyolog gorevlerinden ornek al

Alttaki questten de ornek alabilirsin

set_quest_state("biyolog2", "run") biyolog2 bir sonraki quest adi kendine gore duzenle

Biyolog:
-------------------
-- yeni biyolog questi
-------------------

quest biyolog1  begin
    state start begin

------------------- Fonksiyonlar
        function secondsToTime(seconds, begin_phrase, end_phrase) -- Yeni görev eklendiğinde işlev değiştirilicek
            local real_seconds = seconds - get_time()
            local hours = string.format("%02.f", math.floor(real_seconds/3600));
            local mins = string.format("%02.f", math.floor(real_seconds/60 - (hours*60)));
            local secs = string.format("%02.f", math.floor(real_seconds - hours*3600 - mins *60));
            return(""..begin_phrase.." "..hours.." Saat. "..mins.." Dakika. "..secs.." Saniye."..end_phrase)
        end
------------------- Fonksiyonlar

------------------- Bölüm 1 başlangıç
        when login or levelup with pc.get_level() >= 30 begin
            set_state("biyolog1_1")
        end
    end

    state biyolog1_1 begin
        when letter begin
        send_letter("Biyoloğun Ricası ")
    end

        when button or info begin
            say_title("Ork dişleri")
            say("")
            say("Bana ork azı dişi getirebilir misin ?")
            say("Ama bana özel azı diş lazım! Bana")
            say("bir özel diş getir, ama hep tek tek")
            say("Onu muayene edebilmek için.")
            say("Görevi kabul ediyormusun?")
            set_state("biyolog1_2")
            clear_letter()
            pc.setqf("duration",0)
            pc.setqf("collect_count",0)
            pc.setqf("drink_drug",0)
        end
    end
------------------- Bölüm 1 son

------------------- Bölüm 2 başlangıç
    state biyolog1_2 begin
        when letter begin
            send_letter("Ork dişleri")
        end

        when button or info begin
            if get_time() > pc.getqf("duration") then
                if  pc.count_item(30006) >0 then
                say_title("Ork dişleri")
                say("")
                say("Ah!! Bana bir azı dişi getirdin.")
                say("Önce denemem lazım...")
                say("Bu biraz zaman alabilir. ")
                say("Daha sonra yine gel.")
                say("")
                say_reward(string.format("Kalan: "..item_name(30006).." "..10-pc.getqf("collect_count")..""))
                pc.setqf("duration",get_time()+10*60*1) -----------------------------------22??
                wait()
                local pass_percent
                if pc.getqf("drink_drug")==0 then
                        pass_percent=50
                else
                        pass_percent=100
                end
                local s= number(1,100)
                if s<= pass_percent  then
                   if pc.getqf("collect_count")< 9 then
                        local index =pc.getqf("collect_count")+1
                        pc.setqf("collect_count",index)
                        say_title("Ork dişleri")
                        say("")
                        say("Müthiş!! Sen bir harikasın...")
                        say("Şimdi araştırma için")
                        say("")
                        say_reward(string.format("Bana "..10-pc.getqf("collect_count").. " "..item_name(30006).." daha getir. "))
                        pc.setqf("drink_drug",0)
                        pc.remove_item("30006", 1)
                        return
                        end
                        say_title("Ork dişleri")
                        say("")
                        say("Mükemmel tüm dişleri getirdin")
                        say("")
                        say_reward("Şimdi bana "..item_name(30220).." Lazım")
                        pc.setqf("collect_count",0)
                        pc.setqf("drink_drug",0)
                        pc.setqf("duration",0)
                        clear_letter()
                        set_state("biyolog1_3")
                        return
                        else
                        say_title("Ork dişleri")
                        say("")
                        say("Bu diş çürümüş")
                        say("10 dakika sonra tekrar getir.")
                        say("")
                        pc.setqf("drink_drug",0)
                        pc.remove_item(30006, 1)
                        say_reward(string.format("Kalan: "..item_name(30006).." "..10-pc.getqf("collect_count")..""))
                        return
                        end
                        else
                        say_title("Ork dişleri")
                        say("")
                        say_reward(""..item_name(30006).." 'ne sahip değilsin!")
                        return
                        end
                        else
                        say_title("Ork dişleri")
                        say("")
                        say("Son Analiz daha bitmedi ")
                        say("15 dakika beklemeniz gerekiyor.")
                        say("")
                        say_reward(string.format(biyolog1.secondsToTime(pc.getqf("duration"), "Kalan süre: ", "")))
                        say_reward("Şimdiye kadar ".." "..pc.getqf("collect_count").." tane ork dişi topladın.")
                        say("")
                    return
                end
            end
------------------- Bölüm 2 son

------------------- Av 1
        when 636.kill or 637.kill    begin
            local j = number(1, 80)
                if j == 1 then
                    pc.give_item2(30006, 1)
                    syschat("Biyolog Görevleri için bir nesne elde ettiniz.")
            end
        end

------------------- Av 1

------------------- Araştırmacının özütü beranın kalbi
        when 70022.use begin
            if pc.count_item(70022) < 1 then
                say_title("Süre sıfırlama")
                say("İtem kaybolmuş.")
            elseif pc.getqf("duration") > 0 then
                pc.setqf("duration", get_global_time() * 0)
                pc.remove_item(70022, 1)
                chat("Görevin bekleme süresi sıfırlandı.")
            elseif pc.getqf("duration") <= 0 then
                chat("Bekleme süresi zaten sıfırlandı.")
            end
        end
        when 71035.use begin
                if pc.getqf("drink_drug")==1 then
                    chat("Zaten kullanmışsın!")
            else
                    chat("Biyolog malzemesi geçirme şansın arttı!")
                pc.remove_item(71035,1)
                pc.setqf("drink_drug",1)
        end
    end
end
------------------- Araştırmacının özütü beranın kalbi

------------------- Bölüm 3 başlangıç

    state biyolog1_3 begin
        when letter begin
            send_letter("Jinunggy'nin ruh taşı")
        end
------------------- Av 2
        when 636.kill or 637.kill    begin
            local j = number(1, 80)
                if j == 1 then
                    pc.give_item2(30220, 1)
                    syschat("Biyolog Görevleri için bir nesne elde ettiniz.")
            end
        end
------------------- Av 2

        when button or info begin
            say_title("Ork dişleri")
            say("")
            say("Araştırma için ")
            say("10 ork azı dişi bulduktan sonra,")
            say(""..item_name(30220).." lazım.")
            say_reward("Ruh Taşını "..mob_name(636).." ve ")
            say_reward(""..mob_name(637).."'in den alabilirsin")
            say("")
            wait()
            if pc.count_item(30220) < 1 then
                    say_title("Ork dişleri")
                    say("")
                    say_reward(""..item_name(30220).." 'na sahip değilsin!")
                return
            end
            say("Mükemmel Ruh taşını bulmuşsun")
            say("")
            pc.remove_item(30220,1)
            clear_letter()
            set_state(biyolog1_4)
        end
    end

------------------- Bölüm 3 son

------------------- Bölüm 4 başlangıç

    state biyolog1_4 begin
        when letter begin
            send_letter("Biyoloğun ödülü ")
        end

        when button or info begin
            say_title("Baek-Go:")
            say("Ah bu Biyolog Chaegirab'ın reçetesi mi? Hm bu")
            say("senin hareket hızını 10 puan artıracak. İşte")
            say("iksirin! Aynı zamanda sana bu yüzüğü vermeliyim.")
            say("Değerli görünüyor, kaybetme.")
            say("Oh, işte ödülün!")
            say_reward("Chaegirab'ın ricasını tamamladığın için ödül")
            say_reward("olarak hareket hızın kalıcı olarak 10 puan")
            say_reward("artırıldı.")
            affect.add_collect(apply.MOV_SPEED, 10, 60*60*24*365*60) -- 60Years
            pc.give_item2(71015)
            pc.give_item2(50109)
            clear_letter()
            set_quest_state("biyolog2", "run")
            set_state(__complete)
        end
    end

------------------- Bölüm 4 son

------------------- Bölüm 5 başlangıç

    state __giveup__ begin
        when button or info."Bir deneme daha." begin
            say_title("Biyolog Chaegirab:")
            say("")
            say("Bir daha denemek istiyor musun?")
            say("Hmm..çok iyi")
            say("Çok beğendim ama, ")
            say("Lütfen bir daha dene.")
            say("Görüşmek üzere.")
            set_state(start)
        end
    end
        state __complete begin
    end
end

------------------- Bölüm 5 son
 

Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)

Geri
Üst