moved caching to Common; added GC-related ensurement
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 = { }
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user