- Katılım
- 21 Kas 2009
- Konular
- 234
- Mesajlar
- 1,116
- Reaksiyon Skoru
- 150
- Altın Konu
- 0
- TM Yaşı
- 16 Yıl 6 Ay 25 Gün
- Başarım Puanı
- 132
- MmoLira
- 18
- DevLira
- 0
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
Sırada kısaca "not" komutu var. Bu komutta işimizi oldukça kolaylaştıracak. when ve if komutu ile birlikte kullanılabilir. Mesela şöyle bir örnek verelim. Bir görev yazdınız ve bunun gm karakterlere gelmesini istemiyorsunuz. Şu şekilde yaparsınız;
Yukarıda gördüğünüz gibi "not" komutunu and veya with ile beraber kullanırız genelde. "not" Türkçe karşılığı "değil" kelimesine karşılık gelir. Yani yukarıdaki quest şunu yapar. 90. seviyede olup gm olmayan kişilere Gorev adında bir quest butonu gidecek. Bu tür komutlar yazdığınız questlerdeki bugları gidermenize yardımcı olacak. Quest yazmaya başladığınızda ne demek istediğimi daha rahat anlayacaksınız.
Sırada pc.get_name() gibi komutları say(""), notice("") ... gibi komutlar içinde nasıl kullanacağımıza bakalım. Bu tür komutları beraber kullanmak istiyorsak "..pc.get_name().." şeklinde yazmamız gerekir. Şimdi bir örnekle açıklayalım.
Yukarıdaki quest, indexi 66 olan bir haritada azrail öldürüldüğünde "xxx, xx. seviyede Azrail'i öldürdü!" şeklinde duyuru geçmesini sağlayacak. Bunun sadece oyuncuya gitmesini istersek "notice_all" yerine "notice" kullanırız. Ya da duyuru şeklinde çıkmasını istemiyorsak "chat" kullanırız. Bildiğim tüm kodları ileride tek tek açıklayacağım. Şimdilik bir questin iskeleti nasıl oluşturulur onu öğreniyoruz.
Aynı şeyi kendimiz local kullanarak da yapabiliriz. Yine işimizi kolaylaştıran bir şeyden bahsedeyim. Daha sonra input() komutuna geçeceğim.
Yukarıdaki quest için "isim" ve "level" kelimelerine, local komutunu kullanarak, bazı komutları atadım. Bu questin daha da uzadığını düşünün. Her seferinde komut yazmaktansa bu belirlediğim kelimeleri kullanmam bana zaman kazandıracaktır. Ayrıca with game.get_event_flag("harita_acik") == 1 kullandım. Bunun bana ne yararı var? Eğer gm karakterimle /e harita_acik 1 yazmadıysam, kimse 20000 numaralı npcye tıkladığında "İçeri girmek istiyorum." diye bir sçenek göremeyecek. Bu da oyun içinde size bazı haritaları istediğiniz zaman kapatıp açma kolaylığını sağlar.
input() komutu ile devam ediyoruz. Bu komut ruh taşı questindeki gibi ya da ejderha odasına girerken şifre yazdığınız kutular için kullanılır. Peki kullanımı nasıldır? Örnekle açıklamaya çalışacağım.
input() komutundan sonra da end kullanmıyoruz. Kullanımı yukarıdaki gibidir. Ne yaptık? "duyuru" kelimesine input() komutunu atadık ve oyuncunun yazdığı her şey bu sayede "duyuru" kelimesi üzerine kaydedildi. Daha önce yaptığımız gibi "..duyuru.." kullanarak oyuncunun yazdığı şeyleri tüm oyunculara duyurduk.
Geldik 1 quest içinde birden fazla state kullanmaya. Öncelikle bu ne işe yarar? TR deki görevleri düşünün. Uriel'e bir şey götürüyorsunuz sonra size bir şey öldürmenizi söylüyor o dediğini de yapıyorsunuz bu sefer başka bir şey istiyor. Bunları nasıl yapacağımızı küçük örneklerle göstereceğim. Öncelikle hatırlarsanız bir quest içinde birden fazla when kullanırken son kullandığımız when'i end komutu ile bitirip yeni bir when'e başlıyorduk. Burada da aynı şeyi yapacağız fakat son state'te bir komut kullanıp 2. state'i çalıştırmamız lazım. Örnek verecek olursak;
Yukarıda gördüğünüz gibi şimdiye kadarki en uzun questimizi yazdık. 4 tane state kullandık. Basit bir canavar öldürme questi oldu. Stateleri bağlamak için setstate() komutunu kullandık. Bu komut bir önceki state içinde yadığınız her şeyi devredışı bırakır. Yani state start begin yazdınız içinde atıyorum bir npcyi konuşturdunuz ve ardına setstate() komutu kullanarak diğer bir state'e geçirdiniz. Artık O kişi az önce konuştuğu npcye tekrar tıkladığında aynı şeyleri görmeyecek. Yukarıda ne yaptık? İlk önce 20000 numaralı npc ile konuştuk. Bize görev verdi. Öldürdüğü mob sayısını qf komutuyla kayıt ettim. Her kestiği mob için bir ekleyecek şekilde. Dikkat edin pc.getqf("oldurdum") + 1 yaptım. Bu demek oluyor ki her öldürdüğü mobdan sonra bir önceki qf nin üzerine 1 ekleyip kaydedecek. Bu 19 a kadar böyle devam edecek. 19 olduktan sonra 20 yaptığında hemen diğer bir state'e geçmesi için setstate() kullandım ve oyuncunun ekranın solunda bir send_letter() komutu ile bir quest butonu çıkmasını sağladım. Ayrıca Bu quest butonuna tıkladığında da(when button or info begin) bilgi vermesini sağladım. Npc'ye gittiğinde ise Ödülünü verdim ve quest butonunu clear_letter() ile sildim. Sonra görev bug'a görmesin diye yeni bir state e geçirdim.(setstate(complete)) Bu state'te hiç bir şey yapmadan questi bitirdim. Artık tekrar görev gelmeyecek. Peki ben bu görevin sürekli baştan yapılmasını istiyorsam ne yaparım? En sondaki setstate(complete) yazdığım yeri setstate(start) olarak yazarım. İlk state tekrar çalışır.
Arkadaşlar state'ler mysql quest tablosuna kaydedilir. Siz quest tablosunu boşaltmadığınız sürece statelerde kayma olmaz başa sarmaz.
Şimdi ise state ile 2 quest arasında bağlantı kurmayı gösterelim. Bunu set_quest_state("questadı","stateadı") şeklinde yapıcaz. Biyolog görevlerini hatırlayın. Seviyeniz 40 ı geçse bile 30 görevini bitirmeden 40 görevine başlayamazsınız. Bunu nasıl yaparız? Örnek verelim. İlk önce 1. questimizi yazalım.
Bu quest ile 2. questimiz olan ornek_quest2'yi başlatıyoruz. Bir kere bir questin ilk state'i start ile başlamak zorunda. İyi de ben 2. questim için yapacaklarımı start içinde yazarsam bu kullandığım komut bir işe yaramayacak. Nasıl yapacağım? Şu şekilde;
Ne yaptık? state start'a başlar başlamaz hemen end komutu ile sonlandırdık. Starttan sonra setstate(run) yazmadığım için 2. state çalışmayacaktır. Ama 1. questimizde set_quest_state("ornek_quest2","run") yazdığımız için 2493 mobunu her öldürdüğümüzde bu 2. questimiz çalışacaktır. 2. quest herhangi bir görev questi değil uzatmak istemedim örnek olsun diye hemen kısaca sonlandırdım. Onu uzatabilirsiniz. Şimdilik bu kadar.
Kod:
quest ornek_quest begin
state start begin
when login or levelup with pc.level() == 90 and not pc.is_gm() begin
send_letter("Gorev")
end
end
end
Yukarıda gördüğünüz gibi "not" komutunu and veya with ile beraber kullanırız genelde. "not" Türkçe karşılığı "değil" kelimesine karşılık gelir. Yani yukarıdaki quest şunu yapar. 90. seviyede olup gm olmayan kişilere Gorev adında bir quest butonu gidecek. Bu tür komutlar yazdığınız questlerdeki bugları gidermenize yardımcı olacak. Quest yazmaya başladığınızda ne demek istediğimi daha rahat anlayacaksınız.
Sırada pc.get_name() gibi komutları say(""), notice("") ... gibi komutlar içinde nasıl kullanacağımıza bakalım. Bu tür komutları beraber kullanmak istiyorsak "..pc.get_name().." şeklinde yazmamız gerekir. Şimdi bir örnekle açıklayalım.
Kod:
quest ornek_quest begin
state start begin
when 1093.kill with pc.get_map_index() == 66 begin
notice_all(""..pc.get_name()..", "..pc.get_level()..". seviyede Azrail'i öldürdü!")
end
end
end
Yukarıdaki quest, indexi 66 olan bir haritada azrail öldürüldüğünde "xxx, xx. seviyede Azrail'i öldürdü!" şeklinde duyuru geçmesini sağlayacak. Bunun sadece oyuncuya gitmesini istersek "notice_all" yerine "notice" kullanırız. Ya da duyuru şeklinde çıkmasını istemiyorsak "chat" kullanırız. Bildiğim tüm kodları ileride tek tek açıklayacağım. Şimdilik bir questin iskeleti nasıl oluşturulur onu öğreniyoruz.
Aynı şeyi kendimiz local kullanarak da yapabiliriz. Yine işimizi kolaylaştıran bir şeyden bahsedeyim. Daha sonra input() komutuna geçeceğim.
Kod:
quest ornek_quest begin
state start begin
when 20000.chat."İçeri girmek istiyorum." with game.get_event_flag("harita_acik") == 1 begin
local level = pc.level()
local isim = pc.get_name()
if level >= 90 then
say("Merhaba "..isim..", seni içeriye alabilirim.")
pc.warp(111100,222200)
else
say("Üzgünüm "..isim..". Yeteri kadar güçlü değilsin.")
end
end
end
end
Yukarıdaki quest için "isim" ve "level" kelimelerine, local komutunu kullanarak, bazı komutları atadım. Bu questin daha da uzadığını düşünün. Her seferinde komut yazmaktansa bu belirlediğim kelimeleri kullanmam bana zaman kazandıracaktır. Ayrıca with game.get_event_flag("harita_acik") == 1 kullandım. Bunun bana ne yararı var? Eğer gm karakterimle /e harita_acik 1 yazmadıysam, kimse 20000 numaralı npcye tıkladığında "İçeri girmek istiyorum." diye bir sçenek göremeyecek. Bu da oyun içinde size bazı haritaları istediğiniz zaman kapatıp açma kolaylığını sağlar.
input() komutu ile devam ediyoruz. Bu komut ruh taşı questindeki gibi ya da ejderha odasına girerken şifre yazdığınız kutular için kullanılır. Peki kullanımı nasıldır? Örnekle açıklamaya çalışacağım.
Kod:
quest ornek_quest begin
state start begin
when 40000.use begin
say("Yazdığın yazı tüm imparatorluklarda görülecek.")
say("Aşağıda gördüğün kutuya söylemek istediğini yaz.")
local duyuru = input()
notice_all(""..pc.get_name().." adlı oyuncu şunları söylüyor:")
notice_all(""..duyuru.."")
end
end
end
input() komutundan sonra da end kullanmıyoruz. Kullanımı yukarıdaki gibidir. Ne yaptık? "duyuru" kelimesine input() komutunu atadık ve oyuncunun yazdığı her şey bu sayede "duyuru" kelimesi üzerine kaydedildi. Daha önce yaptığımız gibi "..duyuru.." kullanarak oyuncunun yazdığı şeyleri tüm oyunculara duyurduk.
Geldik 1 quest içinde birden fazla state kullanmaya. Öncelikle bu ne işe yarar? TR deki görevleri düşünün. Uriel'e bir şey götürüyorsunuz sonra size bir şey öldürmenizi söylüyor o dediğini de yapıyorsunuz bu sefer başka bir şey istiyor. Bunları nasıl yapacağımızı küçük örneklerle göstereceğim. Öncelikle hatırlarsanız bir quest içinde birden fazla when kullanırken son kullandığımız when'i end komutu ile bitirip yeni bir when'e başlıyorduk. Burada da aynı şeyi yapacağız fakat son state'te bir komut kullanıp 2. state'i çalıştırmamız lazım. Örnek verecek olursak;
Kod:
quest ornek_quest begin
state start begin
when 20000.chat."Göreve başla" begin
say("Demek göreve başlamak istiyorsun.")
say("Pekala 20 tane xxx canavarı öldür bakalım.")
setstate(oldur)
end
end
state oldur begin
when 2401.kill begin
if pc.getqf("oldurdum") < 19 then
pc.setqf("oldurdum", pc.getqf("oldurdum") + 1)
else,f pc.getqf("oldurdum") == 19 then
pc.setqf("oldurdum",20)
setstate(oldurdum)
end
end
end
state oldurdum begin
when letter begin
send_letter("Görev tamam")
end
when button or info begin
say("20 tane xxx öldürdün.")
say("20000 no'lu npc ye geri dön.")
end
when 20000.chat"Görev tamam" with pc.getqf("oldurdum") >= 20 begin
say("Harika görevi bitirmişsin.")
say("Al bu da ödülün.")
pc.give_item2("xxxx",1)
clear_letter()
setstate(complete)
end
end
state complete begin
end
end
Yukarıda gördüğünüz gibi şimdiye kadarki en uzun questimizi yazdık. 4 tane state kullandık. Basit bir canavar öldürme questi oldu. Stateleri bağlamak için setstate() komutunu kullandık. Bu komut bir önceki state içinde yadığınız her şeyi devredışı bırakır. Yani state start begin yazdınız içinde atıyorum bir npcyi konuşturdunuz ve ardına setstate() komutu kullanarak diğer bir state'e geçirdiniz. Artık O kişi az önce konuştuğu npcye tekrar tıkladığında aynı şeyleri görmeyecek. Yukarıda ne yaptık? İlk önce 20000 numaralı npc ile konuştuk. Bize görev verdi. Öldürdüğü mob sayısını qf komutuyla kayıt ettim. Her kestiği mob için bir ekleyecek şekilde. Dikkat edin pc.getqf("oldurdum") + 1 yaptım. Bu demek oluyor ki her öldürdüğü mobdan sonra bir önceki qf nin üzerine 1 ekleyip kaydedecek. Bu 19 a kadar böyle devam edecek. 19 olduktan sonra 20 yaptığında hemen diğer bir state'e geçmesi için setstate() kullandım ve oyuncunun ekranın solunda bir send_letter() komutu ile bir quest butonu çıkmasını sağladım. Ayrıca Bu quest butonuna tıkladığında da(when button or info begin) bilgi vermesini sağladım. Npc'ye gittiğinde ise Ödülünü verdim ve quest butonunu clear_letter() ile sildim. Sonra görev bug'a görmesin diye yeni bir state e geçirdim.(setstate(complete)) Bu state'te hiç bir şey yapmadan questi bitirdim. Artık tekrar görev gelmeyecek. Peki ben bu görevin sürekli baştan yapılmasını istiyorsam ne yaparım? En sondaki setstate(complete) yazdığım yeri setstate(start) olarak yazarım. İlk state tekrar çalışır.
Arkadaşlar state'ler mysql quest tablosuna kaydedilir. Siz quest tablosunu boşaltmadığınız sürece statelerde kayma olmaz başa sarmaz.
Şimdi ise state ile 2 quest arasında bağlantı kurmayı gösterelim. Bunu set_quest_state("questadı","stateadı") şeklinde yapıcaz. Biyolog görevlerini hatırlayın. Seviyeniz 40 ı geçse bile 30 görevini bitirmeden 40 görevine başlayamazsınız. Bunu nasıl yaparız? Örnek verelim. İlk önce 1. questimizi yazalım.
Kod:
quest ornek_quest begin
state start begin
when 2493.kill begin
set_quest_state("ornek_quest2","run")
end
end
end
Bu quest ile 2. questimiz olan ornek_quest2'yi başlatıyoruz. Bir kere bir questin ilk state'i start ile başlamak zorunda. İyi de ben 2. questim için yapacaklarımı start içinde yazarsam bu kullandığım komut bir işe yaramayacak. Nasıl yapacağım? Şu şekilde;
Kod:
quet ornek_quest2 begin
state start begin
end
state run begin
when 20000.chat."Göreve başla." begin
say("2493 mobunu öldürdüğüne göre artık bu görevi yapabilirsin.")
end
end
end
Ne yaptık? state start'a başlar başlamaz hemen end komutu ile sonlandırdık. Starttan sonra setstate(run) yazmadığım için 2. state çalışmayacaktır. Ama 1. questimizde set_quest_state("ornek_quest2","run") yazdığımız için 2493 mobunu her öldürdüğümüzde bu 2. questimiz çalışacaktır. 2. quest herhangi bir görev questi değil uzatmak istemedim örnek olsun diye hemen kısaca sonlandırdım. Onu uzatabilirsiniz. Şimdilik bu kadar.
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 10
- Görüntüleme
- 328


