Formula

CommonFun.CalcRaceParam

function CommonFun.CalcRaceParam(srcUser, targetUser, params, damageParam, logger)
  local raceInc = 0
  local raceRed = 0
  local srcRace = srcUser.race
  local targetRace = targetUser.race
  if srcUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) and srcUser:HasBuffID(49325_RACIAL_ANCIENT_RELICS_CD_:MAX_STACK_0) then
  elseif srcUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) then
    targetRace = 2
  end
  if targetUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) and targetUser:HasBuffID(49325_RACIAL_ANCIENT_RELICS_CD_:MAX_STACK_0) then
  elseif targetUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) then
    srcRace = 2
  end
  if nil == CommonFun.RaceProps[targetRace] then
    return 1
  end
  if nil == CommonFun.RaceProps[srcRace] then
    return 1
  end
  raceInc = srcUser:GetProperty(CommonFun.RaceProps[targetRace][1])
  raceRed = targetUser:GetProperty(CommonFun.RaceProps[srcRace][2])
  local skilllv = srcUser:GetLernedSkillLevel(306_LORD_KNIGHT:ASURA_STRIKE)
  local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel)
  if 5 < skilllv and skillID == 306_LORD_KNIGHT:ASURA_STRIKE or skillID == 3303_LIGHTBRINGER:SKY_BREAKING_DRAGON_FIST or skillID == 819_HIGH_WIZARD:SKY_BREAKING_DRAGON_FIST then
    raceRed = math.max(raceRed - 0.06 * (skilllv - 5), 0)
  end
  local Arrow_attr = CommonFun.GetUserArrowAttr(srcUser, params)
  raceInc = raceInc + Arrow_attr
  local A = 1 + raceInc - raceRed
  local mapid, maptype = srcUser:GetMapInfo()
  if (maptype == PVP_MAPS) and targetUser:GetNpcID() ~= 40022_EMPERIUM then
    local pvpReduce = 0
    local B = raceRed - raceInc
    B = B < -1 and -1 or 1 < B and 1 or B
    B = math.floor(B * 1000) / 1000
    B = B + 0.4 * (1 - math.sin(B * 3.14 / 2))
    A = 1 - B
  end
  if A <= 0.15 then
    A = 0.15
  end
  return A
end