Updated pending totem logic
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.
This commit is contained in:
@@ -47,6 +47,12 @@ COE.TotemsAvailable["Air"] = 0;
|
||||
-------------------------------------------------------------------]]
|
||||
COE["ActiveTotems"] = {Earth = nil, Fire = nil, Water = nil, Air = nil};
|
||||
COE["TotemPending"] = {Totem = nil, UseRank = 0, Timeout = 0.75};
|
||||
COE["PendingTotems"] = {
|
||||
Earth = {Totem = nil, Rank = 0, TimeoutStartMS = 0},
|
||||
Fire = {Totem = nil, Rank = 0, TimeoutStartMS = 0},
|
||||
Water = {Totem = nil, Rank = 0, TimeoutStartMS = 0},
|
||||
Air = {Totem = nil, Rank = 0, TimeoutStartMS = 0}
|
||||
};
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
COE.CleansingTotems stores pointers to the buttons and totems
|
||||
|
||||
+196
-26
@@ -49,7 +49,8 @@ end
|
||||
PURPOSE: Throws the totem with the specified named id
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:ThrowTotem(element, id)
|
||||
|
||||
COE:DebugMessage(
|
||||
"COE_Totem:ThrowTotem element and id: " .. element .. " " .. id);
|
||||
if (not COE.Initialized) then return; end
|
||||
|
||||
-- get associated button
|
||||
@@ -57,6 +58,7 @@ function COE_Totem:ThrowTotem(element, id)
|
||||
local button = getglobal("COETotem" .. element .. id);
|
||||
if (button == nil) then
|
||||
COE:Message("Invalid Totem");
|
||||
|
||||
return;
|
||||
end
|
||||
|
||||
@@ -538,6 +540,7 @@ end
|
||||
yet thrown
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:ThrowSet()
|
||||
COE:DebugMessage("Method Executing: ThrowSet");
|
||||
|
||||
if (COE_Config:GetSaved(COEOPT_ENABLESETS) == 1) then
|
||||
|
||||
@@ -545,14 +548,19 @@ function COE_Totem:ThrowSet()
|
||||
-- check which totem to throw
|
||||
-- =======================================================================
|
||||
local activeset = COE_Config:GetSaved(COEOPT_ACTIVESET);
|
||||
COE:DebugMessage("ThrowSet activeset value: " .. activeset);
|
||||
|
||||
local k;
|
||||
for k = 1, 4 do
|
||||
COE:DebugMessage("ThrowSet k value: " .. k);
|
||||
|
||||
local element = COE:LocalizedElement(
|
||||
COE.TotemSets[activeset].CastOrder[k]);
|
||||
COE:DebugMessage("ThrowSet element value: " .. element);
|
||||
|
||||
local totem = COE.TotemSets[activeset][element];
|
||||
|
||||
COE:DebugMessage("ThrowSet COE.SetCycle[element] value: " ..
|
||||
tostring(COE.SetCycle[element]));
|
||||
if (COE.SetCycle[element] == false and totem) then
|
||||
|
||||
if (totem.isTrinket) then
|
||||
@@ -570,15 +578,24 @@ function COE_Totem:ThrowSet()
|
||||
end
|
||||
|
||||
else
|
||||
|
||||
COE:DebugMessage("ThrowSet casting totem: " .. element);
|
||||
-- first check if the totem is already usable
|
||||
-- -------------------------------------------
|
||||
local start, duration = GetSpellCooldown(
|
||||
totem.Ranks[totem.MaxRank]
|
||||
.SpellID, BOOKTYPE_SPELL);
|
||||
COE:DebugMessage("ThrowSet spell cooldown duration: " ..
|
||||
duration);
|
||||
|
||||
if (start == 0 and duration == 0) then
|
||||
|
||||
COE:DebugMessage(
|
||||
"ThrowSet casting spell: " ..
|
||||
COE.TotemSets[activeset][element].SpellName);
|
||||
CastSpellByName(COE.TotemSets[activeset][element]
|
||||
.SpellName);
|
||||
-- COE_Totem:SetPendingTotem(totem, totem.MaxRank);
|
||||
return;
|
||||
end
|
||||
end
|
||||
@@ -611,29 +628,38 @@ end
|
||||
PURPOSE: Sets up or clears a pending totem
|
||||
The pending totem's timer is activated on the next
|
||||
successful SPELLCAST_STOP or removed if it times out first
|
||||
|
||||
PURPOSE: Sets up or clears a pending totem. The pending totem's
|
||||
timer is activated when the spell is identified as cast. If
|
||||
the spell is not identified as cast within 1 seconds, then
|
||||
the pending status is removed.
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:SetPendingTotem(totem, rank)
|
||||
COE:DebugMessage("Method Executing: SetPendingTotem");
|
||||
|
||||
if (totem) then
|
||||
COE:DebugMessage("Setting pending totem: " .. totem.SpellName ..
|
||||
" with rank: " .. rank);
|
||||
COE.TotemPending.Totem = totem;
|
||||
COE.TotemPending.UseRank = rank;
|
||||
|
||||
-- get the current lag
|
||||
-- Set PendingTotems for the given totem element type
|
||||
COE:DebugMessage("SetPendingTotem PendingTotems being set: " ..
|
||||
totem.SpellName .. " with rank: " .. rank);
|
||||
COE.PendingTotems[totem.Element].Totem = totem;
|
||||
COE.PendingTotems[totem.Element].Rank = rank;
|
||||
-- COE.PendingTotems[totem.Element].TimeoutStartMS = GetTime();
|
||||
|
||||
-- get the current lag - Not used but saving if needed
|
||||
-- --------------------
|
||||
local _, _, lag = GetNetStats();
|
||||
local timeout = lag / 1000 + COE.TotemPending.Timeout;
|
||||
-- local _, _, lag = GetNetStats();
|
||||
-- local timeout = lag / 1000 + COE.TotemPending.Timeout;
|
||||
local timeoutSec = 1;
|
||||
|
||||
-- use lag + 0.5 seconds as pending timeout
|
||||
-- -----------------------------------------
|
||||
COE:DebugMessage("Setting pending timeout to: " .. timeout .. " msec");
|
||||
COE:DebugMessage("SetPendingTotem Setting pending timeout to: " ..
|
||||
timeoutSec .. " seconds");
|
||||
|
||||
Chronos.scheduleByName("COE_Pending", timeoutSec,
|
||||
COESched_CheckPendingTotem, totem.Element);
|
||||
|
||||
Chronos.scheduleByName("COE_Pending", timeout,
|
||||
COESched_CheckPendingTotem);
|
||||
else
|
||||
COE.TotemPending.Totem = nil;
|
||||
COE.TotemPending.UseRank = 0;
|
||||
end
|
||||
|
||||
end
|
||||
@@ -642,20 +668,160 @@ end
|
||||
METHOD: COESched_CheckPendingTotem
|
||||
|
||||
PURPOSE: Clears the pending totem if it is still active
|
||||
-------------------------------------------------------------------]]
|
||||
function COESched_CheckPendingTotem()
|
||||
|
||||
-- if there is still a pending totem it has timed out
|
||||
-- ---------------------------------------------------
|
||||
if (COE.TotemPending.Totem) then
|
||||
COE:DebugMessage("Pending totem has timed out: " ..
|
||||
COE.TotemPending.Totem.SpellName);
|
||||
COE_Totem:SetPendingTotem(nil);
|
||||
PURPOSE: Clears the pending totem if it is still pending.
|
||||
-------------------------------------------------------------------]]
|
||||
function COESched_CheckPendingTotem(element)
|
||||
COE:DebugMessage("Executing Method: COESched_CheckPendingTotem");
|
||||
|
||||
if (element) then
|
||||
COE:DebugMessage("COESched_CheckPendingTotem for element: " .. element);
|
||||
|
||||
COE_Totem:ClearPendingTotem(COE.PendingTotems[element]);
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: ClearPendingTotem
|
||||
|
||||
PURPOSE: Clears the pending totem.
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:ClearPendingTotem(pendingTotem)
|
||||
COE:DebugMessage("Executing Method: ClearPendingTotem");
|
||||
|
||||
if (pendingTotem) then
|
||||
pendingTotem.Totem = nil;
|
||||
pendingTotem.Rank = nil;
|
||||
end
|
||||
end
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:GetTotemFromText
|
||||
|
||||
PURPOSE: Identifies a totem from the text value passed in. Can
|
||||
return a nil totem.
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:GetTotemFromText(text)
|
||||
local totem;
|
||||
COE:DebugMessage("GetTotemFromText for text value: " .. text);
|
||||
|
||||
-- find the totem
|
||||
for k = 1, COE.TotemCount do
|
||||
if (string.find(text, COE.TotemData[k].SpellName)) then
|
||||
-- use existing totem object
|
||||
-- --------------------------
|
||||
totem = COE.TotemData[k];
|
||||
|
||||
COE:DebugMessage("GetTotemFromText found totem: " .. totem.SpellName);
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
return totem;
|
||||
|
||||
end
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:ActivateTotem
|
||||
|
||||
PURPOSE: Activates the totem timer and deactivates a
|
||||
still active timer of the same element
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:ActivateTotem(totem)
|
||||
COE:DebugMessage("Method Executing: ActivateTotem with totem parameter " ..
|
||||
totem.SpellName);
|
||||
|
||||
local pendingTotemObj = COE.PendingTotems[totem.Element];
|
||||
|
||||
if (pendingTotemObj and pendingTotemObj.Totem) then
|
||||
COE:DebugMessage("ActivateTotem identified pending totem : " ..
|
||||
pendingTotemObj.Totem.SpellName);
|
||||
|
||||
-- deactivate still active totem of the same element
|
||||
-- --------------------------------------------------
|
||||
local active = COE.ActiveTotems[totem.Element];
|
||||
if (active) then COE_Totem:DeactivateTimer(active); end
|
||||
|
||||
local pendingTotem = pendingTotemObj.Totem;
|
||||
local pendingTotemRank = pendingTotemObj.Rank;
|
||||
|
||||
-- activate timer
|
||||
-- ---------------
|
||||
Chronos.startTimer("COE" .. totem.SpellName);
|
||||
totem.CurDuration = pendingTotem.Ranks[pendingTotemRank].Duration;
|
||||
totem.CurHealth = pendingTotem.Ranks[pendingTotemRank].Health;
|
||||
|
||||
-- activate cooldown timer if this totem has a cooldown
|
||||
-- -----------------------------------------------------
|
||||
if (pendingTotem.Ranks[pendingTotemRank].Cooldown > 0) then
|
||||
totem.CurCooldown = pendingTotem.Ranks[pendingTotemRank].Cooldown;
|
||||
Chronos.startTimer("COECooldown" .. totem.SpellName);
|
||||
Chronos.scheduleByName("COECooldownSwitch" .. totem.SpellName,
|
||||
totem.CurCooldown, COESched_CooldownEnd,
|
||||
totem);
|
||||
end
|
||||
|
||||
-- activate warning timers
|
||||
-- ------------------------
|
||||
if (totem.CurDuration >= 10) then
|
||||
Chronos.scheduleByName("COEWarn10" .. totem.SpellName,
|
||||
totem.CurDuration - 10,
|
||||
COESched_ExpirationWarning, 10, totem);
|
||||
end
|
||||
Chronos.scheduleByName("COEWarn5" .. totem.SpellName,
|
||||
totem.CurDuration - 5,
|
||||
COESched_ExpirationWarning, 5, totem);
|
||||
Chronos.scheduleByName("COEWarn0" .. totem.SpellName, totem.CurDuration,
|
||||
COESched_ExpirationWarning, 0, totem);
|
||||
|
||||
-- mark totem as active
|
||||
-- ---------------------
|
||||
COE.ActiveTotems[pendingTotem.Element] = totem;
|
||||
totem.isActive = true;
|
||||
|
||||
-- set totem in timer frame
|
||||
-- -------------------------
|
||||
if (COE_Config:GetSaved(COEOPT_TIMERFRAME) == 1) then
|
||||
getglobal("COETimer" .. pendingTotem.Element).totem = totem;
|
||||
COETimerFrame:Show();
|
||||
end
|
||||
|
||||
-- mark totem as thrown if in current set
|
||||
-- ---------------------------------------
|
||||
local activeset = COE_Config:GetSaved(COEOPT_ACTIVESET);
|
||||
|
||||
if (COE.TotemSets[activeset][totem.Element] and
|
||||
COE.TotemSets[activeset][totem.Element].SpellName == totem.SpellName) then
|
||||
|
||||
COE:DebugMessage("ActivateTotem Element " .. totem.Element ..
|
||||
" in current cycle: SET");
|
||||
COE.SetCycle[totem.Element] = true;
|
||||
end
|
||||
|
||||
-- clear pending totem
|
||||
-- --------------------
|
||||
COE_Totem:ClearPendingTotem(pendingTotemObj);
|
||||
|
||||
-- if in timers only mode, reconfigure the totem bar
|
||||
-- --------------------------------------------------
|
||||
if (COE_Config:GetSaved(COEOPT_DISPLAYMODE) == COEMODE_TIMERSONLY) then
|
||||
COE_Totem:Invalidate(getglobal("COE" .. totem.Element .. "Frame"),
|
||||
true, true, true);
|
||||
COETotemFrame.Reconfigure = true;
|
||||
else
|
||||
-- otherwise just invalidate the dynamic buttons
|
||||
-- ----------------------------------------------
|
||||
COE_Totem:Invalidate(getglobal("COE" .. totem.Element .. "Frame"),
|
||||
false, false, true);
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
DEPRECATED: Use ActivateTotem
|
||||
METHOD: COE_Totem:ActivatePendingTotem
|
||||
|
||||
PURPOSE: Activates the pending totem timer and deactivates a
|
||||
@@ -669,7 +835,7 @@ function COE_Totem:ActivatePendingTotem(totem)
|
||||
-- deactivate still active totem of the same element
|
||||
-- --------------------------------------------------
|
||||
COE:DebugMessage(
|
||||
"Method Executing: ActivatePendingTotem - identifying active totems of type" ..
|
||||
"ActivatePendingTotem - identifying active totems of type" ..
|
||||
COE.TotemPending.Totem.Element);
|
||||
local active = COE.ActiveTotems[COE.TotemPending.Totem.Element];
|
||||
if (active) then COE_Totem:DeactivateTimer(active); end
|
||||
@@ -783,7 +949,7 @@ function COE_Totem:DeactivateTimer(totem)
|
||||
if (COE.TotemSets[activeset][totem.Element] and
|
||||
COE.TotemSets[activeset][totem.Element].SpellName == totem.SpellName) then
|
||||
|
||||
COE:DebugMessage("Element " .. totem.Element ..
|
||||
COE:DebugMessage("DeactivateTimer Element " .. totem.Element ..
|
||||
" in current cycle: UNSET");
|
||||
COE.SetCycle[totem.Element] = false;
|
||||
end
|
||||
@@ -975,6 +1141,7 @@ end
|
||||
original function afterwards
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:SetupTimerHooks()
|
||||
COE:DebugMessage("Method Executing: SetupTimerHooks");
|
||||
|
||||
COE_Totem.TimerHooks["UseAction"] = UseAction;
|
||||
UseAction = function(id, book, onself)
|
||||
@@ -1009,7 +1176,7 @@ end
|
||||
a totem
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:HookUseAction(id, book)
|
||||
|
||||
COE:DebugMessage("Method Executing: HookUseAction");
|
||||
-- use only when timers are enabled
|
||||
-- ---------------------------------
|
||||
if (COE_Config:GetSaved(COEOPT_ENABLETIMERS) == 0) then return; end
|
||||
@@ -1074,6 +1241,7 @@ end
|
||||
a totem
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:HookCastSpell(id, book)
|
||||
COE:DebugMessage("Method Executing: HookCastSpell");
|
||||
|
||||
-- use only when timers are enabled
|
||||
-- ---------------------------------
|
||||
@@ -1107,6 +1275,7 @@ end
|
||||
a totem
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:HookCastSpellByName(SpellName)
|
||||
COE:DebugMessage("Method Executing: HookCastSpellByName");
|
||||
|
||||
-- use only when timers are enabled
|
||||
-- ---------------------------------
|
||||
@@ -1149,6 +1318,7 @@ end
|
||||
a totem
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:HookUseInventoryItem(slotid)
|
||||
COE:DebugMessage("Method Executing: HookUseInventoryItem");
|
||||
|
||||
-- use only when timers are enabled
|
||||
-- ---------------------------------
|
||||
|
||||
+148
-192
@@ -8,18 +8,18 @@
|
||||
|
||||
Totem Module / Visual
|
||||
|
||||
]]
|
||||
|
||||
if( not COE_Totem ) then
|
||||
COE_Totem = {};
|
||||
end
|
||||
]] if (not COE_Totem) then COE_Totem = {}; end
|
||||
|
||||
COEUI_BUTTONGAP = 4;
|
||||
|
||||
COE_Totem.FlexTime = 0.3;
|
||||
|
||||
COEFramePositions = { Earth = { x = 0, y = 0 }, Fire = { x = 0, y = 0 },
|
||||
Water = { x = 0, y = 0 }, Air = { x = 0, y = 0 } }
|
||||
COEFramePositions = {
|
||||
Earth = {x = 0, y = 0},
|
||||
Fire = {x = 0, y = 0},
|
||||
Water = {x = 0, y = 0},
|
||||
Air = {x = 0, y = 0}
|
||||
}
|
||||
|
||||
COEDynamic = {n = 7, nil, nil, nil, nil, nil, nil, nil};
|
||||
|
||||
@@ -46,9 +46,7 @@ COEDynamic = { n = 7, nil, nil, nil, nil, nil, nil, nil };
|
||||
function COE_Totem:InitMainFrame()
|
||||
-- addon loaded?
|
||||
-- --------------
|
||||
if( not COE.Initialized ) then
|
||||
return;
|
||||
end
|
||||
if (not COE.Initialized) then return; end
|
||||
|
||||
-- init frame properties
|
||||
-- ----------------------
|
||||
@@ -73,7 +71,6 @@ function COE_Totem:InitMainFrame()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:OnMainFrameEvent
|
||||
|
||||
@@ -94,7 +91,8 @@ function COE_Totem:OnMainFrameEvent( event )
|
||||
-- start advisor schedule
|
||||
-- -----------------------
|
||||
if (COE_Config:GetSaved(COEOPT_ADVISOR) == 1) then
|
||||
Chronos.scheduleByName( "COEAdvise", COE.AdvisorInterval, COESched_RunAdvisor );
|
||||
Chronos.scheduleByName("COEAdvise", COE.AdvisorInterval,
|
||||
COESched_RunAdvisor);
|
||||
end
|
||||
|
||||
-- get current element frame coordinates
|
||||
@@ -108,9 +106,7 @@ function COE_Totem:OnMainFrameEvent( event )
|
||||
|
||||
elseif (event == "PLAYER_TARGET_CHANGED") then
|
||||
|
||||
if( COE_Config:GetSaved( COEOPT_ENABLETOTEMBAR ) == 0 ) then
|
||||
return;
|
||||
end
|
||||
if (COE_Config:GetSaved(COEOPT_ENABLETOTEMBAR) == 0) then return; end
|
||||
|
||||
-- Switch to named set if appropriate
|
||||
-- -----------------------------------
|
||||
@@ -126,14 +122,12 @@ function COE_Totem:OnMainFrameEvent( event )
|
||||
-- ----------------------------
|
||||
COE_Totem:ResetTimers();
|
||||
|
||||
elseif ( event == "CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE" or
|
||||
event == "CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS" or
|
||||
event == "CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE" or
|
||||
event == "CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS" ) then
|
||||
elseif (event == "CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE" or event ==
|
||||
"CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS" or event ==
|
||||
"CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE" or event ==
|
||||
"CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS") then
|
||||
|
||||
if( COE_Config:GetSaved( COEOPT_ENABLETOTEMBAR ) == 0 ) then
|
||||
return;
|
||||
end
|
||||
if (COE_Config:GetSaved(COEOPT_ENABLETOTEMBAR) == 0) then return; end
|
||||
|
||||
-- Assign totem damage
|
||||
-- --------------------
|
||||
@@ -142,7 +136,6 @@ function COE_Totem:OnMainFrameEvent( event )
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:ConfigureTotemButtons
|
||||
|
||||
@@ -153,9 +146,7 @@ function COE_Totem:ConfigureTotemButtons()
|
||||
|
||||
-- reconfiguration necessary?
|
||||
-- ---------------------------
|
||||
if( not COETotemFrame.Reconfigure ) then
|
||||
return;
|
||||
end
|
||||
if (not COETotemFrame.Reconfigure) then return; end
|
||||
|
||||
local i;
|
||||
local buttons = {Earth = 0, Fire = 0, Water = 0, Air = 0};
|
||||
@@ -213,7 +204,9 @@ function COE_Totem:ConfigureTotemButtons()
|
||||
-- check if this totem's order is before or after
|
||||
-- the normal order of this element's active totem
|
||||
-- ------------------------------------------------
|
||||
local activeorder = COE_DisplayedTotems[COE.ActiveTotems[totem.Element].SpellName].Order;
|
||||
local activeorder =
|
||||
COE_DisplayedTotems[COE.ActiveTotems[totem.Element]
|
||||
.SpellName].Order;
|
||||
if (order < activeorder) then
|
||||
order = order + 1;
|
||||
end
|
||||
@@ -238,10 +231,10 @@ function COE_Totem:ConfigureTotemButtons()
|
||||
-- check if this totem's order is before or after
|
||||
-- the normal order of this set's element totem
|
||||
-- -----------------------------------------------
|
||||
local activeorder = COE_DisplayedTotems[COE.TotemSets[activeset][totem.Element].SpellName].Order;
|
||||
if( order < activeorder ) then
|
||||
order = order + 1;
|
||||
end
|
||||
local activeorder =
|
||||
COE_DisplayedTotems[COE.TotemSets[activeset][totem.Element]
|
||||
.SpellName].Order;
|
||||
if (order < activeorder) then order = order + 1; end
|
||||
|
||||
button = getglobal("COETotem" .. totem.Element .. order);
|
||||
else
|
||||
@@ -285,7 +278,6 @@ function COE_Totem:ConfigureTotemButtons()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:UpdateAllFrames
|
||||
|
||||
@@ -327,7 +319,6 @@ function COE_Totem:UpdateAllFrames()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:ResetFrames
|
||||
|
||||
@@ -348,7 +339,6 @@ function COE_Totem:ResetFrames()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ =============================================================================================
|
||||
|
||||
F R A M E
|
||||
@@ -379,7 +369,6 @@ end
|
||||
|
||||
------------------------------------------------------------------------------------------------]]
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:InitFrame
|
||||
|
||||
@@ -388,9 +377,7 @@ end
|
||||
function COE_Totem:InitFrame()
|
||||
-- addon loaded?
|
||||
-- --------------
|
||||
if( not COE.Initialized ) then
|
||||
return;
|
||||
end
|
||||
if (not COE.Initialized) then return; end
|
||||
|
||||
-- init update timer
|
||||
-- ------------------
|
||||
@@ -410,7 +397,6 @@ function COE_Totem:InitFrame()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:OnFrameEvent
|
||||
|
||||
@@ -436,7 +422,6 @@ function COE_Totem:OnFrameEvent( event )
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:Invalidate
|
||||
|
||||
@@ -449,21 +434,14 @@ function COE_Totem:Invalidate( frame, Anchor, Static, Dynamic )
|
||||
-- a previous call to Invaldiate with a true parameter
|
||||
-- ----------------------------------------------------
|
||||
|
||||
if( Anchor ) then
|
||||
frame.Updates.Anchor = true;
|
||||
end
|
||||
if (Anchor) then frame.Updates.Anchor = true; end
|
||||
|
||||
if( Static ) then
|
||||
frame.Updates.Static = true;
|
||||
end
|
||||
if (Static) then frame.Updates.Static = true; end
|
||||
|
||||
if( Dynamic ) then
|
||||
frame.Updates.Dynamic = true;
|
||||
end
|
||||
if (Dynamic) then frame.Updates.Dynamic = true; end
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:UpdateFrame
|
||||
|
||||
@@ -474,9 +452,7 @@ function COE_Totem:UpdateFrame( elapsed )
|
||||
-- check if visual update is necessary
|
||||
-- ------------------------------------
|
||||
this.UpdateTime = this.UpdateTime + elapsed;
|
||||
if( this.UpdateTime <= COE.UpdateInterval ) then
|
||||
return;
|
||||
end
|
||||
if (this.UpdateTime <= COE.UpdateInterval) then return; end
|
||||
|
||||
-- show frame?
|
||||
-- ------------
|
||||
@@ -494,9 +470,7 @@ function COE_Totem:UpdateFrame( elapsed )
|
||||
|
||||
-- invalidate all if moving
|
||||
-- -------------------------
|
||||
if( this.isMoving ) then
|
||||
COE_Totem:Invalidate( this, true, true, true );
|
||||
end
|
||||
if (this.isMoving) then COE_Totem:Invalidate(this, true, true, true); end
|
||||
|
||||
-- configure buttons for this frame
|
||||
-- ---------------------------------
|
||||
@@ -504,9 +478,7 @@ function COE_Totem:UpdateFrame( elapsed )
|
||||
|
||||
-- configure anchor button
|
||||
-- ------------------------
|
||||
if( this.Updates.Anchor ) then
|
||||
COE_Totem:UpdateAnchorButton();
|
||||
end
|
||||
if (this.Updates.Anchor) then COE_Totem:UpdateAnchorButton(); end
|
||||
|
||||
-- only update if at least the anchor
|
||||
-- totem button has a totem assigned
|
||||
@@ -516,24 +488,18 @@ function COE_Totem:UpdateFrame( elapsed )
|
||||
|
||||
-- update the static flex-totems
|
||||
-- ------------------------------
|
||||
if( this.Updates.Static ) then
|
||||
COE_Totem:UpdateStatic();
|
||||
end
|
||||
if (this.Updates.Static) then COE_Totem:UpdateStatic(); end
|
||||
|
||||
-- update the dynamic flex-totems
|
||||
-- -------------------------------
|
||||
if( this.Updates.Dynamic ) then
|
||||
COE_Totem:UpdateDynamic();
|
||||
end
|
||||
if (this.Updates.Dynamic) then COE_Totem:UpdateDynamic(); end
|
||||
else
|
||||
this.AnchorTotem:Hide();
|
||||
end
|
||||
|
||||
-- adjust other frames when dragging
|
||||
-- ----------------------------------
|
||||
if( this.IsMoving ) then
|
||||
COE_Totem:AdjustDraggedFrames();
|
||||
end
|
||||
if (this.IsMoving) then COE_Totem:AdjustDraggedFrames(); end
|
||||
|
||||
-- reset invalidation flags
|
||||
-- -------------------------
|
||||
@@ -547,7 +513,6 @@ function COE_Totem:UpdateFrame( elapsed )
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:UpdateAnchorButton
|
||||
|
||||
@@ -563,7 +528,8 @@ function COE_Totem:UpdateAnchorButton()
|
||||
this.AnchorTotem = getglobal("COETotem" .. this.Element .. "1");
|
||||
|
||||
elseif (mode == COEMODE_TIMERSONLY) then
|
||||
if( COE.ActiveTotems[this.Element] or COE_TotemBars[this.Element].Mode == "Open" ) then
|
||||
if (COE.ActiveTotems[this.Element] or COE_TotemBars[this.Element].Mode ==
|
||||
"Open") then
|
||||
this.AnchorTotem = getglobal("COETotem" .. this.Element .. "1");
|
||||
else
|
||||
this.AnchorTotem = getglobal("COETotem" .. this.Element .. "None");
|
||||
@@ -571,7 +537,8 @@ function COE_Totem:UpdateAnchorButton()
|
||||
end
|
||||
|
||||
else
|
||||
if( COE.TotemSets[activeset][this.Element] or COE_TotemBars[this.Element].Mode == "Open" ) then
|
||||
if (COE.TotemSets[activeset][this.Element] or
|
||||
COE_TotemBars[this.Element].Mode == "Open") then
|
||||
this.AnchorTotem = getglobal("COETotem" .. this.Element .. "1");
|
||||
else
|
||||
this.AnchorTotem = getglobal("COETotem" .. this.Element .. "None");
|
||||
@@ -589,7 +556,6 @@ function COE_Totem:UpdateAnchorButton()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:UpdateStatic
|
||||
|
||||
@@ -597,7 +563,8 @@ end
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:UpdateStatic()
|
||||
|
||||
local inConfig = COE.ConfigureBarMode or COE.ConfigureOrderMode or COE.ConfigureSetsMode;
|
||||
local inConfig = COE.ConfigureBarMode or COE.ConfigureOrderMode or
|
||||
COE.ConfigureSetsMode;
|
||||
|
||||
if (this.Mode == "Closed" and not COE.ConfigureBarMode and
|
||||
not COE.ConfigureOrderMode and not COE.ConfigureSetsMode) then
|
||||
@@ -632,8 +599,10 @@ function COE_Totem:UpdateStatic()
|
||||
|
||||
-- only show button if it has a totem
|
||||
-- -----------------------------------
|
||||
if( button.totem and (COE_DisplayedTotems[button.totem.SpellName].Visible or inConfig) ) then
|
||||
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing );
|
||||
if (button.totem and
|
||||
(COE_DisplayedTotems[button.totem.SpellName].Visible or inConfig)) then
|
||||
button:SetPoint(this.Point, lastvisible, this.RelPoint,
|
||||
this.XSpacing, this.YSpacing);
|
||||
button:Show();
|
||||
lastvisible = button;
|
||||
else
|
||||
@@ -643,7 +612,6 @@ function COE_Totem:UpdateStatic()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:UpdateDynamic
|
||||
|
||||
@@ -665,13 +633,15 @@ function COE_Totem:UpdateDynamic()
|
||||
|
||||
if (this.AnchorTotem.totem == COE.NoTotem) then
|
||||
if (this.FlexCount > 1) then
|
||||
lastvisible = getglobal( "COETotem" .. this.Element .. this.FlexCount - 1 );
|
||||
lastvisible = getglobal("COETotem" .. this.Element ..
|
||||
this.FlexCount - 1);
|
||||
else
|
||||
lastvisible = getglobal("COETotem" .. this.Element .. "None");
|
||||
end
|
||||
start = this.FlexCount;
|
||||
else
|
||||
lastvisible = getglobal( "COETotem" .. this.Element .. this.FlexCount );
|
||||
lastvisible =
|
||||
getglobal("COETotem" .. this.Element .. this.FlexCount);
|
||||
start = this.FlexCount + 1;
|
||||
end
|
||||
|
||||
@@ -684,12 +654,15 @@ function COE_Totem:UpdateDynamic()
|
||||
button = getglobal("COETotem" .. this.Element .. i);
|
||||
button:ClearAllPoints();
|
||||
|
||||
if( button.totem and COE_DisplayedTotems[button.totem.SpellName].Visible ) then
|
||||
if( COE.ActiveTotems[this.Element] == button.totem and COE_Totem:IsTimerActive( button.totem ) ) then
|
||||
if (button.totem and
|
||||
COE_DisplayedTotems[button.totem.SpellName].Visible) then
|
||||
if (COE.ActiveTotems[this.Element] == button.totem and
|
||||
COE_Totem:IsTimerActive(button.totem)) then
|
||||
-- show button if it is active
|
||||
-- ----------------------------
|
||||
button:SetScale(0.8);
|
||||
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing );
|
||||
button:SetPoint(this.Point, lastvisible, this.RelPoint,
|
||||
this.XSpacing, this.YSpacing);
|
||||
button:Show();
|
||||
lastvisible = button;
|
||||
|
||||
@@ -697,7 +670,8 @@ function COE_Totem:UpdateDynamic()
|
||||
-- show button if it has a running cooldown
|
||||
-- -----------------------------------------
|
||||
button:SetScale(0.8);
|
||||
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing );
|
||||
button:SetPoint(this.Point, lastvisible, this.RelPoint,
|
||||
this.XSpacing, this.YSpacing);
|
||||
button:Show();
|
||||
lastvisible = button;
|
||||
|
||||
@@ -705,7 +679,8 @@ function COE_Totem:UpdateDynamic()
|
||||
-- show button if it is advised
|
||||
-- -----------------------------
|
||||
button:SetScale(0.8);
|
||||
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing );
|
||||
button:SetPoint(this.Point, lastvisible, this.RelPoint,
|
||||
this.XSpacing, this.YSpacing);
|
||||
button:Show();
|
||||
lastvisible = button;
|
||||
|
||||
@@ -732,7 +707,8 @@ function COE_Totem:UpdateDynamic()
|
||||
-- show button if it has a totem and the bar is expanded
|
||||
-- ------------------------------------------------------
|
||||
button:SetScale(0.8);
|
||||
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing );
|
||||
button:SetPoint(this.Point, lastvisible, this.RelPoint,
|
||||
this.XSpacing, this.YSpacing);
|
||||
button:Show();
|
||||
lastvisible = button;
|
||||
|
||||
@@ -759,7 +735,8 @@ function COE_Totem:UpdateDynamic()
|
||||
-- show button if it is active
|
||||
-- ----------------------------
|
||||
button:SetScale(0.8);
|
||||
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing );
|
||||
button:SetPoint(this.Point, lastvisible, this.RelPoint,
|
||||
this.XSpacing, this.YSpacing);
|
||||
button:Show();
|
||||
lastvisible = button;
|
||||
|
||||
@@ -767,7 +744,8 @@ function COE_Totem:UpdateDynamic()
|
||||
-- show button if it has a running cooldown
|
||||
-- -----------------------------------------
|
||||
button:SetScale(0.8);
|
||||
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing );
|
||||
button:SetPoint(this.Point, lastvisible, this.RelPoint,
|
||||
this.XSpacing, this.YSpacing);
|
||||
button:Show();
|
||||
lastvisible = button;
|
||||
|
||||
@@ -775,7 +753,8 @@ function COE_Totem:UpdateDynamic()
|
||||
-- show button if it isa advised
|
||||
-- ------------------------------
|
||||
button:SetScale(0.8);
|
||||
button:SetPoint( this.Point, lastvisible, this.RelPoint, this.XSpacing, this.YSpacing );
|
||||
button:SetPoint(this.Point, lastvisible, this.RelPoint,
|
||||
this.XSpacing, this.YSpacing);
|
||||
button:Show();
|
||||
lastvisible = button;
|
||||
|
||||
@@ -789,7 +768,6 @@ function COE_Totem:UpdateDynamic()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:COESched_HideDynamicButtons
|
||||
|
||||
@@ -803,7 +781,6 @@ function COESched_HideDynamicButtons( frame )
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:SetFrameDirection
|
||||
|
||||
@@ -848,7 +825,6 @@ function COE_Totem:SetFrameDirection( frame, direction )
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:AdjustDraggedFrames
|
||||
|
||||
@@ -858,9 +834,7 @@ end
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:AdjustDraggedFrames()
|
||||
|
||||
if( COE_Config:GetSaved( COEOPT_GROUPBARS ) == 0 ) then
|
||||
return;
|
||||
end
|
||||
if (COE_Config:GetSaved(COEOPT_GROUPBARS) == 0) then return; end
|
||||
|
||||
local x, y, k, dx, dy;
|
||||
|
||||
@@ -884,7 +858,8 @@ function COE_Totem:AdjustDraggedFrames()
|
||||
-- the relative position to the frame being dragged
|
||||
-- -------------------------------------------------
|
||||
frame:ClearAllPoints();
|
||||
frame:SetPoint( "TOPLEFT", UIParent, "BOTTOMLEFT", COEFramePositions[frame.Element].x + dx,
|
||||
frame:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT",
|
||||
COEFramePositions[frame.Element].x + dx,
|
||||
COEFramePositions[frame.Element].y + dy);
|
||||
|
||||
-- invalidate all parts
|
||||
@@ -896,7 +871,6 @@ function COE_Totem:AdjustDraggedFrames()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:UpdateFrameCoordinates
|
||||
|
||||
@@ -918,7 +892,6 @@ function COE_Totem:UpdateFrameCoordinates()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ =============================================================================================
|
||||
|
||||
B U T T O N
|
||||
@@ -943,9 +916,7 @@ end
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:OnTotemButtonLoad()
|
||||
|
||||
if( not COE.Initialized ) then
|
||||
return;
|
||||
end
|
||||
if (not COE.Initialized) then return; end
|
||||
|
||||
-- init properties
|
||||
-- ----------------
|
||||
@@ -970,7 +941,6 @@ function COE_Totem:OnTotemButtonLoad()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:OnTotemButtonEvent
|
||||
|
||||
@@ -984,19 +954,13 @@ function COE_Totem:OnTotemButtonEvent( event )
|
||||
end
|
||||
|
||||
elseif (event == "ACTIONBAR_UPDATE_USABLE") then
|
||||
if( this.totem ) then
|
||||
COE_Totem:UpdateTotemButtonIsUsable();
|
||||
end
|
||||
if (this.totem) then COE_Totem:UpdateTotemButtonIsUsable(); end
|
||||
|
||||
elseif (event == "ACTIONBAR_UPDATE_COOLDOWN") then
|
||||
if( this.totem ) then
|
||||
COE_Totem:UpdateTotemButtonCooldown();
|
||||
end
|
||||
if (this.totem) then COE_Totem:UpdateTotemButtonCooldown(); end
|
||||
|
||||
elseif (event == "UNIT_MANA" and arg1 == "player") then
|
||||
if( this.totem ) then
|
||||
COE_Totem:UpdateTotemButtonIsUsable();
|
||||
end
|
||||
if (this.totem) then COE_Totem:UpdateTotemButtonIsUsable(); end
|
||||
|
||||
elseif (event == "UNIT_INVENTORY_CHANGED" or event == "BAG_UPDATE") then
|
||||
-- check for presence of totem tools
|
||||
@@ -1008,13 +972,16 @@ function COE_Totem:OnTotemButtonEvent( event )
|
||||
local slot;
|
||||
totem.ToolPresent, slot = COE:IsTrinketPresent();
|
||||
|
||||
if( slot and slot ~= totem.TrinketSlot and totem.CurCooldown < 30 ) then
|
||||
if (slot and slot ~= totem.TrinketSlot and totem.CurCooldown <
|
||||
30) then
|
||||
-- trinket has been (re-)equipped
|
||||
-- start item cooldown
|
||||
-- -------------------------------
|
||||
totem.CurCooldown = 30;
|
||||
Chronos.startTimer("COECooldown" .. totem.SpellName);
|
||||
Chronos.scheduleByName( "COECooldownSwitch" .. totem.SpellName, totem.CurCooldown, COESched_CooldownEnd, totem );
|
||||
Chronos.scheduleByName(
|
||||
"COECooldownSwitch" .. totem.SpellName,
|
||||
totem.CurCooldown, COESched_CooldownEnd, totem);
|
||||
|
||||
end
|
||||
|
||||
@@ -1025,23 +992,21 @@ function COE_Totem:OnTotemButtonEvent( event )
|
||||
end
|
||||
|
||||
elseif (event == "UPDATE_BINDINGS") then
|
||||
if( this.totem ) then
|
||||
COE_Totem:UpdateTotemButtonHotKey();
|
||||
end
|
||||
if (this.totem) then COE_Totem:UpdateTotemButtonHotKey(); end
|
||||
|
||||
elseif( event == "SPELLCAST_STOP" ) then
|
||||
-- activate timer if totem is pending
|
||||
-- -----------------------------------
|
||||
if( COE_Config:GetSaved( COEOPT_ENABLETIMERS ) == 1 and
|
||||
this.totem and this.totem == COE.TotemPending.Totem ) then
|
||||
COE_Totem:ActivatePendingTotem( this.totem );
|
||||
end
|
||||
-- UPDATED single totem pending logic to handle multiple pending and fire when totem cast is reported from event
|
||||
-- elseif (event == "SPELLCAST_STOP") then
|
||||
-- -- activate timer if totem is pending
|
||||
-- -- -----------------------------------
|
||||
-- if (COE_Config:GetSaved(COEOPT_ENABLETIMERS) == 1 and this.totem and
|
||||
-- this.totem == COE.TotemPending.Totem) then
|
||||
-- COE_Totem:ActivatePendingTotem(this.totem);
|
||||
-- end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:UpdateTotemButton
|
||||
|
||||
@@ -1052,9 +1017,7 @@ function COE_Totem:UpdateTotemButton( elapsed )
|
||||
-- check if visual update is necessary
|
||||
-- ------------------------------------
|
||||
this.UpdateTime = this.UpdateTime + elapsed;
|
||||
if( this.UpdateTime <= COE.UpdateInterval ) then
|
||||
return;
|
||||
end
|
||||
if (this.UpdateTime <= COE.UpdateInterval) then return; end
|
||||
|
||||
if (this.totem == nil) then
|
||||
this:Hide();
|
||||
@@ -1107,7 +1070,8 @@ function COE_Totem:UpdateTotemButton( elapsed )
|
||||
end
|
||||
|
||||
elseif (COE_Config:GetSaved(COEOPT_ENABLESETS) == 1 and
|
||||
COE.TotemSets[COE_Config:GetSaved( COEOPT_ACTIVESET )][this.totem.Element] == this.totem ) then
|
||||
COE.TotemSets[COE_Config:GetSaved(COEOPT_ACTIVESET)][this.totem
|
||||
.Element] == this.totem) then
|
||||
|
||||
-- set a red border when this totem
|
||||
-- belongs to the current totem set
|
||||
@@ -1129,7 +1093,6 @@ function COE_Totem:UpdateTotemButton( elapsed )
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:UpdateTotemButtonCooldown
|
||||
|
||||
@@ -1137,9 +1100,7 @@ end
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:UpdateTotemButtonCooldown()
|
||||
|
||||
if( this.totem == COE.NoTotem ) then
|
||||
return;
|
||||
end;
|
||||
if (this.totem == COE.NoTotem) then return; end
|
||||
|
||||
local cooldown = getglobal(this:GetName() .. "Cooldown");
|
||||
|
||||
@@ -1151,7 +1112,8 @@ function COE_Totem:UpdateTotemButtonCooldown()
|
||||
|
||||
if (this.totem.isTrinket) then
|
||||
if (this.totem.ToolPresent) then
|
||||
start, duration, enable = GetInventoryItemCooldown( "player", this.totem.TrinketSlot );
|
||||
start, duration, enable =
|
||||
GetInventoryItemCooldown("player", this.totem.TrinketSlot);
|
||||
else
|
||||
cooldown:Hide();
|
||||
return;
|
||||
@@ -1168,7 +1130,6 @@ function COE_Totem:UpdateTotemButtonCooldown()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:UpdateTotemButtonIsUsable
|
||||
|
||||
@@ -1179,9 +1140,7 @@ end
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:UpdateTotemButtonIsUsable()
|
||||
|
||||
if( this.totem == COE.NoTotem ) then
|
||||
return;
|
||||
end;
|
||||
if (this.totem == COE.NoTotem) then return; end
|
||||
|
||||
local icon = getglobal(this:GetName() .. "Icon");
|
||||
local normalTexture = getglobal(this:GetName() .. "NormalTexture");
|
||||
@@ -1216,7 +1175,6 @@ function COE_Totem:UpdateTotemButtonIsUsable()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:UpdateTotemButtonHotKey
|
||||
|
||||
@@ -1224,14 +1182,14 @@ end
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:UpdateTotemButtonHotKey()
|
||||
|
||||
if( this.totem == COE.NoTotem ) then
|
||||
return;
|
||||
end;
|
||||
if (this.totem == COE.NoTotem) then return; end
|
||||
|
||||
-- get the binding name
|
||||
-- ---------------------
|
||||
local binding = "TOTEM" .. string.upper(this.totem.Element);
|
||||
local id = this:GetID() - getglobal( "COETotem" .. this.totem.Element .. "1" ):GetID() + 1;
|
||||
local id = this:GetID() -
|
||||
getglobal("COETotem" .. this.totem.Element .. "1"):GetID() +
|
||||
1;
|
||||
binding = binding .. id;
|
||||
|
||||
-- get the binding text
|
||||
@@ -1252,7 +1210,6 @@ function COE_Totem:UpdateTotemButtonHotKey()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:UpdateTotemButtonFlash
|
||||
|
||||
@@ -1261,14 +1218,15 @@ end
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:UpdateTotemButtonFlash(elapsed)
|
||||
|
||||
if( (this.totem == COE.NoTotem) or this.totem.isTrinket ) then
|
||||
return;
|
||||
end;
|
||||
if ((this.totem == COE.NoTotem) or this.totem.isTrinket) then return; end
|
||||
|
||||
if (COE_Config:GetSaved(COEOPT_ADVISOR) == 1) then
|
||||
if( (this == COE.CleansingTotems.Tremor.Button and COE.CleansingTotems.Tremor.Warn) or
|
||||
(this == COE.CleansingTotems.Disease.Button and COE.CleansingTotems.Disease.Warn) or
|
||||
(this == COE.CleansingTotems.Poison.Button and COE.CleansingTotems.Poison.Warn) ) then
|
||||
if ((this == COE.CleansingTotems.Tremor.Button and
|
||||
COE.CleansingTotems.Tremor.Warn) or
|
||||
(this == COE.CleansingTotems.Disease.Button and
|
||||
COE.CleansingTotems.Disease.Warn) or
|
||||
(this == COE.CleansingTotems.Poison.Button and
|
||||
COE.CleansingTotems.Poison.Warn)) then
|
||||
|
||||
this.Flashtime = this.Flashtime - elapsed;
|
||||
if (this.Flashtime <= 0) then
|
||||
@@ -1294,7 +1252,6 @@ function COE_Totem:UpdateTotemButtonFlash( elapsed )
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:OnEnterTotemButton
|
||||
|
||||
@@ -1308,7 +1265,8 @@ function COE_Totem:OnEnterTotemButton()
|
||||
if (COEUI_TTALIGN[COE_Config:GetSaved(COEOPT_TTALIGNMENT)][1] ~= "DISABLED" and
|
||||
this.totem ~= COE.NoTotem) then
|
||||
|
||||
GameTooltip:SetOwner( this, COEUI_TTALIGN[COE_Config:GetSaved( COEOPT_TTALIGNMENT )][1] );
|
||||
GameTooltip:SetOwner(this, COEUI_TTALIGN[COE_Config:GetSaved(
|
||||
COEOPT_TTALIGNMENT)][1]);
|
||||
|
||||
if (this.totem.isTrinket) then
|
||||
-- show item tooltip if equipped
|
||||
@@ -1337,7 +1295,6 @@ function COE_Totem:OnEnterTotemButton()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:OnLeaveTotemButton
|
||||
|
||||
@@ -1354,11 +1311,12 @@ function COE_Totem:OnLeaveTotemButton()
|
||||
-- schedule hiding of the dynamic buttons
|
||||
-- ---------------------------------------
|
||||
if (this.ElementFrame.Mode == "Flex") then
|
||||
Chronos.scheduleByName( "COEFlex" .. this.ElementFrame.Element, COE_Totem.FlexTime, COESched_HideDynamicButtons, this.ElementFrame );
|
||||
Chronos.scheduleByName("COEFlex" .. this.ElementFrame.Element,
|
||||
COE_Totem.FlexTime, COESched_HideDynamicButtons,
|
||||
this.ElementFrame);
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:OnTotemButtonClick
|
||||
|
||||
@@ -1367,9 +1325,7 @@ end
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:OnTotemButtonClick()
|
||||
|
||||
if( this.totem == COE.NoTotem ) then
|
||||
return;
|
||||
end;
|
||||
if (this.totem == COE.NoTotem) then return; end
|
||||
|
||||
if (COE.ConfigureBarMode) then
|
||||
|
||||
@@ -1398,13 +1354,15 @@ function COE_Totem:OnTotemButtonClick()
|
||||
else
|
||||
-- swap this totem with the first one
|
||||
-- -----------------------------------
|
||||
local swap = COE_DisplayedTotems[COE_Config.ConfigureOrderTotem.SpellName].Order;
|
||||
COE_DisplayedTotems[COE_Config.ConfigureOrderTotem.SpellName].Order = COE_DisplayedTotems[this.totem.SpellName].Order;
|
||||
local swap = COE_DisplayedTotems[COE_Config.ConfigureOrderTotem
|
||||
.SpellName].Order;
|
||||
COE_DisplayedTotems[COE_Config.ConfigureOrderTotem.SpellName].Order =
|
||||
COE_DisplayedTotems[this.totem.SpellName].Order;
|
||||
COE_DisplayedTotems[this.totem.SpellName].Order = swap;
|
||||
|
||||
COE_Config.ConfigureOrderTotem = nil;
|
||||
|
||||
end;
|
||||
end
|
||||
|
||||
-- reconfigure totem bar
|
||||
-- ----------------------
|
||||
@@ -1420,16 +1378,19 @@ function COE_Totem:OnTotemButtonClick()
|
||||
if (activeset <= COESET_DEFAULT) then
|
||||
COE_SavedTotemSets[activeset][this.totem.Element] = "";
|
||||
else
|
||||
COE_CustomTotemSets[activeset - COESET_DEFAULT][this.totem.Element] = "";
|
||||
COE_CustomTotemSets[activeset - COESET_DEFAULT][this.totem
|
||||
.Element] = "";
|
||||
end
|
||||
else
|
||||
-- store in set
|
||||
-- -------------
|
||||
COE.TotemSets[activeset][this.totem.Element] = this.totem;
|
||||
if (activeset <= COESET_DEFAULT) then
|
||||
COE_SavedTotemSets[activeset][this.totem.Element] = this.totem.SpellName;
|
||||
COE_SavedTotemSets[activeset][this.totem.Element] = this.totem
|
||||
.SpellName;
|
||||
else
|
||||
COE_CustomTotemSets[activeset - COESET_DEFAULT][this.totem.Element] = this.totem.SpellName;
|
||||
COE_CustomTotemSets[activeset - COESET_DEFAULT][this.totem
|
||||
.Element] = this.totem.SpellName;
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1441,9 +1402,7 @@ function COE_Totem:OnTotemButtonClick()
|
||||
|
||||
-- if the ctrl key is down, make this totem the anchor totem
|
||||
-- ----------------------------------------------------------
|
||||
if( IsControlKeyDown() ) then
|
||||
COE_Totem:MakeAnchorTotem( this );
|
||||
end
|
||||
if (IsControlKeyDown()) then COE_Totem:MakeAnchorTotem(this); end
|
||||
|
||||
if (this.totem.isTrinket) then
|
||||
|
||||
@@ -1469,7 +1428,6 @@ function COE_Totem:OnTotemButtonClick()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:ButtonStartDrag
|
||||
|
||||
@@ -1484,7 +1442,8 @@ function COE_Totem:ButtonStartDrag()
|
||||
-- Additionally holding the control key while doing so
|
||||
-- picks up Rank 1.
|
||||
---------------------------------------------------------
|
||||
elseif( (this.totem ~= COE.NoTotem) and (not this.totem.isTrinket) and IsShiftKeyDown() ) then
|
||||
elseif ((this.totem ~= COE.NoTotem) and (not this.totem.isTrinket) and
|
||||
IsShiftKeyDown()) then
|
||||
local rank;
|
||||
if (IsControlKeyDown()) then
|
||||
rank = 1;
|
||||
@@ -1495,14 +1454,14 @@ function COE_Totem:ButtonStartDrag()
|
||||
local SpellID = this.totem.Ranks[rank].SpellID;
|
||||
PickupSpell(SpellID, BOOKTYPE_SPELL);
|
||||
|
||||
elseif( COE_Config:GetSaved( COEOPT_FIXBAR ) == 0 and this == this.ElementFrame.AnchorTotem ) then
|
||||
elseif (COE_Config:GetSaved(COEOPT_FIXBAR) == 0 and this ==
|
||||
this.ElementFrame.AnchorTotem) then
|
||||
this:GetParent():StartMoving();
|
||||
this:GetParent().IsMoving = true;
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:ButtonStopDrag
|
||||
|
||||
@@ -1519,7 +1478,6 @@ function COE_Totem:ButtonStopDrag()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:MakeAnchorTotem
|
||||
|
||||
@@ -1539,13 +1497,15 @@ function COE_Totem:MakeAnchorTotem( button )
|
||||
-- swap this totem with the anchor totem
|
||||
-- --------------------------------------
|
||||
local swap = COE_DisplayedTotems[anchor.SpellName].Order;
|
||||
COE_DisplayedTotems[anchor.SpellName].Order = COE_DisplayedTotems[totem.SpellName].Order;
|
||||
COE_DisplayedTotems[anchor.SpellName].Order =
|
||||
COE_DisplayedTotems[totem.SpellName].Order;
|
||||
COE_DisplayedTotems[totem.SpellName].Order = swap;
|
||||
|
||||
elseif (mode == COEMODE_ACTIVESET) then
|
||||
-- replace the set totem with this one
|
||||
-- ------------------------------------
|
||||
COE.TotemSets[COE_Config:GetSaved( COEOPT_ACTIVESET )][totem.Element] = totem;
|
||||
COE.TotemSets[COE_Config:GetSaved(COEOPT_ACTIVESET)][totem.Element] =
|
||||
totem;
|
||||
end
|
||||
|
||||
COE_Totem:Invalidate(button.ElementFrame, true, true, true);
|
||||
@@ -1554,7 +1514,6 @@ function COE_Totem:MakeAnchorTotem( button )
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:SetTimerText
|
||||
|
||||
@@ -1562,21 +1521,19 @@ end
|
||||
associated totem has an active timer
|
||||
-------------------------------------------------------------------]]
|
||||
function COE_Totem:SetTimerText()
|
||||
if( this.totem == COE.NoTotem ) then
|
||||
return;
|
||||
end;
|
||||
if (this.totem == COE.NoTotem) then return; end
|
||||
|
||||
local timertext = getglobal(this:GetName() .. "Text");
|
||||
local overlaytex = getglobal(this:GetName() .. "OverlayTex");
|
||||
|
||||
-- show timers only in timerframe and this is a bar button?
|
||||
-- ---------------------------------------------------------
|
||||
if( COE_Config:GetSaved( COEOPT_FRAMETIMERSONLY ) == 1 and
|
||||
this:GetParent() ~= COETimerFrame ) then
|
||||
if (COE_Config:GetSaved(COEOPT_FRAMETIMERSONLY) == 1 and this:GetParent() ~=
|
||||
COETimerFrame) then
|
||||
timertext:Hide();
|
||||
overlaytex:Hide();
|
||||
return;
|
||||
end;
|
||||
end
|
||||
|
||||
if (COE_Config:GetSaved(COEOPT_ENABLETIMERS) == 1) then
|
||||
if (COE_Totem:IsTimerActive(this.totem)) then
|
||||
@@ -1654,7 +1611,6 @@ function COE_Totem:SetTimerText()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ =============================================================================================
|
||||
|
||||
T I M E R F R A M E
|
||||
@@ -1669,15 +1625,12 @@ end
|
||||
function COE_Totem:InitTimerFrame()
|
||||
-- addon loaded?
|
||||
-- --------------
|
||||
if( not COE.Initialized ) then
|
||||
return;
|
||||
end
|
||||
if (not COE.Initialized) then return; end
|
||||
|
||||
this.UpdateTime = 0;
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[ ----------------------------------------------------------------
|
||||
METHOD: COE_Totem:UpdateTimerFrame
|
||||
|
||||
@@ -1688,15 +1641,12 @@ function COE_Totem:UpdateTimerFrame( elapsed )
|
||||
-- check if visual update is necessary
|
||||
-- ------------------------------------
|
||||
this.UpdateTime = this.UpdateTime + elapsed;
|
||||
if( this.UpdateTime <= COE.UpdateInterval ) then
|
||||
return;
|
||||
end
|
||||
if (this.UpdateTime <= COE.UpdateInterval) then return; end
|
||||
|
||||
-- set scaling
|
||||
-- ------------
|
||||
this:SetScale(COE_Config:GetSaved(COEOPT_SCALING));
|
||||
|
||||
|
||||
local k;
|
||||
local lastbutton = nil;
|
||||
local count = 0;
|
||||
@@ -1710,17 +1660,23 @@ function COE_Totem:UpdateTimerFrame( elapsed )
|
||||
if (lastbutton) then
|
||||
if (COE_Config:GetSaved(COEOPT_DISPLAYALIGN) == COEMODE_BOX) then
|
||||
if (count == 2) then
|
||||
button:SetPoint( "TOPRIGHT", lastbutton:GetName(), "BOTTOMLEFT", -COEUI_BUTTONGAP, -COEUI_BUTTONGAP );
|
||||
button:SetPoint("TOPRIGHT", lastbutton:GetName(),
|
||||
"BOTTOMLEFT", -COEUI_BUTTONGAP,
|
||||
-COEUI_BUTTONGAP);
|
||||
lastbutton = button;
|
||||
else
|
||||
button:SetPoint( "TOPLEFT", lastbutton:GetName(), "TOPRIGHT", COEUI_BUTTONGAP, 0 );
|
||||
button:SetPoint("TOPLEFT", lastbutton:GetName(),
|
||||
"TOPRIGHT", COEUI_BUTTONGAP, 0);
|
||||
lastbutton = button;
|
||||
end
|
||||
elseif( COE_Config:GetSaved( COEOPT_DISPLAYALIGN ) == COEMODE_VERTICAL ) then
|
||||
button:SetPoint( "TOPLEFT", lastbutton:GetName(), "BOTTOMLEFT", 0, -COEUI_BUTTONGAP );
|
||||
elseif (COE_Config:GetSaved(COEOPT_DISPLAYALIGN) ==
|
||||
COEMODE_VERTICAL) then
|
||||
button:SetPoint("TOPLEFT", lastbutton:GetName(),
|
||||
"BOTTOMLEFT", 0, -COEUI_BUTTONGAP);
|
||||
lastbutton = button;
|
||||
else
|
||||
button:SetPoint( "TOPLEFT", lastbutton:GetName(), "TOPRIGHT", COEUI_BUTTONGAP, 0 );
|
||||
button:SetPoint("TOPLEFT", lastbutton:GetName(), "TOPRIGHT",
|
||||
COEUI_BUTTONGAP, 0);
|
||||
lastbutton = button;
|
||||
end
|
||||
else
|
||||
|
||||
+15
-5
@@ -96,6 +96,10 @@ end
|
||||
PURPOSE: Handles frame events
|
||||
-------------------------------------------------------------------]]
|
||||
function COE:OnEvent(event)
|
||||
if (COE.EventPrintMode) then
|
||||
COE:DebugMessage("Event: " .. event);
|
||||
if (arg1) then COE:DebugMessage("arg1: " .. arg1); end
|
||||
end
|
||||
|
||||
if (event == "VARIABLES_LOADED") then
|
||||
-- fix saved variables if this update has to do so
|
||||
@@ -103,14 +107,16 @@ function COE:OnEvent(event)
|
||||
COE:FixSavedVariables();
|
||||
|
||||
elseif (event == "CHAT_MSG_SPELL_SELF_BUFF") then
|
||||
-- resolve Totemic Recall event
|
||||
if (string.find(arg1, "Mana from Totemic Recall")) then
|
||||
COE:DebugMessage("Totemic Recall initiating reset of timers.");
|
||||
COE_Totem:ResetTimers();
|
||||
|
||||
-- Resolve Totem cast event
|
||||
elseif (string.find(arg1, "Totem")) then
|
||||
local totem = COE_Totem:GetTotemFromText(arg1);
|
||||
if (totem) then COE_Totem:ActivateTotem(totem); end
|
||||
end
|
||||
|
||||
elseif (COE.EventPrintMode) then
|
||||
COE:DebugMessage(event);
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@@ -190,9 +196,12 @@ function COEProcessShellCommand(msg)
|
||||
if (msg == "" or msg == "config") then
|
||||
COE:ToggleConfigFrame();
|
||||
|
||||
elseif (msg == "list") then
|
||||
elseif (msg == "list" or msg == "help") then
|
||||
COE:DisplayShellCommands();
|
||||
|
||||
elseif (msg == "debug") then
|
||||
COE["DebugMode"] = not COE.DebugMode;
|
||||
COE:Message(tostring(COE.DebugMode));
|
||||
elseif (msg == "nextset") then
|
||||
COE_Totem:SwitchToNextSet();
|
||||
|
||||
@@ -255,6 +264,7 @@ function COE:DisplayShellCommands()
|
||||
COE:Message(COESHELL_MACRONOTE);
|
||||
COE:Message(COESHELL_THROWSET);
|
||||
COE:Message(COESHELL_ADVISED);
|
||||
COE:Message(COESHELL_DEBUG);
|
||||
|
||||
end
|
||||
|
||||
|
||||
+3
-1
@@ -218,7 +218,7 @@ COEMODIFIER_NUMPAD_SHORT = "NP";
|
||||
-- ---------------
|
||||
COESHELL_INTRO = "Available shell commands for Call Of Elements:";
|
||||
COESHELL_CONFIG = "'/coe' or '/coe config' - Shows the configuration dialog";
|
||||
COESHELL_LIST = "'/coe list' - Shows this list";
|
||||
COESHELL_LIST = "'/coe list' or '/coe help' - Shows this list";
|
||||
COESHELL_NEXTSET =
|
||||
"'/coe nexset' - Switches to the next custom totem set or the default set";
|
||||
COESHELL_PRIORSET =
|
||||
@@ -237,3 +237,5 @@ COESHELL_MACRONOTE =
|
||||
"The following commands only work as macros dragged to your action bars:";
|
||||
COESHELL_THROWSET = "'/coe throwset' - Throws the active totem set";
|
||||
COESHELL_ADVISED = "'/coe advised' - Throws the next advised totem";
|
||||
COESHELL_DEBUG =
|
||||
"'/coe debug' - Toggles debug message printing (disable by default)";
|
||||
|
||||
Reference in New Issue
Block a user