CommonFun

CommonFun.CalcHitRate

Dataset · 20251127_update

Formula Source

function CommonFun.CalcHitRate(srcUser, targetUser, skillParams)
  local Hit = srcUser:GetProperty("Hit")
  local Flee2 = targetUser:GetProperty("Flee")
  local StateEffect2 = targetUser:GetProperty("StateEffect")
  local bits2 = CommonFun.getBits(StateEffect2)
  local srcAttrEffect = srcUser:GetProperty("AttrEffect3")
  local bits4 = CommonFun.getBits(srcAttrEffect)
  local isCanBlock = true
  if bits4[CommonFun.AttrEffect3.MustHit] == 1 and srcUser:HasBuffID(21930030) then
    isCanBlock = false
  end
  local targetAttrEffect = targetUser:GetProperty("AttrEffect3")
  local bits5 = CommonFun.getBits(targetAttrEffect)
  if bits5[CommonFun.AttrEffect3.CantBlock] == 1 then
    isCanBlock = false
  end
  local skill_qy = srcUser:GetLernedSkillLevel(2561)
  if 7 <= skill_qy and srcUser:HasBuffID(136780) and targetUser:HasBuffID(136781) then
    isCanBlock = false
  end
  local skilllv_1 = skillParams.id
  local Num1 = srcUser:GetRunePoint(32011)
  local Num2 = srcUser:GetRunePoint(32012)
  local RuneHit = Num1 * 0.1 + Num2 * 0.05
  local Num3 = srcUser:GetRunePoint(70130)
  local RuneHit2 = Num3 * 0.2
  local SkillHit = skillParams.SkillHit or 0
  if skilllv_1 == nil then
    RuneHit = 0
  end
  if math.floor(skilllv_1 / 1000) == 181 or math.floor(skilllv_1 / 1000) == 1111 then
    SkillHit = (skillParams.SkillHit or 0) + RuneHit
  end
  if math.floor(skilllv_1 / 1000) == 355 then
    SkillHit = (skillParams.SkillHit or 0) + RuneHit2
  end
  if math.floor(skilllv_1 / 1000) == 2020 then
    local fbGem = srcUser:GetGemValue(163111)
    SkillHit = (skillParams.SkillHit or 0) + fbGem / 100000
  end
  if math.floor(skilllv_1 / 1000) == 188 then
    local xlGem = srcUser:GetGemValue(31061)
    SkillHit = (skillParams.SkillHit or 0) + xlGem / 100000
  end
  if math.floor(skilllv_1 / 1000) == 228 or math.floor(skilllv_1 / 1000) == 229 or math.floor(skilllv_1 / 1000) == 1478 then
    local Gem = srcUser:GetGemValue(143061)
    SkillHit = (skillParams.SkillHit or 0) + Gem / 100000
  end
  if math.floor(skilllv_1 / 1000) == 1261 or math.floor(skilllv_1 / 1000) == 1272 or math.floor(skilllv_1 / 1000) == 1713 or math.floor(skilllv_1 / 1000) == 1727 then
    local DragonGem = srcUser:GetGemValue(11003)
    SkillHit = (skillParams.SkillHit or 0) + DragonGem / 100000
  end
  if srcUser:isCostBattleCount() == true and targetUser:GetNpcID() == 0 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 deltalv = Monsterlevel - PlayerBaseLv
    if 40 < deltalv then
      Hit = Hit + (deltalv - 40) * 10 + 100
    else
      if 20 < deltalv then
        Hit = Hit + (deltalv - 20) * 5
      else
      end
    end
  end
  local rate = (Hit + 80) * (1 + SkillHit) - Flee2
  if bits2[CommonFun.StateEffect.Dizzy] == 1 or bits2[CommonFun.StateEffect.Freeze] == 1 or bits2[CommonFun.StateEffect.Stone] == 1 or bits2[CommonFun.StateEffect.Sleep] == 1 then
    rate = 100
  end
  if math.floor(skilllv_1 / 1000) == 319 or math.floor(skilllv_1 / 1000) == 306 or math.floor(skilllv_1 / 1000) == 310 or math.floor(skilllv_1 / 1000) == 411 or math.floor(skilllv_1 / 1000) == 422 or math.floor(skilllv_1 / 1000) == 91001 or math.floor(skilllv_1 / 1000) == 410 then
    rate = 100
  end
  if math.floor(skilllv_1 / 1000) == 1284 or math.floor(skilllv_1 / 1000) == 1288 or math.floor(skilllv_1 / 1000) == 1122 or math.floor(skilllv_1 / 1000) == 3303 or math.floor(skilllv_1 / 1000) == 819 or math.floor(skilllv_1 / 1000) == 3706 or math.floor(skilllv_1 / 1000) == 1812 or math.floor(skilllv_1 / 1000) == 1835 or math.floor(skilllv_1 / 1000) == 1817 or math.floor(skilllv_1 / 1000) == 5604 then
    rate = 100
  end
  if math.floor(skilllv_1 / 1000) == 2563 or math.floor(skilllv_1 / 1000) == 2572 or math.floor(skilllv_1 / 10000) == 531 or math.floor(skilllv_1 / 10000) == 532 then
    rate = 100
  end
  if srcUser:HasBuffID(115090) or srcUser:HasBuffID(115091) or srcUser:HasBuffID(232170) then
    local Hp = srcUser:GetProperty("Hp")
    local MaxHp = srcUser:GetProperty("MaxHp")
    if Hp > MaxHp * 0.09 and (math.floor(skilllv_1 / 1000) == 372 or math.floor(skilllv_1 / 1000) == 63022) then
      rate = 100
    end
  end
  if srcUser:HasBuffID(128091) and rate == 100 then
    local MustMissRate = srcUser:GetProperty("MustMissRate")
    rate = 100 * (1 - MustMissRate)
  end
  if srcUser:HasBuffID(133580) or srcUser:HasBuffID(133581) then
    local MustMissRate = srcUser:GetProperty("MustMissRate")
    rate = math.min(rate, 100) * (1 - MustMissRate)
  end
  if srcUser:HasBuffID(165540) then
    rate = 100
  end
  if math.floor(skilllv_1 / 1000) == 6110 and srcUser:GetBuffLayer(116080) == 15 then
    rate = 100
  end
  if CommonFun.RollType.Attack == skillParams.RollType and srcUser:HasBuffID(49120) or isCanBlock == false then
    rate = 100
  end
  rate = CommonFun.Clamp(rate, 5, 100)
  if srcUser:HasBuffID(44522) or srcUser:HasBuffID(44532) then
    rate = 0
  end
  return rate
end
No formula links

Changes: 20251127_update vs 20251105_standard_instalation

 function CommonFun.CalcHitRate(srcUser, targetUser, skillParams)
  local Hit = srcUser:GetProperty("Hit")
  local Flee2 = targetUser:GetProperty("Flee")
  local StateEffect2 = targetUser:GetProperty("StateEffect")
  local bits2 = CommonFun.getBits(StateEffect2)
  local srcAttrEffect = srcUser:GetProperty("AttrEffect3")
  local bits4 = CommonFun.getBits(srcAttrEffect)
  local isCanBlock = true
  if bits4[CommonFun.AttrEffect3.MustHit] == 1 and srcUser:HasBuffID(21930030) then
    isCanBlock = false
  end
  local targetAttrEffect = targetUser:GetProperty("AttrEffect3")
  local bits5 = CommonFun.getBits(targetAttrEffect)
  if bits5[CommonFun.AttrEffect3.CantBlock] == 1 then
    isCanBlock = false
  end
  local skill_qy = srcUser:GetLernedSkillLevel(2561)
  if 7 <= skill_qy and srcUser:HasBuffID(136780) and targetUser:HasBuffID(136781) then
    isCanBlock = false
  end
  local skilllv_1 = skillParams.id
  local Num1 = srcUser:GetRunePoint(32011)
  local Num2 = srcUser:GetRunePoint(32012)
  local RuneHit = Num1 * 0.1 + Num2 * 0.05
  local Num3 = srcUser:GetRunePoint(70130)
  local RuneHit2 = Num3 * 0.2
  local SkillHit = skillParams.SkillHit or 0
  if skilllv_1 == nil then
    RuneHit = 0
  end
  if math.floor(skilllv_1 / 1000) == 181 or math.floor(skilllv_1 / 1000) == 1111 then
    SkillHit = (skillParams.SkillHit or 0) + RuneHit
  end
  if math.floor(skilllv_1 / 1000) == 355 then
    SkillHit = (skillParams.SkillHit or 0) + RuneHit2
  end
  if math.floor(skilllv_1 / 1000) == 2020 then
    local fbGem = srcUser:GetGemValue(163111)
    SkillHit = (skillParams.SkillHit or 0) + fbGem / 100000
  end
  if math.floor(skilllv_1 / 1000) == 188 then
    local xlGem = srcUser:GetGemValue(31061)
    SkillHit = (skillParams.SkillHit or 0) + xlGem / 100000
  end
  if math.floor(skilllv_1 / 1000) == 228 or math.floor(skilllv_1 / 1000) == 229 or math.floor(skilllv_1 / 1000) == 1478 then
    local Gem = srcUser:GetGemValue(143061)
    SkillHit = (skillParams.SkillHit or 0) + Gem / 100000
  end
  if math.floor(skilllv_1 / 1000) == 1261 or math.floor(skilllv_1 / 1000) == 1272 or math.floor(skilllv_1 / 1000) == 1713 or math.floor(skilllv_1 / 1000) == 1727 then
    local DragonGem = srcUser:GetGemValue(11003)
    SkillHit = (skillParams.SkillHit or 0) + DragonGem / 100000
  end
  if srcUser:isCostBattleCount() == true and targetUser:GetNpcID() == 0 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 deltalv = Monsterlevel - PlayerBaseLv
    if 40 < deltalv then
      Hit = Hit + (deltalv - 40) * 10 + 100
    else
      if 20 < deltalv then
        Hit = Hit + (deltalv - 20) * 5
      else
      end
    end
  end
  local rate = (Hit + 80) * (1 + SkillHit) - Flee2
  if bits2[CommonFun.StateEffect.Dizzy] == 1 or bits2[CommonFun.StateEffect.Freeze] == 1 or bits2[CommonFun.StateEffect.Stone] == 1 or bits2[CommonFun.StateEffect.Sleep] == 1 then
    rate = 100
  end
  if math.floor(skilllv_1 / 1000) == 319 or math.floor(skilllv_1 / 1000) == 306 or math.floor(skilllv_1 / 1000) == 310 or math.floor(skilllv_1 / 1000) == 411 or math.floor(skilllv_1 / 1000) == 422 or math.floor(skilllv_1 / 1000) == 91001 or math.floor(skilllv_1 / 1000) == 410 then
    rate = 100
  end
  if math.floor(skilllv_1 / 1000) == 1284 or math.floor(skilllv_1 / 1000) == 1288 or math.floor(skilllv_1 / 1000) == 1122 or math.floor(skilllv_1 / 1000) == 3303 or math.floor(skilllv_1 / 1000) == 819 or math.floor(skilllv_1 / 1000) == 3706 or math.floor(skilllv_1 / 1000) == 1812 or math.floor(skilllv_1 / 1000) == 1835 or math.floor(skilllv_1 / 1000) == 1817 or math.floor(skilllv_1 / 1000) == 5604 then
    rate = 100
  end
  if math.floor(skilllv_1 / 1000) == 2563 or math.floor(skilllv_1 / 1000) == 2572 or math.floor(skilllv_1 / 10000) == 531 or math.floor(skilllv_1 / 10000) == 532 then
    rate = 100
  end
  if srcUser:HasBuffID(115090) or srcUser:HasBuffID(115091) or srcUser:HasBuffID(232170) then
    local Hp = srcUser:GetProperty("Hp")
    local MaxHp = srcUser:GetProperty("MaxHp")
    if Hp > MaxHp * 0.09 and (math.floor(skilllv_1 / 1000) == 372 or math.floor(skilllv_1 / 1000) == 63022) then
      rate = 100
    end
  end
  if srcUser:HasBuffID(128091) and rate == 100 then
    local MustMissRate = srcUser:GetProperty("MustMissRate")
    rate = 100 * (1 - MustMissRate)
  end
  if srcUser:HasBuffID(133580) or srcUser:HasBuffID(133581) then
    local MustMissRate = srcUser:GetProperty("MustMissRate")
    rate = math.min(rate, 100) * (1 - MustMissRate)
  end
  if srcUser:HasBuffID(165540) then
    rate = 100
  end
+  if math.floor(skilllv_1 / 1000) == 6110 and srcUser:GetBuffLayer(116080) == 15 then
    rate = 100
  end
   if CommonFun.RollType.Attack == skillParams.RollType and srcUser:HasBuffID(49120) or isCanBlock == false then
    rate = 100
  end
  rate = CommonFun.Clamp(rate, 5, 100)
  if srcUser:HasBuffID(44522) or srcUser:HasBuffID(44532) then
    rate = 0
  end
  return rate
end

Version History

Loading dependencies...
Loading usage...