Formula

CommonFun.CheckMissAndBlock

formula.lua
1function CommonFun.CheckMissAndBlock(srcUser, targetUser, params, skillParams, iscrit, damage)
2  if damage <= 0 then
3    return
4  end
5  if (targetUser.boss or targetUser.mini or targetUser.changelinepunish) and (targetUser.zoneType == 1 or targetUser.zoneType == 22) and targetUser.noPunishBoss == false then
6    local AttrFunction = srcUser:GetProperty("AttrFunction")
7    local bitfunc = CommonFun.getBits(AttrFunction)
8    if bitfunc[CommonFun.AttrFunction.JustInViceZone] == 1 and targetUser.isBossFromBranch == false then
9      return 0, CommonFun.DamageType.Miss
10    end
11  end
12  if CommonFun.checkAttrFunctionMiss(targetUser, srcUser) then
13    return 0, CommonFun.DamageType.Miss
14  end
15  if targetUser.boss and targetUser.zoneType == 22 and CommonFun.CheckStormBossMiss(targetUser, srcUser) then
16    return 0, CommonFun.DamageType.Miss
17  end
18  if CommonFun.RollType.Attack == skillParams.RollType then
19    if srcUser:IsAttackSkill(params.skillIDAndLevel) then
20      if iscrit == false and CommonFun.IsMiss(srcUser, targetUser, skillParams) == true then
21        return 0, CommonFun.DamageType.Miss
22      end
23    elseif not srcUser:IsAttackSkill(params.skillIDAndLevel) and CommonFun.IsMiss(srcUser, targetUser, skillParams) == true then
24      return 0, CommonFun.DamageType.Miss
25    end
26  end
27  local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel)
28  local DefAttr2 = targetUser:GetProperty("DefAttr")
29  local AttrEffect2 = targetUser:GetProperty("AttrEffect")
30  local bits2 = CommonFun.getBits(AttrEffect2)
31  local AttrEffect3 = targetUser:GetProperty("AttrEffect2")
32  local bits3 = CommonFun.getBits(AttrEffect3)
33  if targetUser:IsImmuneSkill(skillID) then
34    return 0, CommonFun.DamageType.Miss
35  end
36  if skillID == 160_KNIGHT:TURN_UNDEAD and DefAttr2 == CommonFun.Nature.Undead and targetUser.boss == false and targetUser.mini == false and targetUser:GetNpcID() ~= 18143_TIME_KEEPER_PAST and targetUser:GetNpcID() ~= 18144_TIME_KEEPER_PRESENT and targetUser:GetNpcID() ~= 18145_TIME_KEEPER_FUTURE and targetUser:HasBuffID(160000_BOSS_IMMUNE_EFFECT_:MAX_STACK_0) == false then
37    local Luk = srcUser:GetProperty("Luk")
38    local Int = srcUser:GetProperty("Int")
39    local BaseLv = srcUser.BaseLv
40    local Hp = targetUser:GetProperty("Hp")
41    local MaxHp = targetUser:GetProperty("MaxHp")
42    local rate = (20 * skillLevel + Luk + Int + BaseLv + (1 - Hp / MaxHp) * 200) / 10
43    if 70 <= rate then
44      rate = 70
45    end
46    if CommonFun.IsInRate(rate, srcUser:GetRandom()) then
47      return targetUser:GetProperty("MaxHp"), CommonFun.DamageType.Normal
48    end
49  end
50  if bits2[CommonFun.AttrEffect.NoMagicDamage] == 1 and CommonFun.RollType.Magic == skillParams.RollType then
51    return 0, CommonFun.DamageType.WeaponBlock
52  end
53  if bits2[CommonFun.AttrEffect.NoPhysicalDamage] == 1 and CommonFun.RollType.Attack == skillParams.RollType then
54    return 0, CommonFun.DamageType.WeaponBlock
55  end
56  if bits2[CommonFun.AttrEffect.IgnoreNearNormalSkill] == 1 and nil ~= skillParams.Launch_Type and CommonFun.LaunchType.CloseAttack == skillParams.Launch_Type then
57    return 0, CommonFun.DamageType.WeaponBlock
58  end
59  local isCanBlock = CommonFun.IsCanBlock(srcUser, targetUser)
60  if bits2[CommonFun.AttrEffect.IgnoreNearPhysicalSkill] == 1 and skillParams.Launch_Range ~= nil and CommonFun.IsLongSkill(skillParams.Launch_Range) == false and skillParams.RollType == 1 and skillID == 319_LORD_KNIGHT:PALM_PUSH_STRIKE and skillID == 4717_SHADOW_CHASER:SOLAR_AURA_SKYFIRE and skillID == 4718_SHADOW_CHASER:SOLAR_AURA_SKYFIRE and skillID == 4702_SHADOW_CHASER:SCORCHING_REALM and skillID == 4714_SHADOW_CHASER:SOLAR_AURA and isCanBlock == true then
61    return 0, CommonFun.DamageType.Barrier
62  end
63  if bits2[CommonFun.AttrEffect.IgnoreFarSkill] == 1 and skillParams.Launch_Range ~= nil and CommonFun.IsLongSkill(skillParams.Launch_Range) == true and skillParams.RollType == 1 and skillID == 2227_STELLAR_HUNTER:CRACK_SHOT and skillID == 2243_STELLAR_HUNTER:ABSOLUTE_PENETRATION and skillID == 2251_STELLAR_HUNTER:FORCED_DISPEL and skillID == 2741_SAINT:FIRE_STRIKE and skillID == 4717_SHADOW_CHASER:SOLAR_AURA_SKYFIRE and skillID == 4718_SHADOW_CHASER:SOLAR_AURA_SKYFIRE and skillID == 4702_SHADOW_CHASER:SCORCHING_REALM and skillID == 4714_SHADOW_CHASER:SOLAR_AURA and srcUser:HasBuffID(59300_STRIKE_OF_INFILTRATION_CARD_:MAX_STACK_0) == false and isCanBlock == true then
64    return 0, CommonFun.DamageType.Barrier
65  end
66  if skillParams.Launch_Range ~= nil and skillParams.RollType == 1 and skillParams.Logic == "SkillLockedTarget" and isCanBlock == true and targetUser:HasBuffID(132080_DARK_NIGHT_HUNTER_:MAX_STACK_0) then
67    local Bufflv = targetUser:GetBuffLevel(132080_DARK_NIGHT_HUNTER_:MAX_STACK_0)
68    local WeaponType = targetUser:GetEquipedWeaponType()
69    local ShadowNum = targetUser:GetPetCount("ShadowNpc")
70    local Rate = Bufflv * ShadowNum * 2
71    if CommonFun.IsInRate(Rate, srcUser:GetRandom()) and WeaponType == 210 then
72      return 0, CommonFun.DamageType.Miss
73    end
74  end
75  if skillParams.Launch_Range ~= nil and CommonFun.IsLongSkill(skillParams.Launch_Range) == true and skillParams.RollType == 1 and skillParams.Logic == "SkillLockedTarget" and isCanBlock == true then
76    local Rate = 0
77    if targetUser:HasBuffID(118172_FOG_WALL_FLEE_:MAX_STACK_0) then
78      local Bufflv = targetUser:GetBuffLevel(118172_FOG_WALL_FLEE_:MAX_STACK_0)
79      Rate = Bufflv * 10 + 20
80    end
81    if targetUser:HasBuffID(90160_WIND_WALK_SPEED_SHIFT_:MAX_STACK_0) or targetUser:HasBuffID(123280_HISS_:MAX_STACK_0) then
82      local Value = targetUser:GetProperty("LongFleeRate")
83      Rate = Rate + Value
84    end
85    if CommonFun.IsInRate(Rate, srcUser:GetRandom()) and srcUser:HasBuffID(49120_GOLDEN_SPIRIT_BOAT_:MAX_STACK_0) == false then
86      return 0, CommonFun.DamageType.Miss
87    end
88  end
89  if skillParams.Launch_Range ~= nil and CommonFun.IsLongSkill(skillParams.Launch_Range) == true and skillParams.RollType == 1 and isCanBlock == true then
90    local Rate = 0
91    if targetUser:HasBuffID(133644_TAKE_COVER_ATTRIBUTE_:MAX_STACK_0) or targetUser:HasBuffID(136010_FALLING_:MAX_STACK_0) or targetUser:HasBuffID(136011_FALLING_PEAK_:MAX_STACK_0) then
92      Rate = targetUser:GetProperty("LongFleeRate")
93    end
94    if CommonFun.IsInRate(Rate, srcUser:GetRandom()) and srcUser:HasBuffID(49120_GOLDEN_SPIRIT_BOAT_:MAX_STACK_0) == false then
95      return 0, CommonFun.DamageType.Miss
96    end
97  end
98  if targetUser:HasBuffID(20910160_VANISHED_AVOIDS_AOE_MAGIC_:MAX_STACK_0) and targetUser:HasBuffID(106100_VANISHED_:MAX_STACK_0) and CommonFun.RollType.Magic == skillParams.RollType and skillParams.Logic ~= "SkillLockedTarget" and isCanBlock == true and 0 < damage then
99    return 0, CommonFun.DamageType.Miss
100  end
101  if srcUser:HasBuffID(136780_11105_:MAX_STACK_0) and targetUser:HasBuffID(136781_11106_:MAX_STACK_0) == false then
102    return 0, CommonFun.DamageType.Miss
103  end
104  if srcUser:HasBuffID(136781_11106_:MAX_STACK_0) == false and targetUser:HasBuffID(136780_11105_:MAX_STACK_0) then
105    return 0, CommonFun.DamageType.Miss
106  end
107  if CommonFun.RollType.Magic == skillParams.RollType and isCanBlock == true and 0 < damage then
108    local Flee = targetUser:GetProperty("Flee")
109    local Rate = 0
110    if targetUser:HasBuffID(32980_BAPHOMET_JR_S_SUMMER_:MAX_STACK_0) then
111      Rate = Rate + 5 + math.min(Flee / 50, 15)
112    end
113    local CardSP = targetUser:GetBuffLayer(53550_SPASHIRE_CARD_:MAX_STACK_0)
114    if 0 < CardSP then
115      Rate = Rate + CardSP * 5
116    end
117    local CardNumH1 = targetUser:GetBuffLayer(56900_HEATER_CARD_:MAX_STACK_0)
118    Rate = Rate + CardNumH1 * 3
119    local CardNumH3 = targetUser:GetBuffLayer(58640_MASTER_MAGICIAN_CARD_:MAX_STACK_0)
120    Rate = Rate + CardNumH3 * 5
121    local CardNumMY = targetUser:GetBuffLayer(57850_23338_ROAMING_DANCER_PROFESSION_CARD_:MAX_STACK_0)
122    Rate = Rate + CardNumMY * 5
123    if targetUser:HasBuffID(90004954_23_:MAX_STACK_0) then
124      Rate = Rate + 10
125    end
126    if targetUser:HasBuffID(90005054_23_:MAX_STACK_0) then
127      Rate = Rate + 5
128    end
129    local MemoryBufflvlayer = targetUser:GetBuffLayer(29250_ELEMENTS_CARE_:MAX_STACK_0)
130    if targetUser:HasBuffID(29250_ELEMENTS_CARE_:MAX_STACK_0) then
131      Rate = Rate + MemoryBufflvlayer * 1
132    end
133    if targetUser:HasBuffID(90007087_TIBBERS_HAND_TIER_7_EFFECT_:MAX_STACK_0) then
134      Rate = Rate - 3
135    end
136    if targetUser:HasBuffID(118250_MAGIC_ROD_:MAX_STACK_0) or targetUser:HasBuffID(128100_DARK_NIGHT_S_DANCE_YOURSELF_:MAX_STACK_0) or targetUser:HasBuffID(128101_DARK_NIGHT_S_DANCE_ALLY_:MAX_STACK_0) or targetUser:HasBuffID(135200_KAUPE_:MAX_STACK_0) or targetUser:HasBuffID(100038250_DISPELLING_SCALE_MASTER_:MAX_STACK_0) or targetUser:HasBuffID(135353_SOUL_OF_THE_SAGE_MAGIC_FLEE_:MAX_STACK_0) or targetUser:HasBuffID(136011_FALLING_PEAK_:MAX_STACK_0) or targetUser:HasBuffID(232030_MAGIC_ROD_:MAX_STACK_0) then
137      local MagicFlee = targetUser:GetProperty("MagicFleeRate")
138      Rate = Rate + MagicFlee
139    end
140    if CommonFun.IsInRate(Rate, srcUser:GetRandom()) then
141      if srcUser.isServerCall then
142        targetUser:OnDodgeMagic()
143      end
144      return 0, CommonFun.DamageType.Miss
145    end
146  end
147  if targetUser:HasBuffID(159620_MAGNETIC_FIELD_:MAX_STACK_0) and 0 < damage and isCanBlock == true then
148    local targetid = targetUser:GetGuid()
149    local distance = srcUser:GetDistance(targetid)
150    if 5 <= distance then
151      return 0, CommonFun.DamageType.None
152    end
153  end
154  if targetUser:HasBuffID(138050_23_:MAX_STACK_0) and srcUser:GetNpcID() ~= 0 then
155    local Bufflv = targetUser:GetBuffLevel(138050_23_:MAX_STACK_0)
156    local Rate = Bufflv * 10 + 30
157    if CommonFun.IsInRate(Rate, srcUser:GetRandom()) then
158      return 0, CommonFun.DamageType.Miss
159    end
160  end
161  if targetUser:HasBuffID(138831_DARK_TALISMAN_:MAX_STACK_0) and 0 < damage and isCanBlock == true and (CommonFun.RollType.Attack == skillParams.RollType and srcUser:HasBuffID(49120_GOLDEN_SPIRIT_BOAT_:MAX_STACK_0)) == false then
162    local Bufflv = targetUser:GetBuffLevel(138835_DARK_TALISMAN_EVASION_:MAX_STACK_0)
163    local Rate = Bufflv * 9
164    if CommonFun.IsInRate(Rate, srcUser:GetRandom()) then
165      return 0, CommonFun.DamageType.Miss
166    end
167  end
168  if targetUser:HasBuffID(139630_CHAIN_KICK_EVADE_DAMAGE_:MAX_STACK_0) and 0 < damage and isCanBlock == true and (CommonFun.RollType.Attack == skillParams.RollType and srcUser:HasBuffID(49120_GOLDEN_SPIRIT_BOAT_:MAX_STACK_0)) == false then
169    local Rate = 50
170    if CommonFun.IsInRate(Rate, srcUser:GetRandom()) then
171      return 0, CommonFun.DamageType.Miss
172    end
173  end
174  local PerfectFlee = targetUser:GetProperty("PerfectFlee")
175  if PerfectFlee ~= 0 and isCanBlock == true and 0 < damage and CommonFun.IsInRate(PerfectFlee, srcUser:GetRandom()) then
176    return 0, CommonFun.DamageType.Miss
177  end
178  if (targetUser:HasBuffID(141430_DIMENSIONAL_BARRIER_:MAX_STACK_0) or targetUser:HasBuffID(141432_DIMENSION_BARRIER_INVISIBILITY_:MAX_STACK_0)) and srcUser:HasBuffID(141434_DIMENSIONAL_BARRIER_DAMAGE_ASSESSMENT_:MAX_STACK_0) == false then
179    return 0, CommonFun.DamageType.Miss
180  end
181  if bits2[CommonFun.AttrEffect.BaXieZhiZhen] == 1 then
182    local dam, damtype = CommonFun.ModifyBaxieDamage(srcUser, targetUser, skillParams, damage, skillID, isCanBlock)
183    if damtype ~= nil then
184      if targetUser.isServerCall then
185        targetUser:SetBaxieBlock(true)
186      end
187      return dam, damtype
188    end
189    if targetUser.isServerCall then
190      targetUser:SetBaxieBlock(false)
191    end
192  end
193  if bits2[CommonFun.AttrEffect.InGodStatus] == 1 and 0 < damage then
194    return 0, CommonFun.DamageType.Miss
195  end
196  if (targetUser:HasBuffID(121030_EDEN_TEAM_BLESSING_:MAX_STACK_0) == true or targetUser:HasBuffID(55693_10353_:MAX_STACK_0) == true or targetUser:HasBuffID(90003955_DEERSKIN_MANTEAU_TIER_5_EFFECT_:MAX_STACK_0) == true or targetUser:HasBuffID(90005555_23_:MAX_STACK_0) == true) and CommonFun.RollType.Magic == skillParams.RollType and 0 < damage and isCanBlock == true then
197    return 0, CommonFun.DamageType.DefMagic
198  end
199  if (targetUser:HasBuffID(90003975_MERLIN_S_TIME_SPACE_ROBE_TIER_5_EFFECT_:MAX_STACK_0) == true or targetUser:HasBuffID(90005405_23_:MAX_STACK_0) == true) and CommonFun.RollType.Attack == skillParams.RollType and 0 < damage and isCanBlock == true then
200    return 0, CommonFun.DamageType.DefPhysics
201  end
202  if srcUser:IsAttackSkill(params.skillIDAndLevel) == false and targetUser:GetBuffActive(107330) and isCanBlock == true and 0 < damage then
203    local Bufflv = targetUser:GetBuffLevel(107330_COMBAT_PROFICIENT_:MAX_STACK_0)
204    if CommonFun.IsInRate(Bufflv * 3, srcUser:GetRandom()) then
205      return 0, CommonFun.DamageType.WeaponBlock
206    end
207  end
208  if srcUser:HasBuffID(166450_BANDAGE_HURT_ONLY_BY_PUGONG_:MAX_STACK_0) == true and srcUser:IsAttackSkill(params.skillIDAndLevel) == false and skillID == 151_KNIGHT:SANCTUARY then
209    return 0, CommonFun.DamageType.Miss
210  end
211  local judu = true
212  if skillID == 187_KNIGHT:VENOM_DART and srcUser:HasBuffID(20310010_VENOM_DART_IGNORES_KYRIE_ELEISON_:MAX_STACK_0) then
213    judu = false
214  end
215  if skillID == 2227_STELLAR_HUNTER:CRACK_SHOT or skillID == 2243_STELLAR_HUNTER:ABSOLUTE_PENETRATION or skillID == 2251_STELLAR_HUNTER:FORCED_DISPEL then
216    judu = false
217  end
218  if isCanBlock == false then
219    judu = false
220  end
221  local HarmImmune = targetUser:GetProperty("HarmImmune")
222  if nil ~= HarmImmune and 0 < HarmImmune then
223    local harmImmuneInfo = Table_BuffStateOdds[HarmImmune]
224    if nil ~= harmImmuneInfo then
225      local rate = harmImmuneInfo.Odds * 100
226      if params.pvpMap then
227        local Dex = srcUser:GetProperty("Dex")
228        local Agi = targetUser:GetProperty("Agi")
229        local rate1 = math.min(Dex * 0.1 - Agi * 0.1, 20)
230        if rate1 < 0 then
231          rate1 = 0
232        end
233        rate = rate - rate1
234        if rate < 0 then
235          rate = 0
236        end
237      end
238      local WeaponType = targetUser:GetEquipedWeaponType()
239      if targetUser:HasBuffID(20110040_CAN_USE_SWORD_PARRY_WITH_SPEARS_:MAX_STACK_0) and WeaponType == 180 then
240        rate = rate + 5
241      end
242      if CommonFun.IsInRate(rate, srcUser:GetRandom()) and math.floor(params.skillIDAndLevel / 1000) ~= 306_LORD_KNIGHT:ASURA_STRIKE_LORD_KNIGHT:ASURA_STRIKE_LORD_KNIGHT:ASURA_STRIKE and math.floor(params.skillIDAndLevel / 1000) ~= 422_RUNE_KNIGHT:IMPROVED_ACID_DEMONSTRATION_RUNE_KNIGHT:IMPROVED_ACID_DEMONSTRATION and math.floor(params.skillIDAndLevel / 1000) ~= 1122_ARCANE_MASTER:FIRE_EXPANSION_ARCANE_MASTER:FIRE_EXPANSION and math.floor(params.skillIDAndLevel / 1000) ~= 1164_THIEF:TETRA_VORTEX_THIEF:TETRA_VORTEX and judu == true and math.floor(params.skillIDAndLevel / 1000) ~= 3303_LIGHTBRINGER:SKY_BREAKING_DRAGON_FIST_LIGHTBRINGER:SKY_BREAKING_DRAGON_FIST_LIGHTBRINGER:SKY_BREAKING_DRAGON_FIST and math.floor(params.skillIDAndLevel / 1000) ~= 819_HIGH_WIZARD:SKY_BREAKING_DRAGON_FIST_HIGH_WIZARD:SKY_BREAKING_DRAGON_FIST_HIGH_WIZARD:SKY_BREAKING_DRAGON_FIST and math.floor(params.skillIDAndLevel / 1000) ~= 3706_ROYAL_GUARD:CRAZY_THROWING_ROYAL_GUARD:CRAZY_THROWING and math.floor(params.skillIDAndLevel / 1000) ~= 1809_HUNTER:ONE_HIT_KILL_SOARING_DRAGON_SWORD_HUNTER:ONE_HIT_KILL_SOARING_DRAGON_SWORD and math.floor(params.skillIDAndLevel / 1000) ~= 1835_HUNTER:ONE_HIT_KILL_PHOENIX_DRAGON_SWORD_HUNTER:ONE_HIT_KILL_PHOENIX_DRAGON_SWORD and math.floor(params.skillIDAndLevel / 1000) ~= 1915_HUNTER:RAGNA_BLADE_HUNTER:RAGNA_BLADE and math.floor(params.skillIDAndLevel / 1000) ~= 1941_SNIPER:DIVINE_DESTRUCTION_SLASH_LIGHTNING_BOLT_SMASH_SNIPER:DIVINE_DESTRUCTION_SLASH_LIGHTNING_BOLT_SMASH and math.floor(params.skillIDAndLevel / 1000) ~= 2741_SAINT:FIRE_STRIKE_SAINT:FIRE_STRIKE_SAINT:FIRE_STRIKE and math.floor(params.skillIDAndLevel / 1000) ~= 4717_SHADOW_CHASER:SOLAR_AURA_SKYFIRE_SHADOW_CHASER:SOLAR_AURA_SKYFIRE_SHADOW_CHASER:SOLAR_AURA_SKYFIRE and math.floor(params.skillIDAndLevel / 1000) ~= 4718_SHADOW_CHASER:SOLAR_AURA_SKYFIRE_SHADOW_CHASER:SOLAR_AURA_SKYFIRE_SHADOW_CHASER:SOLAR_AURA_SKYFIRE and math.floor(params.skillIDAndLevel / 1000) ~= 4714_SHADOW_CHASER:SOLAR_AURA_SHADOW_CHASER:SOLAR_AURA_SHADOW_CHASER:SOLAR_AURA and math.floor(params.skillIDAndLevel / 1000) ~= 4702_SHADOW_CHASER:SCORCHING_REALM_SHADOW_CHASER:SCORCHING_REALM_SHADOW_CHASER:SCORCHING_REALM then
243        return 0, CommonFun.DamageType.Block
244      end
245    end
246  end
247  if bits3[CommonFun.AttrEffect2.AutoDef] == 1 then
248    local rate = targetUser:GetProperty("AutoBlockRate")
249    rate = math.min(rate, 60)
250    if CommonFun.IsInRate(rate, srcUser:GetRandom()) and math.floor(params.skillIDAndLevel / 1000) ~= 306_LORD_KNIGHT:ASURA_STRIKE_LORD_KNIGHT:ASURA_STRIKE_LORD_KNIGHT:ASURA_STRIKE and math.floor(params.skillIDAndLevel / 1000) ~= 411_RUNE_KNIGHT:ACID_TERROR and math.floor(params.skillIDAndLevel / 1000) ~= 422_RUNE_KNIGHT:IMPROVED_ACID_DEMONSTRATION_RUNE_KNIGHT:IMPROVED_ACID_DEMONSTRATION and math.floor(params.skillIDAndLevel / 1000) ~= 1122_ARCANE_MASTER:FIRE_EXPANSION_ARCANE_MASTER:FIRE_EXPANSION and math.floor(params.skillIDAndLevel / 1000) ~= 1164_THIEF:TETRA_VORTEX_THIEF:TETRA_VORTEX and judu == true and math.floor(params.skillIDAndLevel / 1000) ~= 3303_LIGHTBRINGER:SKY_BREAKING_DRAGON_FIST_LIGHTBRINGER:SKY_BREAKING_DRAGON_FIST_LIGHTBRINGER:SKY_BREAKING_DRAGON_FIST and math.floor(params.skillIDAndLevel / 1000) ~= 819_HIGH_WIZARD:SKY_BREAKING_DRAGON_FIST_HIGH_WIZARD:SKY_BREAKING_DRAGON_FIST_HIGH_WIZARD:SKY_BREAKING_DRAGON_FIST and math.floor(params.skillIDAndLevel / 1000) ~= 3706_ROYAL_GUARD:CRAZY_THROWING_ROYAL_GUARD:CRAZY_THROWING and math.floor(params.skillIDAndLevel / 1000) ~= 1809_HUNTER:ONE_HIT_KILL_SOARING_DRAGON_SWORD_HUNTER:ONE_HIT_KILL_SOARING_DRAGON_SWORD and math.floor(params.skillIDAndLevel / 1000) ~= 1835_HUNTER:ONE_HIT_KILL_PHOENIX_DRAGON_SWORD_HUNTER:ONE_HIT_KILL_PHOENIX_DRAGON_SWORD and math.floor(params.skillIDAndLevel / 1000) ~= 1915_HUNTER:RAGNA_BLADE_HUNTER:RAGNA_BLADE and math.floor(params.skillIDAndLevel / 1000) ~= 1941_SNIPER:DIVINE_DESTRUCTION_SLASH_LIGHTNING_BOLT_SMASH_SNIPER:DIVINE_DESTRUCTION_SLASH_LIGHTNING_BOLT_SMASH and math.floor(params.skillIDAndLevel / 1000) ~= 2741_SAINT:FIRE_STRIKE_SAINT:FIRE_STRIKE_SAINT:FIRE_STRIKE and math.floor(params.skillIDAndLevel / 1000) ~= 4717_SHADOW_CHASER:SOLAR_AURA_SKYFIRE_SHADOW_CHASER:SOLAR_AURA_SKYFIRE_SHADOW_CHASER:SOLAR_AURA_SKYFIRE and math.floor(params.skillIDAndLevel / 1000) ~= 4714_SHADOW_CHASER:SOLAR_AURA_SHADOW_CHASER:SOLAR_AURA_SHADOW_CHASER:SOLAR_AURA and math.floor(params.skillIDAndLevel / 1000) ~= 4718_SHADOW_CHASER:SOLAR_AURA_SKYFIRE_SHADOW_CHASER:SOLAR_AURA_SKYFIRE_SHADOW_CHASER:SOLAR_AURA_SKYFIRE and math.floor(params.skillIDAndLevel / 1000) ~= 4702_SHADOW_CHASER:SCORCHING_REALM_SHADOW_CHASER:SCORCHING_REALM_SHADOW_CHASER:SCORCHING_REALM then
251      local skilllv_weiw = targetUser:GetLernedSkillLevel(1190_THIEF:PRESTIGE)
252      if 0 < skilllv_weiw and srcUser.isServerCall then
253        targetUser:AddBuff(116700_PRESTIGE_:MAX_STACK_0, srcUser:GetGuid())
254      end
255      local skilllv_ss = targetUser:GetLernedSkillLevel(3806_ROYAL_GUARD:GLORIOUS_GUARDIAN)
256      if 0 < skilllv_ss and srcUser.isServerCall then
257        targetUser:AddBuff(130080_TRIGGER_HOLY_SHIELD_:MAX_STACK_0, targetUser:GetGuid())
258      end
259      return 0, CommonFun.DamageType.AutoBlock
260    end
261  end
262  if bits3[CommonFun.AttrEffect2.WeaponBlock] == 1 and isCanBlock == true then
263    local rate = targetUser:GetProperty("WeaponBlockRate")
264    local GemValue2 = targetUser:GetGemValue(31012_COUNTER_ATTACK_TRIGGER_CHANCE_PERCENTAGE)
265    if CommonFun.IsInRate(rate, srcUser:GetRandom()) and skillParams.Launch_Range ~= nil and CommonFun.IsLongSkill(skillParams.Launch_Range) == false and skillParams.RollType == 1 and math.floor(params.skillIDAndLevel / 1000) ~= 306_LORD_KNIGHT:ASURA_STRIKE_LORD_KNIGHT:ASURA_STRIKE_LORD_KNIGHT:ASURA_STRIKE and math.floor(params.skillIDAndLevel / 1000) ~= 3303_LIGHTBRINGER:SKY_BREAKING_DRAGON_FIST_LIGHTBRINGER:SKY_BREAKING_DRAGON_FIST_LIGHTBRINGER:SKY_BREAKING_DRAGON_FIST and math.floor(params.skillIDAndLevel / 1000) ~= 819_HIGH_WIZARD:SKY_BREAKING_DRAGON_FIST_HIGH_WIZARD:SKY_BREAKING_DRAGON_FIST_HIGH_WIZARD:SKY_BREAKING_DRAGON_FIST then
266      local RuneNum = targetUser:GetRunePoint(34030_AESIR_TRIGGERED_WEAPON_BLOCKING_HAS_A_15_CHANCE_TO_COUNTER_THE_ATTACKER_WITH_CROSS_IMPACT_LV_5)
267      if 0 < RuneNum then
268        local RuneRate = RuneNum * 15 + GemValue2 / 1000
269        if srcUser.isServerCall and CommonFun.IsInRate(RuneRate, srcUser:GetRandom()) then
270          targetUser:AddBuff(116041_CROSS_IMPACT_COUNTER_CUT_:MAX_STACK_0, srcUser:GetGuid())
271        end
272      end
273      return 0, CommonFun.DamageType.WeaponBlock
274    end
275    if CommonFun.IsInRate(rate, srcUser:GetRandom()) and targetUser:HasBuffID(20310020_WEAPON_BLOCKING_CAN_BLOCK_RANGED_PHYSICAL_ATTACKS_:MAX_STACK_0) and skillParams.Launch_Range ~= nil and CommonFun.IsLongSkill(skillParams.Launch_Range) == true and skillParams.RollType == 1 and math.floor(params.skillIDAndLevel / 1000) ~= 2227_STELLAR_HUNTER:CRACK_SHOT and math.floor(params.skillIDAndLevel / 1000) ~= 2243_STELLAR_HUNTER:ABSOLUTE_PENETRATION and math.floor(params.skillIDAndLevel / 1000) ~= 2251_STELLAR_HUNTER:FORCED_DISPEL and math.floor(params.skillIDAndLevel / 1000) ~= 2741_SAINT:FIRE_STRIKE_SAINT:FIRE_STRIKE_SAINT:FIRE_STRIKE and math.floor(params.skillIDAndLevel / 1000) ~= 4702_SHADOW_CHASER:SCORCHING_REALM_SHADOW_CHASER:SCORCHING_REALM_SHADOW_CHASER:SCORCHING_REALM and math.floor(params.skillIDAndLevel / 1000) ~= 4714_SHADOW_CHASER:SOLAR_AURA_SHADOW_CHASER:SOLAR_AURA_SHADOW_CHASER:SOLAR_AURA and math.floor(params.skillIDAndLevel / 1000) ~= 4717_SHADOW_CHASER:SOLAR_AURA_SKYFIRE_SHADOW_CHASER:SOLAR_AURA_SKYFIRE_SHADOW_CHASER:SOLAR_AURA_SKYFIRE and math.floor(params.skillIDAndLevel / 1000) ~= 4718_SHADOW_CHASER:SOLAR_AURA_SKYFIRE_SHADOW_CHASER:SOLAR_AURA_SKYFIRE_SHADOW_CHASER:SOLAR_AURA_SKYFIRE then
276      return 0, CommonFun.DamageType.WeaponBlock
277    end
278  end
279  if targetUser:HasBuffID(318001_SPINNING_SHIVS_:MAX_STACK_10) and targetUser:HasBuffID(318301_DANCING_BLOOD_BLADE_BLOCK_:MAX_STACK_0) and isCanBlock == true then
280    local rate1 = targetUser:GetBuffLayer(318001_SPINNING_SHIVS_:MAX_STACK_10) * 2
281    if targetUser:HasBuffID(318400_DANCING_BLOOD_BLADE_BLOCK_PROBABILITY_INCREASED_:MAX_STACK_0) then
282      rate1 = rate1 * 2
283    end
284    if CommonFun.IsInRate(rate1, srcUser:GetRandom()) then
285      return 0, CommonFun.DamageType.WeaponBlock
286    end
287  end
288  if srcUser:HasBuffID(323301_ATTACK_PROBABILITY_MISSING_:MAX_STACK_0) or srcUser:HasBuffID(323401_WEAKNESS_CURSE_NEW_:MAX_STACK_0) then
289    local Rate1 = 10
290    if srcUser:HasBuffID(323401_WEAKNESS_CURSE_NEW_:MAX_STACK_0) then
291      Rate1 = 20
292    end
293    if CommonFun.IsInRate(Rate1, srcUser:GetRandom()) then
294      return 0, CommonFun.DamageType.Miss
295    end
296  end
297  local buff2MissAtkAttr = {
298    [90005525] = {
299      6,
300      7,
301      8,
302      10
303    },
304    [59372] = {
305      6,
306      7,
307      8,
308      10
309    },
310    [90005545] = {
311      1,
312      2,
313      3,
314      4
315    },
316    [59362] = {
317      1,
318      2,
319      3,
320      4
321    },
322    [30031304] = {
323      1,
324      2,
325      3,
326      4,
327      5,
328      6,
329      7,
330      8,
331      9,
332      10
333    },
334    [30031305] = {
335      1,
336      2,
337      3,
338      4,
339      5,
340      6,
341      7,
342      8,
343      9,
344      10
345    },
346    [30031306] = {
347      1,
348      2,
349      3,
350      4,
351      5,
352      6,
353      7,
354      8,
355      9,
356      10
357    },
358    [30031307] = {
359      1,
360      2,
361      3,
362      4,
363      5,
364      6,
365      7,
366      8,
367      9,
368      10
369    }
370  }
371  local srcAtkElement = CommonFun.GetUserAtkAttrByList(srcUser, targetUser, params, skillParams.Damage)
372  for buff, atkAttrs in pairs(buff2MissAtkAttr) do
373    if targetUser:HasBuffID(buff) and CommonFun.isInArray(atkAttrs, srcAtkElement) and isCanBlock == true then
374      if srcUser.isServerCall then
375        targetUser:AddBuffCount(buff)
376      end
377      return 0, CommonFun.DamageType.Miss
378    end
379  end
380  if targetUser:IsFly() and CommonFun.TableHasValue(NpcFeatures.Flight.ImmuneSkill, skillID) then
381    return 0, CommonFun.DamageType.Miss
382  end
383end
Formula Graph

Connected Archive Data

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

Loading graph filters

CommonFun.CheckMissAndBlock

commonfun-checkmissandblock

Nodes

0

Edges

0

Related Nodes

Select at least one node type.