İçeriğe geç

Metin2 Quest item Fonksiyonları

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. Bu modülde 40 fonksiyon var. Diğer modüller quest fonksiyonları listesinde, quest yazımının temeli quest yazma rehberinde.

FonksiyonNe yaparDöner
item.get_id() Geçerli eşyanın benzersiz kimliğini (item id) döndürür; geçerli eşya yoksa 0. Bu kimlik, eşyayı sonradan item.select ile yeniden seçmek için saklanır.
local eski_id = item.get_id()
sayı
item.get_cell() Geçerli eşyanın envanterdeki hücre numarasını döndürür; geçerli eşya yoksa 0.
local hucre = item.get_cell()
sayı
item.select(item id) Kimliği verilen eşyayı geçerli eşya yapar. Eşya sunucunun bellekteki eşyaları arasında bulunursa true, bulunamazsa false döner.
item.select(eski_id)
true/false
item.select_cell(hücre no) Geçerli oyuncunun envanterinde verilen hücredeki eşyayı geçerli eşya yapar; hücre boşsa false döner.
if not item.select_cell(hucre) then return end
true/false
item.remove() Geçerli eşyayı adedi ne olursa olsun bütünüyle siler, yani yığının tamamı gider. Eşya geçerli oyuncuya ait değilse silmez ve syserr'e yazar; her iki durumda da geçerli eşya seçimi temizlenir. Yığından tek adet düşmek için item.set_count0 ya da pc.remove_item kullanılır.
if item.get_count() > 1 then item.set_count0(item.get_count() - 1) else item.remove() end
yok
item.get_socket(soket no (0-2)) Geçerli eşyanın verilen soketindeki değeri döndürür: takılı taşın vnum'u, süreli eşyalarda kalan ya da bitiş süresi gibi. Soket numarası 0-2 dışındaysa ya da geçerli eşya yoksa 0.
local kalan = item.get_socket(0)
sayı
item.set_socket(soket no (0-2), değer) Geçerli eşyanın verilen soketine değeri yazar. Süreli eşyaların süresini uzatmak için kullanılır; numara 0-2 dışındaysa bir şey yapmaz.
item.set_socket(0, item.get_socket(0) + 86400)
yok
item.get_vnum() Geçerli eşyanın vnum'unu döndürür; geçerli eşya yoksa 0.
if item.get_vnum() == 71002 then
sayı
item.has_flag(bayrak değeri) Geçerli eşyanın item_proto bayraklarında (flag sütunu) verilen bitin açık olup olmadığını döndürür. Geçerli eşya yoksa ya da parametre sayı değilse false.
if item.has_flag(8192) then
true/false
item.get_value(sıra no (0-5)) Geçerli eşyanın item_proto'daki value0-value5 değerlerinden verilen sıradakini döndürür. Sıra 0-5 dışındaysa ya da eşya yoksa 0.
local sure = item.get_value(0)
sayı
item.set_value(efsun yuvası (0-6), apply no, değer) Adına rağmen item_proto değerini değiştirmez: geçerli eşyanın verilen efsun yuvasına apply türünü ve değerini zorla yazar. Parametreler eksikse ya da eşya yoksa 0 döndürür.
item.set_value(0, apply.MAX_HP, 500)
yok
item.get_name() Geçerli eşyanın adını döndürür; geçerli eşya yoksa boş metin.
say(item.get_name())
metin
item.get_size() Geçerli eşyanın envanterde kapladığı yüksekliği (1-3 hücre) döndürür; geçerli eşya yoksa 0.
local boy = item.get_size()
sayı
item.get_count() Geçerli eşyanın adedini döndürür; geçerli eşya yoksa 0.
if item.get_count() > 1 then
sayı
item.get_type() Geçerli eşyanın item_proto türünü sayı olarak döndürür: 1 silah, 2 zırh, 3 kullanılan eşya, 18 quest eşyası gibi. Geçerli eşya yoksa 0.
if item.get_type() == 1 then
sayı
item.get_sub_type() Geçerli eşyanın item_proto alt türünü (subtype) döndürür; geçerli eşya yoksa 0.
local alt = item.get_sub_type()
sayı
item.get_refine_vnum() Geçerli eşyanın bir üst artı seviyesinin vnum'unu (item_proto refined_vnum) döndürür; yükseltilemiyorsa ya da eşya yoksa 0.
local sonraki = item.get_refine_vnum()
sayı
item.get_level() Geçerli eşyanın artı seviyesini döndürür. Değer eşyanın adındaki son + işaretinden sonraki sayıdan okunur; adında + olmayan eşyada 0.
if item.get_level() == 9 then
sayı
item.next_refine_vnum(vnum) Verilen vnum'un item_proto'daki bir üst artı seviyesinin vnum'unu döndürür; eşya tablosu bulunamazsa 0. Geçerli eşyaya bakmaz.
local v = item.next_refine_vnum(19)
sayı
item.can_over9refine() Geçerli eşyanın +9 üstü yükseltme eşleşmelerindeki durumunu döndürür: 1, eşya bir eşleşmenin kaynağıdır ve üst seriye dönüştürülebilir; 2, eşya zaten üst serinin içindedir; 0, ikisi de değil. Eşleşmeler global enable_over9refine ile tanımlanır. Geçerli eşya yoksa değer döndürmez.
if item.can_over9refine() == 1 then
sayı (0, 1 ya da 2)
item.change_to_over9() Geçerli eşya bir +9 üstü eşleşmesinin kaynağıysa karşılığı olan eşyayı yaratır, taşlarını ve efsunlarını aktarır, eskisini envanterden alıp yenisini boş bir hücreye koyar. Eşleşme yoksa ya da envanterde yer yoksa false döner.
if item.change_to_over9() then say("Eşyan dönüştürüldü.") end
true/false
item.over9refine() Geçerli eşyayı item_proto'daki bir üst seviyesine (refined_vnum) dönüştürür; taşlar ve efsunlar aktarılır. Malzeme, Yang ya da başarı şansı denetlemez, bunları quest kendisi yapmalıdır. Üst seviye yoksa ya da envanterde yer yoksa false döner.
local basarili = item.over9refine()
true/false
item.get_over9_material_vnum(vnum) Verilen vnum'un ait olduğu +9 üstü eşleşmesinde kaynak serinin +0 vnum'unu döndürür; eşleşme yoksa 0.
local malzeme = item.get_over9_material_vnum(item.get_vnum())
sayı
item.get_level_limit() Geçerli eşya silah ya da zırhsa item_proto'daki seviye sınırını döndürür, sınır yoksa 0. Başka türdeki eşyada ya da eşya yoksa değer döndürmez.
if item.get_level_limit() > pc.get_level() then
sayı
item.start_realtime_expire() Geçerli eşyanın item_proto'sunda gerçek zamanlı süre sınırı (sürekli işleyen ya da ilk kullanımda başlayan süre) varsa süre sayacını başlatır; sayaç zaten çalışıyorsa bir şey yapmaz.
item.start_realtime_expire()
yok
item.copy_and_give_before_remove(yeni vnum) Verilen vnum'dan 1 adet yeni eşya yaratır, geçerli eşyanın taşlarını ve efsunlarını ona kopyalar, eski eşyayı siler ve yenisini aynı envanter hücresine koyar. Başarılıysa true döner. Geçerli eşya seçili olmalıdır.
item.copy_and_give_before_remove(item.get_vnum() + 1)
true/false
item.get_wearflag0() Geçerli eşyanın item_proto giyim yeri bayraklarını (wearflag) sayı olarak döndürür; eşya yoksa 0. Topluluk eki (ENABLE_NEWSTUFF); her kaynakta bulunmaz.
local yer = item.get_wearflag0()
sayı
item.has_wearflag0(bayrak değeri) Geçerli eşyanın giyim yeri bayraklarında verilen bitin açık olup olmadığını döndürür. Topluluk eki (ENABLE_NEWSTUFF).
if item.has_wearflag0(1) then
true/false
item.get_antiflag0() Geçerli eşyanın item_proto kullanım yasağı bayraklarını (antiflag: sınıf, cinsiyet, ticaret, düşürme yasakları) döndürür; eşya yoksa 0. Topluluk eki (ENABLE_NEWSTUFF).
local yasak = item.get_antiflag0()
sayı
item.has_antiflag0(bayrak değeri) Geçerli eşyanın kullanım yasağı bayraklarında verilen bitin açık olup olmadığını döndürür. Topluluk eki (ENABLE_NEWSTUFF).
if item.has_antiflag0(128) then
true/false
item.get_immuneflag0() Geçerli eşyanın item_proto bağışıklık bayraklarını (immuneflag) döndürür; eşya yoksa 0. Topluluk eki (ENABLE_NEWSTUFF).
local bagisiklik = item.get_immuneflag0()
sayı
item.has_immuneflag0(bayrak değeri) Geçerli eşyanın bağışıklık bayraklarında verilen bitin açık olup olmadığını döndürür. Topluluk eki (ENABLE_NEWSTUFF).
if item.has_immuneflag0(1) then
true/false
item.add_attr0(kip (0, 1 ya da 2, isteğe bağlı, varsayılan 0), adet (isteğe bağlı, varsayılan 1; 0 boş yuvaların hepsi)) Geçerli eşyaya rastgele efsun ekler: kip 1 normal yuvalara (1-5), kip 2 nadir yuvalara (6-7), kip 0 ikisine birden. Her grupta en çok adet kadar, en fazla boş yuva sayısı kadar eklenir. Topluluk eki (ENABLE_NEWSTUFF).
item.add_attr0(1, 0)
yok
item.change_attr0(kip (0, 1 ya da 2, isteğe bağlı, varsayılan 0)) Geçerli eşyanın efsunlarını efsun değiştirme nesnesi gibi yeniden dağıtır: kip 1 normal efsunlar, kip 2 nadir efsunlar, kip 0 ikisi. Topluluk eki (ENABLE_NEWSTUFF).
item.change_attr0(1)
yok
item.clear_attr0(kip (0, 1 ya da 2, isteğe bağlı, varsayılan 0)) Geçerli eşyanın efsunlarını siler: kip 1 ilk beş yuvayı, kip 2 son iki yuvayı, kip 0 yedi yuvanın hepsini. Gövdede geçerli eşya denetimi olmadığından eşya seçili değilken çağrılmamalıdır. Topluluk eki (ENABLE_NEWSTUFF).
item.clear_attr0(0)
yok
item.count_attr0(kip (0, 1 ya da 2, isteğe bağlı, varsayılan 0)) Kip 1'de normal efsun sayısını, kip 2'de nadir efsun sayısını, kip 0'da {normal, nadir} biçiminde iki elemanlı bir tablo döndürür; geçerli eşya yoksa 0. Topluluk eki (ENABLE_NEWSTUFF).
if item.count_attr0(1) < 5 then
sayı ya da tablo
item.get_attr0() Geçerli eşyanın yedi efsun yuvasını {tür1, değer1, tür2, değer2, ...} biçiminde 14 elemanlı bir tablo olarak döndürür; geçerli eşya yoksa 0. Topluluk eki (ENABLE_NEWSTUFF).
local efsunlar = item.get_attr0()
tablo
item.set_attr0(tablo {tür1, değer1, ..., tür7, değer7}) Tablodaki sırayla yedi efsun yuvasının hepsini zorla yazar; tabloda eksik kalan yuvalar boşaltılır. Gövdede geçerli eşya denetimi yoktur. Topluluk eki (ENABLE_NEWSTUFF).
item.set_attr0({1, 1500, 17, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0})
yok
item.set_count0(adet) Geçerli eşyanın adedini ayarlar. Adet sunucunun yığın sınırıyla (CONFIG ITEM_COUNT_LIMIT, varsayılan 200) kırpılır; 0 verilirse eşya silinir. Topluluk eki (ENABLE_NEWSTUFF).
item.set_count0(item.get_count() - 1)
yok
item.is_available0() Geçerli bir eşya seçili olup olmadığını döndürür. Topluluk eki (ENABLE_NEWSTUFF).
if not item.is_available0() then return end
true/false

Önceki modül: npc | Sonraki modül: game

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.