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
70endFormula Graph
Connected Archive Data
See which cards, equipment, headwears, buffs, and other archived records connect to this formula.
Loading graph filters
CommonFun.CalcElementParam2
commonfun-calcelementparam2
Nodes
0
Edges
0
Related Nodes
Select at least one node type.
