Formula

CommonFun.ModifyMagicCriDam

formula.lua
1function CommonFun.ModifyMagicCriDam(srcUser, targetUser, params, skillParams, damage)
2  local skilllv_1 = skillParams.id
3  if 0 < damage and (CommonFun.RollType.Magic == skillParams.RollType and srcUser:IsAttackSkill(params.skillIDAndLevel) == false or math.floor(skilllv_1 / 1000) == 4787) and (srcUser:HasBuffID(35600_WHEEL_OF_FORTUNE_FOUR_LEAF_CLOVER_1_:MAX_STACK_0) or srcUser:HasBuffID(43230_EXORCISM_SACHET_:MAX_STACK_0) or srcUser:HasBuffID(55170_SHELL_CHEPET_CARD_:MAX_STACK_0) or srcUser:HasBuffID(66730_5672_:MAX_STACK_0) or srcUser:HasBuffID(55890_SHELL_CHEPET_CARD_:MAX_STACK_0) or srcUser:HasBuffID(70450_9586_:MAX_STACK_0) or srcUser:HasBuffID(56700_11924_:MAX_STACK_0) or srcUser:HasBuffID(56730_11927_:MAX_STACK_0) or srcUser:HasBuffID(55710_10355_:MAX_STACK_0) or srcUser:HasBuffID(73550_1_:MAX_STACK_0) or srcUser:HasBuffID(57700_WHISPER_LEGION_CARD_:MAX_STACK_0) or srcUser:HasBuffID(74870_23_:MAX_STACK_0) or srcUser:HasBuffID(57170_CAMORRA_CARD_:MAX_STACK_0) or srcUser:HasBuffID(23200_EXORCISM_SACHET_INFUSE_:MAX_STACK_0) or srcUser:HasBuffLayer(23200, EBUFFERLAYER_SHADOW) or srcUser:HasBuffID(59160_ALIEN_PRIEST_MAGALETA_CARD_:MAX_STACK_0) or srcUser:HasBuffID(140800_THE_HESTIA_KNIFE_:MAX_STACK_0) or srcUser:HasBuffID(59510_23455_DUNGEON_COLLABORATION_BELLE_CARD_:MAX_STACK_0) or srcUser:HasBuffID(700850_3033965_PUSS_IN_BOOTS_RED_:MAX_STACK_0)) then
4    local Luk = srcUser:GetProperty("Luk")
5    local CriDamNum = 1.5 + math.floor(Luk / 6) / 100
6    if srcUser:HasBuffID(81002780_13328_:MAX_STACK_0) then
7      CriDamNum = CriDamNum + math.floor(Luk / 6) / 1000
8    end
9    if srcUser:HasBuffID(140860_UNYIELDING_WILL_LUK_:MAX_STACK_0) then
10      local skilllv = srcUser:GetLernedSkillLevel(4784_PHANTOM_DANCER:UNYIELDING_WILL)
11      CriDamNum = CriDamNum + skilllv * 0.1
12    end
13    local CriDamPer = srcUser:GetProperty("CriDamPer")
14    local SkillDamPer = srcUser:GetProperty("SkillDamPer")
15    if srcUser:HasBuffID(140920_YEARNING_OR_LONGING_:MAX_STACK_0) then
16      local skilllv = srcUser:GetLernedSkillLevel(4792_PHANTOM_DANCER:BLADE_RESONANCE)
17      local zhuanwu = 1
18      CriDamNum = CriDamNum + skilllv * CriDamPer * zhuanwu / 20
19    end
20    if srcUser:HasBuffID(81005110_23455_DUNGEON_COLLABORATION_BELLE_CARD_:MAX_STACK_0) then
21      CriDamNum = CriDamNum + math.floor(CriDamPer * 100 / 20) / 100
22    end
23    local Ring1 = srcUser:GetEquipedID(5_ACCESSORY)
24    local RefineLv1 = srcUser:GetEquipedRefineLv(5_ACCESSORY)
25    local Ring2 = srcUser:GetEquipedID(6_ACCESSORY)
26    local RefineLv2 = srcUser:GetEquipedRefineLv(6_ACCESSORY)
27    local RefineLv7 = srcUser:GetEquipedRefineLv(7_WEAPON)
28    local CriNum1 = 0
29    if srcUser:HasBuffID(35600_WHEEL_OF_FORTUNE_FOUR_LEAF_CLOVER_1_:MAX_STACK_0) then
30      CriNum1 = 20
31    end
32    local a = 0
33    local b = 0
34    if (Ring1 == 44076_EXORCISM_SACHET_EXORCISM_SACHET_EXORCISM_SACHET or Ring1 == 144076_EXORCISM_SACHET_1_EXORCISM_SACHET_1_EXORCISM_SACHET_1) and RefineLv1 < 8 then
35      a = 3
36    elseif (Ring1 == 44076_EXORCISM_SACHET_EXORCISM_SACHET_EXORCISM_SACHET or Ring1 == 144076_EXORCISM_SACHET_1_EXORCISM_SACHET_1_EXORCISM_SACHET_1) and 8 <= RefineLv1 and RefineLv1 < 12 then
37      a = 6
38    elseif (Ring1 == 44076_EXORCISM_SACHET_EXORCISM_SACHET_EXORCISM_SACHET or Ring1 == 144076_EXORCISM_SACHET_1_EXORCISM_SACHET_1_EXORCISM_SACHET_1) and 12 <= RefineLv1 then
39      a = 10
40    end
41    if (Ring2 == 44076_EXORCISM_SACHET_EXORCISM_SACHET_EXORCISM_SACHET or Ring2 == 144076_EXORCISM_SACHET_1_EXORCISM_SACHET_1_EXORCISM_SACHET_1) and RefineLv2 < 8 then
42      b = 3
43    elseif (Ring2 == 44076_EXORCISM_SACHET_EXORCISM_SACHET_EXORCISM_SACHET or Ring2 == 144076_EXORCISM_SACHET_1_EXORCISM_SACHET_1_EXORCISM_SACHET_1) and 8 <= RefineLv2 and RefineLv2 < 12 then
44      b = 6
45    elseif (Ring2 == 44076_EXORCISM_SACHET_EXORCISM_SACHET_EXORCISM_SACHET or Ring2 == 144076_EXORCISM_SACHET_1_EXORCISM_SACHET_1_EXORCISM_SACHET_1) and 12 <= RefineLv2 then
46      b = 10
47    end
48    local aa = 0
49    local bb = 0
50    local equipRing5 = srcUser:getEquip(CommonFun.PackType.EPACKTYPE_EQUIP, CommonFun.EquipPos.EEQUIPPOS_ACCESSORY1)
51    if equipRing5.id == 44166 or equipRing5.id == 144166 then
52      if 0 <= equipRing5.refinelv and 8 > equipRing5.refinelv then
53        aa = 3
54      elseif 8 <= equipRing5.refinelv and 12 > equipRing5.refinelv then
55        aa = 6
56      elseif 12 <= equipRing5.refinelv then
57        aa = 10
58      end
59    end
60    local equipRingSD5 = srcUser:getEquip(CommonFun.PackType.EPACKTYPE_SHADOWEQUIP, CommonFun.EquipPos.EEQUIPPOS_ACCESSORY1)
61    if equipRingSD5.id == 44166 or equipRingSD5.id == 144166 then
62      if 0 <= equipRingSD5.refinelv and 8 > equipRingSD5.refinelv then
63        aa = 3 * equipRingSD5.quench_per / 100
64      elseif 8 <= equipRingSD5.refinelv and 12 > equipRingSD5.refinelv then
65        aa = 6 * equipRingSD5.quench_per / 100
66      elseif 12 <= equipRingSD5.refinelv then
67        aa = 10 * equipRingSD5.quench_per / 100
68      end
69    end
70    local equipRing6 = srcUser:getEquip(CommonFun.PackType.EPACKTYPE_EQUIP, CommonFun.EquipPos.EEQUIPPOS_ACCESSORY2)
71    if equipRing6.id == 44166 or equipRing6.id == 144166 then
72      if 0 <= equipRing6.refinelv and 8 > equipRing6.refinelv then
73        bb = 3
74      elseif 8 <= equipRing6.refinelv and 12 > equipRing6.refinelv then
75        bb = 6
76      elseif 12 <= equipRing6.refinelv then
77        bb = 10
78      end
79    end
80    local equipRingSD6 = srcUser:getEquip(CommonFun.PackType.EPACKTYPE_SHADOWEQUIP, CommonFun.EquipPos.EEQUIPPOS_ACCESSORY2)
81    if equipRingSD6.id == 44166 or equipRingSD6.id == 144166 then
82      if 0 <= equipRingSD6.refinelv and 8 > equipRingSD6.refinelv then
83        bb = 3 * equipRingSD6.quench_per / 100
84      elseif 8 <= equipRingSD6.refinelv and 12 > equipRingSD6.refinelv then
85        bb = 6 * equipRingSD6.quench_per / 100
86      elseif 12 <= equipRingSD6.refinelv then
87        bb = 10 * equipRingSD6.quench_per / 100
88      end
89    end
90    local CriNum2 = a + b + aa + bb
91    local CardBK = srcUser:GetEquipCardNum(7, 20189_SHELL_CHEPET_CARD)
92    local CardBK1 = srcUser:GetEquipCardNum(7, 24113_SHELL_CHEPET_STAR_CARD)
93    local CardKL = srcUser:GetEquipCardNum(7, 23256)
94    local CardConjuror = srcUser:GetEquipCardNum(2, 23252_SORCERER_STAR_CARD)
95    local CardCamorra = srcUser:GetEquipCardNum(7, 23334_CAMORRA_CARD)
96    local CardHighPriest = srcUser:GetEquipCardNum(2, 23433_ALIEN_PRIEST_MAGALETA_CARD)
97    local CardBE = srcUser:GetEquipCardNum(8, 23455_BELL_CRANEL_CARD)
98    local CriNum3 = CardBK * 15 + CardBK1 * 17.5 + CardKL * 10 + CardConjuror * 10 + CardCamorra * (5 + RefineLv7) + CardHighPriest * 15 + CardBE * 10
99    local CardNumH1 = srcUser:GetEquipCardNum(5, 23064_WITCH_OF_CALAMITY_CARD)
100    local CardNumH2 = srcUser:GetEquipCardNum(6, 23064_WITCH_OF_CALAMITY_CARD)
101    local CardNumB1 = srcUser:GetEquipCardNum(5, 23324)
102    local CardNumB2 = srcUser:GetEquipCardNum(6, 23324)
103    local CriNum5 = CardNumH1 * 10 + CardNumH2 * 10 + CardNumB1 * 8 + CardNumB2 * 8
104    local CriNum4 = 0
105    local RefineLv3 = srcUser:GetEquipedRefineLv(11)
106    if srcUser:HasBuffID(66730_5672_:MAX_STACK_0) and 6 <= RefineLv3 then
107      CriNum4 = 20
108    elseif srcUser:HasBuffID(66730_5672_:MAX_STACK_0) and RefineLv3 < 6 then
109      CriNum4 = 10
110    end
111    local CriNum6 = 0
112    local RefineLv10 = srcUser:GetEquipedRefineLv(10)
113    if srcUser:HasBuffID(70450_9586_:MAX_STACK_0) then
114      CriNum6 = 5 + RefineLv10 * 1
115    end
116    local CriNum7 = 0
117    local RefineLv8 = srcUser:GetEquipedRefineLv(8)
118    if srcUser:HasBuffID(73550_1_:MAX_STACK_0) then
119      CriNum7 = 10 + RefineLv8 * 1
120    end
121    local CriNum8 = 0
122    if srcUser:HasBuffID(74870_23_:MAX_STACK_0) then
123      CriNum8 = 10
124    end
125    local RefineLv12 = srcUser:GetEquipedRefineLv(12)
126    if srcUser:HasBuffID(700850_3033965_PUSS_IN_BOOTS_RED_:MAX_STACK_0) then
127      CriNum8 = CriNum8 + 10
128    end
129    if srcUser:HasBuffID(700850_3033965_PUSS_IN_BOOTS_RED_:MAX_STACK_0) and 6 <= RefineLv12 then
130      CriNum8 = CriNum8 + 5
131    end
132    local CriNum9 = 0
133    if srcUser:HasBuffID(140800_THE_HESTIA_KNIFE_:MAX_STACK_0) then
134      local skilllv_be = srcUser:GetLernedSkillLevel(4781_PHANTOM_DANCER:THE_HESTIA_KNIFE)
135      local skilllv_mxz = srcUser:GetLernedSkillLevel(4790_PHANTOM_DANCER:ADVENTURER)
136      local ManualLevel = srcUser:GetManualLevel()
137      local Manual = 1
138      if 1 <= skilllv_mxz then
139        Manual = 1 + math.min(math.floor(ManualLevel / 10), 5) * 0.02 * skilllv_mxz
140      end
141      CriNum9 = Luk * 0.01 * skilllv_be * Manual
142      if srcUser:HasBuffID(140815_LUK_:MAX_STACK_0) and 4 <= skilllv_be then
143        CriNum9 = CriNum9 * 2
144      end
145    end
146    local CriNum = CriNum1 + CriNum2 + CriNum3 + CriNum4 + CriNum5 + CriNum6 + CriNum7 + CriNum8 + CriNum9
147    if CommonFun.IsInRate(CriNum, srcUser:GetRandom()) then
148      damage = damage * CriDamNum
149      local mapid, maptype = srcUser:GetMapInfo()
150      if 2147483647 <= damage and (mapid == PONAPE_SECRET_REALM or mapid == WHITESTAR_AIRSHIP or mapid == PALACE_OF_GHOST_-_EPIC_SPIRIT or mapid == QUAINT_COTTAGE or mapid == ELEGANT_HOUSE or mapid == GARDEN or mapid == TOWER_OF_EVILNESS_V or mapid == TOWER_OF_HEAT_V or mapid == TOWER_OF_WORLDLINE_V or mapid == TOWER_OF_DOOM_V or mapid == DARK_FINALE_-_EPIC_SPIRIT or mapid == SPACE_OF_TIME_-_EPIC_SPIRIT or mapid == TOWER_OF_EVILNESS_IV or mapid == TOWER_OF_HEAT_IV or mapid == TOWER_OF_WORLDLINE_IV or mapid == TOWER_OF_DOOM_IV or mapid == ABYSSAL_LAKE or srcUser:InDamReduceRaid() == true and srcUser:IsUserCamp() == true) then
151        return damage, CommonFun.DamageType.Crit
152      else
153        return math.min(damage, 2147483647), CommonFun.DamageType.Crit
154      end
155    end
156  end
157end
Formula Graph

Connected Archive Data

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

Loading graph filters

CommonFun.ModifyMagicCriDam

commonfun-modifymagiccridam

Nodes

0

Edges

0

Related Nodes

Select at least one node type.