İçeriğe geç

Metin2 Quest d Fonksiyonları

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

FonksiyonNe yaparDöner
d.join(harita no) Verilen haritanın yeni bir zindan örneğini açar. Geçerli oyuncu grup lideriyse grubun bu çekirdekteki üyeleri, grupsuzsa yalnız kendisi haritanın doğuş noktasına ışınlanır ve çıkış konumları kaydedilir. Grupta olup lider olmayan oyuncuda bir şey olmaz.
d.join(66)
yok
d.exit() Geçerli oyuncuyu zindana girmeden önce kaydedilen konuma döndürür.
d.exit()
yok
d.exit_all() Zindandaki bütün oyuncuları kaydedilmiş çıkış konumlarına gönderir.
d.exit_all()
yok
d.set_item_group(grup adı, eşya sayısı, vnum1, adet1, vnum2, adet2, ...) Zindan için adlandırılmış bir eşya grubu tanımlar (giriş bileti gibi). exit_all_by_item_group, say_diff_by_item_group ve delete_item_in_item_group_from_all bu grubu kullanır.
d.set_item_group("bilet", 1, 30304, 1)
yok
d.exit_all_by_item_group(grup adı) Zindan haritasında, gruptaki eşyalardan hiçbirini istenen adette taşımayan oyuncuları çıkış konumlarına gönderir.
d.exit_all_by_item_group("bilet")
yok
d.say_diff_by_item_group(grup adı, eşyası olana metin, eşyası olmayana metin) Zindandaki oyunculardan gruptaki eşyalardan birini istenen adette taşıyanlara ilk metni, taşımayanlara ikinci metni diyalog penceresinde gösterir.
d.say_diff_by_item_group("bilet", "Geçebilirsin.", "Biletin yok, dışarı çıkarılacaksın.")
yok
d.delete_item_in_item_group_from_all(grup adı) Zindandaki her oyuncudan, gruptaki eşyalardan taşıdığı ilk uygun olanı istenen adette siler.
d.delete_item_in_item_group_from_all("bilet")
yok
d.purge() Zindan haritasındaki oyuncu ve pet dışındaki bütün karakterleri ölüm işlemi olmadan siler; yerdeki eşyaları da kaldırır.
d.purge()
yok
d.kill_all() Zindan haritasındaki oyuncu ve pet dışındaki bütün karakterleri öldürür.
d.kill_all()
yok
d.spawn(vnum, alan adı) Haritanın dungeon.txt dosyasında tanımlı adlı alanın içinde rastgele bir noktaya canavar çıkarır.
d.spawn(1093, "patron_alani")
yok
d.spawn_mob(vnum, x, y, yarıçap (metre, isteğe bağlı), adet (isteğe bağlı, varsayılan 1)) Zindan haritasında harita köşesine göre x, y metre noktasına, yarıçap verilirse çevresine rastgele canavar çıkarır ve ilkinin VID'ini döndürür.
local vid = d.spawn_mob(8016, 640, 459)
sayı (ilk canavarın vid'i), çıkmazsa 0
d.spawn_mob_dir(vnum, x, y, yön (1-8, 0 rastgele)) x, y metre noktasına tek canavar çıkarır; yön 1-8 arası 45 derecelik adımlarla bakış yönüdür, 0 rastgele yön verir.
d.spawn_mob_dir(20366, 320, 400, 3)
sayı (vid), çıkmazsa 0
d.spawn_mob_ac_dir(vnum, x, y, açı (derece)) x, y metre noktasına tek canavar çıkarır; bakış yönü doğrudan derece olarak verilir.
d.spawn_mob_ac_dir(20366, 320, 400, 180)
sayı (vid), çıkmazsa 0
d.spawn_name_mob(vnum, x, y (oyun birimi), ad) Verilen adla bir canavar ya da NPC çıkarır. Burada x, y harita köşesine göre metre değil, oyun birimidir (metre × 100).
d.spawn_name_mob(20366, 32000, 40000, "Bekçi")
yok
d.spawn_goto_mob(başlangıç x, başlangıç y, hedef x, hedef y) Başlangıç noktasına (metre) yol gösteren işaret NPC'si (vnum 20039) çıkarır; hedef koordinatlar NPC'nin adına '. x y' biçiminde yazılır. yok
d.spawn_group(grup vnum, x, y, yarıçap (metre), saldırgan (true/false), adet) group.txt'deki canavar grubunu zindan haritasında x, y metre noktası çevresine adet kadar çıkarır ve ilk grubun liderinin VID'ini döndürür. Adet parametresi zorunludur.
local vid = d.spawn_group(1101, 320, 400, 5, true, 1)
sayı (ilk grup liderinin vid'i), çıkmazsa 0
d.spawn_unique(anahtar, vnum, alan adı) dungeon.txt'deki adlı alana canavar çıkarır ve onu anahtarla benzersiz (unique) olarak kaydeder; unique ile başlayan fonksiyonlar bu anahtarla ona ulaşır.
d.spawn_unique("patron", 1093, "patron_alani")
yok
d.spawn_move_unique(anahtar, vnum, başlangıç alanı, hedef alanı) Başlangıç alanında unique canavar çıkarır ve hedef alana doğru yürütür. yok
d.spawn_move_group(grup vnum, başlangıç alanı, hedef alanı) Başlangıç alanında canavar grubu çıkarır ve hedef alana doğru yürütür. yok
d.spawn_stone_door(anahtar, alan adı) Adlı alana taş kapı (vnum 13001) çıkarır ve anahtarla unique olarak kaydeder.
d.spawn_stone_door("kapi1", "kapi1_alani")
yok
d.spawn_wooden_door(anahtar, alan adı) Adlı alana ahşap kapı (vnum 13000) çıkarır, ona 10.000 HP ve 300 savunma verir ve anahtarla unique olarak kaydeder.
d.spawn_wooden_door("kapi2", "kapi2_alani")
yok
d.purge_unique(anahtar) Anahtarı verilen unique karakteri ölüm işlemi olmadan siler.
d.purge_unique("kapi1")
yok
d.purge_area(x1, y1, x2, y2 (genel koordinat, oyun birimi)) Zindan haritasında verilen dikdörtgenin içindeki canavarları ve metin taşlarını siler; pet ve geçerli NPC dokunulmaz. Koordinatlar genel oyun birimidir. Gövdede zindan denetimi olmadığından zindan dışında çağrılmamalıdır. yok
d.kill_unique(anahtar) Anahtarı verilen unique karakteri öldürür.
d.kill_unique("kapi1")
yok
d.kill_area(x1, y1, x2, y2 (genel koordinat, oyun birimi)) d.purge_area gibidir, ama dikdörtgendeki canavarları ve taşları silmek yerine öldürür. Topluluk eki (ENABLE_NEWSTUFF). yok
d.is_unique_dead(anahtar) Anahtarı verilen unique karakter ölmüşse true döner; anahtar kayıtlı değilse de true.
if d.is_unique_dead("patron") then
true/false
d.unique_get_hp_perc(anahtar) Anahtarı verilen unique karakterin HP yüzdesini döndürür.
if d.unique_get_hp_perc("patron") < 50 then
sayı
d.unique_set_def_grade(anahtar, savunma) Unique karakterin savunma değerini ayarlar.
d.unique_set_def_grade("kapi2", 300)
yok
d.unique_set_hp(anahtar, HP) Unique karakterin HP'sini ayarlar.
d.unique_set_hp("kapi2", 10000)
yok
d.unique_set_maxhp(anahtar, en yüksek HP) Unique karakterin en yüksek HP'sini ayarlar.
d.unique_set_maxhp("kapi2", 10000)
yok
d.get_unique_vid(anahtar) Anahtarı verilen unique karakterin VID'ini döndürür; yoksa 0.
local vid = d.get_unique_vid("patron")
sayı
d.get_kill_stone_count(iki sayı (değerleri kullanılmaz)) Zindanda kırılan metin taşı sayısını döndürür. Gövde iki sayı parametresi bekler ama kullanmaz; parametresiz çağrılırsa 0 döner.
local taslar = d.get_kill_stone_count(0, 0)
sayı
d.get_kill_mob_count(iki sayı (değerleri kullanılmaz)) Zindanda öldürülen canavar (taş dışı) sayısını döndürür. Gövde iki sayı parametresi bekler ama kullanmaz; parametresiz çağrılırsa 0 döner.
local olen = d.get_kill_mob_count(0, 0)
sayı
d.is_use_potion(iki sayı (değerleri kullanılmaz)) Zindanda iksir kullanıldıysa true döner. Parametresiz çağrılırsa ya da zindan yoksa da true döner.
if not d.is_use_potion(0, 0) then
true/false
d.revived(iki sayı (değerleri kullanılmaz)) Zindanda dirilme kullanıldıysa true döner. Parametresiz çağrılırsa ya da zindan yoksa da true döner.
if not d.revived(0, 0) then
true/false
d.set_dest(x, y) Geçerli oyuncunun grubu zindana bağlıysa, yakındaki grup üyelerine hedef konum paketini gönderir. yok
d.jump_all(x, y (genel koordinat, metre)) Zindandaki bütün oyuncuları aynı zindan içinde verilen noktaya taşır; zaten bu haritada olanlar yükleme ekranı olmadan yer değiştirir.
d.jump_all(special.devil_tower[2][1], special.devil_tower[2][2])
yok
d.warp_all(x, y (genel koordinat, metre)) d.jump_all gibidir, ama herkesi yükleme ekranlı tam ışınlamayla taşır.
d.warp_all(2174, 7040)
yok
d.new_jump_all(harita no, x, y (genel koordinat, metre)) Verilen haritanın yeni bir zindan örneğini açar ve geçerli oyuncunun bulunduğu haritadaki bütün oyuncuları oraya ışınlar.
d.new_jump_all(66, 2174, 7040)
yok
d.new_jump_all_guild(harita no, x, y (genel koordinat, metre)) Yeni bir zindan örneği açar ve geçerli oyuncunun loncasından aynı haritadaki üyeleri oraya ışınlar; zindan bu loncaya bağlanır. Oyuncunun loncası yoksa bir şey yapmaz. Topluluk eki (ENABLE_D_NJGUILD).
d.new_jump_all_guild(66, 2174, 7040)
yok
d.new_jump_guild(harita no, x, y (genel koordinat, metre)) d.new_jump_all_guild ile aynı fonksiyon. Topluluk eki (ENABLE_D_NJGUILD).
d.new_jump_guild(66, 2174, 7040)
yok
d.new_jump_party(harita no, x, y (genel koordinat, metre)) Yeni bir zindan örneği açar ve geçerli oyuncunun grubundan aynı haritadaki üyeleri oraya ışınlar; grup zindana bağlanır. Oyuncunun grubu yoksa ışınlama olmaz.
d.new_jump_party(66, special.devil_tower[1][1], special.devil_tower[1][2])
yok
d.new_jump(harita no, x, y (genel koordinat, oyun birimi)) Yeni bir zindan örneği açar ve yalnız geçerli oyuncuyu oraya ışınlar. Diğer new_jump fonksiyonlarından farklı olarak koordinatı metre değil oyun birimi (metre × 100) olarak alır.
d.new_jump(66, 217400, 704000)
yok
d.regen_file(dosya yolu) Verilen regen dosyasındaki canavarları zindan haritasına bir kez çıkarır; yol sunucu klasörüne göredir.
d.regen_file("data/dungeon/deviltower2_regen.txt")
yok
d.set_regen_file(dosya yolu) Regen dosyasını zindana sürekli regen olarak bağlar; canavarlar dosyadaki sürelerle yeniden doğar. d.clear_regen ile durdurulur.
d.set_regen_file("data/dungeon/deviltower1_regen.txt")
yok
d.clear_regen() Zindana bağlı bütün regenleri durdurur.
d.clear_regen()
yok
d.set_exit_all_at_eliminate(saniye) Zindandaki canavarlar tükendiğinde, verilen saniye sonra bütün oyuncuları çıkış konumlarına göndermeyi ayarlar. Bir kez çalışır.
d.set_exit_all_at_eliminate(6)
yok
d.set_warp_at_eliminate(saniye, harita no, x, y (genel koordinat, metre), regen dosyası (isteğe bağlı)) Zindandaki canavarlar tükendiğinde, verilen saniye sonra herkesi verilen noktaya taşımayı ayarlar. Harita no bir zindan örneğiyse (ör. d.get_map_index()) oyuncular o örnek içinde taşınır ve regen dosyası çıkarılır; değilse normal haritaya ışınlanır. Bir kez çalışır, her kat için yeniden kurulur.
d.set_warp_at_eliminate(4, d.get_map_index(), 2182, 6803, "data/dungeon/deviltower3_regen.txt")
yok
d.get_map_index() Geçerli zindan örneğinin harita numarasını döndürür (ana harita × 10.000 + sıra); zindan yoksa 0.
local harita = d.get_map_index()
sayı
d.check_eliminated() Zindanda canavar kalmadıysa set_exit_all_at_eliminate ya da set_warp_at_eliminate ile kurulan işlemi tetikler.
d.check_eliminated()
yok
d.exit_all_to_start_position() Zindandaki oyuncuları krallıklarının başlangıç haritasındaki dönüş noktasına gönderir; bulunamazsa kaydedilmiş çıkış konumuna.
d.exit_all_to_start_position()
yok
d.count_monster() Zindana bağlı canlı canavar sayısını döndürür; zindan yoksa çok büyük bir sayı (LONG_MAX) döner.
if d.count_monster() == 0 then
sayı
d.setf(bayrak adı, değer) Zindan örneğine bağlı bir bayrak yazar. Bayrak oyuncuya değil zindana aittir ve zindan kapanınca kaybolur.
d.setf("kat", 2)
yok
d.getf(bayrak adı) Zindan bayrağının değerini döndürür; zindan yoksa 0.
if d.getf("kat") == 2 then
sayı
d.getf_from_map_index(bayrak adı, harita no) Harita numarası verilen zindan örneğinin bayrağını okur; zindan bulunamazsa 0, harita no 0 ise false döner.
local kat = d.getf_from_map_index("kat", harita)
sayı
d.set_unique(anahtar, vid) VID'i verilen karakteri anahtarla unique olarak kaydeder (ör. d.spawn_mob ile çıkan canavar).
d.set_unique("patron", d.spawn_mob(1093, 640, 459))
yok
d.get_damage_from_race(vid) VID'i verilen karakterin hangi oyuncu ırklarından hasar almayacağını gösteren bit maskesini döndürür; karakter yoksa 0. Topluluk eki (NEW_ICEDAMAGE_SYSTEM).
local maske = d.get_damage_from_race(vid)
sayı
d.get_damage_from_affect(vid) VID'i verilen karaktere saldırabilmek için gereken etki bayraklarını tablo olarak döndürür. Topluluk eki (NEW_ICEDAMAGE_SYSTEM).
local etkiler = d.get_damage_from_affect(vid)
tablo
d.set_damage_from_race(ırk no (0-7), vid) Verilen ırktaki oyuncuların VID'i verilen karaktere saldıramamasını sağlar. Zindan dışında da çalışır. Topluluk eki (NEW_ICEDAMAGE_SYSTEM).
d.set_damage_from_race(0, vid)
yok
d.set_damage_from_affect(etki bayrağı, vid) VID'i verilen karaktere yalnız bu etki bayrağına sahip oyuncuların saldırabilmesini sağlar; birden çok bayrak eklenirse hepsi gerekir. Topluluk eki (NEW_ICEDAMAGE_SYSTEM). yok
d.unset_damage_from_race(ırk no (0-7), vid) d.set_damage_from_race ile konan ırk engelini kaldırır. Topluluk eki (NEW_ICEDAMAGE_SYSTEM).
d.unset_damage_from_race(0, vid)
yok
d.unset_damage_from_affect(etki bayrağı, vid) d.set_damage_from_affect ile eklenen bayrağı kaldırır. Topluluk eki (NEW_ICEDAMAGE_SYSTEM). yok
d.reset_damage_from_race(vid) Karakterdeki bütün ırk engellerini kaldırır. Topluluk eki (NEW_ICEDAMAGE_SYSTEM).
d.reset_damage_from_race(vid)
yok
d.reset_damage_from_affect(vid) Karakterdeki bütün etki bayrağı koşullarını kaldırır. Topluluk eki (NEW_ICEDAMAGE_SYSTEM).
d.reset_damage_from_affect(vid)
yok
d.is_available0() Geçerli bir zindan örneği olup olmadığını döndürür. Topluluk eki (ENABLE_NEWSTUFF).
if not d.is_available0() then return end
true/false
d.select(harita no) Harita numarası verilen zindan örneğini seçer; bulunursa true, bulunamazsa seçimi temizler ve false döner. Seçim yalnız geçerli oyuncunun olmadığı server_timer olaylarında etkilidir.
if d.select(get_server_timer_arg()) then
true/false
d.find(harita no) Harita numarası verilen zindan örneği hâlâ açıksa true döner.
if d.find(harita) then
true/false
d.notice(metin) Zindan haritasındaki bütün oyunculara duyuru gönderir.
d.notice("Kapı açıldı, ilerleyin.")
yok
d.setqf(bayrak adı, değer) Geçerli quest'in verilen bayrağını zindandaki bütün oyuncular için yazar.
d.setqf("girdi", 1)
yok
d.all_near_to(x, y (genel koordinat, metre)) Zindan haritasındaki bütün oyuncular verilen noktaya 30 metreden yakınsa true döner.
if d.all_near_to(2174, 7040) then
true/false
d.set_warp_location(harita no, x, y (genel koordinat, metre)) Zindandaki bütün oyuncuların kayıt konumunu ayarlar: oyundan çıkarlarsa bir sonraki girişte bu noktada başlarlar.
d.set_warp_location(65, 5905, 1105)
yok
d.setqf2(quest adı, bayrak adı, değer) Adı verilen başka bir quest'in bayrağını zindandaki bütün oyuncular için yazar.
d.setqf2("deviltower_zone", "9_done", 1)
yok

Önceki modül: guild | Sonraki modül: horse

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.