Formula
CommonFun.CalcHitRate
formula.lua
1function CommonFun.CalcHitRate(srcUser, targetUser, skillParams)
2 local Hit = srcUser:GetProperty("Hit")
3 local Flee2 = targetUser:GetProperty("Flee")
4 local StateEffect2 = targetUser:GetProperty("StateEffect")
5 local bits2 = CommonFun.getBits(StateEffect2)
6 local srcAttrEffect = srcUser:GetProperty("AttrEffect3")
7 local bits4 = CommonFun.getBits(srcAttrEffect)
8 local isCanBlock = true
9 if bits4[CommonFun.AttrEffect3.MustHit] == 1 and srcUser:HasBuffID(21930030_UNIVERSE_FUSION_IS_GUARANTEED_TO_HIT_:MAX_STACK_0) then
10 isCanBlock = false
11 end
12 local targetAttrEffect = targetUser:GetProperty("AttrEffect3")
13 local bits5 = CommonFun.getBits(targetAttrEffect)
14 if bits5[CommonFun.AttrEffect3.CantBlock] == 1 then
15 isCanBlock = false
16 end
17 local skill_qy = srcUser:GetLernedSkillLevel(2561_HIGH_PRIEST:SUPREME_POWER)
18 if 7 <= skill_qy and srcUser:HasBuffID(136780_11105_:MAX_STACK_0) and targetUser:HasBuffID(136781_11106_:MAX_STACK_0) then
19 isCanBlock = false
20 end
21 if srcUser:HasBuffID(140022_DEADLY_GAZE_:MAX_STACK_0) and targetUser:HasBuffID(140021_DEADLY_GAZE_:MAX_STACK_0) then
22 isCanBlock = false
23 end
24 local Master = srcUser:GetMasterUser()
25 if Master ~= nil and Master:HasBuffID(140022_DEADLY_GAZE_:MAX_STACK_0) and targetUser:HasBuffID(140021_DEADLY_GAZE_:MAX_STACK_0) then
26 isCanBlock = false
27 end
28 local skilllv_1 = skillParams.id
29 local Num1 = srcUser:GetRunePoint(32011_AESIR_SONIC_BLOW_HIT_10)
30 local Num2 = srcUser:GetRunePoint(32012_AESIR_SONIC_BLOW_HIT_5)
31 local RuneHit = Num1 * 0.1 + Num2 * 0.05
32 local Num3 = srcUser:GetRunePoint(70130_AESIR_HIT_OF_SHIELD_CHARGE_20)
33 local RuneHit2 = Num3 * 0.2
34 local SkillHit = skillParams.SkillHit or 0
35 if skilllv_1 == nil then
36 RuneHit = 0
37 end
38 if math.floor(skilllv_1 / 1000) == 181 or math.floor(skilllv_1 / 1000) == 1111 then
39 SkillHit = (skillParams.SkillHit or 0) + RuneHit
40 end
41 if math.floor(skilllv_1 / 1000) == 355 then
42 SkillHit = (skillParams.SkillHit or 0) + RuneHit2
43 end
44 if math.floor(skilllv_1 / 1000) == 2020 then
45 local fbGem = srcUser:GetGemValue(163111_DART_CAST_HIT_PERCENTAGE)
46 SkillHit = (skillParams.SkillHit or 0) + fbGem / 100000
47 end
48 if math.floor(skilllv_1 / 1000) == 188 then
49 local xlGem = srcUser:GetGemValue(31061_SOUL_BREAKER_HIT_PERCENTAGE)
50 SkillHit = (skillParams.SkillHit or 0) + xlGem / 100000
51 end
52 if math.floor(skilllv_1 / 1000) == 228 or math.floor(skilllv_1 / 1000) == 229 or math.floor(skilllv_1 / 1000) == 1478 then
53 local Gem = srcUser:GetGemValue(143061_CART_ATTACK_HIT_RATE_PERCENTAGE)
54 SkillHit = (skillParams.SkillHit or 0) + Gem / 100000
55 end
56 if math.floor(skilllv_1 / 1000) == 1261 or math.floor(skilllv_1 / 1000) == 1272 or math.floor(skilllv_1 / 1000) == 1713 or math.floor(skilllv_1 / 1000) == 1727 then
57 local DragonGem = srcUser:GetGemValue(11003_DRAGON_BREATH_AND_DRAGON_S_WATER_BREATH_HIT_PERCENTAGE)
58 SkillHit = (skillParams.SkillHit or 0) + DragonGem / 100000
59 end
60 local rate = (Hit + 80) * (1 + SkillHit) - Flee2
61 if bits2[CommonFun.StateEffect.Dizzy] == 1 or bits2[CommonFun.StateEffect.Freeze] == 1 or bits2[CommonFun.StateEffect.Stone] == 1 or bits2[CommonFun.StateEffect.Sleep] == 1 then
62 rate = 100
63 end
64 if math.floor(skilllv_1 / 1000) == 319 or math.floor(skilllv_1 / 1000) == 306 or math.floor(skilllv_1 / 1000) == 310 or math.floor(skilllv_1 / 1000) == 411 or math.floor(skilllv_1 / 1000) == 422 or math.floor(skilllv_1 / 1000) == 91001 or math.floor(skilllv_1 / 1000) == 410 then
65 rate = 100
66 end
67 if math.floor(skilllv_1 / 1000) == 1284 or math.floor(skilllv_1 / 1000) == 1288 or math.floor(skilllv_1 / 1000) == 1122 or math.floor(skilllv_1 / 1000) == 3303 or math.floor(skilllv_1 / 1000) == 819 or math.floor(skilllv_1 / 1000) == 3706 or math.floor(skilllv_1 / 1000) == 1812 or math.floor(skilllv_1 / 1000) == 1835 or math.floor(skilllv_1 / 1000) == 1817 or math.floor(skilllv_1 / 1000) == 5604 then
68 rate = 100
69 end
70 if math.floor(skilllv_1 / 1000) == 2563 or math.floor(skilllv_1 / 1000) == 2572 or math.floor(skilllv_1 / 1000) == 2741 or math.floor(skilllv_1 / 1000) == 4717 or math.floor(skilllv_1 / 1000) == 4718 or math.floor(skilllv_1 / 1000) == 4702 or math.floor(skilllv_1 / 1000) == 4714 then
71 rate = 100
72 end
73 if math.floor(skilllv_1 / 1000) == 4317 or math.floor(skilllv_1 / 1000) == 4319 then
74 local Master = srcUser:GetMasterUser()
75 if Master ~= nil and Master:HasBuffID(49120_GOLDEN_SPIRIT_BOAT_:MAX_STACK_0) then
76 rate = 100
77 end
78 end
79 if srcUser:HasBuffID(115090_SACRIFICE_:MAX_STACK_0) or srcUser:HasBuffID(115091_SACRIFICE_:MAX_STACK_0) or srcUser:HasBuffID(232170_SACRIFICE_:MAX_STACK_0) then
80 local Hp = srcUser:GetProperty("Hp")
81 local MaxHp = srcUser:GetProperty("MaxHp")
82 if Hp > MaxHp * 0.09 and (math.floor(skilllv_1 / 1000) == 372 or math.floor(skilllv_1 / 1000) == 63022) then
83 rate = 100
84 end
85 end
86 if srcUser:HasBuffID(128091_SONG_OF_SUNLIGHT_ENEMY_:MAX_STACK_0) and rate == 100 then
87 local MustMissRate = srcUser:GetProperty("MustMissRate")
88 rate = 100 * (1 - MustMissRate)
89 end
90 if srcUser:HasBuffID(133580_FLASH_GRENADE_:MAX_STACK_0) or srcUser:HasBuffID(133581_FLASH_GRENADE_PEAK_:MAX_STACK_0) then
91 local MustMissRate = srcUser:GetProperty("MustMissRate")
92 rate = math.min(rate, 100) * (1 - MustMissRate)
93 end
94 if srcUser:HasBuffID(165540_EAGLE_EYE_:MAX_STACK_0) then
95 rate = 100
96 end
97 if CommonFun.RollType.Attack == skillParams.RollType and srcUser:HasBuffID(49120_GOLDEN_SPIRIT_BOAT_:MAX_STACK_0) or isCanBlock == false then
98 rate = 100
99 end
100 rate = CommonFun.Clamp(rate, 5, 100)
101 if srcUser:HasBuffID(44522_2569_:MAX_STACK_0) or srcUser:HasBuffID(44532_2569_:MAX_STACK_0) then
102 rate = 0
103 end
104 return rate
105endFormula Graph
Connected Archive Data
See which cards, equipment, headwears, buffs, and other archived records connect to this formula.
Loading graph filters
CommonFun.CalcHitRate
commonfun-calchitrate
Nodes
0
Edges
0
Related Nodes
Select at least one node type.
