BOOL XingXiuSkill008_T::EffectOnUnitEachTick(Obj_Character& rMe, Obj_Character& rTar, BOOL bCriticalFlag) const { __ENTER_FUNCTION SkillInfo_T& rSkillInfo = rMe.GetSkillInfo(); TargetingAndDepletingParams_T& rParams = rMe.GetTargetingAndDepletingParams(); INT nDamage = rSkillInfo.GetDescriptorByIndex(1)->GetValue(); INT nTransferRate = rSkillInfo.GetDescriptorByIndex(2)->GetValue(); INT nAbsorbed = (nDamage*nTransferRate+50)/100; OWN_IMPACT impact1; DI_Damage_T const logic1; logic1.InitStruct(impact1); logic1.SetDamage(impact1, nDamage); OWN_IMPACT impact2; DI_Heal_T const logic2; logic2.InitStruct(impact2); logic2.SetHealedHP(impact2, nAbsorbed); impact2.m_nImpactID = rSkillInfo.GetDescriptorByIndex(0)->GetValue(); //register impact event RegisterImpactEvent(rTar, rMe, impact1, rParams.GetDelayTime(), bCriticalFlag); RegisterImpactEvent(rMe, rMe, impact2, rParams.GetDelayTime(), bCriticalFlag); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL GaiBangSkill004_T::EffectOnUnitOnce(Obj_Character& rMe, Obj_Character& rTar, BOOL bCriticalFlag) const { __ENTER_FUNCTION SkillInfo_T& rSkillInfo = rMe.GetSkillInfo(); TargetingAndDepletingParams_T& rParams = rMe.GetTargetingAndDepletingParams(); INT nDepleteStrikePointSegment = rParams.GetDepletedStrikePoints()/STRIKE_POINT_SEGMENT_SIZE; if(1>nDepleteStrikePointSegment) { AssertEx(FALSE,"[GaiBangSkill004_T::TakeEffectNow]: Depleted strike point segment illegal!"); nDepleteStrikePointSegment=1; } else if(MAX_STRIKE_POINT_SEGMENT<nDepleteStrikePointSegment) { AssertEx(FALSE,"[GaiBangSkill004_T::TakeEffectNow]: Depleted strike point segment illegal!"); nDepleteStrikePointSegment=MAX_STRIKE_POINT_SEGMENT; } INT nAdditionalAttackPower = rSkillInfo.GetDescriptorByIndex(nDepleteStrikePointSegment)->GetValue(); // init impact1 OWN_IMPACT impact; CombatCore_T myCombatCore; myCombatCore.Reset(); myCombatCore.SetAdditionalAttackLight(nAdditionalAttackPower); myCombatCore.GetResultImpact(rMe, rTar, impact); // register impact event RegisterImpactEvent(rTar, rMe, impact, rParams.GetDelayTime(), bCriticalFlag); return TRUE; __LEAVE_FUNCTION return FALSE; }