Index: scripts/globals/monstertpmoves.lua =================================================================== --- scripts/globals/monstertpmoves.lua (revision 3773) +++ scripts/globals/monstertpmoves.lua (working copy) @@ -630,6 +630,7 @@ if(skilltype == MOBSKILL_PHYSICAL) then dmg = utils.physicalDmgTaken(target, dmg); + utils.dmgToTP(target, dmg); elseif(skilltype == MOBSKILL_MAGICAL) then @@ -642,6 +643,7 @@ elseif(skilltype == MOBSKILL_RANGED) then dmg = utils.rangedDmgTaken(target, dmg); + utils.dmgToTP(target, dmg); end Index: scripts/globals/utils.lua =================================================================== --- scripts/globals/utils.lua (revision 3773) +++ scripts/globals/utils.lua (working copy) @@ -109,6 +109,33 @@ return dmg * resist; end; +function utils.dmgToTP(target, dmg) + + if(target:getObjType() == TYPE_PC) then + local dmgTP = 0; + local percentTP = 0; + if(target:getEquipID(SLOT_SUB) == 28671) then -- Butznard Shield + percentTP = percentTP + .005; + end + if(target:getEquipID(SLOT_SUB) == 28669) then -- Butznard Shield +1 + percentTP = percentTP + .006; + end + if(target:getEquipID(SLOT_BODY) == 11868) then -- Mekira Meikogai + percentTP = percentTP + .014; + end + if(target:getEquipID(SLOT_BODY) == 11865) then -- Mekira Toshugai + percentTP = percentTP + .01; + end + if(target:getEquipID(SLOT_BODY) == 11871) then -- Mekira Toshugai +1 + percentTP = percentTP + .012; + end + dmgTP = math.floor(dmg * percentTP); + target:addTP(dmgTP); + -- printf("TP Gained %u",dmgTP); + end + +end; + function utils.breathDmgTaken(target, breathDmg) local resist = 1 + (target:getMod(MOD_UDMGBREATH) / 100); Index: scripts/globals/weaponskills.lua =================================================================== --- scripts/globals/weaponskills.lua (revision 3773) +++ scripts/globals/weaponskills.lua (working copy) @@ -195,6 +195,7 @@ if(target:hasStatusEffect(EFFECT_FORMLESS_STRIKES) == false) then utils.dmgTaken(target, finaldmg); utils.physicalDmgTaken(target, finaldmg); + utils.dmgToTP(target, finaldmg); end attacker:delStatusEffectSilent(EFFECT_BUILDING_FLOURISH); return finaldmg, criticalHit, tpHitsLanded, extraHitsLanded; @@ -683,6 +684,7 @@ utils.dmgTaken(target, finaldmg); utils.rangedDmgTaken(target, finaldmg); + utils.dmgToTP(target, finaldmg); return finaldmg, tpHitsLanded, extraHitsLanded; end; 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) @@ -1600,6 +1600,13 @@ if (m_PBattleTarget->objtype == TYPE_PC) { damage = battleutils::HandleSpecialPhysicalDamageReduction((CCharEntity*)m_PBattleTarget,damage,&Action); + uint16 recoverTP = battleutils::HandleDamageToTP((CCharEntity*)m_PBattleTarget,damage,&Action); + if (recoverTP > 0) + { + // ShowDebug(CL_CYAN"Damage to TP %d", recoverTP); + m_PBattleTarget->addTP(recoverTP); + charutils::UpdateHealth((CCharEntity*)m_PBattleTarget); + } } Action.param = battleutils::TakePhysicalDamage(m_PMob, m_PBattleTarget, damage, isBlocked ,SLOT_MAIN, 1, NULL, true); Index: src/map/battleutils.cpp =================================================================== --- src/map/battleutils.cpp (revision 3773) +++ src/map/battleutils.cpp (working copy) @@ -505,6 +505,77 @@ } +uint32 HandleDamageToTP(CCharEntity* PChar, uint32 damage, apAction_t* Action) +{ + // check for gear + CItemArmor* PShield = (CItemWeapon*)PChar->getStorage(LOC_INVENTORY)->GetItem(PChar->equip[SLOT_EAR1]); + CItemArmor* PArmor = (CItemWeapon*)PChar->getStorage(LOC_INVENTORY)->GetItem(PChar->equip[SLOT_BODY]); + + uint32 damageToTP = 0; + if(PShield != NULL) + { + switch(PShield->getID()) + { + //Butznar Shield + case 28671: + damageToTP = damage * .005; + break; + + //Butznar Shield +1 + case 28669: + damageToTP = damage * .005; + break; + + + default: + break; + } + } + if(PArmor != NULL) + { + switch(PArmor->getID()) + { + //Mekira Toshugai + case 11865: + damageToTP = damage * .01; + break; + + //Mekira Toshugai +1 + case 11871: + damageToTP = damage * .012; + break; + + //Mekira Meikogai + case 11868: + damageToTP = damage * .014; + break; + + //Myochin Domaru + case 13781: + if(rand()%100 <= 10) + { + damageToTP = damage * .01; + } + break; + + //Myochin Domaru +1 + case 14484: + if(rand()%100 <= 15) + { + damageToTP = damage * .012; + } + break; + + + default: + break; + } + } + + return damageToTP; + +} + 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 HandleDamageToTP(CCharEntity* PAttacker, uint32 damage, apAction_t* Action); void MakeEntityStandUp(CBattleEntity* PEntity); bool IsEngauged(CBattleEntity* PEntity); CBattleEntity* getAvailableTrickAttackChar(CBattleEntity* taUser, CBattleEntity* PMob);