CommonFun

CommonFun.CalcRaceParam

Dataset · 20251127_update

Formula Source

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) and srcUser:HasBuffID(49325) then
  elseif srcUser:HasBuffID(49320) then
    targetRace = 2
  end
  if targetUser:HasBuffID(49320) and targetUser:HasBuffID(49325) then
  elseif targetUser:HasBuffID(49320) 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 xinnian = 0
  local skill_xinnian3 = srcUser:GetLernedSkillLevel(6013)
  local skill_xinnian1 = srcUser:GetLernedSkillLevel(6011)
  if srcUser:HasBuffID(1010201) then
    local layer_xinnian = srcUser:GetBuffLayer(1010201)
    xinnian = skill_xinnian3 * 0.01 * (1 + (layer_xinnian - 1) * (0.15 + skill_xinnian1 * 0.05))
  end
  local skilllv = srcUser:GetLernedSkillLevel(306)
  local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel)
  if 5 < skilllv and skillID == 306 or skillID == 3303 or skillID == 819 then
    raceRed = math.max(raceRed - 0.06 * (skilllv - 5) - xinnian, 0)
  end
  local skilllv1 = srcUser:GetLernedSkillLevel(4762)
  if skillID == 4763 or skillID == 4764 or skillID == 4766 then
    raceRed = math.max(raceRed - 0.02 * skilllv1, 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 == 2 or maptype == 4) and targetUser:GetNpcID() ~= 40022 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.2 * (1 - math.sin(B * 3.14 / 2))
    A = 1 - B
  end
  if A <= 0.15 then
    A = 0.15
  end
  return A
end
No formula links

Changes: 20251127_update vs 20251105_standard_instalation

 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) and srcUser:HasBuffID(49325) then
  elseif srcUser:HasBuffID(49320) then
    targetRace = 2
  end
  if targetUser:HasBuffID(49320) and targetUser:HasBuffID(49325) then
  elseif targetUser:HasBuffID(49320) 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 xinnian = 0
  local skill_xinnian3 = srcUser:GetLernedSkillLevel(6013)
  local skill_xinnian1 = srcUser:GetLernedSkillLevel(6011)
  if srcUser:HasBuffID(1010201) then
    local layer_xinnian = srcUser:GetBuffLayer(1010201)
    xinnian = skill_xinnian3 * 0.01 * (1 + (layer_xinnian - 1) * (0.15 + skill_xinnian1 * 0.05))
  end
  local skilllv = srcUser:GetLernedSkillLevel(306)
  local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel)
  if 5 < skilllv and skillID == 306 or skillID == 3303 or skillID == 819 then
    raceRed = math.max(raceRed - 0.06 * (skilllv - 5) - xinnian, 0)
  end
  local skilllv1 = srcUser:GetLernedSkillLevel(4762)
  if skillID == 4763 or skillID == 4764 or skillID == 4766 then
    raceRed = math.max(raceRed - 0.02 * skilllv1, 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 == 2 or maptype == 4) and targetUser:GetNpcID() ~= 40022 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.2 * (1 - math.sin(B * 3.14 / 2))
    A = 1 - B
  end
   if A <= 0.15 then
    A = 0.15
  end
  return A
end

Version History

Loading dependencies...
Loading usage...