Index: src/map/ai/ai_mob_dummy.cpp =================================================================== --- src/map/ai/ai_mob_dummy.cpp (revision 3773) +++ src/map/ai/ai_mob_dummy.cpp (working copy) @@ -1608,6 +1608,14 @@ // Block skill up if(m_PBattleTarget->objtype == TYPE_PC && isBlocked || ((map_config.newstyle_skillups & NEWSTYLE_BLOCK) > 0)) { + uint16 blockMP = battleutils::HandleBlockToMP((CCharEntity*)m_PBattleTarget,damage,&Action); + if (blockMP > 0) + { + // ShowDebug(CL_CYAN"Damage to MP %d", blockMP); + m_PBattleTarget->addMP(blockMP); + m_PBattleTarget->loc.zone->PushPacket(m_PBattleTarget,CHAR_INRANGE_SELF, new CMessageBasicPacket(m_PBattleTarget,m_PBattleTarget,0,blockMP, 276)); + charutils::UpdateHealth((CCharEntity*)m_PBattleTarget); + } if(battleutils::GetBlockRate(m_PMob, m_PBattleTarget) > 0) { charutils::TrySkillUP((CCharEntity*)m_PBattleTarget, SKILL_SHL, m_PMob->GetMLevel()); Index: src/map/battleutils.cpp =================================================================== --- src/map/battleutils.cpp (revision 3773) +++ src/map/battleutils.cpp (working copy) @@ -505,6 +505,47 @@ } +uint32 HandleBlockToMP(CCharEntity* PChar, uint32 damage, apAction_t* Action) +{ + if(PChar->objtype == TYPE_PC) + { + // check for gear + CItemArmor* PShield = (CItemWeapon*)PChar->getStorage(LOC_INVENTORY)->GetItem(PChar->equip[SLOT_SUB]); + + uint32 blockToMP = 0; + if(PShield != NULL) + { + switch(PShield->getID()) + { + //Ochain - 90 + case 16193: + blockToMP = damage * .25; + break; + + //Ochain - 95 + case 16194: + blockToMP = damage * .30; + break; + + //Ochain - 99 + case 16199: + //Ochain - 99 - 2 + case 11926: + blockToMP = damage * .35; + break; + + default: + break; + } + } + return blockToMP; + } + else + { + return 0; + } +} + uint16 CalculateSpikeDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, uint8 spikesType, uint16 damageTaken) { uint16 damage = PDefender->getMod(MOD_SPIKES_DMG); Index: src/map/battleutils.h =================================================================== --- src/map/battleutils.h (revision 3773) +++ src/map/battleutils.h (working copy) @@ -149,6 +149,7 @@ CItemArmor* GetEntityArmor(CBattleEntity* PEntity, SLOTTYPE Slot); uint32 HandleSpecialPhysicalDamageReduction(CCharEntity* PAttacker, uint32 damage, apAction_t* Action); + uint32 HandleBlockToMP(CCharEntity* PAttacker, uint32 damage, apAction_t* Action); void MakeEntityStandUp(CBattleEntity* PEntity); bool IsEngauged(CBattleEntity* PEntity); CBattleEntity* getAvailableTrickAttackChar(CBattleEntity* taUser, CBattleEntity* PMob);