Formula

CommonFun.calcDamReDuc

function CommonFun.calcDamReDuc(srcUser, targetUser)
  if srcUser == nil or targetUser == nil then
    return 0
  end
  local DamSpike = srcUser:GetProperty("DamSpike_PEN")
  if nil ~= CommonFun.Shape and CommonFun.Shape.M == targetUser.shape and srcUser:HasBuffID(90004384_TITAN_1_T5_:MAX_STACK_0) then
    DamSpike = DamSpike + 0.15
  end
  local DamReduc2 = targetUser:GetProperty("DamReduc")
  local ReduceLv = CommonFun.calcSpikeLv(srcUser, targetUser)
  local SkillDamReduc = CommonFun.calcSkillDamReduc(srcUser, targetUser)
  if srcUser:HasBuffID(138002_23_:MAX_STACK_0) then
    local MDamSpike = srcUser:GetProperty("MDamSpike_MPEN")
    DamSpike = DamSpike + MDamSpike
  end
  if targetUser:GetNpcID() ~= 0 and srcUser:HasBuffID(57720_23_:MAX_STACK_0) and srcUser:HasBuffID(138002_23_:MAX_STACK_0) then
    DamSpike = DamSpike + 0.2
  elseif targetUser:GetNpcID() ~= 0 and srcUser:HasBuffID(57720_23_:MAX_STACK_0) then
    DamSpike = DamSpike + 0.1
  end
  if targetUser:GetNpcID() ~= 0 and srcUser:HasBuffID(58120_23377_PHANTOM_THIEF_CARD_FROM_A_DIFFERENT_WORLD_:MAX_STACK_0) and srcUser:HasBuffID(138002_23_:MAX_STACK_0) then
    DamSpike = DamSpike + 0.2
  elseif targetUser:GetNpcID() ~= 0 and srcUser:HasBuffID(58120_23377_PHANTOM_THIEF_CARD_FROM_A_DIFFERENT_WORLD_:MAX_STACK_0) then
    DamSpike = DamSpike + 0.1
  end
  if targetUser:GetNpcID() ~= 0 and srcUser:HasBuffID(58730_ALIEN_ELUSIVE_THIEF_CARD_:MAX_STACK_0) and srcUser:HasBuffID(138002_23_:MAX_STACK_0) then
    DamSpike = DamSpike + 0.2
  elseif targetUser:GetNpcID() ~= 0 and srcUser:HasBuffID(58730_ALIEN_ELUSIVE_THIEF_CARD_:MAX_STACK_0) then
    DamSpike = DamSpike + 0.1
  end
  if (targetUser.boss or targetUser.mini) and srcUser:HasBuffID(58730_ALIEN_ELUSIVE_THIEF_CARD_:MAX_STACK_0) and srcUser:HasBuffID(138002_23_:MAX_STACK_0) then
    DamSpike = DamSpike + 0.1
  elseif (targetUser.boss or targetUser.mini) and srcUser:HasBuffID(58730_ALIEN_ELUSIVE_THIEF_CARD_:MAX_STACK_0) then
    DamSpike = DamSpike + 0.05
  end
  if targetUser:GetNpcID() ~= 0 and srcUser:HasBuffID(57780_ALIEN_THANATOS_CARD_:MAX_STACK_0) then
    local Card22 = srcUser:GetEquipCardNum(7, 23331)
    local RefineLv = srcUser:GetEquipedRefineLv(7_WEAPON)
    DamSpike = DamSpike + 0.01 * RefineLv * Card22
  end
  local DamReducThrough = srcUser:GetProperty("DamReducThrough")
  local DamSpikeResistance = targetUser:GetProperty("DamSpikeResistance")
  if 0 <= DamSpike then
    DamSpike = DamSpike * math.max(1 - DamSpikeResistance, 0)
  end
  if 0 <= DamReduc2 then
    DamReduc2 = DamReduc2 * math.max(1 - DamReducThrough, 0)
  end
  local A = 1 - (1 + 0.009 * ReduceLv + DamSpike - DamReduc2) * SkillDamReduc
  local mapid, maptype = srcUser:GetMapInfo()
  if (maptype == PVP_MAPS) and targetUser:GetNpcID() ~= 40022_EMPERIUM then
    local pvpReduce = 0
    local Master = targetUser:GetMasterUser()
    if targetUser:GetNpcID() == 0 or Master ~= nil then
      pvpReduce = 0.2
    end
    A = A < -1 and -1 or 1 < A and 1 or A
    A = math.floor(A * 1000) / 1000
    A = A + 0.3 * (1 - math.sin(A * 3.14 / 2)) + pvpReduce
  end
  if 0.85 <= A then
    A = 0.85
  end
  return A
end