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