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