OctoWoW gives each totem element its own global cooldown category
(Fire 105, Earth 106, Water 107, Air 108), so one totem per element can
be cast at the same time. ThrowSet still stopped after the first totem
it cast, as it had to when all totems shared one global cooldown, so
"/coe throwset" dropped one totem per key press.
- ThrowSet casts every ready, not yet thrown totem of the active set.
- A second press within 1 second skips totems whose cast is not yet
confirmed, so a double press does not drop them again.
"/coe restartset" clears this.
- Each element gets its own pending timeout. They shared one name, so
casting several at once replaced the earlier timeouts.
GetTotemDurationAndHealth reads the totem description from tooltip line 5.
When that line was empty it returned only duration and health, so the
three-value assignment in ScanTotems left the rank's Cooldown nil, and
dropping that totem failed in ActivateTotem with
"COE_TotemLogic.lua:776: attempt to compare number with nil".
- Always return duration, health and cooldown.
- When line 5 is empty, read the description from the last tooltip line.
It moves up when the tooltip is shorter, e.g. without the "Tools:" line
while the totem item is not in the item cache.
- Clear line 5 before SetSpell so a shorter tooltip cannot reuse the
previous totem's text.
ScanTotems reads each totem's element from the "Tools: <Element> Totem"
tooltip line. That line names the totem item, so it stays incomplete until
the item is in the client's item cache (WDB). The OctoWoW launcher clears
WDB on every launch by default, so the login scan left every element empty
and casting any totem failed in SetPendingTotem with
"COE_TotemLogic.lua:645: attempt to index field '?' (a nil value)".
- Fall back to a table of the English totem names when the tooltip gives
no element.
- Leave out spells that only have "Totem" in their name and no element
(e.g. "Change Appearance: Mark of the Grim Totem"); they were treated as
totems and hit the same error even with a warm cache.
- SetPendingTotem skips a totem without a known element instead of erroring.
Pending totem logic was only storing the latest pending totem. Refactored it to have a pending totem for each element type so that they do not overwrite when using throwset.