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 COMBAT_STYLES = Object.freeze({ MELEE: "melee", RANGED: "ranged", SKILL: "skill" });
|
||||||
const PIECE_TYPES = Object.freeze({ ITEM: "item", MOUNT: "mount", PET: "pet", 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 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 = {
|
const PROFILES = {
|
||||||
[PROFILE_IDS.LIFESTEAL]: {
|
[PROFILE_IDS.LIFESTEAL]: {
|
||||||
@@ -667,7 +667,7 @@ function renderEffectTotals(totals, currentDps, currentSurvivability) {
|
|||||||
|
|
||||||
function getDamageOptimizationEffectIds(combatStyle, optimizationTarget = OPTIMIZATION_TARGETS.DAMAGE) {
|
function getDamageOptimizationEffectIds(combatStyle, optimizationTarget = OPTIMIZATION_TARGETS.DAMAGE) {
|
||||||
const ids = ["critChance", "critDamage", "doubleChance", "damage", "attackSpeed"];
|
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");
|
if (combatStyle === COMBAT_STYLES.RANGED) ids.push("rangedDamage");
|
||||||
else if (combatStyle === COMBAT_STYLES.SKILL) ids.push("skillDamage", "skillCooldown");
|
else if (combatStyle === COMBAT_STYLES.SKILL) ids.push("skillDamage", "skillCooldown");
|
||||||
else ids.push("meleeDamage");
|
else ids.push("meleeDamage");
|
||||||
@@ -696,12 +696,14 @@ function createEmptyEffectTotals() {
|
|||||||
|
|
||||||
function calculateOptimizationMetric(candidateTotals, combatStyle, optimizationTarget) {
|
function calculateOptimizationMetric(candidateTotals, combatStyle, optimizationTarget) {
|
||||||
const dps = calculateDps(candidateTotals, combatStyle);
|
const dps = calculateDps(candidateTotals, combatStyle);
|
||||||
return optimizationTarget === OPTIMIZATION_TARGETS.LIFESTEAL_REGEN
|
const lifestealRegen = calculateRegenDetails(candidateTotals, dps).lifesteal;
|
||||||
? calculateRegenDetails(candidateTotals, dps).lifesteal
|
if (optimizationTarget === OPTIMIZATION_TARGETS.LIFESTEAL_REGEN) return lifestealRegen;
|
||||||
: dps;
|
if (optimizationTarget === OPTIMIZATION_TARGETS.DAMAGE_LIFESTEAL_MIX) return (2 * dps) + lifestealRegen;
|
||||||
|
return dps;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getOptimizationMetricLabel(optimizationTarget) {
|
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";
|
return optimizationTarget === OPTIMIZATION_TARGETS.LIFESTEAL_REGEN ? "Optimal lifesteal regen" : "Optimal DPS";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -758,9 +760,7 @@ function renderEffectComparisonRows(optimumCounts, currentSummary) {
|
|||||||
function renderOptimalDamageSetup(totals, currentDps) {
|
function renderOptimalDamageSetup(totals, currentDps) {
|
||||||
const effectCount = countActiveEffects();
|
const effectCount = countActiveEffects();
|
||||||
const optimum = findOptimalDamageSetup(totals, effectCount, state.combatStyle, state.optimizationTarget);
|
const optimum = findOptimalDamageSetup(totals, effectCount, state.combatStyle, state.optimizationTarget);
|
||||||
const currentMetric = state.optimizationTarget === OPTIMIZATION_TARGETS.LIFESTEAL_REGEN
|
const currentMetric = calculateOptimizationMetric(totals, state.combatStyle, state.optimizationTarget);
|
||||||
? calculateRegenDetails(totals, currentDps).lifesteal
|
|
||||||
: currentDps;
|
|
||||||
const delta = percentChange(currentMetric, optimum.metric);
|
const delta = percentChange(currentMetric, optimum.metric);
|
||||||
const currentEffectSummary = summarizeCurrentEffects();
|
const currentEffectSummary = summarizeCurrentEffects();
|
||||||
|
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
<select id="optimizationTarget">
|
<select id="optimizationTarget">
|
||||||
<option value="damage">Raw damage</option>
|
<option value="damage">Raw damage</option>
|
||||||
<option value="lifestealRegen">Lifesteal regen</option>
|
<option value="lifestealRegen">Lifesteal regen</option>
|
||||||
|
<option value="damageLifestealMix">2x damage + 1x lifesteal</option>
|
||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user