diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 57e2d5d6..485aa338 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3504,5 +3504,22 @@ void Human::ProcGemStoneItem(AddItemDTO& dto) gemstone, 0, false); + GetAbility()->AddAtkAddition(dto.item_meta->_atk); + SetMaxHP(GetMaxHP() + dto.item_meta->_max_hp * GetHP()); + SetHP(GetMaxHP()); + room->frame_event.AddPropChg + ( + GetWeakPtrRef(), + kPropHp, + GetHP(), + 0, + true); + room->frame_event.AddPropChg + ( + GetWeakPtrRef(), + kPropMaxHp, + GetMaxHP(), + 0, + true); dto.handled = true; } diff --git a/server/gameserver/mt/Equip.cc b/server/gameserver/mt/Equip.cc index d2b5b67a..519ef985 100644 --- a/server/gameserver/mt/Equip.cc +++ b/server/gameserver/mt/Equip.cc @@ -38,6 +38,28 @@ namespace mt #endif } } + { + std::vector strings; + a8::Split(atk(), strings, ':'); + if (strings.size() > 1) { + _atk = a8::XValue(strings[0]); + _atk_up = a8::XValue(strings[1]); + } else { + _atk = a8::XValue(strings[0]); + _atk_up = _atk; + } + } + { + std::vector strings; + a8::Split(max_hp(), strings, ':'); + if (strings.size() > 1) { + _max_hp = a8::XValue(strings[0]); + _max_hp_up = a8::XValue(strings[1]); + } else { + _max_hp = a8::XValue(strings[0]); + _max_hp_up = _max_hp; + } + } { std::vector strings; a8::Split(volume(), strings, '|'); diff --git a/server/gameserver/mt/Equip.h b/server/gameserver/mt/Equip.h index fbf5b276..9aa40b77 100644 --- a/server/gameserver/mt/Equip.h +++ b/server/gameserver/mt/Equip.h @@ -31,6 +31,7 @@ namespace mt int _group_id = 0; int _atk = 0; int _atk_up = 0; + int _max_hp = 0; int _max_hp_up = 0; std::tuple _heal;