Formula Source
function CommonFun.CalcBaseDamage(srcUser, targetUser, params, logger) local damageType = CommonFun.DamageType.Normal local damage, forceDamageType = CommonFun.DoCalcDamage(srcUser, targetUser, params, logger) if nil == srcUser then logger.error(string.format("srcUser is nil")) return 0, CommonFun.DamageType.None end if nil == targetUser then logger.error(string.format("targetUser is nil")) return 0, CommonFun.DamageType.None end if nil == Table_Skill then logger.error("Table_Skill is nil") return 0, CommonFun.DamageType.None end local skillParams = Table_Skill[params.skillIDAndLevel] if nil == skillParams then logger.error(string.format("Table_Skill[%d] is nil", params.skillIDAndLevel)) return 0, CommonFun.DamageType.None end local paramList = skillParams.Damage if nil == paramList or #paramList <= 0 then return 0, CommonFun.DamageType.None end local mapid, maptype = srcUser:GetMapInfo() local AttrFunction = srcUser:GetProperty("AttrFunction") local bitfunc = CommonFun.getBits(AttrFunction) if (targetUser.boss or targetUser.mini or targetUser.changelinepunish) and (targetUser.zoneType == 1 or targetUser.zoneType == 22) and targetUser.noPunishBoss == false and bitfunc[CommonFun.AttrFunction.JustInViceZone] == 1 and targetUser.isBossFromBranch == false then return 0, CommonFun.DamageType.Miss end if CommonFun.checkAttrFunctionMiss(targetUser, srcUser) then return 0, CommonFun.DamageType.Miss end if targetUser.boss and targetUser.zoneType == 22 and CommonFun.CheckStormBossMiss(targetUser, srcUser) then return 0, CommonFun.DamageType.Miss end local iscrit = CommonFun.IsCrit(srcUser, targetUser, skillParams) if CommonFun.RollType.Attack == skillParams.RollType then if srcUser:IsAttackSkill(params.skillIDAndLevel) then if iscrit == false and CommonFun.IsMiss(srcUser, targetUser, skillParams) == true then return 0, CommonFun.DamageType.Miss end elseif not srcUser:IsAttackSkill(params.skillIDAndLevel) and CommonFun.IsMiss(srcUser, targetUser, skillParams) == true then return 0, CommonFun.DamageType.Miss end end local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local enemy = srcUser:IsEnemy(targetUser) local DefAttr2 = targetUser:GetProperty("DefAttr") local AttrEffect2 = targetUser:GetProperty("AttrEffect") local bits2 = CommonFun.getBits(AttrEffect2) local AttrEffect3 = targetUser:GetProperty("AttrEffect2") local bits3 = CommonFun.getBits(AttrEffect3) local srcAttrEffect = srcUser:GetProperty("AttrEffect3") local bits4 = CommonFun.getBits(srcAttrEffect) local AttrEffect4 = targetUser:GetProperty("AttrEffect3") local bits5 = CommonFun.getBits(AttrEffect4) local isCanBlock = true if bits4[CommonFun.AttrEffect3.MustHit] == 1 and srcUser:HasBuffID(21930030) then isCanBlock = false end if bits5[CommonFun.AttrEffect3.CantBlock] == 1 then isCanBlock = false end local skill_qy = srcUser:GetLernedSkillLevel(2561) if 7 <= skill_qy and srcUser:HasBuffID(136780) and targetUser:HasBuffID(136781) then isCanBlock = false end if skillID == 6110 and srcUser:GetBuffLayer(116080) == 15 then isCanBlock = false end if enemy then if targetUser:IsImmuneSkill(skillID) then return 0, CommonFun.DamageType.Miss end if skillID == 160 and DefAttr2 == CommonFun.Nature.Undead and targetUser.boss == false and targetUser.mini == false and targetUser:GetNpcID() ~= 18143 and targetUser:GetNpcID() ~= 18144 and targetUser:GetNpcID() ~= 18145 and targetUser:HasBuffID(160000) == false then local Luk = srcUser:GetProperty("Luk") local Int = srcUser:GetProperty("Int") local BaseLv = srcUser.BaseLv local Hp = targetUser:GetProperty("Hp") local MaxHp = targetUser:GetProperty("MaxHp") local rate = (20 * skillLevel + Luk + Int + BaseLv + (1 - Hp / MaxHp) * 200) / 10 if 70 <= rate then rate = 70 end if CommonFun.IsInRate(rate, srcUser:GetRandom()) then return targetUser:GetProperty("MaxHp"), CommonFun.DamageType.Normal end end if bits2[CommonFun.AttrEffect.NoMagicDamage] == 1 and CommonFun.RollType.Magic == skillParams.RollType then return 0, CommonFun.DamageType.WeaponBlock end if bits2[CommonFun.AttrEffect.NoPhysicalDamage] == 1 and CommonFun.RollType.Attack == skillParams.RollType then return 0, CommonFun.DamageType.WeaponBlock end if bits2[CommonFun.AttrEffect.IgnoreNearNormalSkill] == 1 and nil ~= skillParams.Launch_Type and CommonFun.LaunchType.CloseAttack == skillParams.Launch_Type then return 0, CommonFun.DamageType.WeaponBlock end 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 and isCanBlock == true then return 0, CommonFun.DamageType.Barrier end 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 and skillID ~= 2243 and skillID ~= 2251 and isCanBlock == true then return 0, CommonFun.DamageType.Barrier end if skillParams.Launch_Range ~= nil and skillParams.RollType == 1 and skillParams.Logic == "SkillLockedTarget" and isCanBlock == true and targetUser:HasBuffID(132080) then local Bufflv = targetUser:GetBuffLevel(132080) local WeaponType = targetUser:GetEquipedWeaponType() local ShadowNum = targetUser:GetPetCount("ShadowNpc") local Rate = Bufflv * ShadowNum * 2 if CommonFun.IsInRate(Rate, srcUser:GetRandom()) and WeaponType == 210 then return 0, CommonFun.DamageType.Miss end end if skillParams.Launch_Range ~= nil and CommonFun.IsLongSkill(skillParams.Launch_Range) == true and skillParams.RollType == 1 and skillParams.Logic == "SkillLockedTarget" and isCanBlock == true then local Rate = 0 if targetUser:HasBuffID(118172) then local Bufflv = targetUser:GetBuffLevel(118172) Rate = Bufflv * 10 + 20 end if targetUser:HasBuffID(90160) or targetUser:HasBuffID(123280) then local Value = targetUser:GetProperty("LongFleeRate") Rate = Rate + Value end if targetUser:HasBuffID(1007010) and srcUser:HasBuffID(1007000) then Rate = 100 end if CommonFun.IsInRate(Rate, srcUser:GetRandom()) and srcUser:HasBuffID(49120) == false then return 0, CommonFun.DamageType.Miss end end if skillParams.Launch_Range ~= nil and CommonFun.IsLongSkill(skillParams.Launch_Range) == true and skillParams.RollType == 1 and isCanBlock == true then local Rate = 0 if targetUser:HasBuffID(133644) or targetUser:HasBuffID(136010) or targetUser:HasBuffID(136011) then Rate = targetUser:GetProperty("LongFleeRate") end if CommonFun.IsInRate(Rate, srcUser:GetRandom()) and srcUser:HasBuffID(49120) == false then return 0, CommonFun.DamageType.Miss end end if targetUser:HasBuffID(20910160) and targetUser:HasBuffID(106100) and CommonFun.RollType.Magic == skillParams.RollType and skillParams.Logic ~= "SkillLockedTarget" and isCanBlock == true and 0 < damage then return 0, CommonFun.DamageType.Miss end if srcUser:HasBuffID(136780) and targetUser:HasBuffID(136781) == false then return 0, CommonFun.DamageType.Miss end if srcUser:HasBuffID(136781) == false and targetUser:HasBuffID(136780) then return 0, CommonFun.DamageType.Miss end if CommonFun.RollType.Magic == skillParams.RollType and isCanBlock == true and 0 < damage then local Flee = targetUser:GetProperty("Flee") local Rate = 0 if targetUser:HasBuffID(32980) then Rate = Rate + 5 + math.min(Flee / 50, 15) end local CardSP = targetUser:GetBuffLayer(53550) local CardSP1 = targetUser:GetBuffLayer(604210) + targetUser:GetBuffLayer(604220) + targetUser:GetBuffLayer(604230) + targetUser:GetBuffLayer(604240) + targetUser:GetBuffLayer(604250) if 0 < CardSP or 0 < CardSP1 then Rate = Rate + CardSP * 5 + CardSP1 * 5 end local CardNumH1 = targetUser:GetBuffLayer(56900) Rate = Rate + CardNumH1 * 3 local CardNumH3 = targetUser:GetBuffLayer(58640) Rate = Rate + CardNumH3 * 5 local CardNumMY = targetUser:GetBuffLayer(57850) Rate = Rate + CardNumMY * 5 if targetUser:HasBuffID(90004954) then Rate = Rate + 10 end if targetUser:HasBuffID(90005054) then Rate = Rate + 5 end local MemoryBufflvlayer = targetUser:GetBuffLayer(29250) if targetUser:HasBuffID(29250) then Rate = Rate + MemoryBufflvlayer * 1 end if targetUser:HasBuffID(118250) or targetUser:HasBuffID(128100) or targetUser:HasBuffID(128101) or targetUser:HasBuffID(135200) or targetUser:HasBuffID(100038250) or targetUser:HasBuffID(135353) or targetUser:HasBuffID(136011) or targetUser:HasBuffID(1001001) or targetUser:HasBuffID(232030) then local MagicFlee = targetUser:GetProperty("MagicFleeRate") Rate = Rate + MagicFlee end if CommonFun.IsInRate(Rate, srcUser:GetRandom()) then if srcUser.isServerCall then targetUser:OnDodgeMagic() end return 0, CommonFun.DamageType.Miss end end local judu = true if skillID == 187 and srcUser:HasBuffID(20310010) then judu = false end if skillID == 2227 or skillID == 2243 or skillID == 2251 then judu = false end if isCanBlock == false then judu = false end if skillID == 6110 and srcUser:GetBuffLayer(116080) == 15 then judu = false end local HarmImmune = targetUser:GetProperty("HarmImmune") if nil ~= HarmImmune and 0 < HarmImmune then local harmImmuneInfo = Table_BuffStateOdds[HarmImmune] if nil ~= harmImmuneInfo then local rate = harmImmuneInfo.Odds * 100 if params.pvpMap then local Dex = srcUser:GetProperty("Dex") local Agi = targetUser:GetProperty("Agi") local rate1 = math.min(Dex * 0.1 - Agi * 0.1, 20) if rate1 < 0 then rate1 = 0 end rate = rate - rate1 if rate < 0 then rate = 0 end end local WeaponType = targetUser:GetEquipedWeaponType() local lingqijian = targetUser:GetBuffLayer(1002001) if targetUser:HasBuffID(1002020) then rate = rate + 3 * lingqijian end if CommonFun.IsInRate(rate, srcUser:GetRandom()) and math.floor(params.skillIDAndLevel / 1000) ~= 306 and math.floor(params.skillIDAndLevel / 1000) ~= 422 and math.floor(params.skillIDAndLevel / 1000) ~= 1122 and math.floor(params.skillIDAndLevel / 1000) ~= 1164 and judu == true and math.floor(params.skillIDAndLevel / 1000) ~= 3303 and math.floor(params.skillIDAndLevel / 1000) ~= 819 and math.floor(params.skillIDAndLevel / 1000) ~= 3706 and math.floor(params.skillIDAndLevel / 1000) ~= 1809 and math.floor(params.skillIDAndLevel / 1000) ~= 1835 and math.floor(params.skillIDAndLevel / 1000) ~= 1915 and math.floor(params.skillIDAndLevel / 1000) ~= 1941 and math.floor(params.skillIDAndLevel / 10000) ~= 531 and math.floor(params.skillIDAndLevel / 10000) ~= 532 then return 0, CommonFun.DamageType.Block end end end if bits3[CommonFun.AttrEffect2.AutoDef] == 1 then local rate = targetUser:GetProperty("AutoBlockRate") rate = math.min(rate, 60) if CommonFun.IsInRate(rate, srcUser:GetRandom()) and math.floor(params.skillIDAndLevel / 1000) ~= 306 and math.floor(params.skillIDAndLevel / 1000) ~= 411 and math.floor(params.skillIDAndLevel / 1000) ~= 422 and math.floor(params.skillIDAndLevel / 1000) ~= 1122 and math.floor(params.skillIDAndLevel / 1000) ~= 1164 and judu == true and math.floor(params.skillIDAndLevel / 1000) ~= 3303 and math.floor(params.skillIDAndLevel / 1000) ~= 819 and math.floor(params.skillIDAndLevel / 1000) ~= 3706 and math.floor(params.skillIDAndLevel / 1000) ~= 1809 and math.floor(params.skillIDAndLevel / 1000) ~= 1835 and math.floor(params.skillIDAndLevel / 1000) ~= 1915 and math.floor(params.skillIDAndLevel / 1000) ~= 1941 and math.floor(params.skillIDAndLevel / 10000) ~= 531 and math.floor(params.skillIDAndLevel / 10000) ~= 532 then local skilllv_weiw = targetUser:GetLernedSkillLevel(1190) if 0 < skilllv_weiw and srcUser.isServerCall then targetUser:AddBuff(116700, srcUser:GetGuid()) end local skilllv_ss = targetUser:GetLernedSkillLevel(3806) if 0 < skilllv_ss and srcUser.isServerCall then targetUser:AddBuff(130080, targetUser:GetGuid()) end local skilllv_zhanji2 = targetUser:GetLernedSkillLevel(5402) local targetid = targetUser:GetGuid() local distance = srcUser:GetDistance(targetid) if 0 < skilllv_zhanji2 and distance <= 3 and targetUser:HasBuffID(1004041) then local zhanjirate = skilllv_zhanji2 * 5 + 25 if srcUser.isServerCall and CommonFun.IsInRate(zhanjirate, srcUser:GetRandom()) then targetUser:AddBuff(1004010, srcUser:GetGuid()) end end return 0, CommonFun.DamageType.AutoBlock end end if bits3[CommonFun.AttrEffect2.WeaponBlock] == 1 and isCanBlock == true then local rate = targetUser:GetProperty("WeaponBlockRate") local GemValue2 = targetUser:GetGemValue(31012) if targetUser:HasBuffID(116094) then rate = 100 end 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 and math.floor(params.skillIDAndLevel / 1000) ~= 3303 and math.floor(params.skillIDAndLevel / 1000) ~= 819 then local RuneNum = targetUser:GetRunePoint(34030) if 0 < RuneNum then local RuneRate = RuneNum * 25 + GemValue2 / 1000 if srcUser.isServerCall and CommonFun.IsInRate(RuneRate, srcUser:GetRandom()) then targetUser:AddBuff(116041, srcUser:GetGuid()) end end if targetUser:HasBuffID(116094) and srcUser.isServerCall then targetUser:AddBuff(116096, targetUser:GetGuid()) end return 0, CommonFun.DamageType.WeaponBlock end local rate2 = 0 local skilllv_xiaodao = targetUser:GetLernedSkillLevel(6102) local xiaodao = targetUser:GetBuffLayer(1011001) if targetUser:HasBuffID(1011001) then rate2 = xiaodao * 0.4 * skilllv_xiaodao end if targetUser:HasBuffID(116094) and targetUser:HasBuffID(1011001) then rate2 = 100 end if CommonFun.IsInRate(rate2, srcUser:GetRandom()) and skillParams.Launch_Range ~= nil and CommonFun.IsLongSkill(skillParams.Launch_Range) == true and skillParams.RollType == 1 and math.floor(params.skillIDAndLevel / 1000) ~= 2227 and math.floor(params.skillIDAndLevel / 1000) ~= 2243 and math.floor(params.skillIDAndLevel / 1000) ~= 2251 then if targetUser:HasBuffID(116094) and srcUser.isServerCall then targetUser:AddBuff(116096, targetUser:GetGuid()) end return 0, CommonFun.DamageType.WeaponBlock end end if srcUser:HasBuffID(1007000) and targetUser:HasBuffID(1007010) then local Rate1 = 0 local skilllv_bafeng = targetUser:GetBuffLevel(1007010) if srcUser:IsBuffFrom(1007000, targetUser:GetGuid()) then Rate1 = skilllv_bafeng * 5 end if CommonFun.IsInRate(Rate1, srcUser:GetRandom()) and srcUser:HasBuffID(49120) == false then return 0, CommonFun.DamageType.Miss end end if targetUser:HasBuffID(1006200) then local Rate2 = 0 local skilllv_sanlian = targetUser:GetBuffLevel(1006200) if 1 <= skilllv_sanlian then local Agi = targetUser:GetProperty("Agi") Rate2 = math.floor(Agi / (65 - 5 * skilllv_sanlian)) * skilllv_sanlian end if CommonFun.IsInRate(Rate2, srcUser:GetRandom()) and srcUser:HasBuffID(49120) == false then return 0, CommonFun.DamageType.Miss end end if targetUser:HasBuffID(318001) and targetUser:HasBuffID(318301) and isCanBlock == true then local rate1 = targetUser:GetBuffLayer(318001) * 2 if targetUser:HasBuffID(318400) then rate1 = rate1 * 2 end if CommonFun.IsInRate(rate1, srcUser:GetRandom()) then return 0, CommonFun.DamageType.WeaponBlock end end if srcUser:HasBuffID(323301) or srcUser:HasBuffID(323401) then local Rate1 = 10 if srcUser:HasBuffID(323401) then Rate1 = 20 end if CommonFun.IsInRate(Rate1, srcUser:GetRandom()) then return 0, CommonFun.DamageType.Miss end end local buff2MissAtkAttr = { [90005525] = { 6, 7, 8, 10 }, [90005545] = { 1, 2, 3, 4 }, [30031304] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, [30031305] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, [30031306] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, [30031307] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } } local srcAtkElement = CommonFun.GetUserAtkAttrByList(srcUser, params, skillParams.Damage) for buff, atkAttrs in pairs(buff2MissAtkAttr) do if targetUser:HasBuffID(buff) and CommonFun.isInArray(atkAttrs, srcAtkElement) and isCanBlock == true then if srcUser.isServerCall then targetUser:AddBuffCount(buff) end return 0, CommonFun.DamageType.Miss end end if targetUser:IsFly() and CommonFun.TableHasValue(NpcFeatures.Flight.ImmuneSkill, skillID) then return 0, CommonFun.DamageType.Miss end end if nil ~= forceDamageType then damageType = forceDamageType if CommonFun.DamageType.None == damageType or CommonFun.DamageType.Miss == damageType or CommonFun.DamageType.Block == damageType then return damage, damageType end elseif 0 == damage then return 0, CommonFun.DamageType.Miss elseif damage < 0 then damageType = CommonFun.DamageType.Treatment end if (damageType == nil or damageType == CommonFun.DamageType.Normal or damageType == CommonFun.DamageType.Crit) and CommonFun.RollType.Attack == skillParams.RollType and srcUser:IsAttackSkill(params.skillIDAndLevel) and iscrit then damageType = CommonFun.DamageType.Crit local damageParam = skillParams.Damage if damageParam ~= nil and damageParam[1] ~= nil then damageParam = damageParam[1] end local raceparam = CommonFun.CalcRaceParam(srcUser, targetUser, params, damageParam, logger) local bodyparam = CommonFun.CalcBodyParam(srcUser, targetUser, params, damageParam, logger) local elementparam = CommonFun.CalcElementParam(srcUser, targetUser, params, damageParam, logger) local bossparam = CommonFun.CalcBossParam(srcUser, targetUser, params, damageParam, logger) local raceparam2 = CommonFun.CalcRaceParam2(srcUser, targetUser, params, damageParam, logger) local bodyparam2 = CommonFun.CalcBodyParam2(srcUser, targetUser, params, damageParam, logger) local elementparam2 = CommonFun.CalcElementParam2(srcUser, targetUser, params, damageParam, logger) local bossparam2 = CommonFun.CalcBossParam2(srcUser, targetUser, params, damageParam, logger) local Str1 = srcUser:GetProperty("Str") local Num1 = srcUser:GetRunePoint(62080) local Num2 = srcUser:GetRunePoint(51013) local Num3 = srcUser:GetRunePoint(120010) local Numlianj = srcUser:GetRunePoint(130110) local RuneDamage = Num1 * 0.01 + Num2 * 0.05 + Num3 * 0.05 + Numlianj * 0.03 + 1 local Str = Str1 * RuneDamage local Dex = srcUser:GetProperty("Dex") local Luk = srcUser:GetProperty("Luk") local Int = srcUser:GetProperty("Int") local Agi = srcUser:GetProperty("Agi") local DamIncrease = srcUser:GetProperty("DamIncrease") local MDamIncrease = CommonFun.calcMDamIncrease(srcUser, targetUser) local race2 = targetUser.race if srcUser:HasBuffID(49320) and srcUser:HasBuffID(49325) then elseif srcUser:HasBuffID(49320) then race2 = 2 end local DefAttr2 = targetUser:GetProperty("DefAttr") local skillLevel = srcUser:GetLernedSkillLevel(29) local skillLevel1 = srcUser:GetLernedSkillLevel(1701) local skillLevel2 = 0 if race2 == 3 or DefAttr2 == 9 or DefAttr2 == 7 or srcUser:HasBuffID(20510031) and srcUser:HasBuffID(22000520) or DefAttr2 == 7 and srcUser:HasBuffID(22000520) then skillLevel2 = srcUser:GetLernedSkillLevel(234) if 10 < skillLevel2 then skillLevel2 = 10 end end local SkillRealDamage1 = 0 if skillLevel <= 5 then SkillRealDamage1 = skillLevel * 20 elseif 5 < skillLevel and skillLevel <= 10 then SkillRealDamage1 = 100 + math.floor(Agi / 5) * ((skillLevel - 5) * 0.5 + 0.5) else SkillRealDamage1 = 100 + (skillLevel - 10) * 20 + math.floor(Agi / 5) * 3 + Luk * 2 end local Numliehuo = srcUser:GetRunePoint(203003) local liehuo = 1 + Numliehuo * 0.05 local SkillRealDamage2 = 0 if skillLevel1 <= 10 then SkillRealDamage2 = skillLevel1 * 20 * liehuo else SkillRealDamage2 = 200 * liehuo end local SkillRealDamage = SkillRealDamage1 + SkillRealDamage2 local BaseAtk = 0 local BaseMAtk = Int * 2 + math.floor(Int * Int / 100) local BaseAtk1 = Str1 * 2 + math.floor(Str1 * Str1 / 100) + math.floor(Dex / 5) + math.floor(Luk / 5) local BaseAtk2 = Dex * 2 + math.floor(Dex * Dex / 100) + math.floor(Str / 5) + math.floor(Luk / 5) local BaseAtk3 = Str * 2 + math.floor(Str * Str / 100) + math.floor(Dex / 5) + math.floor(Luk / 5) local NoramlAtkAdd = 5 * Str local profressionID = srcUser:GetProfressionID() local WeaponType = srcUser:GetEquipedWeaponType() if (profressionID == 92 or profressionID == 93 or profressionID == 94 or profressionID == 95) and WeaponType == 210 then BaseAtk1 = BaseAtk2 BaseAtk3 = BaseAtk2 NoramlAtkAdd = 3 * Dex end for k, v in pairs(GameConfig.Atkcalculate) do if v == profressionID then BaseAtk1 = BaseAtk2 BaseAtk3 = BaseAtk2 NoramlAtkAdd = 3 * Dex end end local Num4 = srcUser:GetRunePoint(52013) local Num5 = srcUser:GetRunePoint(52014) local Num6 = srcUser:GetRunePoint(52015) local Num7 = srcUser:GetRunePoint(52016) local Num8 = srcUser:GetRunePoint(52017) local Num9 = srcUser:GetRunePoint(52018) local RuneDamage1 = (Num4 + Num5 + Num6 + Num7 + Num8 + Num9) * 0.07 local Atk1 = srcUser:GetProperty("Atk") local MAtk = srcUser:GetProperty("MAtk") local MAtkPer = srcUser:GetProperty("MAtkPer") local MonkAtk = 0 if srcUser:HasBuffID(100510) then MonkAtk = 5 * Int end local AtkSpdAdd = 0 local skilllv_SpdAdd = srcUser:GetLernedSkillLevel(22) if srcUser:HasBuffID(80082) and 10 < skilllv_SpdAdd then AtkSpdAdd = (skilllv_SpdAdd - 10) * 120 end local skilllv_mfzr = srcUser:GetLernedSkillLevel(3002) local Opening = srcUser:GetSkillOptByOption(17) local MagicAtk = 0 if 0 < skilllv_mfzr and Opening == 0 then local Sp = srcUser:GetProperty("Sp") MagicAtk = Sp * skilllv_mfzr * 0.2 end local skilllv_element = srcUser:GetLernedSkillLevel(127) local atk_element = 0 if 10 < skilllv_element then atk_element = Dex * ((skilllv_element - 10) * 0.5) end local NormalAtk = srcUser:GetProperty("NormalAtk") NormalAtk = NormalAtk + NoramlAtkAdd local Atk = Atk1 + RuneDamage1 * MAtk * (1 + MAtkPer) + MonkAtk + AtkSpdAdd + MagicAtk + atk_element + NormalAtk local Num10 = srcUser:GetRunePoint(11022) local Num11 = srcUser:GetRunePoint(203024) local Num12 = srcUser:GetRunePoint(11024) local Num13 = srcUser:GetRunePoint(12004) local Num14 = srcUser:GetRunePoint(12011) local Num16 = srcUser:GetRunePoint(70010) local RuneDamage2 = (Num10 + Num11 + Num12 + Num13 + Num14 + Num16) * 0.03 local Num15 = srcUser:GetRunePoint(120020) local RuneDamage3 = Num15 * 0.03 local AtkPer1 = srcUser:GetProperty("AtkPer") local AtkPer = AtkPer1 + RuneDamage2 + RuneDamage3 local MAtkPer = srcUser:GetProperty("MAtkPer") local Refine = srcUser:GetProperty("Refine") local MRefine = srcUser:GetProperty("MRefine") local Vit2 = targetUser:GetProperty("Vit") local VitPer2 = targetUser:GetProperty("VitPer") local DamReduc2 = CommonFun.calcDamReDuc(srcUser, targetUser) local RefineDamReduc = targetUser:GetProperty("RefineDamReduc") local RealDamage = targetUser:GetProperty("RealDamage") if targetUser:HasBuffID(96050) and 1 <= RealDamage then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) if skillID == 359 then RealDamage = RealDamage - 1 end end local AttrEffect = srcUser:GetProperty("AttrEffect") local bits = CommonFun.getBits(AttrEffect) local AttrEffect2 = targetUser:GetProperty("AttrEffect") local bits2 = CommonFun.getBits(AttrEffect2) local StateEffect = targetUser:GetProperty("StateEffect") local bits3 = CommonFun.getBits(StateEffect) local Weapon = srcUser:GetEquipedID(7) if skillParams.RollType == 1 then if bits[CommonFun.AttrEffect.NextAttackIncrease] == 1 then damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * 2 * (1 + RealDamage) * (1 + skillLevel2 * 0.05) if damage <= 0 then damage = 0 end elseif bits2[CommonFun.AttrEffect.NormalSkillDam] == 1 and (profressionID == 42 or profressionID == 43 or profressionID == 44 or profressionID == 45 or profressionID == 102 or profressionID == 103 or profressionID == 104 or profressionID == 105 or profressionID == 112 or profressionID == 113 or profressionID == 114 or profressionID == 115) then local targetid = targetUser:GetGuid() local distance = srcUser:GetDistance(targetid) local skilllv_1 = srcUser:GetLernedSkillLevel(133) local DisDam = 1 if 10 < skilllv_1 then DisDam = 1 + distance / 7.5 * (skilllv_1 - 10) * 0.1 if srcUser:HasBuffID(131080) or targetUser:IsBuffFrom(1007000, srcUser:GetGuid()) and srcUser:HasBuffID(1007050) then DisDam = 1 + (skilllv_1 - 10) * 0.1 end DisDam = math.min(DisDam, 2) end damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * 1.3 * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * DisDam if damage <= 0 then damage = 0 end elseif bits3[CommonFun.StateEffect.Dizzy] == 1 and (Weapon == 40322 or Weapon == 140322) then damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * 1.5 if damage <= 0 then damage = 0 end elseif skillID == 300 or skillID == 469 or skillID == 1397 or skillID == 1446 or skillID == 252 or skillID == 253 then local targetid = targetUser:GetGuid() local distance = srcUser:GetDistance(targetid) local skilllv_1 = srcUser:GetLernedSkillLevel(133) local skilllv_2 = srcUser:GetLernedSkillLevel(478) local DisDam = 1 if 10 < skilllv_1 then DisDam = 1 + distance / 7.5 * (skilllv_1 - 10) * 0.1 if srcUser:HasBuffID(131080) or targetUser:IsBuffFrom(1007000, srcUser:GetGuid()) and srcUser:HasBuffID(1007050) then DisDam = 1 + (skilllv_1 - 10) * 0.1 end DisDam = math.min(DisDam, 2) elseif 10 < skilllv_2 then DisDam = 1 + distance / 7.5 * (skilllv_2 - 10) * 0.1 DisDam = math.min(DisDam, 2) end local fromid = targetUser:GetBuffFromID(116470) local guid = srcUser:GetGuid() local BUffDam = 1 local skilllv_biaoji = srcUser:GetLernedSkillLevel(1147) local GemBiaoji = srcUser:GetGemValue(91121) local Numxp = srcUser:GetRunePoint(94080) if fromid == guid then BUffDam = 1 + skilllv_biaoji * 0.02 + Numxp * 0.02 + GemBiaoji / 100000 end local SpAtk = 0 if srcUser:HasBuffID(131096) then local Sp = srcUser:GetProperty("Sp") SpAtk = Sp end damage = ((((Atk - BaseAtk1) * (1 + AtkPer) + SpAtk) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * DisDam * BUffDam if damage <= 0 then damage = 0 end elseif skillID == 470 then local Enemy = 1 local skilllv_zy = srcUser:GetLernedSkillLevel(1145) if 0 < skilllv_zy and 1 >= srcUser:GetRangeEnemy(3) then Enemy = 1 + skilllv_zy * 0.03 end damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * Enemy if damage <= 0 then damage = 0 end elseif skillID == 5614 then local skilllv_ls = srcUser:GetLernedSkillLevel(5610) local skilllv_ls2 = srcUser:GetLernedSkillLevel(5613) local DefReduc = CommonFun.CalcDef(srcUser, targetUser) damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * DefReduc * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1.4 + skilllv_ls * 0.4) * (0.05 * skilllv_ls2 + 0.25) if damage <= 0 then damage = 0 end else damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) if damage <= 0 then damage = 0 end end elseif bits[CommonFun.AttrEffect.NextAttackIncrease] == 1 then damage = ((MAtk - BaseMAtk) * (1 + MAtkPer) + BaseMAtk + MRefine) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 + MDamIncrease) * 2 * (1 + RealDamage) elseif bits2[CommonFun.AttrEffect.NormalSkillDam] == 1 and (profressionID == 42 or profressionID == 43 or profressionID == 44 or profressionID == 45 or profressionID == 102 or profressionID == 103 or profressionID == 104 or profressionID == 105 or profressionID == 112 or profressionID == 113 or profressionID == 114 or profressionID == 115) then local targetid = targetUser:GetGuid() local distance = srcUser:GetDistance(targetid) local skilllv_1 = srcUser:GetLernedSkillLevel(133) local DisDam = 1 if 10 < skilllv_1 then DisDam = 1 + distance / 7.5 * (skilllv_1 - 10) * 0.1 if srcUser:HasBuffID(131080) or targetUser:IsBuffFrom(1007000, srcUser:GetGuid()) and srcUser:HasBuffID(1007050) then DisDam = 1 + (skilllv_1 - 10) * 0.1 end DisDam = math.min(DisDam, 2) end damage = ((MAtk - BaseMAtk) * (1 + MAtkPer) + BaseMAtk + MRefine) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 + MDamIncrease) * 1.3 * (1 + RealDamage) * DisDam else damage = ((MAtk - BaseMAtk) * (1 + MAtkPer) + BaseMAtk + MRefine) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 + MDamIncrease) * (1 + RealDamage) end if targetUser:GetNpcID() == 30028 then damage = 1 end local elementDam = CommonFun.DoCalcElementDam(srcUser, targetUser, params, damageParam) local stateDam = CommonFun.DoCalcStateEffectDam(srcUser, targetUser) local fromid = targetUser:GetBuffFromID(45000120) local guid = srcUser:GetGuid() local BUffDam = 1 if fromid == guid then BUffDam = 1.3 end local RefineLv = srcUser:GetEquipedRefineLv(7) local HolyEquip = 1 if (Weapon == 40319 or Weapon == 140319) and (profressionID == 11 or profressionID == 12 or profressionID == 13 or profressionID == 14 or profressionID == 15 or profressionID == 203 or profressionID == 204 or profressionID == 205 or profressionID == 72 or profressionID == 73 or profressionID == 74 or profressionID == 75 or profressionID == 605 or profressionID == 665) then HolyEquip = 1 + 0.05 * RefineLv end if (Weapon == 40360 or Weapon == 140360) and (profressionID == 11 or profressionID == 12 or profressionID == 13 or profressionID == 14 or profressionID == 15 or profressionID == 203 or profressionID == 204 or profressionID == 205 or profressionID == 72 or profressionID == 73 or profressionID == 74 or profressionID == 75 or profressionID == 605 or profressionID == 665) then HolyEquip = 1 + 0.05 * RefineLv end local zhufu = 1 if srcUser:HasBuffID(129040) or srcUser:HasBuffID(129041) then local skilllv_zf = srcUser:GetLernedSkillLevel(3610) local GemValue = srcUser:GetGemValue(51161) zhufu = 1 + skilllv_zf * 0.02 + GemValue / 100000 end local hualiBuff = srcUser:HasBuffID(24441) local huali = 1 if hualiBuff == true and srcUser:HasBuffID(90001903) then huali = 1.25 elseif hualiBuff == true then huali = 1.1 end local Ninja = 1 local NinjaDamPer = 1 if skillID == 2010 or skillID == 2011 or skillID == 2012 or skillID == 2013 then local Agi = srcUser:GetProperty("Agi") local AgiRune = srcUser:GetRunePoint(163012) local AgiDam = 1 + math.floor(Agi / 10) * AgiRune * 0.004 local Famous = 1 local RefineLv7 = srcUser:GetEquipedRefineLv(7) if srcUser:HasBuffID(44360) then Famous = Famous * (RefineLv7 * 0.01 + 1) end if srcUser:HasBuffID(44370) then Famous = Famous * (RefineLv7 * 0.03 + 1) end Ninja = AgiDam * Famous end if skillID == 2011 then NinjaDamPer = 1.5 end if skillID == 2012 then NinjaDamPer = 3 end if skillID == 2013 then local Rune = srcUser:GetRunePoint(163021) NinjaDamPer = 6 * (1 + Rune * 0.05) end if skillID == 2200 and WeaponType == 320 then damage = damage * 2 end if skillID == 300 or skillID == 113 or skillID == 252 then local guid = srcUser:GetGuid() local Debuff_Layer_1 = targetUser:GetBuffLayerByIDAndFromID(96082, guid) local Debuff_Layer_2 = targetUser:GetBuffLayerByIDAndFromID(96083, guid) local sw_dam = math.max(Debuff_Layer_1, Debuff_Layer_2) * 0.06 + 1 damage = damage * sw_dam end if skillID == 300 or skillID == 113 or skillID == 252 then local bafeng = 1 local skilllv_1 = srcUser:GetLernedSkillLevel(5700) if targetUser:IsBuffFrom(1007000, srcUser:GetGuid()) then bafeng = 1 + skilllv_1 * 0.05 end damage = damage * bafeng end if skillID == 5204 then local skilllv_sishi = srcUser:GetLernedSkillLevel(5200) damage = damage * (1 + skilllv_sishi * 0.05) end if skillID == 173 then local skilllv_qihei = srcUser:GetLernedSkillLevel(194) if targetUser:GetBuffActive(95500) then damage = damage * (1 + 0.15 * skilllv_qihei) end end if skillID == 5904 then local skilllv_shengguang = srcUser:GetLernedSkillLevel(5900) damage = damage * (1 + 0.1 * skilllv_shengguang) end damage = damage * elementDam * stateDam * BUffDam * HolyEquip * zhufu * Ninja * NinjaDamPer * huali end local GetNpcID = targetUser:GetNpcID() local GetSelfID = srcUser:GetNpcID() if 0 < damage and GetNpcID == 30034 and srcUser:HasBuffID(121) then local Atk = srcUser:GetProperty("Atk") local MAtk = srcUser:GetProperty("MAtk") damage = damage + (Atk + MAtk) * 2.5 end if targetUser:HasBuffID(10740) and srcUser:HasBuffID(10741) == false then damage = 0.2 end local NormalRealDam = srcUser:GetProperty("NormalRealDam") local NormalMRealDam = srcUser:GetProperty("NormalMRealDam") local SkillRealDam = srcUser:GetProperty("SkillRealDam") local SkillMRealDam = srcUser:GetProperty("SkillMRealDam") local RefineDamReduc = targetUser:GetProperty("RefineDamReduc") local RefineMDamReduc = targetUser:GetProperty("RefineMDamReduc") local NormalAtkDam = srcUser:GetProperty("NormalAtkDam") local NormalAtkRes = targetUser:GetProperty("NormalAtkRes") local SkillDam = srcUser:GetProperty("SkillDam") local SkillRes = targetUser:GetProperty("SkillRes") if (skillID == 306 or skillID == 3303 or skillID == 819) and srcUser:HasBuffID(22000830) then SkillRes = math.max(SkillRes - 0.3, 0) end local ActuallySkiRes = SkillRes - SkillDam local ActuallyNorRes = NormalAtkRes - NormalAtkDam if maptype == 2 or maptype == 4 then ActuallySkiRes = ActuallySkiRes < -1 and -1 or 1 < ActuallySkiRes and 1 or ActuallySkiRes ActuallySkiRes = math.floor(ActuallySkiRes * 1000) / 1000 ActuallySkiRes = ActuallySkiRes + 0.4 * (1 - math.sin(ActuallySkiRes * 3.14 / 2)) ActuallyNorRes = ActuallyNorRes < -1 and -1 or 1 < ActuallyNorRes and 1 or ActuallyNorRes ActuallyNorRes = math.floor(ActuallyNorRes * 1000) / 1000 ActuallyNorRes = ActuallyNorRes + 0.4 * (1 - math.sin(ActuallyNorRes * 3.14 / 2)) end local NormalEnd = 1 - ActuallyNorRes local SkillEnd = 1 - ActuallySkiRes NormalEnd = math.max(NormalEnd, 0.15) SkillEnd = math.max(SkillEnd, 0.15) if skillID == 404 then SkillEnd = 1 end if skillID == 83040 or skillID == 83041 or skillID == 83042 or skillID == 83050 or skillID == 83051 then SkillEnd = 1 end if CommonFun.RollType.Magic == skillParams.RollType then if srcUser:IsAttackSkill(params.skillIDAndLevel) and 0 < damage then damage = (damage + NormalMRealDam * (1 - RefineMDamReduc)) * NormalEnd elseif not srcUser:IsAttackSkill(params.skillIDAndLevel) and 0 < damage then damage = (damage + SkillMRealDam * (1 - RefineMDamReduc)) * SkillEnd end end if CommonFun.RollType.Attack == skillParams.RollType then if srcUser:IsAttackSkill(params.skillIDAndLevel) and 0 < damage then damage = (damage + NormalRealDam * (1 - RefineDamReduc)) * NormalEnd elseif not srcUser:IsAttackSkill(params.skillIDAndLevel) and 0 < damage then damage = (damage + SkillRealDam * (1 - RefineDamReduc)) * SkillEnd end end if GetNpcID == 40021 or GetNpcID == 40023 then if srcUser:IsAttackSkill(params.skillIDAndLevel) == false and skillID ~= 151 or srcUser:InGvgZone() == false or srcUser:NoAttackMetal() == true then return 0, CommonFun.DamageType.Miss end local hl_maxhp = targetUser:GetProperty("MaxHp") if damage >= hl_maxhp * 1 / 300 then damage = hl_maxhp * 1 / 300 end end if GetNpcID == 40024 or GetNpcID == 40026 then if srcUser:IsAttackSkill(params.skillIDAndLevel) == false and skillID ~= 151 or srcUser:InGvgZone() == false or srcUser:NoAttackMetal() == true then return 0, CommonFun.DamageType.Miss end local hl_maxhp = targetUser:GetProperty("MaxHp") if damage >= hl_maxhp * 1 / 200 then damage = hl_maxhp * 1 / 200 end end if GetNpcID == 40022 or GetNpcID == 55000 then if srcUser:IsAttackSkill(params.skillIDAndLevel) == false and skillID ~= 151 then return 0, CommonFun.DamageType.Miss end local hl_maxhp = targetUser:GetProperty("MaxHp") if damage >= hl_maxhp * 1 / 30 then damage = hl_maxhp * 1 / 30 end end if srcUser:HasBuffID(166450) == true and srcUser:IsAttackSkill(params.skillIDAndLevel) == false and skillID ~= 151 then return 0, CommonFun.DamageType.Miss end if (CommonFun.DamageType.Normal == damageType or CommonFun.DamageType.Crit == damageType or CommonFun.DamageType.ErLianJi == damageType) and targetUser:DamageAlways1() then damageType = CommonFun.DamageType.Normal damage = 1 end if targetUser:HasBuffID(159620) and 0 < damage and isCanBlock == true then local targetid = targetUser:GetGuid() local distance = srcUser:GetDistance(targetid) if 5 <= distance then return 0, CommonFun.DamageType.None end end local Baxie = true if (skillID == 469 or skillID == 470 or skillID == 4228) and srcUser:HasBuffID(20910120) then Baxie = false end if skillID == 2227 or skillID == 2243 or skillID == 2251 then Baxie = false end if isCanBlock == false then Baxie = false end if bits2[CommonFun.AttrEffect.BaXieZhiZhen] == 1 and CommonFun.RollType.Attack == skillParams.RollType and 0 < damage and skillID ~= 411 and skillID ~= 306 and skillID ~= 3303 and skillID ~= 819 and Baxie == true then if targetUser.AddBuffDamage ~= nil then targetUser:AddBuffDamage(damage) end if srcUser.isServerCall then srcUser:SetMissStillBuff() end return 0, CommonFun.DamageType.Miss end if 0 < damage and (targetUser:GetNpcID() == 56941 or targetUser:GetNpcID() == 56942) and srcUser:GetNpcID() ~= 56941 and srcUser:GetNpcID() ~= 56942 then return 1, CommonFun.DamageType.Normal end if 0 < damage and targetUser:GetNpcID() == 300100 and srcUser:HasBuffID(180220) then damage = damage * 1.3 end if 0 < damage and srcUser:GetNpcID() == 300100 and targetUser:HasBuffID(180219) then damage = damage * 0.5 end if 0 < damage and targetUser:GetNpcID() == 300101 and srcUser:HasBuffID(180518) then damage = damage * 1.25 end if 0 < damage and srcUser:GetNpcID() == 300101 and targetUser:HasBuffID(180517) then damage = damage * 0.7 end if (targetUser:HasBuffID(121030) == true or targetUser:HasBuffID(55693) == true or targetUser:HasBuffID(90003955) == true or targetUser:HasBuffID(90005555) == true) and CommonFun.RollType.Magic == skillParams.RollType and 0 < damage and isCanBlock == true then return 0, CommonFun.DamageType.DefMagic end if (targetUser:HasBuffID(90003975) == true or targetUser:HasBuffID(90005405) == true) and CommonFun.RollType.Attack == skillParams.RollType and 0 < damage and isCanBlock == true then return 0, CommonFun.DamageType.DefPhysics end if srcUser:IsAttackSkill(params.skillIDAndLevel) == false and targetUser:HasBuffID(107330) and isCanBlock == true and 0 < damage then local Bufflv = targetUser:GetBuffLevel(107330) if CommonFun.IsInRate(Bufflv * 3, srcUser:GetRandom()) then return 0, CommonFun.DamageType.WeaponBlock end end local JGBH = 1 if (targetUser:HasBuffID(100660) == true or targetUser:HasBuffID(21430114) == true or targetUser:HasBuffID(1010230) == true) and 0 < damage then local GemValue = targetUser:GetProperty("JinGangRate") JGBH = 0.15 - GemValue local skilllv_ab = srcUser:GetLernedSkillLevel(306) if 5 < skilllv_ab and skillID == 306 or skillID == 3303 or skillID == 819 then JGBH = 1 end damage = math.floor(damage * JGBH) end local ZFZ = 1 if targetUser:HasBuffID(117105) == true and 0 < damage then local skilllv_zfz = targetUser:GetBuffLevel(117105) ZFZ = 1 - 0.15 * (skilllv_zfz - 5) damage = math.floor(damage * ZFZ) end if targetUser:HasBuffID(31790) and 0 < damage then damage = damage * 1.2 end local targetEnemyNum = targetUser:GetRangeEnemy(5) if (targetUser:HasBuffID(59240) or targetUser:HasBuffID(605710) or targetUser:HasBuffID(605720) or targetUser:HasBuffID(605730) or targetUser:HasBuffID(605740) or targetUser:HasBuffID(605750)) and 1 <= targetEnemyNum and 0 < damage then damage = damage * (1 - math.min(targetEnemyNum * 0.02, 0.1)) end if targetUser:HasBuffID(136240) then local MoonReduc = targetUser:GetProperty("MoonReduc") if targetUser:GetMoonMark(srcUser) then damage = damage * (1 - MoonReduc) end end if srcUser:HasBuffID(136581) ~= true and targetUser:HasBuffID(136580) and 0 < damage then local TreeReduc = targetUser:GetProperty("TreeReduc") damage = damage * (1 - TreeReduc) end if targetUser:HasBuffID(136600) or targetUser:HasBuffID(136522) and 0 < damage then local DragonReduc = targetUser:GetProperty("DragonReduc") damage = damage * (1 - DragonReduc) end if targetUser:HasBuffID(165542) and 0 < damage then damage = damage * 1.5 end if targetUser:HasBuffID(166580) and 0 < damage then damage = damage * 1.3 end if CommonFun.RollType.Attack == skillParams.RollType and targetUser:HasBuffID(10110) and 0 < damage then damage = damage * 0.01 end if targetUser:HasBuffID(90003554) and 0 < damage then local MaxHp = targetUser:GetProperty("MaxHp") local Hp = targetUser:GetProperty("Hp") if Hp / MaxHp >= 0.9 then damage = damage * 0.5 end end local targetTeamNum = targetUser:GetRangeTeammate(5) if targetUser:HasBuffID(29650) and 1 <= targetTeamNum then damage = damage * 0.97 elseif targetUser:HasBuffID(29651) and 1 <= targetTeamNum then damage = damage * 0.94 elseif targetUser:HasBuffID(29652) and 1 <= targetTeamNum then damage = damage * 0.85 end if targetUser:HasBuffID(135240) == true then local skilllv_sz = targetUser:GetBuffLevel(135240) damage = damage * (1 - 0.1 * skilllv_sz) end if targetUser:HasBuffID(135361) or targetUser:HasBuffID(135363) then local SoulNum = targetUser:GetProperty("Soul_Linker") damage = damage / math.max(1, SoulNum) end if targetUser:HasBuffID(30031100) and 0 < damage then local mateNum = targetUser:GetMapTeammateNum() local fentan = 1 if targetUser:HasBuffID(30031101) then fentan = 0.9 elseif targetUser:HasBuffID(30031102) then fentan = 0.75 elseif targetUser:HasBuffID(30031103) then fentan = 0.6 end damage = damage / math.max(1, mateNum) * fentan end local MaxHpsrcUser = srcUser:GetProperty("MaxHp") local MaxHptargetUser = targetUser:GetProperty("MaxHp") local MaxHp_hpper = MaxHptargetUser / MaxHpsrcUser if targetUser:HasBuffID(63180) and 0 < damage and 1 < MaxHp_hpper then damage = damage * 0.95 end local StateEffectGashapon = srcUser:GetProperty("StateEffect") local bits = CommonFun.getBits(StateEffectGashapon) if bits[CommonFun.StateEffect.Poison] == 1 and targetUser:HasBuffID(64350) and 0 < damage then damage = damage * 0.9 end if targetUser:HasBuffID(90003164) and targetUser:InMoveStatus() == true and 0 < damage then damage = damage * 0.7 end if targetUser:HasBuffID(90003984) and targetUser:InMoveStatus() == true and 0 < damage then damage = damage * 0.95 end if targetUser:HasBuffID(56510) then local guid = targetUser:GetGuid() local Debuff_Layer = srcUser:GetBuffLayerByIDAndFromID(96083, guid) damage = damage * (1 - 0.06 * Debuff_Layer) end if CommonFun.Shape.L == targetUser.shape and CommonFun.RollType.Magic == skillParams.RollType and 0 < damage then local largedam = 1 if srcUser:HasBuffID(71930) then largedam = largedam + 0.25 end local CardMedia = srcUser:GetEquipCardNum(7, 23265) largedam = largedam + CardMedia * 0.15 local CardLabore = srcUser:GetEquipCardNum(7, 23284) largedam = largedam + CardLabore * 0.1 if srcUser:HasBuffID(29440) then largedam = largedam + 0.04 elseif srcUser:HasBuffID(29441) then largedam = largedam + 0.08 elseif srcUser:HasBuffID(29442) then largedam = largedam + 0.2 end if srcUser:HasBuffID(118271) then local skilllv_ruihua = srcUser:GetLernedSkillLevel(1324) largedam = largedam + (skilllv_ruihua - 5) * 0.06 end damage = damage * largedam end if CommonFun.Shape.M == targetUser.shape and CommonFun.RollType.Magic == skillParams.RollType and 0 < damage then local mediumdam = 1 local RefineLv = srcUser:GetEquipedRefineLv(8) if srcUser:HasBuffID(72280) then mediumdam = mediumdam + 0.05 + RefineLv * 0.01 end if srcUser:HasBuffID(57300) then mediumdam = mediumdam + 0.02 + RefineLv * 0.01 end if srcUser:HasBuffID(57310) then mediumdam = mediumdam + 0.05 + RefineLv * 0.01 end damage = damage * mediumdam end if srcUser:HasBuffID(187550) then local mapid, maptype = srcUser:GetMapInfo() if mapid == 141 or mapid == 142 or mapid == 143 then local MaxHpMijing = targetUser:GetProperty("MaxHp") local layerMijing = srcUser:GetBuffLayer(187550) local HpMijing = targetUser:GetProperty("Hp") if HpMijing <= MaxHpMijing * 0.3 then damage = damage * (1 + layerMijing * 0.2) end end end local NoHurtRatio = targetUser:GetProperty("NoHurtRatio") if 0 < NoHurtRatio and NoHurtRatio ~= nil and 0 < damage then local Str_qy = targetUser:GetProperty("Str") local Vit_qy = targetUser:GetProperty("Vit") if damage <= (Str_qy + Vit_qy) * NoHurtRatio then if srcUser.isServerCall then targetUser:AddBuff(136732, targetUser:GetGuid()) end return 0, CommonFun.DamageType.Barrier end end if targetUser:HasBuffID(128120) and srcUser:HasBuffID(128123) == false and 0 < damage then local Ensemble = targetUser:GetProperty("Ensemble") damage = damage * (1 - Ensemble % 1000 * 0.1) end if srcUser:HasBuffID(128120) and targetUser:HasBuffID(128123) == false and 0 < damage then local GemValue1 = srcUser:GetGemValue(102162) local GemValue2 = srcUser:GetGemValue(112162) damage = damage * (1 + GemValue1 / 100000 + GemValue2 / 100000) end if targetUser:HasBuffID(131530) then local skill_lv = targetUser:GetBuffLevel(131530) local MaxHp = targetUser:GetProperty("MaxHp") local SeaJudgePer = targetUser:GetProperty("SeaJudgePer") local SeaReducPer = targetUser:GetProperty("SeaReducPer") if damage >= MaxHp * (0.2 - SeaJudgePer) then damage = damage * (1 - skill_lv * 0.03 - SeaReducPer) if srcUser.isServerCall then targetUser:AddBuff(131531, targetUser:GetGuid()) if targetUser:HasBuffID(22000090) then targetUser:AddBuff(131502, srcUser:GetGuid()) targetUser:AddBuff(131503, srcUser:GetGuid()) end end end end local WeaponType = targetUser:GetEquipedWeaponType() local WeaponType2 = srcUser:GetEquipedWeaponType() local Baw = targetUser:GetProperty("BaWangRate") if WeaponType == 250 and 0 < damage then damage = damage * (1 - Baw) end local anxiang = 1 if targetUser:HasBuffID(1008010) and (WeaponType2 == 190 or WeaponType2 == 210 or WeaponType2 == 260 or WeaponType2 == 270 or WeaponType2 == 310 or WeaponType2 == 320) and WeaponType == 210 and 0 < damage then local skill_anxiang = targetUser:GetBuffLevel(1008010) damage = damage * (1 - skill_anxiang * 0.06) end if targetUser:HasBuffID(119092) or 1 <= targetUser:GetBuffLayer(119097) then local rain_num = targetUser:GetBuffLayer(119092) + targetUser:GetBuffLayer(119097) local skill_meisheng = srcUser:GetLernedSkillLevel(5503) local skill_meisheng1 = srcUser:GetLernedSkillLevel(5553) if 1 <= skill_meisheng or 1 <= skill_meisheng1 then damage = damage * (1 + 0.01 * (skill_meisheng + skill_meisheng1) * rain_num) end end local targetid = targetUser:GetGuid() local distance = srcUser:GetDistance(targetid) if CommonFun.LaunchType.LongAttack == skillParams.Launch_Type and (targetUser:HasBuffID(115004) or targetUser:HasBuffID(115080)) and 2 <= distance then local BuffNum = targetUser:GetBuffLevel(115080) if BuffNum == 0 then BuffNum = targetUser:GetBuffLevel(115004) end damage = math.floor(damage * (1 - (0.15 * BuffNum - 0.05))) end if targetUser:HasBuffID(1010100) and 3 < distance then local lianxugongji = targetUser:GetBuffLevel(1010100) damage = damage * (1 - lianxugongji * 0.06) end if targetUser:HasBuffID(137840) and 5 < distance then local Bufflv = targetUser:GetBuffLevel(137840) damage = damage * (1 - Bufflv * 0.08) end if bits3[CommonFun.AttrEffect2.MDamageTo1] == 1 and CommonFun.RollType.Magic == skillParams.RollType then return 1, CommonFun.DamageType.Normal end if bits3[CommonFun.AttrEffect2.DamageTo1] == 1 and CommonFun.RollType.Attack == skillParams.RollType then return 1, CommonFun.DamageType.Normal end local RaidType = srcUser:GetRaidType() if RaidType == 32 then local ball66 = 1 if srcUser:HasBuffID(210010) and targetUser:HasBuffID(107340) then ball66 = 0.9 elseif srcUser:HasBuffID(210010) and targetUser:HasBuffID(107341) then ball66 = 0.8 elseif srcUser:HasBuffID(210010) and targetUser:HasBuffID(107342) then ball66 = 0.7 elseif srcUser:HasBuffID(210010) and targetUser:HasBuffID(107343) then ball66 = 0.6 end if 0 < damage then damage = damage * ball66 end end if RaidType == 44 then local ball66 = 1 if srcUser:HasBuffID(210200) and targetUser:HasBuffID(107340) then ball66 = 0.96 elseif srcUser:HasBuffID(210200) and targetUser:HasBuffID(107341) then ball66 = 0.92 elseif srcUser:HasBuffID(210200) and targetUser:HasBuffID(107342) then ball66 = 0.88 elseif srcUser:HasBuffID(210200) and targetUser:HasBuffID(107343) then ball66 = 0.84 end if 0 < damage then damage = damage * ball66 end end if RaidType == 50 then local CarRealDam = srcUser:GetProperty("CarRealDam") local CarRealDamPer = srcUser:GetProperty("CarRealDamPer") local TwlPlayerReduc = targetUser:GetProperty("TwlPlayerReduc") local TwlMonsterReduc = targetUser:GetProperty("TwlMonsterReduc") local TwlMonsterDam = srcUser:GetProperty("TwlMonsterDam") local MaxHp = targetUser:GetProperty("MaxHp") if GetSelfID == 0 and 0 < damage then damage = damage * (1 - TwlPlayerReduc) end if GetSelfID ~= 0 and srcUser:HasBuffID(151028) == false and 0 < damage then damage = damage * (1 - TwlMonsterReduc) end if GetSelfID == 0 and GetNpcID ~= 0 and targetUser:HasBuffID(151028) == false and 0 < damage then damage = damage * (1 + TwlMonsterDam) elseif GetSelfID ~= 0 and GetNpcID ~= 0 and targetUser:HasBuffID(151028) == false and targetUser:HasBuffID(160000) == true and 0 < damage then damage = damage * (1 + TwlMonsterDam / 3) elseif GetSelfID ~= 0 and GetNpcID ~= 0 and targetUser:HasBuffID(151028) == false and targetUser:HasBuffID(160000) == false and 0 < damage then damage = damage * (1 + TwlMonsterDam) end if srcUser:HasBuffID(151028) and GetNpcID == 0 and targetUser:HasBuffID(151200) == false then damage = damage + 0.1 * MaxHp elseif not srcUser:HasBuffID(151028) or GetNpcID ~= 0 or targetUser:HasBuffID(151200) then end if targetUser:HasBuffID(151028) then if srcUser:IsAttackSkill(params.skillIDAndLevel) == false and 0 < damage then return 0, CommonFun.DamageType.Miss elseif srcUser:IsAttackSkill(params.skillIDAndLevel) == false and damage < 0 then return 0, CommonFun.DamageType.None else damage = math.min(damage, MaxHp * 0.003) + CarRealDam * (1 + CarRealDamPer) end end local Master = srcUser:GetMasterUser() if targetUser:HasBuffID(151028) and srcUser:HasBuffID(151231) == false and (GetSelfID == 0 or Master ~= nil) and srcUser:HasBuffID(151200) == false then damage = 0 elseif not targetUser:HasBuffID(151028) or srcUser:HasBuffID(151200) then end end local FinalDam = CommonFun.calcFinalDam(srcUser, targetUser, params, logger) local MonsterFinalDam = CommonFun.calcMonsterFinalDam(srcUser, targetUser, params, logger) if 0 < damage then local ResultDamInc = srcUser:GetProperty("ResultDamInc") local ResultDamRes = targetUser:GetProperty("ResultDamRes") local BossRealDam = srcUser:GetProperty("BossRealDam") local BossRealReduc = targetUser:GetProperty("BossRealReduc") if targetUser.boss == false then BossRealDam = 0 end local Result = 1 + ResultDamInc - ResultDamRes Result = math.max(Result, 0.1) local BossResult = 1 + BossRealDam - BossRealReduc BossResult = math.max(BossResult, 0.01) damage = damage * FinalDam * MonsterFinalDam * Result * BossResult end if 0 < damage and (GetNpcID == 81000 or GetNpcID == 81001 or GetNpcID == 81002 or GetNpcID == 81003 or GetNpcID == 81004 or GetNpcID == 81005) then damage = CommonFun.calcATMDam(srcUser, targetUser, params, logger) return damage, damageType end if 0 < damage and (GetNpcID == 250300 or GetNpcID == 250310 or GetNpcID == 250330 or GetNpcID == 260300 or GetNpcID == 260310 or GetNpcID == 260330 or GetNpcID == 270300 or GetNpcID == 270310 or GetNpcID == 270330) then damage = damage * CommonFun.calcBOSSFinalDam(srcUser, targetUser, params, logger) end if targetUser:HasBuffID(159530) and 0 < damage then local Limit_Dam = targetUser:GetProperty("MaxHp") if damage < Limit_Dam * 0.02 then damage = 0 end end if 0 < damage and GetNpcID == 280711 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 476 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280708 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 480 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280709 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 188 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280710 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1111 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280734 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1104 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280720 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2035 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280721 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2020 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280745 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2041 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280722 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2019 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280746 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2045 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280459 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2045 or skillID == 2019 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and (GetNpcID == 280735 or GetNpcID == 280732 or GetNpcID == 280733) then local college = 0.01 damage = math.floor(damage * college) end if 0 < damage and (GetNpcID == 280717 or GetNpcID == 280741) then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 172 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280449 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 172 or skillID == 143 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and (GetNpcID == 280718 or GetNpcID == 280742) then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 143 and srcUser:HasBuffID(117320) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280705 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1423 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280729 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1433 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and (GetNpcID == 280830 or GetNpcID == 280706) then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1373 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280730 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1384 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280723 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1247 or skillID == 1251 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280747 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 138 or skillID == 201 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280731 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 300 and (srcUser:HasBuffID(117410) or srcUser:HasBuffID(117411)) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280707 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 300 and srcUser:HasBuffID(90200) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280700 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 360 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280724 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 360 or skillID == 1180 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280701 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1164 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280725 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1165 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280702 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if (skillID == 3209 or skillID == 79 or skillID == 74 or skillID == 107 or skillID == 1312) and (srcUser:HasBuffID(118340) or srcUser:HasBuffID(118341) or srcUser:HasBuffID(118342) or srcUser:HasBuffID(118343) or srcUser:HasBuffID(118344)) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280726 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1305 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280703 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 21 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280727 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 21 or skillID == 1261 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280425 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 13 and (srcUser:HasBuffID(80110) or srcUser:HasBuffID(80113) or srcUser:HasBuffID(117630)) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280704 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 13 and (srcUser:HasBuffID(80110) or srcUser:HasBuffID(80113)) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280728 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 13 and srcUser:HasBuffID(117630) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280713 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 448 or skillID == 402 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280737 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1122 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280443 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1625 or skillID == 1637 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280714 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1625 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280738 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1637 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280715 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1612 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280739 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1614 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280719 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1203 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280743 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1208 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and (GetNpcID == 280489 or GetNpcID == 280490) then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2200 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280748 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2202 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280750 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2202 or skillID == 2224 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280749 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2227 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280751 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2227 or skillID == 2207 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280755 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2323 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280756 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2323 or skillID == 2301 then college = 1 end damage = math.floor(damage * college) end if bits2[CommonFun.AttrEffect.InGodStatus] == 1 and 0 < damage then return 0, CommonFun.DamageType.Miss end if GetSelfID == 0 and (GetNpcID == 301200 or GetNpcID == 301201 or GetNpcID == 301202 or GetNpcID == 301203 or GetNpcID == 301204 or GetNpcID == 301205 or GetNpcID == 301206) then return 0, CommonFun.DamageType.Miss end if targetUser:HasBuffID(32290) and 0 < damage and targetUser:HasBuffID(135251) == false then local mapid, maptype = srcUser:GetMapInfo() local pvpRatio = 5 if maptype == 2 or maptype == 4 then pvpRatio = 20 end local Sp = targetUser:GetProperty("Sp") if Sp > damage / pvpRatio then damage = damage / pvpRatio return damage, CommonFun.DamageType.Normal_Sp elseif 0 < Sp and Sp < damage / pvpRatio then damage = damage - Sp * pvpRatio local Hp = targetUser:GetProperty("Hp") if damage >= Hp then return damage, damageType end if srcUser.isServerCall then srcUser:AddBuff(32291, targetUser:GetGuid()) end end end if srcUser:HasBuffID(154690) and srcUser:IsAttackSkill(params.skillIDAndLevel) == false and 0 < damage then local skilllv_luk = srcUser:GetBoKiSkillLv(4520) local skilllv_lukdam = srcUser:GetBoKiSkillLv(4521) local Rate = skilllv_luk * 3 if CommonFun.IsInRate(Rate, srcUser:GetRandom()) then damage = damage * (1.3 + skilllv_lukdam * 0.03) damageType = CommonFun.DamageType.Crit local skilllv_lukzs = srcUser:GetBoKiSkillLv(4522) if 0 < skilllv_lukzs and srcUser.isServerCall then srcUser:AddBuff(154340, targetUser:GetGuid()) end end end local TaichiSecretLandGemLv = targetUser:GetSecretLandGemLv(384009) if TaichiSecretLandGemLv ~= 0 and 0 < damage then local reduceRatio = TaichiSecretLandGemLv * 0.002 + math.max(TaichiSecretLandGemLv - 30, 0) * 0.001 + math.max(TaichiSecretLandGemLv - 60, 0) * 0.002 local loseValue = damage * reduceRatio damage = damage - loseValue if srcUser.isServerCall then targetUser:ChangeHpDuringTime(-loseValue, 3, srcUser:GetGuid()) end end local skilllv_1 = skillParams.id if (srcUser:HasBuffID(35600) or srcUser:HasBuffID(43230) or srcUser:HasBuffID(55170) or srcUser:HasBuffID(66730) or srcUser:HasBuffID(55890) or srcUser:HasBuffID(70450) or srcUser:HasBuffID(56700) or srcUser:HasBuffID(56730) or srcUser:HasBuffID(55710) or srcUser:HasBuffID(73550) or srcUser:HasBuffID(57700) or srcUser:HasBuffID(57170) or srcUser:HasBuffID(23200) or srcUser:HasBuffLayer(23200, EBUFFERLAYER_SHADOW) or srcUser:HasBuffID(602110) or srcUser:HasBuffID(602120) or srcUser:HasBuffID(602130) or srcUser:HasBuffID(602140) or srcUser:HasBuffID(602150) or srcUser:HasBuffID(59510) or srcUser:HasBuffID(602610) or srcUser:HasBuffID(602620) or srcUser:HasBuffID(602630) or srcUser:HasBuffID(602640) or srcUser:HasBuffID(602650) or srcUser:HasBuffID(602910) or srcUser:HasBuffID(602920) or srcUser:HasBuffID(602930) or srcUser:HasBuffID(602940) or srcUser:HasBuffID(602950)) and 0 < damage then local Luk = srcUser:GetProperty("Luk") local CriDamNum = 1.5 + math.floor(Luk / 6) / 100 if srcUser:HasBuffID(81002780) then CriDamNum = CriDamNum + math.floor(Luk / 6) / 1000 end local CriDamPer = srcUser:GetProperty("CriDamPer") if srcUser:HasBuffID(81005110) then CriDamNum = CriDamNum + math.floor(CriDamPer * 100 / 20) / 100 end local Ring1 = srcUser:GetEquipedID(5) local RefineLv1 = srcUser:GetEquipedRefineLv(5) local Ring2 = srcUser:GetEquipedID(6) local RefineLv2 = srcUser:GetEquipedRefineLv(6) local RefineLv7 = srcUser:GetEquipedRefineLv(7) local CriNum1 = 0 if srcUser:HasBuffID(35600) then CriNum1 = 20 end local a = 0 local b = 0 if (Ring1 == 44076 or Ring1 == 144076) and RefineLv1 < 8 then a = 3 elseif (Ring1 == 44076 or Ring1 == 144076) and 8 <= RefineLv1 and RefineLv1 < 12 then a = 6 elseif (Ring1 == 44076 or Ring1 == 144076) and RefineLv1 >= 12 then a = 10 end if (Ring2 == 44076 or Ring2 == 144076) and RefineLv2 < 8 then b = 3 elseif (Ring2 == 44076 or Ring2 == 144076) and 8 <= RefineLv2 and RefineLv2 < 12 then b = 6 elseif (Ring2 == 44076 or Ring2 == 144076) and RefineLv2 >= 12 then b = 10 end local aa = 0 local bb = 0 local equipRing5 = srcUser:getEquip(CommonFun.PackType.EPACKTYPE_EQUIP, CommonFun.EquipPos.EEQUIPPOS_ACCESSORY1) if equipRing5.id == 44166 or equipRing5.id == 144166 then if 0 <= equipRing5.refinelv and 8 > equipRing5.refinelv then aa = 3 elseif 8 <= equipRing5.refinelv and equipRing5.refinelv < 12 then aa = 6 elseif equipRing5.refinelv >= 12 then aa = 10 end end local equipRingSD5 = srcUser:getEquip(CommonFun.PackType.EPACKTYPE_SHADOWEQUIP, CommonFun.EquipPos.EEQUIPPOS_ACCESSORY1) if equipRingSD5.id == 44166 or equipRingSD5.id == 144166 then if 0 <= equipRingSD5.refinelv and 8 > equipRingSD5.refinelv then aa = 3 * equipRingSD5.quench_per / 100 elseif 8 <= equipRingSD5.refinelv and equipRingSD5.refinelv < 12 then aa = 6 * equipRingSD5.quench_per / 100 elseif equipRingSD5.refinelv >= 12 then aa = 10 * equipRingSD5.quench_per / 100 end end local equipRing6 = srcUser:getEquip(CommonFun.PackType.EPACKTYPE_EQUIP, CommonFun.EquipPos.EEQUIPPOS_ACCESSORY2) if equipRing6.id == 44166 or equipRing6.id == 144166 then if 0 <= equipRing6.refinelv and 8 > equipRing6.refinelv then bb = 3 elseif 8 <= equipRing6.refinelv and equipRing6.refinelv < 12 then bb = 6 elseif equipRing6.refinelv >= 12 then bb = 10 end end local equipRingSD6 = srcUser:getEquip(CommonFun.PackType.EPACKTYPE_SHADOWEQUIP, CommonFun.EquipPos.EEQUIPPOS_ACCESSORY2) if equipRingSD6.id == 44166 or equipRingSD6.id == 144166 then if 0 <= equipRingSD6.refinelv and 8 > equipRingSD6.refinelv then bb = 3 * equipRingSD6.quench_per / 100 elseif 8 <= equipRingSD6.refinelv and equipRingSD6.refinelv < 12 then bb = 6 * equipRingSD6.quench_per / 100 elseif equipRingSD6.refinelv >= 12 then bb = 10 * equipRingSD6.quench_per / 100 end end local CriNum2 = a + b + aa + bb local CardBK = srcUser:GetEquipCardNum(7, 20189) local CardBK1 = srcUser:GetEquipCardNum(7, 24113) local CardKL = srcUser:GetEquipCardNum(7, 23256) local CardConjuror = srcUser:GetEquipCardNum(2, 23252) local CardCamorra = srcUser:GetEquipCardNum(7, 23334) local Card23334 = 0 if 1 <= CardCamorra then Card23334 = srcUser:GetBuffLayer(602910) * 1 + srcUser:GetBuffLayer(602920) * 2 + srcUser:GetBuffLayer(602930) * 3 + srcUser:GetBuffLayer(602940) * 4 + srcUser:GetBuffLayer(602950) * 5 end local CardBE = srcUser:GetEquipCardNum(8, 23455) local Card23455 = 0 if 1 <= CardBE then Card23455 = srcUser:GetBuffLayer(602610) * 1 + srcUser:GetBuffLayer(602620) * 2 + srcUser:GetBuffLayer(602630) * 3 + srcUser:GetBuffLayer(602640) * 4 + srcUser:GetBuffLayer(602650) * 5 end local CriNum3 = CardBK * 15 + CardBK1 * 17.5 + CardKL * 10 + CardConjuror * 10 + CardCamorra * (5 + RefineLv7) + CardBE * 10 + Card23455 + Card23334 local CardNumH1 = srcUser:GetEquipCardNum(5, 23064) local CardNumH2 = srcUser:GetEquipCardNum(6, 23064) local Card23064 = 0 if 1 <= CardNumH1 + CardNumH2 then Card23064 = srcUser:GetBuffLayer(602110) * 1 + srcUser:GetBuffLayer(602120) * 2 + srcUser:GetBuffLayer(602130) * 3 + srcUser:GetBuffLayer(602140) * 4 + srcUser:GetBuffLayer(602150) * 5 end local CardNumB1 = srcUser:GetEquipCardNum(5, 23324) local CardNumB2 = srcUser:GetEquipCardNum(6, 23324) local CriNum5 = CardNumH1 * 10 + CardNumH2 * 10 + Card23064 + CardNumB1 * 8 + CardNumB2 * 8 local CriNum4 = 0 local RefineLv3 = srcUser:GetEquipedRefineLv(11) if srcUser:HasBuffID(66730) and 6 <= RefineLv3 then CriNum4 = 20 elseif srcUser:HasBuffID(66730) and RefineLv3 < 6 then CriNum4 = 10 end local CriNum6 = 0 local RefineLv10 = srcUser:GetEquipedRefineLv(10) if srcUser:HasBuffID(70450) then CriNum6 = 5 + RefineLv10 * 1 end local CriNum7 = 0 local RefineLv8 = srcUser:GetEquipedRefineLv(8) if srcUser:HasBuffID(73550) then CriNum7 = 10 + RefineLv8 * 1 end local CriNum = CriNum1 + CriNum2 + CriNum3 + CriNum4 + CriNum5 + CriNum6 + CriNum7 if CommonFun.RollType.Magic == skillParams.RollType and srcUser:IsAttackSkill(params.skillIDAndLevel) == false and 0 < damage and CommonFun.IsInRate(CriNum, srcUser:GetRandom()) and (mapid == 7200 or mapid == 7204 or mapid == 7505 or mapid == 7510 or mapid == 7515 or mapid == 7520 or mapid == 154 or srcUser:InDamReduceRaid() == true and srcUser:IsUserCamp() == true) then return math.min(damage * CriDamNum), CommonFun.DamageType.Crit elseif CommonFun.RollType.Magic == skillParams.RollType and srcUser:IsAttackSkill(params.skillIDAndLevel) == false and 0 < damage and CommonFun.IsInRate(CriNum, srcUser:GetRandom()) then return math.min(damage * CriDamNum, 2147483647), CommonFun.DamageType.Crit end end damage = math.floor(damage) local count = params.hitedCount local index = params.hitedIndex if skillParams.Logic_Param.spotter ~= nil and index ~= 1 then local spotter = srcUser:GetSpotter(params.skillIDAndLevel) + skillParams.Logic_Param.spotter return math.min(damage * spotter, 2147483647), damageType end if skillID == 252 and count == 1 and srcUser:HasBuffID(20410160) then local spotter = srcUser:GetSpotter(params.skillIDAndLevel) + skillParams.Logic_Param.spotter return math.min(damage * (1 + spotter * 0.3 * 2), 2147483647), damageType end if skillID == 253 and index == 1 then return 0, 0 end local mapid, maptype = srcUser:GetMapInfo() if damage >= 2147483647 and (mapid == 7200 or mapid == 7204 or mapid == 7505 or mapid == 7510 or mapid == 7515 or mapid == 7520 or mapid == 154 or srcUser:InDamReduceRaid() == true and srcUser:IsUserCamp() == true) then elseif damage >= 2147483647 then damage = 2147483647 end if skillParams.Logic == "SkillLockedTarget" and skillParams.Logic_Param.range == nil and srcUser:HasBuffID(311000) then local rate1 = srcUser:GetBuffLayer(311010) local rate2 = srcUser:GetBuffLayer(311200) * 10 local rate = rate1 if rate1 == 10 then rate = rate1 + rate2 end local baoshang = 2 if rate1 == 10 then baoshang = srcUser:GetBuffLayer(311100) * 0.2 + 2 end if CommonFun.IsInRate(rate, srcUser:GetRandom()) then damage = damage * baoshang damageType = CommonFun.DamageType.Crit if srcUser:HasBuffID(311300) and srcUser.isServerCall then srcUser:AddBuff(311301, srcUser:GetGuid()) end if srcUser:HasBuffID(311400) and srcUser.isServerCall then srcUser:AddBuff(311401, targetUser:GetGuid()) end end end return damage, damageType end
No formula links
Changes: 20251127_update vs 20251120_update
function CommonFun.CalcBaseDamage(srcUser, targetUser, params, logger) local damageType = CommonFun.DamageType.Normal local damage, forceDamageType = CommonFun.DoCalcDamage(srcUser, targetUser, params, logger) if nil == srcUser then logger.error(string.format("srcUser is nil")) return 0, CommonFun.DamageType.None end if nil == targetUser then logger.error(string.format("targetUser is nil")) return 0, CommonFun.DamageType.None end if nil == Table_Skill then logger.error("Table_Skill is nil") return 0, CommonFun.DamageType.None end local skillParams = Table_Skill[params.skillIDAndLevel] if nil == skillParams then logger.error(string.format("Table_Skill[%d] is nil", params.skillIDAndLevel)) return 0, CommonFun.DamageType.None end local paramList = skillParams.Damage if nil == paramList or #paramList <= 0 then return 0, CommonFun.DamageType.None end local mapid, maptype = srcUser:GetMapInfo() local AttrFunction = srcUser:GetProperty("AttrFunction") local bitfunc = CommonFun.getBits(AttrFunction) if (targetUser.boss or targetUser.mini or targetUser.changelinepunish) and (targetUser.zoneType == 1 or targetUser.zoneType == 22) and targetUser.noPunishBoss == false and bitfunc[CommonFun.AttrFunction.JustInViceZone] == 1 and targetUser.isBossFromBranch == false then return 0, CommonFun.DamageType.Miss end if CommonFun.checkAttrFunctionMiss(targetUser, srcUser) then return 0, CommonFun.DamageType.Miss end if targetUser.boss and targetUser.zoneType == 22 and CommonFun.CheckStormBossMiss(targetUser, srcUser) then return 0, CommonFun.DamageType.Miss end local iscrit = CommonFun.IsCrit(srcUser, targetUser, skillParams) if CommonFun.RollType.Attack == skillParams.RollType then if srcUser:IsAttackSkill(params.skillIDAndLevel) then if iscrit == false and CommonFun.IsMiss(srcUser, targetUser, skillParams) == true then return 0, CommonFun.DamageType.Miss end elseif not srcUser:IsAttackSkill(params.skillIDAndLevel) and CommonFun.IsMiss(srcUser, targetUser, skillParams) == true then return 0, CommonFun.DamageType.Miss end end local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local enemy = srcUser:IsEnemy(targetUser) local DefAttr2 = targetUser:GetProperty("DefAttr") local AttrEffect2 = targetUser:GetProperty("AttrEffect") local bits2 = CommonFun.getBits(AttrEffect2) local AttrEffect3 = targetUser:GetProperty("AttrEffect2") local bits3 = CommonFun.getBits(AttrEffect3) local srcAttrEffect = srcUser:GetProperty("AttrEffect3") local bits4 = CommonFun.getBits(srcAttrEffect) local AttrEffect4 = targetUser:GetProperty("AttrEffect3") local bits5 = CommonFun.getBits(AttrEffect4) local isCanBlock = true if bits4[CommonFun.AttrEffect3.MustHit] == 1 and srcUser:HasBuffID(21930030) then isCanBlock = false end if bits5[CommonFun.AttrEffect3.CantBlock] == 1 then isCanBlock = false end local skill_qy = srcUser:GetLernedSkillLevel(2561) if 7 <= skill_qy and srcUser:HasBuffID(136780) and targetUser:HasBuffID(136781) then isCanBlock = false end if skillID == 6110 and srcUser:GetBuffLayer(116080) == 15 then isCanBlock = false end if enemy then if targetUser:IsImmuneSkill(skillID) then return 0, CommonFun.DamageType.Miss end if skillID == 160 and DefAttr2 == CommonFun.Nature.Undead and targetUser.boss == false and targetUser.mini == false and targetUser:GetNpcID() ~= 18143 and targetUser:GetNpcID() ~= 18144 and targetUser:GetNpcID() ~= 18145 and targetUser:HasBuffID(160000) == false then local Luk = srcUser:GetProperty("Luk") local Int = srcUser:GetProperty("Int") local BaseLv = srcUser.BaseLv local Hp = targetUser:GetProperty("Hp") local MaxHp = targetUser:GetProperty("MaxHp") local rate = (20 * skillLevel + Luk + Int + BaseLv + (1 - Hp / MaxHp) * 200) / 10 if 70 <= rate then rate = 70 end if CommonFun.IsInRate(rate, srcUser:GetRandom()) then return targetUser:GetProperty("MaxHp"), CommonFun.DamageType.Normal end end if bits2[CommonFun.AttrEffect.NoMagicDamage] == 1 and CommonFun.RollType.Magic == skillParams.RollType then return 0, CommonFun.DamageType.WeaponBlock end if bits2[CommonFun.AttrEffect.NoPhysicalDamage] == 1 and CommonFun.RollType.Attack == skillParams.RollType then return 0, CommonFun.DamageType.WeaponBlock end if bits2[CommonFun.AttrEffect.IgnoreNearNormalSkill] == 1 and nil ~= skillParams.Launch_Type and CommonFun.LaunchType.CloseAttack == skillParams.Launch_Type then return 0, CommonFun.DamageType.WeaponBlock end 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 and isCanBlock == true then return 0, CommonFun.DamageType.Barrier end 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 and skillID ~= 2243 and skillID ~= 2251 and isCanBlock == true then return 0, CommonFun.DamageType.Barrier end if skillParams.Launch_Range ~= nil and skillParams.RollType == 1 and skillParams.Logic == "SkillLockedTarget" and isCanBlock == true and targetUser:HasBuffID(132080) then local Bufflv = targetUser:GetBuffLevel(132080) local WeaponType = targetUser:GetEquipedWeaponType() local ShadowNum = targetUser:GetPetCount("ShadowNpc") local Rate = Bufflv * ShadowNum * 2 if CommonFun.IsInRate(Rate, srcUser:GetRandom()) and WeaponType == 210 then return 0, CommonFun.DamageType.Miss end end if skillParams.Launch_Range ~= nil and CommonFun.IsLongSkill(skillParams.Launch_Range) == true and skillParams.RollType == 1 and skillParams.Logic == "SkillLockedTarget" and isCanBlock == true then local Rate = 0 if targetUser:HasBuffID(118172) then local Bufflv = targetUser:GetBuffLevel(118172) Rate = Bufflv * 10 + 20 end if targetUser:HasBuffID(90160) or targetUser:HasBuffID(123280) then local Value = targetUser:GetProperty("LongFleeRate") Rate = Rate + Value end if targetUser:HasBuffID(1007010) and srcUser:HasBuffID(1007000) then Rate = 100 end if CommonFun.IsInRate(Rate, srcUser:GetRandom()) and srcUser:HasBuffID(49120) == false then return 0, CommonFun.DamageType.Miss end end if skillParams.Launch_Range ~= nil and CommonFun.IsLongSkill(skillParams.Launch_Range) == true and skillParams.RollType == 1 and isCanBlock == true then local Rate = 0 if targetUser:HasBuffID(133644) or targetUser:HasBuffID(136010) or targetUser:HasBuffID(136011) then Rate = targetUser:GetProperty("LongFleeRate") end if CommonFun.IsInRate(Rate, srcUser:GetRandom()) and srcUser:HasBuffID(49120) == false then return 0, CommonFun.DamageType.Miss end end if targetUser:HasBuffID(20910160) and targetUser:HasBuffID(106100) and CommonFun.RollType.Magic == skillParams.RollType and skillParams.Logic ~= "SkillLockedTarget" and isCanBlock == true and 0 < damage then return 0, CommonFun.DamageType.Miss end if srcUser:HasBuffID(136780) and targetUser:HasBuffID(136781) == false then return 0, CommonFun.DamageType.Miss end if srcUser:HasBuffID(136781) == false and targetUser:HasBuffID(136780) then return 0, CommonFun.DamageType.Miss end if CommonFun.RollType.Magic == skillParams.RollType and isCanBlock == true and 0 < damage then local Flee = targetUser:GetProperty("Flee") local Rate = 0 if targetUser:HasBuffID(32980) then Rate = Rate + 5 + math.min(Flee / 50, 15) end local CardSP = targetUser:GetBuffLayer(53550) local CardSP1 = targetUser:GetBuffLayer(604210) + targetUser:GetBuffLayer(604220) + targetUser:GetBuffLayer(604230) + targetUser:GetBuffLayer(604240) + targetUser:GetBuffLayer(604250) if 0 < CardSP or 0 < CardSP1 then Rate = Rate + CardSP * 5 + CardSP1 * 5 end local CardNumH1 = targetUser:GetBuffLayer(56900) Rate = Rate + CardNumH1 * 3 local CardNumH3 = targetUser:GetBuffLayer(58640) Rate = Rate + CardNumH3 * 5 local CardNumMY = targetUser:GetBuffLayer(57850) Rate = Rate + CardNumMY * 5 if targetUser:HasBuffID(90004954) then Rate = Rate + 10 end if targetUser:HasBuffID(90005054) then Rate = Rate + 5 end local MemoryBufflvlayer = targetUser:GetBuffLayer(29250) if targetUser:HasBuffID(29250) then Rate = Rate + MemoryBufflvlayer * 1 end if targetUser:HasBuffID(118250) or targetUser:HasBuffID(128100) or targetUser:HasBuffID(128101) or targetUser:HasBuffID(135200) or targetUser:HasBuffID(100038250) or targetUser:HasBuffID(135353) or targetUser:HasBuffID(136011) or targetUser:HasBuffID(1001001) or targetUser:HasBuffID(232030) then local MagicFlee = targetUser:GetProperty("MagicFleeRate") Rate = Rate + MagicFlee end if CommonFun.IsInRate(Rate, srcUser:GetRandom()) then if srcUser.isServerCall then targetUser:OnDodgeMagic() end return 0, CommonFun.DamageType.Miss end end local judu = true if skillID == 187 and srcUser:HasBuffID(20310010) then judu = false end if skillID == 2227 or skillID == 2243 or skillID == 2251 then judu = false end if isCanBlock == false then judu = false end if skillID == 6110 and srcUser:GetBuffLayer(116080) == 15 then judu = false end local HarmImmune = targetUser:GetProperty("HarmImmune") if nil ~= HarmImmune and 0 < HarmImmune then local harmImmuneInfo = Table_BuffStateOdds[HarmImmune] if nil ~= harmImmuneInfo then local rate = harmImmuneInfo.Odds * 100 if params.pvpMap then local Dex = srcUser:GetProperty("Dex") local Agi = targetUser:GetProperty("Agi") local rate1 = math.min(Dex * 0.1 - Agi * 0.1, 20) if rate1 < 0 then rate1 = 0 end rate = rate - rate1 if rate < 0 then rate = 0 end end local WeaponType = targetUser:GetEquipedWeaponType() local lingqijian = targetUser:GetBuffLayer(1002001) if targetUser:HasBuffID(1002020) then rate = rate + 3 * lingqijian end if CommonFun.IsInRate(rate, srcUser:GetRandom()) and math.floor(params.skillIDAndLevel / 1000) ~= 306 and math.floor(params.skillIDAndLevel / 1000) ~= 422 and math.floor(params.skillIDAndLevel / 1000) ~= 1122 and math.floor(params.skillIDAndLevel / 1000) ~= 1164 and judu == true and math.floor(params.skillIDAndLevel / 1000) ~= 3303 and math.floor(params.skillIDAndLevel / 1000) ~= 819 and math.floor(params.skillIDAndLevel / 1000) ~= 3706 and math.floor(params.skillIDAndLevel / 1000) ~= 1809 and math.floor(params.skillIDAndLevel / 1000) ~= 1835 and math.floor(params.skillIDAndLevel / 1000) ~= 1915 and math.floor(params.skillIDAndLevel / 1000) ~= 1941 and math.floor(params.skillIDAndLevel / 10000) ~= 531 and math.floor(params.skillIDAndLevel / 10000) ~= 532 then return 0, CommonFun.DamageType.Block end end end if bits3[CommonFun.AttrEffect2.AutoDef] == 1 then local rate = targetUser:GetProperty("AutoBlockRate") rate = math.min(rate, 60) if CommonFun.IsInRate(rate, srcUser:GetRandom()) and math.floor(params.skillIDAndLevel / 1000) ~= 306 and math.floor(params.skillIDAndLevel / 1000) ~= 411 and math.floor(params.skillIDAndLevel / 1000) ~= 422 and math.floor(params.skillIDAndLevel / 1000) ~= 1122 and math.floor(params.skillIDAndLevel / 1000) ~= 1164 and judu == true and math.floor(params.skillIDAndLevel / 1000) ~= 3303 and math.floor(params.skillIDAndLevel / 1000) ~= 819 and math.floor(params.skillIDAndLevel / 1000) ~= 3706 and math.floor(params.skillIDAndLevel / 1000) ~= 1809 and math.floor(params.skillIDAndLevel / 1000) ~= 1835 and math.floor(params.skillIDAndLevel / 1000) ~= 1915 and math.floor(params.skillIDAndLevel / 1000) ~= 1941 and math.floor(params.skillIDAndLevel / 10000) ~= 531 and math.floor(params.skillIDAndLevel / 10000) ~= 532 then local skilllv_weiw = targetUser:GetLernedSkillLevel(1190) if 0 < skilllv_weiw and srcUser.isServerCall then targetUser:AddBuff(116700, srcUser:GetGuid()) end local skilllv_ss = targetUser:GetLernedSkillLevel(3806) if 0 < skilllv_ss and srcUser.isServerCall then targetUser:AddBuff(130080, targetUser:GetGuid()) end local skilllv_zhanji2 = targetUser:GetLernedSkillLevel(5402) local targetid = targetUser:GetGuid() local distance = srcUser:GetDistance(targetid) if 0 < skilllv_zhanji2 and distance <= 3 and targetUser:HasBuffID(1004041) then local zhanjirate = skilllv_zhanji2 * 5 + 25 if srcUser.isServerCall and CommonFun.IsInRate(zhanjirate, srcUser:GetRandom()) then targetUser:AddBuff(1004010, srcUser:GetGuid()) end end return 0, CommonFun.DamageType.AutoBlock end end if bits3[CommonFun.AttrEffect2.WeaponBlock] == 1 and isCanBlock == true then local rate = targetUser:GetProperty("WeaponBlockRate") local GemValue2 = targetUser:GetGemValue(31012) if targetUser:HasBuffID(116094) then rate = 100 end 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 and math.floor(params.skillIDAndLevel / 1000) ~= 3303 and math.floor(params.skillIDAndLevel / 1000) ~= 819 then local RuneNum = targetUser:GetRunePoint(34030) if 0 < RuneNum then local RuneRate = RuneNum * 25 + GemValue2 / 1000 if srcUser.isServerCall and CommonFun.IsInRate(RuneRate, srcUser:GetRandom()) then targetUser:AddBuff(116041, srcUser:GetGuid()) end end if targetUser:HasBuffID(116094) and srcUser.isServerCall then targetUser:AddBuff(116096, targetUser:GetGuid()) end return 0, CommonFun.DamageType.WeaponBlock end local rate2 = 0 local skilllv_xiaodao = targetUser:GetLernedSkillLevel(6102) local xiaodao = targetUser:GetBuffLayer(1011001) if targetUser:HasBuffID(1011001) then rate2 = xiaodao * 0.4 * skilllv_xiaodao end if targetUser:HasBuffID(116094) and targetUser:HasBuffID(1011001) then rate2 = 100 end if CommonFun.IsInRate(rate2, srcUser:GetRandom()) and skillParams.Launch_Range ~= nil and CommonFun.IsLongSkill(skillParams.Launch_Range) == true and skillParams.RollType == 1 and math.floor(params.skillIDAndLevel / 1000) ~= 2227 and math.floor(params.skillIDAndLevel / 1000) ~= 2243 and math.floor(params.skillIDAndLevel / 1000) ~= 2251 then if targetUser:HasBuffID(116094) and srcUser.isServerCall then targetUser:AddBuff(116096, targetUser:GetGuid()) end return 0, CommonFun.DamageType.WeaponBlock end end if srcUser:HasBuffID(1007000) and targetUser:HasBuffID(1007010) then local Rate1 = 0 local skilllv_bafeng = targetUser:GetBuffLevel(1007010) if srcUser:IsBuffFrom(1007000, targetUser:GetGuid()) then Rate1 = skilllv_bafeng * 5 end if CommonFun.IsInRate(Rate1, srcUser:GetRandom()) and srcUser:HasBuffID(49120) == false then return 0, CommonFun.DamageType.Miss end end if targetUser:HasBuffID(1006200) then local Rate2 = 0 local skilllv_sanlian = targetUser:GetBuffLevel(1006200) if 1 <= skilllv_sanlian then local Agi = targetUser:GetProperty("Agi") Rate2 = math.floor(Agi / (65 - 5 * skilllv_sanlian)) * skilllv_sanlian end if CommonFun.IsInRate(Rate2, srcUser:GetRandom()) and srcUser:HasBuffID(49120) == false then return 0, CommonFun.DamageType.Miss end end if targetUser:HasBuffID(318001) and targetUser:HasBuffID(318301) and isCanBlock == true then local rate1 = targetUser:GetBuffLayer(318001) * 2 if targetUser:HasBuffID(318400) then rate1 = rate1 * 2 end if CommonFun.IsInRate(rate1, srcUser:GetRandom()) then return 0, CommonFun.DamageType.WeaponBlock end end if srcUser:HasBuffID(323301) or srcUser:HasBuffID(323401) then local Rate1 = 10 if srcUser:HasBuffID(323401) then Rate1 = 20 end if CommonFun.IsInRate(Rate1, srcUser:GetRandom()) then return 0, CommonFun.DamageType.Miss end end local buff2MissAtkAttr = { [90005525] = { 6, 7, 8, 10 }, [90005545] = { 1, 2, 3, 4 }, [30031304] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, [30031305] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, [30031306] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, [30031307] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } } local srcAtkElement = CommonFun.GetUserAtkAttrByList(srcUser, params, skillParams.Damage) for buff, atkAttrs in pairs(buff2MissAtkAttr) do if targetUser:HasBuffID(buff) and CommonFun.isInArray(atkAttrs, srcAtkElement) and isCanBlock == true then if srcUser.isServerCall then targetUser:AddBuffCount(buff) end return 0, CommonFun.DamageType.Miss end end if targetUser:IsFly() and CommonFun.TableHasValue(NpcFeatures.Flight.ImmuneSkill, skillID) then return 0, CommonFun.DamageType.Miss end end if nil ~= forceDamageType then damageType = forceDamageType if CommonFun.DamageType.None == damageType or CommonFun.DamageType.Miss == damageType or CommonFun.DamageType.Block == damageType then return damage, damageType end elseif 0 == damage then return 0, CommonFun.DamageType.Miss elseif damage < 0 then damageType = CommonFun.DamageType.Treatment end - if CommonFun.DamageType.Normal == damageType or CommonFun.DamageType.Crit == damageType or CommonFun.DamageType.ErLianJi == damageType then local profressionID = srcUser:GetProfressionID() if 0 < profressionID then local randomRange = Table_Class[profressionID].DamRandom if nil ~= randomRange then damage = damage * CommonFun.RandomRange(randomRange[1], randomRange[2], srcUser:GetRandom()) end end end if (damageType == nil or damageType == CommonFun.DamageType.Normal or damageType == CommonFun.DamageType.Crit) and CommonFun.RollType.Attack == skillParams.RollType and srcUser:IsAttackSkill(params.skillIDAndLevel) and iscrit then damageType = CommonFun.DamageType.Crit local damageParam = skillParams.Damage if damageParam ~= nil and damageParam[1] ~= nil then damageParam = damageParam[1] end local raceparam = CommonFun.CalcRaceParam(srcUser, targetUser, params, damageParam, logger) local bodyparam = CommonFun.CalcBodyParam(srcUser, targetUser, params, damageParam, logger) local elementparam = CommonFun.CalcElementParam(srcUser, targetUser, params, damageParam, logger) local bossparam = CommonFun.CalcBossParam(srcUser, targetUser, params, damageParam, logger) local raceparam2 = CommonFun.CalcRaceParam2(srcUser, targetUser, params, damageParam, logger) local bodyparam2 = CommonFun.CalcBodyParam2(srcUser, targetUser, params, damageParam, logger) local elementparam2 = CommonFun.CalcElementParam2(srcUser, targetUser, params, damageParam, logger) local bossparam2 = CommonFun.CalcBossParam2(srcUser, targetUser, params, damageParam, logger) local Str1 = srcUser:GetProperty("Str") local Num1 = srcUser:GetRunePoint(62080) local Num2 = srcUser:GetRunePoint(51013) local Num3 = srcUser:GetRunePoint(120010) local Numlianj = srcUser:GetRunePoint(130110) local RuneDamage = Num1 * 0.01 + Num2 * 0.05 + Num3 * 0.05 + Numlianj * 0.03 + 1 local Str = Str1 * RuneDamage local Dex = srcUser:GetProperty("Dex") local Luk = srcUser:GetProperty("Luk") local Int = srcUser:GetProperty("Int") local Agi = srcUser:GetProperty("Agi") local DamIncrease = srcUser:GetProperty("DamIncrease") local MDamIncrease = CommonFun.calcMDamIncrease(srcUser, targetUser) local race2 = targetUser.race if srcUser:HasBuffID(49320) and srcUser:HasBuffID(49325) then elseif srcUser:HasBuffID(49320) then race2 = 2 end local DefAttr2 = targetUser:GetProperty("DefAttr") local skillLevel = srcUser:GetLernedSkillLevel(29) local skillLevel1 = srcUser:GetLernedSkillLevel(1701) local skillLevel2 = 0 if race2 == 3 or DefAttr2 == 9 or DefAttr2 == 7 or srcUser:HasBuffID(20510031) and srcUser:HasBuffID(22000520) or DefAttr2 == 7 and srcUser:HasBuffID(22000520) then skillLevel2 = srcUser:GetLernedSkillLevel(234) if 10 < skillLevel2 then skillLevel2 = 10 end end local SkillRealDamage1 = 0 if skillLevel <= 5 then SkillRealDamage1 = skillLevel * 20 elseif 5 < skillLevel and skillLevel <= 10 then SkillRealDamage1 = 100 + math.floor(Agi / 5) * ((skillLevel - 5) * 0.5 + 0.5) else SkillRealDamage1 = 100 + (skillLevel - 10) * 20 + math.floor(Agi / 5) * 3 + Luk * 2 end local Numliehuo = srcUser:GetRunePoint(203003) local liehuo = 1 + Numliehuo * 0.05 local SkillRealDamage2 = 0 if skillLevel1 <= 10 then SkillRealDamage2 = skillLevel1 * 20 * liehuo else SkillRealDamage2 = 200 * liehuo end local SkillRealDamage = SkillRealDamage1 + SkillRealDamage2 local BaseAtk = 0 local BaseMAtk = Int * 2 + math.floor(Int * Int / 100) local BaseAtk1 = Str1 * 2 + math.floor(Str1 * Str1 / 100) + math.floor(Dex / 5) + math.floor(Luk / 5) local BaseAtk2 = Dex * 2 + math.floor(Dex * Dex / 100) + math.floor(Str / 5) + math.floor(Luk / 5) local BaseAtk3 = Str * 2 + math.floor(Str * Str / 100) + math.floor(Dex / 5) + math.floor(Luk / 5) local NoramlAtkAdd = 5 * Str local profressionID = srcUser:GetProfressionID() local WeaponType = srcUser:GetEquipedWeaponType() if (profressionID == 92 or profressionID == 93 or profressionID == 94 or profressionID == 95) and WeaponType == 210 then BaseAtk1 = BaseAtk2 BaseAtk3 = BaseAtk2 NoramlAtkAdd = 3 * Dex end for k, v in pairs(GameConfig.Atkcalculate) do if v == profressionID then BaseAtk1 = BaseAtk2 BaseAtk3 = BaseAtk2 NoramlAtkAdd = 3 * Dex end end local Num4 = srcUser:GetRunePoint(52013) local Num5 = srcUser:GetRunePoint(52014) local Num6 = srcUser:GetRunePoint(52015) local Num7 = srcUser:GetRunePoint(52016) local Num8 = srcUser:GetRunePoint(52017) local Num9 = srcUser:GetRunePoint(52018) local RuneDamage1 = (Num4 + Num5 + Num6 + Num7 + Num8 + Num9) * 0.07 local Atk1 = srcUser:GetProperty("Atk") local MAtk = srcUser:GetProperty("MAtk") local MAtkPer = srcUser:GetProperty("MAtkPer") local MonkAtk = 0 if srcUser:HasBuffID(100510) then MonkAtk = 5 * Int end local AtkSpdAdd = 0 local skilllv_SpdAdd = srcUser:GetLernedSkillLevel(22) if srcUser:HasBuffID(80082) and 10 < skilllv_SpdAdd then AtkSpdAdd = (skilllv_SpdAdd - 10) * 120 end local skilllv_mfzr = srcUser:GetLernedSkillLevel(3002) local Opening = srcUser:GetSkillOptByOption(17) local MagicAtk = 0 if 0 < skilllv_mfzr and Opening == 0 then local Sp = srcUser:GetProperty("Sp") MagicAtk = Sp * skilllv_mfzr * 0.2 end local skilllv_element = srcUser:GetLernedSkillLevel(127) local atk_element = 0 if 10 < skilllv_element then atk_element = Dex * ((skilllv_element - 10) * 0.5) end local NormalAtk = srcUser:GetProperty("NormalAtk") NormalAtk = NormalAtk + NoramlAtkAdd local Atk = Atk1 + RuneDamage1 * MAtk * (1 + MAtkPer) + MonkAtk + AtkSpdAdd + MagicAtk + atk_element + NormalAtk local Num10 = srcUser:GetRunePoint(11022) local Num11 = srcUser:GetRunePoint(203024) local Num12 = srcUser:GetRunePoint(11024) local Num13 = srcUser:GetRunePoint(12004) local Num14 = srcUser:GetRunePoint(12011) local Num16 = srcUser:GetRunePoint(70010) local RuneDamage2 = (Num10 + Num11 + Num12 + Num13 + Num14 + Num16) * 0.03 local Num15 = srcUser:GetRunePoint(120020) local RuneDamage3 = Num15 * 0.03 local AtkPer1 = srcUser:GetProperty("AtkPer") local AtkPer = AtkPer1 + RuneDamage2 + RuneDamage3 local MAtkPer = srcUser:GetProperty("MAtkPer") local Refine = srcUser:GetProperty("Refine") local MRefine = srcUser:GetProperty("MRefine") local Vit2 = targetUser:GetProperty("Vit") local VitPer2 = targetUser:GetProperty("VitPer") local DamReduc2 = CommonFun.calcDamReDuc(srcUser, targetUser) local RefineDamReduc = targetUser:GetProperty("RefineDamReduc") local RealDamage = targetUser:GetProperty("RealDamage") if targetUser:HasBuffID(96050) and 1 <= RealDamage then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) if skillID == 359 then RealDamage = RealDamage - 1 end end local AttrEffect = srcUser:GetProperty("AttrEffect") local bits = CommonFun.getBits(AttrEffect) local AttrEffect2 = targetUser:GetProperty("AttrEffect") local bits2 = CommonFun.getBits(AttrEffect2) local StateEffect = targetUser:GetProperty("StateEffect") local bits3 = CommonFun.getBits(StateEffect) local Weapon = srcUser:GetEquipedID(7) if skillParams.RollType == 1 then if bits[CommonFun.AttrEffect.NextAttackIncrease] == 1 then damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * 2 * (1 + RealDamage) * (1 + skillLevel2 * 0.05) if damage <= 0 then damage = 0 end elseif bits2[CommonFun.AttrEffect.NormalSkillDam] == 1 and (profressionID == 42 or profressionID == 43 or profressionID == 44 or profressionID == 45 or profressionID == 102 or profressionID == 103 or profressionID == 104 or profressionID == 105 or profressionID == 112 or profressionID == 113 or profressionID == 114 or profressionID == 115) then local targetid = targetUser:GetGuid() local distance = srcUser:GetDistance(targetid) local skilllv_1 = srcUser:GetLernedSkillLevel(133) local DisDam = 1 if 10 < skilllv_1 then DisDam = 1 + distance / 7.5 * (skilllv_1 - 10) * 0.1 if srcUser:HasBuffID(131080) or targetUser:IsBuffFrom(1007000, srcUser:GetGuid()) and srcUser:HasBuffID(1007050) then DisDam = 1 + (skilllv_1 - 10) * 0.1 end DisDam = math.min(DisDam, 2) end damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * 1.3 * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * DisDam if damage <= 0 then damage = 0 end elseif bits3[CommonFun.StateEffect.Dizzy] == 1 and (Weapon == 40322 or Weapon == 140322) then damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * 1.5 if damage <= 0 then damage = 0 end elseif skillID == 300 or skillID == 469 or skillID == 1397 or skillID == 1446 or skillID == 252 or skillID == 253 then local targetid = targetUser:GetGuid() local distance = srcUser:GetDistance(targetid) local skilllv_1 = srcUser:GetLernedSkillLevel(133) local skilllv_2 = srcUser:GetLernedSkillLevel(478) local DisDam = 1 if 10 < skilllv_1 then DisDam = 1 + distance / 7.5 * (skilllv_1 - 10) * 0.1 if srcUser:HasBuffID(131080) or targetUser:IsBuffFrom(1007000, srcUser:GetGuid()) and srcUser:HasBuffID(1007050) then DisDam = 1 + (skilllv_1 - 10) * 0.1 end DisDam = math.min(DisDam, 2) elseif 10 < skilllv_2 then DisDam = 1 + distance / 7.5 * (skilllv_2 - 10) * 0.1 DisDam = math.min(DisDam, 2) end local fromid = targetUser:GetBuffFromID(116470) local guid = srcUser:GetGuid() local BUffDam = 1 local skilllv_biaoji = srcUser:GetLernedSkillLevel(1147) local GemBiaoji = srcUser:GetGemValue(91121) local Numxp = srcUser:GetRunePoint(94080) if fromid == guid then BUffDam = 1 + skilllv_biaoji * 0.02 + Numxp * 0.02 + GemBiaoji / 100000 end local SpAtk = 0 if srcUser:HasBuffID(131096) then local Sp = srcUser:GetProperty("Sp") SpAtk = Sp end damage = ((((Atk - BaseAtk1) * (1 + AtkPer) + SpAtk) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * DisDam * BUffDam if damage <= 0 then damage = 0 end elseif skillID == 470 then local Enemy = 1 local skilllv_zy = srcUser:GetLernedSkillLevel(1145) if 0 < skilllv_zy and 1 >= srcUser:GetRangeEnemy(3) then Enemy = 1 + skilllv_zy * 0.03 end damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * Enemy if damage <= 0 then damage = 0 end elseif skillID == 5614 then local skilllv_ls = srcUser:GetLernedSkillLevel(5610) local skilllv_ls2 = srcUser:GetLernedSkillLevel(5613) local DefReduc = CommonFun.CalcDef(srcUser, targetUser) damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * DefReduc * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1.4 + skilllv_ls * 0.4) * (0.05 * skilllv_ls2 + 0.25) if damage <= 0 then damage = 0 end else damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) if damage <= 0 then damage = 0 end end elseif bits[CommonFun.AttrEffect.NextAttackIncrease] == 1 then damage = ((MAtk - BaseMAtk) * (1 + MAtkPer) + BaseMAtk + MRefine) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 + MDamIncrease) * 2 * (1 + RealDamage) elseif bits2[CommonFun.AttrEffect.NormalSkillDam] == 1 and (profressionID == 42 or profressionID == 43 or profressionID == 44 or profressionID == 45 or profressionID == 102 or profressionID == 103 or profressionID == 104 or profressionID == 105 or profressionID == 112 or profressionID == 113 or profressionID == 114 or profressionID == 115) then local targetid = targetUser:GetGuid() local distance = srcUser:GetDistance(targetid) local skilllv_1 = srcUser:GetLernedSkillLevel(133) local DisDam = 1 if 10 < skilllv_1 then DisDam = 1 + distance / 7.5 * (skilllv_1 - 10) * 0.1 if srcUser:HasBuffID(131080) or targetUser:IsBuffFrom(1007000, srcUser:GetGuid()) and srcUser:HasBuffID(1007050) then DisDam = 1 + (skilllv_1 - 10) * 0.1 end DisDam = math.min(DisDam, 2) end damage = ((MAtk - BaseMAtk) * (1 + MAtkPer) + BaseMAtk + MRefine) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 + MDamIncrease) * 1.3 * (1 + RealDamage) * DisDam else damage = ((MAtk - BaseMAtk) * (1 + MAtkPer) + BaseMAtk + MRefine) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 + MDamIncrease) * (1 + RealDamage) end if targetUser:GetNpcID() == 30028 then damage = 1 end local elementDam = CommonFun.DoCalcElementDam(srcUser, targetUser, params, damageParam) local stateDam = CommonFun.DoCalcStateEffectDam(srcUser, targetUser) local fromid = targetUser:GetBuffFromID(45000120) local guid = srcUser:GetGuid() local BUffDam = 1 if fromid == guid then BUffDam = 1.3 end local RefineLv = srcUser:GetEquipedRefineLv(7) local HolyEquip = 1 if (Weapon == 40319 or Weapon == 140319) and (profressionID == 11 or profressionID == 12 or profressionID == 13 or profressionID == 14 or profressionID == 15 or profressionID == 203 or profressionID == 204 or profressionID == 205 or profressionID == 72 or profressionID == 73 or profressionID == 74 or profressionID == 75 or profressionID == 605 or profressionID == 665) then HolyEquip = 1 + 0.05 * RefineLv end if (Weapon == 40360 or Weapon == 140360) and (profressionID == 11 or profressionID == 12 or profressionID == 13 or profressionID == 14 or profressionID == 15 or profressionID == 203 or profressionID == 204 or profressionID == 205 or profressionID == 72 or profressionID == 73 or profressionID == 74 or profressionID == 75 or profressionID == 605 or profressionID == 665) then HolyEquip = 1 + 0.05 * RefineLv end local zhufu = 1 if srcUser:HasBuffID(129040) or srcUser:HasBuffID(129041) then local skilllv_zf = srcUser:GetLernedSkillLevel(3610) local GemValue = srcUser:GetGemValue(51161) zhufu = 1 + skilllv_zf * 0.02 + GemValue / 100000 end local hualiBuff = srcUser:HasBuffID(24441) local huali = 1 if hualiBuff == true and srcUser:HasBuffID(90001903) then huali = 1.25 elseif hualiBuff == true then huali = 1.1 end local Ninja = 1 local NinjaDamPer = 1 if skillID == 2010 or skillID == 2011 or skillID == 2012 or skillID == 2013 then local Agi = srcUser:GetProperty("Agi") local AgiRune = srcUser:GetRunePoint(163012) local AgiDam = 1 + math.floor(Agi / 10) * AgiRune * 0.004 local Famous = 1 local RefineLv7 = srcUser:GetEquipedRefineLv(7) if srcUser:HasBuffID(44360) then Famous = Famous * (RefineLv7 * 0.01 + 1) end if srcUser:HasBuffID(44370) then Famous = Famous * (RefineLv7 * 0.03 + 1) end Ninja = AgiDam * Famous end if skillID == 2011 then NinjaDamPer = 1.5 end if skillID == 2012 then NinjaDamPer = 3 end if skillID == 2013 then local Rune = srcUser:GetRunePoint(163021) NinjaDamPer = 6 * (1 + Rune * 0.05) end if skillID == 2200 and WeaponType == 320 then damage = damage * 2 end if skillID == 300 or skillID == 113 or skillID == 252 then local guid = srcUser:GetGuid() local Debuff_Layer_1 = targetUser:GetBuffLayerByIDAndFromID(96082, guid) local Debuff_Layer_2 = targetUser:GetBuffLayerByIDAndFromID(96083, guid) local sw_dam = math.max(Debuff_Layer_1, Debuff_Layer_2) * 0.06 + 1 damage = damage * sw_dam end if skillID == 300 or skillID == 113 or skillID == 252 then local bafeng = 1 local skilllv_1 = srcUser:GetLernedSkillLevel(5700) if targetUser:IsBuffFrom(1007000, srcUser:GetGuid()) then bafeng = 1 + skilllv_1 * 0.05 end damage = damage * bafeng end if skillID == 5204 then local skilllv_sishi = srcUser:GetLernedSkillLevel(5200) damage = damage * (1 + skilllv_sishi * 0.05) end if skillID == 173 then local skilllv_qihei = srcUser:GetLernedSkillLevel(194) if targetUser:GetBuffActive(95500) then damage = damage * (1 + 0.15 * skilllv_qihei) end end if skillID == 5904 then local skilllv_shengguang = srcUser:GetLernedSkillLevel(5900) damage = damage * (1 + 0.1 * skilllv_shengguang) end damage = damage * elementDam * stateDam * BUffDam * HolyEquip * zhufu * Ninja * NinjaDamPer * huali end local GetNpcID = targetUser:GetNpcID() local GetSelfID = srcUser:GetNpcID() if 0 < damage and GetNpcID == 30034 and srcUser:HasBuffID(121) then local Atk = srcUser:GetProperty("Atk") local MAtk = srcUser:GetProperty("MAtk") damage = damage + (Atk + MAtk) * 2.5 end if targetUser:HasBuffID(10740) and srcUser:HasBuffID(10741) == false then damage = 0.2 end local NormalRealDam = srcUser:GetProperty("NormalRealDam") local NormalMRealDam = srcUser:GetProperty("NormalMRealDam") local SkillRealDam = srcUser:GetProperty("SkillRealDam") local SkillMRealDam = srcUser:GetProperty("SkillMRealDam") local RefineDamReduc = targetUser:GetProperty("RefineDamReduc") local RefineMDamReduc = targetUser:GetProperty("RefineMDamReduc") local NormalAtkDam = srcUser:GetProperty("NormalAtkDam") local NormalAtkRes = targetUser:GetProperty("NormalAtkRes") local SkillDam = srcUser:GetProperty("SkillDam") local SkillRes = targetUser:GetProperty("SkillRes") if (skillID == 306 or skillID == 3303 or skillID == 819) and srcUser:HasBuffID(22000830) then SkillRes = math.max(SkillRes - 0.3, 0) end local ActuallySkiRes = SkillRes - SkillDam local ActuallyNorRes = NormalAtkRes - NormalAtkDam if maptype == 2 or maptype == 4 then ActuallySkiRes = ActuallySkiRes < -1 and -1 or 1 < ActuallySkiRes and 1 or ActuallySkiRes ActuallySkiRes = math.floor(ActuallySkiRes * 1000) / 1000 ActuallySkiRes = ActuallySkiRes + 0.4 * (1 - math.sin(ActuallySkiRes * 3.14 / 2)) ActuallyNorRes = ActuallyNorRes < -1 and -1 or 1 < ActuallyNorRes and 1 or ActuallyNorRes ActuallyNorRes = math.floor(ActuallyNorRes * 1000) / 1000 ActuallyNorRes = ActuallyNorRes + 0.4 * (1 - math.sin(ActuallyNorRes * 3.14 / 2)) end local NormalEnd = 1 - ActuallyNorRes local SkillEnd = 1 - ActuallySkiRes NormalEnd = math.max(NormalEnd, 0.15) SkillEnd = math.max(SkillEnd, 0.15) if skillID == 404 then SkillEnd = 1 end if skillID == 83040 or skillID == 83041 or skillID == 83042 or skillID == 83050 or skillID == 83051 then SkillEnd = 1 end if CommonFun.RollType.Magic == skillParams.RollType then if srcUser:IsAttackSkill(params.skillIDAndLevel) and 0 < damage then damage = (damage + NormalMRealDam * (1 - RefineMDamReduc)) * NormalEnd elseif not srcUser:IsAttackSkill(params.skillIDAndLevel) and 0 < damage then damage = (damage + SkillMRealDam * (1 - RefineMDamReduc)) * SkillEnd end end if CommonFun.RollType.Attack == skillParams.RollType then if srcUser:IsAttackSkill(params.skillIDAndLevel) and 0 < damage then damage = (damage + NormalRealDam * (1 - RefineDamReduc)) * NormalEnd elseif not srcUser:IsAttackSkill(params.skillIDAndLevel) and 0 < damage then damage = (damage + SkillRealDam * (1 - RefineDamReduc)) * SkillEnd end end if GetNpcID == 40021 or GetNpcID == 40023 then if srcUser:IsAttackSkill(params.skillIDAndLevel) == false and skillID ~= 151 or srcUser:InGvgZone() == false or srcUser:NoAttackMetal() == true then return 0, CommonFun.DamageType.Miss end local hl_maxhp = targetUser:GetProperty("MaxHp") if damage >= hl_maxhp * 1 / 300 then damage = hl_maxhp * 1 / 300 end end if GetNpcID == 40024 or GetNpcID == 40026 then if srcUser:IsAttackSkill(params.skillIDAndLevel) == false and skillID ~= 151 or srcUser:InGvgZone() == false or srcUser:NoAttackMetal() == true then return 0, CommonFun.DamageType.Miss end local hl_maxhp = targetUser:GetProperty("MaxHp") if damage >= hl_maxhp * 1 / 200 then damage = hl_maxhp * 1 / 200 end end if GetNpcID == 40022 or GetNpcID == 55000 then if srcUser:IsAttackSkill(params.skillIDAndLevel) == false and skillID ~= 151 then return 0, CommonFun.DamageType.Miss end local hl_maxhp = targetUser:GetProperty("MaxHp") if damage >= hl_maxhp * 1 / 30 then damage = hl_maxhp * 1 / 30 end end if srcUser:HasBuffID(166450) == true and srcUser:IsAttackSkill(params.skillIDAndLevel) == false and skillID ~= 151 then return 0, CommonFun.DamageType.Miss end if (CommonFun.DamageType.Normal == damageType or CommonFun.DamageType.Crit == damageType or CommonFun.DamageType.ErLianJi == damageType) and targetUser:DamageAlways1() then damageType = CommonFun.DamageType.Normal damage = 1 end if targetUser:HasBuffID(159620) and 0 < damage and isCanBlock == true then local targetid = targetUser:GetGuid() local distance = srcUser:GetDistance(targetid) if 5 <= distance then return 0, CommonFun.DamageType.None end end local Baxie = true if (skillID == 469 or skillID == 470 or skillID == 4228) and srcUser:HasBuffID(20910120) then Baxie = false end if skillID == 2227 or skillID == 2243 or skillID == 2251 then Baxie = false end if isCanBlock == false then Baxie = false end if bits2[CommonFun.AttrEffect.BaXieZhiZhen] == 1 and CommonFun.RollType.Attack == skillParams.RollType and 0 < damage and skillID ~= 411 and skillID ~= 306 and skillID ~= 3303 and skillID ~= 819 and Baxie == true then if targetUser.AddBuffDamage ~= nil then targetUser:AddBuffDamage(damage) end if srcUser.isServerCall then srcUser:SetMissStillBuff() end return 0, CommonFun.DamageType.Miss end if 0 < damage and (targetUser:GetNpcID() == 56941 or targetUser:GetNpcID() == 56942) and srcUser:GetNpcID() ~= 56941 and srcUser:GetNpcID() ~= 56942 then return 1, CommonFun.DamageType.Normal end if 0 < damage and targetUser:GetNpcID() == 300100 and srcUser:HasBuffID(180220) then damage = damage * 1.3 end if 0 < damage and srcUser:GetNpcID() == 300100 and targetUser:HasBuffID(180219) then damage = damage * 0.5 end if 0 < damage and targetUser:GetNpcID() == 300101 and srcUser:HasBuffID(180518) then damage = damage * 1.25 end if 0 < damage and srcUser:GetNpcID() == 300101 and targetUser:HasBuffID(180517) then damage = damage * 0.7 end if (targetUser:HasBuffID(121030) == true or targetUser:HasBuffID(55693) == true or targetUser:HasBuffID(90003955) == true or targetUser:HasBuffID(90005555) == true) and CommonFun.RollType.Magic == skillParams.RollType and 0 < damage and isCanBlock == true then return 0, CommonFun.DamageType.DefMagic end if (targetUser:HasBuffID(90003975) == true or targetUser:HasBuffID(90005405) == true) and CommonFun.RollType.Attack == skillParams.RollType and 0 < damage and isCanBlock == true then return 0, CommonFun.DamageType.DefPhysics end if srcUser:IsAttackSkill(params.skillIDAndLevel) == false and targetUser:HasBuffID(107330) and isCanBlock == true and 0 < damage then local Bufflv = targetUser:GetBuffLevel(107330) if CommonFun.IsInRate(Bufflv * 3, srcUser:GetRandom()) then return 0, CommonFun.DamageType.WeaponBlock end end local JGBH = 1 if (targetUser:HasBuffID(100660) == true or targetUser:HasBuffID(21430114) == true or targetUser:HasBuffID(1010230) == true) and 0 < damage then local GemValue = targetUser:GetProperty("JinGangRate") JGBH = 0.15 - GemValue local skilllv_ab = srcUser:GetLernedSkillLevel(306) if 5 < skilllv_ab and skillID == 306 or skillID == 3303 or skillID == 819 then JGBH = 1 end damage = math.floor(damage * JGBH) end local ZFZ = 1 if targetUser:HasBuffID(117105) == true and 0 < damage then local skilllv_zfz = targetUser:GetBuffLevel(117105) ZFZ = 1 - 0.15 * (skilllv_zfz - 5) damage = math.floor(damage * ZFZ) end if targetUser:HasBuffID(31790) and 0 < damage then damage = damage * 1.2 end local targetEnemyNum = targetUser:GetRangeEnemy(5) if (targetUser:HasBuffID(59240) or targetUser:HasBuffID(605710) or targetUser:HasBuffID(605720) or targetUser:HasBuffID(605730) or targetUser:HasBuffID(605740) or targetUser:HasBuffID(605750)) and 1 <= targetEnemyNum and 0 < damage then damage = damage * (1 - math.min(targetEnemyNum * 0.02, 0.1)) end if targetUser:HasBuffID(136240) then local MoonReduc = targetUser:GetProperty("MoonReduc") if targetUser:GetMoonMark(srcUser) then damage = damage * (1 - MoonReduc) end end if srcUser:HasBuffID(136581) ~= true and targetUser:HasBuffID(136580) and 0 < damage then local TreeReduc = targetUser:GetProperty("TreeReduc") damage = damage * (1 - TreeReduc) end if targetUser:HasBuffID(136600) or targetUser:HasBuffID(136522) and 0 < damage then local DragonReduc = targetUser:GetProperty("DragonReduc") damage = damage * (1 - DragonReduc) end if targetUser:HasBuffID(165542) and 0 < damage then damage = damage * 1.5 end if targetUser:HasBuffID(166580) and 0 < damage then damage = damage * 1.3 end if CommonFun.RollType.Attack == skillParams.RollType and targetUser:HasBuffID(10110) and 0 < damage then damage = damage * 0.01 end if targetUser:HasBuffID(90003554) and 0 < damage then local MaxHp = targetUser:GetProperty("MaxHp") local Hp = targetUser:GetProperty("Hp") if Hp / MaxHp >= 0.9 then damage = damage * 0.5 end end local targetTeamNum = targetUser:GetRangeTeammate(5) if targetUser:HasBuffID(29650) and 1 <= targetTeamNum then damage = damage * 0.97 elseif targetUser:HasBuffID(29651) and 1 <= targetTeamNum then damage = damage * 0.94 elseif targetUser:HasBuffID(29652) and 1 <= targetTeamNum then damage = damage * 0.85 end if targetUser:HasBuffID(135240) == true then local skilllv_sz = targetUser:GetBuffLevel(135240) damage = damage * (1 - 0.1 * skilllv_sz) end if targetUser:HasBuffID(135361) or targetUser:HasBuffID(135363) then local SoulNum = targetUser:GetProperty("Soul_Linker") damage = damage / math.max(1, SoulNum) end if targetUser:HasBuffID(30031100) and 0 < damage then local mateNum = targetUser:GetMapTeammateNum() local fentan = 1 if targetUser:HasBuffID(30031101) then fentan = 0.9 elseif targetUser:HasBuffID(30031102) then fentan = 0.75 elseif targetUser:HasBuffID(30031103) then fentan = 0.6 end damage = damage / math.max(1, mateNum) * fentan end local MaxHpsrcUser = srcUser:GetProperty("MaxHp") local MaxHptargetUser = targetUser:GetProperty("MaxHp") local MaxHp_hpper = MaxHptargetUser / MaxHpsrcUser if targetUser:HasBuffID(63180) and 0 < damage and 1 < MaxHp_hpper then damage = damage * 0.95 end local StateEffectGashapon = srcUser:GetProperty("StateEffect") local bits = CommonFun.getBits(StateEffectGashapon) if bits[CommonFun.StateEffect.Poison] == 1 and targetUser:HasBuffID(64350) and 0 < damage then damage = damage * 0.9 end if targetUser:HasBuffID(90003164) and targetUser:InMoveStatus() == true and 0 < damage then damage = damage * 0.7 end if targetUser:HasBuffID(90003984) and targetUser:InMoveStatus() == true and 0 < damage then damage = damage * 0.95 end if targetUser:HasBuffID(56510) then local guid = targetUser:GetGuid() local Debuff_Layer = srcUser:GetBuffLayerByIDAndFromID(96083, guid) damage = damage * (1 - 0.06 * Debuff_Layer) end if CommonFun.Shape.L == targetUser.shape and CommonFun.RollType.Magic == skillParams.RollType and 0 < damage then local largedam = 1 if srcUser:HasBuffID(71930) then largedam = largedam + 0.25 end local CardMedia = srcUser:GetEquipCardNum(7, 23265) largedam = largedam + CardMedia * 0.15 local CardLabore = srcUser:GetEquipCardNum(7, 23284) largedam = largedam + CardLabore * 0.1 if srcUser:HasBuffID(29440) then largedam = largedam + 0.04 elseif srcUser:HasBuffID(29441) then largedam = largedam + 0.08 elseif srcUser:HasBuffID(29442) then largedam = largedam + 0.2 end if srcUser:HasBuffID(118271) then local skilllv_ruihua = srcUser:GetLernedSkillLevel(1324) largedam = largedam + (skilllv_ruihua - 5) * 0.06 end damage = damage * largedam end if CommonFun.Shape.M == targetUser.shape and CommonFun.RollType.Magic == skillParams.RollType and 0 < damage then local mediumdam = 1 local RefineLv = srcUser:GetEquipedRefineLv(8) if srcUser:HasBuffID(72280) then mediumdam = mediumdam + 0.05 + RefineLv * 0.01 end if srcUser:HasBuffID(57300) then mediumdam = mediumdam + 0.02 + RefineLv * 0.01 end if srcUser:HasBuffID(57310) then mediumdam = mediumdam + 0.05 + RefineLv * 0.01 end damage = damage * mediumdam end if srcUser:HasBuffID(187550) then local mapid, maptype = srcUser:GetMapInfo() if mapid == 141 or mapid == 142 or mapid == 143 then local MaxHpMijing = targetUser:GetProperty("MaxHp") local layerMijing = srcUser:GetBuffLayer(187550) local HpMijing = targetUser:GetProperty("Hp") if HpMijing <= MaxHpMijing * 0.3 then damage = damage * (1 + layerMijing * 0.2) end end end local NoHurtRatio = targetUser:GetProperty("NoHurtRatio") if 0 < NoHurtRatio and NoHurtRatio ~= nil and 0 < damage then local Str_qy = targetUser:GetProperty("Str") local Vit_qy = targetUser:GetProperty("Vit") if damage <= (Str_qy + Vit_qy) * NoHurtRatio then if srcUser.isServerCall then targetUser:AddBuff(136732, targetUser:GetGuid()) end return 0, CommonFun.DamageType.Barrier end end if targetUser:HasBuffID(128120) and srcUser:HasBuffID(128123) == false and 0 < damage then local Ensemble = targetUser:GetProperty("Ensemble") damage = damage * (1 - Ensemble % 1000 * 0.1) end if srcUser:HasBuffID(128120) and targetUser:HasBuffID(128123) == false and 0 < damage then local GemValue1 = srcUser:GetGemValue(102162) local GemValue2 = srcUser:GetGemValue(112162) damage = damage * (1 + GemValue1 / 100000 + GemValue2 / 100000) end if targetUser:HasBuffID(131530) then local skill_lv = targetUser:GetBuffLevel(131530) local MaxHp = targetUser:GetProperty("MaxHp") local SeaJudgePer = targetUser:GetProperty("SeaJudgePer") local SeaReducPer = targetUser:GetProperty("SeaReducPer") if damage >= MaxHp * (0.2 - SeaJudgePer) then damage = damage * (1 - skill_lv * 0.03 - SeaReducPer) if srcUser.isServerCall then targetUser:AddBuff(131531, targetUser:GetGuid()) if targetUser:HasBuffID(22000090) then targetUser:AddBuff(131502, srcUser:GetGuid()) targetUser:AddBuff(131503, srcUser:GetGuid()) end end end end local WeaponType = targetUser:GetEquipedWeaponType() local WeaponType2 = srcUser:GetEquipedWeaponType() local Baw = targetUser:GetProperty("BaWangRate") if WeaponType == 250 and 0 < damage then damage = damage * (1 - Baw) end local anxiang = 1 if targetUser:HasBuffID(1008010) and (WeaponType2 == 190 or WeaponType2 == 210 or WeaponType2 == 260 or WeaponType2 == 270 or WeaponType2 == 310 or WeaponType2 == 320) and WeaponType == 210 and 0 < damage then local skill_anxiang = targetUser:GetBuffLevel(1008010) damage = damage * (1 - skill_anxiang * 0.06) end if targetUser:HasBuffID(119092) or 1 <= targetUser:GetBuffLayer(119097) then local rain_num = targetUser:GetBuffLayer(119092) + targetUser:GetBuffLayer(119097) local skill_meisheng = srcUser:GetLernedSkillLevel(5503) local skill_meisheng1 = srcUser:GetLernedSkillLevel(5553) if 1 <= skill_meisheng or 1 <= skill_meisheng1 then damage = damage * (1 + 0.01 * (skill_meisheng + skill_meisheng1) * rain_num) end end local targetid = targetUser:GetGuid() local distance = srcUser:GetDistance(targetid) if CommonFun.LaunchType.LongAttack == skillParams.Launch_Type and (targetUser:HasBuffID(115004) or targetUser:HasBuffID(115080)) and 2 <= distance then local BuffNum = targetUser:GetBuffLevel(115080) if BuffNum == 0 then BuffNum = targetUser:GetBuffLevel(115004) end damage = math.floor(damage * (1 - (0.15 * BuffNum - 0.05))) end if targetUser:HasBuffID(1010100) and 3 < distance then local lianxugongji = targetUser:GetBuffLevel(1010100) damage = damage * (1 - lianxugongji * 0.06) end if targetUser:HasBuffID(137840) and 5 < distance then local Bufflv = targetUser:GetBuffLevel(137840) damage = damage * (1 - Bufflv * 0.08) end if bits3[CommonFun.AttrEffect2.MDamageTo1] == 1 and CommonFun.RollType.Magic == skillParams.RollType then return 1, CommonFun.DamageType.Normal end if bits3[CommonFun.AttrEffect2.DamageTo1] == 1 and CommonFun.RollType.Attack == skillParams.RollType then return 1, CommonFun.DamageType.Normal end local RaidType = srcUser:GetRaidType() if RaidType == 32 then local ball66 = 1 if srcUser:HasBuffID(210010) and targetUser:HasBuffID(107340) then ball66 = 0.9 elseif srcUser:HasBuffID(210010) and targetUser:HasBuffID(107341) then ball66 = 0.8 elseif srcUser:HasBuffID(210010) and targetUser:HasBuffID(107342) then ball66 = 0.7 elseif srcUser:HasBuffID(210010) and targetUser:HasBuffID(107343) then ball66 = 0.6 end if 0 < damage then damage = damage * ball66 end end if RaidType == 44 then local ball66 = 1 if srcUser:HasBuffID(210200) and targetUser:HasBuffID(107340) then ball66 = 0.96 elseif srcUser:HasBuffID(210200) and targetUser:HasBuffID(107341) then ball66 = 0.92 elseif srcUser:HasBuffID(210200) and targetUser:HasBuffID(107342) then ball66 = 0.88 elseif srcUser:HasBuffID(210200) and targetUser:HasBuffID(107343) then ball66 = 0.84 end if 0 < damage then damage = damage * ball66 end end if RaidType == 50 then local CarRealDam = srcUser:GetProperty("CarRealDam") local CarRealDamPer = srcUser:GetProperty("CarRealDamPer") local TwlPlayerReduc = targetUser:GetProperty("TwlPlayerReduc") local TwlMonsterReduc = targetUser:GetProperty("TwlMonsterReduc") local TwlMonsterDam = srcUser:GetProperty("TwlMonsterDam") local MaxHp = targetUser:GetProperty("MaxHp") if GetSelfID == 0 and 0 < damage then damage = damage * (1 - TwlPlayerReduc) end if GetSelfID ~= 0 and srcUser:HasBuffID(151028) == false and 0 < damage then damage = damage * (1 - TwlMonsterReduc) end if GetSelfID == 0 and GetNpcID ~= 0 and targetUser:HasBuffID(151028) == false and 0 < damage then damage = damage * (1 + TwlMonsterDam) elseif GetSelfID ~= 0 and GetNpcID ~= 0 and targetUser:HasBuffID(151028) == false and targetUser:HasBuffID(160000) == true and 0 < damage then damage = damage * (1 + TwlMonsterDam / 3) elseif GetSelfID ~= 0 and GetNpcID ~= 0 and targetUser:HasBuffID(151028) == false and targetUser:HasBuffID(160000) == false and 0 < damage then damage = damage * (1 + TwlMonsterDam) end if srcUser:HasBuffID(151028) and GetNpcID == 0 and targetUser:HasBuffID(151200) == false then damage = damage + 0.1 * MaxHp elseif not srcUser:HasBuffID(151028) or GetNpcID ~= 0 or targetUser:HasBuffID(151200) then end if targetUser:HasBuffID(151028) then if srcUser:IsAttackSkill(params.skillIDAndLevel) == false and 0 < damage then return 0, CommonFun.DamageType.Miss elseif srcUser:IsAttackSkill(params.skillIDAndLevel) == false and damage < 0 then return 0, CommonFun.DamageType.None else damage = math.min(damage, MaxHp * 0.003) + CarRealDam * (1 + CarRealDamPer) end end local Master = srcUser:GetMasterUser() if targetUser:HasBuffID(151028) and srcUser:HasBuffID(151231) == false and (GetSelfID == 0 or Master ~= nil) and srcUser:HasBuffID(151200) == false then damage = 0 elseif not targetUser:HasBuffID(151028) or srcUser:HasBuffID(151200) then end end local FinalDam = CommonFun.calcFinalDam(srcUser, targetUser, params, logger) local MonsterFinalDam = CommonFun.calcMonsterFinalDam(srcUser, targetUser, params, logger) if 0 < damage then local ResultDamInc = srcUser:GetProperty("ResultDamInc") local ResultDamRes = targetUser:GetProperty("ResultDamRes") local BossRealDam = srcUser:GetProperty("BossRealDam") local BossRealReduc = targetUser:GetProperty("BossRealReduc") if targetUser.boss == false then BossRealDam = 0 end local Result = 1 + ResultDamInc - ResultDamRes Result = math.max(Result, 0.1) local BossResult = 1 + BossRealDam - BossRealReduc BossResult = math.max(BossResult, 0.01) damage = damage * FinalDam * MonsterFinalDam * Result * BossResult end if 0 < damage and (GetNpcID == 81000 or GetNpcID == 81001 or GetNpcID == 81002 or GetNpcID == 81003 or GetNpcID == 81004 or GetNpcID == 81005) then damage = CommonFun.calcATMDam(srcUser, targetUser, params, logger) return damage, damageType end if 0 < damage and (GetNpcID == 250300 or GetNpcID == 250310 or GetNpcID == 250330 or GetNpcID == 260300 or GetNpcID == 260310 or GetNpcID == 260330 or GetNpcID == 270300 or GetNpcID == 270310 or GetNpcID == 270330) then damage = damage * CommonFun.calcBOSSFinalDam(srcUser, targetUser, params, logger) end if targetUser:HasBuffID(159530) and 0 < damage then local Limit_Dam = targetUser:GetProperty("MaxHp") if damage < Limit_Dam * 0.02 then damage = 0 end end if 0 < damage and GetNpcID == 280711 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 476 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280708 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 480 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280709 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 188 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280710 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1111 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280734 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1104 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280720 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2035 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280721 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2020 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280745 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2041 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280722 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2019 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280746 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2045 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280459 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2045 or skillID == 2019 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and (GetNpcID == 280735 or GetNpcID == 280732 or GetNpcID == 280733) then local college = 0.01 damage = math.floor(damage * college) end if 0 < damage and (GetNpcID == 280717 or GetNpcID == 280741) then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 172 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280449 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 172 or skillID == 143 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and (GetNpcID == 280718 or GetNpcID == 280742) then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 143 and srcUser:HasBuffID(117320) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280705 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1423 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280729 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1433 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and (GetNpcID == 280830 or GetNpcID == 280706) then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1373 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280730 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1384 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280723 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1247 or skillID == 1251 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280747 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 138 or skillID == 201 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280731 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 300 and (srcUser:HasBuffID(117410) or srcUser:HasBuffID(117411)) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280707 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 300 and srcUser:HasBuffID(90200) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280700 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 360 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280724 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 360 or skillID == 1180 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280701 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1164 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280725 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1165 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280702 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if (skillID == 3209 or skillID == 79 or skillID == 74 or skillID == 107 or skillID == 1312) and (srcUser:HasBuffID(118340) or srcUser:HasBuffID(118341) or srcUser:HasBuffID(118342) or srcUser:HasBuffID(118343) or srcUser:HasBuffID(118344)) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280726 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1305 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280703 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 21 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280727 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 21 or skillID == 1261 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280425 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 13 and (srcUser:HasBuffID(80110) or srcUser:HasBuffID(80113) or srcUser:HasBuffID(117630)) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280704 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 13 and (srcUser:HasBuffID(80110) or srcUser:HasBuffID(80113)) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280728 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 13 and srcUser:HasBuffID(117630) then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280713 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 448 or skillID == 402 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280737 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1122 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280443 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1625 or skillID == 1637 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280714 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1625 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280738 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1637 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280715 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1612 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280739 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1614 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280719 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1203 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280743 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 1208 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and (GetNpcID == 280489 or GetNpcID == 280490) then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2200 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280748 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2202 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280750 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2202 or skillID == 2224 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280749 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2227 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280751 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2227 or skillID == 2207 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280755 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2323 then college = 1 end damage = math.floor(damage * college) end if 0 < damage and GetNpcID == 280756 then local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) local college = 0.01 if skillID == 2323 or skillID == 2301 then college = 1 end damage = math.floor(damage * college) end if bits2[CommonFun.AttrEffect.InGodStatus] == 1 and 0 < damage then return 0, CommonFun.DamageType.Miss end if GetSelfID == 0 and (GetNpcID == 301200 or GetNpcID == 301201 or GetNpcID == 301202 or GetNpcID == 301203 or GetNpcID == 301204 or GetNpcID == 301205 or GetNpcID == 301206) then return 0, CommonFun.DamageType.Miss end if targetUser:HasBuffID(32290) and 0 < damage and targetUser:HasBuffID(135251) == false then local mapid, maptype = srcUser:GetMapInfo() local pvpRatio = 5 if maptype == 2 or maptype == 4 then pvpRatio = 20 end local Sp = targetUser:GetProperty("Sp") if Sp > damage / pvpRatio then damage = damage / pvpRatio return damage, CommonFun.DamageType.Normal_Sp elseif 0 < Sp and Sp < damage / pvpRatio then damage = damage - Sp * pvpRatio local Hp = targetUser:GetProperty("Hp") if damage >= Hp then return damage, damageType end if srcUser.isServerCall then srcUser:AddBuff(32291, targetUser:GetGuid()) end end end if srcUser:HasBuffID(154690) and srcUser:IsAttackSkill(params.skillIDAndLevel) == false and 0 < damage then local skilllv_luk = srcUser:GetBoKiSkillLv(4520) local skilllv_lukdam = srcUser:GetBoKiSkillLv(4521) local Rate = skilllv_luk * 3 if CommonFun.IsInRate(Rate, srcUser:GetRandom()) then damage = damage * (1.3 + skilllv_lukdam * 0.03) damageType = CommonFun.DamageType.Crit local skilllv_lukzs = srcUser:GetBoKiSkillLv(4522) if 0 < skilllv_lukzs and srcUser.isServerCall then srcUser:AddBuff(154340, targetUser:GetGuid()) end end end local TaichiSecretLandGemLv = targetUser:GetSecretLandGemLv(384009) if TaichiSecretLandGemLv ~= 0 and 0 < damage then local reduceRatio = TaichiSecretLandGemLv * 0.002 + math.max(TaichiSecretLandGemLv - 30, 0) * 0.001 + math.max(TaichiSecretLandGemLv - 60, 0) * 0.002 local loseValue = damage * reduceRatio damage = damage - loseValue if srcUser.isServerCall then targetUser:ChangeHpDuringTime(-loseValue, 3, srcUser:GetGuid()) end end local skilllv_1 = skillParams.id if (srcUser:HasBuffID(35600) or srcUser:HasBuffID(43230) or srcUser:HasBuffID(55170) or srcUser:HasBuffID(66730) or srcUser:HasBuffID(55890) or srcUser:HasBuffID(70450) or srcUser:HasBuffID(56700) or srcUser:HasBuffID(56730) or srcUser:HasBuffID(55710) or srcUser:HasBuffID(73550) or srcUser:HasBuffID(57700) or srcUser:HasBuffID(57170) or srcUser:HasBuffID(23200) or srcUser:HasBuffLayer(23200, EBUFFERLAYER_SHADOW) or srcUser:HasBuffID(602110) or srcUser:HasBuffID(602120) or srcUser:HasBuffID(602130) or srcUser:HasBuffID(602140) or srcUser:HasBuffID(602150) or srcUser:HasBuffID(59510) or srcUser:HasBuffID(602610) or srcUser:HasBuffID(602620) or srcUser:HasBuffID(602630) or srcUser:HasBuffID(602640) or srcUser:HasBuffID(602650) or srcUser:HasBuffID(602910) or srcUser:HasBuffID(602920) or srcUser:HasBuffID(602930) or srcUser:HasBuffID(602940) or srcUser:HasBuffID(602950)) and 0 < damage then local Luk = srcUser:GetProperty("Luk") local CriDamNum = 1.5 + math.floor(Luk / 6) / 100 if srcUser:HasBuffID(81002780) then CriDamNum = CriDamNum + math.floor(Luk / 6) / 1000 end local CriDamPer = srcUser:GetProperty("CriDamPer") if srcUser:HasBuffID(81005110) then CriDamNum = CriDamNum + math.floor(CriDamPer * 100 / 20) / 100 end local Ring1 = srcUser:GetEquipedID(5) local RefineLv1 = srcUser:GetEquipedRefineLv(5) local Ring2 = srcUser:GetEquipedID(6) local RefineLv2 = srcUser:GetEquipedRefineLv(6) local RefineLv7 = srcUser:GetEquipedRefineLv(7) local CriNum1 = 0 if srcUser:HasBuffID(35600) then CriNum1 = 20 end local a = 0 local b = 0 if (Ring1 == 44076 or Ring1 == 144076) and RefineLv1 < 8 then a = 3 elseif (Ring1 == 44076 or Ring1 == 144076) and 8 <= RefineLv1 and RefineLv1 < 12 then a = 6 elseif (Ring1 == 44076 or Ring1 == 144076) and RefineLv1 >= 12 then a = 10 end if (Ring2 == 44076 or Ring2 == 144076) and RefineLv2 < 8 then b = 3 elseif (Ring2 == 44076 or Ring2 == 144076) and 8 <= RefineLv2 and RefineLv2 < 12 then b = 6 elseif (Ring2 == 44076 or Ring2 == 144076) and RefineLv2 >= 12 then b = 10 end local aa = 0 local bb = 0 local equipRing5 = srcUser:getEquip(CommonFun.PackType.EPACKTYPE_EQUIP, CommonFun.EquipPos.EEQUIPPOS_ACCESSORY1) if equipRing5.id == 44166 or equipRing5.id == 144166 then if 0 <= equipRing5.refinelv and 8 > equipRing5.refinelv then aa = 3 elseif 8 <= equipRing5.refinelv and equipRing5.refinelv < 12 then aa = 6 elseif equipRing5.refinelv >= 12 then aa = 10 end end local equipRingSD5 = srcUser:getEquip(CommonFun.PackType.EPACKTYPE_SHADOWEQUIP, CommonFun.EquipPos.EEQUIPPOS_ACCESSORY1) if equipRingSD5.id == 44166 or equipRingSD5.id == 144166 then if 0 <= equipRingSD5.refinelv and 8 > equipRingSD5.refinelv then aa = 3 * equipRingSD5.quench_per / 100 elseif 8 <= equipRingSD5.refinelv and equipRingSD5.refinelv < 12 then aa = 6 * equipRingSD5.quench_per / 100 elseif equipRingSD5.refinelv >= 12 then aa = 10 * equipRingSD5.quench_per / 100 end end local equipRing6 = srcUser:getEquip(CommonFun.PackType.EPACKTYPE_EQUIP, CommonFun.EquipPos.EEQUIPPOS_ACCESSORY2) if equipRing6.id == 44166 or equipRing6.id == 144166 then if 0 <= equipRing6.refinelv and 8 > equipRing6.refinelv then bb = 3 elseif 8 <= equipRing6.refinelv and equipRing6.refinelv < 12 then bb = 6 elseif equipRing6.refinelv >= 12 then bb = 10 end end local equipRingSD6 = srcUser:getEquip(CommonFun.PackType.EPACKTYPE_SHADOWEQUIP, CommonFun.EquipPos.EEQUIPPOS_ACCESSORY2) if equipRingSD6.id == 44166 or equipRingSD6.id == 144166 then if 0 <= equipRingSD6.refinelv and 8 > equipRingSD6.refinelv then bb = 3 * equipRingSD6.quench_per / 100 elseif 8 <= equipRingSD6.refinelv and equipRingSD6.refinelv < 12 then bb = 6 * equipRingSD6.quench_per / 100 elseif equipRingSD6.refinelv >= 12 then bb = 10 * equipRingSD6.quench_per / 100 end end local CriNum2 = a + b + aa + bb local CardBK = srcUser:GetEquipCardNum(7, 20189) local CardBK1 = srcUser:GetEquipCardNum(7, 24113) local CardKL = srcUser:GetEquipCardNum(7, 23256) local CardConjuror = srcUser:GetEquipCardNum(2, 23252) local CardCamorra = srcUser:GetEquipCardNum(7, 23334) local Card23334 = 0 if 1 <= CardCamorra then Card23334 = srcUser:GetBuffLayer(602910) * 1 + srcUser:GetBuffLayer(602920) * 2 + srcUser:GetBuffLayer(602930) * 3 + srcUser:GetBuffLayer(602940) * 4 + srcUser:GetBuffLayer(602950) * 5 end local CardBE = srcUser:GetEquipCardNum(8, 23455) local Card23455 = 0 if 1 <= CardBE then Card23455 = srcUser:GetBuffLayer(602610) * 1 + srcUser:GetBuffLayer(602620) * 2 + srcUser:GetBuffLayer(602630) * 3 + srcUser:GetBuffLayer(602640) * 4 + srcUser:GetBuffLayer(602650) * 5 end local CriNum3 = CardBK * 15 + CardBK1 * 17.5 + CardKL * 10 + CardConjuror * 10 + CardCamorra * (5 + RefineLv7) + CardBE * 10 + Card23455 + Card23334 local CardNumH1 = srcUser:GetEquipCardNum(5, 23064) local CardNumH2 = srcUser:GetEquipCardNum(6, 23064) local Card23064 = 0 if 1 <= CardNumH1 + CardNumH2 then Card23064 = srcUser:GetBuffLayer(602110) * 1 + srcUser:GetBuffLayer(602120) * 2 + srcUser:GetBuffLayer(602130) * 3 + srcUser:GetBuffLayer(602140) * 4 + srcUser:GetBuffLayer(602150) * 5 end local CardNumB1 = srcUser:GetEquipCardNum(5, 23324) local CardNumB2 = srcUser:GetEquipCardNum(6, 23324) local CriNum5 = CardNumH1 * 10 + CardNumH2 * 10 + Card23064 + CardNumB1 * 8 + CardNumB2 * 8 local CriNum4 = 0 local RefineLv3 = srcUser:GetEquipedRefineLv(11) if srcUser:HasBuffID(66730) and 6 <= RefineLv3 then CriNum4 = 20 elseif srcUser:HasBuffID(66730) and RefineLv3 < 6 then CriNum4 = 10 end local CriNum6 = 0 local RefineLv10 = srcUser:GetEquipedRefineLv(10) if srcUser:HasBuffID(70450) then CriNum6 = 5 + RefineLv10 * 1 end local CriNum7 = 0 local RefineLv8 = srcUser:GetEquipedRefineLv(8) if srcUser:HasBuffID(73550) then CriNum7 = 10 + RefineLv8 * 1 end local CriNum = CriNum1 + CriNum2 + CriNum3 + CriNum4 + CriNum5 + CriNum6 + CriNum7 if CommonFun.RollType.Magic == skillParams.RollType and srcUser:IsAttackSkill(params.skillIDAndLevel) == false and 0 < damage and CommonFun.IsInRate(CriNum, srcUser:GetRandom()) and (mapid == 7200 or mapid == 7204 or mapid == 7505 or mapid == 7510 or mapid == 7515 or mapid == 7520 or mapid == 154 or srcUser:InDamReduceRaid() == true and srcUser:IsUserCamp() == true) then return math.min(damage * CriDamNum), CommonFun.DamageType.Crit elseif CommonFun.RollType.Magic == skillParams.RollType and srcUser:IsAttackSkill(params.skillIDAndLevel) == false and 0 < damage and CommonFun.IsInRate(CriNum, srcUser:GetRandom()) then return math.min(damage * CriDamNum, 2147483647), CommonFun.DamageType.Crit end end damage = math.floor(damage) local count = params.hitedCount local index = params.hitedIndex if skillParams.Logic_Param.spotter ~= nil and index ~= 1 then local spotter = srcUser:GetSpotter(params.skillIDAndLevel) + skillParams.Logic_Param.spotter return math.min(damage * spotter, 2147483647), damageType end if skillID == 252 and count == 1 and srcUser:HasBuffID(20410160) then local spotter = srcUser:GetSpotter(params.skillIDAndLevel) + skillParams.Logic_Param.spotter return math.min(damage * (1 + spotter * 0.3 * 2), 2147483647), damageType end if skillID == 253 and index == 1 then return 0, 0 end local mapid, maptype = srcUser:GetMapInfo() if damage >= 2147483647 and (mapid == 7200 or mapid == 7204 or mapid == 7505 or mapid == 7510 or mapid == 7515 or mapid == 7520 or mapid == 154 or srcUser:InDamReduceRaid() == true and srcUser:IsUserCamp() == true) then elseif damage >= 2147483647 then damage = 2147483647 end if skillParams.Logic == "SkillLockedTarget" and skillParams.Logic_Param.range == nil and srcUser:HasBuffID(311000) then local rate1 = srcUser:GetBuffLayer(311010) local rate2 = srcUser:GetBuffLayer(311200) * 10 local rate = rate1 if rate1 == 10 then rate = rate1 + rate2 end local baoshang = 2 if rate1 == 10 then baoshang = srcUser:GetBuffLayer(311100) * 0.2 + 2 end if CommonFun.IsInRate(rate, srcUser:GetRandom()) then damage = damage * baoshang damageType = CommonFun.DamageType.Crit if srcUser:HasBuffID(311300) and srcUser.isServerCall then srcUser:AddBuff(311301, srcUser:GetGuid()) end if srcUser:HasBuffID(311400) and srcUser.isServerCall then srcUser:AddBuff(311401, targetUser:GetGuid()) end end end return damage, damageType end