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()