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
117endFormula 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.
