Formula

CommonFun.CalcDamage

function CommonFun.CalcDamage(srcUser, targetUser, params, logger)
  local damage, damagetype = CommonFun.CalcBaseDamage(srcUser, targetUser, params, logger)
  local TaichiSecretLandGemLv = targetUser:GetSecretLandGemLv(384009)
  if TaichiSecretLandGemLv ~= 0 and 0 < damage then
    local reduceRatio = TaichiSecretLandGemLv * 0.002 + math.max(TaichiSecretLandGemLv - 30, 0) * 0.001 + math.max(TaichiSecretLandGemLv - 60, 0) * 0.002
    local loseValue = damage * reduceRatio
    damage = damage - loseValue
    if srcUser.isServerCall then
      targetUser:ChangeHpDuringTime(-loseValue, 3, srcUser:GetGuid())
    end
  end
  if srcUser:HasBuffID(107480_REAPER_DAMAGE_CONVERTED_TO_LIFE_LOSS_:MAX_STACK_0) and 0 < damage then
    if srcUser.isServerCall then
      targetUser:ChangeDamageToHpReduce(damage, srcUser:GetGuid())
    end
    damage = 0
  end
  local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel)
  local sharedam, realdam
  if 0 < damage then
    if targetUser.isServerCall then
      if targetUser.have_sharedam_server ~= nil and targetUser.have_sharedam_server == true then
        damage, sharedam, damagetype = CommonFun.CalcShareDamage(srcUser, targetUser, damage, damagetype)
      end
    else
      damage, sharedam, damagetype = CommonFun.CalcShareDamage(srcUser, targetUser, damage, damagetype)
    end
  end
  if 0 < damage and targetUser.diffShowDamage == true then
    local Level = srcUser.BaseLv
    local MonsterLevel = Table_MonsterLevel[Level]
    local MonsterID = targetUser:GetNpcID()
    local Monster = Table_Monster[MonsterID]
    if Monster ~= nil and MonsterLevel ~= nil then
      realdam = damage * Monster.Hp / MonsterLevel.RealMaxHp
    end
  end
  if 0 < damage and srcUser.diffShowDamage == true then
    local Level = targetUser.BaseLv
    local MonsterLevel = Table_MonsterLevel[Level]
    if MonsterLevel ~= nil then
      damage = damage * MonsterLevel.LevelReduc
    end
  end
  local shengwang = srcUser:GetPrestigeLevel()
  if 0 < damage and (srcUser:InDamReduceRaid() == true and srcUser:IsUserCamp() == true or shengwang ~= 0) then
    damage = CommonFun.GetDamReduceValue(srcUser, targetUser, damage)
    local skillParams = Table_Skill[params.skillIDAndLevel]
    if skillParams ~= nil and skillParams.DamRatio ~= nil then
      damage = damage * skillParams.DamRatio
    end
  end
  if (CommonFun.DamageType.Normal == damagetype or CommonFun.DamageType.Crit == damagetype or CommonFun.DamageType.ErLianJi == damagetype) and 1 <= damage and targetUser:DamageAlways1() then
    damagetype = CommonFun.DamageType.Normal
    damage = 1
  end
  if 2147483647 <= damage then
    damage = 2147483647
  end
  return damage, damagetype, sharedam, realdam
end