Metin2 Quest global Fonksiyonları
Ö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. Bu modülde 83 fonksiyon var. Diğer modüller quest fonksiyonları listesinde, quest yazımının temeli quest yazma rehberinde.
| Fonksiyon | Ne yapar | Döner |
|---|---|---|
sys_err(metin) |
Metni geçerli quest ve oyuncu adıyla syserr kaydına yazar; oyuncuya da QUEST_SYSERR ile başlayan bilgi mesajı olarak gönderir (canlı sunucuda da görünür). Geçerli oyuncu yoksa (server_timer olayında) hiçbir şey yapmaz, orada sys_err2 kullanılır.sys_err("Ödül tablosu bulunamadı") |
yok |
sys_log(seviye, metin) |
Metni geçerli quest ve oyuncu adıyla syslog kaydına yazar. Seviye 1 ve üstündeyse yalnız test sunucusunda yazar; test sunucusunda metin oyuncuya QUEST_SYSLOG bilgi mesajı olarak da gider. Geçerli oyuncu yoksa hiçbir şey yapmaz.sys_log(0, "ödül verildi: "..pc.get_name()) |
yok |
sys_err2(metin) |
sys_err gibi syserr kaydına yazar ama oyuncu gerektirmez: kayda yalnız quest adı girer, oyuncuya QUEST_SYSERR mesajı gitmez. server_timer olaylarında kullanılabilir. Topluluk eki (ENABLE_NEWSTUFF); her kaynakta bulunmaz.sys_err2("zindan bulunamadı: "..get_server_timer_arg()) |
yok |
sys_log2(seviye, metin) |
sys_log gibi syslog kaydına yazar ama oyuncu gerektirmez; seviye 1 ve üstü yine yalnız test sunucusunda yazılır. server_timer olaylarında kullanılabilir. Topluluk eki (ENABLE_NEWSTUFF); her kaynakta bulunmaz.sys_log2(0, "devil_stone4_update çalıştı") |
yok |
char_log(değer, işlem adı, ipucu) |
Log veritabanındaki log tablosuna geçerli oyuncu için CHARACTER türünde kayıt ekler (değer what, işlem adı how, ipucu hint alanına; oyuncunun konumu ve IP'si ile). Yalnız ipucu kaçırılır, işlem adına oyuncunun yazdığı metni koymayın. Geçerli oyuncu yoksa syserr yazar.char_log(0, "CHANGE_NAME", "HAVE NOT RE-LOGIN") |
yok |
item_log(eşya kimliği, işlem adı, ipucu) |
Log tablosuna geçerli oyuncu adına ITEM türünde kayıt ekler; ilk argüman vnum değil eşyanın benzersiz kimliğidir (item.get_id). Eşya sunucu belleğinde bulunamazsa kayıt yazılmaz. Yalnız ipucu kaçırılır, işlem adına oyuncu girdisi koymayın.item_log(item.get_id(), "QUEST_USE", "kutu açıldı") |
yok |
set_state(durum adı) |
Geçerli quest'in durumunu değiştirir; q.setstate ile aynı fonksiyondur (questlib.lua'daki setstate ve newstate de buna bağlanır). Çağrıdan sonraki satırlar çalışmaya devam eder, leave ve yeni durumun enter/letter olayları quest bloğu bitince işler; var olmayan durum adı quest'i start durumuna götürür. qc derleyicisi tırnaksız yazımı (set_state(run)) metne çevirir.set_state("run") |
yok |
set_skin(görünüm no) |
Gönderilecek diyalog penceresinin görünümünü ayarlar; questlib.lua sabitleriyle NOWINDOW (0) pencere açmaz, NORMAL (1) olağan penceredir. 0-5 dışındaki değer NORMAL'e döner; istemci sinematik görünümü 5 ile açar, questlib.lua'daki CINEMATIC sabiti ise 2'dir. Eski yazımı: setskin.set_skin(NOWINDOW) |
yok |
setskin(görünüm no) |
set_skin ile aynı fonksiyon. Pencere açmadan işlem yapan bloklarda setskin(NOWINDOW) biçiminde sık kullanılır.setskin(NOWINDOW) |
yok |
time_to_str(zaman (Unix saniye)) |
Unix zamanını İngilizce kalıplı tarih metnine çevirir (ör. Sun Oct 18 12:00:00 2026). Saat UTC'dir ve metnin sonunda satır sonu karakteri bulunur.say(time_to_str(pc.getqf("next_time"))) |
metin |
say(metin (birden çok argüman birleştirilir)) |
Argümanları birleştirip sonuna satır sonu ([ENTER]) ekleyerek diyalog tamponuna yazar; metin bir sonraki bekleme noktasında (select, wait, input, confirm) ya da blok bitince pencerede gösterilir. Sayılar metne çevrilir; nil, boolean ve tablo argümanları atlanır. Geçerli oyuncu yokken (server_timer olayında) kullanılmamalıdır.say("Bu oltayı daha iyi yapmak istiyor musun?") |
yok |
chat(metin (birden çok argüman birleştirilir)) |
Argümanları birleştirip geçerli oyuncuya normal sohbet satırı olarak gönderir; yalnız o oyuncu görür. Geçerli oyuncu gerekir.chat("Hoş geldin "..pc.get_name()) |
yok |
cmdchat(komut metni (birden çok argüman birleştirilir)) |
Argümanları birleştirip geçerli oyuncunun istemcisine komut olarak gönderir; sohbette görünmez, istemcideki game.py serverCommandList içinde ilk kelimeye karşılık gelen işlev çalışır. Geçerli oyuncu gerekir.cmdchat("PlayMusic 1 xmas.mp3") |
yok |
syschat(metin (birden çok argüman birleştirilir)) |
Argümanları birleştirip geçerli oyuncuya sistem bilgi mesajı olarak gönderir. Geçerli oyuncu gerekir.syschat("Atını daha fazla geliştiremezsin.") |
yok |
chat_in_map0(harita no, metin) |
Metni verilen haritadaki (bu çekirdekteki) bütün oyunculara normal sohbet satırı olarak gönderir. Geçerli oyuncu gerektirmez, server_timer olaylarında kullanılabilir; argümanları birleştirmez. Topluluk eki (ENABLE_NEWSTUFF); her kaynakta bulunmaz.chat_in_map0(get_server_timer_arg(), "Kapılar 1 dakika sonra kapanacak.") |
yok |
cmdchat_in_map0(harita no, komut metni) |
cmdchat gibi istemci komutunu verilen haritadaki bütün oyunculara gönderir. Geçerli oyuncu gerektirmez. Topluluk eki (ENABLE_NEWSTUFF); her kaynakta bulunmaz.cmdchat_in_map0(pc.get_map_index(), "PlayMusic 1 xmas.mp3") |
yok |
syschat_in_map0(harita no, metin) |
Metni verilen haritadaki bütün oyunculara sistem bilgi mesajı olarak gönderir. Geçerli oyuncu gerektirmez, server_timer olaylarında kullanılabilir. Topluluk eki (ENABLE_NEWSTUFF); her kaynakta bulunmaz.syschat_in_map0(get_server_timer_arg(), "Zindan süresi doldu.") |
yok |
get_locale() |
Sunucunun yerel ayara bağlı karakter kümesi adını döndürür; turkey yerel ayarında latin5.if get_locale() == "latin5" then |
metin |
setleftimage(dosya adı) |
Diyalog penceresinin soluna resim koyan [LEFTIMAGE] etiketini tampona yazar. Tam yol verilmezse istemci dosyayı d:/ymir work/ui/game/questboard/ klasöründe arar.setleftimage("1001.tga") |
yok |
settopimage(dosya adı) |
Diyalog penceresinin üstüne resim koyan [TOPIMAGE] etiketini tampona yazar; dosya yolu kuralı setleftimage ile aynıdır.settopimage("1001.tga") |
yok |
server_timer(zamanlayıcı adı, saniye, argüman (isteğe bağlı, varsayılan 0)) |
Sunucu geneli tek seferlik zamanlayıcı kurar; süre dolunca quest'lerin start durumundaki when ad.server_timer blokları geçerli oyuncu olmadan çalışır, argüman get_server_timer_arg ile okunur. Karşılayan blok yoksa olay yarım saniyede bir yeniden denenir. Aynı ad ve argümanla ikinci kez kurulursa syserr yazar ama yeni zamanlayıcı yine çalışır ve silinemez hale gelir.server_timer("devil_stone4_fail1", 5*60, pc.get_map_index()) |
yok |
clear_server_timer(zamanlayıcı adı, argüman) |
Aynı ad ve argümanla kurulmuş server_timer ya da server_loop_timer'ı iptal eder. Bu kaynaktaki bir yama nedeniyle argüman 0 olamaz: argümansız (0) kurulan zamanlayıcı clear_server_timer ile silinemez, yalnız syserr yazılır.clear_server_timer("devil_stone4_update", get_server_timer_arg()) |
yok |
server_loop_timer(zamanlayıcı adı, saniye, argüman (isteğe bağlı, varsayılan 0)) |
server_timer gibi ama tekrarlar: her süre dolduğunda when ad.server_timer blokları çalışır. clear_server_timer ile durdurulur; durdurulabilmesi için sıfırdan farklı bir argüman (ör. harita no) verilmelidir.server_loop_timer("devil_stone4_update", 10, pc.get_map_index()) |
yok |
get_server_timer_arg() |
Çalışmakta olan server_timer olayının argümanını döndürür (kurulurken verilen üçüncü değer, verilmediyse 0). Zindan zamanlayıcılarında argümanla harita no taşınır ve zindan d.select ile seçilir.if d.select(get_server_timer_arg()) then |
sayı |
timer(zamanlayıcı adı (verilmezse adsız), saniye) |
Geçerli oyuncuya tek seferlik zamanlayıcı kurar; süre dolunca when ad.timer bloğu çalışır, aynı adla yeniden kurmak eskisini iptal eder. Oyuncu çıkış yapınca ya da ışınlanınca iptal olur; olay o an işlenemezse (açık diyalog varsa ya da geçerli durumda karşılayan blok yoksa) yarım saniyede bir yeniden denenir. Yalnız saniye verilirse adsız zamanlayıcı kurulur; bu NPC'ye bağlı olmayan timer olayını tetikler ve cleartimer ile silinemez.timer("devil_stone1_2", 2) |
yok |
loop_timer(zamanlayıcı adı, saniye) |
Geçerli oyuncuya tekrarlayan zamanlayıcı kurar; her süre dolduğunda when ad.timer bloğu çalışır. cleartimer ile durdurulur; aynı adla yeniden kurmak eskisini iptal eder, oyuncu çıkış yapınca ya da ışınlanınca biter.loop_timer("kontrol", 60) |
yok |
cleartimer(zamanlayıcı adı) |
Geçerli oyuncunun timer ya da loop_timer ile kurulmuş adlı zamanlayıcısını iptal eder. Yalnız saniyeyle kurulan adsız zamanlayıcıyı silemez.cleartimer("kontrol") |
yok |
getnpcid(npc adı) |
questnpc.txt dosyasında NPC'ye verilen adın vnum'unu döndürür (ör. fisher için 9009).local vnum = getnpcid("fisher") |
sayı (vnum), bulunamazsa 0 |
is_test_server() |
CONFIG dosyasında test_server açıksa true, değilse false döndürür. Deneme kolaylıkları (kısa bekleme süresi gibi) için kullanılır.if is_test_server() then |
true/false |
is_speed_server() |
CONFIG dosyasında speed_server açıksa true döndürür; bu ayar hız sunucusu etkinliğini (speedserver fonksiyonları) başlatır.if is_speed_server() then |
true/false |
raw_script(metin) |
Metni diyalog tamponuna olduğu gibi, satır sonu eklemeden yazar; renk, resim, harita işareti gibi istemci etiketleri böyle gönderilir. questlib.lua'daki setcolor, addmapsignal, makequestbutton gibi yardımcılar bunu çağırır; yalnız son argüman kullanılır.raw_script("[CLEARMAPSIGNAL]") |
yok |
number(en küçük, en büyük) |
İki değer arasında (ikisi dahil) rastgele tamsayı döndürür. Argümanlardan biri sayı değilse 0 döner; ilk değer büyükse ikisi yer değiştirir ve syserr yazılır.local s = number(1, 7) |
sayı |
set_bgm_volume_enable() |
Haritaya girişte istemciye gönderilen arka plan müziği bilgisine ses düzeyinin de eklenmesini açar. İç kullanım içindir; settings.lua sunucu açılırken çağırır.set_bgm_volume_enable() |
yok |
add_bgm_info(harita no, müzik dosyası adı, ses düzeyi (isteğe bağlı, varsayılan 0,02)) |
Haritanın arka plan müziğini kaydeder; oyuncu haritaya girince dosya adı (set_bgm_volume_enable açıksa ses düzeyiyle) istemciye gider, ad istemcinin BGM klasöründeki dosyayı gösterir. İç kullanım içindir; settings.lua sunucu açılırken çağırır.add_bgm_info(1, "enter_the_east.mp3", 0.5) |
yok |
add_goto_info(ad, krallık (0 hepsi), harita no, x, y (dünya koordinatı, metre)) |
GM'lerin /goto komutu için hedef kaydeder; ad içinde | ile takma adlar yazılabilir, /goto #harita_no kullanımında harita no eşleşir. İç kullanım içindir; settings.lua sunucu açılırken çağırır.add_goto_info("a1", 0, 1, 4693, 9642) |
yok |
__refine_pick(envanter hücresi) |
Geçerli oyuncunun verilen hücresindeki kazmayı geliştirmeyi dener: başarıda kazma aynı hücrede bir üst seviyesiyle değişir, başarısızlıkta kazma kalır ama ustalık puanı düşer (ENABLE_PICKAXE_RENEWAL). Eşya kazma değilse, ustalık puanı dolmamışsa ya da kuşanılmışsa 2 döner. İç kullanım içindir (çift alt çizgili ad).local r = __refine_pick(item.get_cell()) |
sayı (1 başarılı, 0 başarısız, 2 geçersiz) |
add_ox_quiz(seviye, soru metni, doğru cevap (true/false)) |
OX etkinliğinin soru listesine verilen seviye grubunda bir soru ekler (soru en çok 255 karakter). İç kullanım içindir: oxevent.open her çağrıldığında liste temizlenir ve oxquiz.lua yüklenir, dosyadaki her satır bunu çağırır.add_ox_quiz(1, "Shinsoo kırmızı krallık mıdır?", true) |
yok |
__fish_real_refine_rod(envanter hücresi) |
Geçerli oyuncunun verilen hücresindeki oltayı geliştirmeyi dener: başarıda olta aynı hücrede bir üst seviyesiyle değişir, başarısızlıkta olta kalır ama ustalık puanı düşer (ENABLE_FISHINGROD_RENEWAL). Eşya olta değilse, kuşanılmışsa ya da ustalık puanı dolu değilse 2 döner. İç kullanım içindir; balıkçı NPC quest'i (fisher.lua) kullanır.local f = __fish_real_refine_rod(item.get_cell()) |
sayı (1 başarılı, 0 başarısız, 2 geçersiz) |
__give_char_priv(bonus türü, değer) |
Geçerli oyuncuya 2 saatlik kişisel bonus verir; tür 1 eşya düşme, 2 Yang düşme, 3 büyük Yang düşme, 4 EP. Değer 0-100 arasına kırpılır (negatif değer etkisizdir) ve aynı türde etkin bonus varsa yenisi yok sayılır. İç kullanım içindir; falcı quest'i (fortune_telling.lua) kullanır.__give_char_priv(4, 20) |
yok |
__give_empire_priv(krallık (0 hepsi), bonus türü, değer, saniye) |
Krallığa süreli bonus verir (tür __give_char_priv ile aynı; değer en çok 200, süre en çok 7 gün) ve aynı türdeki önceki bonusun yerini alır. Oyunculara duyuru gider (krallık 0 ise yalnız GM'lere); kişisel, krallık ve lonca bonuslarından toplanmadan en yükseği geçerli olur. Yönetici (GM) işi içindir.__give_empire_priv(0, 4, 50, 3600) |
yok |
__give_guild_priv(lonca id, bonus türü, değer, saniye) |
Loncaya süreli bonus verir (tür __give_char_priv ile aynı; değer en çok 50, süre en çok 7 gün); lonca sunucuda yüklüyse herkese duyuru gider. Yönetici (GM) işi içindir.__give_guild_priv(pc.get_guild(), 1, 10, 3600) |
yok |
__get_empire_priv_string(krallık) |
Krallığın etkin bonuslarını tek metin olarak döndürür: her biri bonus adı, yüzde değer ve kalan saat (hours) ile; hiç yoksa None (sonunda ünlem işaretiyle). Kalıp İngilizcedir. İç kullanım içindir (çift alt çizgili ad).say(__get_empire_priv_string(pc.get_empire())) |
metin |
__get_empire_priv(krallık, bonus türü) |
Krallığın verilen türdeki etkin bonus değerini döndürür; argümanlar sayı değilse 0. İç kullanım içindir (çift alt çizgili ad).local v = __get_empire_priv(pc.get_empire(), 4) |
sayı |
__get_guild_priv_string(lonca id) |
Loncanın etkin bonuslarını __get_empire_priv_string ile aynı kalıpta metin olarak döndürür. İç kullanım içindir (çift alt çizgili ad).say(__get_guild_priv_string(pc.get_guild())) |
metin |
__get_guildid_byname(lonca adı) |
Adı verilen loncanın kimliğini döndürür; argüman metin değilse syserr yazar ve 0 döner. İç kullanım içindir (çift alt çizgili ad).local gid = __get_guildid_byname(input()) |
sayı (lonca id), bulunamazsa 0 |
__get_guild_priv(lonca id, bonus türü) |
Loncanın verilen türdeki etkin bonus değerini döndürür; argümanlar sayı değilse 0. İç kullanım içindir (çift alt çizgili ad).local v = __get_guild_priv(pc.get_guild(), 1) |
sayı |
item_name(vnum) |
Eşyanın item_proto'daki yerel adını döndürür; vnum bulunamazsa ya da argüman sayı değilse boş metin.local from_name = item_name(item.vnum) |
metin |
mob_name(vnum) |
Canavar ya da NPC'nin mob_proto'daki yerel adını döndürür; bulunamazsa boş metin.say_title(mob_name(npc.get_race())) |
metin |
mob_vnum(canavar adı) |
Yerel adı birebir eşleşen canavarın vnum'unu döndürür; eşleşme büyük/küçük harfe duyarlıdır, aynı adı taşıyan birden çok canavar varsa yalnız biri döner.local vnum = mob_vnum("Yabani Köpek") |
sayı (vnum), bulunamazsa 0 |
get_time() |
Sunucu saatini Unix zaman damgası olarak döndürür; saat DB sunucusuyla eşitlenmiştir. Bekleme süresi bayraklarında kullanılır. get_global_time ile aynı fonksiyon.if get_time() < pc.getqf("next_use_time") then |
sayı (Unix zamanı, saniye) |
get_global_time() |
get_time ile aynı fonksiyon: DB sunucusuyla eşitlenmiş sunucu saatini Unix zaman damgası olarak döndürür.pc.setqf("new_withdraw_time", get_global_time()) |
sayı (Unix zamanı, saniye) |
get_channel_id() |
Oyun çekirdeğinin kanal numarasını (CONFIG'teki CHANNEL) döndürür.say("Kanal: "..get_channel_id()) |
sayı |
command(komut metni) |
Metni geçerli oyuncu adına sohbet komutu olarak çalıştırır (başında / olmadan). Komut oyuncunun kendi GM yetkisiyle denetlenir, yetmezse komut yokmuş gibi ileti çıkar; GM olmayan oyuncuda saniyede 10 komut sınırı bu çağrıları da sayar ve aşılırsa bağlantı kesilir.command("cube open") |
yok |
find_pc_cond(en düşük seviye, en yüksek seviye, sınıf bayrağı) |
Geçerli oyuncuyla aynı haritadaki (bu çekirdekteki) diğer oyunculardan seviyesi aralıkta olan birini rastgele seçip vid'ini döndürür. Sınıf bayrağı bit maskesidir: her sınıf ve beceri grubu için (sınıf+1)*3+beceri grubu numaralı bit; 0 verilirse sınıf süzülmez.local vid = find_pc_cond(20, 40, 0) |
sayı (vid), bulunamazsa 0 |
find_pc_by_name(oyuncu adı) |
Adı verilen çevrimiçi oyuncunun vid'ini döndürür; büyük/küçük harfe duyarsızdır ve yalnız aynı oyun çekirdeğindeki (aynı kanal ve çekirdek) oyuncuları bulur.local u_vid = find_pc_by_name(u_name) |
sayı (vid), bulunamazsa 0 |
find_npc_by_vnum(vnum) |
Geçerli oyuncunun haritasında verilen vnum'la bulduğu ilk karakterin (NPC ya da canavar) vid'ini döndürür. Geçerli oyuncu gerekir.local vid = find_npc_by_vnum(11000) |
sayı (vid), bulunamazsa 0 |
set_quest_state(quest adı, durum adı) |
Geçerli oyuncunun verilen quest'teki durumunu değiştirir. Ad geçerli quest'inse set_state gibi hemen işler; başka bir quest'te değişiklik sıraya alınır ve geçerli quest bloğu bitince leave/enter olaylarıyla uygulanır. Var olmayan durum adı start durumuna götürür.set_quest_state("skill_group", "run") |
yok |
get_quest_state(quest adı) |
Geçerli oyuncunun verilen quest'teki durumunu sayı olarak döndürür; start durumu 0'dır. Diğer durumların numarası derleyicinin ürettiği büyük bir sayıdır, karşılaştırmak için quest_adı.durum_adı değeri kullanılır (ör. skill_group.run).if get_quest_state("skill_group") == skill_group.run then |
sayı (durum no) |
under_han(metin) |
Metnin son Korece hecesinin son ünsüzle (batchim) bitip bitmediğini döndürür; Korece ek seçimi içindir. Türkçe metinde anlamlı sonuç vermez.if under_han(from_name) then |
true/false |
notice(metin (birden çok argüman birleştirilir)) |
Argümanları birleştirip yalnız geçerli oyuncuya duyuru olarak gösterir (ekranın üstündeki duyuru şeridi ve sohbet penceresi). Geçerli oyuncu gerekir.notice(guild.name(pc.get_guild()).." Loncası araziyi aldı.") |
yok |
notice_all(metin (birden çok argüman birleştirilir)) |
Argümanları birleştirip tüm kanal ve çekirdeklerdeki bütün oyunculara duyuru gönderir (diğer çekirdeklere P2P ile). Geçerli oyuncu gerektirmez.notice_all(string.format("Metin2'ye hoş geldin %s", pc.get_name())) |
yok |
notice_in_map(metin, büyük yazı (isteğe bağlı, true/false)) |
Metni geçerli oyuncunun bulunduğu haritadaki (bu çekirdekteki) bütün oyunculara duyuru olarak gönderir; ikinci argüman true ise büyük yazı kullanılır. Argümanları birleştirmez; geçerli oyuncu yoksa hiçbir şey yapmaz.notice_in_map("Zindan kapısı açıldı.") |
yok |
big_notice(metin (birden çok argüman birleştirilir)) |
notice gibi ama metni ekranda büyük yazıyla gösterir; yalnız geçerli oyuncuya gider ve geçerli oyuncu gerekir. Topluluk eki (ENABLE_FULL_NOTICE); her kaynakta bulunmaz.big_notice("Görev tamamlandı.") |
yok |
big_notice_all(metin (birden çok argüman birleştirilir)) |
notice_all'ın büyük yazılı hali: tüm kanal ve çekirdeklerdeki oyunculara büyük duyuru gönderir. Topluluk eki (ENABLE_FULL_NOTICE); her kaynakta bulunmaz.big_notice_all("OX etkinliği 10 dakika sonra başlıyor.") |
yok |
big_notice_in_map(metin) |
Metni geçerli oyuncunun haritasındaki bütün oyunculara büyük duyuru olarak gönderir; geçerli oyuncu yoksa hiçbir şey yapmaz. Topluluk eki (ENABLE_FULL_NOTICE); her kaynakta bulunmaz.big_notice_in_map("Patron ortaya çıktı.") |
yok |
warp_all_to_village(harita no, saniye) |
Verilen haritadaki (bu çekirdekteki) GM olmayan bütün oyuncuları, süre dolunca kendi krallıklarının ilk köyüne ışınlar. Çağrıldığı anda haritaya duyuru gider; metin sabittir (turkey çevirisi 15 saniye der), verilen süreyi yansıtmaz.warp_all_to_village(pc.get_map_index(), 15) |
yok |
warp_to_village() |
Geçerli oyuncuyu kendi krallığının ilk köyündeki başlangıç noktasına ışınlar. Argüman kullanmaz, verilen değer yok sayılır.warp_to_village() |
yok |
say_in_map(harita no, metin) |
Verilen haritadaki bütün oyunculara metni içeren bir diyalog penceresi gönderir (metnin sonuna [ENTER][DONE] eklenir). Argümanları birleştirmez, geçerli oyuncu gerektirmez.say_in_map(pc.get_map_index(), "Etkinlik sona erdi.") |
yok |
kill_all_in_map(harita no) |
Verilen haritadaki oyuncu ve evcil hayvan dışındaki bütün karakterleri öldürür; canavar ve taşların yanında NPC'ler de etkilenir.kill_all_in_map(pc.get_map_index()) |
yok |
regen_in_map(harita no, regen dosyası yolu) |
Regen dosyasındaki canavarları verilen haritaya bir kez çıkarır; koordinatlar haritanın başlangıç noktasına göre okunur, çıkan canavarlar saldırgandır ve yeniden doğmaz. Dosya yolu oyun sunucusunun çalışma klasörüne göredir; CONFIG'te no_regen açıksa hiçbir şey yapmaz.regen_in_map(pc.get_map_index(), "data/dungeon/deviltower2_regen.txt") |
yok |
enable_over9refine(kaynak vnum, hedef vnum) |
+9 üstü yükseltme için eşleşme kaydeder: kaynak vnum'lu eşya hedef vnum'lu eşyaya dönüştürülebilir olur (item.can_over9refine ve item.change_to_over9 bu kaydı kullanır). Kayıt yalnız o oyun çekirdeğinin belleğinde tutulur, sunucu yeniden başlayınca silinir. | yok |
block_chat(oyuncu adı, süre (ör. 10m, 1h, 1d)) |
Geçerli oyuncu adına GM komutu olarak verilen oyuncuya sohbet yasağı koyar; 0 süresi yasağı kaldırır, oyuncu başka kanaldaysa ya da çevrimdışıysa istek iletilir. Geçerli oyuncu en az GM_HIGH_WIZARD değilse ve chat_privilege.block bayrağı yoksa komut reddedilir; true yalnız komutun çağrıldığını gösterir. Yönetici (GM) işi içindir.block_chat("OyuncuAdi", "10m") |
true/false |
spawn_mob(vnum, adet (1-10), saldırgan (true/false)) |
Canavarı geçerli oyuncunun çevresine (her yönde en çok 7,5 metre) adet kadar çıkarır ve çıkan sayıyı döndürür; adet 1-10 arasına kırpılır. Üçüncü argüman boolean olmalıdır, değilse hiçbir şey çıkmaz ve 0 döner. Geçerli oyuncu gerekir.local n = spawn_mob(101, 5, true) |
sayı (çıkan canavar sayısı) |
get_locale_base_path() |
Yerel ayar klasörünün yolunu döndürür (turkey için locale/turkey, oyun sunucusunun çalışma klasörüne göre). settings.lua ek Lua dosyalarını dofile ile yüklerken kullanır.dofile(get_locale_base_path().."/quest/GFquestlib.lua") |
metin |
purge_area(x1, y1, x2, y2 (dünya koordinatı, pc.get_x() değerinin 100 katı)) |
Dikdörtgen içindeki canavar ve metin taşlarını (evcil hayvanlar hariç) ölüm ve ganimet olmadan haritadan siler; geçerli NPC korunur. Harita ilk köşeden bulunur, bulunamazsa syserr yazar.purge_area(pc.get_x()*100 - 1000, pc.get_y()*100 - 1000, pc.get_x()*100 + 1000, pc.get_y()*100 + 1000) |
yok |
warp_all_in_area_to_area(kaynak x1, y1, x2, y2, hedef x1, y1, x2, y2 (dünya koordinatı, pc.get_x() değerinin 100 katı)) |
Kaynak dikdörtgendeki bütün oyuncuları (GM'ler dahil) hedef dikdörtgende rastgele bir noktaya ışınlar ve sayılarını döndürür. Harita kaynak dikdörtgenin ilk köşesinden bulunur; bulunamazsa 0 döner.local n = warp_all_in_area_to_area(x1, y1, x2, y2, hx1, hy1, hx2, hy2) |
sayı (ışınlanan oyuncu sayısı) |
get_special_item_group(grup vnum) |
special_item_group grubundaki her girdi için sırayla vnum ve adet döndürür (vnum1, adet1, vnum2, adet2 ...); tabloya toplamak için {get_special_item_group(no)} yazılır. Yang ve EP gibi özel girdilerde vnum yerine küçük bir kod gelir (1 Yang, 2 EP). Grup yoksa syserr yazar.local t = {get_special_item_group(item.get_vnum())} |
çoklu sayı (vnum, adet çiftleri), grup yoksa hiçbir şey |
spawn_mob0(vnum, harita no, x, y (harita içi metre)) |
Canavarı verilen haritada verilen noktaya çıkarır ve vid'ini döndürür; geçerli oyuncu gerektirmez. Argüman sayı değilse -1, canavar bilinmiyorsa -2, harita yoksa -3, çıkarılamazsa 0 döner. Topluluk eki (ENABLE_NEWSTUFF); her kaynakta bulunmaz.local vid = spawn_mob0(101, pc.get_map_index(), 250, 300) |
sayı (vid); hatada -1, -2, -3 ya da 0 |
spawn_mob_in_map(vnum, adet (1-10), saldırgan (true/false), harita no, x, y (harita içi metre)) |
Canavarı verilen haritada, verilen noktanın çevresine (her yönde en çok 7,5 metre) adet kadar çıkarır ve çıkan sayıyı döndürür; geçerli oyuncu gerektirmez. Üçüncü argüman boolean olmalıdır; harita bulunamazsa 0 döner. Topluluk eki (ENABLE_NEWSTUFF); her kaynakta bulunmaz.spawn_mob_in_map(101, 5, true, pc.get_map_index(), 250, 300) |
sayı (çıkan canavar sayısı) |
get_table_postfix() |
CONFIG'teki table_postfix değerini döndürür (genelde boş); elle yazılan SQL sorgularında tablo adının sonuna eklenir. Topluluk eki (ENABLE_NEWSTUFF); her kaynakta bulunmaz.local tablo = "player"..get_table_postfix() |
metin |
mysql_direct_query(sql sorgusu) |
Sorguyu PLAYER_SQL veritabanı bağlantısında eşzamanlı çalıştırır; sorgu bitene kadar çekirdek bekler. İlk dönüş etkilenen ya da dönen satır sayısıdır (hatada 4294967295); ikinci dönüş rows[1].sutun_adi biçiminde satır tablosudur: sayısal sütun sayı, NULL nil, TEXT/BLOB sütunu bayt değerleri tablosu olarak gelir. Oyuncunun yazdığı metni sorguya koymadan önce mysql_escape_string ile kaçırın. Topluluk eki (ENABLE_NEWSTUFF); her kaynakta bulunmaz.local n, rows = mysql_direct_query("SELECT level FROM player WHERE id="..pc.get_player_id()) |
iki değer: sayı (satır sayısı) ve tablo (satırlar) |
mysql_escape_string(metin) |
Metindeki tırnak gibi özel karakterleri MySQL için kaçırıp döndürür; oyuncu girdisini SQL sorgusuna koymadan önce kullanılır. 511 bayttan uzun metinde boş metin döner. Topluluk eki (ENABLE_NEWSTUFF); her kaynakta bulunmaz.local ad = mysql_escape_string(input()) |
metin |
mysql_password(metin) |
Metnin MySQL PASSWORD() karmasını (yıldızla başlayan 41 karakter) döndürür. Topluluk eki (ENABLE_NEWSTUFF); her kaynakta bulunmaz.local h = mysql_password("metin2") |
metin |
Önceki modül: game | Sonraki modül: questlib
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.