zendor2 1
zendor2
Bvural41 1
Bvural41
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Almira2 1
Almira2
romegames 1
romegames
D 1
delimuratt
melankolıa18 1
melankolıa18
shrpnl 1
shrpnl
Fethi Polat 1
Fethi Polat
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Quest Yazma Dersleri 3

sekoceza

Level 6
TM Üye
Üye
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 20 Gün
Başarım Puanı
132
MmoLira
18
DevLira
0
Ticaret - 0%
0   0   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 timer var. 3 çeşit timer vardır.

Kod:
timer()
server_timer()
loop_timer()

Bunlar adı üstünde zamanlayıcılar. Yani bir şey yaparsınız. Sonuna timer koyarsınız. Belirlediğiniz süre geçtikten sonra istediğiniz bir şeyi yapar. Peki neden 3 çeşit timer var? Farkları ne?

Kod:
timer(): normal bir zamanlayıcıdır. Ek bir fonksiyonu yoktur.
server_timer(): Bu da timer() komutu ile aynı şeyi yapar. Ama bu komutla yine güzel bir komut olan get_server_timer_arg() kullanılabilir. Ayrıntısından birazdan bahsedeceğim.
loop_timer(): Adı üstünde bir döngü şeklindedir. Bir süre belirlersiniz ve bu timer sürekli kendini tekrarlar. Şimdi örneklerle daha kolay anlayacaksınız.

Ayrıca timerlara başladığımıza göre artık bir quest içinde birden fazla when komutu kullanımını da bu örneklerle açıklayabiliriz.

Önce bir queste başlayalım.

Kod:
quest ornek_quest begin
   state start begin
      when login with not pc.is_gm() and pc.get_map_index() == 79 and pc.getqf("lider") == 1 begin
      timer("disari_yolla",600)
      notice_in_map("10 dakika sonra dışarı ışınlanacaksınız.")
      end

      when disari_yolla.timer begin
      warp_all_to_village(79)
      end
   end
end

Buradaki "lider" e takılmayın onu kafadan salladım.

Şimdi bu questte bir timer kullandım. Ayrıca 2 defa when kullandım. Bu nasıl oldu? Şimidye kadar hep bir defa when kullandık.
Arkadaşlar bir quest içinde when i de state i de istediğiniz kadar kullanabilirsiniz. Yeter ki bir önceki when i ya da state i end komutu ile bitirin. whenin kullanımı basittir ama state i sonlandırıp yeni bir state başlatmak için araya bağlantıyı sağlayacak komutu girmek lazım. Neyse şimdi state i geçelim bizim işimiz when ile.

Bu end olayı şöyledir. ilk koyduğunuz end son kullandığınız komutu bitirir. Yani ben burda ne kullandım? quest, state, when. ilk koyduğum end son koyduğum when i bitirdi. Eğerki ben bu whenden sonra bir de if kullansaydım, bu when kısmını bitirmem için 2 tane end kullanmam gerekecekti. Tahmin edersiniz ki state'i bitirmek için de bir end daha koymak gerekecekti.

Bu quesste ne yaptık? Bir kişi map index i 79 olan bir haritaya girdi ve bu kişinin qf("lider")'i 1. Şartları sağladığını düşünüyoruz. Bunlar hikaye kısmı. Her neyse oyuncu haritaya giriş yaptı ve haritadaki tüm oyuncuları 10 dakika sonra dışarı atacağım diye uyardım.(notice_in_map komutu) Sonra 10 dakika dolunca da dışarı yollamak (burada tüm oyuncuları köye yollama kodunu kullandım) için when disari_yolla.timer begin le yeni bir when başlattım. Bu questin bir sakıncası var. Hazır yeri gelmişken ona değinelim. Burada haritaya giriş yapan oyuncu eğer bu haritadan timer dolmadan çıkarsa nolur? timer işlemez. Bunun önüne de şu şekilde geçeriz;


Kod:
quest ornek_quest begin
   state start begin
      when login with not pc.is_gm() and pc.get_map_index() == 79 and pc.getqf("lider") == 1 begin
      server_timer("disari_yolla",600,get_server_timer_arg())
      notice_in_map("10 dakika sonra dışarı ışınlanacaksınız.")
      end

      when disari_yolla.server_timer begin
      warp_all_to_village(79)
      end
   end
end

Yukarıdaki gibi server_timer kullanırsak oyuncu o haritadan çıksa bile orada timer işlemeye devam eder. Bir de loop_timer a örnek verip timerları bitirelim.


Kod:
quest ornek_quest begin
   state start begin
      when login with pc.is_gm() begin
      cleartimer("duyuru")
      loop_timer("duyuru",600)
      end
      
      when duyuru.timer begin
      notice_all("Bu oyun bilmem ne bilişime aittir.")
      end
   end
end


Bu quest ne yapar? Oyuna bir gm girdiğinde işlemeye başlar. Peki neden cleartimer koydum? Login komutundan dolayı. Eğer bu komutu koymazsam gm her oyuna girdiğinde ya da bi yere ışınlandığında bu timer tekrar tekrar başlayacak. Bu da sürekli saçma sapan zamanlarda duyuru geçmesine neden olabilir. Benim yaptğım şekilde gm oyuna her girdiğinde bir önceki timer sıfırlanıp tekrar timer başlatılır. Bu quest 10 dakikada bir duyuru geçer.
 
Timer ch düşmesine neden olurmu ?
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst