İçeriğe geç

Metin2 Quest questlib Fonksiyonları

C++ değil, Lua ile yazılmış yardımcılar: sunucunun quest klasöründeki questlib.lua ve settings.lua dosyasının yüklediği GFquestlib.lua. Öneksiz (global) çağrılırlar; dosyalar sunucuya göre değiştirilmiş olabilir. questlib.lua ayrıca pc, npc ve item tablolarına özellik okuması ekler: pc.level, pc.name, pc.job, pc.gold, pc.hp, pc.empire, pc.x gibi yazımlar ilgili get fonksiyonunu çağırır; npc.race, npc.empire ve item.vnum, item.count, item.level da çalışır. CONFIRM_YES, NOWINDOW, apply.MAX_HP, POINT_MAX_HP gibi sabitler de bu dosyada tanımlıdır. Bu modülde 81 fonksiyon var. Diğer modüller quest fonksiyonları listesinde, quest yazımının temeli quest yazma rehberinde.

FonksiyonNe yaparDöner
setstate(durum adı) q.setstate'in kısa adı (dosyada setstate = q.setstate). Derleyici setstate(ad) yazımını da durum değiştirme çağrısına çevirir.
setstate("run")
yok
newstate(durum adı) q.setstate'in ikinci kısa adı; setstate ile aynıdır.
newstate("run")
yok
q.set_clock(ad, değer (saniye)) Görev penceresindeki saat satırının adını ve değerini birlikte ayarlar (q.set_clock_name ve q.set_clock_value).
q.set_clock("Kalan süre", 600)
yok
q.set_counter(ad, değer) Görev penceresindeki sayaç satırının adını ve değerini birlikte ayarlar (q.set_counter_name ve q.set_counter_value).
q.set_counter("Kalan kurt", 20)
yok
c_item_name(vnum) İstemcinin eşya adına çevirdiği [ITEM value;vnum] etiketini döndürür; ad oyuncunun istemcisindeki dilde, kırmızı renkte görünür.
say(c_item_name(27001).." getir.")
metin
c_mob_name(vnum) İstemcinin canavar adına çevirdiği [MOB value;vnum] etiketini döndürür.
say(c_mob_name(101).." avla.")
metin
color256(kırmızı, yeşil, mavi (0-255)) Diyalog metni için renk etiketi üretir; 0-255 değerleri istemcinin beklediği 0-1 aralığına çevrilir. say içinde metinle birleştirilir.
say(color256(255, 255, 0).."Sarı yazı"..color256(196, 196, 196))
metin
color(kırmızı, yeşil, mavi (0-1)) Renk etiketi üretir; değerler çevrilmeden yazılır, bu yüzden 0-1 arasında ondalık verilmelidir.
say(color(1, 0.5, 0).."Turuncu yazı")
metin
delay(gecikme) Diyalog metninin harf harf yazılma gecikmesini değiştiren [DELAY] etiketini döndürür. metin
setcolor(kırmızı, yeşil, mavi (0-1)) Renk etiketini doğrudan diyalog tamponuna yazar; sonraki metin bu renkte görünür.
setcolor(1, 0, 0)
yok
setdelay(gecikme) [DELAY] etiketini diyalog tamponuna yazar. yok
resetcolor() Metin rengini varsayılana döndüren [/COLOR] etiketini yazar.
resetcolor()
yok
resetdelay() Yazma gecikmesini varsayılana döndüren [/DELAY] etiketini yazar.
resetdelay()
yok
trim(metin) Metnin başındaki ve sonundaki boşlukları siler.
local ad = trim(input())
metin
addmapsignal(x, y) İstemcinin büyük haritasına bir işaret noktası ekler ve haritayı açar. yok
clearmapsignal() Haritadaki quest işaretlerini temizler.
clearmapsignal()
yok
setbgimage(dosya adı) Diyalog penceresinin arka plan resmini ayarlar. yok
addimage(x, y, dosya adı) Diyalog penceresine verilen konumda bir resim ekler. yok
notice_multiline(metin, duyuru fonksiyonu) Metni [ENTER] işaretlerinden bölüp her satırı verilen duyuru fonksiyonuna (notice, notice_all, d.notice gibi) ayrı ayrı gönderir.
notice_multiline("Etkinlik başladı.[ENTER]Kayıtlar açık.", notice_all)
yok
makequestbutton(başlık) Ekranda geçerli quest'e ait bir görev simgesi (mektup) gösterir; oyuncu tıklayınca quest'in button olayı çalışır.
makequestbutton("Yeni görev")
yok
make_quest_button_ex(başlık, simge türü, simge adı) makequestbutton gibidir, ayrıca simge türünü ve adını istemciye gönderir; 'item' türünde simge adı bir eşya vnum'udur. Test sunucusunda tür ve adı sohbete de yazar.
make_quest_button_ex("Görev", "item", 30006)
yok
make_quest_button(başlık) makequestbutton ile aynı.
make_quest_button("Yeni görev")
yok
send_letter_ex(başlık, simge türü, simge adı) Simgeli görev mektubu gönderir: make_quest_button_ex ile simgeyi gösterir, diyalog penceresini gizler, görev başlığını ayarlar ve quest'i başlamış işaretler.
send_letter_ex("Ödülün hazır", "item", 27001)
yok
send_letter(başlık) Görev mektubu gönderir: ekranda simge gösterir, diyalog penceresi açmaz, görev başlığını ayarlar ve quest'i görev penceresi listesine ekler (q.start). Çoğunlukla letter olayında kullanılır.
send_letter("Köy muhtarı seni çağırıyor")
yok
clear_letter() q.done() çağırır; quest görev penceresi listesinden kalkar.
clear_letter()
yok
say_title(metin) Metni açık sarı başlık renginde (255, 230, 186) bir diyalog satırı olarak yazar, sonra rengi varsayılan griye döndürür.
say_title("Demirci:")
yok
say_reward(metin) Metni açık kırmızı ödül renginde (255, 200, 200) yazar, sonra rengi varsayılana döndürür.
say_reward("Ödül: 10.000 Yang")
yok
say_pc_name() Oyuncunun adını sonuna iki nokta koyarak bir diyalog satırı olarak yazar.
say_pc_name()
yok
say_size(genişlik, yükseklik) Diyalog penceresinin boyutunu ayarlayan [WINDOW_SIZE] etiketini yazar.
say_size(350, 300)
yok
setmapcenterposition(x, y) İstemcinin büyük haritasının merkezini verilen konuma ayarlayan [SETCMAPPOS] etiketini gönderir. yok
say_item(başlık, vnum, açıklama) Diyalog penceresine eşyanın resmini başlık ve açıklamayla birlikte ekler.
say_item("Kırmızı İksir", 27001, "HP doldurur.")
yok
say_show_item(vnum) Diyalog penceresine yalnız eşyanın resmini ekler.
say_show_item(27001)
yok
say_item_vnum(vnum) Eşyanın resmini sunucudaki adıyla birlikte gösterir; say_item(item_name(vnum), vnum, "") kısaltmasıdır.
say_item_vnum(30006)
yok
say_item_vnum_inline(vnum, sıra (0'dan başlar), toplam (en çok 3)) Aynı satırda en çok üç eşya resmi göstermek içindir; sıra toplamdan küçük olmalıdır, toplam 3'ü geçerse bir şey yazmaz.
say_item_vnum_inline(27001, 0, 2)
yok
pc_is_novice() Oyuncu henüz beceri grubu seçmediyse true döner.
if pc_is_novice() then
true/false
pc_get_exp_bonus(EXP, metin) Metni ödül renginde yazar, oyuncuya EXP verir (pc.give_exp2) ve levelup adlı quest'i run durumuna geçirmeye çalışır. yok
pc_get_village_map_index(sıra (1 ya da 2)) Oyuncunun krallığına göre birinci köyün (1, 21, 41) ya da ikinci köyün (3, 23, 43) harita numarasını döndürür.
local koy = pc_get_village_map_index(1)
sayı
pc_has_even_id() Oyuncunun kimliği (PID) çift sayıysa true döner.
if pc_has_even_id() then
true/false
pc_get_account_id() Adının aksine hesap kimliğini döndürmez: hesap kimliği tek sayıysa true döner. Hesap kimliğinin kendisi için pc.get_account_id kullanılır. true/false
npc_is_same_empire() Geçerli NPC oyuncuyla aynı krallıktansa true döner.
if not npc_is_same_empire() then return end
true/false
npc_get_skill_teacher_race(krallık (1-3), sınıf (0-3), beceri grubu (1 ya da 2)) Verilen krallık, sınıf ve beceri grubu için beceri öğretmeni NPC'sinin vnum'unu döndürür; bulunamazsa 0. Listede Lycan yoktur.
local vnum = npc_get_skill_teacher_race(pc.get_empire(), pc.get_job(), 1)
sayı
pc_find_square_guard_vid() Oyuncunun krallığının meydan muhafızının (vnum 11000, 11002, 11004) VID'ini döndürür. Dosyada iki kez tanımlıdır; geçerli olan sonraki tanımdır.
local vid = pc_find_square_guard_vid()
sayı
pc_find_skill_teacher_vid(beceri grubu (1 ya da 2)) Oyuncunun sınıfına ve krallığına uygun beceri öğretmeninin VID'ini döndürür; hedef işareti koymak için kullanılır.
local v = pc_find_skill_teacher_vid(1)
sayı
npc_is_same_job() Geçerli NPC oyuncunun sınıfının beceri öğretmenlerinden biriyse true döner.
if npc_is_same_job() then
true/false
npc_get_job() Geçerli NPC bir beceri öğretmeniyse sınıf ve grubunu gösteren koşul sabitini (COND_WARRIOR_1 gibi) döndürür; değilse 0.
local is = npc_get_job()
sayı
time_min_to_sec(dakika) Dakikayı saniyeye çevirir.
timer("bekle", time_min_to_sec(5))
sayı
time_hour_to_sec(saat) Saati saniyeye çevirir.
local sure = time_hour_to_sec(2)
sayı
next_time_set(saniye, test sunucusundaki saniye) Geçerli quest'in __NEXT_TIME__ bayrağına şimdiki zaman artı saniyeyi yazar; test sunucusunda ikinci değeri kullanır. Bekleme süreli görevler içindir.
next_time_set(3600, 60)
yok
next_time_is_now() __NEXT_TIME__ bayrağındaki zaman geldiyse true döner; fonksiyona verilen parametre kullanılmaz.
if not next_time_is_now() then say("Biraz sonra gel.") return end
true/false
table_get_random_item(tablo) Dizi biçimindeki tablodan rastgele bir eleman döndürür.
local odul = table_get_random_item({27001, 27002, 27003})
tablodaki bir eleman
table_is_in(tablo, değer) Değer dizi biçimindeki tabloda varsa true döner.
if table_is_in({20300, 20301}, npc.get_race()) then
true/false
giveup_quest_menu(quest başlığı) Devam et ya da vazgeç seçimi sunar, vazgeçilirse quest'i başa alır (restart_quest). Seçenek metinleri dosyada Korece kaldığı için Türkçe sunucuda bozuk görünür. yok
restart_quest() Durumu start yapar ve quest'i görev penceresi listesinden kaldırır.
restart_quest()
yok
complete_quest() Durumu __COMPLETE__ yapar ve quest'i görev penceresi listesinden kaldırır.
complete_quest()
yok
giveup_quest() Durumu __GIVEUP__ yapar ve quest'i görev penceresi listesinden kaldırır.
giveup_quest()
yok
complete_quest_state(durum adı) Durumu verilen duruma geçirir ve quest'i görev penceresi listesinden kaldırır.
complete_quest_state("bitti")
yok
test_chat(metin) Metni yalnız test sunucusunda sohbete yazar; hata ayıklama içindir.
test_chat("asama: "..pc.getqf("asama"))
yok
bool_to_str(true/false) Değere göre "true" ya da "false" metnini döndürür.
test_chat(bool_to_str(pc.is_gm()))
metin
skill_group_dialog(krallık, sınıf, grup) Beceri öğretmeni diyaloğunu yürütür: oyuncu öğretmenin sınıfındaysa, grubu yoksa ve en az 5. seviyedeyse onay sorup beceri grubunu seçtirir. Metinler locale.lua'daki skill_group tablosundan gelir; krallık parametresi kullanılmaz.
skill_group_dialog(pc.get_empire(), 0, 1)
yok
show_horse_menu() Oyuncu kendi atına tıkladığında at menüsünü açar: besle (at ölüyse dirilt), bin, geri gönder. Besleme at derecesine göre Saman, Havuç ya da Kırmızı Ginseng'den (50054-50056) birini düşer.
show_horse_menu()
yok
select(seçenek 1, seçenek 2, ...) Diyalogda seçenek düğmeleri gösterir, oyuncu seçene kadar betiği bekletir ve seçilen düğmenin sırasını (1'den başlar) döndürür.
local s = select("Evet", "Hayır")
sayı
select_table(tablo) select gibidir, seçenekleri bir tablodan alır; seçenek sayısı çalışma anında değişen menüler içindir.
local s = select_table(secenekler)
sayı
wait() Diyalogda devam düğmesi gösterir ve oyuncu tıklayana kadar betiği bekletir.
wait()
yok
input() Oyuncuya metin kutusu açar ve yazılan metni (en çok 64 karakter) döndürür.
local ad = input()
metin
confirm(vid, ileti, süre (saniye)) VID'i verilen oyuncuya evet/hayır onay kutusu gösterir ve cevabı bekler: CONFIRM_YES (1), CONFIRM_NO (0) ya da süre dolarsa CONFIRM_TIMEOUT (2).
if confirm(u_vid, pc.get_name().." seninle evlenmek istiyor.", 30) == CONFIRM_YES then
sayı
select_item() Diyalog penceresini gizler, oyuncuya eşya seçme penceresi açar ve seçilen eşyanın envanter konumunu döndürür.
local hucre = select_item()
sayı
BuildSkillList(sınıf, grup) Oyuncunun sınıf ve grubundaki, seviyesi 0'dan büyük aktif becerilerden vnum ve ad listesi kurar, sonuna 0 ve iptal seçeneğini ekler. Beceri seçtiren menüler içindir.
local liste = BuildSkillList(pc.get_job(), pc.get_skill_group())
tablo ({vnum listesi, ad listesi})
store_charname_by_id(sıra (1-10), karakter adı, kimlik) Eski bir etkinlik için hazırlanmış 10 yerlik listeye ad ve kimlik yazar. yok
return_charname_by_id(kimlik) store_charname_by_id ile saklanan listede kimliği arar ve adı döndürür; kimlik listede yoksa Lua hatası verir. metin
get_map_name_by_number(harita no) Oyuncunun krallığına göre bazı haritaların (köyler ve 61-65, 72-73) translate.lua'daki adını döndürür; listede olmayan harita için nil.
say(get_map_name_by_number(pc.get_map_index()))
metin ya da nil
input_number(soru metni) Soruyu yazar ve oyuncu bir sayı girene kadar metin kutusunu yeniden açar; girilen sayıyı döndürür.
local adet = input_number("Kaç tane istiyorsun?")
sayı
get_today_count(quest adı, bayrak adı) Verilen quest'in <bayrak>_today ve <bayrak>_today_count bayraklarıyla tutulan günlük sayacı döndürür; gün değiştiyse 0.
if get_today_count("gunluk", "odul") >= 3 then
sayı
inc_today_count(quest adı, bayrak adı, adet) Günlük sayacı bir artırır, yeni günde 1'den başlatır; adet parametresi kullanılmaz. Gün denetiminde pc.getqf kullandığından yalnız quest adı geçerli quest olduğunda doğru sayar.
inc_today_count("gunluk", "odul", 1)
yok
drop_gamble_with_flag(olay bayrağı adı) kill olayında ölen canavarın drop şansını (pc.get_killee_drop_pct) verilen olay bayrağının değerine göre ölçekleyip zar atar; true dönerse quest eşyayı düşürür. Bayrak değeri büyüdükçe şans düşer.
if drop_gamble_with_flag("drop_mektup") then game.drop_item(50034, 1) end
true/false
get_random_vnum_from_table(tablo {{vnum, ağırlık, en düşük seviye (isteğe bağlı), en yüksek seviye (isteğe bağlı)}, ...}) Satırların ağırlığına göre rastgele bir vnum seçer; seviye sınırı verilen satırlar oyuncunun seviyesi aralıkta değilse hesaba katılmaz. Oyuncu seviyesine baktığı için server_timer içinde kullanılmamalıdır. GFquestlib.lua'da tanımlıdır.
local v = get_random_vnum_from_table({{27001, 3}, {27002, 1, 20, 50}})
sayı
get_time_remaining(saniye) Saniyeyi gün, saat ve dakika metnine çevirmek için yazılmıştır; ancak kullandığı gameforge.locale.time metinleri incelenen paketin translate.lua dosyasında tanımlı olmadığından orada çağrılınca Lua hatası verir. GFquestlib.lua'da tanımlıdır. metin
count_item_range(ilk vnum, son vnum) Vnum aralığındaki (ör. bir eşyanın +0..+9 vnumları) bütün eşyaların oyuncudaki toplam adedini döndürür. GFquestlib.lua'da tanımlıdır.
if count_item_range(10, 19) > 0 then
sayı
remove_item_range(adet, ilk vnum, son vnum) Vnum aralığındaki eşyalardan toplam adet kadarını küçük vnum'dan başlayarak siler. Toplam yetmiyorsa hiçbir şey silmeden false döner. GFquestlib.lua'da tanımlıdır.
if not remove_item_range(5, 30000, 30005) then return end
true/false
is_destination_village(kip (1, 2, 3 ya da 65)) Oyuncu kip 1'de birinci köylerden birinde, 2'de ikinci köylerden birinde, 3'te bunlardan herhangi birinde, 65'te harita 65'te ise boş metin (Lua'da doğru sayılır), değilse nil döndürür. Görev oku koymadan önce konum denetimi içindir. GFquestlib.lua'da tanımlıdır.
if is_destination_village(1) then
boş metin ya da nil
say_important_title(metin) say_title ile aynı açık sarı renkte bir satır yazar. GFquestlib.lua'da tanımlıdır.
say_important_title("Dikkat:")
yok
say_important(metin) say_important_title ile aynıdır. GFquestlib.lua'da tanımlıdır.
say_important("Bu görev bir kez yapılabilir.")
yok

Önceki modül: global | Sonraki modül: q

Liste, Metin2 sunucu kaynak kodundaki quest fonksiyon tablolarından (questlua dosyaları) ve sunucunun quest klasöründeki questlib.lua ile GFquestlib.lua dosyalarından çıkarıldı; açıklamalar fonksiyonların gövdelerinden yazıldı. İncelenen kaynak, orijinal koda topluluk düzeltmeleri eklenmiş bir sürümdür: "Topluluk eki" notu taşıyan fonksiyonlar (ENABLE_NEWSTUFF gibi derleme seçenekleri) her sunucuda bulunmaz, kapalı seçeneklere bağlı pc.open_shop0 ve pc.make_guild0 listede yoktur. "Geçerli oyuncu" quest'i tetikleyen oyuncudur; server_timer olaylarında geçerli oyuncu olmadığından pc, npc ve item fonksiyonlarının çoğu orada kullanılamaz. Koordinat birimi fonksiyona göre değişir: kimi metre, kimi oyun birimi (metre × 100) ister. C++'a eklenen yeni bir fonksiyonu kullanmadan önce adını quest klasöründeki quest_functions listesine de eklemek gerekir. Fonksiyonlar kaynak sürümüne göre değişebilir.