[C++ Python] Lycan tamamiyle kaldırma.

  • 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
Merhaba forumda geliştirici arkadaşlar varmış global chat için bile 2 satır kod için bile full src full pack :D paylaşan neyse konuyu saptırmayacağım.

1. input_main.cpp açın.

Kod:
if (ch->GetJob() == JOB_WOLFMAN && bArg >= 16 && bArg <= 20)

Bunu aratın.

Kod:
if (ch->GetJob() == JOB_WOLFMAN && bArg >= 16 && bArg <= 20) { return false; }

Bu satırı komple source içerisinden silin.

Kod:
if (CheckSpeedHack && ComboInterval < ch->GetValidComboInterval() - COMBO_HACK_ALLOWABLE_MS)

bu satırı aratın.

Kod:
if (ch->GetJob() == JOB_WOLFMAN && Calc - ComboInterval < 400)                 {                     return false;                 }

Komple kaldırın bu kısmı. Buradaki işimiz bitti.

2. input_login.cpp açın.

Kod:
case MAIN_RACE_WOLFMAN_M: *ret_job = JOB_WOLFMAN; break;

Şu kısmı bulup kaldırın.

Kod:
if (g_bEnableNewKingdomForWolfman && race == 8)

bunu aratın tekrardan.

Kod:
//table->x        = CREATE_START_X(bEmpire) + number(-300, 300); //    table->y        = CREATE_START_Y(bEmpire) + number(-300, 300);     if (g_bEnableNewKingdomForWolfman && race == 8)     {         table->x = 808274 + number(-300, 300);         table->y = 935090 + number(-300, 300);     }     else     {         table->x = CREATE_START_X(bEmpire) + number(-300, 300);         table->y = CREATE_START_Y(bEmpire) + number(-300, 300);     }

şöyle birr kodla karşılaşacaksınız büyük ihtimal sourcelerde farklılık gösterebilir ama ısaca kaldırmanız gereken yerleri görmüş olsanızda aynı yerlerde aramalar yaparak kaldırabilirsiniz ama farklılık göstermiyceğini düşünüyorum herkes kopyala yapıştır yapmış zaten .

aşağıdaki şekilde değiştirin o kod bloğunu.

Kod:
table->x        = CREATE_START_X(bEmpire) + number(-300, 300);     table->y        = CREATE_START_Y(bEmpire) + number(-300, 300);

buradaki işimizde bitti.

3. item.cpp açın.

Kod:
case JOB_WOLFMAN:

bu satırı aratın ve aşağıdaki kodu komple silin.

Kod:
case JOB_WOLFMAN: if (GetAntiFlag() & ITEM_ANTIFLAG_WOLFMAN) return false; break;

buradaki işimizde bitti.

4. item_manager.cpp gülme krizine girdim burdaki eklemeyi gördüğümde :D

Kod:
if (LC_IsKorea() || LC_IsYMIR())

şu satırı aratın. ve aşağıdaki kodları kaldırın.

Kod:
DWORD dwSkillVnumWolfman;

Kod:
dwSkillVnumWolfman = number(170, 175);                 CSkillProto * pkSki = CSkillManager::instance().Get(dwSkillVnumWolfman);                 if (!pkSki)                     continue;

Buradan bu lycan sistemini eklyeen arkadaşı tebrik ediyorum bu kadar uğraşmak yerine skiller için üstteki ymirin orjinal ekli koduna zaten 1, 111 yerine 1,175 yapsaydı olurdu çünkü zaten officalinde olan bir şey lycan karakteri neyse konumuza dönelim.

Kod:
__WOLFMAN_CHARACTER__

bu satırı aratın ve aşağıdaki şekilde değiştirin.

Kod:
#ifdef __WOLFMAN_CHARACTER__                         dwSkillVnum = number(221, 229); #else                         dwSkillVnum = number(221, 228); #endif                     }                     else                     { #ifdef __WOLFMAN_CHARACTER__                         dwSkillVnum = number(236, 244); #else                         dwSkillVnum = number(236, 243); #endif

son hali aşağıdaki gibi olcak ordaki satırın.
Kod:
if (number(1, 100) >= 70)                 {                     item->SetSocket(0, dwSkillVnum);                 }

Burda bir aksaklık çıkabilir sorun yaşanırsa belirtin bir daha kontrol ederim benim kontrol etme fırsatım yok bu kısmı. Sorun çıkarsa eğer buildlenirken veya oyun içerisinde skill atarken ch düşebilir veya syserr verebilir verdiğinde büyük ihtimal if sorgusu boş döndüğündendir konuyla ilgili oyun hakında bilgisi olan bir geliştirmeci haberdar ederse ne olduğunu o satırda tam olarak düzenlerim oyunla çok alakam yok çünkü. tahminimce skill targetleri wolfman skilleriyle ilgili birşey.

buradaki işimizde bitti arkadaşlar. Game kısmından tamamiyle lycan'ı kaldırdık zaten paylaşılan dosyalarda lycan sorunsuz ve eksiksiz değilmiş bugluymuş. :)


EK OLARAK DEVAMI :)

ani.cpp açın. Ve aşağıdaki kod bloklarını kaldırın.

Kod:
FN_NAME(WEAPON_CLAW);

Kod:
case WEAPON_CLAW:             strlcpy(format, "%s/%sclaw/combo_%02d.msa", sizeof(format));             break;

Kod:
case WEAPON_CLAW:

Kod:
case WEAPON_CLAW:             return "CLAW";

Kod:
FN_NAME(MAIN_RACE_WOLFMAN_M);

Kod:
case MAIN_RACE_WOLFMAN_M:

Kod:
case MAIN_RACE_WOLFMAN_M:             return "WOLFMAN_M";

ani.cpp ile işimiz bitti.


battle.cpp açın ve aşağıdaki kod bloklarını kaldırın.

Kod:
case JOB_WOLFMAN:                 iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_WOLFMAN)) / 100;                 break;

Kod:
case JOB_WOLFMAN:                 iAtk -= (iAtk * pkVictim->GetPoint(POINT_RESIST_WOLFMAN)) / 100;                 break;

Kod:
case WEAPON_CLAW:                 break;

Kod:
case WEAPON_CLAW:                 // iDam = iDam * (100 - pkVictim->GetPoint(POINT_RESIST_CLAW)) / 100;//orjinal pence sav                 iDam = iDam * (100 - pkVictim->GetPoint(POINT_RESIST_DAGGER)) / 100;//býcak sav oldu boyle                 break;

Kod:
else if (item && item->GetSubType() == WEAPON_CLAW)         real_speed /= 2;

Kod:
// BLEED     if (pkAttacker->GetPoint(POINT_BLEEDING_PCT) && !pkVictim->IsAffectFlag(AFF_BLEEDING) && !pkVictim->IsAffectFlag(AFF_POISON))     {         if (number(1, 100) <= pkAttacker->GetPoint(POINT_BLEEDING_PCT))             pkVictim->AttackedByBleeding(pkAttacker);     }

battle.cpp ile işimiz bitti.

char.cpp açın ve aşağıdaki kod bloklarını kaldırın.

Kod:
case POINT_BLEEDING_REDUCE:

Kod:
case WEAPON_CLAW:                 dwMode = MOTION_MODE_CLAW;                 break;

Kod:
if (GetJob() == JOB_WOLFMAN && m_iComboHackCount <= 20)         {             return;         }

Kod:
case JOB_WOLFMAN:                 iStatAtk = (2 * GetPoint(POINT_ST));                 break;

aşağıdaki sutunu şu şekilde değiştirin.

Kod:
case MAIN_RACE_WOLFMAN_M:             return SEX_MALE;

Kod:
return SEX_MALE;

Kod:
case MAIN_RACE_WOLFMAN_M:             m_points.job = MAIN_RACE_WOLFMAN_M;             break;

Kod:
case POINT_ATTBONUS_WOLFMAN:

Kod:
case POINT_BLEEDING_PCT:

char.cpp de işimiz bitti.

char_item.cpp açın ve aşağıdaki kod bloklarını değiştirin.

Kod:
case JOB_WOLFMAN:             if (item->GetAntiFlag() & ITEM_ANTIFLAG_WOLFMAN)                 return false;             break;

char_item.cpp ile işimiz bitti.

char_manager.cpp açın ve aşağıdaki kod bloklarını kaldırın.

Kod:
#define FIND_JOB_WOLFMAN_0    (1 << 15) #define FIND_JOB_WOLFMAN_1    (1 << 16) #define FIND_JOB_WOLFMAN    (FIND_JOB_WOLFMAN_0 | FIND_JOB_WOLFMAN_1)

char_manager.cpp ile işimiz bitti.

char_resist.cpp açın ve aşağıdakileri kaldırın.

Kod:
iRate = MAX(0, iRate - ch->GetPoint(POINT_BLEEDING_REDUCE));     return iRate;

char_resist.cpp ile işimiz bitti.

char_skill.cpp açın ve aşağıdakileri kaldırın.

Kod:
else if (m_pkSk->dwVnum == SKILL_GONGDAB)         {             float adjust = 1.0;             if (m_pkChr->GetWear(WEAR_WEAPON) && m_pkChr->GetWear(WEAR_WEAPON)->GetSubType() == WEAPON_CLAW)             {                 adjust = 1.35f;             }             iAmount = (int)(iAmount * adjust);         }

Kod:
case WEAPON_CLAW:                                 // iDam = iDam * (100 - pkChrVictim->GetPoint(POINT_RESIST_CLAW)) / 100;//orjinal pence sav                                 iDam = iDam * (100 - pkChrVictim->GetPoint(POINT_RESIST_DAGGER)) / 100;//Býcak sav oldu boyle                                 break;

char_skill.cpp ile işimiz bitti.

config.cpp açın ve şunu kaldırın.

Kod:
bool g_bEnableNewKingdomForWolfman = true;

Kod:
TOKEN("enable_new_kingdom_for_wolfman")         {             str_to_number(g_bEnableNewKingdomForWolfman, value_string);             continue;         }

config.cpp ile işimiz bitti.


ve sourceden tamamiyle kaldırdık. hayırlı uğurlu olsun eklemek isteyenler tam tersini yapabilirler.

Python olarak, kaldırmayıda ekleyecektim fakat elemiyorum çünkü config kodları mevcut en sağlıklısı o olacaktır.

root.epk & root.eix açın.

consinfo.py içerisinde:

Kod:
WOLF_MAN = "ENABLED"    # ENABLED/DISABLED WOLF_WOMEN = "ENABLED"    # ENABLED/DISABLED

Kısımlarını DISABLED yapın.


Lycan Sistemi Nedir ve Neden Kaldırılması Gerekir?

Metin2 özel sunucularında Lycan sistemi, oyuncuların belirli görevleri tamamlayarak kurtadam karakter sınıfına dönüşebildiği bir özelliktir. Bu sistem genellikle C++ ve Python dillerinde yazılmıştır. Ancak bazı sunucu sahipleri bu sistemin tamamen kaldırılmasını tercih eder. Bunun sebepleri arasında performans artırımı, oyun içi denge bozulması, güvenlik açıkları veya daha farklı bir karakter sistemi entegrasyonu olabilir. Bu nedenle Lycan sistemini tamamen kaldırmak isteyen geliştiriciler için bu rehberi hazırladık.

C++ Tarafında Lycan Sistemini Kaldırmak

Öncelikle game sunucusu tarafında C++ kodları üzerinden Lycan sistemiyle ilgili tüm fonksiyonlar ve sınıflar silinmelidir. Bu süreçte dikkat edilmesi gereken konular şunlardır:

- char.cpp, char.h, char_manager.cpp gibi dosyalarda bulunan Lycan ile ilgili tüm tanımlamalar kaldırılmalıdır.
- ClientManagerBase.cpp ve Cmd.cpp gibi dosyalarda Lycan komutlarını işleyen kodlar silinmelidir.
- Lua fonksiyonları içinde Lycan ile ilgili olanlar da temizlenmelidir.

Python Tarafında Lycan Sistemini Kaldırmak

Python tarafında Lycan sistemi genellikle uiscript ve py root dosyalarında bulunur. Bu dosyaları düzenlerken şu adımları takip etmeniz gerekir:

- uiLycanWindow.py, LycanDialog.py gibi UI dosyaları silinmelidir.
- root klasöründe Lycan ile ilgili tüm GUI öğeleri kaldırılmalıdır.
- pack dosyaları yeniden derlenmeli ve Lycan görselleri çıkarılmalıdır.

Database (DB) Tarafında Değişiklikler

Auth ve Game DB tablolarında Lycan ile ilgili alanlar varsa bu alanlar kaldırılmalıdır. Örneğin, karakterlerin Lycan seviyesi veya dönüşüm durumu gibi verileri tutulan alanlar temizlenmelidir. Bu işlem, hem performans artışı hem de veri bütünlüğü açısından önemlidir.

Sunucu Derleme ve Test Aşaması

Tüm silme işlemleri tamamlandıktan sonra Metin2 server src dosyaları yeniden derlenmelidir. Martysama gibi derleme araçları kullanılarak hata alınmadığından emin olunmalıdır. Derleme sonrası test aşamasında oyuncuların Lycan sistemine erişemediği doğrulanmalıdır. Ayrıca PvP sistemlerinde oluşabilecek olası çakışmalar kontrol edilmelidir.

Sonuç

Lycan sistemini tamamen kaldırmak, Metin2 özel sunucularında daha stabil ve özelleştirilebilir bir yapı kurmanıza yardımcı olur. Bu işlem, C++ ve Python dillerinde derinlemesine bilgi gerektirse de doğru adımlar izlenirse başarılı sonuçlar elde edilebilir. Metin2 development sürecinde bu tür değişiklikler yapmak, sunucunuzun benzersiz özellikler kazanmasına katkı sağlar.


What is the Lycan System and Why Should It Be Removed?

In Metin2 private servers, the Lycan system allows players to transform into werewolf characters by completing specific quests. This system is generally coded in C++ and Python. However, some server owners prefer to completely remove this system. Reasons for this may include performance improvements, gameplay balance issues, security vulnerabilities, or integration of different character systems. Therefore, we have prepared this guide for developers who wish to fully remove the Lycan system.

Removing the Lycan System on the C++ Side

Firstly, all functions and classes related to Lycan must be removed from the game server side through C++ code. Key points during this process include:

- All definitions related to Lycan in files like char.cpp, char.h, char_manager.cpp should be deleted.
- Commands handling Lycan in ClientManagerBase.cpp and Cmd.cpp should be removed.
- Any Lycan-related Lua functions must also be cleaned up.

Removing the Lycan System on the Python Side

On the Python side, the Lycan system is typically located in uiscript and py root files. When editing these files, follow these steps:

- Delete UI files such as uiLycanWindow.py, LycanDialog.py.
- Remove all GUI elements related to Lycan in the root folder.
- Rebuild the pack files and remove Lycan images.

Database (DB) Modifications

If there are fields related to Lycan in Auth and Game DB tables, they must be removed. For instance, fields storing character Lycan levels or transformation status should be cleared. This step is important both for performance and data integrity.

Server Compilation and Testing Phase[/BR]

After all deletion processes are completed, the Metin2 server src files must be recompiled. Ensure that no errors occur during compilation using tools like Martysama. In the testing phase after compilation, confirm that players cannot access the Lycan system. Additionally, check for potential conflicts with PvP systems.

Conclusion

Completely removing the Lycan system can help create a more stable and customizable structure in your Metin2 private server. Although this process requires deep knowledge in C++ and Python, successful results can be achieved if the correct steps are followed. Making such modifications during Metin2 development contributes to giving your server unique features.
 

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

Benzer konular

Geri
Üst Alt