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)) 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 CriNum2 = a + b
    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 == QUAINT_COTTAGE or mapid == ELEGANT_HOUSE or mapid == GARDEN) then
        return damage, CommonFun.DamageType.Crit
      else
        return math.min(damage, 2147483647), CommonFun.DamageType.Crit
      end
    end
  end
end