diff --git a/env/translations_deDE.lua b/env/translations_deDE.lua
index 5c396a6f..9677fac2 100644
--- a/env/translations_deDE.lua
+++ b/env/translations_deDE.lua
@@ -876,7 +876,6 @@ pfUI_translation["deDE"] = {
["XP Percentage"] = nil,
["Yellow Border On Neutral Units"] = nil,
["Yes"] = nil,
- ["You gain (.+) Mana from Totemic Recall"] = nil,
["You got"] = nil,
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = nil,
["Your items have been repaired for"] = nil,
diff --git a/env/translations_enUS.lua b/env/translations_enUS.lua
index 4e5e0841..e64092be 100644
--- a/env/translations_enUS.lua
+++ b/env/translations_enUS.lua
@@ -892,7 +892,6 @@ pfUI_translation["enUS"] = {
["XP Percentage"] = nil,
["Yellow Border On Neutral Units"] = nil,
["Yes"] = nil,
- ["You gain (.+) Mana from Totemic Recall"] = nil,
["You got"] = nil,
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = nil,
["Your items have been repaired for"] = nil,
diff --git a/env/translations_esES.lua b/env/translations_esES.lua
index 8b49120b..641761e0 100644
--- a/env/translations_esES.lua
+++ b/env/translations_esES.lua
@@ -876,7 +876,6 @@ pfUI_translation["esES"] = {
["XP Percentage"] = "Porcentaje de exp.",
["Yellow Border On Neutral Units"] = "Borde amarillo en unidades neutrales",
["Yes"] = "Sí",
- ["You gain (.+) Mana from Totemic Recall"] = nil,
["You got"] = "Obtienes",
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = "Ahora su interfaz está configurada.\n\nPara la configuración avanzada, abra la configuración |cff33ffccpf|rUI por el menú de escape o escriba \"|cffffffaa/pfui|r\" en el chat.",
["Your items have been repaired for"] = "Tus objetos se han reparado por",
diff --git a/env/translations_frFR.lua b/env/translations_frFR.lua
index 92194c6e..97116a3e 100644
--- a/env/translations_frFR.lua
+++ b/env/translations_frFR.lua
@@ -876,7 +876,6 @@ pfUI_translation["frFR"] = {
["XP Percentage"] = "Pourcentage de la barre d'expérience",
["Yellow Border On Neutral Units"] = "Bordure jaune sur les unités neutres",
["Yes"] = "Oui",
- ["You gain (.+) Mana from Totemic Recall"] = nil,
["You got"] = "Vous avez",
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = nil,
["Your items have been repaired for"] = "Vos objets ont été réparés pour",
diff --git a/env/translations_koKR.lua b/env/translations_koKR.lua
index 20767874..bd99c7f2 100644
--- a/env/translations_koKR.lua
+++ b/env/translations_koKR.lua
@@ -876,7 +876,6 @@ pfUI_translation["koKR"] = {
["XP Percentage"] = "경험치 퍼센트",
["Yellow Border On Neutral Units"] = nil,
["Yes"] = nil,
- ["You gain (.+) Mana from Totemic Recall"] = nil,
["You got"] = nil,
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = nil,
["Your items have been repaired for"] = nil,
diff --git a/env/translations_ruRU.lua b/env/translations_ruRU.lua
index 75cc7880..d7e8ce25 100644
--- a/env/translations_ruRU.lua
+++ b/env/translations_ruRU.lua
@@ -876,7 +876,6 @@ pfUI_translation["ruRU"] = {
["XP Percentage"] = "Процент опыта",
["Yellow Border On Neutral Units"] = "Желтые границы на нейтральных юнитах",
["Yes"] = "Да",
- ["You gain (.+) Mana from Totemic Recall"] = nil,
["You got"] = "Вы получили",
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = "Теперь ваш интерфейс настроен.\n\nДля расширенной настройки откройте \"Настройки |cff33ffccpf|rUI\" с помощью escape меню или введите \"|cffffffaa/pfui|r\" в чат.\n\nЖелаю хорошего путешествия!\n\n|cffaaaaaa- Shagu",
["Your items have been repaired for"] = "Ваши предметы были отремонтированы за",
diff --git a/env/translations_zhCN.lua b/env/translations_zhCN.lua
index b5a7716a..7a13a180 100644
--- a/env/translations_zhCN.lua
+++ b/env/translations_zhCN.lua
@@ -877,7 +877,6 @@ pfUI_translation["zhCN"] = {
["XP Percentage"] = "经验百分比",
["Yellow Border On Neutral Units"] = "显示中立单位黄色边框",
["Yes"] = "是",
- ["You gain (.+) Mana from Totemic Recall"] = "你从图腾召回获得了(.+)点法力值",
["You got"] = "你已得到",
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = "你的界面现在已经完成设置.高级设置请点击游戏菜单或者输入命令/pfui进行设置.祝您游戏愉快",
["Your items have been repaired for"] = "你的物品已经修好了",
diff --git a/env/translations_zhTW.lua b/env/translations_zhTW.lua
index c00ac6e4..48a9919d 100644
--- a/env/translations_zhTW.lua
+++ b/env/translations_zhTW.lua
@@ -876,7 +876,6 @@ pfUI_translation["zhTW"] = {
["XP Percentage"] = "經驗百分比",
["Yellow Border On Neutral Units"] = nil,
["Yes"] = nil,
- ["You gain (.+) Mana from Totemic Recall"] = nil,
["You got"] = nil,
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = "您的UI已經設置完畢.使用遊戲菜單或在聊天窗口輸入\"|cffffffaa/pfui|r\"開啟高級設置.祝您遊戲愉快!\n\n|cffaaaaaa- Shagu",
["Your items have been repaired for"] = "你的物品已經修好了",
diff --git a/init/libs.xml b/init/libs.xml
index 826a0c87..6b0abb56 100644
--- a/init/libs.xml
+++ b/init/libs.xml
@@ -5,7 +5,6 @@
-
diff --git a/libs/libdebuff.lua b/libs/libdebuff.lua
index 7187f51a..cd0da210 100644
--- a/libs/libdebuff.lua
+++ b/libs/libdebuff.lua
@@ -16,7 +16,7 @@ setfenv(1, pfUI:GetEnvironment())
-- non-player expirationTime). What remains in libdebuff is the cast-event
-- bookkeeping consumed by GetBestAuraCast (libpredict HoT tracking) and the
-- libdebuff_*_hooks broadcast surface (subscribers in actionbar / swingtimer
--- / libtotem react to SPELL_GO and SPELL_FAILED).
+-- react to SPELL_GO and SPELL_FAILED).
-- return instantly when another libdebuff is already active
if pfUI.api.libdebuff then return end
diff --git a/libs/libtotem.lua b/libs/libtotem.lua
deleted file mode 100644
index 5e1b87e8..00000000
--- a/libs/libtotem.lua
+++ /dev/null
@@ -1,275 +0,0 @@
--- load pfUI environment
-setfenv(1, pfUI:GetEnvironment())
-
---[[ libtotem ]]--
--- A pfUI library that tries to emulate the TotemAPI that was introduced in Patch 2.4.
--- It detects and saves all current totems of the player and returns information based
--- on the totem slot ID. The function GetTotemInfo is supposed to work as it would
--- on later expansions.
---
--- GetTotemInfo(id)
--- Returns totem informations on the givent totem slot
--- active, name, start, duration, icon
-
--- return instantly when another libtotem is already active
-if pfUI.api.libtotem then return end
-
-MAX_TOTEMS = MAX_TOTEMS or 4
-FIRE_TOTEM_SLOT = FIRE_TOTEM_SLOT or 1
-EARTH_TOTEM_SLOT = EARTH_TOTEM_SLOT or 2
-WATER_TOTEM_SLOT = WATER_TOTEM_SLOT or 3
-AIR_TOTEM_SLOT = AIR_TOTEM_SLOT or 4
-
-local _, class = UnitClass("player")
-
-local libtotem
-local active = { [1] = {}, [2] = {}, [3] = {}, [4] = {} }
-
--- SpellID -> { slot, duration } mapping
--- rank-specific durations are handled via spellId directly
-local spellids = {
- -- FIRE (slot 1)
- [1535] = { slot = FIRE_TOTEM_SLOT, duration = 5 }, -- Fire Nova Totem R1
- [8498] = { slot = FIRE_TOTEM_SLOT, duration = 5 }, -- Fire Nova Totem R2
- [8499] = { slot = FIRE_TOTEM_SLOT, duration = 5 }, -- Fire Nova Totem R3
- [11314] = { slot = FIRE_TOTEM_SLOT, duration = 5 }, -- Fire Nova Totem R4
- [11315] = { slot = FIRE_TOTEM_SLOT, duration = 5 }, -- Fire Nova Totem R5
- [8227] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Flametongue Totem R1
- [8249] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Flametongue Totem R2
- [10526] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Flametongue Totem R3
- [16387] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Flametongue Totem R4
- [8184] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Frost Resistance Totem R1
- [10478] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Frost Resistance Totem R2
- [10479] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Frost Resistance Totem R3
- [8190] = { slot = FIRE_TOTEM_SLOT, duration = 20 }, -- Magma Totem R1
- [10585] = { slot = FIRE_TOTEM_SLOT, duration = 20 }, -- Magma Totem R2
- [10586] = { slot = FIRE_TOTEM_SLOT, duration = 20 }, -- Magma Totem R3
- [10587] = { slot = FIRE_TOTEM_SLOT, duration = 20 }, -- Magma Totem R4
- [3599] = { slot = FIRE_TOTEM_SLOT, duration = 30 }, -- Searing Totem R1
- [6363] = { slot = FIRE_TOTEM_SLOT, duration = 35 }, -- Searing Totem R2
- [6364] = { slot = FIRE_TOTEM_SLOT, duration = 40 }, -- Searing Totem R3
- [6365] = { slot = FIRE_TOTEM_SLOT, duration = 45 }, -- Searing Totem R4
- [10437] = { slot = FIRE_TOTEM_SLOT, duration = 50 }, -- Searing Totem R5
- [10438] = { slot = FIRE_TOTEM_SLOT, duration = 55 }, -- Searing Totem R6
-
- -- EARTH (slot 2)
- [2484] = { slot = EARTH_TOTEM_SLOT, duration = 45 }, -- Earthbind Totem
- [5730] = { slot = EARTH_TOTEM_SLOT, duration = 15 }, -- Stoneclaw Totem R1
- [6390] = { slot = EARTH_TOTEM_SLOT, duration = 15 }, -- Stoneclaw Totem R2
- [6391] = { slot = EARTH_TOTEM_SLOT, duration = 15 }, -- Stoneclaw Totem R3
- [6392] = { slot = EARTH_TOTEM_SLOT, duration = 15 }, -- Stoneclaw Totem R4
- [10427] = { slot = EARTH_TOTEM_SLOT, duration = 15 }, -- Stoneclaw Totem R5
- [10428] = { slot = EARTH_TOTEM_SLOT, duration = 15 }, -- Stoneclaw Totem R6
- [8071] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Stoneskin Totem R1
- [8154] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Stoneskin Totem R2
- [8155] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Stoneskin Totem R3
- [10406] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Stoneskin Totem R4
- [10407] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Stoneskin Totem R5
- [10408] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Stoneskin Totem R6
- [8075] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Strength of Earth Totem R1
- [8160] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Strength of Earth Totem R2
- [8161] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Strength of Earth Totem R3
- [10442] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Strength of Earth Totem R4
- [25361] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Strength of Earth Totem R5
- [8143] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Tremor Totem
-
- -- WATER (slot 3)
- [8170] = { slot = WATER_TOTEM_SLOT, duration = 120 }, -- Disease Cleansing Totem
- [8185] = { slot = WATER_TOTEM_SLOT, duration = 120 }, -- Fire Resistance Totem R1
- [10537] = { slot = WATER_TOTEM_SLOT, duration = 120 }, -- Fire Resistance Totem R2
- [10538] = { slot = WATER_TOTEM_SLOT, duration = 120 }, -- Fire Resistance Totem R3
- [5394] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Healing Stream Totem R1
- [6375] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Healing Stream Totem R2
- [6377] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Healing Stream Totem R3
- [10462] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Healing Stream Totem R4
- [10463] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Healing Stream Totem R5
- [5675] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Mana Spring Totem R1
- [10495] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Mana Spring Totem R2
- [10496] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Mana Spring Totem R3
- [10497] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Mana Spring Totem R4
- [16190] = { slot = WATER_TOTEM_SLOT, duration = 12 }, -- Mana Tide Totem
- [8166] = { slot = WATER_TOTEM_SLOT, duration = 120 }, -- Poison Cleansing Totem
-
- -- AIR (slot 4)
- [8835] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Grace of Air Totem R1
- [10627] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Grace of Air Totem R2
- [8177] = { slot = AIR_TOTEM_SLOT, duration = 45 }, -- Grounding Totem
- [10595] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Nature Resistance Totem R1
- [10600] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Nature Resistance Totem R2
- [10601] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Nature Resistance Totem R3
- [25359] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Tranquil Air Totem
- [8512] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Windfury Totem R1
- [10613] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Windfury Totem R2
- [10614] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Windfury Totem R3
- [15107] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Windwall Totem R1
- [15421] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Windwall Totem R2
- [15422] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Windwall Totem R3
-}
-
--- icon-based fallback table (used by CastSpell/UseAction hooks that don't have spellId)
-local totems = {
- [FIRE_TOTEM_SLOT] = {
- ["Spell_Fire_SealOfFire"] = {[-1] = 5},
- ["Spell_Nature_GuardianWard"] = {[-1] = 120},
- ["Spell_FrostResistanceTotem_01"] = {[-1] = 120},
- ["Spell_Fire_SelfDestruct"] = {[-1] = 20},
- ["Spell_Fire_SearingTotem"] = {[-1] = 55,[1] = 30,[2] = 35,[3] = 40,[4] = 45,[5] = 50,[6] = 55},
- },
- [EARTH_TOTEM_SLOT] = {
- ["Spell_Nature_StrengthOfEarthTotem02"] = {[-1] = 45},
- ["Spell_Nature_StoneClawTotem"] = {[-1] = 15},
- ["Spell_Nature_StoneSkinTotem"] = {[-1] = 120},
- ["Spell_Nature_EarthBindTotem"] = {[-1] = 120},
- ["Spell_Nature_TremorTotem"] = {[-1] = 120},
- },
- [WATER_TOTEM_SLOT] = {
- ["Spell_Nature_DiseaseCleansingTotem"] = {[-1] = 120},
- ["Spell_FireResistanceTotem_01"] = {[-1] = 120},
- ["INV_Spear_04"] = {[-1] = 60},
- ["Spell_Nature_ManaRegenTotem"] = {[-1] = 60},
- ["Spell_Frost_SummonWaterElemental"] = {[-1] = 12},
- ["Spell_Nature_PoisonCleansingTotem"] = {[-1] = 120},
- },
- [AIR_TOTEM_SLOT] = {
- ["Spell_Nature_InvisibilityTotem"] = {[-1] = 120},
- ["Spell_Nature_GroundingTotem"] = {[-1] = 45},
- ["Spell_Nature_NatureResistanceTotem"] = {[-1] = 120},
- ["Spell_Nature_Brilliance"] = {[-1] = 120},
- ["Spell_Nature_Windfury"] = {[-1] = 120},
- ["Spell_Nature_EarthBind"] = {[-1] = 120},
- },
-}
-
-GetTotemInfo = function(id)
- if not active[id] or not active[id].name then return end
- if active[id].start + active[id].duration - GetTime() < 0 then
- libtotem:Clean(id)
- return nil
- end
- return 1, active[id].name, active[id].start, active[id].duration, active[id].icon
-end
-
-if class ~= "SHAMAN" then return end
-
-libtotem = CreateFrame("Frame")
-libtotem:RegisterEvent("PLAYER_DEAD")
-libtotem:SetScript("OnEvent", function()
- if event == "PLAYER_DEAD" then
- for i = 1, 4 do libtotem:Clean(i) end
- end
-end)
-
-libtotem.totems = totems
-
-libtotem.Clean = function(self, slot)
- active[slot].name = nil
- active[slot].start = nil
- active[slot].duration = nil
- active[slot].icon = nil
-end
-
--- Direct SpellID commit (Nampower SPELL_GO_SELF, most accurate)
-libtotem.CommitBySpellId = function(spellId, icon)
- local data = spellids[spellId]
- if not data then return false end
- local slot = data.slot
- active[slot].name = active[slot].pending_name or active[slot].name
- active[slot].duration = data.duration
- active[slot].icon = icon or active[slot].pending_icon
- active[slot].start = GetTime()
- active[slot].pending_name = nil
- active[slot].pending_icon = nil
- return true
-end
-
--- Fallback: icon-based lookup (for CastSpell/UseAction without spellId)
-libtotem.CheckAddQueue = function(self, name, rank, icon, spellId)
- -- if we have a spellId, just store the name/icon as pending for SPELL_GO
- if spellId and spellids[spellId] then
- local slot = spellids[spellId].slot
- active[slot].pending_name = name
- active[slot].pending_icon = icon
- return true
- end
-
- -- icon-based fallback
- for slot = 1, 4 do
- for texture, data in pairs(totems[slot]) do
- if string.find(icon, texture, 1) then
- if rank then
- _, _, rank = string.find(rank, "%s(%d+)")
- end
- local duration
- if rank and tonumber(rank) and data[tonumber(rank)] then
- duration = data[tonumber(rank)]
- else
- duration = data[-1]
- end
- active[slot].pending_name = name
- active[slot].pending_icon = icon
- active[slot].pending_duration = duration
- return true
- end
- end
- end
- return nil
-end
-
--- assign library to global space
-pfUI.api.libtotem = libtotem
-
--- SPELL_GO_SELF from libdebuff: commit directly by SpellID, no queue needed
-pfUI.libdebuff_spell_go_hooks = pfUI.libdebuff_spell_go_hooks or {}
-pfUI.libdebuff_spell_go_hooks["libtotem"] = function(spellId)
- if not spellId then return end
- local data = spellids[spellId]
- if not data then return end
- local slot = data.slot
- -- use pending name/icon if available (set by CastSpellByName hook), else GetSpellInfo
- local name = active[slot].pending_name
- local icon = active[slot].pending_icon
- if not name then
- name = C_Spell.GetSpellName(spellId)
- end
- active[slot].name = name
- active[slot].duration = data.duration
- active[slot].icon = icon
- active[slot].start = GetTime()
- active[slot].pending_name = nil
- active[slot].pending_icon = nil
- active[slot].pending_duration = nil
-end
-
--- Hook CastSpellByName to store pending name/icon per slot
-hooksecurefunc("CastSpellByName", function(effect, target)
- local name, rank, icon, _, _, _, spellId = libspell.GetSpellInfo(effect)
- if not name then return end
- libtotem:CheckAddQueue(name, rank, icon, spellId)
-end)
-
--- Hook CastSpell to store pending name/icon per slot
-hooksecurefunc("CastSpell", function(id, bookType)
- if not id or not bookType then return end
- if bookType ~= BOOKTYPE_SPELL and bookType ~= BOOKTYPE_PET then return end
- local name, rank, icon, _, _, _, spellId = libspell.GetSpellInfo(id, bookType)
- if not name then return end
- libtotem:CheckAddQueue(name, rank, icon, spellId)
-end)
-
--- Hook UseAction. GetActionInfo + GetMacroSpell give us the spellID
--- directly for both spell-action and macro-action slots, so the
--- tooltip-scan fallback (and the "no spellId available" caveat) goes away.
-hooksecurefunc("UseAction", function(slot, target, selfcast)
- if not IsCurrentAction(slot) then return end
- local kind, id = GetActionInfo(slot)
- local name, rank, spellID
- if kind == "spell" then
- spellID = id
- local spellInfo = C_Spell.GetSpellInfo(id)
- name, rank = spellInfo.name, spellInfo.rank
- elseif kind == "macro" then
- name, rank, spellID = GetMacroSpell(id)
- end
- if not name then return end
- libtotem:CheckAddQueue(name, rank, GetActionTexture(slot), spellID)
-end)
\ No newline at end of file
diff --git a/modules/totems.lua b/modules/totems.lua
index df56e103..7825f711 100644
--- a/modules/totems.lua
+++ b/modules/totems.lua
@@ -1,6 +1,4 @@
pfUI:RegisterModule("totems", function ()
- local _, class = UnitClass("player")
-
local slots = {
[FIRE_TOTEM_SLOT] = { r = .5, g = .2, b = .1 },
[EARTH_TOTEM_SLOT] = { r = .2, g = .4, b = .1 },
@@ -15,43 +13,44 @@ pfUI:RegisterModule("totems", function ()
totems:RefreshList()
end)
- if class == "SHAMAN" then
- -- there's no totem event in vanilla using ticks instead
- local eventemu = CreateFrame("Frame")
- eventemu:SetScript("OnUpdate", function()
- if ( this.tick or 1) > GetTime() then return else this.tick = GetTime() + .5 end
- totems:RefreshList()
- end)
- end
-
totems.OnEnter = function(self)
if not this.id then return end
- local active, name, start, duration, icon = GetTotemInfo(this.id)
- if not name or not active then return end -- Prüfen ob name gültig ist
+ -- native GetTotemInfo's 1st return is tool presence, not "summoned";
+ -- a live totem shows a non-empty name / non-zero start.
+ local _, name = GetTotemInfo(this.id)
+ if not name or name == "" then return end
local color = slots[this.id]
GameTooltip:SetOwner(this, "ANCHOR_LEFT")
GameTooltip:SetText(name, color.r+.2, color.g+.2, color.b+.2)
+ local timeleft = GetTotemTimeLeft(this.id)
+ if timeleft and timeleft > 0 then
+ GameTooltip:AddLine(string.format("%d:%02d", floor(timeleft/60), floor(mod(timeleft, 60))), 1, 1, 1)
+ end
GameTooltip:Show()
-end
+ end
totems.OnLeave = function(self)
GameTooltip:Hide()
end
totems.OnClick = function(self)
- if this.id and arg1 and arg1 == "LeftButton" then
- -- Try to recast totem on left click
- local active, name, start, duration, icon = GetTotemInfo(this.id)
- if name then CastSpellByName(name) end
+ if not this.id then return end
+ if arg1 == "LeftButton" then
+ -- recast the totem on left click
+ local _, name = GetTotemInfo(this.id)
+ if name and name ~= "" then CastSpellByName(name) end
+ elseif arg1 == "RightButton" then
+ -- target the totem on right click
+ TargetTotem(this.id)
end
end
totems.RefreshList = function(self)
local count = 0
for i = 1, MAX_TOTEMS do
- local active, name, start, duration, icon = GetTotemInfo(i)
+ local _, _, start, duration, icon = GetTotemInfo(i)
- if active and icon and icon ~= "" then
+ if start and start > 0 and icon and icon ~= "" then
count = count + 1
local color = slots[i]
diff --git a/modules/turtle-wow.lua b/modules/turtle-wow.lua
index ace2b27c..8937735f 100644
--- a/modules/turtle-wow.lua
+++ b/modules/turtle-wow.lua
@@ -86,18 +86,6 @@ pfUI:RegisterModule("turtle-wow", function ()
L["debuffs"]['Moonfire'] = {[1]=9.0,[2]=18.0,[3]=18.0,[4]=18.0,[5]=18.0,[6]=18.0,[7]=18.0,[8]=18.0,[9]=18.0,[10]=18.0,[0]=18.0}
L["debuffs"]['Deep Wound'] = {[0]=6.0}
- -- turtle wow totemic recall clear totem indicators
- local _, class = UnitClass("player")
- if libtotem and class == "SHAMAN" then
- local trecall = CreateFrame("Frame", "pfTotemsRecall", UIParent)
- trecall:RegisterEvent("CHAT_MSG_SPELL_SELF_BUFF")
- trecall:SetScript("OnEvent", function()
- if arg1 and string.find(arg1, T["You gain (.+) Mana from Totemic Recall"]) then
- for i = 1, 4 do libtotem:Clean(i) end
- end
- end)
- end
-
local delay = CreateFrame("Frame")
delay:SetScript("OnUpdate", function()
this:Hide()