HP/SP Absorbe fix

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Önceki çalışma mantığı >
Efsun varsa her hasarda %80 oranla aktif olur


Düzenlenmiş şekilde çalışma mantığı >
Efsun varsa her hasar efsun oranı % kaç ise o oranda aktif olur


%12 oran ile tek seferde 100-300 hp/sp emer
Koşullar düzenlendi, -(eksi) hp yada sp ile ölündüğünde kendi kendilerinden absorbe etme hatası vardı giderildi
FLY küçük olduğundan big olarak düzenlendi

xxxx.jpg




*char_battle.cpp

Arat:
Kod:
if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && number(0, 4) > 0) // 80% È®·ü { int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100; if (i) { CreateFly(FLY_HP_SMALL, pAttacker); pAttacker->PointChange(POINT_HP, i); } } // Ä¥ ¶§¸¶´Ù SPȸº¹ if (pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) && number(0, 4) > 0) // 80% È®·ü { int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100; if (i) { CreateFly(FLY_SP_SMALL, pAttacker); pAttacker->PointChange(POINT_SP, i); } }[/FONT]


Değiştir:
Kod:
int iAbsoHP_ptr = pAttacker->GetPoint(POINT_HIT_HP_RECOVERY); if (iAbsoHP_ptr) { if (number(1, 100) <= iAbsoHP_ptr) { int iHPAbso = MIN(dam, GetHP()) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100; if ((pAttacker->GetHP() > 0) && (pAttacker->GetHP() + iHPAbso < pAttacker->GetMaxHP()) && (GetHP() > 0) && (iHPAbso > 0)) { CreateFly(FLY_HP_BIG, pAttacker); pAttacker->PointChange(POINT_HP, iHPAbso); } } } // Ä¥ ¶§¸¶´Ù SPȸº¹ int iAbsoSP_ptr = pAttacker->GetPoint(POINT_HIT_SP_RECOVERY); if (iAbsoSP_ptr) { if (number(1, 100) <= iAbsoSP_ptr) { int iSPAbso = MIN(dam, GetSP()) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100; if ((pAttacker->GetSP() > 0) && (pAttacker->GetSP() + iSPAbso < pAttacker->GetMaxSP()) && (GetSP() > 0) && (iSPAbso > 0)) { CreateFly(FLY_SP_BIG, pAttacker); pAttacker->PointChange(POINT_SP, iSPAbso); } } }


*Not:
Kod:
[COLOR=#333333][FONT=Verdana]POINT_ERROR:[/FONT][/COLOR]
şeklinde syserr alırsanız aşağıdaki işlemi yapın;

*char.cpp açın
Bul:
Kod:
[COLOR=#333333][FONT=Verdana]sys_err("POINT_ERROR: %s type %d val %d (max: %d)", GetName(), val, max_val);[/FONT][/COLOR]

Değiştir:
Kod:
[COLOR=#333333][FONT=Verdana]sys_err("POINT_ERROR: %s type %d val %d (max: %d)", GetName(), type, val, max_val);[/FONT][/COLOR]

HP/SP Absorbe Sistemi Düzeltme Rehberi - Metin2 Geliştirici Kaynağı

Metin2 özel sunucularında karşılaşılan yaygın sorunlardan birisi HP/SP Absorbe sistemlerinin doğru çalışmayışıdır. Bu durum özellikle PvP odaklı sistemlerde ciddi performans ve deneyim düşüşüne neden olabilir. Bu yazıda Metin2Lobby olarak, HP/SP absorbe mekanizmasının nasıl düzeltileceği konusunda detaylı bilgi sunuyoruz.

HP/SP Absorbe Nedir?

HP/SP Absorbe, oyuncuların hasar verirken belirli bir yüzdesini kendi canına veya mana değerine aktarabilmesini sağlayan bir özelliktir. Bu sistem, savaş sırasında dayanıklılığı artırmak için sıklıkla tercih edilir. Ancak bazı özel sunucu kaynaklarında bu sistem eksik veya yanlış implemente edilmiş olabilir.

Sorunun Temeli

HP/SP Absorbe düzeltmelerinde en çok karşılaşılan hata, absorbe yüzdesinin hesaplanmasında yaşanan mantık eksiklikleridir. Özellikle C++ tabanlı sunucu kaynaklarında bu hesaplama sırasında taşma (overflow) veya negatif değerler oluşabilmektedir.

C++ Kaynak Kodlarında HP/SP Absorbe Düzeltme

Absorbe sisteminin düzgün çalışması için Game Core dosyalarında yer alan DamageHandler sınıfında değişiklik yapılması gerekir. Öncelikle, hasar verildiğinde absorbe miktarının doğru şekilde hesaplanması sağlanmalıdır.

Örnek olarak, hasar miktarı alındıktan sonra absorbe yüzdesiyle çarpılır ve 100'e bölünür. Bu işlem sırasında integer overflow engellenmelidir. Ayrıca, absorbe miktarı HP veya SP miktarını aşmamalıdır.

Python GUI ve Uiscript Entegrasyonu

Py Root üzerinde çalışan GUI sistemlerinde, absorbe değerlerinin doğru şekilde gösterimi için Uiscript dosyalarında gerekli güncellemeler yapılmalıdır. Bu, oyuncuların gerçek zamanlı olarak absorbe oranlarını takip edebilmesini sağlar.

Yanlış Uygulamalardan Kaçının

Eski sistemlerde absorbe, genellikle sadece SP'ye aktarılırdı. Ancak modern sistemlerde HP'ye de aktarılması istenebilir. Bu ayrımı yaparken dikkatli olunmalı ve DB Core üzerinden de bu bilgi tutulmalıdır.

Test ve Doğrulama

Değişiklikler yapıldıktan sonra, hem Auth hem de Game sunucusu üzerinde testler yapılmalıdır. Bu testler sırasında farklı itemlerle ve karakter seviyeleriyle absorbe oranları kontrol edilmelidir.

Sonuç

HP/SP Absorbe sisteminin düzgün çalışması, oyuncu deneyimini ciddi anlamda artırır. Bu sistemin doğru implementasyonu için hem Client Src hem de Server Src üzerinde çalışmak gerekir. Metin2Lobby olarak, bu tür sistemlerin geliştirilmesinde size rehberlik etmeye devam edeceğiz.


HP/SP Absorbe Fix Guide - Metin2 Developer Resource

One of the common issues encountered in Metin2 private servers is the malfunctioning of HP/SP Absorbe systems. This situation can cause significant performance and experience drops, especially in PvP-oriented systems. In this article, Metin2Lobby provides detailed information on how to fix the HP/SP absorbe mechanism.

What is HP/SP Absorbe?

HP/SP Absorbe is a feature that allows players to transfer a certain percentage of damage dealt back to their own health or mana. This system is frequently used to enhance survivability during combat. However, in some private server sources, this system may be incomplete or incorrectly implemented.

Root of the Problem

The most common error in HP/SP Absorbe fixes occurs during the calculation phase, where logical flaws exist. Especially in C++ based server sources, overflow or negative values can occur during the calculation process.

Fixing HP/SP Absorbe in C++ Source Code

To ensure the Absorbe system works correctly, modifications must be made to the DamageHandler class in the Game Core files. Initially, the amount of absorbe should be correctly calculated after receiving the damage value.

As an example, after obtaining the damage value, it is multiplied by the absorbe percentage and divided by 100. Integer overflow must be prevented during this operation. Additionally, the absorbe amount should not exceed the HP or SP limits.

Python GUI and Uiscript Integration

In GUI systems running on Py Root, necessary updates should be made in Uiscript files to properly display absorbe values. This allows players to track absorbe rates in real-time.

Avoid Incorrect Implementations

In older systems, absorbe was usually only applied to SP. However, in modern systems, it may also be desired for HP absorption. When making this distinction, care must be taken and this information should also be tracked via DB Core.

Testing and Validation

After changes are made, tests must be conducted on both Auth and Game servers. During these tests, absorbe values should be checked with various items and character levels.

Conclusion

Proper functioning of the HP/SP Absorbe system significantly enhances player experience. Correct implementation of this system requires work on both Client Src and Server Src. As Metin2Lobby, we will continue to guide you in the development of such systems.
 

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

Benzer konular

Geri
Üst Alt