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
105end
Formula 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.