Formula

CommonFun.GetElementRate

formula.lua
1function CommonFun.GetElementRate(srcUser, srcAtkElement, targetUser, targetDefElement, params, damageParam)
2  if srcAtkElement < 1 or 10 < srcAtkElement then
3    return 0
4  end
5  if targetDefElement < 1 or 10 < targetDefElement then
6    return 0
7  end
8  local ElementRate = GameConfig.ElementRestrain[srcAtkElement][targetDefElement]
9  if params ~= nil and damageParam ~= nil then
10    local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel)
11    if (skillID == 1700_BLADE_SOUL:TWIN_FLAME_SLASH or skillID == 1725_ARCHER:SUPER_SPRING_TWIN_FLAME_SLASH) and (targetDefElement == 3 or targetDefElement == 4) then
12      local skilllv = srcUser:GetLernedSkillLevel(1715_ARCHER:WHITE_BLAZE_S_PROTECTION)
13      ElementRate = 0.75 + skilllv * 0.05
14    end
15    if (skillID == 2705_ARCHBISHOP:INVASION or skillID == 2706_ARCHBISHOP:ABYSSAL_SPEAR) and targetDefElement == 2 then
16      ElementRate = 1
17    end
18    if srcAtkElement == 10 and targetUser:GetBuffActive(137004) then
19      ElementRate = math.max(1, ElementRate)
20    end
21    if srcAtkElement == 1 and srcUser:HasBuffID(141230_WIND_MONSTER_MASTERY_:MAX_STACK_0) and (targetDefElement == 2 or targetDefElement == 1) then
22      ElementRate = 1
23    end
24  end
25  local srcAtkLevel = CommonFun.GetUserAtkLevel(srcUser, srcAtkElement, params, damageParam)
26  local tarDefLevel = CommonFun.GetUserDefLevel(targetUser, targetDefElement)
27  if srcUser:HasBuffID(22000991_WIND_FIELD_:MAX_STACK_0) and srcAtkElement == 1 or srcUser:HasBuffID(22000992_TERRITORY_:MAX_STACK_0) and srcAtkElement == 2 or srcUser:HasBuffID(22000993_WATER_SECTOR_:MAX_STACK_0) and srcAtkElement == 3 or srcUser:HasBuffID(22000994_FIRE_DOMAIN_:MAX_STACK_0) and srcAtkElement == 4 or srcUser:HasBuffID(22000996_SPACE_FIELD_:MAX_STACK_0) and srcAtkElement == 5 or srcUser:HasBuffID(22000995_TIME_FIELD_:MAX_STACK_0) and srcAtkElement == 8 then
28    ElementRate = ElementRate + 0.15
29  end
30  if srcUser:HasBuffID(116832_WIND_ELEMENT_:MAX_STACK_0) and srcAtkElement == 1 or srcUser:HasBuffID(116833_EARTH_ELEMENT_:MAX_STACK_0) and srcAtkElement == 2 or srcUser:HasBuffID(116831_AQUA_ELEMENTAL_:MAX_STACK_0) and srcAtkElement == 3 or srcUser:HasBuffID(116830_FIRE_ELEMENT_:MAX_STACK_0) and srcAtkElement == 4 or srcUser:HasBuffID(116834_THOUGHT_ELEMENT_:MAX_STACK_0) and srcAtkElement == 8 then
31    local skilllv = srcUser:GetLernedSkillLevel(1163_THIEF:ELEMENTAL_ENHANCEMENT)
32    ElementRate = ElementRate + 0.02 * skilllv
33  end
34  if srcUser:HasBuffID(130503_PHANTOM_:MAX_STACK_0) and srcAtkElement == 10 and targetUser:GetNpcID() ~= 0 then
35    local skilllv_sh = srcUser:GetLernedSkillLevel(3908_DIVINE_AVENGER:SOUL_EROSION)
36    ElementRate = ElementRate + 0.04 * skilllv_sh
37  end
38  if srcUser:HasBuffID(138320_HEAVENLY_POWER_:MAX_STACK_5) and srcAtkElement == 1 then
39    local leishen = srcUser:GetBuffLayer(138320_HEAVENLY_POWER_:MAX_STACK_5)
40    local skilllv = srcUser:GetLernedSkillLevel(2792_SAINT:LIGHTNING_POWER)
41    ElementRate = ElementRate + skilllv * 0.02 * leishen
42  end
43  if srcUser:HasBuffID(141800_ATTUNEMENT_OF_FATE_:MAX_STACK_0) and srcAtkElement == 5 then
44    local skilllv = srcUser:GetLernedSkillLevel(4852_PHANTOM_DANCER:UNDERCURRENTS_SURGE)
45    ElementRate = ElementRate + skilllv * 0.03
46  end
47  if 3 <= tarDefLevel then
48    ElementRate = ElementRate + (srcAtkLevel - 1) * 0.25 - 0.25 - (tarDefLevel - 2) * 0.125
49  elseif 2 <= tarDefLevel and tarDefLevel < 3 then
50    ElementRate = ElementRate + (srcAtkLevel - 1) * 0.25 - 0.25
51  else
52    ElementRate = ElementRate + (srcAtkLevel - 1) * 0.25
53  end
54  if ElementRate < 0 then
55    ElementRate = 0
56  end
57  return ElementRate
58end
Formula Graph

Connected Archive Data

See which cards, equipment, headwears, buffs, and other archived records connect to this formula.

Loading graph filters

CommonFun.GetElementRate

commonfun-getelementrate

Nodes

0

Edges

0

Related Nodes

Select at least one node type.