You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
439 lines
12 KiB
439 lines
12 KiB
|
2 years ago
|
local _;
|
||
|
|
|
||
|
|
local VUHDO_IS_SMART_CAST = false;
|
||
|
|
|
||
|
|
local SecureButton_GetButtonSuffix = SecureButton_GetButtonSuffix;
|
||
|
|
local InCombatLockdown = InCombatLockdown;
|
||
|
|
local strlower = strlower;
|
||
|
|
local strfind = strfind;
|
||
|
|
local pairs = pairs;
|
||
|
|
local GameTooltip = GameTooltip;
|
||
|
|
|
||
|
|
local sMouseoverUnit = nil;
|
||
|
|
|
||
|
|
|
||
|
|
local VUHDO_updateBouquetsForEvent;
|
||
|
|
local VUHDO_highlightClusterFor;
|
||
|
|
local VUHDO_showTooltip;
|
||
|
|
local VUHDO_hideTooltip;
|
||
|
|
local VUHDO_resetClusterUnit;
|
||
|
|
local VUHDO_removeAllClusterHighlights;
|
||
|
|
local VUHDO_getHealthBar;
|
||
|
|
local VUHDO_setupSmartCast;
|
||
|
|
local VUHDO_updateDirectionFrame;
|
||
|
|
local VUHDO_getCurrentKeyModifierString;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
local VUHDO_SPELL_CONFIG;
|
||
|
|
local VUHDO_SPELL_ASSIGNMENTS;
|
||
|
|
local VUHDO_getUnitButtonsSafe;
|
||
|
|
local VUHDO_CONFIG;
|
||
|
|
local VUHDO_INTERNAL_TOGGLES;
|
||
|
|
local VUHDO_RAID;
|
||
|
|
function VUHDO_actionEventHandlerInitLocalOverrides()
|
||
|
|
VUHDO_updateBouquetsForEvent = _G["VUHDO_updateBouquetsForEvent"];
|
||
|
|
VUHDO_highlightClusterFor = _G["VUHDO_highlightClusterFor"];
|
||
|
|
VUHDO_showTooltip = _G["VUHDO_showTooltip"];
|
||
|
|
VUHDO_hideTooltip = _G["VUHDO_hideTooltip"];
|
||
|
|
VUHDO_resetClusterUnit = _G["VUHDO_resetClusterUnit"];
|
||
|
|
VUHDO_removeAllClusterHighlights = _G["VUHDO_removeAllClusterHighlights"];
|
||
|
|
VUHDO_getHealthBar = _G["VUHDO_getHealthBar"];
|
||
|
|
VUHDO_setupSmartCast = _G["VUHDO_setupSmartCast"];
|
||
|
|
VUHDO_updateDirectionFrame = _G["VUHDO_updateDirectionFrame"];
|
||
|
|
VUHDO_getUnitButtonsSafe = _G["VUHDO_getUnitButtonsSafe"];
|
||
|
|
VUHDO_getCurrentKeyModifierString = _G["VUHDO_getCurrentKeyModifierString"];
|
||
|
|
|
||
|
|
VUHDO_SPELL_CONFIG = _G["VUHDO_SPELL_CONFIG"];
|
||
|
|
VUHDO_SPELL_ASSIGNMENTS = _G["VUHDO_SPELL_ASSIGNMENTS"];
|
||
|
|
VUHDO_CONFIG = _G["VUHDO_CONFIG"];
|
||
|
|
VUHDO_INTERNAL_TOGGLES = _G["VUHDO_INTERNAL_TOGGLES"];
|
||
|
|
VUHDO_RAID = _G["VUHDO_RAID"];
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_getCurrentMouseOver()
|
||
|
|
return sMouseoverUnit;
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local function VUHDO_placePlayerIcon(aButton, anIconNo, anIndex)
|
||
|
|
VUHDO_getBarIconTimer(aButton, anIconNo):SetText("");
|
||
|
|
VUHDO_getBarIconCounter(aButton, anIconNo):SetText("");
|
||
|
|
VUHDO_getBarIconCharge(aButton, anIconNo):Hide();
|
||
|
|
|
||
|
|
local tFrame = VUHDO_getBarIconFrame(aButton, anIconNo);
|
||
|
|
tFrame:SetScale(1);
|
||
|
|
tFrame:Show();
|
||
|
|
|
||
|
|
local anIcon = VUHDO_getBarIcon(aButton, anIconNo);
|
||
|
|
anIcon:ClearAllPoints();
|
||
|
|
if 2 == anIndex then
|
||
|
|
anIcon:SetPoint("CENTER", aButton:GetName(), "TOPRIGHT", -5, -10);
|
||
|
|
else
|
||
|
|
if anIndex > 2 then anIndex = anIndex - 1; end
|
||
|
|
local tCol = floor(anIndex * 0.5);
|
||
|
|
local tRow = anIndex - tCol * 2;
|
||
|
|
anIcon:SetPoint("TOPLEFT", aButton:GetName(), "TOPLEFT", tCol * 14, -tRow * 14);
|
||
|
|
end
|
||
|
|
|
||
|
|
anIcon:SetWidth(16);
|
||
|
|
anIcon:SetHeight(16);
|
||
|
|
anIcon:SetAlpha(1);
|
||
|
|
anIcon:SetVertexColor(1, 1, 1);
|
||
|
|
anIcon:Show();
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local tUnitNo, tRank;
|
||
|
|
local tIsLeader;
|
||
|
|
local tIsAssist;
|
||
|
|
local tIsMasterLooter;
|
||
|
|
function VUHDO_getUnitGroupPrivileges(aUnit)
|
||
|
|
tIsLeader, tIsAssist, tIsMasterLooter = false, false, false;
|
||
|
|
|
||
|
|
if VUHDO_GROUP_TYPE_RAID == VUHDO_getCurrentGroupType() then
|
||
|
|
tUnitNo = VUHDO_getUnitNo(aUnit);
|
||
|
|
if tUnitNo then
|
||
|
|
_, tRank, _, _, _, _, _, _, _, _, tIsMasterLooter = GetRaidRosterInfo(tUnitNo);
|
||
|
|
if 2 == tRank then tIsLeader = true;
|
||
|
|
elseif 1 == tRank then tIsAssist = true; end
|
||
|
|
end
|
||
|
|
else
|
||
|
|
tIsLeader = UnitIsGroupLeader(aUnit);
|
||
|
|
end
|
||
|
|
|
||
|
|
return tIsLeader, tIsAssist, tIsMasterLooter;
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local function VUHDO_showPlayerIcons(aButton, aPanelNum)
|
||
|
|
local tUnit = aButton:GetAttribute("unit");
|
||
|
|
local tInfo = VUHDO_RAID[tUnit];
|
||
|
|
if not tInfo then return; end
|
||
|
|
|
||
|
|
local tIsLeader, tIsAssist, tIsMasterLooter = VUHDO_getUnitGroupPrivileges(tUnit);
|
||
|
|
if tIsLeader or tIsAssist then
|
||
|
|
VUHDO_getOrCreateHotIcon(aButton, 1):SetTexture(
|
||
|
|
"Interface\\groupframe\\ui-group-" .. (tIsLeader and "leader" or "assistant") .. "icon");
|
||
|
|
VUHDO_placePlayerIcon(aButton, 1, 0);
|
||
|
|
end
|
||
|
|
|
||
|
|
if tIsMasterLooter then
|
||
|
|
VUHDO_getOrCreateHotIcon(aButton, 2):SetTexture("Interface\\groupframe\\ui-group-masterlooter");
|
||
|
|
VUHDO_placePlayerIcon(aButton, 2, 1);
|
||
|
|
end
|
||
|
|
|
||
|
|
local tIcon;
|
||
|
|
if UnitIsPVP(tUnit) and VUHDO_PANEL_SETUP[aPanelNum]["SCALING"]["barWidth"] > 54 then
|
||
|
|
tIcon = VUHDO_getOrCreateHotIcon(aButton, 3);
|
||
|
|
|
||
|
|
tIcon:SetTexture("Interface\\groupframe\\ui-group-pvp-"
|
||
|
|
.. ("Alliance" == (UnitFactionGroup(tUnit)) and "alliance" or "horde"));
|
||
|
|
|
||
|
|
VUHDO_placePlayerIcon(aButton, 3, 2);
|
||
|
|
tIcon:SetWidth(32);
|
||
|
|
tIcon:SetHeight(32);
|
||
|
|
end
|
||
|
|
|
||
|
|
if tInfo["class"] then
|
||
|
|
tIcon = VUHDO_getOrCreateHotIcon(aButton, 4);
|
||
|
|
tIcon:SetTexture("Interface\\TargetingFrame\\UI-Classes-Circles");
|
||
|
|
tIcon:SetTexCoord(unpack(CLASS_ICON_TCOORDS[tInfo["class"]]));
|
||
|
|
VUHDO_placePlayerIcon(aButton, 4, 3);
|
||
|
|
end
|
||
|
|
|
||
|
|
if tInfo["role"] then
|
||
|
|
tIcon = VUHDO_getOrCreateHotIcon(aButton, 5);
|
||
|
|
tIcon:SetTexture("Interface\\LFGFrame\\UI-LFG-ICON-ROLES");
|
||
|
|
tIcon:SetTexCoord(GetTexCoordsForRole(
|
||
|
|
VUHDO_ID_MELEE_TANK == tInfo["role"] and "TANK"
|
||
|
|
or VUHDO_ID_RANGED_HEAL == tInfo["role"] and "HEALER" or "DAMAGER"));
|
||
|
|
VUHDO_placePlayerIcon(aButton, 5, 5);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_hideAllPlayerIcons()
|
||
|
|
|
||
|
|
for tPanelNum = 1, 10 do -- VUHDO_MAX_PANELS
|
||
|
|
VUHDO_initLocalVars(tPanelNum);
|
||
|
|
|
||
|
|
for _, tButton in pairs(VUHDO_getPanelButtons(tPanelNum)) do
|
||
|
|
if tButton:IsShown() then
|
||
|
|
VUHDO_initButtonStatics(tButton, tPanelNum);
|
||
|
|
VUHDO_initAllHotIcons();
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
VUHDO_removeAllHots();
|
||
|
|
VUHDO_suspendHoTs(false);
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local function VUHDO_showAllPlayerIcons(aPanel)
|
||
|
|
VUHDO_suspendHoTs(true);
|
||
|
|
VUHDO_removeAllHots();
|
||
|
|
local tPanelNum = VUHDO_getPanelNum(aPanel);
|
||
|
|
|
||
|
|
for _, tButton in pairs(VUHDO_getPanelButtons(tPanelNum)) do
|
||
|
|
if tButton:IsShown() then VUHDO_showPlayerIcons(tButton, tPanelNum); end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local tAllUnits;
|
||
|
|
local tInfo;
|
||
|
|
local tOldMouseover;
|
||
|
|
function VuhDoActionOnEnter(aButton)
|
||
|
|
VUHDO_showTooltip(aButton);
|
||
|
|
|
||
|
|
tOldMouseover = sMouseoverUnit;
|
||
|
|
sMouseoverUnit = aButton:GetAttribute("unit");
|
||
|
|
if VUHDO_INTERNAL_TOGGLES[15] then -- VUHDO_UPDATE_MOUSEOVER
|
||
|
|
VUHDO_updateBouquetsForEvent(tOldMouseover, 15); -- Seems to be ghosting sometimes, -- VUHDO_UPDATE_MOUSEOVER
|
||
|
|
VUHDO_updateBouquetsForEvent(sMouseoverUnit, 15); -- VUHDO_UPDATE_MOUSEOVER
|
||
|
|
end
|
||
|
|
|
||
|
|
if VUHDO_isShowDirectionArrow() then VUHDO_updateDirectionFrame(aButton); end
|
||
|
|
|
||
|
|
if VUHDO_isShowGcd() then
|
||
|
|
VuhDoGcdStatusBar:ClearAllPoints();
|
||
|
|
VuhDoGcdStatusBar:SetAllPoints(aButton);
|
||
|
|
VuhDoGcdStatusBar:SetValue(0);
|
||
|
|
VuhDoGcdStatusBar:Show();
|
||
|
|
end
|
||
|
|
|
||
|
|
if VUHDO_INTERNAL_TOGGLES[18] and sMouseoverUnit then -- VUHDO_UPDATE_MOUSEOVER_CLUSTER
|
||
|
|
VUHDO_highlightClusterFor(sMouseoverUnit);
|
||
|
|
end
|
||
|
|
|
||
|
|
if VUHDO_INTERNAL_TOGGLES[20] then -- VUHDO_UPDATE_MOUSEOVER_GROUP
|
||
|
|
tInfo = VUHDO_RAID[sMouseoverUnit];
|
||
|
|
if not tInfo then return; end
|
||
|
|
|
||
|
|
tAllUnits = VUHDO_GROUPS[tInfo["group"]];
|
||
|
|
if tAllUnits then
|
||
|
|
for _, tUnit in pairs(tAllUnits) do
|
||
|
|
VUHDO_updateBouquetsForEvent(tUnit, 20); -- VUHDO_UPDATE_MOUSEOVER_GROUP
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local tOldMouseover;
|
||
|
|
local tAllUnits;
|
||
|
|
local tInfo;
|
||
|
|
function VuhDoActionOnLeave(aButton)
|
||
|
|
|
||
|
|
VUHDO_hideTooltip();
|
||
|
|
VuhDoDirectionFrame["shown"] = false;
|
||
|
|
VuhDoDirectionFrame:Hide();
|
||
|
|
|
||
|
|
tOldMouseover = sMouseoverUnit;
|
||
|
|
sMouseoverUnit = nil;
|
||
|
|
if VUHDO_INTERNAL_TOGGLES[15] then -- VUHDO_UPDATE_MOUSEOVER
|
||
|
|
VUHDO_updateBouquetsForEvent(tOldMouseover, 15); -- VUHDO_UPDATE_MOUSEOVER
|
||
|
|
end
|
||
|
|
|
||
|
|
if VUHDO_INTERNAL_TOGGLES[18] then -- VUHDO_UPDATE_MOUSEOVER_CLUSTER
|
||
|
|
VUHDO_resetClusterUnit();
|
||
|
|
VUHDO_removeAllClusterHighlights();
|
||
|
|
end
|
||
|
|
|
||
|
|
if VUHDO_INTERNAL_TOGGLES[20] then -- VUHDO_UPDATE_MOUSEOVER_GROUP
|
||
|
|
tInfo = VUHDO_RAID[aButton:GetAttribute("unit")];
|
||
|
|
|
||
|
|
if not tInfo then return; end
|
||
|
|
|
||
|
|
tAllUnits = VUHDO_GROUPS[tInfo["group"]];
|
||
|
|
if tAllUnits then
|
||
|
|
for _, tUnit in pairs(tAllUnits) do
|
||
|
|
VUHDO_updateBouquetsForEvent(tUnit, 20); -- VUHDO_UPDATE_MOUSEOVER_GROUP
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local tQuota, tHighlightBar;
|
||
|
|
function VUHDO_highlighterBouquetCallback(aUnit, anIsActive, anIcon, aCurrValue, aCounter, aMaxValue, aColor, aBuffName, aBouquetName)
|
||
|
|
tQuota = (anIsActive or (aMaxValue or 0) > 1) and 1 or 0;
|
||
|
|
|
||
|
|
for _, tButton in pairs(VUHDO_getUnitButtonsSafe(aUnit)) do
|
||
|
|
tHighlightBar = VUHDO_getHealthBar(tButton, 8);
|
||
|
|
if aColor then tHighlightBar:SetVuhDoColor(aColor); end
|
||
|
|
tHighlightBar:SetValue(tQuota);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local tModi;
|
||
|
|
local tKey;
|
||
|
|
function VuhDoActionPreClick(aButton, aMouseButton)
|
||
|
|
tModi = VUHDO_getCurrentKeyModifierString();
|
||
|
|
tKey = VUHDO_SPELL_ASSIGNMENTS[tModi .. SecureButton_GetButtonSuffix(aMouseButton)];
|
||
|
|
|
||
|
|
-- allow VuhDo menu command to be bound even when using Clique compat mode
|
||
|
|
if VUHDO_CONFIG["IS_CLIQUE_COMPAT_MODE"] and
|
||
|
|
(strlower(tKey and tKey[3] or "") ~= "menu" or not VUHDO_CONFIG["IS_CLIQUE_PASSTHROUGH"]) then
|
||
|
|
return;
|
||
|
|
end
|
||
|
|
|
||
|
|
if tKey and strlower(tKey[3]) == "menu" then
|
||
|
|
if not InCombatLockdown() then
|
||
|
|
VUHDO_disableActions(aButton);
|
||
|
|
VUHDO_IS_SMART_CAST = true;
|
||
|
|
end
|
||
|
|
VUHDO_setMenuUnit(aButton);
|
||
|
|
ToggleDropDownMenu(1, nil, VuhDoPlayerTargetDropDown, aButton:GetName(), 0, -5);
|
||
|
|
|
||
|
|
elseif tKey and strlower(tKey[3]) == "tell" then
|
||
|
|
ChatFrame_SendTell(VUHDO_RAID[aButton:GetAttribute("unit")]["fullName"]);
|
||
|
|
|
||
|
|
else
|
||
|
|
if VUHDO_SPELL_CONFIG["smartCastModi"] == "all"
|
||
|
|
or strfind(tModi, VUHDO_SPELL_CONFIG["smartCastModi"], 1, true) then
|
||
|
|
VUHDO_IS_SMART_CAST = VUHDO_setupSmartCast(aButton);
|
||
|
|
else
|
||
|
|
VUHDO_IS_SMART_CAST = false;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VuhDoActionPostClick(aButton)
|
||
|
|
if VUHDO_IS_SMART_CAST then
|
||
|
|
VUHDO_setupAllHealButtonAttributes(aButton, nil, false, false, false, false);
|
||
|
|
VUHDO_IS_SMART_CAST = false;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
local sIsStatusShown = false;
|
||
|
|
|
||
|
|
|
||
|
|
---
|
||
|
|
function VUHDO_startMoving(aPanel)
|
||
|
|
if VuhDoNewOptionsPanelPanel and VuhDoNewOptionsPanelPanel:IsVisible() then
|
||
|
|
|
||
|
|
local tNewNum = VUHDO_getComponentPanelNum(aPanel);
|
||
|
|
if tNewNum ~= DESIGN_MISC_PANEL_NUM then
|
||
|
|
VuhDoNewOptionsTabbedFrame:Hide();
|
||
|
|
DESIGN_MISC_PANEL_NUM = tNewNum;
|
||
|
|
VuhDoNewOptionsTabbedFrame:Show();
|
||
|
|
VUHDO_redrawAllPanels(false);
|
||
|
|
return;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if (IsMouseButtonDown(1) and VUHDO_mayMoveHealPanels()) then
|
||
|
|
if (not aPanel["isMoving"]) then
|
||
|
|
aPanel["isMoving"] = true;
|
||
|
|
if not InCombatLockdown() then aPanel:SetFrameStrata("TOOLTIP"); end
|
||
|
|
aPanel:StartMoving();
|
||
|
|
end
|
||
|
|
elseif IsMouseButtonDown(2) and not InCombatLockdown()
|
||
|
|
and (not VuhDoNewOptionsPanelPanel or not VuhDoNewOptionsPanelPanel:IsVisible()) then
|
||
|
|
VUHDO_showAllPlayerIcons(aPanel);
|
||
|
|
sIsStatusShown = true;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_stopMoving(aPanel)
|
||
|
|
aPanel:StopMovingOrSizing();
|
||
|
|
aPanel["isMoving"] = false;
|
||
|
|
if not InCombatLockdown() then
|
||
|
|
aPanel:SetFrameStrata(VUHDO_PANEL_SETUP[VUHDO_getPanelNum(aPanel)]["frameStrata"]);
|
||
|
|
end
|
||
|
|
VUHDO_savePanelCoords(aPanel);
|
||
|
|
VUHDO_saveCurrentProfilePanelPosition(VUHDO_getPanelNum(aPanel));
|
||
|
|
if sIsStatusShown then
|
||
|
|
sIsStatusShown = false;
|
||
|
|
VUHDO_hideAllPlayerIcons();
|
||
|
|
VUHDO_initAllEventBouquets();
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local tPosition;
|
||
|
|
function VUHDO_savePanelCoords(aPanel)
|
||
|
|
tPosition = VUHDO_PANEL_SETUP[VUHDO_getPanelNum(aPanel)]["POSITION"];
|
||
|
|
tPosition["orientation"], _, tPosition["relativePoint"], tPosition["x"], tPosition["y"] = aPanel:GetPoint();
|
||
|
|
tPosition["width"] = aPanel:GetWidth();
|
||
|
|
tPosition["height"] = aPanel:GetHeight();
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local tButton;
|
||
|
|
local sDebuffIcon = nil;
|
||
|
|
function VUHDO_showDebuffTooltip(aDebuffIcon)
|
||
|
|
if not VUHDO_CONFIG["DEBUFF_TOOLTIP"] then return; end
|
||
|
|
|
||
|
|
tButton = aDebuffIcon:GetParent():GetParent():GetParent():GetParent();
|
||
|
|
|
||
|
|
if not GameTooltip:IsForbidden() then
|
||
|
|
GameTooltip:SetOwner(aDebuffIcon, "ANCHOR_RIGHT", 0, 0);
|
||
|
|
end
|
||
|
|
|
||
|
|
if aDebuffIcon["debuffCnt"] then
|
||
|
|
if not GameTooltip:IsForbidden() then
|
||
|
|
if aDebuffIcon["isBuff"] then
|
||
|
|
GameTooltip:SetUnitBuff(tButton["raidid"], aDebuffIcon["debuffCnt"]);
|
||
|
|
else
|
||
|
|
GameTooltip:SetUnitDebuff(tButton["raidid"], aDebuffIcon["debuffCnt"]);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
sDebuffIcon = aDebuffIcon;
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_hideDebuffTooltip()
|
||
|
|
sDebuffIcon = nil;
|
||
|
|
|
||
|
|
if not GameTooltip:IsForbidden() then
|
||
|
|
GameTooltip:Hide();
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_updateCustomDebuffTooltip()
|
||
|
|
if sDebuffIcon then VUHDO_showDebuffTooltip(sDebuffIcon); end
|
||
|
|
end
|