Simya sistemi SQL'den okutma +basma gibi bugları kapatma

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Bazı filesler txt de den sql e geçince simya sisteminde bir bug meydana geliyor + basılma veya saflık derecesine + basma gibi olaylarda bug oluşuyor bunu çözmek için yapılması gerekenler

db/src/ClientManagerBoot.cpp açın içerisinde

Kod:
bool CClientManager::InitializeItemTable()

kod bloğunun 3 - 4 satır altında

Kod:
"SELECT vnum, name, %s, type, subtype, gold, shop_buy_price, weight, size, flag, wearflag, "

yazacaktır buradaki vnum, ardına hemen vnum_range ekleyin yani son hali

Kod:
"SELECT vnum, vnum_range, name, %s, type, subtype, gold, shop_buy_price, weight, size, flag, wearflag, "

olacaktır ardından

Kod:
str_to_number(item_table->dwVnum, data[col++]);

altına

<blockquote data-attributes="" data-quote="" data-source="" class="bbCodeBlock bbCodeBlock--expandable bbCodeBlock--quote js-expandWatch">
Kod:
UPDATE item_proto SET vnum_range = '99' WHERE vnum=110000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=110100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=110200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=110300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=110400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=111000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=111100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=111200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=111300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=111400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=112000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=112100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=112200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=112300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=112400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=113000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=113100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=113200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=113300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=113400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=114000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=114100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=114200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=114300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=114400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=120000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=120100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=120200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=120300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=120400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=121000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=121100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=121200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=121300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=121400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=122000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=122100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=122200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=122300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=122400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=123000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=123100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=123200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=123300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=123400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=124000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=124100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=124200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=124300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=124400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=130000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=130100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=130200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=130300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=130400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=131000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=131100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=131200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=131300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=131400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=132000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=132100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=132200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=132300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=132400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=133000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=133100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=133200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=133300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=133400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=134000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=134100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=134200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=134300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=134400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=140000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=140100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=140200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=140300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=140400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=141000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=141100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=141200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=141300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=141400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=142000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=142100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=142200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=142300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=142400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=143000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=143100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=143200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=143300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=143400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=144000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=144100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=144200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=144300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=144400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=150000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=150100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=150200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=150300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=150400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=151000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=151100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=151200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=151300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=151400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=152000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=152100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=152200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=152300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=152400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=153000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=153100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=153200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=153300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=153400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=154000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=154100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=154200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=154300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=154400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=160000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=160100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=160200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=160300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=160400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=161000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=161100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=161200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=161300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=161400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=162000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=162100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=162200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=162300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=162400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=163000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=163100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=163200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=163300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=163400; UPDATE item_proto SET vnum_range = '99' WHERE vnum=164000; UPDATE item_proto SET vnum_range = '99' WHERE vnum=164100; UPDATE item_proto SET vnum_range = '99' WHERE vnum=164200; UPDATE item_proto SET vnum_range = '99' WHERE vnum=164300; UPDATE item_proto SET vnum_range = '99' WHERE vnum=164400;

Bitirdikten sonra mysql i sql den okutan kişilerde simya sorunu çözülecektir.

Not : Herkes aynı sql sistemini kullanmıyor sizin ClientManagerBoot.cpp içerisindeki kodlar farklı olabilir vnum u kopyalarak yapabilirsiniz sadece yeni değeri vnum_range yapacaksınız.
Simya Sistemi SQL'den Okutma ve Basma Buglarını Kapatma Rehberi

Metin2 özel sunucularında simya sisteminin güvenli ve sorunsuz çalışması, oyuncu deneyimini doğrudan etkiler. Bu yazıda, simya sisteminin SQL üzerinden okutulmasını sağlayarak basma veya hileli kullanım gibi bugların nasıl kapatılacağını detaylıca inceleyeceğiz.

Simya Sistemi Nedir?
Metin2 oyununda simya sistemi, oyuncuların belirli eşyaları dönüştürerek farklı itemlere ulaşmalarını sağlayan bir özelliktir. Bu sistem genellikle C++ ile yazılmış game sunucu kaynak kodlarında tanımlanır. Ancak bazı özel sunucular, simya formüllerini client tarafında tutarak güvenlik açığına neden olabilir. Bu da oyuncuların simya listelerini düzenleyip hileli yollarla item üretmesine sebep olur.

SQL Üzerinden Simya Formüllerini Kontrol Etmek
Simya formüllerinin client değil, server tarafında kontrol edilmesi büyük önem taşır. Bu sayede simya işlemleri doğrudan database üzerinden doğrulanır ve herhangi bir manipülasyon engellenir. Bunun için game sunucusuna özel bir tablo oluşturulur:

Kod:
CREATE TABLE alchemy_formulas ([BR][/BR]    id INT PRIMARY KEY AUTO_INCREMENT,[BR][/BR]    item_vnum INT NOT NULL,[BR][/BR]    required_items VARCHAR(255),[BR][/BR]    result_item INT NOT NULL,[BR][/BR]    required_gold INT DEFAULT 0[BR][/BR]);


Simya İşlemi Sunucu Tarafında Kontrol Edilmeli
Oyuncu simya işlemi gerçekleştirmek istediğinde, client sadece gerekli itemleri gönderir. Sunucu ise bu itemlerin eşleşip eşleşmediğini, doğru formülü oluşturup oluşturmadığını SQL tablosundan kontrol eder. Eğer eşleşme yoksa işlem iptal edilir. Bu yöntemle simya basma bugları tamamen ortadan kaldırılır.

Python veya C++ ile Simya Doğrulama
Python scriptleri ile UI arayüzü üzerinden alınan veriler doğrulanabilir. Örneğin, py_root klasöründe bir script oluşturulabilir. Bu script, client tarafından gönderilen item listesini alır ve SQL'e karşılaştırır. Eğer formül uyuşmuyorsa, işlem reddedilir. Benzer mantık C++ ile game/src kısmında da uygulanabilir.

DB Core ve Game Core Entegrasyonu
Simya sisteminin güvenliği için DB core ve game core arasında veri akışı sıkı bir şekilde kontrol edilmelidir. Game sunucusu, simya isteği geldiğinde önce DB ile bağlantı kurar ve formülü doğrular. Bu süreçte herhangi bir koddan kaçak veri aktarımı olmamalıdır. Aksi takdirde hile riski artar.

Martysama ve Diğer Kaynak Kodlar
Bazı özel sunucular, simya sistemini Martysama gibi scriptlerle yönetir. Ancak bu scriptlerin güncel ve güvenli sürüm olduğundan emin olunmalıdır. Eski versiyonlarda güvenlik açıkları bulunabilir. Bu yüzden her zaman resmi kaynaklardan alınan veya kendi geliştirdiğiniz güvenli kodları kullanmalısınız.

Kaynak Kod Düzenlemesi ve Compile
Simya sistemini SQL destekli olarak çalıştırmak için kaynak kodda değişiklik yapmanız gerekebilir. Özellikle game/src/interp.cpp veya game/src/cmd_general.cpp gibi dosyalarda simya komutları tanımlanır. Burada SQL sorgusu yapılarak formül kontrolü yapılır. Kod derlenirken (compile) herhangi bir hata oluşmaması için dikkatli olunmalıdır.

Sonuç
Simya sisteminin güvenli çalışması için client-side değil server-side doğrulama yapılmalıdır. SQL üzerinden formül kontrolü, simya basma gibi hileleri tamamen ortadan kaldırır. Bu sistemi kurarken hem C++ hem de Python bilgisi faydalı olacaktır. Güvenliği artırmak adına DB ve Game core arasında veri akışı kontrol altında tutulmalıdır.

Daha fazla Metin2 özel sunucu geliştirme kaynağı için Metin2Lobby'i ziyaret edin.


Alchemy System Reading from SQL and Closing Exploit Bugs Like Item Duplication

In Metin2 private servers, ensuring that the alchemy system operates securely and without bugs directly affects player experience. In this article, we will thoroughly examine how to secure the alchemy system by reading formulas from SQL, thus preventing exploits like duplication or cheating.

What is the Alchemy System?
The alchemy system in Metin2 allows players to transform certain items into other items through specific recipes. This feature is usually defined within the C++ server-side source code. However, some private servers store alchemy lists on the client side, creating security vulnerabilities. This can allow players to modify the alchemy lists and produce items illegally.

Controlling Alchemy Recipes via SQL
It is critical that alchemy recipes are controlled server-side rather than client-side. This ensures all alchemy processes are validated directly through the database, preventing any manipulation. To achieve this, a custom table can be created in the game server:

Kod:
CREATE TABLE alchemy_formulas ([BR][/BR]    id INT PRIMARY KEY AUTO_INCREMENT,[BR][/BR]    item_vnum INT NOT NULL,[BR][/BR]    required_items VARCHAR(255),[BR][/BR]    result_item INT NOT NULL,[BR][/BR]    required_gold INT DEFAULT 0[BR][/BR]);


Server-Side Validation for Alchemy Operations
When a player attempts to perform an alchemy operation, the client sends only the required items. The server then checks whether these match a valid formula stored in the SQL table. If there is no match, the process is canceled. This approach completely eliminates duplication bugs and similar exploits.

Alchemy Verification with Python or C++
Python scripts can be used to validate data received from the UI interface. For instance, a script inside the py_root folder can receive the item list sent by the client and compare it against the database. If the recipe does not match, the action is denied. A similar logic can be implemented in the game/src section using C++.

Integration Between DB Core and Game Core
To ensure alchemy security, the data flow between the DB core and game core must be tightly controlled. When an alchemy request arrives, the game server connects to the database and validates the formula. No data leakage should occur during this process, otherwise exploit risks may increase.

Martysama and Other Source Codes
Some private servers manage their alchemy systems using scripts like Martysama. However, you must ensure that these scripts are updated and secure. Older versions might contain vulnerabilities. Therefore, always use official sources or your own trusted custom code.

Source Code Editing and Compilation
You may need to modify the source code to support SQL-based alchemy. Specifically, files such as game/src/interp.cpp or game/src/cmd_general.cpp define alchemy commands. Here, SQL queries can be executed to verify recipes. During compilation, care must be taken to avoid errors.

Conclusion
To ensure safe operation of the alchemy system, validation must happen server-side, not client-side. Verifying recipes via SQL completely prevents exploits such as item duplication. Having knowledge of both C++ and Python will be helpful in setting up this system. Data flow between DB and Game cores should be closely monitored to enhance security.

For more resources on Metin2 private server development, visit Metin2Lobby.
 

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

Benzer konular

Geri
Üst Alt