Formula

CommonFun.ModifyCriDamage

formula.lua
1function CommonFun.ModifyCriDamage(srcUser, targetUser, params, logger, skillParams, damage)
2  local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel)
3  local damageParam = skillParams.Damage
4  if damageParam ~= nil and damageParam[1] ~= nil then
5    damageParam = damageParam[1]
6  end
7  local raceparam = CommonFun.CalcRaceParam(srcUser, targetUser, params, damageParam, logger)
8  local bodyparam = CommonFun.CalcBodyParam(srcUser, targetUser, params, damageParam, logger)
9  local elementparam = CommonFun.CalcElementParam(srcUser, targetUser, params, damageParam, logger)
10  local bossparam = CommonFun.CalcBossParam(srcUser, targetUser, params, damageParam, logger)
11  local raceparam2 = CommonFun.CalcRaceParam2(srcUser, targetUser, params, damageParam, logger)
12  local bodyparam2 = CommonFun.CalcBodyParam2(srcUser, targetUser, params, damageParam, logger)
13  local elementparam2 = CommonFun.CalcElementParam2(srcUser, targetUser, params, damageParam, logger)
14  local bossparam2 = CommonFun.CalcBossParam2(srcUser, targetUser, params, damageParam, logger)
15  local Str1 = srcUser:GetProperty("Str")
16  local Num1 = srcUser:GetRunePoint(62080_AESIR_INCREASE_AUTO_ATTACK_BY_20_WHEN_USING_NORMAL_ATTACKS_ATK_QUALITY_FROM_STR_1)
17  local Num2 = srcUser:GetRunePoint(51013_AESIR_ACOLYTE_PRIEST_AND_HIGH_PRIEST_S_AUTO_ATTACK_BONUS_CONVERTED_FROM_STRENGTH_INCREASES_BY_5_AUTO_ATTACK_INCREASES_BY)
18  local Num3 = srcUser:GetRunePoint(120010_AESIR_MONK_AND_CHAMPION_S_AUTO_ATTACK_BONUS_CONVERTED_FROM_STRENGTH_INCREASES_BY_5_AUTO_ATTACK_INCREASES_BY)
19  local Numlianj = srcUser:GetRunePoint(130110_AESIR_ATTRIBUTE_ATTACK_FROM_STR_3_WHEN_USING_AUTO_ATTACK_INCREASE_AUTO_ATTACK_BY)
20  local RuneDamage = Num1 * 0.01 + Num2 * 0.05 + Num3 * 0.05 + Numlianj * 0.03 + 1
21  local Str = Str1 * RuneDamage
22  local Dex = srcUser:GetProperty("Dex")
23  local Luk = srcUser:GetProperty("Luk")
24  local Int = srcUser:GetProperty("Int")
25  local Agi = srcUser:GetProperty("Agi")
26  local DamIncrease = srcUser:GetProperty("DamIncrease")
27  local MDamIncrease = CommonFun.calcMDamIncrease(srcUser, targetUser)
28  local race2 = targetUser.race
29  if targetUser:HasBuffID(139410_TWO_FACE_DEMON_KING_HUMAN_:MAX_STACK_0) then
30    race2 = 3
31  end
32  if srcUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) and srcUser:HasBuffID(49325_RACIAL_ANCIENT_RELICS_CD_:MAX_STACK_0) then
33  elseif srcUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) then
34    race2 = 2
35  end
36  local DefAttr2 = targetUser:GetProperty("DefAttr")
37  local skillLevel = srcUser:GetLernedSkillLevel(29_SWORDSMAN:AURA_BLADE)
38  local skillLevel1 = srcUser:GetLernedSkillLevel(1701_BLADE_SOUL:FIRE_SWORD)
39  local skillLevel2 = 0
40  if race2 == 3 or DefAttr2 == 9 or srcUser:HasBuffID(20510031_REGARD_THE_ENEMY_AS_DARK_ELEMENT_:MAX_STACK_0) and srcUser:HasBuffID(22000520_DEMON_BANE_IS_EFFECTIVE_ON_THE_DARK_ELEMENT_:MAX_STACK_0) or DefAttr2 == 7 and srcUser:HasBuffID(22000520_DEMON_BANE_IS_EFFECTIVE_ON_THE_DARK_ELEMENT_:MAX_STACK_0) then
41    skillLevel2 = srcUser:GetLernedSkillLevel(234_LORD_KNIGHT:DEMON_BANE)
42    if 10 < skillLevel2 then
43      skillLevel2 = 10
44    end
45  end
46  local SkillRealDamage1 = 0
47  if skillLevel <= 5 then
48    SkillRealDamage1 = skillLevel * 20
49  elseif 5 < skillLevel and skillLevel <= 10 then
50    SkillRealDamage1 = 100 + math.floor(Agi / 5) * ((skillLevel - 5) * 0.5 + 0.5)
51  else
52    SkillRealDamage1 = 100 + (skillLevel - 10) * 20 + math.floor(Agi / 5) * 3 + Luk * 2
53  end
54  local Numliehuo = srcUser:GetRunePoint(203003_AESIR_BOOST_SWORDS_OF_WILDFIRE_S_ALL_TRUE_DMG_BY_5)
55  local liehuo = 1 + Numliehuo * 0.05
56  local SkillRealDamage2 = 0
57  if skillLevel1 <= 10 then
58    SkillRealDamage2 = skillLevel1 * 20 * liehuo
59  else
60    SkillRealDamage2 = 200 * liehuo
61  end
62  local SkillRealDamage = SkillRealDamage1 + SkillRealDamage2
63  local BaseAtk = 0
64  local BaseMAtk = Int * 2 + math.floor(Int * Int / 100)
65  local BaseAtk1 = Str1 * 2 + math.floor(Str1 * Str1 / 100) + math.floor(Dex / 5) + math.floor(Luk / 5)
66  local BaseAtk2 = Dex * 2 + math.floor(Dex * Dex / 100) + math.floor(Str / 5) + math.floor(Luk / 5)
67  local BaseAtk3 = Str * 2 + math.floor(Str * Str / 100) + math.floor(Dex / 5) + math.floor(Luk / 5)
68  local NoramlAtkAdd = 5 * Str
69  local profressionID = srcUser:GetProfressionID()
70  local WeaponType = srcUser:GetEquipedWeaponType()
71  if (profressionID == 92_ROGUE or profressionID == 93_STALKER or profressionID == 94_SHADOW_CHASER or profressionID == 95_PHANTOM_DANCER) and WeaponType == 210 then
72    BaseAtk1 = BaseAtk2
73    BaseAtk3 = BaseAtk2
74    NoramlAtkAdd = 3 * Dex
75  end
76  for k, v in pairs(GameConfig.Atkcalculate) do
77    if v == profressionID then
78      BaseAtk1 = BaseAtk2
79      BaseAtk3 = BaseAtk2
80      NoramlAtkAdd = 3 * Dex
81    end
82  end
83  local Num4 = srcUser:GetRunePoint(52013_AESIR_ACOLYTE_PRIEST_AND_HIGH_PRIEST_S_M_ATK_BONUS_INCREASES_BY_7_AUTO_ATTACK_INCREASES_BY)
84  local Num5 = srcUser:GetRunePoint(52014)
85  local Num6 = srcUser:GetRunePoint(52015)
86  local Num7 = srcUser:GetRunePoint(52016)
87  local Num8 = srcUser:GetRunePoint(52017)
88  local Num9 = srcUser:GetRunePoint(52018)
89  local RuneDamage1 = (Num4 + Num5 + Num6 + Num7 + Num8 + Num9) * 0.07
90  local Atk1 = srcUser:GetProperty("Atk")
91  local MAtk = srcUser:GetProperty("MAtk")
92  local MAtkPer = srcUser:GetProperty("MAtkPer")
93  local MonkAtk = 0
94  if srcUser:HasBuffID(100510_CRITICAL_EXPLOSION_:MAX_STACK_0) then
95    MonkAtk = 5 * Int
96  end
97  local AtkSpdAdd = 0
98  local skilllv_SpdAdd = srcUser:GetLernedSkillLevel(22_SWORDSMAN:ONE_HAND_QUICKEN)
99  if srcUser:HasBuffID(80082_INCREASE_SWORD_S_ATTACK_SPD_PEAK_:MAX_STACK_0) and 10 < skilllv_SpdAdd then
100    AtkSpdAdd = (skilllv_SpdAdd - 10) * 120
101  end
102  local skilllv_mfzr = srcUser:GetLernedSkillLevel(3002_BLACKSMITH:ABYSS_CONTRACT)
103  local Opening = srcUser:GetSkillOptByOption(17)
104  local MagicAtk = 0
105  if 0 < skilllv_mfzr and Opening == 0 then
106    local Sp = srcUser:GetProperty("Sp")
107    MagicAtk = Sp * skilllv_mfzr * 0.2
108  end
109  local skilllv_element = srcUser:GetLernedSkillLevel(127_KNIGHT:ELEMENTAL_ARROW)
110  local atk_element = 0
111  if 10 < skilllv_element then
112    atk_element = Dex * ((skilllv_element - 10) * 0.5)
113  end
114  local NormalAtk = srcUser:GetProperty("NormalAtk")
115  NormalAtk = NormalAtk + NoramlAtkAdd
116  local Atk = Atk1 + RuneDamage1 * MAtk * (1 + MAtkPer) + MonkAtk + AtkSpdAdd + MagicAtk + atk_element + NormalAtk
117  local Num10 = srcUser:GetRunePoint(11022_AESIR_SWORDSMAN_S_ATK_BONUS_INCREASES_BY_3_AUTO_ATTACK_INCREASES_BY)
118  local Num11 = srcUser:GetRunePoint(203024_AESIR_INCREASE_THE_WARRIOR_OF_WILDFIRE_S_AUTO_ATK_BONUS_BY_3_AUTO_ATTACK)
119  local Num12 = srcUser:GetRunePoint(11024)
120  local Num13 = srcUser:GetRunePoint(12004)
121  local Num14 = srcUser:GetRunePoint(12011)
122  local Num16 = srcUser:GetRunePoint(70010_AESIR_FOR_CRUSADER_AUTO_ATTACKS_ATK_INCREASES_BY_3_AUTO_ATTACK_INCREASES_BY)
123  local RuneDamage2 = (Num10 + Num11 + Num12 + Num13 + Num14 + Num16) * 0.03
124  local Num15 = srcUser:GetRunePoint(120020_AESIR_FOR_LAUNCHING_AUTO_ATTACKS_ATK_INCREASES_BY_3_AUTO_ATTACK_INCREASES_BY)
125  local RuneDamage3 = Num15 * 0.03
126  local AtkPer1 = srcUser:GetProperty("AtkPer")
127  local AtkPer = AtkPer1 + RuneDamage2 + RuneDamage3
128  local MAtkPer = srcUser:GetProperty("MAtkPer")
129  local Refine = srcUser:GetProperty("Refine")
130  local MRefine = srcUser:GetProperty("MRefine")
131  local Vit2 = targetUser:GetProperty("Vit")
132  local VitPer2 = targetUser:GetProperty("VitPer")
133  local DamReduc2 = CommonFun.calcDamReDuc(srcUser, targetUser)
134  local RefineDamReduc = CommonFun.calcRefineDamReduc(srcUser, targetUser)
135  local RealDamage = targetUser:GetProperty("RealDamage")
136  if targetUser:HasBuffID(96050_LEX_AETERNA_:MAX_STACK_0) and 1 <= RealDamage and skillID == 359_RUNE_KNIGHT:PRESSURE then
137    RealDamage = RealDamage - 1
138  end
139  local AttrEffect = srcUser:GetProperty("AttrEffect")
140  local bits = CommonFun.getBits(AttrEffect)
141  local AttrEffect2 = targetUser:GetProperty("AttrEffect")
142  local bits2 = CommonFun.getBits(AttrEffect2)
143  local StateEffect = targetUser:GetProperty("StateEffect")
144  local bits3 = CommonFun.getBits(StateEffect)
145  local Weapon = srcUser:GetEquipedID(7_WEAPON)
146  if skillParams.RollType == 1 then
147    if bits[CommonFun.AttrEffect.NextAttackIncrease] == 1 then
148      damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * 2 * (1 + RealDamage) * (1 + skillLevel2 * 0.05)
149      if damage <= 0 then
150        damage = 0
151      end
152    elseif bits2[CommonFun.AttrEffect.NormalSkillDam] == 1 and (profressionID == 42_HUNTER_HUNTER or profressionID == 43_SNIPER_SNIPER or profressionID == 44_RANGER_RANGER or profressionID == 45_STELLAR_HUNTER_STELLAR_HUNTER or profressionID == 102_BARD_BARD or profressionID == 103_CLOWN_CLOWN or profressionID == 104_MINSTREL_MINSTREL or profressionID == 105_SOLAR_TROUVERE_SOLAR_TROUVERE or profressionID == 11_SWORDSMAN_SWORDSMAN2_DANCER_DANCER or profressionID == 11_SWORDSMAN_SWORDSMAN3_GYPSY_GYPSY or profressionID == 11_SWORDSMAN_SWORDSMAN4_WANDERER_WANDERER or profressionID == 11_SWORDSMAN_SWORDSMAN5_LUNA_DANSEUSE_LUNA_DANSEUSE) then
153      local targetid = targetUser:GetGuid()
154      local distance = srcUser:GetDistance(targetid)
155      local skilllv_1 = srcUser:GetLernedSkillLevel(133_KNIGHT:VULTURE_S_EYE)
156      local DisDam = 1
157      if 10 < skilllv_1 then
158        DisDam = 1 + distance / 7.5 * (skilllv_1 - 10) * 0.1
159        if srcUser:HasBuffID(131080_UNLIMITED_STARS_:MAX_STACK_0) then
160          DisDam = 1 + (skilllv_1 - 10) * 0.1
161        end
162        DisDam = math.min(DisDam, 2)
163      end
164      damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * 1.3 * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * DisDam
165      if damage <= 0 then
166        damage = 0
167      end
168    elseif bits3[CommonFun.StateEffect.Dizzy] == 1 and (Weapon == 40322_MURAMASA_1 or Weapon == 140322_MURAMASA_2) then
169      damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * 1.5
170      if damage <= 0 then
171        damage = 0
172      end
173    elseif skillID == 300_LORD_KNIGHT:STORM_GUST_LORD_KNIGHT:STORM_GUST or skillID == 469_RUNEMASTER:STORM_GUST or skillID == 1397_ASSASSIN_CROSS:STORM_GUST or skillID == 1446_ASSASSIN_CROSS:STORM_GUST or skillID == 252_LORD_KNIGHT:STORM_GUST_LORD_KNIGHT:STORM_GUST then
174      local targetid = targetUser:GetGuid()
175      local distance = srcUser:GetDistance(targetid)
176      local skilllv_1 = srcUser:GetLernedSkillLevel(133_KNIGHT:VULTURE_S_EYE)
177      local skilllv_2 = srcUser:GetLernedSkillLevel(478_RUNEMASTER:VULTURE_S_EYE)
178      local DisDam = 1
179      if 10 < skilllv_1 then
180        DisDam = 1 + distance / 7.5 * (skilllv_1 - 10) * 0.1
181        if srcUser:HasBuffID(131080_UNLIMITED_STARS_:MAX_STACK_0) then
182          DisDam = 1 + (skilllv_1 - 10) * 0.1
183        end
184        DisDam = math.min(DisDam, 2)
185      elseif 10 < skilllv_2 then
186        DisDam = 1 + distance / 7.5 * (skilllv_2 - 10) * 0.06
187        DisDam = math.min(DisDam, 1.6)
188      end
189      local fromid = targetUser:GetBuffFromID(116470_MARK_OF_DEATH_:MAX_STACK_0)
190      local guid = srcUser:GetGuid()
191      local BUffDam = 1
192      local skilllv_biaoji = srcUser:GetLernedSkillLevel(1147_ARCANE_MASTER:MARK_OF_DEATH)
193      local GemBiaoji = srcUser:GetGemValue(91121_MARK_OF_DEATH_DAMAGE_INCREASE_EFFECT_PERCENTAGE)
194      local Numxp = srcUser:GetRunePoint(94080_AESIR_MARK_OF_DEATH_EFFECT_2)
195      if fromid == guid then
196        BUffDam = 1 + skilllv_biaoji * 0.02 + Numxp * 0.02 + GemBiaoji / 100000
197      end
198      local SpAtk = 0
199      if srcUser:HasBuffID(131096_ATTACK_REDUCES_HP_AND_SP_:MAX_STACK_0) then
200        local Sp = srcUser:GetProperty("Sp")
201        SpAtk = Sp
202      end
203      damage = ((((Atk - BaseAtk1) * (1 + AtkPer) + SpAtk) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * DisDam * BUffDam
204      if damage <= 0 then
205        damage = 0
206      end
207    elseif skillID == 470_RUNEMASTER:STORM_GUST then
208      local Enemy = 1
209      local skilllv_zy = srcUser:GetLernedSkillLevel(1145_ARCANE_MASTER:PICK_EM_OFF)
210      if 0 < skilllv_zy and 1 >= srcUser:GetRangeEnemy(3) then
211        Enemy = 1 + skilllv_zy * 0.03
212      end
213      damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * Enemy
214      if damage <= 0 then
215        damage = 0
216      end
217    else
218      damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05)
219      if damage <= 0 then
220        damage = 0
221      end
222    end
223  elseif bits[CommonFun.AttrEffect.NextAttackIncrease] == 1 then
224    damage = ((MAtk - BaseMAtk) * (1 + MAtkPer) + BaseMAtk + MRefine) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 + MDamIncrease) * 2 * (1 + RealDamage)
225  elseif bits2[CommonFun.AttrEffect.NormalSkillDam] == 1 and (profressionID == 42_HUNTER_HUNTER or profressionID == 43_SNIPER_SNIPER or profressionID == 44_RANGER_RANGER or profressionID == 45_STELLAR_HUNTER_STELLAR_HUNTER or profressionID == 102_BARD_BARD or profressionID == 103_CLOWN_CLOWN or profressionID == 104_MINSTREL_MINSTREL or profressionID == 105_SOLAR_TROUVERE_SOLAR_TROUVERE or profressionID == 11_SWORDSMAN_SWORDSMAN2_DANCER_DANCER or profressionID == 11_SWORDSMAN_SWORDSMAN3_GYPSY_GYPSY or profressionID == 11_SWORDSMAN_SWORDSMAN4_WANDERER_WANDERER or profressionID == 11_SWORDSMAN_SWORDSMAN5_LUNA_DANSEUSE_LUNA_DANSEUSE) then
226    local targetid = targetUser:GetGuid()
227    local distance = srcUser:GetDistance(targetid)
228    local skilllv_1 = srcUser:GetLernedSkillLevel(133_KNIGHT:VULTURE_S_EYE)
229    local DisDam = 1
230    if 10 < skilllv_1 then
231      DisDam = 1 + distance / 7.5 * (skilllv_1 - 10) * 0.1
232      if srcUser:HasBuffID(131080_UNLIMITED_STARS_:MAX_STACK_0) then
233        DisDam = 1 + (skilllv_1 - 10) * 0.1
234      end
235      DisDam = math.min(DisDam, 2)
236    end
237    damage = ((MAtk - BaseMAtk) * (1 + MAtkPer) + BaseMAtk + MRefine) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 + MDamIncrease) * 1.3 * (1 + RealDamage) * DisDam
238  else
239    damage = ((MAtk - BaseMAtk) * (1 + MAtkPer) + BaseMAtk + MRefine) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 + MDamIncrease) * (1 + RealDamage)
240  end
241  if targetUser:GetNpcID() == 30028_YEAR then
242    damage = 1
243  end
244  local elementDam = CommonFun.DoCalcElementDam(srcUser, targetUser, params, damageParam)
245  local stateDam = CommonFun.DoCalcStateEffectDam(srcUser, targetUser)
246  local fromid = targetUser:GetBuffFromID(45000120_REPENTANCE_:MAX_STACK_0)
247  local guid = srcUser:GetGuid()
248  local BUffDam = 1
249  if fromid == guid then
250    BUffDam = 1.3
251  end
252  local RefineLv = srcUser:GetEquipedRefineLv(7_WEAPON)
253  local HolyEquip = 1
254  if (Weapon == 40319_HOLY_AVENGER_1 or Weapon == 140319_HOLY_AVENGER_2) and (profressionID == 11_SWORDSMAN_SWORDSMAN or profressionID == 12_KNIGHT_KNIGHT or profressionID == 13_LORD_KNIGHT_LORD_KNIGHT or profressionID == 14_RUNE_KNIGHT_RUNE_KNIGHT or profressionID == 15_RUNEMASTER_RUNEMASTER or profressionID == 203_FLAMES_FLAMES or profressionID == 204_WARRIOR_OF_WILDFIRE_WARRIOR_OF_WILDFIRE or profressionID == 205_INFERNO_ARMOR_INFERNO_ARMOR or profressionID == 72_CRUSADER_CRUSADER or profressionID == 73_PALADIN_PALADIN or profressionID == 74_ROYAL_GUARD_ROYAL_GUARD or profressionID == 75_DIVINE_AVENGER_DIVINE_AVENGER or profressionID == 605_THANATOS_THANATOS or profressionID == 665_RATHGRICY_RATHGRICY or profressionID == 695_ANCIENT_ARTIFACT_USER_ANCIENT_ARTIFACT_USER) then
255    HolyEquip = 1 + 0.05 * RefineLv
256  end
257  if (Weapon == 40360_HEAVENS_1 or Weapon == 140360_HEAVENS_2) and (profressionID == 11_SWORDSMAN_SWORDSMAN or profressionID == 12_KNIGHT_KNIGHT or profressionID == 13_LORD_KNIGHT_LORD_KNIGHT or profressionID == 14_RUNE_KNIGHT_RUNE_KNIGHT or profressionID == 15_RUNEMASTER_RUNEMASTER or profressionID == 203_FLAMES_FLAMES or profressionID == 204_WARRIOR_OF_WILDFIRE_WARRIOR_OF_WILDFIRE or profressionID == 205_INFERNO_ARMOR_INFERNO_ARMOR or profressionID == 72_CRUSADER_CRUSADER or profressionID == 73_PALADIN_PALADIN or profressionID == 74_ROYAL_GUARD_ROYAL_GUARD or profressionID == 75_DIVINE_AVENGER_DIVINE_AVENGER or profressionID == 605_THANATOS_THANATOS or profressionID == 665_RATHGRICY_RATHGRICY or profressionID == 695_ANCIENT_ARTIFACT_USER_ANCIENT_ARTIFACT_USER) then
258    HolyEquip = 1 + 0.05 * RefineLv
259  end
260  local zhufu = 1
261  if srcUser:HasBuffID(129040_HAMMER_OF_BLESSINGS_:MAX_STACK_0) or srcUser:HasBuffID(129041_HAMMER_OF_BLESSINGS_SHORT_TERM_:MAX_STACK_0) then
262    local skilllv_zf = srcUser:GetLernedSkillLevel(3610_PALADIN:HAMMER_OF_BLESSINGS)
263    local GemValue = srcUser:GetGemValue(51161_BLESSING_HAMMER_S_INHERITED_AUTO_ATK_PERCENTAGE)
264    zhufu = 1 + skilllv_zf * 0.05 + GemValue / 100000
265  end
266  local hualiBuff = srcUser:HasBuffID(24441_BAZERALD_:MAX_STACK_0)
267  local huali = 1
268  if hualiBuff == true and srcUser:HasBuffID(90001903_BAZERALD_TIER_4_:MAX_STACK_0) then
269    huali = 1.25
270  elseif hualiBuff == true then
271    huali = 1.1
272  end
273  local Ninja = 1
274  local NinjaDamPer = 1
275  if skillID == 2010_SNIPER:FLOWING_BLADE or skillID == 2011_SNIPER:FLOWING_BLADE_II_SNIPER:FLOWING_BLADE_II or skillID == 2012_SNIPER:FLOWING_BLADE_III_SNIPER:FLOWING_BLADE_III or skillID == 2013_SNIPER:FLOWING_BLADE_IV_SNIPER:FLOWING_BLADE_IV then
276    local Agi = srcUser:GetProperty("Agi")
277    local AgiRune = srcUser:GetRunePoint(163012_AESIR_FOR_EVERY_10_POINTS_OF_AGI_AUTO_ATTACK_DMG_0_4)
278    local AgiDam = 1 + math.floor(Agi / 10) * AgiRune * 0.004
279    local Famous = 1
280    local RefineLv7 = srcUser:GetEquipedRefineLv(7_WEAPON)
281    if srcUser:HasBuffID(44360_RENOWNED_BLADE_MURAMASA_:MAX_STACK_0) then
282      Famous = Famous * (RefineLv7 * 0.01 + 1)
283    end
284    if srcUser:HasBuffID(44370_MONSTER_KNIFE_MURAMASA_:MAX_STACK_0) then
285      Famous = Famous * (RefineLv7 * 0.03 + 1)
286    end
287    Ninja = AgiDam * Famous
288  end
289  if skillID == 2011_SNIPER:FLOWING_BLADE_II_SNIPER:FLOWING_BLADE_II then
290    NinjaDamPer = 1.5
291  end
292  if skillID == 2012_SNIPER:FLOWING_BLADE_III_SNIPER:FLOWING_BLADE_III then
293    NinjaDamPer = 3
294  end
295  if skillID == 2013_SNIPER:FLOWING_BLADE_IV_SNIPER:FLOWING_BLADE_IV then
296    local Rune = srcUser:GetRunePoint(163021_AESIR_AUTO_ATTACK_FINAL_STYLE_FLOWING_BLADE_IV_DMG_5)
297    NinjaDamPer = 6 * (1 + Rune * 0.05)
298  end
299  if skillID == 2200_STELLAR_HUNTER:STORM_GUST and WeaponType == 320 then
300    damage = damage * 2
301  end
302  if skillID == 300_LORD_KNIGHT:STORM_GUST_LORD_KNIGHT:STORM_GUST or skillID == 113_KNIGHT:STORM_GUST or skillID == 252_LORD_KNIGHT:STORM_GUST_LORD_KNIGHT:STORM_GUST then
303    local guid = srcUser:GetGuid()
304    local Debuff_Layer_1 = targetUser:GetBuffLayerByIDAndFromID(96082, guid)
305    local Debuff_Layer_2 = targetUser:GetBuffLayerByIDAndFromID(96083, guid)
306    local sw_dam = math.max(Debuff_Layer_1, Debuff_Layer_2) * 0.06 + 1
307    damage = damage * sw_dam
308  end
309  if skillID == 173_KNIGHT:STORM_GUST then
310    local skilllv_qihei = srcUser:GetLernedSkillLevel(194_KNIGHT:FULLBLACK_CLAW)
311    if targetUser:GetBuffActive(95500) then
312      damage = damage * (1 + 0.15 * skilllv_qihei)
313    end
314  end
315  if skillID == 2822_SAINT:PIERCING_ARROW then
316    local skilllv_sy = srcUser:GetLernedSkillLevel(2811_SAINT:MOON_SHOT)
317    local ratio = 1
318    if targetUser:GetNpcID() ~= 0 and 7 <= skilllv_sy then
319      ratio = 2
320    end
321    local skilllv_xy = srcUser:GetLernedSkillLevel(2818_SAINT:BLOODMOON)
322    local Hp2 = targetUser:GetProperty("Hp")
323    local MaxHp2 = targetUser:GetProperty("MaxHp")
324    local HpRatio = 1 + (MaxHp2 - Hp2) / MaxHp2 * skilllv_xy * 0.2
325    damage = damage * (2 + skilllv_sy) * ratio * HpRatio
326  end
327  if skillID == 2809_SAINT:STORM_GUST or skillID == 2810_SAINT:STORM_GUST then
328    local skilllv_xy = srcUser:GetLernedSkillLevel(2818_SAINT:BLOODMOON)
329    local Hp2 = targetUser:GetProperty("Hp")
330    local MaxHp2 = targetUser:GetProperty("MaxHp")
331    local HpRatio = 1 + (MaxHp2 - Hp2) / MaxHp2 * skilllv_xy * 0.2
332    damage = damage * HpRatio
333  end
334  if skillID == 4733_SHADOW_CHASER:SONIC_ASSAULT_SHADOW_CHASER:SONIC_ASSAULT then
335    local skill_yinsu = srcUser:GetLernedSkillLevel(4733_SHADOW_CHASER:SONIC_ASSAULT)
336    local Master = srcUser:GetMasterUser()
337    local qianxi = srcUser:GetGemValue(218111_SONIC_ASSAULT_DMG_PERCENTAGE)
338    if Master ~= nil then
339      skill_yinsu = Master:GetLernedSkillLevel(4733_SHADOW_CHASER:SONIC_ASSAULT)
340      qianxi = Master:GetGemValue(218111_SONIC_ASSAULT_DMG_PERCENTAGE)
341    end
342    damage = damage * 7 * (skill_yinsu * 0.1 - 0.03) * (1 + qianxi / 100000)
343  end
344  if skillID == 4737_SHADOW_CHASER:DEADLY_SHADOW_SHADOW_CHASER:DEADLY_SHADOW then
345    local skill_yinsha = srcUser:GetLernedSkillLevel(4737_SHADOW_CHASER:DEADLY_SHADOW)
346    local yinsha = 0
347    if targetUser:HasBuffID(140143_DEADLY_SHADOW_MARK_:MAX_STACK_0) == false then
348      yinsha = srcUser:GetGemValue(218121_DMG_OF_DEADLY_SHADOW_S_FIRST_SLASH_TO_EACH_TARGET_PERCENTAGE)
349    end
350    damage = damage * (skill_yinsha * 0.4 + 2) * (1 + yinsha / 100000)
351  end
352  if skillID == 4737_SHADOW_CHASER:DEADLY_SHADOW_SHADOW_CHASER:DEADLY_SHADOW or skillID == 4733_SHADOW_CHASER:SONIC_ASSAULT_SHADOW_CHASER:SONIC_ASSAULT then
353    local SkillDam = srcUser:GetProperty("SkillDam")
354    local Master = srcUser:GetMasterUser()
355    local wudang = 0
356    if Master ~= nil and Master:HasBuffID(90006174_THE_NAMELESS_EQUIPMENT_USES_INFUSE_SHORT_SWORD_1_TIER_5_:MAX_STACK_0) then
357      wudang = 1
358    end
359    if srcUser:HasBuffID(90006174_THE_NAMELESS_EQUIPMENT_USES_INFUSE_SHORT_SWORD_1_TIER_5_:MAX_STACK_0) then
360      wudang = 1
361    end
362    damage = damage * (1 + wudang * SkillDam)
363  end
364  if skillID == 328_RUNE_KNIGHT:DIMENSION_SLASH then
365    local skill_ciyuan = srcUser:GetLernedSkillLevel(3020_BLACKSMITH:DIMENSION_SLASH_STAGNATION)
366    local ciyuan = 1 + skill_ciyuan * 0.08
367    damage = damage * ciyuan
368  end
369  if (skillID == 4778_PHANTOM_DANCER:AUTO_ATTACK_TRIGGER or skillID == 4779_PHANTOM_DANCER:AUTO_ATTACK_REPLACE or skillID == 4780_PHANTOM_DANCER:STORM_GUST) and srcUser:HasBuffID(90007034_BELL_EQUIPMENT_INFUSED_WEAPONS_TIER_5_:MAX_STACK_0) then
370    local shandian = srcUser:GetBuffLayer(140841_FIRE_BOLT_CHARGING_:MAX_STACK_0)
371    damage = damage * (1 + 0.1 * shandian)
372  end
373  damage = damage * elementDam * stateDam * BUffDam * HolyEquip * zhufu * Ninja * NinjaDamPer * huali
374  return damage
375end
Formula Graph

Connected Archive Data

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

Loading graph filters

CommonFun.ModifyCriDamage

commonfun-modifycridamage

Nodes

0

Edges

0

Related Nodes

Select at least one node type.