Quest İle Yapılan İtemlerin Açıklarını Kapatma #GalaxoSmithKline

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 121

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
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:

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ış :D
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.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt