Formula

CommonFun.CalcCritRate

formula.lua
1function CommonFun.CalcCritRate(srcUser, targetUser, skillParams)
2  local Cri = srcUser:GetProperty("Cri")
3  local CriRes2 = targetUser:GetProperty("CriRes")
4  local Hp = targetUser:GetProperty("Hp")
5  local MaxHp = targetUser:GetProperty("MaxHp")
6  local targetRace = targetUser.race
7  if targetUser:HasBuffID(139410_TWO_FACE_DEMON_KING_HUMAN_:MAX_STACK_0) then
8    targetRace = 3
9  end
10  if srcUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) and srcUser:HasBuffID(49325_RACIAL_ANCIENT_RELICS_CD_:MAX_STACK_0) then
11  elseif srcUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) then
12    targetRace = 2
13  end
14  local DefAttr2 = targetUser:GetProperty("DefAttr")
15  local AttrEffect = srcUser:GetProperty("AttrEffect2")
16  local bits = CommonFun.getBits(AttrEffect)
17  local skillLevel = srcUser:GetLernedSkillLevel(250_LORD_KNIGHT:FERITY_AWAKENING)
18  local rate = Cri - CriRes2
19  local Card1 = srcUser:GetEquipCardNum(7, 20097_KOBOLD_ARCHER_CARD)
20  local Card2 = srcUser:GetEquipCardNum(7, 20030_GOBLIN_ARCHER_CARD)
21  local Card3 = srcUser:GetEquipCardNum(7, 20031_STEAM_GOBLIN_CARD)
22  local Card4 = srcUser:GetEquipCardNum(7, 24016_SEAL_CUB_CARD)
23  local Card5 = srcUser:GetEquipCardNum(7, 20114_CRUISER_CARD)
24  local Card6 = srcUser:GetEquipCardNum(3, 20160_ROWEEN_CARD)
25  local Card7 = srcUser:GetEquipCardNum(3, 20173_PANDA_PORING_CARD)
26  local Card8 = srcUser:GetEquipCardNum(7, 20187_CRAB_CARD)
27  local Card9 = srcUser:GetEquipCardNum(7, 20197_DRILLER_CARD)
28  local Card10 = srcUser:GetEquipCardNum(7, 20200_WIND_SPIRIT_TURTLE_CARD)
29  local a = 0
30  local b = 0
31  local c = 0
32  local d = 0
33  local e = 0
34  local f = 0
35  local g = 0
36  local h = 0
37  local i = 0
38  if targetRace == 4 then
39    a = Card1 * 20
40  end
41  if targetRace == 5 then
42    b = Card2 * 20
43  end
44  if targetRace == 6 then
45    c = Card3 * 20
46  end
47  if bits[CommonFun.AttrEffect2.MushiCrit] == 1 and (targetRace == 3 or DefAttr2 == 9) then
48    d = Card4 * 9
49  end
50  if targetRace == 1 then
51    e = Card5 * 10
52  end
53  if targetRace == 7 then
54    f = Card6 * 20 + Card8 * 20
55  end
56  if targetRace == 1 or targetRace == 4 then
57    g = Card7 * 15
58  end
59  if targetRace == 10 then
60    h = Card9 * 20
61  end
62  if targetRace == 2 then
63    i = Card10 * 20
64  end
65  local mapid, maptype = srcUser:GetMapInfo()
66  local CriDef = 0
67  if (maptype == PVP_MAPS) and targetUser:GetNpcID() ~= 40022_EMPERIUM then
68    CriDef = math.floor((Cri - CriRes2) / 3)
69    CriDef = math.max(CriDef, 0)
70  end
71  local Hp_rate = 0.3
72  if 5 < skillLevel then
73    Hp_rate = Hp_rate + (skillLevel - 5) * 0.04
74  end
75  if Hp <= MaxHp * Hp_rate then
76    rate = Cri - CriRes2 + math.min(skillLevel * 6, 30) + a + b + c + d + e + f + g + h - CriDef
77  else
78    rate = Cri - CriRes2 + a + b + c + d + e + f + g + h + i - CriDef
79  end
80  if (targetUser:GetNpcID() ~= 0 or targetUser.boss or targetUser.mini) and srcUser:HasBuffID(64710_3915_:MAX_STACK_0) then
81    rate = 100
82  end
83  if srcUser:HasBuffID(115090_SACRIFICE_:MAX_STACK_0) or srcUser:HasBuffID(115091_SACRIFICE_:MAX_STACK_0) then
84    local Hp = srcUser:GetProperty("Hp")
85    local MaxHp = srcUser:GetProperty("MaxHp")
86    if Hp > MaxHp * 0.09 then
87      rate = 0
88    end
89  end
90  if targetUser:HasBuffID(159610_STONE_SKIN_:MAX_STACK_0) then
91    rate = rate * 0.75
92  end
93  local Profession = srcUser:GetProfressionID()
94  if Profession == 625_SHADOW_SAITAMA then
95    rate = 0
96  end
97  if targetUser:GetNpcID() == 30043_YEAR then
98    rate = 0
99  end
100  if targetUser:GetNpcID() == 56008_GOMORA or targetUser:GetNpcID() == 56009_BALTAN or targetUser:GetNpcID() == 56010_GOLZA or targetUser:GetNpcID() == 56011_BEMSTAR or targetUser:GetNpcID() == 56012_ELEKING or targetUser:GetNpcID() == 56013_KING_JOE then
101    rate = 0
102  end
103  if targetUser:HasBuffID(20310140_CANNOT_BE_HIT_WITH_PHYSICAL_CRITS_DURING_HALLUCINATION_WALK_:MAX_STACK_0) and (targetUser:HasBuffID(116070_HALLUCINATION_WALK_:MAX_STACK_0) or targetUser:HasBuffID(116072_HALLUCINATION_WALK_PEAK_2_0_:MAX_STACK_0)) then
104    rate = 0
105  end
106  if targetUser:HasBuffID(151028_DEFENSE_TOWER_TAKE_AUTO_ATK_ONLY_:MAX_STACK_0) then
107    rate = 0
108  end
109  if srcUser:GetNpcID() == 580101_NIGHT_SHADOW or srcUser:GetNpcID() == 580102_NIGHT_SHADOW or srcUser:GetNpcID() == 580103_NIGHT_SHADOW or srcUser:GetNpcID() == 580104_NIGHT_SHADOW or srcUser:GetNpcID() == 580105_NIGHT_SHADOW then
110    rate = 0
111  end
112  if srcUser:GetNpcID() == 580400_TARU_WYVERN then
113    rate = 0
114  end
115  rate = CommonFun.Clamp(rate, 0, 100)
116  return rate
117end
Formula Graph

Connected Archive Data

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

Loading graph filters

CommonFun.CalcCritRate

commonfun-calccritrate

Nodes

0

Edges

0

Related Nodes

Select at least one node type.