Merhaba arkadaşlar bugün sizlere işinize çok yarayacak item ile yapılan işlemleri tam anlamı ile açıklarından kurtaracak bir formül anlatmak istedim
Bildiğiniz gibi bazı questler vardır bu questler itemler ile çalışır.Örnek vermek gerekirse 50012 kodlu bir item istenir karşılığında ödül verilir.
Bu itemin ise envanterde var olup olmadığını hazır fonksiyonla öğrenebiliriz varsa ödül verilir yoksa verilmez gibi.
Fakat ben bu fonksiyona tam güvenemedim işi biraz daha geliştirmek istedim. İtemin varlığını veri tabanından yaptım bu sayede item gerçekte kime ait öğrenebildim
Şu şekilde bir SQL sorgusu yazacağız:
Yukarda ne yaptık ?
İlk olarak itemin id numarasını bir değişkene atadım (item_id)
Daha sonra oyuncunun ismini'de bir değişkene atadım (kim)
Daha sonra da bir değişken daha tanımladım (varmibak) içerisine bir SQL cümlesi yazdım. SQL cümlesinde ise 2 tabloyu bir birbirine bağladım (item,player)
SQL sorgum bana 1 veya 0 diye bir değer dönderecek başka bir değer dönerse hata var demektir çünkü item_id numarası veri tabanında sadece bir tane var.
Alt tarafa ise bundan yola çıkarak bir if yapısı kullandım.Dönen değer birden küçük ise hata konuşması yaptırdım.Bir ve birden büyük ise güvenlik tamam oldu
Anlayan ve biraz quest yazmasını bilen arkadaşlar için kullanılması gerek bir olay burda hazrı birşey yok ben anlattım gerisi size kalmış
Bu yaptıklarımı doğru bir şekilde uygular iseniz kesinlikle item le alakalı questlerinizde kimse bug açık yapamaz
Çünkü olay veri tabanında bitiyor..
Not:Oyun veri tabanına verileri geç entegre ediyor özellikle item tablosuna bu yüzden item oyuncuya yeni geçmiş ise 15-20 dk boyunca hata bloğuna düşer cünkü deger hep 0 dönecektir..
Quest İle Yapılan İtemlerin Açıklarını Kapatma #GalaxoSmithKline
Metin2 Lobby olarak, Metin2 sunucularında kullanılan quest sistemlerinde, özellikle item üretimine yönelik geliştirilen questlerde ortaya çıkan açıkların kapatılması oldukça önemli bir konudur. Bu tür açıklar, hem sunucu deneyimini bozabilir hem de hileli yollarla item elde edilmesine neden olabilir. Bu yazıda, quest ile yapılan itemlerin açıklarını nasıl kapatabileceğinizi, hangi stratejileri kullanmanız gerektiğini detaylıca ele alacağız.
Quest Sistemine Genel Bakış
Metin2’de quest sistemi, oyunculara belirli görevler vererek, bu görevleri tamamlayıp ödüller kazanmalarını sağlar. Bu görevler genellikle Lua dili ile yazılmaktadır. Metin2 quest sistemleri, sunucuya özgü özelleştirilmiş olabilir ve gelişmiş scriptlerle genişletilebilir. Bu sistemlerde item üretimine dayalı questler, oyuncuların belirli görevleri yaparak özel itemler elde etmesini sağlar. Ancak bu süreçte bazı açıklar oluşabiliyor. Örneğin, bir quest tamamlandığında aynı itemin birden fazla kez alınabilmesi gibi.
Açıklar Nasıl Oluşur?
Genellikle quest geliştiricileri, item üretim süreçlerini test aşamasında yeterince kontrol edemediklerinde açıklar ortaya çıkar. Bunlar şunlardır:
- Aynı quest tekrar çalıştırılıp aynı itemin birden fazla kez verilmesi
- Flag veya state kontrollerinin eksik olması
- Timer veya trigger kontrollerinin uygun ayarlanmaması
- NPC veya Mob interactionlarında doğabilecek mantık hataları
Açıkları Kapatma Yöntemleri
1. Flag Kontrolleri: Quest tamamlandığında belirli bir flag setlenmelidir. Bu sayede, quest yeniden başlatılmaya çalışıldığında, flag kontrolü yapılarak tekrar çalışmaması sağlanabilir.
2. State Yönetimi: Quest’in mevcut durumu state değişkeni ile takip edilmeli. Eğer quest tamamlanmışsa, yeni bir başlatma talebi geldiğinde engellenmelidir.
3. Timer Kullanımı: Belirli zaman aralıklarında çalışan daily quest gibi sistemlerde, zaman kontrolü yapılmalıdır. Aynı questin 24 saat içinde birden fazla çalışması engellenmelidir.
4. Item Verme Kontrolü: Reward kısmında, itemin verilmeden önce envanterde yeterli yer olup olmadığı kontrol edilmelidir. Ayrıca, itemin zaten verilmiş olup olmadığı da kontrol edilmelidir.
Best Practice Örnekleri
Aşağıda basit bir quest örneği verilmiştir:
Yukarıdaki örnek, bir quest tamamlandıktan sonra aynı itemin tekrar verilmesini engeller.
Geliştirici Hatalarını Önleme
Metin2 quest geliştirme sırasında dikkat edilmesi gereken bazı detaylar vardır. Özellikle debug işlemleri ile quest’in tüm adımları kontrol edilmeli. Metin2dev ve Martysama gibi topluluklar, örnek quest scriptleriyle geliştiricilere destek sunar. Quest edit işlemlerinde dikkatli olunmalı ve test süreçleri eksiksiz uygulanmalıdır.
Sonuç
Metin2 üzerinde quest geliştirirken, özellikle item odaklı sistemlerde açığa neden olacak her detay çok önemlidir. Doğru flag, timer, state yönetimi ve test süreçleri ile bu açıklar başarıyla kapatılabilir. Bu sayede hem sunucu güvenliği artırılır hem de kullanıcı deneyimi daha keyifli hale gelir.
Closing Loopholes on Items Created with Quest #GalaxoSmithKline
Metin2 Lobby team, in Metin2 servers, closing loopholes in quests that produce items is a critical topic. These loopholes can not only disrupt the gameplay experience but also allow players to exploit the system to gain items unfairly. In this article, we will explain in detail how you can close loopholes related to items created via quests, and what strategies should be applied.
Overview of the Quest System
In Metin2, the quest system assigns specific tasks to players and rewards them upon completion. These quests are typically written in Lua. Metin2 quest systems can be customized per server and extended with advanced scripting. In such systems, quests focused on item creation allow players to obtain special items by completing certain tasks. However, loopholes may occur during these processes. For example, the same item being obtained multiple times after completing a quest.
How Loopholes Occur?
Often, quest developers do not thoroughly test item production sequences, leading to loopholes such as:
- The same quest running repeatedly and awarding the same item more than once
- Missing flag or state checks
- Improperly configured timer or trigger controls
- Logical errors in NPC or mob interactions
Methods to Close Loopholes
1. Flag Checks: After a quest is completed, a specific flag must be set. This prevents the quest from running again if a restart attempt is made.
2. State Management: The current status of the quest should be tracked via the state variable. If the quest has already been completed, any new initiation attempts should be blocked.
3. Timer Usage: In systems like daily quests, time checks must be implemented. Running the same quest more than once within 24 hours should be prevented.
4. Item Granting Control: In the reward section, it must be checked whether there is enough inventory space before granting the item. Also, whether the item has already been awarded should be verified.
Best Practice Examples
Below is a simple quest example:
The above example prevents the same item from being awarded again after the quest is completed.
Preventing Developer Mistakes
There are important details to consider when developing Metin2 quests. Debugging procedures should thoroughly check every step of the quest. Communities like Metin2dev and Martysama provide support with sample quest scripts. Care must be taken during quest edit operations, and testing phases should be executed completely.
Conclusion
When developing quests on Metin2, especially in item-focused systems, every detail that could cause loopholes is critical. Proper flag, timer, state management, and thorough testing can successfully close these loopholes. This enhances both server security and user experience.
Bildiğiniz gibi bazı questler vardır bu questler itemler ile çalışır.Örnek vermek gerekirse 50012 kodlu bir item istenir karşılığında ödül verilir.
Bu itemin ise envanterde var olup olmadığını hazır fonksiyonla öğrenebiliriz varsa ödül verilir yoksa verilmez gibi.
Fakat ben bu fonksiyona tam güvenemedim işi biraz daha geliştirmek istedim. İtemin varlığını veri tabanından yaptım bu sayede item gerçekte kime ait öğrenebildim
Şu şekilde bir SQL sorgusu yazacağız:
Kod:
local item_id = item.get_id() //İtemin id numarasını aldık (Tc kimlik numarası gibi düşünün sadece bu iteme ait bir numara) local kim=pc.get_name() //Etkileşimde olan oyuncunun ismi local varmibak = mysql_query10(select * from player.item as t1, player.player as t2 where t1.id="..item_id.." and owner_id="..kim.." and t1.owner_id=t2.id ) if(table.getn(varmibak)) < 1 then //Buraya hata bloğu gelecek else //Buradan devam edecek.... end
Yukarda ne yaptık ?
İlk olarak itemin id numarasını bir değişkene atadım (item_id)
Daha sonra oyuncunun ismini'de bir değişkene atadım (kim)
Daha sonra da bir değişken daha tanımladım (varmibak) içerisine bir SQL cümlesi yazdım. SQL cümlesinde ise 2 tabloyu bir birbirine bağladım (item,player)
SQL sorgum bana 1 veya 0 diye bir değer dönderecek başka bir değer dönerse hata var demektir çünkü item_id numarası veri tabanında sadece bir tane var.
Alt tarafa ise bundan yola çıkarak bir if yapısı kullandım.Dönen değer birden küçük ise hata konuşması yaptırdım.Bir ve birden büyük ise güvenlik tamam oldu
Anlayan ve biraz quest yazmasını bilen arkadaşlar için kullanılması gerek bir olay burda hazrı birşey yok ben anlattım gerisi size kalmış
Bu yaptıklarımı doğru bir şekilde uygular iseniz kesinlikle item le alakalı questlerinizde kimse bug açık yapamaz
Çünkü olay veri tabanında bitiyor..
Not:Oyun veri tabanına verileri geç entegre ediyor özellikle item tablosuna bu yüzden item oyuncuya yeni geçmiş ise 15-20 dk boyunca hata bloğuna düşer cünkü deger hep 0 dönecektir..
Quest İle Yapılan İtemlerin Açıklarını Kapatma #GalaxoSmithKline
Metin2 Lobby olarak, Metin2 sunucularında kullanılan quest sistemlerinde, özellikle item üretimine yönelik geliştirilen questlerde ortaya çıkan açıkların kapatılması oldukça önemli bir konudur. Bu tür açıklar, hem sunucu deneyimini bozabilir hem de hileli yollarla item elde edilmesine neden olabilir. Bu yazıda, quest ile yapılan itemlerin açıklarını nasıl kapatabileceğinizi, hangi stratejileri kullanmanız gerektiğini detaylıca ele alacağız.
Quest Sistemine Genel Bakış
Metin2’de quest sistemi, oyunculara belirli görevler vererek, bu görevleri tamamlayıp ödüller kazanmalarını sağlar. Bu görevler genellikle Lua dili ile yazılmaktadır. Metin2 quest sistemleri, sunucuya özgü özelleştirilmiş olabilir ve gelişmiş scriptlerle genişletilebilir. Bu sistemlerde item üretimine dayalı questler, oyuncuların belirli görevleri yaparak özel itemler elde etmesini sağlar. Ancak bu süreçte bazı açıklar oluşabiliyor. Örneğin, bir quest tamamlandığında aynı itemin birden fazla kez alınabilmesi gibi.
Açıklar Nasıl Oluşur?
Genellikle quest geliştiricileri, item üretim süreçlerini test aşamasında yeterince kontrol edemediklerinde açıklar ortaya çıkar. Bunlar şunlardır:
- Aynı quest tekrar çalıştırılıp aynı itemin birden fazla kez verilmesi
- Flag veya state kontrollerinin eksik olması
- Timer veya trigger kontrollerinin uygun ayarlanmaması
- NPC veya Mob interactionlarında doğabilecek mantık hataları
Açıkları Kapatma Yöntemleri
1. Flag Kontrolleri: Quest tamamlandığında belirli bir flag setlenmelidir. Bu sayede, quest yeniden başlatılmaya çalışıldığında, flag kontrolü yapılarak tekrar çalışmaması sağlanabilir.
2. State Yönetimi: Quest’in mevcut durumu state değişkeni ile takip edilmeli. Eğer quest tamamlanmışsa, yeni bir başlatma talebi geldiğinde engellenmelidir.
3. Timer Kullanımı: Belirli zaman aralıklarında çalışan daily quest gibi sistemlerde, zaman kontrolü yapılmalıdır. Aynı questin 24 saat içinde birden fazla çalışması engellenmelidir.
4. Item Verme Kontrolü: Reward kısmında, itemin verilmeden önce envanterde yeterli yer olup olmadığı kontrol edilmelidir. Ayrıca, itemin zaten verilmiş olup olmadığı da kontrol edilmelidir.
Best Practice Örnekleri
Aşağıda basit bir quest örneği verilmiştir:
Kod:
[B]quest[/B] example_quest [B]begin[/B][BR][/BR][B]state[/B] start [B]begin[/B][BR][/BR] [B]when[/B] click [B]with[/B] npc[BR][/BR] [B]do[/B][BR][/BR] [B]if[/B] pc.getqf('quest_done') == 0 [B]then[/B][BR][/BR] game.drop_item('special_item', 1)[BR][/BR] pc.setqf('quest_done', 1)[BR][/BR] [B]else[/B][BR][/BR] syschat('Zaten bu questten ödül almışsınız.')[BR][/BR] [B]end[/B][BR][/BR][B]end[/B][BR][/BR][B]state[/B] __END__ [B]begin[/B][BR][/BR][B]end[/B][BR][/BR][B]end[/B]
Yukarıdaki örnek, bir quest tamamlandıktan sonra aynı itemin tekrar verilmesini engeller.
Geliştirici Hatalarını Önleme
Metin2 quest geliştirme sırasında dikkat edilmesi gereken bazı detaylar vardır. Özellikle debug işlemleri ile quest’in tüm adımları kontrol edilmeli. Metin2dev ve Martysama gibi topluluklar, örnek quest scriptleriyle geliştiricilere destek sunar. Quest edit işlemlerinde dikkatli olunmalı ve test süreçleri eksiksiz uygulanmalıdır.
Sonuç
Metin2 üzerinde quest geliştirirken, özellikle item odaklı sistemlerde açığa neden olacak her detay çok önemlidir. Doğru flag, timer, state yönetimi ve test süreçleri ile bu açıklar başarıyla kapatılabilir. Bu sayede hem sunucu güvenliği artırılır hem de kullanıcı deneyimi daha keyifli hale gelir.
Closing Loopholes on Items Created with Quest #GalaxoSmithKline
Metin2 Lobby team, in Metin2 servers, closing loopholes in quests that produce items is a critical topic. These loopholes can not only disrupt the gameplay experience but also allow players to exploit the system to gain items unfairly. In this article, we will explain in detail how you can close loopholes related to items created via quests, and what strategies should be applied.
Overview of the Quest System
In Metin2, the quest system assigns specific tasks to players and rewards them upon completion. These quests are typically written in Lua. Metin2 quest systems can be customized per server and extended with advanced scripting. In such systems, quests focused on item creation allow players to obtain special items by completing certain tasks. However, loopholes may occur during these processes. For example, the same item being obtained multiple times after completing a quest.
How Loopholes Occur?
Often, quest developers do not thoroughly test item production sequences, leading to loopholes such as:
- The same quest running repeatedly and awarding the same item more than once
- Missing flag or state checks
- Improperly configured timer or trigger controls
- Logical errors in NPC or mob interactions
Methods to Close Loopholes
1. Flag Checks: After a quest is completed, a specific flag must be set. This prevents the quest from running again if a restart attempt is made.
2. State Management: The current status of the quest should be tracked via the state variable. If the quest has already been completed, any new initiation attempts should be blocked.
3. Timer Usage: In systems like daily quests, time checks must be implemented. Running the same quest more than once within 24 hours should be prevented.
4. Item Granting Control: In the reward section, it must be checked whether there is enough inventory space before granting the item. Also, whether the item has already been awarded should be verified.
Best Practice Examples
Below is a simple quest example:
Kod:
[B]quest[/B] example_quest [B]begin[/B][BR][/BR][B]state[/B] start [B]begin[/B][BR][/BR] [B]when[/B] click [B]with[/B] npc[BR][/BR] [B]do[/B][BR][/BR] [B]if[/B] pc.getqf('quest_done') == 0 [B]then[/B][BR][/BR] game.drop_item('special_item', 1)[BR][/BR] pc.setqf('quest_done', 1)[BR][/BR] [B]else[/B][BR][/BR] syschat('You have already received the reward from this quest.')[BR][/BR] [B]end[/B][BR][/BR][B]end[/B][BR][/BR][B]state[/B] __END__ [B]begin[/B][BR][/BR][B]end[/B][BR][/BR][B]end[/B]
The above example prevents the same item from being awarded again after the quest is completed.
Preventing Developer Mistakes
There are important details to consider when developing Metin2 quests. Debugging procedures should thoroughly check every step of the quest. Communities like Metin2dev and Martysama provide support with sample quest scripts. Care must be taken during quest edit operations, and testing phases should be executed completely.
Conclusion
When developing quests on Metin2, especially in item-focused systems, every detail that could cause loopholes is critical. Proper flag, timer, state management, and thorough testing can successfully close these loopholes. This enhances both server security and user experience.
