Web Sitemizde 32 Kategoride 30 makale yazılmıştır. Bugüne kadar 5105 kez ziyaret edilmiştir!


 

( Merhaba arkadaşlar quest derslerine aşağıdaki bağlantılardan gidebilirsiniz. Dersler birbirinin devamıdır. )

quest DERS 1  GİTMEK İÇİN TIKLA

quest DERS 2  GİTMEK İÇİN TIKLA

quest DERS 3  GİTMEK İÇİN TIKLA

quest DERS 4  GİTMEK İÇİN TIKLA

quest DERS 5  GİTMEK İÇİN TIKLA

 

 

 

 

Merhaba arkadaşlar  quest yazma derslerimize kaldığımız yerden devam ediyoruz :)  Hade başlıyalım .

Sırada timer var. 3 çeşit timer vardır.
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?

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 xbilge.com 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.

 

Devamı ders 4'te ...

 

WWW.XBİLGE.COM

 



Ücretsiz Hosting
Xbilgeye Destek Ol deneme