Yapılan Bug
Fix
Fix
src/Server/game/common/service.h
aç
Kod:
#define ENABLE_YMIR_AFFECT_FIX
ekle
src/Server/game/src/input_login.cpp
aç
Kod:
ch->StartCheckSpeedHackEvent();
arat
ekle
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
src/Server/game/src/char.h
aç
Kod:
const char * GetName() const;
arat
ekle
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
src/Server/game/src/char_item.cpp
aç
Kod:
int CalculateConsumeSP(LPCHARACTER lpChar)
arat
ekle değiştir
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Kod:
case USE_ABILITY_UP:
arat
ekle
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Kod:
case USE_AFFECT : {
arat
ekle
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Kod:
sys_log(0,"ITEM_BLEND!!");
arat
ekle
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
iyi forumlar.
C++ ile Metin2 At Skill Bug Fixleme
Metin2 özel sunucularında geliştirme yaparken karşılaşılan en yaygın sorunlardan birisi At Skill mekanizmasında ortaya çıkan buglardır. Bu hatalar, oyuncuların yetenek puanlarını atamalarını engeller veya hatalı atamalara neden olabilir. Bu yazıda, C++ tabanlı Metin2 server source üzerinde At Skill komutu ile ilgili meydana gelen hataları nasıl düzelteceğinizi adım adım anlatacağız.
At Skill Mekanizması Nedir?
At Skill, oyuncunun belirli bir yetenek puanını artırmasına yarayan komuttur. Genellikle PvP sunucularda geliştirici tarafından test edilmesi veya özel durumlarda oyuncuya yardımcı olunması için kullanılır. Ancak, bazı durumlarda bu komut doğru şekilde işlenmezse, yetenek ataması yapılamaz ya da istenmeyen yetenekler artar.
Ortaya Çıkabilecek Hatalar
- Yetenek ataması yapılmaması
- Yanlış yetenek puanı artışı
- Yetenek limitlerinin kontrol edilmemesi
- Oyuncunun yetenek puanı eksiltilmesi
- Sunucuda yetenek ataması sırasında çökme
Bu tür hatalar, game server üzerindeki C++ kaynak kodlarında yer alan yetenek sistemine dair mantıksal hatalardan kaynaklanabilir. Bu nedenle, source edit yaparken özellikle char.cpp, char_skill.cpp ve input_main.cpp gibi dosyalarda yapılan kontroller önemlidir.
Bug Fixlemeye Giriş
At Skill komutunun işleyişini kontrol etmek için öncelikle game server kaynak kodunda yer alan cmd_at_skill fonksiyonuna bakmalısınız. Bu fonksiyon genellikle input_main.cpp dosyasında yer alır. Burada şu kontrolleri yapmanız önerilir:
1. Yetenek ID Kontrolü: Girilen yetenek ID numarasının geçerli olup olmadığını kontrol edin. Geçersiz bir ID girildiğinde işlemi iptal edin.
2. Yetenek Limit Kontrolü: Oyuncunun yeteneğe ulaşabileceği maksimum seviyeyi kontrol edin. Eğer yetenek zaten maksimumdaysa, artırmayı engelleyin.
3. Yetenek Puanı Kontrolü: Oyuncunun yeterli puanı var mı diye kontrol edin. Eğer puan yoksa yetenek ataması yapmayın.
4. Yetenek Arttırma Mantığı: Yeteneği artırırken doğrudan DB'ye yazmadan önce karakterin bellekteki yetenek seviyesini güncelleyin. Ardından DB’ye yazın.
Örnek Kod Parçası
Kod:
void CHARACTER::CmdAtSkill(LPCHARACTER ch, const char * c_pData) {[BR][/BR] if (!ch || !c_pData) return;[BR][/BR][BR][/BR] int skill_id = atoi(c_pData);[BR][/BR] if (skill_id <= 0 || skill_id > MAX_SKILL_ID) {[BR][/BR] ChatPacket(ch->GetDesc(), CHAT_TYPE_INFO, 'Geçersiz yetenek ID!');[BR][/BR] return;[BR][/BR] }[BR][/BR][BR][/BR] // Yetenek seviyesi kontrolü[BR][/BR] if (GetSkillLevel(skill_id) >= SKILL_MAX_LEVEL) {[BR][/BR] ChatPacket(ch->GetDesc(), CHAT_TYPE_INFO, 'Yetenek zaten maksimum seviyede!');[BR][/BR] return;[BR][/BR] }[BR][/BR][BR][/BR] SetSkillLevel(skill_id, GetSkillLevel(skill_id) + 1);[BR][/BR] Save();[BR][/BR]}
Test Etme ve Debugging
Fixleme işleminden sonra mutlaka compile işlemi gerçekleştirip test sunucusunda bu komutu çalıştırarak hataları gözlemleyin. Gerekirse loglama ekleyerek yetenek atamalarını takip edin. Hata oluşursa core dosyasını inceleyerek çökme sebebini analiz edin.
Metin2 Lobby olarak, bu tarz sistemsel hata düzeltmeleri konusunda tecrübeli geliştiricilerle çalışarak Metin2 Development dünyasına katkı sunuyoruz. Sizler de kendi server src projelerinizde bu fixleri uygulayarak daha kararlı bir PvP deneyimi sunabilirsiniz.
C++ At Skill Bug Fixing
In Metin2 private servers, one of the most common issues encountered during development is bugs related to the At Skill mechanism. These errors can prevent players from assigning skill points or cause incorrect assignments. In this article, we will explain step-by-step how to fix errors that occur with the At Skill command on C++-based Metin2 server source.
What Is The At Skill Mechanism?
At Skill is a command that allows a player to increase a specific skill point. It is commonly used in PvP servers for testing by developers or to assist players in special cases. However, if this command is not processed correctly, skill assignment may fail or unwanted skills might be increased.
Possible Errors
- Skill assignment not being applied
- Incorrect skill point increase
- Skill limits not being checked
- Player's skill points being decreased
- Server crash during skill assignment
Such errors stem from logical mistakes within the skill system found in C++ source code files of the game server. Therefore, when performing source edit, particular attention must be paid to files such as char.cpp, char_skill.cpp, and input_main.cpp.
Getting Started With Bug Fixing
To check the functionality of the At Skill command, you should first examine the cmd_at_skill function located in the input_main.cpp file. The following checks are recommended:
1. Skill ID Check: Verify if the entered skill ID number is valid. Cancel the operation if an invalid ID is provided.
2. Skill Limit Check: Check whether the character has reached the maximum level for the given skill. If so, prevent further increases.
3. Skill Point Check: Confirm whether the player has enough points to assign. Do not proceed if insufficient points exist.
4. Skill Increase Logic: Before directly writing to the database, update the skill level in memory. Then save it to the DB.
Sample Code Fragment
Kod:
void CHARACTER::CmdAtSkill(LPCHARACTER ch, const char * c_pData) {[BR][/BR] if (!ch || !c_pData) return;[BR][/BR][BR][/BR] int skill_id = atoi(c_pData);[BR][/BR] if (skill_id <= 0 || skill_id > MAX_SKILL_ID) {[BR][/BR] ChatPacket(ch->GetDesc(), CHAT_TYPE_INFO, 'Invalid skill ID!');[BR][/BR] return;[BR][/BR] }[BR][/BR][BR][/BR] // Skill level check[BR][/BR] if (GetSkillLevel(skill_id) >= SKILL_MAX_LEVEL) {[BR][/BR] ChatPacket(ch->GetDesc(), CHAT_TYPE_INFO, 'Skill already at max level!');[BR][/BR] return;[BR][/BR] }[BR][/BR][BR][/BR] SetSkillLevel(skill_id, GetSkillLevel(skill_id) + 1);[BR][/BR] Save();[BR][/BR]}
Testing and Debugging
After applying the fixes, ensure to compile and test the command on your test server. Add logging if necessary to track skill assignments. If a crash occurs, inspect the core file to analyze the cause of failure.
Metin2 Lobby contributes to the Metin2 Development world by working with experienced developers in fixing such systematic errors. You too can apply these fixes to your own server src projects to provide a more stable PvP experience.
