Formula

CommonFun.ModifyCriDamage

function CommonFun.ModifyCriDamage(srcUser, targetUser, params, logger, skillParams, damage)
  local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel)
  local damageParam = skillParams.Damage
  if damageParam ~= nil and damageParam[1] ~= nil then
    damageParam = damageParam[1]
  end
  local raceparam = CommonFun.CalcRaceParam(srcUser, targetUser, params, damageParam, logger)
  local bodyparam = CommonFun.CalcBodyParam(srcUser, targetUser, params, damageParam, logger)
  local elementparam = CommonFun.CalcElementParam(srcUser, targetUser, params, damageParam, logger)
  local bossparam = CommonFun.CalcBossParam(srcUser, targetUser, params, damageParam, logger)
  local raceparam2 = CommonFun.CalcRaceParam2(srcUser, targetUser, params, damageParam, logger)
  local bodyparam2 = CommonFun.CalcBodyParam2(srcUser, targetUser, params, damageParam, logger)
  local elementparam2 = CommonFun.CalcElementParam2(srcUser, targetUser, params, damageParam, logger)
  local bossparam2 = CommonFun.CalcBossParam2(srcUser, targetUser, params, damageParam, logger)
  local Str1 = srcUser:GetProperty("Str")
  local Num1 = srcUser:GetRunePoint(62080_AESIR_INCREASE_AUTO_ATTACK_BY_20_WHEN_USING_NORMAL_ATTACKS_ATK_QUALITY_FROM_STR_1)
  local Num2 = srcUser:GetRunePoint(51013_AESIR_ACOLYTE_PRIEST_AND_HIGH_PRIEST_S_AUTO_ATTACK_BONUS_CONVERTED_FROM_STRENGTH_INCREASES_BY_5_AUTO_ATTACK_INCREASES_BY)
  local Num3 = srcUser:GetRunePoint(120010_AESIR_MONK_AND_CHAMPION_S_AUTO_ATTACK_BONUS_CONVERTED_FROM_STRENGTH_INCREASES_BY_5_AUTO_ATTACK_INCREASES_BY)
  local Numlianj = srcUser:GetRunePoint(130110_AESIR_ATTRIBUTE_ATTACK_FROM_STR_3_WHEN_USING_AUTO_ATTACK_INCREASE_AUTO_ATTACK_BY)
  local RuneDamage = Num1 * 0.01 + Num2 * 0.05 + Num3 * 0.05 + Numlianj * 0.03 + 1
  local Str = Str1 * RuneDamage
  local Dex = srcUser:GetProperty("Dex")
  local Luk = srcUser:GetProperty("Luk")
  local Int = srcUser:GetProperty("Int")
  local Agi = srcUser:GetProperty("Agi")
  local DamIncrease = srcUser:GetProperty("DamIncrease")
  local MDamIncrease = CommonFun.calcMDamIncrease(srcUser, targetUser)
  local race2 = targetUser.race
  if srcUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) and srcUser:HasBuffID(49325_RACIAL_ANCIENT_RELICS_CD_:MAX_STACK_0) then
  elseif srcUser:HasBuffID(49320_RACIAL_ANCIENT_RELICS_PERMANENT_:MAX_STACK_0) then
    race2 = 2
  end
  local DefAttr2 = targetUser:GetProperty("DefAttr")
  local skillLevel = srcUser:GetLernedSkillLevel(29_SWORDSMAN:AURA_BLADE)
  local skillLevel1 = srcUser:GetLernedSkillLevel(1701_BLADE_SOUL:FIRE_SWORD)
  local skillLevel2 = 0
  if race2 == 3 or DefAttr2 == 9 or srcUser:HasBuffID(20510031_REGARD_THE_ENEMY_AS_DARK_ELEMENT_:MAX_STACK_0) and srcUser:HasBuffID(22000520_DEMON_BANE_IS_EFFECTIVE_ON_THE_DARK_ELEMENT_:MAX_STACK_0) or DefAttr2 == 7 and srcUser:HasBuffID(22000520_DEMON_BANE_IS_EFFECTIVE_ON_THE_DARK_ELEMENT_:MAX_STACK_0) then
    skillLevel2 = srcUser:GetLernedSkillLevel(234_LORD_KNIGHT:DEMON_BANE)
    if 10 < skillLevel2 then
      skillLevel2 = 10
    end
  end
  local SkillRealDamage1 = 0
  if skillLevel <= 5 then
    SkillRealDamage1 = skillLevel * 20
  elseif 5 < skillLevel and skillLevel <= 10 then
    SkillRealDamage1 = 100 + math.floor(Agi / 5) * ((skillLevel - 5) * 0.5 + 0.5)
  else
    SkillRealDamage1 = 100 + (skillLevel - 10) * 20 + math.floor(Agi / 5) * 3 + Luk * 2
  end
  local Numliehuo = srcUser:GetRunePoint(203003_AESIR_BOOST_SWORDS_OF_WILDFIRE_S_ALL_TRUE_DMG_BY_5)
  local liehuo = 1 + Numliehuo * 0.05
  local SkillRealDamage2 = 0
  if skillLevel1 <= 10 then
    SkillRealDamage2 = skillLevel1 * 20 * liehuo
  else
    SkillRealDamage2 = 200 * liehuo
  end
  local SkillRealDamage = SkillRealDamage1 + SkillRealDamage2
  local BaseAtk = 0
  local BaseMAtk = Int * 2 + math.floor(Int * Int / 100)
  local BaseAtk1 = Str1 * 2 + math.floor(Str1 * Str1 / 100) + math.floor(Dex / 5) + math.floor(Luk / 5)
  local BaseAtk2 = Dex * 2 + math.floor(Dex * Dex / 100) + math.floor(Str / 5) + math.floor(Luk / 5)
  local BaseAtk3 = Str * 2 + math.floor(Str * Str / 100) + math.floor(Dex / 5) + math.floor(Luk / 5)
  local NoramlAtkAdd = 5 * Str
  local profressionID = srcUser:GetProfressionID()
  local WeaponType = srcUser:GetEquipedWeaponType()
  if (profressionID == 92_ROGUE or profressionID == 93_STALKER or profressionID == 94_SHADOW_CHASER or profressionID == 95_PHANTOM_DANCER) and WeaponType == 210 then
    BaseAtk1 = BaseAtk2
    BaseAtk3 = BaseAtk2
    NoramlAtkAdd = 3 * Dex
  end
  for k, v in pairs(GameConfig.Atkcalculate) do
    if v == profressionID then
      BaseAtk1 = BaseAtk2
      BaseAtk3 = BaseAtk2
      NoramlAtkAdd = 3 * Dex
    end
  end
  local Num4 = srcUser:GetRunePoint(52013_AESIR_ACOLYTE_PRIEST_AND_HIGH_PRIEST_S_M_ATK_BONUS_INCREASES_BY_7_AUTO_ATTACK_INCREASES_BY)
  local Num5 = srcUser:GetRunePoint(52014)
  local Num6 = srcUser:GetRunePoint(52015)
  local Num7 = srcUser:GetRunePoint(52016)
  local Num8 = srcUser:GetRunePoint(52017)
  local Num9 = srcUser:GetRunePoint(52018)
  local RuneDamage1 = (Num4 + Num5 + Num6 + Num7 + Num8 + Num9) * 0.07
  local Atk1 = srcUser:GetProperty("Atk")
  local MAtk = srcUser:GetProperty("MAtk")
  local MAtkPer = srcUser:GetProperty("MAtkPer")
  local MonkAtk = 0
  if srcUser:HasBuffID(100510_CRITICAL_EXPLOSION_:MAX_STACK_0) then
    MonkAtk = 5 * Int
  end
  local AtkSpdAdd = 0
  local skilllv_SpdAdd = srcUser:GetLernedSkillLevel(22_SWORDSMAN:ONE_HAND_QUICKEN)
  if srcUser:HasBuffID(80082_INCREASE_SWORD_S_ATTACK_SPD_PEAK_:MAX_STACK_0) and 10 < skilllv_SpdAdd then
    AtkSpdAdd = (skilllv_SpdAdd - 10) * 120
  end
  local skilllv_mfzr = srcUser:GetLernedSkillLevel(3002_BLACKSMITH:ABYSS_CONTRACT)
  local Opening = srcUser:GetSkillOptByOption(17)
  local MagicAtk = 0
  if 0 < skilllv_mfzr and Opening == 0 then
    local Sp = srcUser:GetProperty("Sp")
    MagicAtk = Sp * skilllv_mfzr * 0.2
  end
  local skilllv_element = srcUser:GetLernedSkillLevel(127_KNIGHT:ELEMENTAL_ARROW)
  local atk_element = 0
  if 10 < skilllv_element then
    atk_element = Dex * ((skilllv_element - 10) * 0.5)
  end
  local NormalAtk = srcUser:GetProperty("NormalAtk")
  NormalAtk = NormalAtk + NoramlAtkAdd
  local Atk = Atk1 + RuneDamage1 * MAtk * (1 + MAtkPer) + MonkAtk + AtkSpdAdd + MagicAtk + atk_element + NormalAtk
  local Num10 = srcUser:GetRunePoint(11022_AESIR_SWORDSMAN_S_ATK_BONUS_INCREASES_BY_3_AUTO_ATTACK_INCREASES_BY)
  local Num11 = srcUser:GetRunePoint(203024_AESIR_INCREASE_THE_WARRIOR_OF_WILDFIRE_S_AUTO_ATK_BONUS_BY_3_AUTO_ATTACK)
  local Num12 = srcUser:GetRunePoint(11024)
  local Num13 = srcUser:GetRunePoint(12004)
  local Num14 = srcUser:GetRunePoint(12011)
  local Num16 = srcUser:GetRunePoint(70010_AESIR_FOR_CRUSADER_AUTO_ATTACKS_ATK_INCREASES_BY_3_AUTO_ATTACK_INCREASES_BY)
  local RuneDamage2 = (Num10 + Num11 + Num12 + Num13 + Num14 + Num16) * 0.03
  local Num15 = srcUser:GetRunePoint(120020_AESIR_FOR_LAUNCHING_AUTO_ATTACKS_ATK_INCREASES_BY_3_AUTO_ATTACK_INCREASES_BY)
  local RuneDamage3 = Num15 * 0.03
  local AtkPer1 = srcUser:GetProperty("AtkPer")
  local AtkPer = AtkPer1 + RuneDamage2 + RuneDamage3
  local MAtkPer = srcUser:GetProperty("MAtkPer")
  local Refine = srcUser:GetProperty("Refine")
  local MRefine = srcUser:GetProperty("MRefine")
  local Vit2 = targetUser:GetProperty("Vit")
  local VitPer2 = targetUser:GetProperty("VitPer")
  local DamReduc2 = CommonFun.calcDamReDuc(srcUser, targetUser)
  local RefineDamReduc = targetUser:GetProperty("RefineDamReduc")
  local RealDamage = targetUser:GetProperty("RealDamage")
  if targetUser:HasBuffID(96050_LEX_AETERNA_:MAX_STACK_0) and 1 <= RealDamage and skillID == 359_RUNE_KNIGHT:PRESSURE then
    RealDamage = RealDamage - 1
  end
  local AttrEffect = srcUser:GetProperty("AttrEffect")
  local bits = CommonFun.getBits(AttrEffect)
  local AttrEffect2 = targetUser:GetProperty("AttrEffect")
  local bits2 = CommonFun.getBits(AttrEffect2)
  local StateEffect = targetUser:GetProperty("StateEffect")
  local bits3 = CommonFun.getBits(StateEffect)
  local Weapon = srcUser:GetEquipedID(7_WEAPON)
  if skillParams.RollType == 1 then
    if bits[CommonFun.AttrEffect.NextAttackIncrease] == 1 then
      damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * 2 * (1 + RealDamage) * (1 + skillLevel2 * 0.05)
      if damage <= 0 then
        damage = 0
      end
    elseif bits2[CommonFun.AttrEffect.NormalSkillDam] == 1 and (profressionID == 42_HUNTER_HUNTER or profressionID == 43_SNIPER_SNIPER or profressionID == 44_RANGER_RANGER or profressionID == 45_STELLAR_HUNTER_STELLAR_HUNTER or profressionID == 102_BARD_BARD or profressionID == 103_CLOWN_CLOWN or profressionID == 104_MINSTREL_MINSTREL or profressionID == 105_SOLAR_TROUVERE_SOLAR_TROUVERE or profressionID == 11_SWORDSMAN_SWORDSMAN2_DANCER_DANCER or profressionID == 11_SWORDSMAN_SWORDSMAN3_GYPSY_GYPSY or profressionID == 11_SWORDSMAN_SWORDSMAN4_WANDERER_WANDERER or profressionID == 11_SWORDSMAN_SWORDSMAN5_LUNA_DANSEUSE_LUNA_DANSEUSE) then
      local targetid = targetUser:GetGuid()
      local distance = srcUser:GetDistance(targetid)
      local skilllv_1 = srcUser:GetLernedSkillLevel(133_KNIGHT:VULTURE_S_EYE)
      local DisDam = 1
      if 10 < skilllv_1 then
        DisDam = 1 + distance / 7.5 * (skilllv_1 - 10) * 0.1
        if srcUser:HasBuffID(131080_UNLIMITED_STARS_:MAX_STACK_0) then
          DisDam = 1 + (skilllv_1 - 10) * 0.1
        end
        DisDam = math.min(DisDam, 2)
      end
      damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * 1.3 * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * DisDam
      if damage <= 0 then
        damage = 0
      end
    elseif bits3[CommonFun.StateEffect.Dizzy] == 1 and (Weapon == 40322_MURAMASA_1 or Weapon == 140322_MURAMASA_2) then
      damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * 1.5
      if damage <= 0 then
        damage = 0
      end
    elseif skillID == 300_LORD_KNIGHT:STORM_GUST_LORD_KNIGHT:STORM_GUST or skillID == 469_RUNEMASTER:STORM_GUST or skillID == 1397_ASSASSIN_CROSS:STORM_GUST or skillID == 1446_ASSASSIN_CROSS:STORM_GUST or skillID == 252_LORD_KNIGHT:STORM_GUST_LORD_KNIGHT:STORM_GUST then
      local targetid = targetUser:GetGuid()
      local distance = srcUser:GetDistance(targetid)
      local skilllv_1 = srcUser:GetLernedSkillLevel(133_KNIGHT:VULTURE_S_EYE)
      local skilllv_2 = srcUser:GetLernedSkillLevel(478_RUNEMASTER:VULTURE_S_EYE)
      local DisDam = 1
      if 10 < skilllv_1 then
        DisDam = 1 + distance / 7.5 * (skilllv_1 - 10) * 0.1
        if srcUser:HasBuffID(131080_UNLIMITED_STARS_:MAX_STACK_0) then
          DisDam = 1 + (skilllv_1 - 10) * 0.1
        end
        DisDam = math.min(DisDam, 2)
      elseif 10 < skilllv_2 then
        DisDam = 1 + distance / 7.5 * (skilllv_2 - 10) * 0.06
        DisDam = math.min(DisDam, 1.6)
      end
      local fromid = targetUser:GetBuffFromID(116470_MARK_OF_DEATH_:MAX_STACK_0)
      local guid = srcUser:GetGuid()
      local BUffDam = 1
      local skilllv_biaoji = srcUser:GetLernedSkillLevel(1147_ARCANE_MASTER:MARK_OF_DEATH)
      local GemBiaoji = srcUser:GetGemValue(91121_MARK_OF_DEATH_DAMAGE_INCREASE_EFFECT_PERCENTAGE)
      local Numxp = srcUser:GetRunePoint(94080_AESIR_MARK_OF_DEATH_EFFECT_2)
      if fromid == guid then
        BUffDam = 1 + skilllv_biaoji * 0.02 + Numxp * 0.02 + GemBiaoji / 100000
      end
      local SpAtk = 0
      if srcUser:HasBuffID(131096_ATTACK_REDUCES_HP_AND_SP_:MAX_STACK_0) then
        local Sp = srcUser:GetProperty("Sp")
        SpAtk = Sp
      end
      damage = ((((Atk - BaseAtk1) * (1 + AtkPer) + SpAtk) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * DisDam * BUffDam
      if damage <= 0 then
        damage = 0
      end
    elseif skillID == 470_RUNEMASTER:STORM_GUST then
      local Enemy = 1
      local skilllv_zy = srcUser:GetLernedSkillLevel(1145_ARCANE_MASTER:PICK_EM_OFF)
      if 0 < skilllv_zy and 1 >= srcUser:GetRangeEnemy(3) then
        Enemy = 1 + skilllv_zy * 0.03
      end
      damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05) * Enemy
      if damage <= 0 then
        damage = 0
      end
    else
      damage = (((Atk - BaseAtk1) * (1 + AtkPer) * CommonFun.ShapeCorrection(srcUser, targetUser) * bodyparam * elementparam * elementparam2 + BaseAtk3) * raceparam * bossparam * bossparam2 * (1 - DamReduc2) + Refine + SkillRealDamage - Vit2 * (1 + VitPer2)) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 - RefineDamReduc) * (1 + DamIncrease) * (1 + RealDamage) * (1 + skillLevel2 * 0.05)
      if damage <= 0 then
        damage = 0
      end
    end
  elseif bits[CommonFun.AttrEffect.NextAttackIncrease] == 1 then
    damage = ((MAtk - BaseMAtk) * (1 + MAtkPer) + BaseMAtk + MRefine) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 + MDamIncrease) * 2 * (1 + RealDamage)
  elseif bits2[CommonFun.AttrEffect.NormalSkillDam] == 1 and (profressionID == 42_HUNTER_HUNTER or profressionID == 43_SNIPER_SNIPER or profressionID == 44_RANGER_RANGER or profressionID == 45_STELLAR_HUNTER_STELLAR_HUNTER or profressionID == 102_BARD_BARD or profressionID == 103_CLOWN_CLOWN or profressionID == 104_MINSTREL_MINSTREL or profressionID == 105_SOLAR_TROUVERE_SOLAR_TROUVERE or profressionID == 11_SWORDSMAN_SWORDSMAN2_DANCER_DANCER or profressionID == 11_SWORDSMAN_SWORDSMAN3_GYPSY_GYPSY or profressionID == 11_SWORDSMAN_SWORDSMAN4_WANDERER_WANDERER or profressionID == 11_SWORDSMAN_SWORDSMAN5_LUNA_DANSEUSE_LUNA_DANSEUSE) then
    local targetid = targetUser:GetGuid()
    local distance = srcUser:GetDistance(targetid)
    local skilllv_1 = srcUser:GetLernedSkillLevel(133_KNIGHT:VULTURE_S_EYE)
    local DisDam = 1
    if 10 < skilllv_1 then
      DisDam = 1 + distance / 7.5 * (skilllv_1 - 10) * 0.1
      if srcUser:HasBuffID(131080_UNLIMITED_STARS_:MAX_STACK_0) then
        DisDam = 1 + (skilllv_1 - 10) * 0.1
      end
      DisDam = math.min(DisDam, 2)
    end
    damage = ((MAtk - BaseMAtk) * (1 + MAtkPer) + BaseMAtk + MRefine) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 + MDamIncrease) * 1.3 * (1 + RealDamage) * DisDam
  else
    damage = ((MAtk - BaseMAtk) * (1 + MAtkPer) + BaseMAtk + MRefine) * CommonFun.CalcCrit(srcUser, targetUser, skillParams) * (1 + MDamIncrease) * (1 + RealDamage)
  end
  if targetUser:GetNpcID() == 30028_YEAR then
    damage = 1
  end
  local elementDam = CommonFun.DoCalcElementDam(srcUser, targetUser, params, damageParam)
  local stateDam = CommonFun.DoCalcStateEffectDam(srcUser, targetUser)
  local fromid = targetUser:GetBuffFromID(45000120_REPENTANCE_:MAX_STACK_0)
  local guid = srcUser:GetGuid()
  local BUffDam = 1
  if fromid == guid then
    BUffDam = 1.3
  end
  local RefineLv = srcUser:GetEquipedRefineLv(7_WEAPON)
  local HolyEquip = 1
  if (Weapon == 40319_HOLY_AVENGER_1 or Weapon == 140319_HOLY_AVENGER_2) and (profressionID == 11_SWORDSMAN_SWORDSMAN or profressionID == 12_KNIGHT_KNIGHT or profressionID == 13_LORD_KNIGHT_LORD_KNIGHT or profressionID == 14_RUNE_KNIGHT_RUNE_KNIGHT or profressionID == 15_RUNEMASTER_RUNEMASTER or profressionID == 203_FLAMES_FLAMES or profressionID == 204_WARRIOR_OF_WILDFIRE_WARRIOR_OF_WILDFIRE or profressionID == 205_INFERNO_ARMOR_INFERNO_ARMOR or profressionID == 72_CRUSADER_CRUSADER or profressionID == 73_PALADIN_PALADIN or profressionID == 74_ROYAL_GUARD_ROYAL_GUARD or profressionID == 75_DIVINE_AVENGER_DIVINE_AVENGER or profressionID == 605_THANATOS_THANATOS or profressionID == 665_RATHGRICY_RATHGRICY or profressionID == 695_ANCIENT_ARTIFACT_USER_ANCIENT_ARTIFACT_USER) then
    HolyEquip = 1 + 0.05 * RefineLv
  end
  if (Weapon == 40360_HEAVENS_1 or Weapon == 140360_HEAVENS_2) and (profressionID == 11_SWORDSMAN_SWORDSMAN or profressionID == 12_KNIGHT_KNIGHT or profressionID == 13_LORD_KNIGHT_LORD_KNIGHT or profressionID == 14_RUNE_KNIGHT_RUNE_KNIGHT or profressionID == 15_RUNEMASTER_RUNEMASTER or profressionID == 203_FLAMES_FLAMES or profressionID == 204_WARRIOR_OF_WILDFIRE_WARRIOR_OF_WILDFIRE or profressionID == 205_INFERNO_ARMOR_INFERNO_ARMOR or profressionID == 72_CRUSADER_CRUSADER or profressionID == 73_PALADIN_PALADIN or profressionID == 74_ROYAL_GUARD_ROYAL_GUARD or profressionID == 75_DIVINE_AVENGER_DIVINE_AVENGER or profressionID == 605_THANATOS_THANATOS or profressionID == 665_RATHGRICY_RATHGRICY or profressionID == 695_ANCIENT_ARTIFACT_USER_ANCIENT_ARTIFACT_USER) then
    HolyEquip = 1 + 0.05 * RefineLv
  end
  local zhufu = 1
  if srcUser:HasBuffID(129040_HAMMER_OF_BLESSINGS_:MAX_STACK_0) or srcUser:HasBuffID(129041_HAMMER_OF_BLESSINGS_SHORT_TERM_:MAX_STACK_0) then
    local skilllv_zf = srcUser:GetLernedSkillLevel(3610_PALADIN:HAMMER_OF_BLESSINGS)
    local GemValue = srcUser:GetGemValue(51161_BLESSING_HAMMER_S_INHERITED_AUTO_ATK_PERCENTAGE)
    zhufu = 1 + skilllv_zf * 0.05 + GemValue / 100000
  end
  local Ninja = 1
  local NinjaDamPer = 1
  if skillID == 2010_SNIPER:FLOWING_BLADE or skillID == 2011_SNIPER:FLOWING_BLADE_II_SNIPER:FLOWING_BLADE_II or skillID == 2012_SNIPER:FLOWING_BLADE_III_SNIPER:FLOWING_BLADE_III or skillID == 2013_SNIPER:FLOWING_BLADE_IV_SNIPER:FLOWING_BLADE_IV then
    local Agi = srcUser:GetProperty("Agi")
    local AgiRune = srcUser:GetRunePoint(163012_AESIR_FOR_EVERY_10_POINTS_OF_AGI_AUTO_ATTACK_DMG_0_4)
    local AgiDam = 1 + math.floor(Agi / 10) * AgiRune * 0.004
    local Famous = 1
    local RefineLv7 = srcUser:GetEquipedRefineLv(7_WEAPON)
    if srcUser:HasBuffID(44360_RENOWNED_BLADE_MURAMASA_:MAX_STACK_0) then
      Famous = Famous * (RefineLv7 * 0.01 + 1)
    end
    if srcUser:HasBuffID(44370_MONSTER_KNIFE_MURAMASA_:MAX_STACK_0) then
      Famous = Famous * (RefineLv7 * 0.03 + 1)
    end
    Ninja = AgiDam * Famous
  end
  if skillID == 2011_SNIPER:FLOWING_BLADE_II_SNIPER:FLOWING_BLADE_II then
    NinjaDamPer = 1.5
  end
  if skillID == 2012_SNIPER:FLOWING_BLADE_III_SNIPER:FLOWING_BLADE_III then
    NinjaDamPer = 3
  end
  if skillID == 2013_SNIPER:FLOWING_BLADE_IV_SNIPER:FLOWING_BLADE_IV then
    local Rune = srcUser:GetRunePoint(163021_AESIR_AUTO_ATTACK_FINAL_STYLE_FLOWING_BLADE_IV_DMG_5)
    NinjaDamPer = 6 * (1 + Rune * 0.05)
  end
  if skillID == 2200_STELLAR_HUNTER:STORM_GUST and WeaponType == 320 then
    damage = damage * 2
  end
  if skillID == 300_LORD_KNIGHT:STORM_GUST_LORD_KNIGHT:STORM_GUST or skillID == 113_KNIGHT:STORM_GUST or skillID == 252_LORD_KNIGHT:STORM_GUST_LORD_KNIGHT:STORM_GUST then
    local guid = srcUser:GetGuid()
    local Debuff_Layer_1 = targetUser:GetBuffLayerByIDAndFromID(96082, guid)
    local Debuff_Layer_2 = targetUser:GetBuffLayerByIDAndFromID(96083, guid)
    local sw_dam = math.max(Debuff_Layer_1, Debuff_Layer_2) * 0.06 + 1
    damage = damage * sw_dam
  end
  if skillID == 173_KNIGHT:STORM_GUST then
    local skilllv_qihei = srcUser:GetLernedSkillLevel(194_KNIGHT:FULLBLACK_CLAW)
    if targetUser:GetBuffActive(95500) then
      damage = damage * (1 + 0.15 * skilllv_qihei)
    end
  end
  if skillID == 2822_SAINT:PIERCING_ARROW then
    local skilllv_sy = srcUser:GetLernedSkillLevel(2811_SAINT:MOON_SHOT)
    local ratio = 1
    if targetUser:GetNpcID() ~= 0 and 7 <= skilllv_sy then
      ratio = 2
    end
    local skilllv_xy = srcUser:GetLernedSkillLevel(2818_SAINT:BLOODMOON)
    local Hp2 = targetUser:GetProperty("Hp")
    local MaxHp2 = targetUser:GetProperty("MaxHp")
    local HpRatio = 1 + (MaxHp2 - Hp2) / MaxHp2 * skilllv_xy * 0.2
    damage = damage * (2 + skilllv_sy) * ratio * HpRatio
  end
  if skillID == 2809_SAINT:STORM_GUST or skillID == 2810_SAINT:STORM_GUST then
    local skilllv_xy = srcUser:GetLernedSkillLevel(2818_SAINT:BLOODMOON)
    local Hp2 = targetUser:GetProperty("Hp")
    local MaxHp2 = targetUser:GetProperty("MaxHp")
    local HpRatio = 1 + (MaxHp2 - Hp2) / MaxHp2 * skilllv_xy * 0.2
    damage = damage * HpRatio
  end
  damage = damage * elementDam * stateDam * BUffDam * HolyEquip * zhufu * Ninja * NinjaDamPer
  return damage
end