Index: binaries/data/mods/public/gui/common/tooltips.js
===================================================================
--- binaries/data/mods/public/gui/common/tooltips.js
+++ binaries/data/mods/public/gui/common/tooltips.js
@@ -373,46 +373,200 @@
function getStatusEffectsTooltip(template)
{
- let tooltipAttributes = [];
- let tooltipString = "";
+ let tooltipAttributes;
if (template.Tooltip)
{
- tooltipAttributes.push("%(tooltip)s");
- tooltipString = translate(template.Tooltip);
+ if (template.Damage || template.Capture)
+ {
+ if (template.Interval)
+ {
+ if (template.Duration)
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s, %(effects)s, %(interval)s, %(duration)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s %(effects)s %(interval)s %(duration)s");
+ }
+ else
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s, %(effects)s, %(interval)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s, %(effects)s, %(interval)s");
+ }
+ }
+ else
+ {
+ if (template.Duration)
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s, %(effects)s, %(duration)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s, %(effects)s, %(duration)s");
+ }
+ else
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s, %(effects)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s, %(effects)s");
+ }
+ }
+ }
+ else
+ {
+ if (template.Interval)
+ {
+ if (template.Duration)
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s, %(interval)s, %(duration)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s, %(interval)s, %(duration)s");
+ }
+ else
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s, %(interval)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s, %(interval)s");
+ }
+ }
+ else
+ {
+ if (template.Duration)
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s, %(duration)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s, %(duration)s");
+ }
+ else
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(tooltip)s");
+ }
+ }
+ }
}
-
- let attackEffectsString = "";
- if (template.Damage || template.Capture)
+ else
{
- tooltipAttributes.push("%(effects)s");
- attackEffectsString = attackEffectsDetails(template);
+ if (template.Damage || template.Capture)
+ {
+ if (template.Interval)
+ {
+ if (template.Duration)
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(effects)s, %(interval)s, %(duration)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(effects)s, %(interval)s, %(duration)s");
+ }
+ else
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(effects)s, %(interval)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(effects)s, %(interval)s");
+ }
+ }
+ else
+ {
+ if (template.Duration)
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(effects)s, %(duration)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(effects)s, %(duration)s");
+ }
+ else
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(effects)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(effects)s");
+ }
+ }
+ }
+ else
+ {
+ if (template.Interval)
+ {
+ if (template.Duration)
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(interval)s, %(duration)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(interval)s, %(duration)s");
+ }
+ else
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(interval)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(interval)s");
+ }
+ }
+ else
+ {
+ if (template.Duration)
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s: %(duration)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s: %(duration)s");
+ }
+ else
+ {
+ if (template.Stackability && template.Stackability != "Ignore")
+ tooltipAttributes = translate("%(statusName)s %(stackability)s");
+ else
+ tooltipAttributes = translate("%(statusName)s");
+ }
+ }
+ }
}
- let intervalString = "";
- if (template.Interval)
- {
- tooltipAttributes.push("%(rate)s");
- intervalString = sprintf(translate("%(interval)s"), {
- "interval": attackRateDetails(+template.Interval)
- });
- }
+ return sprintf(tooltipAttributes, {
+ "statusName": headerFont(translateWithContext("status effect", template.Name)),
+ "tooltip": template.Tooltip ? translate(template.Tooltip) : "",
+ "effects": attackEffectsDetails(template),
+ "interval": attackRateDetails(+template.Interval),
+ "duration": getStatusEffectDurationTooltip(template),
+ "stackability": getStatusEffectStackabilityTooltip(template)
+ });
+}
- let durationString = "";
- if (template.Duration)
- {
- tooltipAttributes.push("%(duration)s");
- durationString = sprintf(translate("%(durName)s: %(duration)s"), {
- "durName": headerFont(translate("Duration")),
- "duration": getSecondsString((template._timeElapsed ? +template.Duration - template._timeElapsed : +template.Duration) / 1000),
- });
- }
+function getStatusEffectDurationTooltip(template)
+{
+ if (!template.Duration)
+ return "";
- return sprintf(translate("%(statusName)s: " + tooltipAttributes.join(translate(commaFont(", ")))), {
- "statusName": headerFont(translateWithContext("status effect", template.Name)),
- "tooltip": tooltipString,
- "effects": attackEffectsString,
- "rate": intervalString,
- "duration": durationString
+ return sprintf(translate("%(durName)s: %(duration)s"), {
+ "durName": headerFont(translate("Duration")),
+ "duration": getSecondsString((template._timeElapsed ?
+ +template.Duration - template._timeElapsed :
+ +template.Duration) / 1000)
+ });
+}
+
+function getStatusEffectStackabilityTooltip(template)
+{
+ if (!template.Stackability || template.Stackability == "Ignore")
+ return "";
+
+ let stackabilityString = "";
+ if (template.Stackability == "Extend")
+ stackabilityString = translateWithContext("status effect stackability", "(extends)");
+ else if (template.Stackability == "Replace")
+ stackabilityString = translateWithContext("status effect stackability", "(replaces)");
+ else if (template.Stackability == "Stack")
+ stackabilityString = translateWithContext("status effect stackability", "(stacks)");
+
+ return sprintf(translate("%(stackability)s"), {
+ "stackability": stackabilityString
});
}
Index: binaries/data/mods/public/gui/session/selection_details.js
===================================================================
--- binaries/data/mods/public/gui/session/selection_details.js
+++ binaries/data/mods/public/gui/session/selection_details.js
@@ -108,7 +108,9 @@
size.top = i * 18;
size.bottom = i * 18 + 16;
statusIcons[i].size = size;
- i++;
+
+ if (++i >= statusIcons.length)
+ break;
}
for (; i < statusIcons.length; ++i)
statusIcons[i].hidden = true;
Index: binaries/data/mods/public/gui/session/selection_panels_middle/single_details_area.xml
===================================================================
--- binaries/data/mods/public/gui/session/selection_panels_middle/single_details_area.xml
+++ binaries/data/mods/public/gui/session/selection_panels_middle/single_details_area.xml
@@ -83,7 +83,7 @@
Rank
-
+