- Katılım
- 6 Eyl 2017
- Konular
- 52
- Mesajlar
- 353
- Online süresi
- 1ay 8g
- Reaksiyon Skoru
- 164
- Altın Konu
- 1
- Başarım Puanı
- 129
- Yaş
- 32
- TM Yaşı
- 8 Yıl 7 Ay 17 Gün
- MmoLira
- 6,190
- DevLira
- 78
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
- Katılım
- 22 Ocak 2010
- Konular
- 39
- Mesajlar
- 124
- Online süresi
- 6g 33213s
- Reaksiyon Skoru
- 8
- Altın Konu
- 0
- Başarım Puanı
- 114
- TM Yaşı
- 16 Yıl 3 Ay 1 Gün
- MmoLira
- 2,598
- DevLira
- 18
Sağol uğraşmışsın ama bu bir işe yaramaz
- Katılım
- 13 Eki 2010
- Konular
- 59
- Mesajlar
- 879
- Online süresi
- 3ay 22g
- Reaksiyon Skoru
- 50
- Altın Konu
- 0
- Başarım Puanı
- 141
- TM Yaşı
- 15 Yıl 6 Ay 12 Gün
- MmoLira
- 10,751
- DevLira
- 0
Biyolog gorevlerinden ornek al
Alttaki questten de ornek alabilirsin
set_quest_state("biyolog2", "run") biyolog2 bir sonraki quest adi kendine gore duzenle
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)
Benzer konular
- Cevaplar
- 9
- Görüntüleme
- 178
- Cevaplar
- 4
- Görüntüleme
- 112
- Cevaplar
- 15
- Görüntüleme
- 488
- Cevaplar
- 0
- Görüntüleme
- 44
- Cevaplar
- 2
- Görüntüleme
- 167


