VOID StdImpact023_T::OnDamageTarget(OWN_IMPACT& rImp, Obj_Character& rMe, Obj_Character& rTar, INT& rDamage, SkillID_t nSkillID) const { __ENTER_FUNCTION INT nMpDamageRate = GetMpDamageRate(rImp); INT nRageDamageRate = GetRageDamageRate(rImp); if(TRUE==rImp.IsFadeOut()) { return; } if(0>=nMpDamageRate && 0>= nRageDamageRate) { return; } Scene* pScene = rMe.getScene(); if(NULL==pScene) { return; } // 生效几率 INT nActivateOdds = GetActivateOdds(rImp); INT nRet = pScene->GetRand100(); if (nRet > nActivateOdds) {// 没有生效则直接返回 return; } // 命中时吸取敌人MP百分率 if(0<nMpDamageRate) { INT nMP = Float2Int((nMpDamageRate*rDamage)/100.0f); rTar.ManaIncrement(-nMP, &rMe); } // 命中时吸取敌人怒气百分率 if(0<nRageDamageRate) { INT nRage = rTar.GetRage(); nRage = Float2Int((nRageDamageRate*nRage)/100.0f); rTar.RageIncrement(-nRage, &rMe); } __LEAVE_FUNCTION }