Formula
CommonFun.CalcDamage
function CommonFun.CalcDamage(srcUser, targetUser, params, logger)
local damage, damagetype = CommonFun.CalcBaseDamage(srcUser, targetUser, params, logger)
local TaichiSecretLandGemLv = targetUser:GetSecretLandGemLv(384009)
if TaichiSecretLandGemLv ~= 0 and 0 < damage then
local reduceRatio = TaichiSecretLandGemLv * 0.002 + math.max(TaichiSecretLandGemLv - 30, 0) * 0.001 + math.max(TaichiSecretLandGemLv - 60, 0) * 0.002
local loseValue = damage * reduceRatio
damage = damage - loseValue
if srcUser.isServerCall then
targetUser:ChangeHpDuringTime(-loseValue, 3, srcUser:GetGuid())
end
end
if srcUser:HasBuffID(107480_REAPER_DAMAGE_CONVERTED_TO_LIFE_LOSS_:MAX_STACK_0) and 0 < damage then
if srcUser.isServerCall then
targetUser:ChangeDamageToHpReduce(damage, srcUser:GetGuid())
end
damage = 0
end
local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel)
local sharedam, realdam
if 0 < damage then
if targetUser.isServerCall then
if targetUser.have_sharedam_server ~= nil and targetUser.have_sharedam_server == true then
damage, sharedam, damagetype = CommonFun.CalcShareDamage(srcUser, targetUser, damage, damagetype)
end
else
damage, sharedam, damagetype = CommonFun.CalcShareDamage(srcUser, targetUser, damage, damagetype)
end
end
if 0 < damage and targetUser.diffShowDamage == true then
local Level = srcUser.BaseLv
local MonsterLevel = Table_MonsterLevel[Level]
local MonsterID = targetUser:GetNpcID()
local Monster = Table_Monster[MonsterID]
if Monster ~= nil and MonsterLevel ~= nil then
realdam = damage * Monster.Hp / MonsterLevel.RealMaxHp
end
end
if 0 < damage and srcUser.diffShowDamage == true then
local Level = targetUser.BaseLv
local MonsterLevel = Table_MonsterLevel[Level]
if MonsterLevel ~= nil then
damage = damage * MonsterLevel.LevelReduc
end
end
local shengwang = srcUser:GetPrestigeLevel()
if 0 < damage and (srcUser:InDamReduceRaid() == true and srcUser:IsUserCamp() == true or shengwang ~= 0) then
damage = CommonFun.GetDamReduceValue(srcUser, targetUser, damage)
local skillParams = Table_Skill[params.skillIDAndLevel]
if skillParams ~= nil and skillParams.DamRatio ~= nil then
damage = damage * skillParams.DamRatio
end
end
if (CommonFun.DamageType.Normal == damagetype or CommonFun.DamageType.Crit == damagetype or CommonFun.DamageType.ErLianJi == damagetype) and 1 <= damage and targetUser:DamageAlways1() then
damagetype = CommonFun.DamageType.Normal
damage = 1
end
if 2147483647 <= damage then
damage = 2147483647
end
return damage, damagetype, sharedam, realdam
end