Formula Source
function CommonFun.CalcMDef(srcUser, targetUser, params, damageParam) local MDef2 = targetUser:GetProperty("MDef") local Int2 = targetUser:GetProperty("Int") local RealMDef = MDef2 - Int2 if MDef2 <= 0 then MDef2 = 0 end if RealMDef <= 0 then RealMDef = 0 end local IgnoreMDef = srcUser:GetProperty("IgnoreMDef") local Master = CommonFun.getNpcMasterUser(srcUser) if Master ~= nil and (srcUser:GetNpcID() == 580010 or srcUser:GetNpcID() == 580020 or srcUser:GetNpcID() == 580030 or srcUser:GetNpcID() == 580040 or srcUser:GetNpcID() == 580600) then IgnoreMDef = Master:GetProperty("IgnoreMDef") end local MDefPer2 = targetUser:GetProperty("MDefPer") local Card2 = srcUser:GetEquipCardNum(7, 24668) if (targetUser.boss or targetUser.mini) and 0 < Card2 and srcUser:HasBuffID(81002120) then IgnoreMDef = IgnoreMDef + Card2 * 0.25 + 0.05 elseif (targetUser.boss or targetUser.mini) and 0 < Card2 then IgnoreMDef = IgnoreMDef + Card2 * 0.25 end if (targetUser.boss or targetUser.mini) and srcUser:HasBuffID(57710) then local RefineLv2 = srcUser:GetEquipedRefineLv(2) IgnoreMDef = IgnoreMDef + RefineLv2 * 0.01 end if targetUser:GetBuffActive(137321) then IgnoreMDef = 0 end if params ~= nil then local skilllv = srcUser:GetLernedSkillLevel(5011) if 0 < skilllv then local element = CommonFun.GetUserAtkAttr(srcUser, params, damageParam) if element == 4 then IgnoreMDef = IgnoreMDef + skilllv * 0.2 end end end local pvpReduce = 0 local mapid, maptype = srcUser:GetMapInfo() if (maptype == 2 or maptype == 4) and targetUser:GetNpcID() ~= 40022 then MDefPer2 = MDefPer2 < -1 and -1 or 1 < MDefPer2 and 1 or MDefPer2 MDefPer2 = math.floor(MDefPer2 * 1000) / 1000 MDefPer2 = MDefPer2 + 0.5 * (1 - math.sin(MDefPer2 * 3.14 / 2)) local Master = targetUser:GetMasterUser() if targetUser:GetNpcID() == 0 or Master ~= nil then pvpReduce = 0.2 end end local MDefFinal = RealMDef * (1 + MDefPer2 - IgnoreMDef + pvpReduce) + Int2 * (1 + pvpReduce * 5) if MDefFinal < 0 then MDefFinal = 0 end local div = 1000 + MDefFinal * 10 div = div ~= 0 and div or 1 local MDefReduc1 = (1000 + MDefFinal) / div local MAtk = srcUser:GetProperty("MAtk") local MAtkPer = srcUser:GetProperty("MAtkPer") local MAtkFinal = MAtk * (1 + MAtkPer) local MDefReduc2 = 1 / (1 + 13 * MDefFinal / MAtkFinal) local MDefReduc = math.max(MDefReduc1, MDefReduc2) return MDefReduc end
No formula links
Changes: 20251127_update vs 20251105_standard_instalation
-function CommonFun.CalcMDef(srcUser, targetUser) +function CommonFun.CalcMDef(srcUser, targetUser, params, damageParam) local MDef2 = targetUser:GetProperty("MDef") local Int2 = targetUser:GetProperty("Int") local RealMDef = MDef2 - Int2 if MDef2 <= 0 then MDef2 = 0 end if RealMDef <= 0 then RealMDef = 0 end local IgnoreMDef = srcUser:GetProperty("IgnoreMDef") local Master = CommonFun.getNpcMasterUser(srcUser) if Master ~= nil and (srcUser:GetNpcID() == 580010 or srcUser:GetNpcID() == 580020 or srcUser:GetNpcID() == 580030 or srcUser:GetNpcID() == 580040 or srcUser:GetNpcID() == 580600) then IgnoreMDef = Master:GetProperty("IgnoreMDef") end local MDefPer2 = targetUser:GetProperty("MDefPer") local Card2 = srcUser:GetEquipCardNum(7, 24668) if (targetUser.boss or targetUser.mini) and 0 < Card2 and srcUser:HasBuffID(81002120) then IgnoreMDef = IgnoreMDef + Card2 * 0.25 + 0.05 elseif (targetUser.boss or targetUser.mini) and 0 < Card2 then IgnoreMDef = IgnoreMDef + Card2 * 0.25 end if (targetUser.boss or targetUser.mini) and srcUser:HasBuffID(57710) then local RefineLv2 = srcUser:GetEquipedRefineLv(2) IgnoreMDef = IgnoreMDef + RefineLv2 * 0.01 end if targetUser:GetBuffActive(137321) then IgnoreMDef = 0 end + if params ~= nil then local skilllv = srcUser:GetLernedSkillLevel(5011) if 0 < skilllv then local element = CommonFun.GetUserAtkAttr(srcUser, params, damageParam) if element == 4 then IgnoreMDef = IgnoreMDef + skilllv * 0.2 end end end local pvpReduce = 0 local mapid, maptype = srcUser:GetMapInfo() if (maptype == 2 or maptype == 4) and targetUser:GetNpcID() ~= 40022 then MDefPer2 = MDefPer2 < -1 and -1 or 1 < MDefPer2 and 1 or MDefPer2 MDefPer2 = math.floor(MDefPer2 * 1000) / 1000 MDefPer2 = MDefPer2 + 0.5 * (1 - math.sin(MDefPer2 * 3.14 / 2)) local Master = targetUser:GetMasterUser() if targetUser:GetNpcID() == 0 or Master ~= nil then pvpReduce = 0.2 end end local MDefFinal = RealMDef * (1 + MDefPer2 - IgnoreMDef + pvpReduce) + Int2 * (1 + pvpReduce * 5) if MDefFinal < 0 then MDefFinal = 0 end local div = 1000 + MDefFinal * 10 div = div ~= 0 and div or 1 local MDefReduc1 = (1000 + MDefFinal) / div local MAtk = srcUser:GetProperty("MAtk") local MAtkPer = srcUser:GetProperty("MAtkPer") local MAtkFinal = MAtk * (1 + MAtkPer) local MDefReduc2 = 1 / (1 + 13 * MDefFinal / MAtkFinal) local MDefReduc = math.max(MDefReduc1, MDefReduc2) return MDefReduc end