CommonFun

CommonFun.CalcMDef

Dataset · 20251127_update

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

Version History

Loading dependencies...
Loading usage...