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