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 118

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 sunucularında geliştirilen quest sistemleri, oyuncuların oyun içindeki deneyimlerini zenginleştirmek için kritik öneme sahiptir. Ancak bazı questlerle elde edilen itemlerde açıklar olabilir. Bu açıklar, hem oyun dengesini bozabilir hem de sunucu güvenliğini riske atabilir. Bu yazıda, quest ile yapılan itemlerin açıklarını nasıl kapatabileceğinizi detaylıca ele alacağız. Ayrıca #GalaxoSmithKline gibi gelişmiş quest sistemlerinde karşılaşılan sorunlara odaklanarak, güvenlik ve performans açısından öneriler sunacağız.

Metin2 Quest Sistemi Nedir?

Metin2 oyununda quest sistemi, oyuncuların belirli görevleri tamamlayarak ödüller kazanmasını sağlar. Questler, Lua dilinde yazılmış komutlarla çalışır. Oyuncuların seviye atlama, eşya kazanma, görev tamamlama gibi işlemleri bu sistem üzerinden gerçekleşir. Quest sistemi, lua script dosyalarıyla yönetilir ve doğru yapılandırılmadığında açıklar yaratabilir.

Quest ile Elde Edilen İtemlerde Karşılaşılan Açıklar

Oyuncuların questlerden kazandığı itemler, bazen kontrol dışı kullanım veya çoğaltma (duplication) gibi açıklara neden olabilir. Örneğin, bir quest reward olarak verilen eşyanın, flag kontrolü eksikse birden fazla kez alınması mümkün olabilir. Ayrıca timer veya state kontrollerinin eksik olması da benzer açıklara yol açar. Bu durumlar, sunucu dengesini bozar ve hileci oyuncuların avantaj elde etmesine olanak tanır.

Açıkların Güvenlik Açısından Riskleri

Bazı questler, item veya mob verilerini doğrudan kontrol etmeden, kullanıcıdan gelen bilgilere dayanarak işlem yapar. Bu, güvenlik açıklarına yol açabilir. Örneğin, bir quest NPC'si, oyuncudan gelen item ID'sini doğrulamadan eşya verirse, hileci bir oyuncu farklı item ID'leri göndererek istenmeyen eşyaları alabilir. Debug süreçlerinde bu tür açıklar tespit edilmeli ve hemen düzeltilmelidir.

Quest Açıklarını Kapatmanın Yolları

1. Flag Kontrolleri: Her quest tamamlandığında bir flag setlenmeli ve tekrar giriş engellenmelidir. Begin ve end fonksiyonları arasında bu kontrol yapılmalıdır.
2. Timer Ayarları: Günlük questler için timer kullanılmalı ve tekrar denemeler engellenmelidir.
3. Item Doğrulama: Quest tarafından verilen itemlerin doğruluğu kontrol edilmeli; doğrulanmayan işlemler reddedilmelidir.
4. State Yönetimi: Questlerin doğru state'te çalıştığından emin olunmalı; aksi halde beklenmedik davranışlar oluşabilir.

Örnek Quest Kod Yapısı

Kod:
[B]quest example_quest begin[/B][BR][/BR][B]state start begin[/B][BR][/BR][B]when login or enter begin[/B][BR][/BR][B]if pc.getqf('quest_done') == 0 then[/B][BR][/BR][B]say('Queste başlamak ister misiniz?')[/B][BR][/BR][B]local s = select('Evet', 'Hayır')[/B][BR][/BR][B]if s == 1 then[/B][BR][/BR][B]set_state(accept)[/B][BR][/BR][B]end[/B][BR][/BR][B]end[/B][BR][/BR][B]end[/B][BR][/BR][B]state accept begin[/B][BR][/BR][B]when button or info begin[/B][BR][/BR][B]say_reward('Ödülünüz: +10 Güç İksiri')[/B][BR][/BR][B]pc.give_item2('power_potion_10', 1)[/B][BR][/BR][B]pc.setqf('quest_done', 1)[/B][BR][/BR][B]set_state(__end__)[/B][BR][/BR][B]end[/B][BR][/BR][B]end[/B][BR][/BR][B]end[/B]


Sonuç

Metin2 quest sistemleri, doğru şekilde yapılandırıldığında oyunculara keyifli ve adil bir deneyim sunar. Ancak quest ile yapılan itemlerin açıklarını kapatmak, sunucu güvenliği ve denge açısından hayati öneme sahiptir. Flag, timer, state ve verification kontrolleri eksiksiz uygulanmalıdır. #GalaxoSmithKline gibi özel quest sistemlerinde bu kontroller daha da önemlidir. Quest geliştiricileri, test süreçlerini sıkı tutmalı ve her questin potansiyel güvenlik risklerini değerlendirmelidir.


Closing Exploits on Items Created via Quests #GalaxoSmithKline

Metin2 servers rely heavily on quest systems to enhance player experience. However, items obtained through quests can sometimes have vulnerabilities that affect game balance and security. This article explains how to close exploits related to items obtained via quests. We will also focus on issues arising from advanced quest systems like #GalaxoSmithKline and provide recommendations for security and performance.

What is the Metin2 Quest System?

The quest system in Metin2 allows players to complete tasks and earn rewards. These quests are coded using Lua scripts. Players gain levels, acquire items, and complete missions through this system. If not properly configured, the quest system may introduce vulnerabilities, especially in Lua script files.

Exploits in Quest-Rewarded Items

Items obtained from quests can sometimes lead to exploits such as duplication or unintended usage. For example, if flag checks are missing, a quest reward can be claimed multiple times. Additionally, missing timer or state controls may allow repeated access, which disrupts server balance and enables cheating.

Security Risks of Exploits

Some quests directly use user-provided data without proper validation, creating security vulnerabilities. For instance, if a quest NPC accepts arbitrary item IDs without verification, malicious users might exploit this to obtain unauthorized items. Such vulnerabilities must be identified and fixed during debug sessions.

How to Close Quest Exploits

1. Flag Checks: Set flags upon quest completion to prevent repeat attempts. Ensure these checks occur between begin and end functions.
2. Timer Settings: Use timers for daily quests to block additional attempts.
3. Item Validation: Verify that items given by quests are legitimate; reject unverified transactions.
4. State Management: Ensure quests run in correct states to avoid unexpected behaviors.

Sample Quest Code Structure

Kod:
[B]quest example_quest begin[/B][BR][/BR][B]state start begin[/B][BR][/BR][B]when login or enter begin[/B][BR][/BR][B]if pc.getqf('quest_done') == 0 then[/B][BR][/BR][B]say('Do you want to start the quest?')[/B][BR][/BR][B]local s = select('Yes', 'No')[/B][BR][/BR][B]if s == 1 then[/B][BR][/BR][B]set_state(accept)[/B][BR][/BR][B]end[/B][BR][/BR][B]end[/B][BR][/BR][B]end[/B][BR][/BR][B]state accept begin[/B][BR][/BR][B]when button or info begin[/B][BR][/BR][B]say_reward('Your reward: +10 Power Potion')[/B][BR][/BR][B]pc.give_item2('power_potion_10', 1)[/B][BR][/BR][B]pc.setqf('quest_done', 1)[/B][BR][/BR][B]set_state(__end__)[/B][BR][/BR][B]end[/B][BR][/BR][B]end[/B][BR][/BR][B]end[/B]


Conclusion

When properly structured, Metin2 quest systems offer enjoyable and fair gameplay. However, closing exploits on items obtained via quests is vital for server balance and security. Proper flag, timer, state, and verification controls must be implemented. Special attention should be paid in advanced systems like #GalaxoSmithKline. Developers should conduct thorough testing and evaluate potential security risks in every quest.
 

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

Benzer konular

Geri
Üst Alt