[COMMON-GAME-CLİENT]Herkesin Aradığı Metin2 Lycan Ekleme

  • 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
Merhabalar . İnternette biraz dolaştım. Game bölümünü buldum. Sizin için paylaşacağım.

1.Source içerisinde common düzenlemeleri,

- item_length.h içerisinde “enum EWeaponSubTypes” aratıyoruz ve “WEAPON_CLAW,” ekliyoruz altına resimdeki gibi

zB5zaR.png



Yine item_length.h içerisinde “enum EItemAntiFlag” aratıyoruz ve altına ” ITEM_ANTIFLAG_WOLFMAN = (1 << 18),” ekliyoruz. Aşağıdaki resimdeki gibi.

ER81rg.png


common içerisinde length.h içerisinde “enum EJobs” aratıyoruz ve “JOB_WOLFMAN,” ekliyoruz resimdeki gibi.

G0RrBb.png


Yine length.h içerisinde “EApplyTypes” aratıyoruz ve en alta ekliyoruz aşağıdakileri;
APPLY_ATTBONUS_WOLFMAN,
APPLY_RESIST_WOLFMAN,
APPLY_RESIST_CLAW,

vp5BbA.png

Şimdi game src içerisinden ani.cpp açıyoruz.

“const char* FN_weapon_type(int weapon)” aratıyoruz ve altına “FN_NAME(WEAPON_CLAW);” ekliyoruz. Aşağıdaki resimdeki gibi

6XPzbN.png


*** DWORD m_speed[MAIN_RACE_MAX_NUM][2][WEAPON_NUM_TYPES][9];*** aratıyoruz * lar YOK! buradaki 9’u 10 yapıyoruz.
Yine ani.cpp içerisindeyiz. “bool ANI::load()” aratıyoruz. ve "data/pc3/wolfman" // Wolfman(Male) ekliyoruz altına aşağıdaki resimdeki gibi tırnak içerisinde olacak dikkat!
RPk5vj.png


“switch (weapon)” aratıyoruz. ve altına resimdeki gibi ekliyoruz.
case WEAPON_CLAW:
strlcpy(format, “%s/%sclaw/combo_%02d.msa”, sizeof(format));
break;

RPk5Z6.png


“DWORD ANI::attack_speed(int race, int weapon, BYTE combo, bool horse)” aratıyoruz ve altına “case MAIN_RACE_WOLFMAN_M:” ekliyoruz.

0Bn569.png


Hemen altındaki “switch (weapon)” altına “case WEAPON_CLAW:” ekliyoruz.

7NgG3W.png


“const char* FN_race_string(int race)” aratıyoruz ve altına ” case MAIN_RACE_WOLFMAN_M: return “WOLFMAN_M”;” ekliyoruz.

LnAqmZ.png


“const char* FN_weapon_string(int weapon)” aratıyoruz altına “case WEAPON_CLAW: return “CLAW”;” ekliyoruz.
LnAqrZ.png


for (BYTE combo = 0; combo <= 8; ++combo) buradaki 8’i 9 yapıyoruz.
for (BYTE combo = 1; combo <= 8; ++combo) buradaki 8’i 9 yapıyoruz.
if (NULL == item || combo > 8) aratıyoruz buradaki 8’i 9 yapıyoruz.
ani.cpp ile işlerimiz bitti.
Şimdi battle.cpp açıyoruz.
” iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_SHAMAN)) / 100;” aratıyoruz. Altına aşağıdakini ekliyoruz.
case JOB_WOLFMAN:
iAtk += (iAtk * pkAttacker->GetPoint(POINT_ATTBONUS_WOLFMAN)) / 100;
break;

LnAqV0.png


Hemen altında aşağıdaki kodu aratıyor ve altına ekliyoruz.
iAtk -= (iAtk * pkVictim->GetPoint(POINT_RESIST_SHAMAN)) / 100;

Altına ekleyeceğimiz kod:
case JOB_WOLFMAN:
iAtk -= (iAtk * pkVictim->GetPoint(POINT_RESIST_WOLFMAN)) / 100;
break;
zB5z6R.png


“int CalcMeleeDamage(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, bool bIgnoreDefense, bool bIgnoreTargetRating)” aratıyoruz ve altına “case WEAPON_CLAW:” ekliyoruz.

y35OYN.png

“int battle_hit(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, int & iRetDam)” aratıyoruz altına
case WEAPON_CLAW:
iDam = iDam * (100 – pkVictim->GetPoint(POINT_RESIST_CLAW)) / 100;
break;
ekliyoruz.

N1AQyL.png


DWORD GET_ATTACK_SPEED(LPCHARACTER ch) aratıyoruz altına
else if (item && item->GetSubType() == WEAPON_CLAW)
real_speed /= 2;
ekliyoruz resimdeki gibi.

aG37J7.png




--- Şimdi bluedragon_skill.h açıyoruz ve aşağıdaki işlemleri yapıyoruz.

“void operator()(LPENTITY ent)” aratıyoruz. “case JOB_WOLFMAN: ptr = “wolf”; break;” ekliyoruz resimdeki gibi.

Dd2jkl.png


“if (ch->GetJob() == Set2)” aratıyoruz ve altına “case JOB_WOLFMAN: ptr = “wolf”; break;” ekliyoruz.

ER8jzq.png


“if (ch->GetJob() == Set1)” aratıyoruz ve altına “case JOB_WOLFMAN: ptr = “wolf”; break;” ekliyoruz.

Ak7jEQ.png


“if (ch->GetJob() == Set2)” aratıyoruz.(Uyarı aynı dosya içerisinde 2. defa ekliyoruz) Altına “case JOB_WOLFMAN: ptr = “wolf”; break;” ekliyoruz.

kWB5jv.png


Genel toplamda 4 defa ekleme işlemi yaptık ve burada işimiz tamamlandı.

affect.h açıyoruz.
“enum EAffectTypes” aratıyoruz. “AFFECT_BLEEDING = 305,” ekliyoruz altına

gW8QyL.png


“enum EAffectBits” aratıyoruz altına “AFF_BLEEDING,” ekliyoruz bir önceki resimdeki gibi ve burada da işimiz tamamlandı.
char.cpp açıyoruz.
“m_pkFireEvent = NULL;” aratıyoruz ve hemen altına “m_pkBleedEvent = NULL;” ekliyoruz.
“m_bHasPoisoned = false;” aratıyoruz ve hemen altına ” m_bHasBleed = false;” ekliyoruz.

YNkoJz.png

“event_cancel(&m_pkFireEvent);” aratıyoruz ve hemen altına ” event_cancel(&m_pkBleedEvent);” ekliyoruz.

vp53nR.png


“bool CHARACTER::ChangeSex()” aratıyoruz ve altına aşağıdakini ekliyoruz.
case MAIN_RACE_WOLFMAN_M:
m_points.job = MAIN_RACE_WOLFMAN_M;
break;

291p1j.png


“void CHARACTER::ComputeBattlePoints()” aratıyoruz. “case JOB_WOLFMAN:” ekliyoruz aşağıda resimdeki gibi.

G0RjR6.png


Şeklinde ekliyoruz burada fark ettiyseniz karakter atakları için savaşçı, sura ve wolf ayarları standart yani statüler savaşçı, sura ve wolf için aynı olacak zeka vs. önemli değil wolf için burayı kendinize göre düzenleyebilirsiniz.
“EVENTFUNC(recovery_event)” aratıyoruz ve altından bunu buluyoruz ” if (ch->IsAffectFlag(AFF_POISON))” değiştiriyoruz ” if (ch->IsAffectFlag(AFF_POISON) || ch->IsAffectFlag(AFF_BLEEDING))” ile.
” if (ch->IsAffectFlag(AFF_POISON) == true)” aratıyoruz ve ” if (ch->IsAffectFlag(AFF_POISON) || ch->IsAffectFlag(AFF_BLEEDING))” ile değiştiriyoruz.
“DWORD CHARACTER::GetMotionMode() const” aratıyoruz. Aşağıdakini ekliyoruz.
case WEAPON_CLAW:
dwMode = MOTION_MODE_CLAW;
break;
LnAj3j.png


“case POINT_ATTBONUS_SHAMAN:” aratıyoruz hemen altına ” case POINT_ATTBONUS_WOLFMAN:” ekliyoruz.
“case POINT_POISON_PCT:” aratıyoruz hemen altına ” case POINT_BLEEDING_PCT:” ekliyoruz.

Dd2j3O.png


“case POINT_RESIST_BOW:” aratıyoruz hemen altına ” case POINT_RESIST_CLAW:” ekliyoruz.
“case POINT_POISON_REDUCE:” aratıyoruz hemen altına ” case POINT_BLEEDING_REDUCE:” ekliyoruz.

6XPjrP.png

“case POINT_RESIST_SHAMAN :” aratıyoruz hemen altına ” case POINT_RESIST_WOLFMAN :”ekliyoruz üstteki resimdeki gibi.
“case APPLY_MELEE_MAGIC_ATTBONUS_PER:” aratıyoruz altına
case APPLY_ATTBONUS_WOLFMAN:
case APPLY_RESIST_WOLFMAN:
case APPLY_RESIST_CLAW:
case APPLY_BLEEDING_PCT:
case APPLY_BLEEDING_REDUCE:
ekliyoruz.
ZEklOV.png


“ESex GET_SEX(LPCHARACTER ch)” aratıyoruz altına ” case MAIN_RACE_WOLFMAN_M:” ekliyoruz.

4MrNGA.png


char.cpp ile işimiz bitti.
Şimdi char.h açıyoruz.
Bu kısımın resmini toplu olarak paylaşacağız.
“MAIN_RACE_SHAMAN_M,” aratıyoruz ve altına ” MAIN_RACE_WOLFMAN_M,” ekliyoruz.
“POISON_LENGTH = 30,” aratıyoruz ve altına “BLEEDING_LENGTH = 25,” ekliyoruz.
“DAMAGE_TYPE_POISON,” aratıyoruz ve altına ” DAMAGE_TYPE_BLEEDING,” ekliyoruz.
“POINT_RESIST_PENETRATE = 137,” aratıyoruz. Altına aşağıdakileri ekliyoruz.
POINT_ATTBONUS_WOLFMAN,
POINT_RESIST_WOLFMAN,
POINT_RESIST_CLAW,
POINT_BLEEDING_PCT,
POINT_BLEEDING_REDUCE,
“void RemoveFire();” aratıyoruz ve altına aşağıdakileri ekliyoruz.
void AttackedByBleed(LPCHARACTER pkAttacker);
void RemoveBleed();
ekliyoruz.
“LPEVENT m_pkFireEvent;” aratıyoruz ve altına ” LPEVENT m_pkBleedEvent;” ekliyoruz.
“bool m_bHasPoisoned;” aratıyoruz altına ” bool m_bHasBleed;” ekliyoruz.

XXkZP3.png

ve char.h ile de işimiz bitti.

Game src içerisinde char_affect.cpp açıyoruz.

“void CHARACTER::RemoveGoodAffect()” aratıyoruz alta
RemoveAffect(SKILL_JEOKRANG);
RemoveAffect(SKILL_CHEONGRANG);
ekliyoruz.
“bool CHARACTER::IsGoodAffect(BYTE bAffectType)” aratıyoruz altına
case (SKILL_JEOKRANG):
case (SKILL_CHEONGRANG):
ekliyoruz.
“void CHARACTER::RemoveBadAffect()” aratıyoruz altına
RemoveBleed();
ekliyoruz. Aşağıdaki resimdeki gibi sıralaması mevcuttur.

VMajDv.png


Burada işlemimiz tamamlandı. Şimdi char_battle.cpp açıyoruz.
” enum DamageFlag” aratıyoruz altına “DAMAGE_BLEEDING = (1 << 6),” ekliyoruz.

9dojNZ.png

“if (type == DAMAGE_TYPE_POISON)” aratıyoruz ” if (type == DAMAGE_TYPE_POISON || type == DAMAGE_TYPE_BLEEDING)” değiştiriyoruz.

7NgjaL.png


“if (type == DAMAGE_TYPE_POISON)” aratıyoruz ve altına
else if (type == DAMAGE_TYPE_BLEEDING)
damageFlag = DAMAGE_BLEEDING;
ekliyoruz resimdeki gibi.

VMajQB.png

Burada işimiz bitti. Şimdi char_item.cpp açıyoruz ve “bool CHARACTER::CanEquipNow(const LPITEM item, const TItemPos& srcCell, const TItemPos& destCell)” aratıyoruz ve aşağıdaki komutu ekliyoruz resimdeki gibi
case JOB_WOLFMAN:
if (item->GetAntiFlag() & ITEM_ANTIFLAG_WOLFMAN)
return false;
break;

3qLkgp.png


Burada işimiz bitti char_manager.cpp açıyoruz. Şimdi “bool CHARACTER_MANAGER::GetCharactersByRaceNum(DWORD dwRaceNum, CharacterVectorInteractor & i)” aratıyoruz.
#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)
ekliyoruz resimdeki gibi.

nWM4yB.png


Şimdi char_resist.cpp açıyoruz ve “ChatPacket(CHAT_TYPE_PARTY, “<IMMUNE_FAIL> (%s) NO_IMMUNE_FLAG”, GetName());” aratıyoruz ve altındaki kısımı silip yani return false kısmını vs. silip aşağıdaki kodu yapıştırıyoruz aynen.

Şimdi sırada char_skill.cpp var.

“switch (m_pkSk->bSkillAttrType)” aratıyoruz altına
case WEAPON_CLAW:
iDam = iDam * (100 – pkChrVictim->GetPoint(POINT_RESIST_CLAW)) / 100;
break;
ekliyoruz.

291pAj.png

“if (IS_SET(m_pkSk->dwFlag, SKILL_FLAG_SLOW | SKILL_FLAG_STUN | SKILL_FLAG_FIRE_CONT” aratıyoruz ve sonuna “| SKILL_FLAG_BLEEDING” ekliyoruz son hali aşağıdaki gibi olacaktır.
if (IS_SET(m_pkSk->dwFlag, SKILL_FLAG_SLOW | SKILL_FLAG_STUN | SKILL_FLAG_FIRE_CONT | SKILL_FLAG_POISON | SKILL_FLAG_BLEEDING))
“else if (IS_SET(m_pkSk->dwFlag, SKILL_FLAG_POISON))” aratıyoruz ve altındaki süslü parantez içlerini siliyor ve aşağıdakileri ekliyoruz.
if (number(1, 100) <= iPct && !pkChrVictim->IsAffectFlag(AFF_BLEEDING))
pkChrVictim->AttackedByPoison(m_pkChr);
}
else if (IS_SET(m_pkSk->dwFlag, SKILL_FLAG_BLEEDING))
{
if (number(1, 100) <= iPct && !pkChrVictim->IsAffectFlag(AFF_POISON))
pkChrVictim->AttackedByBleeding(m_pkChr);

5Q7j5R.png

“const DWORD SKILL_NUM” aratıyoruz karşılığında 158 olacaktır orayı siliyor ve 176 yazıyoruz ve aşağılara iniyoruz biraz ve aşağıdakileri ekliyoruz.
0, // empty(reserved) 158
0, // empty(reserved) 159
0, // empty(reserved) 160
0, // empty(reserved) 161
0, // empty(reserved) 162
0, // empty(reserved) 163
0, // empty(reserved) 164
0, // empty(reserved) 165
0, // empty(reserved) 166
0, // empty(reserved) 167
0, // empty(reserved) 168
0, // empty(reserved) 169
51, // job_skill 170
51, // job_skill 171
51, // job_skill 172
51, // job_skill 173
51, // job_skill 174
51, // job_skill 175
const DWORD SKILL_LIST_MAX_COUNT karşılığı 5’dir onu 6 yapıyoruz.

VMajqn.png

Hemen altında ” static DWORD s_anMotion2SkillVnumList[MOTION_MAX_NUM][SKILL_LIST_MAX_COUNT] =” kısmını göreceksiniz altındaki süslü parantezin içerisini silip aşağıdaki kodu yapıştırıyoruz.
static const DWORD SkillList[JOB_MAX_NUM][SKILL_GROUP_MAX_NUM][SKILL_COUNT] kısmının altına aşağıdaki komutu ekliyoruz.
{ {170, 171, 172, 173, 174, 175} },

aG37kz.png

“boost::unordered_map<VID, size_t>::iterator iterTargetMap = rSkillUseInfo.TargetVIDMap.find(TargetVID);” aratıyoruz altına “case SKILL_CHAYEOL:” ekliyoruz.

lWjAnJ.png

Burada işimiz bitti şimdi cmd_general.cpp açıyoruz.
“case POINT_POISON_PCT:” aratıyoruz ve altına
case POINT_BLEEDING_PCT: return LC_TEXT(“Atac sangeros %d”);
ekliyoruz.

lWjAMJ.png


“case POINT_RESIST_BOW: return LC_TEXT(“Ȱ°ø°İ ÀúÇ× %d%%”);” aratıyoruz altına “case POINT_RESIST_CLAW: return LC_TEXT(“Pence direnci %d%%”);” ekliyoruz.
dG396D.png

“case POINT_POISON_REDUCE: return LC_TEXT(“µ¶ ÀúÇ× %d%%”);” aratıyoruz altına “case POINT_BLEEDING_REDUCE: return LC_TEXT(“Kanli saldiri direnci %d%%”);” ekliyoruz.

dG3RzD.png


“case POINT_ATTBONUS_SHAMAN: return LC_TEXT(“¹«´ç¿¡°Ô °ÇÔ +%d%%”);” aratıyoruz altına “case POINT_ATTBONUS_WOLFMAN: return LC_TEXT(“Lycan karsi guclu +%d%%”);” ekliyoruz.

gW8BlO.png


“case POINT_RESIST_SHAMAN: return LC_TEXT(“¹«´ç°ø°İ¿¡ %d%% ÀúÇ×”);” aratıyoruz ve altına ” case POINT_RESIST_WOLFMAN: return LC_TEXT(“Lycan ataklarinda %d%% direnc”);” ekliyoruz.

ZEk023.png


Burada işlerimiz tamamlandı şimdi input_login.cpp açıyoruz “bool RaceToJob(unsigned race, unsigned* ret_job)” aratıyoruz. Altına aşağıdakini ekliyoruz.
case MAIN_RACE_WOLFMAN_M:
*ret_job = JOB_WOLFMAN;
break;

zB5bER.png


Burada işlemimiz tamamlandı şimdi input_main.cpp açıyoruz.
“else if (bArg > 14 && bArg < 22)” aratıyoruz ve altına aşağıdaki kodu ekliyoruz .
else if (bArg == 21 &&
idx == 2 &&
ch->GetComboSequence() == 5 &&
ch->GetJob() == JOB_WOLFMAN &&
ch->GetWear(WEAR_WEAPON) &&
ch->GetWear(WEAR_WEAPON)->GetSubType() == WEAPON_CLAW)
ch->SetValidComboInterval(100);

lWjVzg.png


input_main.cpp ile de işlemimiz bitti şimdi item.cpp açıyoruz.
“bool CItem::CanUsedBy(LPCHARACTER ch)” aratıyoruz altına
case JOB_WOLFMAN:
if (GetAntiFlag() & ITEM_ANTIFLAG_WOLFMAN)
return false;
break;
ekliyoruz.

XXk5yD.png


item.cpp ile de işlemimiz bitti şimdi item_manager.cpp açıyoruz.
“dwSkillVnum = number(1, 111);” aratıyoruz ve komple aşağıdaki ile değiştiriyoruz.
dwSkillVnum = number(1, 175);
if (dwSkillVnum > 111 && dwSkillVnum < 170)
continue;
Burada da işlemlerimiz tamamlandı.
Şimdi motion.cpp açıyoruz.
“bool CMotionManager::Build()” aratıyoruz aşağıdakini ekliyoruz.
“data/pc3/wolfman”
Burada dikkat etmeniz gereken kısım “data/pc2/shaman” sonuna virgül koymanız lazım.

y35XP9.png


“pkMotionSet->Load(sz, MOTION_MODE_FAN, MOTION_WALK);” aratıyoruz ve altına aşağıdakileri ekliyoruz.
snprintf(sz, sizeof(sz), “%s/claw/run.msa”, c_apszFolderName);
pkMotionSet->Load(sz, MOTION_MODE_CLAW, MOTION_RUN);
snprintf(sz, sizeof(sz), “%s/claw/walk.msa”, c_apszFolderName);
pkMotionSet->Load(sz, MOTION_MODE_CLAW, MOTION_WALK);

vp5qEm.png


Burada işlemimiz tamamlandı. motion.h açıyoruz ve “MOTION_MODE_FAN,” altına ” MOTION_MODE_CLAW,” ekliyoruz.
Şimdi skill.cpp açıyoruz.
” { “NORMAL_HIT_DAMAGE_BONUS”, POINT_NORMAL_HIT_DAMAGE_BONUS },”
Aratıyoruz ve altına ” { “ATTACK_BLEEDING”, POINT_BLEEDING_PCT },” ekliyoruz.
skill.h açıyoruz. “SKILL_FLAG_FIRE = (1 << 26),” aratıyoruz ve altına ” SKILL_FLAG_BLEEDING = (1 << 28),” ekliyoruz.
” GUILD_SKILL_COUNT = GUILD_SKILL_END – GUILD_SKILL_START + 1,” aratıyoruz ve altına
SKILL_CHAYEOL,
SKILL_SALPOONG,
SKILL_GONGDAB,
SKILL_PASWAE,
SKILL_JEOKRANG,
SKILL_CHEONGRANG,
ekliyoruz.
Game source ile işlemlerimiz bitmiştir.

Son olarak düzeltmeler.

char.cpp açıyoruz.
“const CSkillProto* pkSk = CSkillManager::instance().Get(dwSkillVnum);” aratıyoruz hemen üzerinde 1, 111 yazıyor o kısmı 175 yapıyoruz ve altınada aşağıdaki kodu ekliyoruz.
if (dwSkillVnum > 111 && dwSkillVnum < 170)
continue;

7Ng4bP.png


Burada işlemimiz tamamlandı.
char_item.cpp açıyoruz.
“bool CHARACTER::ItemProcess_Hair(LPITEM item, int iDestCell)” aratıyoruz altına aşağıdaki kodları yazıyoruz.
case JOB_WOLFMAN :
hair -= 69550;
break;

qWMrlQ.png


constant.cpp açıyoruz.
“{ POINT_RESIST_PENETRATE, },” aratıyoruz altına aşağıdakileri ekliyoruz.
{ POINT_ATTBONUS_WOLFMAN, },
{ POINT_RESIST_WOLFMAN, },
{ POINT_RESIST_CLAW, },
{ POINT_BLEEDING_PCT, },
{ POINT_BLEEDING_REDUCE, },
” { “MELEE_MAGIC_ATTBONUS_PER”, APPLY_MELEE_MAGIC_ATTBONUS_PER },” aratıyoruz. Altına aşağıdakileri ekliyoruz.
Db src içerisinde protoreader.cpp açıyoruz.
“static string arSub1[*] = { “WEAPON_SWORD”, “WEAPON_DAGGER”, “WEAPON_BOW”, “WEAPON_TWO_HANDED”,
“WEAPON_BELL”, “WEAPON_FAN”, “WEAPON_ARROW”, “WEAPON_MOUNT_SPEAR”};”
aratıyoruz ve aşağıdaki ile değiştiriyoruz.
“static string arSub1[*] = { “WEAPON_SWORD”, “WEAPON_DAGGER”, “WEAPON_BOW”, “WEAPON_TWO_HANDED”,
“WEAPON_BELL”, “WEAPON_FAN”, “WEAPON_ARROW”, “WEAPON_MOUNT_SPEAR”, “WEAPON_CLAW”};”
“ANTI_MYSHOP”, “ANTI_SAFEBOX” aratıyoruz ve safebox kısmından sonra “, “ANTI_WOLFMAN”” ekliyoruz.
“APPLY_RESIST_ICE”, “APPLY_RESIST_EARTH”, “APPLY_RESIST_DARK”, “APPLY_ANTI_CRITICAL_PCT”, “APPLY_ANTI_PENETRATE_PCT”, aratıyoruz ve altına
“APPLY_ATTBONUS_WOLFMAN”, “APPLY_RESIST_WOLFMAN”, “APPLY_RESIST_CLAW”, “APPLY_BLEEDING_PCT”, “APPLY_BLEEDING_REDUCE”,
ekliyoruz.
Şimdi common içerisinde length.h açıyoruz
“APPLY_RESIST_CLAW,” aratıyor ve aşağıdakilerle değiştiriyoruz.
APPLY_RESIST_CLAW,
APPLY_BLEEDING_PCT,
APPLY_BLEEDING_REDUCE,
Görebildiğimiz kadar hataları düzenlenmesi için uğraştık.
-------------------------------------------------------------------------------------------------------------------
Şimdi sırada dosyalar.

Lycan Client'i
----------------------------


Wolfman Source'leri İndir
-------------------------------------


Wolfman Binary SCN İndir
--------------------------------------


NOT: Mysql dosyaları ve eksik dosyalar eklenecektir
Metin2 Lycan Sistemi: Herkesin Aradığı Yeni Canavar Eklemek

Metin2 özel sunucularında oyun deneyimini zenginleştirmek isteyen geliştiriciler için Lycan ekleme işlemi giderek daha popüler hale geliyor. Bu yazıda Metin2 Lycan nasıl eklenir, gerekli sistem dosyaları nelerdir ve client tarafında nasıl çalışır konusunu detaylıca ele alacağız. Özellikle C++ tabanlı sistemlerde çalışan geliştiriciler için bu sistem oldukça değerlidir.

Lycan Nedir?
Lycan, Metin2 oyununda bir tür canavar ya da NPC olarak tanımlanabilir. Oyuncuların seviyesine göre belirli bölgelerde ortaya çıkar ve güçlü saldırılarla PvP/PvE etkileşimini artırır. Bu sistem, PvP sunucularında oyun içi etkinlikleri artırmak için idealdir. Lycan, hem görsel açıdan etkileyici hem de oyun mekaniği açısından dikkat çekici bir özelliktir.

Geliştirme Ortamı ve Gerekli Dosyalar
Lycan eklemek için öncelikle client ve server tarafında bazı değişiklikler yapılması gerekir. Bu sistem, C++ ile yazılmış game server src üzerinde çalışır. Ayrıca Python GUI ve py root gibi araçlarla da entegrasyon sağlanabilir. Martysama veya benzeri source edit süreçleri sırasında dikkat edilmesi gereken önemli detaylar vardır.

Client Tarafında Yapılması Gerekenler
Client tarafında Lycan karakteri için yeni bir model, animasyon ve efekt dosyası hazırlanmalıdır. Bu dosyalar genellikle pack dosyası içerisine yerleştirilir. UIScript ve Python GUI sistemleri üzerinden kullanıcı arayüzüne de entegre edilebilir. Client src üzerinde yapılan değişiklikler, Lycan karakterinin doğru görüntülenmesini sağlar.

Server Tarafında Yapılması Gerekenler
Game ve auth sunucularında da Lycan karakteriyle ilgili veritabanı ayarları yapılmalıdır. DB üzerinde yeni bir NPC tanımı, saldırı parametreleri ve düşmanlık sistemi ayarlanır. C++ system üzerinde geliştirilen bu yapılar sayesinde Lycan karakteri sunucuda aktif olarak kullanılabilir hale gelir.

Lycan Sisteminin Avantajları
Metin2 özel sunucularında Lycan sistemi, oyuncuların ilgisini çekecek dinamik bir oyun yapısı sunar. Bu özellikle PvP sistemlerinde oyun içi rekabeti artırır. Geliştiriciler için ise compile süreci esnasında kolay entegrasyon imkanı sağlar. Core yapılarla uyumlu çalışması, Metin2 development sürecini hızlandırır.

Sonuç
Metin2 Lycan

ekleme işlemi, Metin2Dev sürecinde önemli bir adım teşkil eder. Doğru sistemleştirmelerle birlikte game core, db core ve diğer bileşenlerle uyumlu çalışır. Metin2 Lobby olarak bu gibi gelişmiş sistemleri desteklemeye devam ediyoruz.


Metin2 Lycan System: Adding the Desired Monster Everyone is Looking For

Adding Lycan to private Metin2 servers has become increasingly popular among developers looking to enrich the gaming experience. In this article, we will cover how to add Metin2 Lycan, what system files are required, and how it works on the client side in detail. This system is especially valuable for developers working with C++-based systems.

What is Lycan?
Lycan can be described as a type of monster or NPC in Metin2. It appears in certain areas depending on player levels and increases PvP/PvE interactions with strong attacks. This system is ideal for increasing in-game activities on PvP servers. Lycan is both visually impressive and an attention-grabbing feature in terms of game mechanics.

Development Environment and Required Files
To add Lycan, certain modifications must be made on both client and server sides. This system operates on C++-based game server src. Integration can also be done using tools such as Python GUI and py root. There are important details to consider during Martysama or similar source edit processes.

What Needs to Be Done on Client Side
On the client side, a new model, animation, and effect file for the Lycan character must be prepared. These files are usually placed inside the pack file. The user interface can also be integrated via UIScript and Python GUI systems. Modifications on client src ensure that the Lycan character is displayed correctly.

What Needs to Be Done on Server Side
Database settings related to the Lycan character must also be configured on game and auth servers. A new NPC definition, attack parameters, and enemy systems are set up in DB. Thanks to structures developed on C++ system, the Lycan character becomes available for use on the server.

Benefits of the Lycan System
The Lycan system in private Metin2 servers offers a dynamic gameplay structure that attracts players. It particularly increases in-game competition in PvP systems. For developers, it allows easy integration during the compile process. Working compatibly with core structures accelerates the Metin2 development process.

Conclusion
Adding Metin2 Lycan


is a significant step in the Metin2Dev process. With proper structuring, it works compatibly with game core, db core, and other components. As Metin2 Lobby, we continue to support such advanced systems.
 

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

Benzer konular

Geri
Üst Alt