CommonFun

CommonFun.CalcDamage

Dataset · 20251127_update

Formula Source

function CommonFun.CalcDamage(srcUser, targetUser, params, logger)
  local damage, damagetype = CommonFun.CalcBaseDamage(srcUser, targetUser, params, logger)
  local sharedam, realdam
  local MonsterBeingNpc = ""
  local Monster_BeingNpc = Table_Monster[targetUser:GetNpcID()]
  if Monster_BeingNpc ~= nil then
    MonsterBeingNpc = Monster_BeingNpc.Type
  end
  if 0 < damage and srcUser:isCostBattleCount() == true and (targetUser:GetNpcID() == 0 or MonsterBeingNpc == "BeingNpc" or MonsterBeingNpc == "PetNpc") then
    local Monsterlevel = 0
    local monster_cfg = Table_Monster[srcUser:GetNpcID()]
    if monster_cfg ~= nil then
      Monsterlevel = monster_cfg.Level
    end
    local PlayerBaseLv = targetUser.BaseLv
    local PlayerMaxHp = targetUser:GetProperty("MaxHp")
    local Master = targetUser:GetMasterUser()
    if Master ~= nil then
      PlayerBaseLv = Master.BaseLv
      local MasterMaxHp = Master:GetProperty("MaxHp")
      if PlayerMaxHp < MasterMaxHp then
        PlayerMaxHp = MasterMaxHp
      end
    end
    if PlayerMaxHp <= 1 then
      PlayerMaxHp = 1
    end
    local deltalv = Monsterlevel - PlayerBaseLv
    if 40 < deltalv then
      damage = damage + PlayerMaxHp * 0.01 * math.min((deltalv - 40) * 2 + 10, 50)
    elseif 30 < deltalv then
      damage = damage + PlayerMaxHp * 0.01 * math.min((deltalv - 30) * 0.75 + 2.5, 10)
    else
      if 20 < deltalv then
        damage = damage + PlayerMaxHp * 0.01 * (deltalv - 20) * 0.25
      else
      end
    end
  end
  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 mapid, maptype = srcUser:GetMapInfo()
  if 0 < damage and (srcUser:InDamReduceRaid() == true and srcUser:IsUserCamp() == true or mapid == 149 or targetUser:isCostBattleCount() == true) 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 2147483647 <= damage then
    damage = 2147483647
  end
  return damage, damagetype, sharedam, realdam
end
No formula links

Version History

Loading dependencies...
Loading usage...