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.
| Fonksiyon | Ne yapar | Dö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.