
Originally Posted by
kayito
Better to go your own way.
http://reverse-mu.cz/Template/Basic/Images/1.jpg

http://reverse-mu.cz/Template/Basic/Images/2.jpg

http://reverse-mu.cz/Template/Basic/Images/3.jpg

http://reverse-mu.cz/Template/Basic/Images/4.jpg

http://reverse-mu.cz/Template/Basic/Images/5.jpg

Rather than copying other people's mistakes.
- - - Updated - - -
One small but important fix for players.
When using ancient items and their properties.
As always, everything can be blamed on the server's adjustments and the effort to please all the players.
Let's take a look at this feature.
This function will restore or reload split points if you press the "C" key.
NewUICharacterInfoWindow.cpp
PHP Code:
void SEASON3B::CNewUICharacterInfoWindow::ResetEquipmentLevel()
{
ITEM *pItem = CharacterMachine->Equipment;
Hero->Weapon[0].Level = (pItem[EQUIPMENT_WEAPON_RIGHT].Level>>3)&15;
Hero->Weapon[1].Level = (pItem[EQUIPMENT_WEAPON_LEFT ].Level>>3)&15;
Hero->BodyPart[BODYPART_HELM ].Level = (pItem[EQUIPMENT_HELM].Level>>3)&15;
Hero->BodyPart[BODYPART_ARMOR].Level = (pItem[EQUIPMENT_ARMOR].Level>>3)&15;
Hero->BodyPart[BODYPART_PANTS].Level = (pItem[EQUIPMENT_PANTS].Level>>3)&15;
Hero->BodyPart[BODYPART_GLOVES].Level = (pItem[EQUIPMENT_GLOVES].Level>>3)&15;
Hero->BodyPart[BODYPART_BOOTS].Level = (pItem[EQUIPMENT_BOOTS].Level>>3)&15;
CheckFullSet(Hero);
}
If you have an ancient set on. After performing a character reset or redistribution of points, your special traits will not work. If you do not have the stats and level for the relevant set immediately after accessing the game.
We all use the old familiar method of splitting points (/add, /str, /agi, ...) and don't have the basic treatment in the game client.
Edit the function like this
PHP Code:
void SEASON3B::CNewUICharacterInfoWindow::ResetEquipmentLevel()
{
ITEM *pItem = CharacterMachine->Equipment;
Hero->Weapon[0].Level = (pItem[EQUIPMENT_WEAPON_RIGHT].Level>>3)&15;
Hero->Weapon[1].Level = (pItem[EQUIPMENT_WEAPON_LEFT ].Level>>3)&15;
Hero->BodyPart[BODYPART_HELM ].Level = (pItem[EQUIPMENT_HELM].Level>>3)&15;
Hero->BodyPart[BODYPART_ARMOR].Level = (pItem[EQUIPMENT_ARMOR].Level>>3)&15;
Hero->BodyPart[BODYPART_PANTS].Level = (pItem[EQUIPMENT_PANTS].Level>>3)&15;
Hero->BodyPart[BODYPART_GLOVES].Level = (pItem[EQUIPMENT_GLOVES].Level>>3)&15;
Hero->BodyPart[BODYPART_BOOTS].Level = (pItem[EQUIPMENT_BOOTS].Level>>3)&15;
CheckFullSet(Hero);
g_csItemOption.init();
}
Go to the file WSclient.cpp
The function referenced by the split points command.
Change the first case (0x00), remove the message about the distribution of points, if you don't want it there, but the end is important.
PHP Code:
case 0x00: // ˝şĹČ»ýĽş Ľş°ř
if(fruit >=0 && fruit <= 4)
{
#ifdef KWAK_FIX_COMPILE_LEVEL4_WARNING_EX
int index = 0;
#else // KWAK_FIX_COMPILE_LEVEL4_WARNING_EX
int index;
#endif // KWAK_FIX_COMPILE_LEVEL4_WARNING_EX
switch ( fruit )
{
case 0: // żˇłĘÁö.
CharacterAttribute->Energy += point;
index = 168;
break;
case 1: // ĂĽ·Â.
CharacterAttribute->Vitality += point;
index = 169;
break;
case 2: // ąÎø.
CharacterAttribute->Dexterity += point;
index = 167;
break;
case 3: // Čű.
CharacterAttribute->Strength += point;
index = 166;
break;
case 4: //: ĹëĽÖ
CharacterAttribute->Charisma += point;
index = 1900;
break;
}
CharacterAttribute->AddPoint += point;
//unicode::_sprintf(strText, GlobalText[379], GlobalText[index], point, GlobalText[1412]);
//SEASON3B::CreateOkMessageBox(strText);
// ---- FIX ----------------------------------------------------------------------
g_pCharacterInfoWindow->ResetEquipmentLevel();
CharacterMachine->CalculateAll();
// --------------------------------------------------------------------------------
}
break;
Now you have fixed the division of points via the command.
But now there is a problem with the necessary level for the ring / pendant.
Special options are not unlocked when leveling up an item.
Find this function in the WSclient.cpp file, look at the end of the function and edit it.
PHP Code:
void ReceiveLevelUp( BYTE *ReceiveBuffer )
{
LPPRECEIVE_LEVEL_UP Data = (LPPRECEIVE_LEVEL_UP)ReceiveBuffer;
CharacterAttribute->Level = Data->Level;
CharacterAttribute->LevelUpPoint = Data->LevelUpPoint;
CharacterAttribute->UpPoint = Data->UpPoint;
CharacterAttribute->LifeMax = Data->MaxLife;
CharacterAttribute->ManaMax = Data->MaxMana;
CharacterAttribute->Life = Data->MaxLife;
CharacterAttribute->Mana = Data->MaxMana;
CharacterAttribute->ShieldMax = Data->MaxShield;
CharacterAttribute->SkillManaMax = Data->SkillManaMax;
// Ăß°ˇµÇ´Â ˝şĹÝ Á¤ş¸.
CharacterAttribute->AddPoint = Data->AddPoint;
CharacterAttribute->MaxAddPoint = Data->MaxAddPoint;
// ż¸Ĺ °¨ĽŇ Ć÷ŔÎĆ® Á¤ş¸
CharacterAttribute->wMinusPoint = Data->wMinusPoint; // ÇöŔç °¨ĽŇ Ć÷ŔÎĆ®
CharacterAttribute->wMaxMinusPoint = Data->wMaxMinusPoint; // ĂÖ´ë °¨ĽŇ Ć÷ŔÎĆ®
unicode::t_char szText[256] = {NULL, };
WORD iExp = CharacterAttribute->NextExperince - CharacterAttribute->Experience;
sprintf(szText,GlobalText[486], iExp);
g_pChatListBox->AddText("", szText, SEASON3B::TYPE_SYSTEM_MESSAGE);
CharacterMachine->CalculateNextExperince();
OBJECT *o = &Hero->Object;
if(IsMasterLevel(Hero->Class) == true)
{
// OBJECT *o = &Hero->Object;
CreateJoint(BITMAP_FLARE,o->Position,o->Position,o->Angle,45,o,80,2);
for ( int i=0; i<19; ++i )
{
CreateJoint(BITMAP_FLARE,o->Position,o->Position,o->Angle,46,o,80,2);
}
}
else
{
for ( int i=0; i<15; ++i )
{
CreateJoint(BITMAP_FLARE,o->Position,o->Position,o->Angle,0,o,40,2);
}
CreateEffect(BITMAP_MAGIC+1,o->Position,o->Angle,o->Light,0,o);
}
PlayBuffer(SOUND_LEVEL_UP);
// ---- Fix -------------------------------------------------------------------
g_pCharacterInfoWindow->ResetEquipmentLevel();
CharacterMachine->CalculateAll();
// ----------------------------------------------------------------------------
#ifdef CONSOLE_DEBUG
g_ConsoleDebug->Write(MCD_RECEIVE, "0x05ąŢŔ˝[ReceiveLevelUp]");
#endif // CONSOLE_DEBUG
}
Now if you kidnap an ancient item it will show you the properties.
I hope this fix helps someone.