Formula
CommonFun.calcMDamReDuc
function CommonFun.calcMDamReDuc(srcUser, targetUser)
if srcUser == nil or targetUser == nil then
return 0
end
local MDamSpike = srcUser:GetProperty("MDamSpike_MPEN")
local MDamReduc2 = targetUser:GetProperty("MDamReduc")
local ReduceLv = CommonFun.calcSpikeLv(srcUser, targetUser)
local SkillMDamReduc = CommonFun.calcSkillMDamReduc(srcUser, targetUser)
if srcUser:HasBuffID(138002_23_:MAX_STACK_0) then
local DamSpike = srcUser:GetProperty("DamSpike_PEN")
MDamSpike = MDamSpike + DamSpike
end
if targetUser:GetNpcID() ~= 0 and srcUser:HasBuffID(57720_23_:MAX_STACK_0) and srcUser:HasBuffID(138002_23_:MAX_STACK_0) then
MDamSpike = MDamSpike + 0.2
elseif targetUser:GetNpcID() ~= 0 and srcUser:HasBuffID(57720_23_:MAX_STACK_0) then
MDamSpike = MDamSpike + 0.1
end
if targetUser:GetNpcID() ~= 0 and srcUser:HasBuffID(58120_23377_PHANTOM_THIEF_CARD_FROM_A_DIFFERENT_WORLD_:MAX_STACK_0) and srcUser:HasBuffID(138002_23_:MAX_STACK_0) then
MDamSpike = MDamSpike + 0.2
elseif targetUser:GetNpcID() ~= 0 and srcUser:HasBuffID(58120_23377_PHANTOM_THIEF_CARD_FROM_A_DIFFERENT_WORLD_:MAX_STACK_0) then
MDamSpike = MDamSpike + 0.1
end
if targetUser:GetNpcID() ~= 0 and srcUser:HasBuffID(58730_ALIEN_ELUSIVE_THIEF_CARD_:MAX_STACK_0) and srcUser:HasBuffID(138002_23_:MAX_STACK_0) then
MDamSpike = MDamSpike + 0.2
elseif targetUser:GetNpcID() ~= 0 and srcUser:HasBuffID(58730_ALIEN_ELUSIVE_THIEF_CARD_:MAX_STACK_0) then
MDamSpike = MDamSpike + 0.1
end
if (targetUser.boss or targetUser.mini) and srcUser:HasBuffID(58730_ALIEN_ELUSIVE_THIEF_CARD_:MAX_STACK_0) and srcUser:HasBuffID(138002_23_:MAX_STACK_0) then
MDamSpike = MDamSpike + 0.1
elseif (targetUser.boss or targetUser.mini) and srcUser:HasBuffID(58730_ALIEN_ELUSIVE_THIEF_CARD_:MAX_STACK_0) then
MDamSpike = MDamSpike + 0.05
end
local MDamReducThrough = srcUser:GetProperty("MDamReducThrough")
local MDamSpikeResistance = targetUser:GetProperty("MDamSpikeResistance")
if 0 <= MDamSpike then
MDamSpike = MDamSpike * math.max(1 - MDamSpikeResistance, 0)
end
if 0 <= MDamReduc2 then
MDamReduc2 = MDamReduc2 * math.max(1 - MDamReducThrough, 0)
end
local A = 1 - (1 + 0.009 * ReduceLv + MDamSpike - MDamReduc2) * SkillMDamReduc
local mapid, maptype = srcUser:GetMapInfo()
if (maptype == PVP_MAPS) and targetUser:GetNpcID() ~= 40022_EMPERIUM then
A = A < -1 and -1 or 1 < A and 1 or A
A = math.floor(A * 1000) / 1000
A = A + 0.4 * (1 - math.sin(A * 3.14 / 2))
end
if 0.85 <= A then
A = 0.85
end
return A
end