HP Absorb
Lvl: 1 Attack Magic CD: 2 sec Skill Delay: 1.5 sec SP: 100 Range: 5 Cast Time: 3 Fixed Cast Time: 0.5

Deals Neutral M. DMG equal to 5% of an enemy's current HP and absorbs 30% of the damage dealt to heal the user. When it is effective on MVP and Mini Monsters, the HP loss will decrease to a fixed amount, and there will be no bonus lifesteal.

Lvl: 9 Attack Magic CD: 2 sec Skill Delay: 1.5 sec SP: 100 Range: 5 Cast Time: 3 Fixed Cast Time: 0.5
• Deals Neutral M. DMG equal to 25%% of an enemy's current HP and absorbs 50%% of the damage dealt to heal the user. Meanwhile, the enemy's VIT decreases by 12, and the user's VIT increases by 12. When it is effective on MVP and Mini Monsters, the HP loss will decrease to a fixed amount, and there will be no bonus lifesteal.
Lvl: 8 Attack Magic CD: 2 sec Skill Delay: 1.5 sec SP: 100 Range: 5 Cast Time: 3 Fixed Cast Time: 0.5
• Deals Neutral M. DMG equal to 25%% of an enemy's current HP and absorbs 50%% of the damage dealt to heal the user. Meanwhile, the enemy's VIT decreases by 9, and the user's VIT increases by 9. When it is effective on MVP and Mini Monsters, the HP loss will decrease to a fixed amount, and there will be no bonus lifesteal.
Lvl: 7 Attack Magic CD: 2 sec Skill Delay: 1.5 sec SP: 100 Range: 5 Cast Time: 3 Fixed Cast Time: 0.5
• Deals Neutral M. DMG equal to 25%% of an enemy's current HP and absorbs 50%% of the damage dealt to heal the user. Meanwhile, the enemy's VIT decreases by 6, and the user's VIT increases by 6. When it is effective on MVP and Mini Monsters, the HP loss will decrease to a fixed amount, and there will be no bonus lifesteal.
Lvl: 6 Attack Magic CD: 2 sec Skill Delay: 1.5 sec SP: 100 Range: 5 Cast Time: 3 Fixed Cast Time: 0.5
• Deals Neutral M. DMG equal to 25%% of an enemy's current HP and absorbs 50%% of the damage dealt to heal the user. Meanwhile, the enemy's VIT decreases by 3, and the user's VIT increases by 3. When it is effective on MVP and Mini Monsters, the HP loss will decrease to a fixed amount, and there will be no bonus lifesteal.
Lvl: 5 Attack Magic CD: 2 sec Skill Delay: 1.5 sec SP: 100 Range: 5 Cast Time: 3 Fixed Cast Time: 0.5
• Deals Neutral M. DMG equal to 25% of an enemy's current HP and absorbs 50% of the damage dealt to heal the user. When it is effective on MVP and Mini Monsters, the HP loss will decrease to a fixed amount, and there will be no bonus lifesteal.
Lvl: 4 Attack Magic CD: 2 sec Skill Delay: 1.5 sec SP: 100 Range: 5 Cast Time: 3 Fixed Cast Time: 0.5
• Deals Neutral M. DMG equal to 20% of an enemy's current HP and absorbs 45% of the damage dealt to heal the user. When it is effective on MVP and Mini Monsters, the HP loss will decrease to a fixed amount, and there will be no bonus lifesteal.
Lvl: 3 Attack Magic CD: 2 sec Skill Delay: 1.5 sec SP: 100 Range: 5 Cast Time: 3 Fixed Cast Time: 0.5
• Deals Neutral M. DMG equal to 15% of an enemy's current HP and absorbs 40% of the damage dealt to heal the user. When it is effective on MVP and Mini Monsters, the HP loss will decrease to a fixed amount, and there will be no bonus lifesteal.
Lvl: 2 Attack Magic CD: 2 sec Skill Delay: 1.5 sec SP: 100 Range: 5 Cast Time: 3 Fixed Cast Time: 0.5
• Deals Neutral M. DMG equal to 10% of an enemy's current HP and absorbs 35% of the damage dealt to heal the user. When it is effective on MVP and Mini Monsters, the HP loss will decrease to a fixed amount, and there will be no bonus lifesteal.
Lvl: 1 Attack Magic CD: 2 sec Skill Delay: 1.5 sec SP: 100 Range: 5 Cast Time: 3 Fixed Cast Time: 0.5
• Deals Neutral M. DMG equal to 5% of an enemy's current HP and absorbs 30% of the damage dealt to heal the user. When it is effective on MVP and Mini Monsters, the HP loss will decrease to a fixed amount, and there will be no bonus lifesteal.

Aesir

• HP Absorb - Enhance [HP Absorb]’s percentage of target’s HP absorbed +4%

Formula

function CommonFun.calcDamage_2304(srcUser, targetUser, params, damageParam, logger)
  local Luk = srcUser:GetProperty("Luk")
  local Int = srcUser:GetProperty("Int")
  local Vit = srcUser:GetProperty("Vit")
  local MAtk = srcUser:GetProperty("MAtk")
  local MAtkPer = srcUser:GetProperty("MAtkPer")
  local target_Hp = targetUser:GetProperty("Hp")
  local MDamIncrease = CommonFun.calcMDamIncrease(srcUser, targetUser)
  local IgnoreMDef = srcUser:GetProperty("IgnoreMDef")
  if 1 <= IgnoreMDef then
    IgnoreMDef = 1
  end
  local srcAtkElement = CommonFun.GetUserAtkAttr(srcUser, targetUser, params, damageParam)
  local targetDefElement = targetUser:GetProperty("DefAttr")
  local elementparam2 = CommonFun.CalcElementParam2(srcUser, targetUser, params, damageParam, logger)
  local MDef2 = targetUser:GetProperty("MDef")
  local MDefPer2 = targetUser:GetProperty("MDefPer")
  local Vit2 = targetUser:GetProperty("Vit")
  local VitPer2 = targetUser:GetProperty("VitPer")
  local Int2 = targetUser:GetProperty("Int")
  local IntPer2 = targetUser:GetProperty("IntPer")
  local MDamReduc2 = CommonFun.calcMDamReDuc(srcUser, targetUser)
  local RefineMDamReduc = targetUser:GetProperty("RefineMDamReduc")
  local damChangePer = damageParam.damChangePer
  local MDefReduc = CommonFun.CalcMDef(srcUser, targetUser)
  local Num1 = srcUser:GetRunePoint(24070_AESIR_HP_ABSORB_S_PERCENTAGE_OF_TARGET_S_HP_ABSORBED_4)
  local RuneDamage = Num1 * 4
  if targetUser.boss == true or targetUser.mini == true or targetUser:HasBuffID(160000_BOSS_IMMUNE_EFFECT_:MAX_STACK_0) then
    target_Hp = 0
  end
  local A = target_Hp * MDefReduc * (1 - MDamReduc2) * (damChangePer + RuneDamage) / 100 * (1 - RefineMDamReduc) * (1 + MDamIncrease) * CommonFun.calcMagicElement(srcUser, targetUser, params, damageParam) * elementparam2 - Vit2 / 2 * (1 + VitPer2) - Int2 * (1 + IntPer2)
  if A <= 1 then
    return 1
  end
  return A
end

Enemy 6

function CommonFun.calcBuff_6(srcUser, targetUser, a, b, c, d, lv)
  if srcUser == nil or targetUser == nil then
    return 0
  end
  local MaxHp = targetUser:GetProperty("MaxHp")
  local A = MaxHp * (a + c) + b
  if 0 < A or a == 0 then
    return A
  end
  if srcUser:GetNpcID() == 0 and targetUser:HasBuffID(160000_BOSS_IMMUNE_EFFECT_:MAX_STACK_0) and targetUser.boss == false and targetUser.mini == false then
    return 0
  end
  if srcUser:GetNpcID() == 0 and (targetUser.boss or targetUser.mini) then
    local Vit = srcUser:GetProperty("Vit")
    local MAtk = srcUser:GetProperty("MAtk")
    local MAtkPer = srcUser:GetProperty("MAtkPer")
    local Refine = srcUser:GetProperty("Refine")
    local MRefine = srcUser:GetProperty("MRefine")
    local Def2 = targetUser:GetProperty("Def")
    local DefPer2 = targetUser:GetProperty("DefPer")
    local MDef2 = targetUser:GetProperty("MDef")
    local MDefPer2 = targetUser:GetProperty("MDefPer")
    local Vit2 = targetUser:GetProperty("Vit")
    local VitPer2 = targetUser:GetProperty("VitPer")
    local DamReduc2 = CommonFun.calcDamReDuc(srcUser, targetUser)
    local RefineDamReduc = targetUser:GetProperty("RefineDamReduc")
    local Int2 = targetUser:GetProperty("Int")
    local IntPer2 = targetUser:GetProperty("IntPer")
    local MDamReduc2 = CommonFun.calcMDamReDuc(srcUser, targetUser)
    local RefineMDamReduc = targetUser:GetProperty("RefineMDamReduc")
    local Str = srcUser:GetProperty("Str")
    local Dex = srcUser:GetProperty("Dex")
    local Luk = srcUser:GetProperty("Luk")
    local Atk = srcUser:GetProperty("Atk")
    local AtkPer = srcUser:GetProperty("AtkPer")
    local DamIncrease = srcUser:GetProperty("DamIncrease")
    local MDamIncrease = CommonFun.calcMDamIncrease(srcUser, targetUser)
    local IgnoreDef = srcUser:GetProperty("IgnoreDef")
    if 1 <= IgnoreDef then
      IgnoreDef = 1
    end
    local IgnoreMDef = srcUser:GetProperty("IgnoreMDef")
    if 1 <= IgnoreMDef then
      IgnoreMDef = 1
    end
    local raceparam = 1
    local srcRace = srcUser.race
    local targetRace = targetUser.race
    if srcUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) and srcUser:HasBuffID(49325_RACIAL_ANCIENT_RELICS_CD_:MAX_STACK_0) then
    elseif srcUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) then
      targetRace = 2
    end
    if targetUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) and targetUser:HasBuffID(49325_RACIAL_ANCIENT_RELICS_CD_:MAX_STACK_0) then
    elseif targetUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) then
      srcRace = 2
    end
    if nil == CommonFun.RaceProps[targetRace] then
      return 0
    end
    if nil == CommonFun.RaceProps[srcRace] then
      return 0
    end
    local raceInc = srcUser:GetProperty(CommonFun.RaceProps[targetRace][1])
    local raceRed = targetUser:GetProperty(CommonFun.RaceProps[srcRace][2])
    local raceparam = 1 + raceInc - raceRed
    if raceparam <= 0.1 then
      raceparam = 0.1
    end
    local MAtkFinal = MAtk * (1 + MAtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * raceparam
    local AtkFinal = Atk * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * raceparam
    if MAtkFinal <= AtkFinal then
      local DefReduc = CommonFun.CalcDef(srcUser, targetUser)
      A = (AtkFinal * DefReduc * (1 - DamReduc2) + Refine) * a * 100 * (1 - RefineDamReduc) * (1 + DamIncrease) - Vit2 * (1 + VitPer2) + b
    else
      local MDefReduc = CommonFun.CalcMDef(srcUser, targetUser)
      A = (MAtkFinal * MDefReduc * (1 - MDamReduc2) + MRefine) * a * 100 * (1 - RefineMDamReduc) * (1 + MDamIncrease) - Vit2 / 2 * (1 + VitPer2) - Int2 * (1 + IntPer2) + b
    end
  end
  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
    A = 0
  end
  if targetUser.boss and targetUser.zoneType == 22 and CommonFun.CheckStormBossMiss(targetUser, srcUser) then
    A = 0
  end
  if targetUser:GetNpcID() == 30043_YEAR or targetUser:GetNpcID() == 280303_WILDNESS_SPIRIT_BEAST or targetUser:GetNpcID() == 56008_GOMORA or targetUser:GetNpcID() == 56009_BALTAN or targetUser:GetNpcID() == 56010_GOLZA or targetUser:GetNpcID() == 56011_BEMSTAR or targetUser:GetNpcID() == 56012_ELEKING or targetUser:GetNpcID() == 56013_KING_JOE then
    A = -1
  end
  if targetUser:DamageAlways1() then
    A = -1
  end
  return A
end

Enemy

{
  "id": 116901,
  "BuffName": "HP Absorb (MVP)",
  "BuffRate": {
    "Odds": {
      "type": 3076
    }
  },
  "BuffEffect": {
    "Hp": {
      "a": -0.05,
      "b": 0,
      "type": 6
    },
    "type": "HSPChange"
  }
}

Formula

{
  "CD": 2,
  "id": 1168001,
  "Buff": {
    "enemy": [
      116901
    ]
  },
  "Cost": 1,
  "Desc": [
    {
      "id": 1168000,
      "params": [
        5,
        30
      ]
    }
  ],
  "Icon": "skill_1168001",
  "Camps": "Enemy",
  "Level": 1,
  "Logic": "SkillLockedTarget",
  "Damage": [
    {
      "type": 2304,
      "damChangePer": 5,
      "elementparam": 5
    }
  ],
  "DescId": "##1301898",
  "NameZh": "##149438",
  "NextID": 1168002,
  "CastAct": "reading",
  "DamTime": {
    "type": 1,
    "value": 2
  },
  "DelayCD": 1.5,
  "Fire_EP": 3,
  "SE_cast": "Skill/Magic_cast",
  "Pvp_buff": {
    "enemy": [
      116901
    ]
  },
  "RollType": 2,
  "AttackAct": [
    "use_skill"
  ],
  "Attack_EP": 3,
  "Lead_Type": {
    "CCT": 0.5,
    "FCT": 3,
    "type": 2
  },
  "SE_attack": "Skill/skill_magic_understand_attack_01",
  "SkillCost": {
    "sp": 100
  },
  "SkillType": "Attack",
  "Target_EP": 3,
  "DamageType": 2,
  "Logic_Param": {
    "isSuckSkill": 1
  },
  "Launch_Range": 5
}