moved caching to Common; added GC-related ensurement

This commit is contained in:
Nostrademous
2021-03-08 14:05:24 -05:00
parent ab1d382290
commit c8ab39aedb
4 changed files with 73 additions and 25 deletions

View File

@@ -3676,6 +3676,9 @@ function calcs.offence(env, actor, activeSkill)
actor.mainSkill = usedSkill
actor.mainSkill.infoMessage = tostring(maxMirageWarriors) .. " Mirage Warriors using " .. usedSkill.activeEffect.grantedEffect.name
if usedSkillBreakdown then
actor.breakdown = usedSkillBreakdown
end
usedSkill.TotalDPS = 0
usedSkill.CombinedDPS = 0
@@ -3685,6 +3688,7 @@ function calcs.offence(env, actor, activeSkill)
-- The Saviour
if actor.mainSkill.activeEffect.grantedEffect.name == "Reflection" then
local usedSkillOutput = nil
local usedSkillBreakdown = nil
local usedSkill = nil
local usedSkillBestDps = 0
for _, triggerSkill in ipairs(actor.activeSkillList) do
@@ -3700,11 +3704,13 @@ function calcs.offence(env, actor, activeSkill)
if not usedSkill then
usedSkill = GlobalCache.cachedData[uuid].ActiveSkill
usedSkillOutput = GlobalCache.cachedData[uuid].Env.player.output
usedSkillBreakdown = GlobalCache.cachedData[uuid].Breakdown or nil
usedSkillBestDps = GlobalCache.cachedData[uuid].CombinedDPS
else
if GlobalCache.cachedData[uuid].CombinedDPS > usedSkillBestDps then
usedSkill = GlobalCache.cachedData[uuid].ActiveSkill
usedSkillOutput = GlobalCache.cachedData[uuid].Env.player.output
usedSkillBreakdown = GlobalCache.cachedData[uuid].Breakdown or nil
usedSkillBestDps = GlobalCache.cachedData[uuid].CombinedDPS
end
end
@@ -3713,7 +3719,7 @@ function calcs.offence(env, actor, activeSkill)
end
if usedSkill then
local moreDamage = 1 + usedSkill.skillModList:Sum("BASE", usedSkill.skillCfg, "SaviourMirageWarriorLessDamage") / 100
local moreDamage = 1 + activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "SaviourMirageWarriorLessDamage") / 100
local maxMirageWarriors = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "SaviourMirageWarriorMaxCount")
for k,v in pairs(usedSkillOutput) do
@@ -3740,6 +3746,9 @@ function calcs.offence(env, actor, activeSkill)
actor.mainSkill = usedSkill
actor.mainSkill.infoMessage = tostring(maxMirageWarriors) .. " Mirage Warriors using " .. usedSkill.activeEffect.grantedEffect.name
if usedSkillBreakdown then
actor.breakdown = usedSkillBreakdown
end
else
actor.mainSkill.infoMessage2 = "No Saviour active skill found"
end

View File

@@ -2225,34 +2225,16 @@ function calcs.perform(env)
calcs.defence(env, env.player)
calcs.offence(env, env.player, env.player.mainSkill)
local uuid = cacheSkillUUID(env.player.mainSkill)
if not GlobalCache.cachedData[uuid] and not env.dontCache then
GlobalCache.cachedData[uuid] = {
Name = env.player.mainSkill.activeEffect.grantedEffect.name,
Speed = env.player.output.Speed,
HitChance = env.player.output.HitChance,
PreEffectiveCritChance = env.player.output.PreEffectiveCritChance,
CritChance = env.player.output.CritChance,
CombinedDPS = env.player.output.CombinedDPS,
ActiveSkill = env.player.mainSkill,
Env = env,
}
if not env.dontCache then
cacheData(uuid, env)
end
if env.minion then
calcs.defence(env, env.minion)
calcs.offence(env, env.minion, env.minion.mainSkill)
uuid = cacheSkillUUID(env.player.mainSkill)
if not GlobalCache.cachedData[uuid].Minion and not env.dontCache then
GlobalCache.cachedData[uuid].Minion = {
Name = env.minion.mainSkill.activeEffect.grantedEffect.name,
Speed = env.minion.output.Speed,
HitChance = env.minion.output.HitChance,
PreEffectiveCritChance = env.minion.output.PreEffectiveCritChance,
CritChance = env.minion.output.CritChance,
CombinedDPS = env.player.output.CombinedDPS,
ActiveSkill = env.minion.mainSkill,
Env = env.minion,
}
if not env.dontCache then
cacheData(uuid, env)
end
end
end

View File

@@ -413,8 +413,7 @@ function calcs.buildOutput(build, mode)
-- ConPrintTable(env.enemyConditionsUsed)
-- ConPrintf("=== Enemy Mult ===")
-- ConPrintTable(env.enemyMultipliersUsed)
end
if mode == "CALCS" then
elseif mode == "CALCS" then
local buffList = { }
local combatList = { }
local curseList = { }

View File

@@ -589,10 +589,68 @@ function cacheSkillUUID(skill)
end
-- Global Cache related
function cacheData(uuid, env)
if not GlobalCache.cachedData[uuid] or (GlobalCache.cachedData[uuid] and (env.mode == "MAIN" or env.mode == "CALCS")) then
-- If we previously had global data, we are about to over-ride it, set tables to `nil` for Lua Garbage Collection
if GlobalCache.cachedData[uuid] and (env.mode == "MAIN" or env.mode == "CALCS") then
GlobalCache.cachedData[uuid].ActiveSkill = nil
GlobalCache.cachedData[uuid].Env = nil
end
GlobalCache.cachedData[uuid] = {
Name = env.player.mainSkill.activeEffect.grantedEffect.name,
Speed = env.player.output.Speed,
HitChance = env.player.output.HitChance,
PreEffectiveCritChance = env.player.output.PreEffectiveCritChance,
CritChance = env.player.output.CritChance,
CombinedDPS = env.player.output.CombinedDPS,
ActiveSkill = env.player.mainSkill,
Env = env,
}
ConPrintf("stored: " .. uuid .. " :: " .. tostring(GlobalCache.cachedData[uuid].CritChance))
if env.player.breakdown then
if GlobalCache.cachedData[uuid].Breakdown then
-- Since GlobalCache is global, set prior table to `nil` for Lua Garbage Collection
GlobalCache.cachedData[uuid].Breakdown = nil
end
GlobalCache.cachedData[uuid].Breakdown = env.player.breakdown
ConPrintf("Stored Breakdown: " .. tostring(GlobalCache.cachedData[uuid].Breakdown))
end
if env.minion then
-- If we previously had global data, we are about to over-ride it, set tables to `nil` for Lua Garbage Collection
if GlobalCache.cachedData[uuid].Minion and (env.mode == "MAIN" or env.mode == "CALCS") then
GlobalCache.cachedData[uuid].Minion.ActiveSkill = nil
GlobalCache.cachedData[uuid].Minion.Env = nil
end
GlobalCache.cachedData[uuid].Minion = {
Name = env.minion.mainSkill.activeEffect.grantedEffect.name,
Speed = env.minion.output.Speed,
HitChance = env.minion.output.HitChance,
PreEffectiveCritChance = env.minion.output.PreEffectiveCritChance,
CritChance = env.minion.output.CritChance,
CombinedDPS = env.minion.output.CombinedDPS,
ActiveSkill = env.minion.mainSkill,
Env = env.minion,
}
if env.minion.breakdown then
if GlobalCache.cachedData[uuid].Minion.Breakdown then
-- Since GlobalCache is global, set prior table to `nil` for Lua Garbage Collection
GlobalCache.cachedData[uuid].Minion.Breakdown = nil
end
GlobalCache.cachedData[uuid].Minion.Breakdown = env.minion.breakdown
ConPrintf("Stored Minion Breakdown: " .. tostring(GlobalCache.cachedData[uuid].Minion.Breakdown))
end
end
end
end
-- Full DPS related: add to roll-up exclusion list
-- this is for skills that are used by Mirage Warriors for example
function addToFullDpsExclusionList(skill)
GlobalCache.excludeFullDpsList[cacheSkillUUID(skill)] = true
end
-- Full DPS related: check if skill is in roll-up exclusion list
function isExcludedFromFullDps(skill)
return GlobalCache.excludeFullDpsList[cacheSkillUUID(skill)]
end