[C++] - Ticaret Ekranı Açık İken Quest Engellemek

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Konu sahibi konuyu kapattırmış ama yorumlardan konu içeriği yine gözüküyor bu yüzden tekrardan paylaşma gereği duydum bulamayanlar için kolay olur diye düşünüyorum.

char.cpp açılır aratılır:



Değiştirilir:



Bu kısımdaki
"INSERT INTO %soffline_shop_npc

offline_shop_npc yazısını sizin navicatınızda ki offline shopunuzun sql adına göre kesin olarak değiştirin.
Metin2 Özel Sunucularında [C++] ile Ticaret Ekranı Açıkken Quest Engellemek

Metin2 özel sunucu geliştirme sürecinde, oyuncuların güvenli ve sorunsuz bir deneyim yaşaması için bazı sistemsel kontroller yapmak büyük önem taşır. Bu bağlamda, oyuncuların ticaret ekranı açıkken quest almasını veya quest işlemleri yapmasını engellemek, hem sunucu tarafında oluşabilecek hataları önlemek hem de oyun içi deneyimi optimize etmek açısından kritik bir konudur. Bu yazıda, C++ tabanlı bir sistem geliştirmek suretiyle, quest sistemini ticaret açıkken devre dışı bırakmayı ele alacağız.

Ticaret ve Quest Sistemi Nedir?
Metin2'de quest sistemi[/Courier], oyunculara görevler vererek oyun içi ilerlemelerini sağlayan temel mekanizmalardan biridir. Ödül sistemleri, seviye atlama, eşya kazanımı gibi birçok durum quest üzerinden yönetilir. Öte yandan, ticaret işlemi ise iki oyuncunun arasında eşya ve altın transferi yapılmasını sağlar. Bu işlemler farklı threadlerde çalışsa da, aynı anda gerçekleştiğinde veri bütünlüğü açısından risk oluşturabilir.

Neden Quest Engellenmeli?
Oyuncu bir başka oyuncu ile ticaret yaparken quest işlemleri başlatılırsa, sunucuda veri çakışması meydana gelebilir. Örneğin, quest sırasında bir eşya düşürülmeye çalışıldığında, halihazırda açık olan trade ekranı bu eşiyanın doğru şekilde aktarılmasını engelleyebilir. Bu da exploit potansiyeline sahip senaryolar doğurabilir. Bu nedenle, trade açıkken quest sistemini geçici olarak devre dışı bırakmak büyük önem taşır.

C++ Tarafında Uygulanacak Yöntem
Metin2 sunucu tarafında game core olarak adlandırılan C++ tabanlı sistemlerde, oyuncu nesnesi üzerinde belirli durumları kontrol edebiliriz. Öncelikle, oyuncunun şu anda bir trade oturumu açıp açmadığını anlamamız gerekir. Bu kontrol genellikle CInstanceBase sınıfı üzerinden yapılır. Trade açıkken, bu sınıfta bulunan bir bayrak (flag) değişkeni true olur.

Quest İşlemi Kontrolü
Quest sistemine erişim sağlandığında, önce oyuncunun trade yapıp yapmadığı kontrol edilmelidir. Eğer trade açık ise, quest komutu iptal edilmeli ya da oyuncuya bir uyarı mesajı gönderilmelidir. Bu işlem genellikle questmanager.cpp dosyasında tanımlanan fonksiyonlara eklenen bir kontrol bloğu ile sağlanır. Örneğin:

Kod:
if (ch->IsTrading()) {[BR][/BR]    ChatPacket(ch, QERR_TRADE_OPEN_BLOCK_QUEST);[BR][/BR]    return false;[BR][/BR]}


Sunucu-Side Güvenlik
Bu tip kontroller, hem server-side güvenliği açısından kritik rol oynar hem de exploit girişimlerini azaltır. Oyuncuların aynı anda birden fazla işlem yapması, veri tabanında tutarsızlıklara yol açabilir. Bu yüzden, tüm aktif işlemler arasında uyumlu bir senkronizasyon sağlanması şarttır.

Özetle[/BR][/BR]Metin2 özel sunucularında C++ seviyesinde geliştirme yaparken, oyuncu etkileşimlerini kontrol etmek büyük önem taşır. Ticaret ekranı açıkken quest işlemlerini engellemek, veri bütünlüğünü korumak ve kullanıcı deneyimini artırmak için uygulanabilecek temel tekniklerden biridir. Bu tarz küçük ama etkili değişiklikler, sunucunuzun kalitesini ciddi anlamda artırabilir.

Kaynak Kod Paylaşımı
Geliştirme sürecinde kullanabileceğiniz örnek kod parçaları için Metin2Lobby forumuna göz atabilirsiniz. Burada C++ source edit, game server programming ve diğer konularda uzman geliştiricilerle fikir alışverişi yapabilirsiniz.


Blocking Quests While Trade Window Is Open in Metin2 Private Servers with [C++]

In the process of developing Metin2 private servers, implementing certain systematic controls is crucial for ensuring players have a safe and seamless experience. In this context, blocking quests while a player's trade window is open helps prevent potential errors on the server side and also optimizes the in-game experience. In this article, we will discuss how to disable the quest system during active trading sessions by developing a C++-based system.

What Are Trading and Quest Systems?
In Metin2, the quest system is one of the fundamental mechanisms that provide players with tasks to advance within the game. Rewards, level-ups, and item acquisitions are often managed through quests. On the other hand, the trading process allows two players to exchange items and gold. Although these processes run on different threads, if they occur simultaneously, they can pose risks to data integrity.

Why Should Quests Be Blocked?
If a player attempts to perform quest-related actions while trading with another player, a data conflict may occur on the server. For example, if an item drop is attempted during a quest, the currently open trade window might interfere with the correct transfer of the item. This could lead to scenarios with exploit potential. Therefore, temporarily disabling the quest system while trade is active is highly important.

Method to Be Applied on the C++ Side
Within the C++-based game core systems of Metin2 servers, we can check certain states of the player object. First, we need to determine whether the player currently has an active trade session. This control is usually performed via the CInstanceBase class. When trade is active, a flag variable in this class becomes true.

Quest Action Control
When accessing the quest system, first check whether the player is currently trading. If the trade window is open, the quest command should be canceled or a warning message sent to the player. This operation is typically implemented by adding a control block to functions defined in the questmanager.cpp file. Example:

Kod:
if (ch->IsTrading()) {[BR][/BR]    ChatPacket(ch, QERR_TRADE_OPEN_BLOCK_QUEST);[BR][/BR]    return false;[BR][/BR]}


Server-Side Security
Such checks play a critical role in server-side security and help reduce exploit attempts. Allowing players to perform multiple simultaneous operations can cause inconsistencies in the database. Therefore, achieving synchronized coordination between all active operations is essential.

In Summary
While developing at the C++ level in Metin2 private servers, controlling player interactions is highly important. Blocking quest actions while the trade window is open is one of the basic techniques that can preserve data integrity and enhance user experience. Such small but effective changes can significantly improve your server's quality.

Source Code Sharing
For sample code snippets you can use during the development process, visit the Metin2Lobby forums. You can exchange ideas with expert developers here regarding C++ source editing, game server programming, and more.
 

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

Benzer konular

Geri
Üst Alt