The Heroic Shot

The Heroic Shot

Lv 1AttackSkill Delay: 1 sec

Unlocked for use in the 【Limit Off】 state, deals an ultimate strike to a single target for (Atk + M.Atk) * 3200%. 【The Heroic Shot】 is neither "magic" nor Slash, ignoring enemy Reflected damage, magic immunity, Magic Reduc., and M.Def. When calculating damage bonuses, it is treated as magic damage and can trigger a Critical.

CD: 10 sec
Range: 3

Formula

1function CommonFun.calcDamage_80501(srcUser, targetUser, params, damageParam, logger)
2  local Int = srcUser:GetProperty("Int")
3  local Vit = srcUser:GetProperty("Vit")
4  local Str = srcUser:GetProperty("Str")
5  local Dex = srcUser:GetProperty("Dex")
6  local Luk = srcUser:GetProperty("Luk")
7  local Atk = srcUser:GetProperty("Atk")
8  local AtkPer = srcUser:GetProperty("AtkPer")
9  local MAtk = srcUser:GetProperty("MAtk")
10  local MAtkPer = srcUser:GetProperty("MAtkPer")
11  local MDamIncrease = CommonFun.calcMDamIncrease(srcUser, targetUser)
12  local MDamSpike = srcUser:GetProperty("MDamSpike_MPEN")
13  local IgnoreMDef = srcUser:GetProperty("IgnoreMDef")
14  if 1 <= IgnoreMDef then
15    IgnoreMDef = 1
16  end
17  local Refine = srcUser:GetProperty("Refine")
18  local MRefine = srcUser:GetProperty("MRefine")
19  local RangeDam = srcUser:GetProperty("RangeDam")
20  local srcAtkElement = CommonFun.GetUserAtkAttr(srcUser, targetUser, params, damageParam)
21  local targetDefElement = targetUser:GetProperty("DefAttr")
22  local raceparam = CommonFun.CalcRaceParam(srcUser, targetUser, params, damageParam, logger)
23  local bodyparam = CommonFun.CalcBodyParam(srcUser, targetUser, params, damageParam, logger)
24  local elementparam = CommonFun.CalcElementParam(srcUser, targetUser, params, damageParam, logger)
25  local bossparam = CommonFun.CalcBossParam(srcUser, targetUser, params, damageParam, logger)
26  local raceparam2 = CommonFun.CalcRaceParam2(srcUser, targetUser, params, damageParam, logger)
27  local bodyparam2 = CommonFun.CalcBodyParam2(srcUser, targetUser, params, damageParam, logger)
28  local elementparam2 = CommonFun.CalcElementParam2(srcUser, targetUser, params, damageParam, logger)
29  local bossparam2 = CommonFun.CalcBossParam2(srcUser, targetUser, params, damageParam, logger)
30  local MDef2 = targetUser:GetProperty("MDef")
31  local MDefPer2 = targetUser:GetProperty("MDefPer")
32  local Vit2 = targetUser:GetProperty("Vit")
33  local VitPer2 = targetUser:GetProperty("VitPer")
34  local Int2 = targetUser:GetProperty("Int")
35  local IntPer2 = targetUser:GetProperty("IntPer")
36  local MDamReduc2 = CommonFun.calcMDamReDuc(srcUser, targetUser)
37  local RefineMDamReduc = CommonFun.calcRefineMDamReduc(srcUser, targetUser)
38  local damChangePer = damageParam.damChangePer
39  local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel)
40  local NormalAtk = srcUser:GetProperty("NormalAtk")
41  NormalAtk = NormalAtk + 3 * Int
42  if skillID == 4796_PHANTOM_DANCER:M_ATK then
43    NormalAtk = 0
44  end
45  local BaseAtk = Str * 2 + math.floor(Str * Str / 100) + math.floor(Dex / 5) + math.floor(Luk / 5)
46  local AtkFinal = ((Atk - BaseAtk) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam + BaseAtk) * raceparam * bossparam * bossparam2
47  local BaseMAtk = Int + math.floor(Int * Int / 100)
48  local MAtkFinal = ((MAtk - BaseMAtk + NormalAtk) * (1 + MAtkPer) + BaseMAtk) * raceparam * bossparam * bossparam2
49  local MDefReduc = CommonFun.CalcMDef(srcUser, targetUser)
50  if skillID == 4801_PHANTOM_DANCER:M_ATK then
51    local skill_cj = srcUser:GetLernedSkillLevel(4792_PHANTOM_DANCER:BLADE_RESONANCE)
52    damChangePer = skill_cj * 0.08 + 0.2
53  end
54  local A = (MAtkFinal * MDefReduc * (1 - MDamReduc2) + MRefine) * (1 - RefineMDamReduc) * damChangePer * (1 + MDamIncrease) * CommonFun.calcMagicElement(srcUser, targetUser, params, damageParam) * elementparam2 - Vit2 / 2 * (1 + VitPer2) - Int2 * (1 + IntPer2)
55  if skillID == 4782_PHANTOM_DANCER:FIRE_BOLT then
56    local GemValue = srcUser:GetGemValue(220101_EACH_STACK_OF_FIRE_BOLT_CHARGE_INCREASES_PERCENTAGE_OF_FIRE_BOLT_DAMAGE)
57    local FireNum = srcUser:GetBuffLayer(140842_FIRE_BOLT_CHARGING_BUILT_IN_:MAX_STACK_0)
58    local GemDam = 1 + GemValue / 100000 * FireNum
59    A = ((AtkFinal + MAtkFinal) * MDefReduc * (1 - MDamReduc2) + (Refine + MRefine)) * (1 - RefineMDamReduc) * damChangePer * (1 + MDamIncrease) * GemDam * CommonFun.calcMagicElement(srcUser, targetUser, params, damageParam) * elementparam2 - Vit2 / 2 * (1 + VitPer2) - Int2 * (1 + IntPer2)
60  end
61  local NormalAtkDam = srcUser:GetProperty("NormalAtkDam")
62  local GemValue = srcUser:GetGemValue(220111_THE_HEROIC_SHOT_IS_AFFECTED_BY_AUTO_ATTACK_DMG_INC_WITH_AN_IMPACT_RATIO_OF_PERCENTAGE)
63  local NormalEnd = 1
64  if 0 < GemValue then
65    NormalEnd = 1 + NormalAtkDam * GemValue / 100000
66  end
67  if skillID == 4787_PHANTOM_DANCER:THE_HEROIC_SHOT then
68    A = ((AtkFinal + MAtkFinal) * (1 + MDamSpike) + (Refine + MRefine)) * (1 - RefineMDamReduc) * damChangePer * (1 + MDamIncrease) * NormalEnd * CommonFun.calcMagicElement(srcUser, targetUser, params, damageParam) * elementparam2 - Vit2 / 2 * (1 + VitPer2) - Int2 * (1 + IntPer2)
69  end
70  if skillID == 4796_PHANTOM_DANCER:M_ATK then
71    local NormalAtkRes = targetUser:GetProperty("NormalAtkRes")
72    NormalEnd = 1 + NormalAtkDam - NormalAtkRes
73    NormalEnd = math.max(NormalEnd, 0.1)
74    A = (MAtkFinal * MDefReduc * (1 - MDamReduc2) + MRefine) * (1 - RefineMDamReduc) * damChangePer * NormalEnd * (1 + MDamIncrease) * CommonFun.calcMagicElement(srcUser, targetUser, params, damageParam) * elementparam2 - Vit2 / 2 * (1 + VitPer2) - Int2 * (1 + IntPer2)
75    if srcUser:HasBuffID(90007034_BELL_EQUIPMENT_INFUSED_WEAPONS_TIER_5_:MAX_STACK_0) then
76      local shandian = srcUser:GetBuffLayer(140841_FIRE_BOLT_CHARGING_:MAX_STACK_0)
77      A = A * (1 + 0.1 * shandian)
78    end
79  end
80  if A <= 1 then
81    return 1
82  end
83  return A
84end
Preserved HTML snapshot from ROM Handbook