Ü
Üye silindi 505
Quest, kelime anlamı görev, misyon demek. metin2 oyununda quest uzantısı kullanılarak çeşitli şeyler yapılmış ve bu dosyaların yazılımında kullanılan dil "lua"dır. Bu da demek oluyor ki işini bilen biri lua öğrenip istedi lua komutunu metin2 içinde kullanabilir. Çoğu kişi bu dilde Türkçe'nin kullanılamadığını sanıyor ama basit bir yöntemi var. Şimdilik Türkçe karakter kullanmadan yazın ya da diğer forumlardan nasıl yapıldığını araştırın.
Bu rehberi okumaya devam etmeden önce videolu quest derslerimizin olduğunu da belirtmek istiyorum. Yazılı rehber yerine videolu rehber arıyorsanız buradan izleyebilirsiniz;
Öncelikle kullanacağınız program notepad++ olsun çok kullanışlıdır. Hata yapma riskinizi en aza indirir. Hatta Eğer programlama dillerine girip "lua" yı seçerseniz renklendirerek yazacağından hatanızı bile çok kolay görebilirsiniz.
Öncelikle Quest uzantılı dosya yapmayı anlatayım bilmeyen arkadaşlar vardır. Öncelikle herhangi bir klasöre girip orada sol üstte bulunan düzenle'ye tıklayın sonra klasör seçeneklerine girip orada bilinen dosyalar için uzantıları gizle seçeneğindeki işareti kaldırın. Şimdi notepad++ programı ya da başka bir program ile (normal notepad bile olur) questi yazmaya başlıyorsunuz. Diyelimki questi yazdık bitirdik.
Bu queste bu şekilde başladıysak dosyamızın adı xxx.quest olmalı. Uzantısını .quest yapıyoruz. Bu questi filezillada usr/game/share/locale/turkey/quest içerisine atıyoruz. Sonra putty i açıp login oluyoruz.
yazıyoruz.
yazıyoruz ve oraya bizim questimizi yazıp yani en alta xxx.quest yazıp kaydedip çıkıyoruz. daha sonra ./qc xxx.quest yazıp questimizi object dosyalarına işletiyoruz.
Şunu söyleyeyim object dosyalarının içine attığınız hiç bir dosya sağlıklı değil. Çünkü object klasörünün içindeki şeyler sizin sh make.sh çektikten sonra oraya yazılır. Yani object dosyasının içine attığınız dosyaların questi yoksa her sh make.sh çektiğinizde o dosya silinir. Yerine questte ne varsa o yazılır. Bu yüzden ne yapacaksanız quest olarak yapın.
Ders Listesi;
ardından
başlanır. Şimdi bu state çok güzel bir şey. quest içinde bu state i değiştirerek farklı şeyler yapabilirsiniz. Mesela bir görevi 2. aşamaya geçirebilirsiniz. Neyse onlar ilerki konular.
quest ve state başlangıcımızı yaptıktan sonra daha iç kısımlara giriyoruz. Bundan sonra when ve function komutu kullanabiliriz. Peki bu komutlar ne işe yarar?
when komutu adı üstünde yazdığınız questin ne zaman ya da ne yapıldığı zaman işleyeceğini söyler. Örnek vermek gerekirse;
20000 kodlu itemi kullandığınızda quest başlayacak demektir. when komutunun çeşitli şekillerde kullanımı var ona da değineceğim ileride.
function komutu ile kendi komutunuzu yapabilirsiniz. Bu biraz daha ileri seviyelerde. İşinizi çok kolaylaştırabilecek bir komut fakat bu olmadan da bir çok şey yapılabilir. O yüzden şimdilik atlıyorum.
Şimdi işin püf noktalarından birine geldik. Kullandığınız her quest, state, when ve if komutu için bir "end" kullanmanız gerekir. Kısaca bir örnek verecek olursak;
Kod (Lua):
Bu rehberi okumaya devam etmeden önce videolu quest derslerimizin olduğunu da belirtmek istiyorum. Yazılı rehber yerine videolu rehber arıyorsanız buradan izleyebilirsiniz;
Öncelikle kullanacağınız program notepad++ olsun çok kullanışlıdır. Hata yapma riskinizi en aza indirir. Hatta Eğer programlama dillerine girip "lua" yı seçerseniz renklendirerek yazacağından hatanızı bile çok kolay görebilirsiniz.
Öncelikle Quest uzantılı dosya yapmayı anlatayım bilmeyen arkadaşlar vardır. Öncelikle herhangi bir klasöre girip orada sol üstte bulunan düzenle'ye tıklayın sonra klasör seçeneklerine girip orada bilinen dosyalar için uzantıları gizle seçeneğindeki işareti kaldırın. Şimdi notepad++ programı ya da başka bir program ile (normal notepad bile olur) questi yazmaya başlıyorsunuz. Diyelimki questi yazdık bitirdik.
Kod:
İçeriği görebilmek için Uye olmanız gerekiyor.
Bu queste bu şekilde başladıysak dosyamızın adı xxx.quest olmalı. Uzantısını .quest yapıyoruz. Bu questi filezillada usr/game/share/locale/turkey/quest içerisine atıyoruz. Sonra putty i açıp login oluyoruz.
Kod:
İçeriği görebilmek için Uye olmanız gerekiyor.
yazıyoruz.
Kod:
İçeriği görebilmek için Uye olmanız gerekiyor.
yazıyoruz ve oraya bizim questimizi yazıp yani en alta xxx.quest yazıp kaydedip çıkıyoruz. daha sonra ./qc xxx.quest yazıp questimizi object dosyalarına işletiyoruz.
Şunu söyleyeyim object dosyalarının içine attığınız hiç bir dosya sağlıklı değil. Çünkü object klasörünün içindeki şeyler sizin sh make.sh çektikten sonra oraya yazılır. Yani object dosyasının içine attığınız dosyaların questi yoksa her sh make.sh çektiğinizde o dosya silinir. Yerine questte ne varsa o yazılır. Bu yüzden ne yapacaksanız quest olarak yapın.
Ders Listesi;
- Quest Yazma Dersleri 1. post
Kod:
İçeriği görebilmek için Uye olmanız gerekiyor.
ardından
Kod:
İçeriği görebilmek için Uye olmanız gerekiyor.
başlanır. Şimdi bu state çok güzel bir şey. quest içinde bu state i değiştirerek farklı şeyler yapabilirsiniz. Mesela bir görevi 2. aşamaya geçirebilirsiniz. Neyse onlar ilerki konular.
quest ve state başlangıcımızı yaptıktan sonra daha iç kısımlara giriyoruz. Bundan sonra when ve function komutu kullanabiliriz. Peki bu komutlar ne işe yarar?
when komutu adı üstünde yazdığınız questin ne zaman ya da ne yapıldığı zaman işleyeceğini söyler. Örnek vermek gerekirse;
Kod:
İçeriği görebilmek için Uye olmanız gerekiyor.
20000 kodlu itemi kullandığınızda quest başlayacak demektir. when komutunun çeşitli şekillerde kullanımı var ona da değineceğim ileride.
function komutu ile kendi komutunuzu yapabilirsiniz. Bu biraz daha ileri seviyelerde. İşinizi çok kolaylaştırabilecek bir komut fakat bu olmadan da bir çok şey yapılabilir. O yüzden şimdilik atlıyorum.
Şimdi işin püf noktalarından birine geldik. Kullandığınız her quest, state, when ve if komutu için bir "end" kullanmanız gerekir. Kısaca bir örnek verecek olursak;
Kod (Lua):
- quest ornek begin
- state start begin
- when 2000.use begin
- say("ornek questtir.")
- end
- end
- end
tuşunu kullanarak içeri doğru piramitler oluşturarak yazarsanız hangi komut için end koyduğunuzu bilirsiniz.
Burayı da anladıysak if komutuna geçiyoruz. if kelime anlamı ingilizcede çoğunuzun bildiği gibi "eğer" demektir. Yani anlayacağınız üzere queste herhangi bir şart ekleminizi sağlar ve yine her kullandığınız if komutunu da bir "end" ile sonlandırmak zorundasınız. Örnek verecek olursak şöyle olmassa olmazlarımızla başlıyoruz. Bizim muhteşem üçlümüz quest, state ve when.
Kod (Lua):
if pc.level() == 86 then diyerek giren kişi eğer 86. seviyedeyse adama 12019 kodlu itemi ver demek istedim. Bu quest oyuncunun her oyuna girişinde ona 1 adet 12019 kodlu itemi vermenizi sağlar. Ve önemli nokta olarak 4 tane end komutu kullandım. quest, state, when ve if komutu için.
Şimdi diğer bir komut else.
else demek öyle değilse demektir. Yukarıda yazdığım son queste dikkat ederseniz sadece 86 level için 12019 kodlu itemi verdim. Peki diğerleri nolacak? Onlar içinde else komutunu kullanabilrim ve bu else komutu if e bağlı olarak kullanılır. if ile bi şart belirlersiniz ve bu şartın dışında kalanlar için de else komutunu kullanırsınız. else komutu end gerektirmez. if için koyduğunuz end kodu else için de geçerlidir. Örnek verecek olursak:
Kod (Lua):
Şimdi yine if e bağlı olarak kullanılan elseif komutuna geldik. elseif komutu if ile belirlediğiniz bir şartın dışındaki durumları sınıflandırmak için kullanılabilir. elseif için de ayrı bir end ile bitirmenize gerek yoktur. Örnekle daha güzel anlayacağınızı düşünüyorum.
Kod (Lua):
Ne yaptık peki? 86. seviye ile login olan kişiye item verdik. 85. ve 81. seviye ile login olan kişinin ise ekranında yazı çıkmasını sağladık. Umarım daha açıklayıcı olmuştur. Peki yukarıda son yazmış olduğum questi başka nasıl yazabilirdik? elseif kullanmadan da yazabilir miydik? Evet yazardık. Her şart için ayrı if kullanırdık.
Şu şekilde yapalım:
Kod (Lua):
Devam edelim. Şimdi when ile ne yapabiliriz ona bi bakalım. whenle kullanılabilecek komutların bazıları şunlardır: login, logout, levelup, use, click, chat, letter, button, info, enter, kill. Benim aklıma gelenler bunlar. Şimdi bunlarla neler yapabileceğimize bir bakalım.
login: Oyuna giriş demek. Karakter atma da olabilir.
logout: Oyundan çıkış demek. Mesela kuleden çıkmak için karakter attığınızda sizi dışarı atması için bu komut kullanılmıştır.
levelup: Oyuncu level aldığında questin çalışmasını sağlar.
use: Bir iteme sağ tıkladığınızda questin çalışmasını sağlar. Önemli bir nokta: Her item çalışmaz. Navicattan girip type 18 yapmanız gerekir ki item quest itemi olsun.
click: Bir npcye tıkladığınızda direk konuşmaya başlar. Şehir bekçisindeki ya da lonca demircilerindeki gibi.
chat: Bir npcye tıkladığınızda çeşitli seçeneklerle karşılaşırsınız. Mesela Demirciye tıkladığınızdaki gibi.
letter: Görev yazma da kullanılan bir komut. Ayrıntısına ileride giricem.
button: Görev butonu ile ilgili.(ekranın sol tarafında çıkan mektuplar)
info: "n" harfine bastığınızda karşınıza çıkan seçeneklerle ilgili.
enter: Bunu ben de tam bilmiyorum hiç kullanmadım. Yani gerek duymadım.
kill: Bir mobu öldürdüğünüzde questin çalışmasını sağlar.
Bu komutları mantık çerçevesinde beraber kullanabiliriz. Yani bunları or ve and ile birbirine bağlayabiliriz. Örnek verecek olursak.
Kod (Lua):
Diğer komutlarımıza örnek verecek olursak:
Kod (Lua):
Kod (Lua):
Kod (Lua):
Kod (Lua):
Sonraki aşamaya geçelim. Şimdi de "local" komutunu inceleyelim. local'in kelime anlamı "yerel" demektir. Bu komut sizin herhangi bir kelimeye ya da sayıya bir anlam yüklemenizi sağlar. Örnekle açıklayacak olursak:
Kod (Lua):
"naber" kelimesini local olarak yani sadece bu quest için seçeneklere atadık. naber demek artık bu questte bizim için seçtiğimiz şey demek.
Yani if naber == 1 then diyerek select() komutu ile yazdığımız seçeneklerden 1. sini seçersek questin ne yapacağını belirledik.
return demek adı üstünde geri demek. Burada şu püf nokta var. Eğer ben bu questi sadece naber == 2 ye kadar yazarsam, 3. seçeneğe tıkladığımda hiç bişey olmayacaktır. Yani ben yukarıdaki questi şöyle yazsam:
Kod (Lua):
[HIDEREACTSCORE=1][/HIDEREACTSCORE]
Burayı da anladıysak if komutuna geçiyoruz. if kelime anlamı ingilizcede çoğunuzun bildiği gibi "eğer" demektir. Yani anlayacağınız üzere queste herhangi bir şart ekleminizi sağlar ve yine her kullandığınız if komutunu da bir "end" ile sonlandırmak zorundasınız. Örnek verecek olursak şöyle olmassa olmazlarımızla başlıyoruz. Bizim muhteşem üçlümüz quest, state ve when.
Kod (Lua):
- quest ornek_quest begin
- state start begin
- when login begin
- if pc.level() == 86 then
- pc.give_item2("12019",1)
- end
- end
- end
- end
if pc.level() == 86 then diyerek giren kişi eğer 86. seviyedeyse adama 12019 kodlu itemi ver demek istedim. Bu quest oyuncunun her oyuna girişinde ona 1 adet 12019 kodlu itemi vermenizi sağlar. Ve önemli nokta olarak 4 tane end komutu kullandım. quest, state, when ve if komutu için.
Şimdi diğer bir komut else.
else demek öyle değilse demektir. Yukarıda yazdığım son queste dikkat ederseniz sadece 86 level için 12019 kodlu itemi verdim. Peki diğerleri nolacak? Onlar içinde else komutunu kullanabilrim ve bu else komutu if e bağlı olarak kullanılır. if ile bi şart belirlersiniz ve bu şartın dışında kalanlar için de else komutunu kullanırsınız. else komutu end gerektirmez. if için koyduğunuz end kodu else için de geçerlidir. Örnek verecek olursak:
Kod (Lua):
- quest ornek_quest begin
- state start begin
- when login begin
- if pc.level() == 86 then
- pc.give_item2("12019",1)
- else
- say("86. seviyede olmadığın için herhangi bir eşya kazanamadın.")
- end
- end
- end
- end
Şimdi yine if e bağlı olarak kullanılan elseif komutuna geldik. elseif komutu if ile belirlediğiniz bir şartın dışındaki durumları sınıflandırmak için kullanılabilir. elseif için de ayrı bir end ile bitirmenize gerek yoktur. Örnekle daha güzel anlayacağınızı düşünüyorum.
Kod (Lua):
- quest ornek_quest begin
- state start begin
- when login begin
- if pc.level() == 86 then
- pc.give_item2("12019",1)
- elseif pc.level() == 85 then
- say("Sen 85. seviyesin.")
- elseif pc.level() == 81 then
- say("Sen 81. seviyesin.")
- end
- end
- end
- end
Ne yaptık peki? 86. seviye ile login olan kişiye item verdik. 85. ve 81. seviye ile login olan kişinin ise ekranında yazı çıkmasını sağladık. Umarım daha açıklayıcı olmuştur. Peki yukarıda son yazmış olduğum questi başka nasıl yazabilirdik? elseif kullanmadan da yazabilir miydik? Evet yazardık. Her şart için ayrı if kullanırdık.
Şu şekilde yapalım:
Kod (Lua):
- quest ornek_quest begin
- state start begin
- when login begin
- if pc.level() == 86 then
- pc.give_item2("12019",1)
- end
- if pc.level() == 85 then
- say("Sen 85. seviyesin.")
- end
- if pc.level() == 81 then
- say("Sen 81. seviyesin.")
- end
- end
- end
- end
Devam edelim. Şimdi when ile ne yapabiliriz ona bi bakalım. whenle kullanılabilecek komutların bazıları şunlardır: login, logout, levelup, use, click, chat, letter, button, info, enter, kill. Benim aklıma gelenler bunlar. Şimdi bunlarla neler yapabileceğimize bir bakalım.
login: Oyuna giriş demek. Karakter atma da olabilir.
logout: Oyundan çıkış demek. Mesela kuleden çıkmak için karakter attığınızda sizi dışarı atması için bu komut kullanılmıştır.
levelup: Oyuncu level aldığında questin çalışmasını sağlar.
use: Bir iteme sağ tıkladığınızda questin çalışmasını sağlar. Önemli bir nokta: Her item çalışmaz. Navicattan girip type 18 yapmanız gerekir ki item quest itemi olsun.
click: Bir npcye tıkladığınızda direk konuşmaya başlar. Şehir bekçisindeki ya da lonca demircilerindeki gibi.
chat: Bir npcye tıkladığınızda çeşitli seçeneklerle karşılaşırsınız. Mesela Demirciye tıkladığınızdaki gibi.
letter: Görev yazma da kullanılan bir komut. Ayrıntısına ileride giricem.
button: Görev butonu ile ilgili.(ekranın sol tarafında çıkan mektuplar)
info: "n" harfine bastığınızda karşınıza çıkan seçeneklerle ilgili.
enter: Bunu ben de tam bilmiyorum hiç kullanmadım. Yani gerek duymadım.
kill: Bir mobu öldürdüğünüzde questin çalışmasını sağlar.
Bu komutları mantık çerçevesinde beraber kullanabiliriz. Yani bunları or ve and ile birbirine bağlayabiliriz. Örnek verecek olursak.
Kod (Lua):
- quest ornek_quest begin
- state start begin
- when login or logout begin
- pc.remove_item("11111",5)
- end
- end
- end
Diğer komutlarımıza örnek verecek olursak:
Kod (Lua):
- quest ornek_quest begin
- state start begin
- when 40004.use begin
- pc.warp(111100,2222200)
- end
- end
- end
Kod (Lua):
- quest ornek_quest begin
- state start begin
- when 20000.chat."Quest yazıyoruz." begin
- say("Oyle mi? kolay gelsin o zaman.")
- end
- end
- end
Kod (Lua):
- quest ornek_quest begin
- state start begin
- when 20000.click begin
- say("Questte yazarmış bak bak bak.")
- end
- end
- end
Kod (Lua):
- quest ornek_quest begin
- state start begin
- when 1093.kill begin
- notice_all("Adamın biri ne azraili öldürdü!")
- end
- end
- end
Sonraki aşamaya geçelim. Şimdi de "local" komutunu inceleyelim. local'in kelime anlamı "yerel" demektir. Bu komut sizin herhangi bir kelimeye ya da sayıya bir anlam yüklemenizi sağlar. Örnekle açıklayacak olursak:
Kod (Lua):
- quest ornek_quest begin
- state start begin
- when 40002.use begin
- say("Nereye gidelim?")
- local naber = select("1.köy","2. köy","vazgec")
- if naber == 1 then
- pc.warp(111222,4444333)
- elseif naber == 2 then
- pc.warp(36666,55555)
- elseif naber == 3 then
- return
- end
- end
- end
- end
"naber" kelimesini local olarak yani sadece bu quest için seçeneklere atadık. naber demek artık bu questte bizim için seçtiğimiz şey demek.
Yani if naber == 1 then diyerek select() komutu ile yazdığımız seçeneklerden 1. sini seçersek questin ne yapacağını belirledik.
return demek adı üstünde geri demek. Burada şu püf nokta var. Eğer ben bu questi sadece naber == 2 ye kadar yazarsam, 3. seçeneğe tıkladığımda hiç bişey olmayacaktır. Yani ben yukarıdaki questi şöyle yazsam:
Kod (Lua):
- quest ornek_quest begin
- state start begin
- when 40002.use begin
- say("Nereye gidelim?")
- local naber = select("1.köy","2. köy","vazgec")
- if naber == 1 then
- pc.warp(111222,4444333)
- elseif naber == 2 then
- pc.warp(36666,55555)
- end
- end
- end
- end
[HIDEREACTSCORE=1][/HIDEREACTSCORE]