/level komutu ile level verince Skillerin sıfırlanması 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 34

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
merhaba arkadaşlar genellikle bazı insanlar bunu problem olarak biliyor ama problem değil


herneyse bu şekilde olmamasını istiyenler için


cmd_gm.cpp açılır

aratılır

Kod:
ACMD(do_level)


Kod Blogu içerisindeki

YDb7y2.png


Kod:
ch->ClearSkill();     ch->ClearSubSkill();

bu kısımlar silinir ve build edip kullanın
/level komutu ile level verince Skillerin sıfırlanması Fix
Metin2 özel sunucularında geliştirme yaparken, bazen oyun içi seviye yükseltme işlemlerinde [/B]/level komutu gibi yetkili komutları kullanmak gerekir.
Bu komut sayesinde oyuncuya hızlıca belirli bir seviye kazandırılabilir. Ancak bu işlem sırasında bazı durumlarda oyuncunun mevcut skill (beceri) değerleri sıfırlanabilmektedir.
Bu durum kullanıcı deneyimi açısından ciddi bir sorundur çünkü oyuncu seviye atladığında becerilerinin korunmasını bekler.

Sorunun Neden Kaynağı?
Genellikle
/level komutunun içeriğinde, oyuncunun level artışı sırasında skill puanlarının yeniden hesaplanması veya sıfırlanması için bir tetikleyici vardır.
Sunucu tarafında tanımlanan
char_set_level fonksiyonu veya benzeri işlemler sırasında skill değerlerine müdahale edilip, skill point’ler sıfırlanabilmektedir.
Bu durum özellikle
game server tarafında geliştirilen sistemlerde dikkat edilmesi gereken bir detaydır.

Fix Uygulaması
Bu hatayı düzeltmek için
game sunucusunda yer alan char_manager.cpp veya char.cpp dosyasında SetLevel fonksiyonunun kontrol edilmesi gerekir.
Bu fonksiyonda
PointChange(POINT_SKILL_POINT...) satırı, seviye yükseldiğinde skill point’in sıfırlanmasına neden oluyorsa, bu satırın değiştirilmesi veya kaldırılması gerekebilir.
Ancak bu işlemi yaparken, skill point’in doğru şekilde güncellenmesi için alternatif bir mantık kurulmalıdır.

Alternatif Çözüm Önerisi
Bir başka çözüm ise,
/level komutu çalıştırılırken mevcut skill point miktarının bir geçici değişkende saklanıp, level değişikliği tamamlandıktan sonra eski skill point değerinin tekrar atanmasıdır.
Bu yöntem daha güvenlidir çünkü skill değerlerini korurken level atlamasını da sağlar.
Örnek olarak,
PyCallClassMemberFunc fonksiyonu içinde GetSkillLevel() değerleri alınabilir ve SetSkillLevel() ile geri yazılabilir.

Python ve C++ Entegrasyonu
Eğer sistem
py root ve uiscript üzerinden yönetiliyorsa, client tarafında python gui ile bir kontrol paneli geliştirilerek, yetkililerin /level komutunu kullanırken skill sıfırlama riskini önleyecek arayüzler oluşturulabilir.
Ayrıca
auth server ve db bağlantısında skill verileri tutulup, level atlamalarında karşılaştırma yapılabilir.

Dikkat Edilmesi Gerekenler
Bu tür düzeltmeler sırasında,
source edit yaparken orijinal dosyaların yedeklerinin alınması önemlidir.
Ayrıca
compile işlemi sonrasında test sunucusunda bu değişikliğin doğrudan canlıya alınmadan denenmesi gerekir.
Hatalı bir değişiklik,
game sunucusunun çökmesine veya oyuncu verilerinin bozulmasına neden olabilir.

Sonuç
/level komutu ile seviye verilirken skill sıfırlanması sorunu, özellikle
Metin2 development sürecinde sıkça karşılaşılan bir durumdur.
Doğru analiz ve düzeltme ile bu sorun kolayca çözülebilir. Bu fix,
server src üzerinde yapılacak küçük değişikliklerle büyük fayda sağlar ve oyuncu memnuniyetini artırır.


Fix for Skill Reset When Giving Level via /level Command
When developing private Metin2 servers, sometimes it becomes necessary to use admin commands like

/level to quickly grant a specific level to a player.
However, during this process, in some cases, the player's current skill values may reset. This is a significant issue from a user experience standpoint, since players expect their skills to remain intact after leveling up.

What Causes the Problem?
Often, the internal logic of the
/level command includes triggers that recalculate or reset skill points when the player's level increases.
Functions such as
char_set_level on the server side may interfere with skill values and reset skill points upon level gain. This detail must be carefully considered in systems developed on the game server side.

Implementing the Fix
To resolve this issue, you should inspect the
SetLevel function in files such as char_manager.cpp or char.cpp on the game server.
If the line
PointChange(POINT_SKILL_POINT...) causes skill points to reset when leveling up, this line should either be modified or removed.
However, while doing so, an alternative logic must be implemented to ensure that skill points are updated correctly.

Alternative Solution Suggestion
Another solution is to temporarily store the player’s current skill points before executing the
/level command, then restore the previous skill point value after the level change is completed.
This method is safer because it preserves skill values while still allowing the level increase to occur.
For instance,
GetSkillLevel() can be used within the PyCallClassMemberFunc function, and the values can be written back using SetSkillLevel().[/B]

Python and C++ Integration
If the system is managed through [/B]py root and uiscript, a control panel can be developed on the client side using python gui to allow administrators to use the /level command without risking skill resets.
Additionally, skill data stored in the
auth server and db connections can be compared during level-ups.

Important Considerations
During such fixes, it's crucial to back up original files when performing
source edit operations.
Furthermore, after the
compile process, these changes should be tested on a test server before being deployed live.
Incorrect modifications could cause the
game server to crash or corrupt player data.

Conclusion
The skill reset issue when giving levels via the /level command is a common problem encountered during
Metin2 development processes.
With proper analysis and fixes, this issue can easily be resolved. This fix provides significant benefits through small modifications to the
server src and enhances overall player satisfaction.
 

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

Benzer konular

Geri
Üst Alt