Add mixed damage lifesteal optimization target
This commit is contained in:
@@ -22,7 +22,7 @@ const PROFILE_IDS = Object.freeze({ LIFESTEAL: "lifesteal", REGEN: "regen" });
|
||||
const COMBAT_STYLES = Object.freeze({ MELEE: "melee", RANGED: "ranged", SKILL: "skill" });
|
||||
const PIECE_TYPES = Object.freeze({ ITEM: "item", MOUNT: "mount", PET: "pet", SKILL: "skill" });
|
||||
const REPLACEMENT_TARGETS = Object.freeze({ MOUNT: "mount", PET: "pet" });
|
||||
const OPTIMIZATION_TARGETS = Object.freeze({ DAMAGE: "damage", LIFESTEAL_REGEN: "lifestealRegen" });
|
||||
const OPTIMIZATION_TARGETS = Object.freeze({ DAMAGE: "damage", LIFESTEAL_REGEN: "lifestealRegen", DAMAGE_LIFESTEAL_MIX: "damageLifestealMix" });
|
||||
|
||||
const PROFILES = {
|
||||
[PROFILE_IDS.LIFESTEAL]: {
|
||||
@@ -667,7 +667,7 @@ function renderEffectTotals(totals, currentDps, currentSurvivability) {
|
||||
|
||||
function getDamageOptimizationEffectIds(combatStyle, optimizationTarget = OPTIMIZATION_TARGETS.DAMAGE) {
|
||||
const ids = ["critChance", "critDamage", "doubleChance", "damage", "attackSpeed"];
|
||||
if (optimizationTarget === OPTIMIZATION_TARGETS.LIFESTEAL_REGEN) ids.push("lifesteal");
|
||||
if ([OPTIMIZATION_TARGETS.LIFESTEAL_REGEN, OPTIMIZATION_TARGETS.DAMAGE_LIFESTEAL_MIX].includes(optimizationTarget)) ids.push("lifesteal");
|
||||
if (combatStyle === COMBAT_STYLES.RANGED) ids.push("rangedDamage");
|
||||
else if (combatStyle === COMBAT_STYLES.SKILL) ids.push("skillDamage", "skillCooldown");
|
||||
else ids.push("meleeDamage");
|
||||
@@ -696,12 +696,14 @@ function createEmptyEffectTotals() {
|
||||
|
||||
function calculateOptimizationMetric(candidateTotals, combatStyle, optimizationTarget) {
|
||||
const dps = calculateDps(candidateTotals, combatStyle);
|
||||
return optimizationTarget === OPTIMIZATION_TARGETS.LIFESTEAL_REGEN
|
||||
? calculateRegenDetails(candidateTotals, dps).lifesteal
|
||||
: dps;
|
||||
const lifestealRegen = calculateRegenDetails(candidateTotals, dps).lifesteal;
|
||||
if (optimizationTarget === OPTIMIZATION_TARGETS.LIFESTEAL_REGEN) return lifestealRegen;
|
||||
if (optimizationTarget === OPTIMIZATION_TARGETS.DAMAGE_LIFESTEAL_MIX) return (2 * dps) + lifestealRegen;
|
||||
return dps;
|
||||
}
|
||||
|
||||
function getOptimizationMetricLabel(optimizationTarget) {
|
||||
if (optimizationTarget === OPTIMIZATION_TARGETS.DAMAGE_LIFESTEAL_MIX) return "Optimal weighted score";
|
||||
return optimizationTarget === OPTIMIZATION_TARGETS.LIFESTEAL_REGEN ? "Optimal lifesteal regen" : "Optimal DPS";
|
||||
}
|
||||
|
||||
@@ -758,9 +760,7 @@ function renderEffectComparisonRows(optimumCounts, currentSummary) {
|
||||
function renderOptimalDamageSetup(totals, currentDps) {
|
||||
const effectCount = countActiveEffects();
|
||||
const optimum = findOptimalDamageSetup(totals, effectCount, state.combatStyle, state.optimizationTarget);
|
||||
const currentMetric = state.optimizationTarget === OPTIMIZATION_TARGETS.LIFESTEAL_REGEN
|
||||
? calculateRegenDetails(totals, currentDps).lifesteal
|
||||
: currentDps;
|
||||
const currentMetric = calculateOptimizationMetric(totals, state.combatStyle, state.optimizationTarget);
|
||||
const delta = percentChange(currentMetric, optimum.metric);
|
||||
const currentEffectSummary = summarizeCurrentEffects();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user