21m HP Üstü Canavarların Targette %0 Can Gözükme 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 60

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Hepimizin bildiği canavarların canını arttırınca canavarın canının %0 gözükmesinin fixini paylaşıyorum.
Kod:
arat ve değiştir int CHARACTER::GetHPPct() const {     return ((int64_t)GetHP() * 100) / (int64_t)GetMaxHP(); } CHARACTER::SetTarget içinde arat p.bHPPercent = MINMAX(0, (m_pkChrTarget->GetHP() * 100) / m_pkChrTarget->GetMaxHP(), 100); değiştir p.bHPPercent = MINMAX(0, m_pkChrTarget->GetHPPct(), 100); CHARACTER::BroadcastTargetPacket içinde arat p.bHPPercent = MINMAX(0, (GetHP() * 100) / GetMaxHP(), 100); değiştir p.bHPPercent = MINMAX(0, GetHPPct(), 100);

İyi forumlar dilerim.

Distraught'a teşekkürler.
21m HP Üstü Canavarların Targette %0 Can Gözükme Fixi

Metin2 özel sunucularında geliştirme yaparken bazı sistemsel sorunlarla karşılaşabilirsiniz. Bu sorunlardan birisi de 21 milyon HP üstü canavarların target panelinde canlarının %0 olarak görünmesidir. Bu durum hem oyuncu deneyimini olumsuz etkiler hem de sunucu yöneticileri için ciddi bir debug problemi teşkil eder.

Sorunun Neden Kaynağı
Metin2 oyun motoru eski yapıya sahiptir ve integer değer sınırlarında çalışmaktadır. Özellikle signed integer tipi olan LONG (32-bit), maksimum 2.147.483.647 değerini alabilir. Bu değer yaklaşık 2.1 milyon HP'dir. Eğer bir canavarın HP'si bu değeri aşarsa, sistemde overflow meydana gelir ve bu da canın negatif veya sıfır gibi hatalı değerlerde gözükmesine neden olur.

Hatanın Görüntülenme Şekli
Oyuncu bir NPC'ye tıkladığında target panelinde can miktarı %0 olarak gösterilir. Bu durum HP'si 21 milyonu geçen tüm canavarlarda aynı şekilde meydana gelir.

Fixin Uygulanması
Bu hatayı çözmek için öncelikle client-side değişiklik yapılması gerekir. Client dosyalarında bulunan health bar ve target sistemini düzenlemek gerekir. Bunun için UI Script dosyalarında değişiklik yapılması gerekir.

Adım Adım Çözüm
1. root/uiscript/inventorywindow.py dosyasını açın.
2. Can miktarını hesaplayan fonksiyonları bulun.
3. HP değeri 2.1 milyonu geçtiğinde onu ölçekleyen bir sistem kurun. Örneğin: 21 milyon HP = 21000 gibi kısaltılmış gösterim.
4. Bu değeri target penceresinde de yansıtılacak şekilde ayarlayın.

Alternatif Sunucu Tarafında Fix
Sunucu tarafında da bu sorunu çözebilirsiniz. Game core kısmında HP değerlerini tutan değişken tiplerini long long (64 bit) olarak güncellemeniz gerekir. Ancak bu işlem oldukça teknik bilgi gerektirir ve yanlış uygulandığında sunucuda crash oluşabilir.

Py Root Dosyasında Değişiklik
Eğer py root kullanıyorsanız, uiTarget.py dosyasında HP görselleştirme fonksiyonlarını güncelleyin. HP'nin büyük sayılarla doğru şekilde işlem görmesi için float veya string dönüşümü yapmanız gerekebilir.

Test Etme ve Onaylama
Değişikliklerden sonra mutlaka test yapmalısınız. 21 milyon HP üzerinde bir NPC spawn edip target panelinde doğru gösterilip gösterilmediğini kontrol edin.

Sonuç
21m HP üstü canavarların targette %0 gözükme problemi çözülebilir bir sorundur. Client-side ve server-side düzenlemelerle bu sorun güvenli ve kalıcı şekilde giderilebilir. Ancak bu işlemler sırasında dikkatli olunmalı, yedek alınmalıdır.


Fix for Monsters Over 21m HP Showing 0% Health in Target Panel

While developing private Metin2 servers, you may encounter certain systemic issues. One such issue is monsters with HP exceeding 21 million showing their health as 0% in the target panel. This situation negatively affects the player experience and creates a significant debugging challenge for server administrators.

Root Cause of the Problem
The Metin2 game engine has an old architecture and operates within integer value limits. Specifically, the signed integer type LONG (32-bit) can hold up to 2,147,483,647 at maximum. This value is approximately 2.1 million HP. If a monster's HP exceeds this value, overflow occurs in the system, causing the HP to display as negative or zero incorrectly.

How the Error Appears
When a player clicks on an NPC, the HP amount appears as 0% in the target panel. This happens identically for all monsters whose HP exceeds 21 million.

Applying the Fix
To fix this error, changes must first be made on the client-side. You need to modify the health bar and target system located in the UI script files.

Step-by-Step Solution
1. Open root/uiscript/inventorywindow.py file.
2. Locate functions that calculate HP values.
3. Set up a scaling system for values exceeding 2.1 million HP. For example: 21 million HP = 21000 shortened display.
4. Adjust the target window to reflect these values accordingly.

Alternative Server-Side Fix
You can also resolve this issue on the server side. Update the variable types storing HP values in the game core to long long (64-bit). However, this requires advanced technical knowledge and incorrect application may cause crashes.

Modifying Py Root Files
If you are using py root, update the HP visualization functions in uiTarget.py. You may need to convert large numbers to float or string for correct display.

Testing and Verification
After making changes, ensure thorough testing. Spawn a monster with over 21 million HP and check if its HP is correctly displayed in the target panel.

Conclusion
The issue of monsters with over 21m HP showing 0% in the target panel is a solvable problem. With both client-side and server-side modifications, this issue can be resolved safely and permanently. However, caution must be exercised during these operations, and backups should be taken.​
 

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

Benzer konular

Geri
Üst Alt