Formula
CommonFun.GetElementRate
function CommonFun.GetElementRate(srcUser, srcAtkElement, targetUser, targetDefElement, params, damageParam)
if srcAtkElement < 1 or 10 < srcAtkElement then
return 0
end
if targetDefElement < 1 or 10 < targetDefElement then
return 0
end
local ElementRate = GameConfig.ElementRestrain[srcAtkElement][targetDefElement]
if params ~= nil and damageParam ~= nil then
local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel)
if (skillID == 1700_BLADE_SOUL:TWIN_FLAME_SLASH or skillID == 1725_ARCHER:SUPER_SPRING_TWIN_FLAME_SLASH) and (targetDefElement == 3 or targetDefElement == 4) then
local skilllv = srcUser:GetLernedSkillLevel(1715_ARCHER:WHITE_BLAZE_S_PROTECTION)
ElementRate = 0.75 + skilllv * 0.05
end
if (skillID == 2705_ARCHBISHOP:INVASION or skillID == 2706_ARCHBISHOP:ABYSSAL_SPEAR) and targetDefElement == 2 then
ElementRate = 1
end
if srcAtkElement == 10 and targetUser:GetBuffActive(137004) then
ElementRate = math.max(1, ElementRate)
end
end
local srcAtkLevel = CommonFun.GetUserAtkLevel(srcUser, srcAtkElement, params, damageParam)
local tarDefLevel = CommonFun.GetUserDefLevel(targetUser, targetDefElement)
if srcUser:HasBuffID(22000991_WIND_FIELD_:MAX_STACK_0) and srcAtkElement == 1 or srcUser:HasBuffID(22000992_TERRITORY_:MAX_STACK_0) and srcAtkElement == 2 or srcUser:HasBuffID(22000993_WATER_SECTOR_:MAX_STACK_0) and srcAtkElement == 3 or srcUser:HasBuffID(22000994_FIRE_DOMAIN_:MAX_STACK_0) and srcAtkElement == 4 or srcUser:HasBuffID(22000996_SPACE_FIELD_:MAX_STACK_0) and srcAtkElement == 5 or srcUser:HasBuffID(22000995_TIME_FIELD_:MAX_STACK_0) and srcAtkElement == 8 then
ElementRate = ElementRate + 0.15
end
if srcUser:HasBuffID(130503_PHANTOM_:MAX_STACK_0) and srcAtkElement == 10 and targetUser:GetNpcID() ~= 0 then
local skilllv_sh = srcUser:GetLernedSkillLevel(3908_DIVINE_AVENGER:SOUL_EROSION)
ElementRate = ElementRate + 0.04 * skilllv_sh
end
if srcUser:HasBuffID(138320_HEAVENLY_POWER_:MAX_STACK_5) and srcAtkElement == 1 then
local leishen = srcUser:GetBuffLayer(138320_HEAVENLY_POWER_:MAX_STACK_5)
local skilllv = srcUser:GetLernedSkillLevel(2792_SAINT:LIGHTNING_POWER)
ElementRate = ElementRate + skilllv * 0.02 * leishen
end
if 3 <= tarDefLevel then
ElementRate = ElementRate + (srcAtkLevel - 1) * 0.25 - 0.25 - (tarDefLevel - 2) * 0.125
elseif 2 <= tarDefLevel and tarDefLevel < 3 then
ElementRate = ElementRate + (srcAtkLevel - 1) * 0.25 - 0.25
else
ElementRate = ElementRate + (srcAtkLevel - 1) * 0.25
end
if ElementRate < 0 then
ElementRate = 0
end
return ElementRate
end