Formula

CommonFun.ModifyRealDam

function CommonFun.ModifyRealDam(srcUser, targetUser, params, skillParams, damage, skillID, maptype)
  local NormalAtkDam = srcUser:GetProperty("NormalAtkDam")
  local NormalAtkRes = targetUser:GetProperty("NormalAtkRes")
  local SkillDam = srcUser:GetProperty("SkillDam")
  local SkillRes = targetUser:GetProperty("SkillRes")
  if (skillID == 306_LORD_KNIGHT:ASURA_STRIKE or skillID == 3303_LIGHTBRINGER:SKY_BREAKING_DRAGON_FIST or skillID == 819_HIGH_WIZARD:SKY_BREAKING_DRAGON_FIST) and srcUser:HasBuffID(22000830_ASURA_STRIKE_IGNORES_SKILL_DMG_DOWN_:MAX_STACK_0) then
    SkillRes = math.max(SkillRes - 0.3, 0)
  end
  local ActuallySkiRes = SkillRes - SkillDam
  local ActuallyNorRes = NormalAtkRes - NormalAtkDam
  if maptype == PVP_MAPS then
    ActuallySkiRes = ActuallySkiRes < -1 and -1 or 1 < ActuallySkiRes and 1 or ActuallySkiRes
    ActuallySkiRes = math.floor(ActuallySkiRes * 1000) / 1000
    ActuallySkiRes = ActuallySkiRes + 0.4 * (1 - math.sin(ActuallySkiRes * 3.14 / 2))
    ActuallyNorRes = ActuallyNorRes < -1 and -1 or 1 < ActuallyNorRes and 1 or ActuallyNorRes
    ActuallyNorRes = math.floor(ActuallyNorRes * 1000) / 1000
    ActuallyNorRes = ActuallyNorRes + 0.4 * (1 - math.sin(ActuallyNorRes * 3.14 / 2))
  end
  local NormalEnd = 1 - ActuallyNorRes
  local SkillEnd = 1 - ActuallySkiRes
  NormalEnd = math.max(NormalEnd, 0.15)
  SkillEnd = math.max(SkillEnd, 0.15)
  if CommonFun.RollType.Magic == skillParams.RollType then
    local RefineMDamReduc = targetUser:GetProperty("RefineMDamReduc")
    if srcUser:IsAttackSkill(params.skillIDAndLevel) and 0 < damage then
      local NormalMRealDam = srcUser:GetProperty("NormalMRealDam")
      damage = (damage + NormalMRealDam * (1 - RefineMDamReduc)) * NormalEnd
    elseif not srcUser:IsAttackSkill(params.skillIDAndLevel) and 0 < damage then
      local SkillMRealDam = srcUser:GetProperty("SkillMRealDam")
      damage = (damage + SkillMRealDam * (1 - RefineMDamReduc)) * SkillEnd
    end
  end
  if CommonFun.RollType.Attack == skillParams.RollType then
    local RefineDamReduc = targetUser:GetProperty("RefineDamReduc")
    if srcUser:IsAttackSkill(params.skillIDAndLevel) and 0 < damage then
      local NormalRealDam = srcUser:GetProperty("NormalRealDam")
      damage = (damage + NormalRealDam * (1 - RefineDamReduc)) * NormalEnd
    elseif not srcUser:IsAttackSkill(params.skillIDAndLevel) and 0 < damage then
      local SkillRealDam = srcUser:GetProperty("SkillRealDam")
      damage = (damage + SkillRealDam * (1 - RefineDamReduc)) * SkillEnd
    end
  end
  return damage
end