Formula

CommonFun.ModifyMagicCriDam

function CommonFun.ModifyMagicCriDam(srcUser, targetUser, params, skillParams, damage)
  if 0 < damage and CommonFun.RollType.Magic == skillParams.RollType and srcUser:IsAttackSkill(params.skillIDAndLevel) == false and (srcUser:HasBuffID(35600_WHEEL_OF_FORTUNE_FOUR_LEAF_CLOVER_1_:MAX_STACK_0) or srcUser:HasBuffID(43230_EXORCISM_SACHET_:MAX_STACK_0) or srcUser:HasBuffID(55170_SHELL_CHEPET_CARD_:MAX_STACK_0) or srcUser:HasBuffID(66730_5672_:MAX_STACK_0) or srcUser:HasBuffID(55890_SHELL_CHEPET_CARD_:MAX_STACK_0) or srcUser:HasBuffID(70450_9586_:MAX_STACK_0) or srcUser:HasBuffID(56700_11924_:MAX_STACK_0) or srcUser:HasBuffID(56730_11927_:MAX_STACK_0) or srcUser:HasBuffID(55710_10355_:MAX_STACK_0) or srcUser:HasBuffID(73550_1_:MAX_STACK_0) or srcUser:HasBuffID(57700_WHISPER_LEGION_CARD_:MAX_STACK_0) or srcUser:HasBuffID(74870_23_:MAX_STACK_0) or srcUser:HasBuffID(57170_CAMORRA_CARD_:MAX_STACK_0) or srcUser:HasBuffID(23200_WARD_OFF_EVIL_SACHET_INFUSE_:MAX_STACK_0) or srcUser:HasBuffLayer(23200, EBUFFERLAYER_SHADOW)) then
    local Luk = srcUser:GetProperty("Luk")
    local CriDamNum = 1.5 + math.floor(Luk / 6) / 100
    if srcUser:HasBuffID(81002780_13328_:MAX_STACK_0) then
      CriDamNum = CriDamNum + math.floor(Luk / 6) / 1000
    end
    local Ring1 = srcUser:GetEquipedID(5_ACCESSORY)
    local RefineLv1 = srcUser:GetEquipedRefineLv(5_ACCESSORY)
    local Ring2 = srcUser:GetEquipedID(6_ACCESSORY)
    local RefineLv2 = srcUser:GetEquipedRefineLv(6_ACCESSORY)
    local RefineLv7 = srcUser:GetEquipedRefineLv(7_WEAPON)
    local CriNum1 = 0
    if srcUser:HasBuffID(35600_WHEEL_OF_FORTUNE_FOUR_LEAF_CLOVER_1_:MAX_STACK_0) then
      CriNum1 = 20
    end
    local a = 0
    local b = 0
    if (Ring1 == 44076_EXORCISM_SACHET_EXORCISM_SACHET_EXORCISM_SACHET or Ring1 == 144076_EXORCISM_SACHET_1_EXORCISM_SACHET_1_EXORCISM_SACHET_1) and RefineLv1 < 8 then
      a = 3
    elseif (Ring1 == 44076_EXORCISM_SACHET_EXORCISM_SACHET_EXORCISM_SACHET or Ring1 == 144076_EXORCISM_SACHET_1_EXORCISM_SACHET_1_EXORCISM_SACHET_1) and 8 <= RefineLv1 and RefineLv1 < 12 then
      a = 6
    elseif (Ring1 == 44076_EXORCISM_SACHET_EXORCISM_SACHET_EXORCISM_SACHET or Ring1 == 144076_EXORCISM_SACHET_1_EXORCISM_SACHET_1_EXORCISM_SACHET_1) and 12 <= RefineLv1 then
      a = 10
    end
    if (Ring2 == 44076_EXORCISM_SACHET_EXORCISM_SACHET_EXORCISM_SACHET or Ring2 == 144076_EXORCISM_SACHET_1_EXORCISM_SACHET_1_EXORCISM_SACHET_1) and RefineLv2 < 8 then
      b = 3
    elseif (Ring2 == 44076_EXORCISM_SACHET_EXORCISM_SACHET_EXORCISM_SACHET or Ring2 == 144076_EXORCISM_SACHET_1_EXORCISM_SACHET_1_EXORCISM_SACHET_1) and 8 <= RefineLv2 and RefineLv2 < 12 then
      b = 6
    elseif (Ring2 == 44076_EXORCISM_SACHET_EXORCISM_SACHET_EXORCISM_SACHET or Ring2 == 144076_EXORCISM_SACHET_1_EXORCISM_SACHET_1_EXORCISM_SACHET_1) and 12 <= RefineLv2 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 12 > equipRing5.refinelv then
        aa = 6
      elseif 12 <= equipRing5.refinelv 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 12 > equipRingSD5.refinelv then
        aa = 6 * equipRingSD5.quench_per / 100
      elseif 12 <= equipRingSD5.refinelv 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 12 > equipRing6.refinelv then
        bb = 6
      elseif 12 <= equipRing6.refinelv 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 12 > equipRingSD6.refinelv then
        bb = 6 * equipRingSD6.quench_per / 100
      elseif 12 <= equipRingSD6.refinelv then
        bb = 10 * equipRingSD6.quench_per / 100
      end
    end
    local CriNum2 = a + b + aa + bb
    local CardBK = srcUser:GetEquipCardNum(7, 20189_SHELL_CHEPET_CARD)
    local CardBK1 = srcUser:GetEquipCardNum(7, 24113_SHELL_CHEPET_STAR_CARD)
    local CardKL = srcUser:GetEquipCardNum(7, 23256)
    local CardConjuror = srcUser:GetEquipCardNum(2, 23252)
    local CardCamorra = srcUser:GetEquipCardNum(7, 23334_CAMORRA_CARD)
    local CriNum3 = CardBK * 15 + CardBK1 * 17.5 + CardKL * 10 + CardConjuror * 10 + CardCamorra * (5 + RefineLv7)
    local CardNumH1 = srcUser:GetEquipCardNum(5, 23064_WITCH_OF_CALAMITY_CARD)
    local CardNumH2 = srcUser:GetEquipCardNum(6, 23064_WITCH_OF_CALAMITY_CARD)
    local CardNumB1 = srcUser:GetEquipCardNum(5, 23324)
    local CardNumB2 = srcUser:GetEquipCardNum(6, 23324)
    local CriNum5 = CardNumH1 * 10 + CardNumH2 * 10 + CardNumB1 * 8 + CardNumB2 * 8
    local CriNum4 = 0
    local RefineLv3 = srcUser:GetEquipedRefineLv(11)
    if srcUser:HasBuffID(66730_5672_:MAX_STACK_0) and 6 <= RefineLv3 then
      CriNum4 = 20
    elseif srcUser:HasBuffID(66730_5672_:MAX_STACK_0) and RefineLv3 < 6 then
      CriNum4 = 10
    end
    local CriNum6 = 0
    local RefineLv10 = srcUser:GetEquipedRefineLv(10)
    if srcUser:HasBuffID(70450_9586_:MAX_STACK_0) then
      CriNum6 = 5 + RefineLv10 * 1
    end
    local CriNum7 = 0
    local RefineLv8 = srcUser:GetEquipedRefineLv(8)
    if srcUser:HasBuffID(73550_1_:MAX_STACK_0) then
      CriNum7 = 10 + RefineLv8 * 1
    end
    local CriNum8 = 0
    if srcUser:HasBuffID(74870_23_:MAX_STACK_0) then
      CriNum8 = 10
    end
    local CriNum = CriNum1 + CriNum2 + CriNum3 + CriNum4 + CriNum5 + CriNum6 + CriNum7 + CriNum8
    if CommonFun.IsInRate(CriNum, srcUser:GetRandom()) then
      damage = damage * CriDamNum
      local mapid, maptype = srcUser:GetMapInfo()
      if 2147483647 <= damage and (mapid == PONAPE_SECRET_REALM or mapid == WHITESTAR_AIRSHIP or mapid == PALACE_OF_GHOST_-_EPIC_SPIRIT or mapid == QUAINT_COTTAGE or mapid == ELEGANT_HOUSE or mapid == GARDEN or mapid == TOWER_OF_EVILNESS_V or mapid == TOWER_OF_HEAT_V or mapid == TOWER_OF_WORLDLINE_V or mapid == TOWER_OF_DOOM_V or mapid == DARK_FINALE_-_WARRIOR or mapid == TOWER_OF_EVILNESS_IV or mapid == TOWER_OF_HEAT_IV or mapid == TOWER_OF_WORLDLINE_IV or mapid == TOWER_OF_DOOM_IV) then
        return damage, CommonFun.DamageType.Crit
      else
        return math.min(damage, 2147483647), CommonFun.DamageType.Crit
      end
    end
  end
end