İçeriğe geç

Metin2 Quest Fonksiyonları Listesi

Metin2 questleri Lua 5.0 ile yazılır ve oyunun çekirdeği questlere modüller hâlinde fonksiyonlar sunar. Bu sayfa o fonksiyonları modüllerine göre listeler. Liste server kaynak kodundaki quest fonksiyon tablolarından çıkarılır; her satırda fonksiyonun parametreleri, döndürdüğü değer ve ne yaptığı yazar.

Modüller nasıl okunur?

Fonksiyonlar modül adıyla çağrılır: pc.get_level() karakterin seviyesini döndürür. pc karakterin seviyesi, Yang'ı, eşyaları ve quest bayraklarıyla, npc konuşulan ya da öldürülen NPC ve canavarla, item o anki eşyayla, game server geneliyle, d zindanlarla, guild ve party lonca ve grupla ilgili fonksiyonları toplar. oxevent OX yarışmasını yönetir; yarışmanın kuralları OX etkinliği yazısında. say, select ve timer gibi modülsüz fonksiyonlar diyalog pencerelerini ve zamanlayıcıları kurar. npc fonksiyonları ancak bir NPC'ye tıklama ya da canavar öldürme gibi NPC'nin belli olduğu bir olayda doğru sonuç verir.

Lua 5.0'da # uzunluk işleci ve % işleci yoktur; yerine table.getn ve math.mod kullanılır. Metin2'nin quest dili != yazımını da kabul eder. Quest yazmanın temeli quest yazma, olayların listesi quest olayları yazısında; quest klasörünün yeri server dosyaları yazısında anlatılır.

Serverden servere ne değişir?

Fonksiyon listesi kaynak sürümüne bağlıdır. Topluluk eklentileri pc ve oxevent modüllerine ve modülsüz fonksiyonlara yenilerini ekler; pet modülü gibi bazı modüller yalnız ilgili sistem derlenmişse bulunur. Kaynağına yeni fonksiyon eklenen serverlerde quest derleyicisinin fonksiyon listesi de güncellenmezse quest "Calls undeclared function!" hatasıyla derlenmeyebilir.

Modüller

ModülNe içerirFonksiyon
pc Geçerli oyuncunun (quest'i çalıştıran ya da pc.select ile seçilen oyuncu) karakterine ait fonksiyonlar: seviye ve EXP, Yang, eşya verme ve silme, quest bayrakları, ışınlanma, lonca, beceri, binek ve dönüşüm. Fonksiyonların çoğu geçerli oyuncu olup olmadığını denetlemediği için geçerli oyuncunun bulunmadığı olaylarda (server_timer gibi) kullanılmamalıdır. 214
npc Geçerli NPC üzerinde çalışan fonksiyonlar. Geçerli NPC; click, chat ve take olaylarında ilgili NPC, kill olayında ölen canavar (PvP'de ölen oyuncu), die olayında öldüren karakterdir. 28
item Geçerli eşya üzerinde çalışan fonksiyonlar. Geçerli eşya, use, take ve pick olaylarında olayı tetikleyen eşyadır; başka bir eşya item.select ya da item.select_cell ile seçilir. Geçerli eşya yokken çoğu fonksiyon 0 ya da boş metin döndürür. 40
game Oyun geneli işler: sunucu geneli olay bayrakları, yere eşya düşürme, depo ve nesne market pencereleri, lonca kurma penceresi. 11
global Önek almadan çağrılan temel fonksiyonlar: diyalog metni, zamanlayıcılar, duyurular, durum değiştirme, canavar çıkarma, kayıt (log) ve veritabanı sorguları. select, wait, input, confirm, say_title gibi yardımcılar C++'ta değil questlib.lua'da tanımlıdır ve bu listede yer almaz. 83
questlib 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. 81
q Quest'in kendisini yöneten fonksiyonlar: durum değiştirme, görev penceresindeki başlık, saat ve sayaç, başka oyuncunun bağlamına geçme. Lua'da quest ayrılmış sözcük olduğu için tablonun adı q'dur. 17
affect Geçerli oyuncuya süreli etki (bonus) ekleyen ve kaldıran fonksiyonlar. Süre saniyedir; eklenen etkiler veritabanına kaydedilir, oyundan çıkıp girince korunur. Apply numaraları için questlib.lua'daki apply tablosu (apply.MAX_HP gibi) kullanılabilir. 11
target Geçerli oyuncuya haritada hedef işareti koyan fonksiyonlar. Kurulan hedefler, quest'te 'when <hedef adı>.target.click', '.target.arrive' ve '.target.die' olaylarını tetikler. Hedefler oyuncuya ve quest'e bağlıdır; aynı adla yeniden kurmak eskisinin yerine geçer. 7
party Geçerli oyuncunun grubuyla ilgili fonksiyonlar. Üyelere uygulanan işler yalnız aynı çekirdekteki (çoğunda aynı haritadaki) üyelere ulaşır; bazıları grup yoksa oyuncunun kendisine uygulanır. 20
guild Geçerli oyuncunun loncası ve lonca savaşlarıyla ilgili fonksiyonlar. Lonca kimliği isteyen fonksiyonlara pc.get_guild() ile alınan sayı verilir. 36
d Zindan fonksiyonları. Zindan, bir haritanın oyunculara özel açılan kopyasıdır (zindan örneği); harita numarası ana harita × 10.000 + sıra biçimindedir ve son oyuncu çıktıktan 10 saniye sonra kapanır. Oyuncu bağlamında d fonksiyonları oyuncunun bulunduğu zindanı, oyuncusuz server_timer olaylarında d.select ile seçilen zindanı kullanır. Koordinat birimine dikkat: çoğu fonksiyon metre alır, ama bazıları oyun birimi (metre × 100) ister. 72
horse Geçerli oyuncunun atıyla ilgili fonksiyonlar. At seviyesi 0-30, derece seviyeden çıkar: 1-10 birinci, 11-20 ikinci, 21-30 üçüncü derece. 21
pet Evcil hayvan (pet) çağırma fonksiyonları (__PET_SYSTEM__). Pet, çağıran eşyanın use olayında çağrılır; pet.summon geçerli eşyayı ister. 5
marriage Nişan, evlilik ve düğün haritası fonksiyonları. Çoğu geçerli oyuncunun evlilik kaydını kullanır; kaydı yoksa syserr'e yazıp bir şey yapmaz. 15
mob Geçerli oyuncunun haritasında quest'e bağlı canavar ya da canavar grubu çıkaran fonksiyonlar. Koordinatlar haritanın köşesine göre metredir; çıkan canavarlar npc.is_quest ile tanınır. 2
member party_kill, in ve out olaylarında olayı tetikleyen grup üyesine uygulanan fonksiyonlar; bu olayların dışında geçerli üye yoktur. 3
highscore player veritabanındaki highscore tablosunu kullanan basit skor tablosu fonksiyonları. 2
building Lonca arazisi ve binaları fonksiyonları: arazi bilgisi, araziyi loncaya verme, binayı başka bir binaya dönüştürme. 5
oxevent OX etkinliği (harita 113) fonksiyonları: etkinliği açma ve kapama, soru sorma, katılımcılara ödül verme. Sorular yerel ayar klasöründeki oxquiz.lua dosyasından (add_ox_quiz satırları) yüklenir. 11
forked Krallık Savaşı (üç yol savaşı: Kutsal Alan ve her krallığa ait geçit haritaları) fonksiyonları. Kayıt, giriş ve ödül akışı bu fonksiyonları çağıran quest'e bağlıdır; o quest her sunucu paketinde bulunmaz. 15
oh Kral (monarch) sistemi fonksiyonları: krallık hazinesi, kral becerileri, kralın ışınlanması ve oyuncu çağırması. Çoğu yalnız kral karakteri (bazıları GM) tarafından kullanılabilir; ücretler krallık hazinesinden düşer ve reddedilen durumlarda oyuncuya sohbet iletisi gider. 14
mgmt Kral sistemi yönetim fonksiyonları; yönetici (GM) quest'leri içindir. 2
arena Arena (düello sahası) fonksiyonları: iki oyuncu arasında arenada düello başlatma, izleyici ekleme, arena haritası tanımlama. 5
ba Kale savunması (battle arena) etkinliği. 1
ds Simya (ejderha taşı) sistemi: arıtma penceresi ve kullanım yeterliliği. 3
DragonLair Lonca ejderha ini baskını. Lua tablo adı büyük-küçük harfe duyarlıdır: DragonLair. 1
dance_event Eski bir dans etkinliğine özgü tek fonksiyon. 1
speedserver Hızlı sunucu (CONFIG speed_server) için krallık başına haftanın günü ve tatil günü EXP oranı tablosunu yöneten fonksiyonlar. Tablo, bitiş saati, bitiş dakikası ve EXP yüzdesinden oluşan dilimlerdir. Bu kaynakta tablo EXP hesabına doğrudan uygulanmaz; oranı oyuna geçirmek quest'in işidir. 7

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. Ayrıca bak: quest olayları.