[C++, PYTHON] Offical Pet Sistemi Yaş Bugu Fixi

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
selamün aleyküm arkadaşlar herkesin sır gibi sakladığı fixi kendi yöntemlerimle alıntı yapmadan fixledim elbette daha iyi daha kısa fixler vardır elinizde ama ben bu şekilde fixleyebildim. Daha iyi fixleriniz varsa paylaşabilirsiniz.

Lütfen özel mesaj atmayınız bakamıyorum fixi paylaşmamın sebebi çoğu kişi arıyordu...

For @ ;

Linkler








Yapılanlar

New_petsystem.sqlde yeni stün açılarak duration ve tdurationdan bağımsız Pet_yasi stünü yapıldı. Petinizin aktif kaldığı sürece dakika olarak işler ve her 1440 dakikada(Bir güne gelince) yaş atlar ve petinizi beslediğinizde yaşını etkilemez...

Kendi sunucumdan kanıtlar


8PLb6W.jpg



DB5ROm.jpg



m4NzXZ.jpg



ErAqOB.jpg



jXN2qD.jpg



2nokOd.jpg



Bvb0OQ.jpg



o0NZdR.jpg

Metin2 Official Pet Sistemi Yaş Bug'u ve C++/Python ile Düzeltimi

Metin2 özel sunucularında pet sistemlerinin geliştirilmesi, hem C++ hem de Python tarafında detaylı kodlama gerektiren önemli bir özelliktir. Bu sistemlerden birisi olan Official Pet Sistemi, oyuncuların sevdiği karakterlerden biri olan evcil hayvanları oyun içine entegre eder. Ancak bu sistemde zaman zaman yaşanan yaş bug'u, özellikle uzun süreli sunucularda ciddi sorunlara yol açabilmektedir. Bu yazıda, bu hatanın neden kaynaklandığını ve C++ ile Python kullanarak nasıl düzelteceğimizi detaylıca ele alacağız.

Pet Sistemi Nedir?
Pet, oyuncunun oyun içinde yanına alabileceği, ona destek sağlayabilecek bir varlıktır. Official Pet sistemi, Metin2'nin resmi sunucularında bulunan pet sisteminin özel sunuculara uyarlanmış halidir. Bu sistem sayesinde oyuncular petlerini besleyebilir, güçlendirebilir ve PvP gibi savaş alanlarında destek alabilirler. Ancak bazı durumlarda petlerin yaşı sıfırın altına düşebilir veya sonsuza kadar artmaya devam edebilir. İşte bu durum yaş bug'udur.

Yaş Bug'un Kaynağı
Genellikle bu bug, petin yaşının tutulduğu değişkenin int olarak tanımlanması ve zamanla taşması sonucu oluşur. Özellikle uzun süre çalışan sunucularda, petin yaşı çok yüksek değerlere ulaşabilir ve taşma sonucu negatif değerlere düşebilir. Bu da petin görünmemesi veya hatalı davranmasına neden olur.

C++ Tarafında Düzeltim
Sunucu tarafında pet verileri genellikle game core içinde yönetilir. Pet sınıfı içinde yaş bilgisi genellikle int tipinde bir değişken olarak tanımlıdır. Bu değişkeni unsigned int veya daha büyük bir veri tipi olan long long olarak değiştirmek, taşma riskini azaltır. Ayrıca yaş değerini kontrol eden fonksiyonlara sınırlama getirerek yaşın belirli bir değerde sabitlenmesini sağlayabiliriz.

Örnek Kod (C++):
Kod:
if (pet_age > MAX_PET_AGE) { pet_age = MAX_PET_AGE; }

Python Tarafında Düzeltim
Client tarafında pet verileri genellikle py root dosyaları üzerinden işlenir. Pet yaşını gösteren UI elementleri doğru şekilde güncellenmezse, yaş bilgisi kullanıcıya yanlış yansıtılabilir. Python tarafında yaş bilgisini kontrol eden fonksiyonlara da benzer şekilde sınırlama eklemek önemlidir. Ayrıca yaş bilgisi negatifse, bunun engellenmesi gerekir.

Örnek Kod (Python):
Kod:
if pet_age < 0: pet_age = 0 elif pet_age > MAX_PET_AGE: pet_age = MAX_PET_AGE

Diğer Öneriler
DB Core tarafında pet verileri doğru şekilde saklanmalı ve yaş bilgisi zamanla eksilmiyorsa, bu değerlerin otomatik sıfırlanması sağlanmalıdır. Ayrıca, pet sistemi üzerinde çalışan geliştiriciler, düzenli olarak test yapmalı ve yaş değerlerinin beklenen aralıkta kaldığından emin olmalıdır.

Sonuç
Metin2 özel sunucularında Official Pet Sistemi yaş bug'u, sunucu sürekliliği açısından ciddi bir problem yaratabilir. Hem game hem de client tarafında yapılan küçük değişikliklerle bu hatayı engellemek mümkündür. Bu düzeltimler, hem oyun deneyimini artırır hem de sunucu kararlılığını olumlu yönde etkiler.


Metin2 Official Pet System Age Bug and Its Fix with C++/Python

Developing pet systems in Metin2 private servers requires detailed coding on both the C++ and Python sides. One such system is the Official Pet System, which integrates beloved pet characters into the game for players. However, issues like the age bug that sometimes occur in this system can cause serious problems, especially on long-running servers. In this article, we will explain the source of this error and how to fix it using C++ and Python.

What Is a Pet System?
Pet is an entity that players can take with them in-game and which supports them during gameplay. The Official Pet System is an adaptation of the pet system found on Metin2's official servers, tailored for private servers. With this system, players can feed their pets, strengthen them, and receive support in battle areas like PvP. However, in some cases, pets' ages may drop below zero or continue increasing indefinitely. This situation is known as the age bug.

Source of the Age Bug
Often, this bug occurs because the variable storing the pet's age is defined as int and overflows over time. On long-running servers, a pet's age can reach very high values, and overflow can result in negative values. This causes the pet not to appear or behave incorrectly.

Fix in C++
Pet data is typically managed within the game core on the server side. Within the pet class, the age variable is usually defined as an int. Changing this variable to unsigned int or a larger type like long long reduces the risk of overflow. Additionally, by adding limits to functions that control the age value, you can ensure the age remains at a specific maximum value.

Sample Code (C++):
Kod:
if (pet_age > MAX_PET_AGE) { pet_age = MAX_PET_AGE; }

Fix in Python
On the client side, pet data is often processed through py root files. If UI elements displaying pet age are not updated correctly, age information may be displayed incorrectly to the user. Similarly, limits should be added in Python functions controlling the age value to prevent negative values.

Sample Code (Python):
Kod:
if pet_age < 0: pet_age = 0 elif pet_age > MAX_PET_AGE: pet_age = MAX_PET_AGE

Other Suggestions
Pet data must be stored correctly on the DB Core side, and if age values are not decreasing over time, automatic resets should be implemented. Additionally, developers working on pet systems should regularly test and ensure that age values remain within expected ranges.

Conclusion
The Official Pet System age bug in Metin2 private servers can cause significant issues regarding server continuity. Small changes made on both game and client sides can prevent this error. These fixes enhance the gaming experience and positively affect server stability.
 

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

Benzer konular

Geri
Üst Alt