Paylaşım İçin Teşekkür Ederim Elinize Emeğinize Sağlık Sıkılmadan Sonuna Kadar Okudum Gerek Konu Görselleri Olsun Gerek Konu Anlatımı Olsun Gerekte Konu Doğruluğu Olsun Muhteşem Paylaşımlarınızın Devamını Bekliyoruz
Quest sistemine giriş konusuna hoş geldiniz.
En temelden başlayarak ilerleyeceğiz bu sebeple bu konu hali hazırda,
kapsamlı questler yazabilen kişiler için bildikleri bilgileri içermektedir.
Hadi başlayalım...
Quest Nedir ?
Lua dili ile yazılan yardımcı yapılardır. Quest sistemi oyunda birçok olayı yöneten sistemdir. NPC işlemleri, item işlemleri gibi.
Küçük işlemleri yeniden derleme gerektirmeden halletmemizi sağlar.
Mesela bir npc eklenecek oyuna ve bu npc sizden bir item alacak ve size başka bir item verecek, bunun için kaynak tarafına ekleme yapıp tekrar derlemek mantıksızdır metin2 gibi büyük frameworklerde bunun yerine kaynak tarafına oyuncudan bir item silme ve oyuncuya bir item verme fonksiyonları tanımlanır ve quest sistemi ile bunu istediğiniz kadar kullanabilirsiniz. Açtıkça açılabilecek bir konu işin detayında iseniz wikipedia'dan yararlanabilirsiniz biz işin sonucuna odaklanacağız.
Questleri script olarak düşünebilirsiniz. Bir script yazarız bunu oyuna ekleriz olay bundan ibaret ve bu scripti yazarken lua dilini ve kaynak tarafında tanımlanan fonksiyonları kullanırız.
Nasıl Quest Eklenir ?
Ekleme işlemi files sisteminize ve questin yazılış biçimine göre değişiklik gösterir. Paylaşılan files sistemlerinden birini kullanıyorsanız sıkıntı yok neredeyse hepsi aynı altyapı kullanıyor ve büyük değişiklikler yapılmıyor.
Peki neler oluyor ? Kaynakları derlediğinizde oluşan çağırılabilir ikililerden biri de qc dosyası bu dosya quest sisteminin kalbini oluşturmakta.
- Bir quest dosyası hazırlanır. İster kendiniz yazın ister bulup buluşturun.
- Quest dosyası sunucu tarafında quest klasörüne upload edilir.
- Upload edilen quest dosyası quest listesine eklenir.
- Son olarakta questi derleyecek olan script çalıştırılır ve ya kendiniz derlersiniz.
Yukarıdaki aşamalarda bahsetttiğim questleri derleyen scriptler aslında yaptığı işlem quest listesinin her satırını sırayla okumak ve her okumadan sonra o questi derleyecek olan qc ikilisini çağırmaktır.
Bu scriptin uzantısıyla birlikte adı genelde make.sh'tır.
içeriği ise aşağıdaki gibidir.
make.sh:#!/usr/local/bin/bash LIST_FILE='quest_list' # quest listesi if [ -r $LIST_FILE ]; then # quest listesi bulunmakta ve okunabilir halde kontrolu sağlayan if bloğu rm -rdf object # object klasörünü siliyor. mkdir object # object klasörünü yeniden oluşturuyor. while read line; # her satırı okuyor ve bu sırada while döngüsü başlatıyor. do ./qc $line #while döngüsü boyunca her satırda yazanı qc yi çağırıp ona girdi olarak veriyor. done < $LIST_FILE else echo $LIST_FILE' is missing' # quest listesi dosyası yok diyor if bloğunun else kısmı. fiQuest Derleme
Questi oyuna başarılı şekilde eklemek aslında başarılı şekilde derleyebilmektir.
1. Quest dosyasının uploadı;
Ekleyeceğiniz questin dosyasını server tarafına upload ederek başlıyoruz.
özel bir düzenleme yapılmadıysa quest klasörü aşağıdaki lokasyondadır.
.:Örnek:/files lokasyonu/locale lokasyonu/quest
.:.lua ve ya .quest dosyamızı buraya upload ediyoruz./usr/game/share/locale/turkey/quest
2.Listeye ekleme;
Quest listesinin ismi filesten filese değişiklik gösterir. Uzantısı olmayan bir dosyadır genelde. Kendiniz derleyecekseniz listeye eklemenize gerek yok ancak önermiyorum otomasyon scriptleri kullanmak her zaman yararınıza.
Kendi filesinizin quest listesi dosyasını öğrenmek için make.sh içine bakabilirsiniz elbette make.sh ismide farklıysa arayıp bulacaksınız artık, aklıma birşey gelmedi.
Ekleyeceğiniz questi uzantısıyla birlikte uygun yere ekleyeceksiniz.
3. Questi derleme;
Eğer questinizde özel tanımlamalar yok ise qc ikilisi ile derleyebilirsiniz.
Script ile listeden toplu derleme (make.sh);
Bu yöntemi kullanırsanız önceden yüklü questler silinir sadece listedeki questler yüklenir, scriptte öncekileri silme kapatılabilir ama daha saçma sorunlar oluşabilir üste yazıp yazamama gibi. Bu yüzden önceki object klasörünü silmek en mantıklısıdır. Bu sebeple script otomatik siler mevcur klasörü.
Silme işleminden önce yedek almak hayat kurtarabilir hata yapma olasılığına karşı. İsterseniz make.sh scriptine yedekleme koşullarıda ekleyebilirsiniz.
Scripti çalıştırma::Komutunu kullanarak derleyebilirsiniz.cd /usr/game/share/locale/turkey/quest && sh make.sh
Oyun içindem IMPLEMENTOR hesap ile reload q yazarak aktifleştirebilirsiniz.
Tekil ekleme;
qc çağırma:komutunu kullanarak derleyebilirsiniz. Aynı şekilde reload q ile aktifleştirebilirsiniz.cd /usr/game/share/locale/turkey/quest && ./qc YükleyeceğinizQuest.quest
Eğer questinizde özel tanımlamalar varsa ymir'in yazdığı python scriptini kullanmanız gerekir.
Açıklayacak olursak bu script özel tanımları kullanarak questi düzenleyip o şekilde derler, qc özel tanımları desteklemediğinden. Scripti kullanabilmeniz için sisteminizde python bulunması gerekir.
Python ile ekleme;
pre_qc scriptini çağırma:komutunu kullanarak derleyebilirisniz. Quest listesinin adı farklı olabilir scripti notepad++ ile açarak ilgili yeri düzenleyiniz.cd /usr/game/share/locale/turkey/quest && python2.7 pre_qc.py -ac
Quest Yazmaya Giriş
Kişisel önerim quest yazmaya geçmeden önce quest ekleme, silmeyi iyi pekiştirin.
Ana Yapı
.:Özel durumları ayrı tutarak genel olarak quest yapısı yukarıdaki şekildedir.quest deneme_questi begin state start begin sizin kodlarınız. end end
Yazacağınız tüm kodlar bu satırlar arasında olacak.
endmantığını açıklamaya bile gerek yok durumları, şartları sonlandırmak için kullanıyoruz
Şartlar
Şartlar herzamanwhenile başlar.
Oyuncunun oyuna girmesiyle başlayan bir quest taslağı.
lua:quest deneme_questi begin # "deneme_questi" isimli questin başlangıcı. state start begin # şartın başlangıcı. when login begin # Oyuncu oyuna bağlandığında. sizin kodlarınız. end # when şartının sonu. end # başlama şartının sonu. end # questin sonu.Oyuncunun NPC ile konuşması ile tetiklenen bir quest taslağı.
lua:NPC_numarası konuşulacak olan ncp nin mob\_proto da ki kodu CNCN ise npc ile konuşurken oyuncunun tıklayacağı seçimde yazan yazı.quest deneme_questi begin # "deneme_questi" isimli questin başlangıcı. state start begin # şartın başlangıcı when NPC_numarası.chat."CNCN" begin # oyuncu CNCN'e tıkladığında şartı. sizin kodlarınız. end # when şartının sonu. end # başlangıç şartının sonu end # quest sonu.
Oyuncunun iteme tıklaması ile tetiklenen quest taslağı.
lua:quest deneme_questi begin # deneme_questi isimli quest başlangıcı. state start begin # başlangıç şartı. when ITEM_NUMARASI.use begin # iteme tıklama şartı. sizin kodlarınız. end # when şartı sonu. end # şart sonu. end # quest sonu.
ITEM_NUMARASI tıklanacak itemin item protoda ki kodu.
Oyuncunun belirli seviyeye ulaşması ile tetiklenen quest.
lua:Dikkat ettiyseiz login şartıda bulunmakta level alma ile birlikte bunu koymamızın sebebi ise oyuncu her oyuna girdiğinde questin tetiklenmesini istememiz yoksa çok saçma olur, quest bir kere tetiklenir oyuncu kapatırsa bir daha 31 levele ulaşamayacağından quest tetiklenmeyecektir.quest deneme_questi begin # deneme_questi başlangıç. state start begin # başlama şartı. when login or levelup with pc.get_level() >= 31 begin # 31 lv ulaşma şartı. sizin kodlarınız. end # when şartının sonu. end # şart sonu. end # quest sonu.
Oyuncunun belirli haritaya ışınlanması ile tetiklenen quest taslağı.
lua:MAP_NUMARASI belirlediğiniz haritanın numarası server tarafında, map indexinden bakabilirsiniz.quest deneme_questi begin # deneme_questi başlangıç. state start begin # başlama şartı. when login with pc.get_map_index() == MAP_NUMARASI begin # Belirlenen haritaya bağlanma şartı. end # when şart sonu. end # başlama şartı sonu. end # quest sonu.
Temel Kodlar
Taslakları basitçe anlattık sırada bu taslakların içini nasıl dolduracağız onu öğrenmek kaldı. Direkt olarak quest fonksiyonlarına ve daha detaylı sistemlere girmeden önce basit kodları kullanarak birkaç quest yazmaya çalışalım. Size önerim verdiğim örnekleri kendi sisteminizde test edin hem pratik olur hem daha iyi pekiştirirsiniz
say
Ekrana yazı basmak için kullanılır diyerek geçebiliriz.
say ile her satıra 49 karakter sığdırabilirsiniz yoksa aşağıya kayar.
lua:quest deneme_say_questi begin state start begin when NPC_VNUM.chat."deneme_say_questi" say_title("BASLIK") say("MMOZirve Forumu bi harika dostum...") end end endİşleri biraz ilerletelim oyuncu için seçim hazırlayalım.
lua:quest deneme_say_questi begin state start begin when NPC_NUMARASI.chat."deneme_say_questi" say_title("BASLIK") say("MMOZirve bir harika dostum") say("Sencede öyle değil mi? ") local secim=select("Evet", "Hayır", "Tabe la.") # Seçimler end end endİyi güzelde seçim yaptırdık ancak ne işe yaradı elbette hiçbir işe yaramadı şimdi yapılan seçimlere göre durumlar ayarlıyalım.
lua:quest deneme_say_questi begin state start begin when NPC_VNUM.chat."deneme_say_questi" say_title("BASLIK") say("MMOZirve bir harika dostum") say("Sencede öyle değil mi ? ") local secim=select("Evet", "Hayır", "Tabe la.") if secim == 1 then say_title("Birinci Seçim") say("Afferim düzgün birine benziyorsun.") elseif secim == 2 then say_title("İkinci Seçim") say("Ne demek la, kaybol gözüm görmesin.") elseif choix == 3 then say_title("Üçüncü Seçim") say("Yes science bitc** Mr.White") end end end endYapılan seçimlere göre birşeyler yazdırdık elbette bir işe yaramadı ancak mantığı kavramanıza yardımcı olmuştur. Bir sonraki öğretici konuda görüşmek üzere.
Ben kaçar...![]()
"Geriye Dönük Giriş: Quest Nedir, Nasıl Yazılır, Nasıl Eklenir?"
Üye
Katılım31 Oca 2026
Konular10
Mesajlar57
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
Üye
Katılım11 Nis 2026
Konular4
Mesajlar57
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
Üye
Katılım12 Ara 2025
Konular1
Mesajlar34
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
Üye
Katılım09 Mar 2026
Konular4
Mesajlar73
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
Üye
Katılım25 Mar 2026
Konular5
Mesajlar32
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
04.05.2026 22:55
#13
Güzel bir bilgilendirici konu, keşke biraz daha örnekler gösterseydiniz, çoook daha iyi olurdu.
Yinede bilgilendirici bir konu için teşekkürler, Sayın Moderatörüm.
Yinede bilgilendirici bir konu için teşekkürler, Sayın Moderatörüm.
Üye
Katılım25 Oca 2026
Konular13
Mesajlar65
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
Üye
Katılım26 Mar 2026
Konular11
Mesajlar85
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
Bu konuyu görüntüleyenler
1 misafir
Cevap yazmak için giriş yapın.
Benzer Konular
18 cevap
2K görüntüleme
19 cevap
2K görüntüleme
11 cevap
1.9K görüntüleme
16 cevap
1.9K görüntüleme
6 cevap
1.9K görüntüleme




Nasıl Quest Eklenir ?