Formula

CommonFun.CalcElementParam2

formula.lua
1function CommonFun.CalcElementParam2(srcUser, targetUser, params, damageParam, logger)
2  local elementInc = 0
3  local elementRed = 0
4  local srcAtkElement = CommonFun.GetUserAtkAttr(srcUser, targetUser, params, damageParam)
5  local targetDefElement = targetUser:GetProperty("DefAttr")
6  if srcUser:HasBuffID(20510031_REGARD_THE_ENEMY_AS_DARK_ELEMENT_:MAX_STACK_0) then
7    targetDefElement = 7
8  end
9  if nil == srcAtkElement then
10    logger.error(string.format("%s srcAtkElement is nil", srcUser.name))
11    return 0
12  end
13  if nil == targetDefElement then
14    logger.error(string.format("%s targetDefElement is nil", targetUser.name))
15    return 0
16  end
17  if nil == CommonFun.NatureProps[targetDefElement] then
18    logger.error(string.format("%s CommonFun.NatureProps[%s] is nil", srcUser.name, tostring(targetDefElement)))
19    return 0
20  end
21  if nil == CommonFun.NatureProps[srcAtkElement] then
22    logger.error(string.format("CommonFun.NatureProps[%s] is nil", tostring(srcAtkElement)))
23    return 0
24  end
25  elementInc = srcUser:GetProperty(CommonFun.NatureProps[targetDefElement][1])
26  elementRed = targetUser:GetProperty(CommonFun.NatureProps[srcAtkElement][2])
27  elementAtk = srcUser:GetProperty(CommonFun.NatureProps[srcAtkElement][3])
28  local elementThrough = srcUser:GetProperty(CommonFun.NatureProps[srcAtkElement][4])
29  local elementResistance = targetUser:GetProperty(CommonFun.NatureProps[srcAtkElement][5])
30  if 0 <= elementRed then
31    elementRed = elementRed * math.max(1 - elementThrough, 0)
32  end
33  if 0 <= elementAtk then
34    elementAtk = elementAtk * math.max(1 - elementResistance, 0)
35  end
36  if nil == elementAtk then
37    elementAtk = 0
38  end
39  local skilllv = srcUser:GetLernedSkillLevel(306_LORD_KNIGHT:ASURA_STRIKE)
40  local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel)
41  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) and 0 <= elementRed then
42    elementRed = math.max(elementRed - 0.06 * (skilllv - 5), 0)
43  end
44  local skilllv1 = srcUser:GetLernedSkillLevel(4762_PHANTOM_DANCER:SPECIAL_DISCIPLINE_MODE)
45  if (skillID == 4763_PHANTOM_DANCER:STORM_GUST or skillID == 4764_PHANTOM_DANCER:SPIKED_CLUB_NORMAL_ATTACK or skillID == 4766_PHANTOM_DANCER:LARGE_SPIKED_CLUB) and 0 <= elementRed then
46    elementRed = math.max(elementRed - 0.02 * skilllv1, 0)
47  end
48  if (skillID == 1288_ASSASSIN:ARM_CANNON or skillID == 1812_HUNTER:FLAME_DRAGON_BLAST or skillID == 4310_CHRONOMANCER:PHOTON_CANNON) and 0 <= elementRed then
49    local GemValue = srcUser:GetGemValue(61002_ARM_CANNON_FLAME_DRAGON_BLAST_AND_PHOTON_CANNON_IGNORE_PERCENTAGE_OF_THE_ENEMY_S_CORRESPONDING_ATTRIBUTE_DMG_REDUC)
50    elementRed = math.max(elementRed - GemValue / 100000, 0)
51  end
52  local result = 1 + elementAtk - elementRed
53  local mapid, maptype = srcUser:GetMapInfo()
54  if (maptype == PVP_MAPS) and targetUser:GetNpcID() ~= 40022_EMPERIUM then
55    local pvpReduce = 0
56    local Master = targetUser:GetMasterUser()
57    if targetUser:GetNpcID() == 0 or Master ~= nil then
58      pvpReduce = 0.2
59    end
60    local B = elementRed - elementAtk
61    B = B < -1 and -1 or 1 < B and 1 or B
62    B = math.floor(B * 1000) / 1000
63    B = B + 0.3 * (1 - math.sin(B * 3.14 / 2)) + pvpReduce
64    result = 1 - B
65  end
66  if result <= 0.15 then
67    result = 0.15
68  end
69  return result
70end
Formula Graph

Connected Archive Data

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

Loading graph filters

CommonFun.CalcElementParam2

commonfun-calcelementparam

Nodes

0

Edges

0

Related Nodes

Select at least one node type.