Sırada timer var. 3 çeşit timer vardır.
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?
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.
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;
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.
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.
Quest Yazma Dersleri 3
Metin2 Lobby olarak, Metin2 quest sistemine odaklanan bu yazı dizimizin 3. bölümüne hoş geldiniz. Bu bölümde,.quest dosyalarının yapısında daha derinlemesine inceleyecek, özellikle Lua script diline dayalı gelişmiş.quest geliştirmeye odaklanacağız. Quest yazımı, Metin2 sunucularında kullanıcı deneyimini zenginleştiren önemli bir özelliktir ve doğru kullanıldığında oyuncuların dikkatini çekebilir.
Quest Dosyası Yapısı ve Temel Bileşenler
Metin2 quest sistemi, genellikle Lua tabanlıdır ve.quest dosyaları sunucu tarafında çalıştırılır. Bu dosyalar, oyuncuların belirli görevleri yerine getirmesiyle tetiklenen etkileşimleri sağlar. Quest sistemini oluşturan temel unsurlar şunlardır:
- Quest başlangıcı (quest begin)
- Quest durumu (state)
- Tetikleyici (trigger)
- NPC etkileşimi
- Ödül sistemi (reward)
Quest Başlatma ve Durum Yönetimi
Her.quest dosyası, 'quest begin' ile başlar ve 'end' ile biter..quest'ler durum tabanlıdır. Yani farklı durumlarda farklı eylemler yapılabilir. Örneğin bir.quest başlatıldığında 'start' durumunda, görev tamamlandığında 'complete' durumuna geçebilir. Bu sayede.quest akışı kontrol edilebilir.
NPC ve Mob Etkileşimleri
Quest sisteminde NPC'ler, görev veren veya görevi teslim alan karakterlerdir..quest scriptleri içinde 'say', 'input', 'select' gibi komutlarla oyuncu ile etkileşim sağlanabilir. Ayrıca bazı.questlerde belirli mobları öldürmek veya belirli eşyaları toplamak gerekebilir. Bu işlemleri.quest içine yazarak kontrolü sağlayabilirsiniz.
Timer ve Flag Kullanımı[/CODE]
Quest sistemlerinde zamanlama gerekebilir. Bu gibi durumlarda 'timer' kullanılır..quest içinde bir işlem belirli süre sonra tetiklenebilir. Ayrıca 'flag' sistemleri, oyuncunun.quest durumunu saklamak için kullanılır. Bu sayede.quest tekrarlanabilir veya oyuncuya özel yapılandırılabilir.
Hata Ayıklama ve Debugging
Quest yazarken karşılaşılan en büyük zorluklardan birisi hata ayıklamadır..quest dosyalarında hatalar genellikle loglara düşer. 'server_log' veya 'quest_log' üzerinden hataları takip edebilirsiniz..quest içinde 'notice' veya 'chat' komutlarını kullanarak debug yapabilirsiniz. Bu yöntemle.quest'in nerede durduğunu ya da hangi değeri aldığını görebilirsiniz.
Gelişmiş Quest Örnekleri
Basit görevlerden sonra, zincirleme quest sistemleri (chain quest), günlük görevler (daily quest) gibi daha karmaşık sistemlere geçebilirsiniz. Bu sistemler, oyuncuların uzun süre oyunda kalmasını sağlar..daily quest sistemi için her gün sıfırlanan flag'ler kullanılabilir..chain quest sistemi ise önceki questin bitmesiyle sonrakinin açılması prensibine dayanır.
Sonuç
Quest yazmak, hem teknik hem de yaratıcılık gerektiren bir iştir. Doğru yapılmış bir.quest, oyuncuların Metin2 dünyasında daha fazla kalmalarını sağlar..quest geliştirme sürecinde dikkat edilmesi gereken detaylar, debugging yeteneği ve sistematik düşünme becerisi önemlidir. Metin2 Lobby olarak biz de bu konuda destek vermeye devam ediyoruz.
Quest Writing Lessons 3
Welcome to the third part of our article series focusing on Metin2 quest systems at Metin2 Lobby. In this section, we will go deeper into the structure of .quest files and focus specifically on advanced .quest development based on Lua scripting. Quest writing is an important feature that enriches user experience on Metin2 servers and, when used correctly, can attract players.
Structure of Quest Files and Basic Components
The Metin2 quest system is generally based on Lua and .quest files are run on the server-side. These files allow interactions triggered by players completing certain tasks. The basic components forming the quest system are:
- Quest start (quest begin)
- Quest state (state)
- Trigger (trigger)
- NPC interaction
- Reward system (reward)
Starting Quests and State Management
Every .quest file begins with 'quest begin' and ends with 'end'. Quests are state-based. That means different actions can occur in different states. For example, when a quest starts, it enters the 'start' state, and upon completion, moves to the 'complete' state. This allows control over the flow of the quest.
NPC and Mob Interactions
In quest systems, NPCs are characters that provide or accept quests. Interaction with the player can be achieved through commands like 'say', 'input', 'select' within the .quest scripts. Additionally, some quests require killing specific mobs or collecting certain items. You can control these operations by writing them inside the quest file.
Timer and Flag Usage
Timing may be required in quest systems. In such cases, 'timer' is used. Within a quest, an action can be triggered after a specific duration. Additionally, 'flag' systems are used to store the quest status of a player. This way, quests can be repeatable or customized for each player.
Debugging and Error Handling
One of the biggest challenges when writing quests is debugging. Errors in .quest files usually appear in logs. You can monitor errors via 'server_log' or 'quest_log'. You can also use 'notice' or 'chat' commands within the quest to debug. With this method, you can see where the quest stops or which value it takes.
Advanced Quest Examples
After simple quests, you can move on to more complex systems like chained quest systems (chain quest), and daily quests (daily quest). Such systems encourage players to stay longer in the game. Daily quest systems can reset flags every day. Chain quest systems are based on the principle that a new quest opens only after the previous one is completed.
Conclusion
Writing quests is both technical and creative work. A well-crafted quest can encourage players to stay longer in the Metin2 world. Attention to detail, debugging skills, and systematic thinking are essential in the quest development process. At Metin2 Lobby, we continue to provide support in this area.
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.
Quest Yazma Dersleri 3
Metin2 Lobby olarak, Metin2 quest sistemine odaklanan bu yazı dizimizin 3. bölümüne hoş geldiniz. Bu bölümde,.quest dosyalarının yapısında daha derinlemesine inceleyecek, özellikle Lua script diline dayalı gelişmiş.quest geliştirmeye odaklanacağız. Quest yazımı, Metin2 sunucularında kullanıcı deneyimini zenginleştiren önemli bir özelliktir ve doğru kullanıldığında oyuncuların dikkatini çekebilir.
Quest Dosyası Yapısı ve Temel Bileşenler
Metin2 quest sistemi, genellikle Lua tabanlıdır ve.quest dosyaları sunucu tarafında çalıştırılır. Bu dosyalar, oyuncuların belirli görevleri yerine getirmesiyle tetiklenen etkileşimleri sağlar. Quest sistemini oluşturan temel unsurlar şunlardır:
- Quest başlangıcı (quest begin)
- Quest durumu (state)
- Tetikleyici (trigger)
- NPC etkileşimi
- Ödül sistemi (reward)
Quest Başlatma ve Durum Yönetimi
Her.quest dosyası, 'quest begin' ile başlar ve 'end' ile biter..quest'ler durum tabanlıdır. Yani farklı durumlarda farklı eylemler yapılabilir. Örneğin bir.quest başlatıldığında 'start' durumunda, görev tamamlandığında 'complete' durumuna geçebilir. Bu sayede.quest akışı kontrol edilebilir.
NPC ve Mob Etkileşimleri
Quest sisteminde NPC'ler, görev veren veya görevi teslim alan karakterlerdir..quest scriptleri içinde 'say', 'input', 'select' gibi komutlarla oyuncu ile etkileşim sağlanabilir. Ayrıca bazı.questlerde belirli mobları öldürmek veya belirli eşyaları toplamak gerekebilir. Bu işlemleri.quest içine yazarak kontrolü sağlayabilirsiniz.
Timer ve Flag Kullanımı[/CODE]
Quest sistemlerinde zamanlama gerekebilir. Bu gibi durumlarda 'timer' kullanılır..quest içinde bir işlem belirli süre sonra tetiklenebilir. Ayrıca 'flag' sistemleri, oyuncunun.quest durumunu saklamak için kullanılır. Bu sayede.quest tekrarlanabilir veya oyuncuya özel yapılandırılabilir.
Hata Ayıklama ve Debugging
Quest yazarken karşılaşılan en büyük zorluklardan birisi hata ayıklamadır..quest dosyalarında hatalar genellikle loglara düşer. 'server_log' veya 'quest_log' üzerinden hataları takip edebilirsiniz..quest içinde 'notice' veya 'chat' komutlarını kullanarak debug yapabilirsiniz. Bu yöntemle.quest'in nerede durduğunu ya da hangi değeri aldığını görebilirsiniz.
Gelişmiş Quest Örnekleri
Basit görevlerden sonra, zincirleme quest sistemleri (chain quest), günlük görevler (daily quest) gibi daha karmaşık sistemlere geçebilirsiniz. Bu sistemler, oyuncuların uzun süre oyunda kalmasını sağlar..daily quest sistemi için her gün sıfırlanan flag'ler kullanılabilir..chain quest sistemi ise önceki questin bitmesiyle sonrakinin açılması prensibine dayanır.
Sonuç
Quest yazmak, hem teknik hem de yaratıcılık gerektiren bir iştir. Doğru yapılmış bir.quest, oyuncuların Metin2 dünyasında daha fazla kalmalarını sağlar..quest geliştirme sürecinde dikkat edilmesi gereken detaylar, debugging yeteneği ve sistematik düşünme becerisi önemlidir. Metin2 Lobby olarak biz de bu konuda destek vermeye devam ediyoruz.
Quest Writing Lessons 3
Welcome to the third part of our article series focusing on Metin2 quest systems at Metin2 Lobby. In this section, we will go deeper into the structure of .quest files and focus specifically on advanced .quest development based on Lua scripting. Quest writing is an important feature that enriches user experience on Metin2 servers and, when used correctly, can attract players.
Structure of Quest Files and Basic Components
The Metin2 quest system is generally based on Lua and .quest files are run on the server-side. These files allow interactions triggered by players completing certain tasks. The basic components forming the quest system are:
- Quest start (quest begin)
- Quest state (state)
- Trigger (trigger)
- NPC interaction
- Reward system (reward)
Starting Quests and State Management
Every .quest file begins with 'quest begin' and ends with 'end'. Quests are state-based. That means different actions can occur in different states. For example, when a quest starts, it enters the 'start' state, and upon completion, moves to the 'complete' state. This allows control over the flow of the quest.
NPC and Mob Interactions
In quest systems, NPCs are characters that provide or accept quests. Interaction with the player can be achieved through commands like 'say', 'input', 'select' within the .quest scripts. Additionally, some quests require killing specific mobs or collecting certain items. You can control these operations by writing them inside the quest file.
Timer and Flag Usage
Timing may be required in quest systems. In such cases, 'timer' is used. Within a quest, an action can be triggered after a specific duration. Additionally, 'flag' systems are used to store the quest status of a player. This way, quests can be repeatable or customized for each player.
Debugging and Error Handling
One of the biggest challenges when writing quests is debugging. Errors in .quest files usually appear in logs. You can monitor errors via 'server_log' or 'quest_log'. You can also use 'notice' or 'chat' commands within the quest to debug. With this method, you can see where the quest stops or which value it takes.
Advanced Quest Examples
After simple quests, you can move on to more complex systems like chained quest systems (chain quest), and daily quests (daily quest). Such systems encourage players to stay longer in the game. Daily quest systems can reset flags every day. Chain quest systems are based on the principle that a new quest opens only after the previous one is completed.
Conclusion
Writing quests is both technical and creative work. A well-crafted quest can encourage players to stay longer in the Metin2 world. Attention to detail, debugging skills, and systematic thinking are essential in the quest development process. At Metin2 Lobby, we continue to provide support in this area.
