Merge pull request #6 from MDGitHubRepo/Issue-#5-throwset-fixes

Issue #5 throwset fixes
This commit is contained in:
MDGitHubRepo
2024-12-14 16:27:50 -05:00
committed by GitHub
5 changed files with 2429 additions and 2307 deletions
+6
View File
@@ -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
+293 -139
View File
@@ -8,18 +8,13 @@
Totem Module / Logical
]]
if( not COE_Totem ) then
COE_Totem = {};
end
]] if (not COE_Totem) then COE_Totem = {}; end
--[[ ----------------------------------------------------------------
stores the original functions hooked by SetupTimerHooks()
-------------------------------------------------------------------]]
COE_Totem["TimerHooks"] = {};
--[[ =============================================================================================
L O G I C
@@ -54,16 +49,16 @@ end
PURPOSE: Throws the totem with the specified named id
-------------------------------------------------------------------]]
function COE_Totem:ThrowTotem(element, id)
if( not COE.Initialized ) then
return;
end
COE:DebugMessage(
"COE_Totem:ThrowTotem element and id: " .. element .. " " .. id);
if (not COE.Initialized) then return; end
-- get associated button
-- ----------------------
local button = getglobal("COETotem" .. element .. id);
if (button == nil) then
COE:Message("Invalid Totem");
return;
end
@@ -79,7 +74,6 @@ function COE_Totem:ThrowTotem( element, id )
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:RankModifierDown
@@ -105,7 +99,6 @@ function COE_Totem:RankModifierDown()
end
--[[ ----------------------------------------------------------------
METHOD: COESched_AdviseTotem
@@ -117,16 +110,17 @@ function COESched_AdviseTotem( totem, msg )
if (COE_Config:GetSaved(COEOPT_ADVISOR) == 1 and totem.Warn) then
-- issue warning
-- --------------
COE:Notification( string.format( COESTR_CLEANSINGTOTEM, msg ), COECOL_TOTEMCLEANSING );
COE:Notification(string.format(COESTR_CLEANSINGTOTEM, msg),
COECOL_TOTEMCLEANSING);
-- reschedule
-- -----------
Chronos.scheduleByName( "COEAdvise" .. msg, COE.AdvisorWarningInterval, COESched_AdviseTotem, totem, msg );
Chronos.scheduleByName("COEAdvise" .. msg, COE.AdvisorWarningInterval,
COESched_AdviseTotem, totem, msg);
end
end
--[[ ----------------------------------------------------------------
METHOD: COESched_RunAdvisor
@@ -137,9 +131,7 @@ function COESched_RunAdvisor()
-- advisor still activated?
-- -------------------------
if( COE_Config:GetSaved( COEOPT_ADVISOR ) == 0 ) then
return;
end
if (COE_Config:GetSaved(COEOPT_ADVISOR) == 0) then return; end
local warnPoison, warnDisease, warnTremor = false, false, false;
local poison, disease, tremor;
@@ -156,9 +148,7 @@ function COESched_RunAdvisor()
-- -----------
local i;
for i = 1, GetNumPartyMembers() do
if( warnPoison and warnDisease and warnTremor ) then
break;
end
if (warnPoison and warnDisease and warnTremor) then break end
-- scan party member
-- ------------------
@@ -171,7 +161,8 @@ function COESched_RunAdvisor()
-- scan party member's pet
-- ------------------------
if (UnitExists("partypet" .. i)) then
poison, disease, tremor = COE_Totem:ScanTargetForDebuff( "partypet" .. i );
poison, disease, tremor = COE_Totem:ScanTargetForDebuff(
"partypet" .. i);
warnPoison = warnPoison or poison;
warnDisease = warnDisease or disease;
@@ -199,7 +190,8 @@ function COESched_RunAdvisor()
if (not COE.CleansingTotems.Disease.Warn) then
COE.CleansingTotems.Disease.Warn = true;
COESched_AdviseTotem( COE.CleansingTotems.Disease, COESTR_TOTEMDISEASE );
COESched_AdviseTotem(COE.CleansingTotems.Disease,
COESTR_TOTEMDISEASE);
end
else
COE.CleansingTotems.Disease.Warn = false;
@@ -223,7 +215,6 @@ function COESched_RunAdvisor()
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:ScanTargetForDebuff
@@ -284,7 +275,6 @@ function COE_Totem:ScanTargetForDebuff( target )
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:ThrowAdvisedTotem
@@ -315,7 +305,6 @@ function COE_Totem:ThrowAdvisedTotem()
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:IsAdvisedTotem
@@ -323,9 +312,12 @@ end
-------------------------------------------------------------------]]
function COE_Totem:IsAdvisedTotem(totem)
if( (COE.CleansingTotems.Tremor.Warn and totem == COE.CleansingTotems.Tremor.Totem) or
(COE.CleansingTotems.Disease.Warn and totem == COE.CleansingTotems.Disease.Totem) or
(COE.CleansingTotems.Poison.Warn and totem == COE.CleansingTotems.Poison.Totem) ) then
if ((COE.CleansingTotems.Tremor.Warn and totem ==
COE.CleansingTotems.Tremor.Totem) or
(COE.CleansingTotems.Disease.Warn and totem ==
COE.CleansingTotems.Disease.Totem) or
(COE.CleansingTotems.Poison.Warn and totem ==
COE.CleansingTotems.Poison.Totem)) then
return true;
else
return false;
@@ -333,14 +325,12 @@ function COE_Totem:IsAdvisedTotem( totem )
end
--[[ =============================================================================================
T O T E M - S E T S
================================================================================================]]
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:SwitchNamedSet
@@ -369,7 +359,6 @@ function COE_Totem:SwitchNamedSet()
return false;
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:SwitchPVPSet
@@ -396,7 +385,7 @@ function COE_Totem:SwitchPVPSet()
COE_Totem:SwitchToSet(COE.LastActiveSet);
else
COE_Totem:SwitchToSet(COEUI_DEFAULTSET);
end;
end
end
end
@@ -405,7 +394,6 @@ function COE_Totem:SwitchPVPSet()
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:SwitchToNextSet
@@ -438,14 +426,14 @@ function COE_Totem:SwitchToNextSet()
else
-- switch to next custom set
-- --------------------------
COE_Totem:SwitchToSet( COE_CustomTotemSets[activeset - COESET_DEFAULT + 1].Name );
COE_Totem:SwitchToSet(
COE_CustomTotemSets[activeset - COESET_DEFAULT + 1].Name);
end
end
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:SwitchToPriorSet
@@ -467,7 +455,8 @@ function COE_Totem:SwitchToPriorSet()
-- default set is active
-- switch to last custom set
-- ---------------------------
COE_Totem:SwitchToSet( COE_CustomTotemSets[COE.TotemSetCount - COESET_DEFAULT].Name );
COE_Totem:SwitchToSet(COE_CustomTotemSets[COE.TotemSetCount -
COESET_DEFAULT].Name);
elseif (activeset == COESET_DEFAULT + 1) then
-- first custom set is active
@@ -478,14 +467,14 @@ function COE_Totem:SwitchToPriorSet()
else
-- switch to prior custom set
-- ---------------------------
COE_Totem:SwitchToSet( COE_CustomTotemSets[activeset - COESET_DEFAULT - 1].Name );
COE_Totem:SwitchToSet(
COE_CustomTotemSets[activeset - COESET_DEFAULT - 1].Name);
end
end
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:SwitchToSet
@@ -493,9 +482,7 @@ end
-------------------------------------------------------------------]]
function COE_Totem:SwitchToSet(name)
if( COE_Config:GetSaved( COEOPT_ENABLESETS ) == 0 ) then
return;
end
if (COE_Config:GetSaved(COEOPT_ENABLESETS) == 0) then return; end
local pvpset = false;
@@ -508,7 +495,7 @@ function COE_Totem:SwitchToSet( name )
-- ----------
set = i;
pvpset = i ~= COESET_DEFAULT;
break;
break
end
end
@@ -520,14 +507,12 @@ function COE_Totem:SwitchToSet( name )
-- set found
-- ----------
set = COESET_DEFAULT + i;
break;
break
end
end
end
if( not set ) then
return;
end
if (not set) then return; end
-- activate set if not already active
-- chech this to stop notification spamming in a duel
@@ -535,9 +520,7 @@ function COE_Totem:SwitchToSet( name )
if (COE_Config:GetSaved(COEOPT_ACTIVESET) ~= set) then
COE_Config:ActivateSet(set);
if( not pvpset ) then
COE.LastActiveSet = name;
end
if (not pvpset) then COE.LastActiveSet = name; end
-- reset set cycle
-- ----------------
@@ -550,7 +533,6 @@ function COE_Totem:SwitchToSet( name )
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:ThrowSet
@@ -558,6 +540,7 @@ end
yet thrown
-------------------------------------------------------------------]]
function COE_Totem:ThrowSet()
COE:DebugMessage("Method Executing: ThrowSet");
if (COE_Config:GetSaved(COEOPT_ENABLESETS) == 1) then
@@ -565,13 +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 element = COE:LocalizedElement( COE.TotemSets[activeset].CastOrder[k] );
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
@@ -579,7 +568,8 @@ function COE_Totem:ThrowSet()
if (totem.TrinketSlot) then
-- first check if the trinket is already usable
-- ---------------------------------------------
local start, duration = GetInventoryItemCooldown( "player", totem.TrinketSlot );
local start, duration =
GetInventoryItemCooldown("player", totem.TrinketSlot);
if (start == 0 and duration == 0) then
UseInventoryItem(totem.TrinketSlot);
@@ -588,12 +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 );
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
CastSpellByName( COE.TotemSets[activeset][element].SpellName );
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
@@ -602,7 +604,6 @@ function COE_Totem:ThrowSet()
end
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:ResetSetCycle
@@ -615,7 +616,6 @@ function COE_Totem:ResetSetCycle()
end
--[[ =============================================================================================
T I M E R - L O G I C
@@ -628,87 +628,247 @@ 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", timeout, COESched_CheckPendingTotem );
else
COE.TotemPending.Totem = nil;
COE.TotemPending.UseRank = 0;
end
Chronos.scheduleByName("COE_Pending", timeoutSec,
COESched_CheckPendingTotem, totem.Element);
end
end
--[[ ----------------------------------------------------------------
METHOD: COESched_CheckPendingTotem
PURPOSE: Clears the pending totem if it is still active
PURPOSE: Clears the pending totem if it is still pending.
-------------------------------------------------------------------]]
function COESched_CheckPendingTotem()
function COESched_CheckPendingTotem(element)
COE:DebugMessage("Executing Method: 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 );
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
still active timer of the same element
-------------------------------------------------------------------]]
function COE_Totem:ActivatePendingTotem(totem)
COE:DebugMessage("Method Executing: ActivatePendingTotem with totem parameter ".. totem.SpellName);
COE:DebugMessage(
"Method Executing: ActivatePendingTotem with totem parameter " ..
totem.SpellName);
-- deactivate still active totem of the same element
-- --------------------------------------------------
COE:DebugMessage("Method Executing: ActivatePendingTotem - identifying active totems of type".. COE.TotemPending.Totem.Element);
COE:DebugMessage(
"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
if (active) then COE_Totem:DeactivateTimer(active); end
-- activate timer
-- ---------------
Chronos.startTimer("COE" .. totem.SpellName);
totem.CurDuration = COE.TotemPending.Totem.Ranks[COE.TotemPending.UseRank].Duration;
totem.CurHealth = COE.TotemPending.Totem.Ranks[COE.TotemPending.UseRank].Health;
totem.CurDuration = COE.TotemPending.Totem.Ranks[COE.TotemPending.UseRank]
.Duration;
totem.CurHealth = COE.TotemPending.Totem.Ranks[COE.TotemPending.UseRank]
.Health;
-- activate cooldown timer if this totem has a cooldown
-- -----------------------------------------------------
if (COE.TotemPending.Totem.Ranks[COE.TotemPending.UseRank].Cooldown > 0) then
totem.CurCooldown = COE.TotemPending.Totem.Ranks[COE.TotemPending.UseRank].Cooldown;
totem.CurCooldown = COE.TotemPending.Totem.Ranks[COE.TotemPending
.UseRank].Cooldown;
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
-- activate warning timers
-- ------------------------
if (totem.CurDuration >= 10) then
Chronos.scheduleByName( "COEWarn10" .. totem.SpellName, totem.CurDuration - 10, COESched_ExpirationWarning, 10, totem );
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 );
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
-- ---------------------
@@ -740,17 +900,18 @@ function COE_Totem:ActivatePendingTotem( totem )
-- 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 );
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 );
COE_Totem:Invalidate(getglobal("COE" .. totem.Element .. "Frame"),
false, false, true);
end
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:DeactivateTimer
@@ -788,19 +949,20 @@ 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 .. " in current cycle: UNSET" );
COE:DebugMessage("DeactivateTimer Element " .. totem.Element ..
" in current cycle: UNSET");
COE.SetCycle[totem.Element] = false;
end
-- invalidate dynamic buttons
-- ---------------------------
COE_Totem:Invalidate( getglobal( "COE" .. totem.Element .. "Frame" ), false, false, true );
COE_Totem:Invalidate(getglobal("COE" .. totem.Element .. "Frame"),
false, false, true);
end
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:IsTimerActive
@@ -808,16 +970,14 @@ end
-------------------------------------------------------------------]]
function COE_Totem:IsTimerActive(totem)
if( not totem ) then
return false;
end
if (not totem) then return false; end
return (totem.CurDuration > 0) and
(totem.CurDuration - Chronos.getTimer( "COE" .. totem.SpellName ) > 0);
(totem.CurDuration - Chronos.getTimer("COE" .. totem.SpellName) >
0);
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:GetTimeLeft
@@ -833,7 +993,6 @@ function COE_Totem:GetTimeLeft( totem )
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:GetCooldownLeft
@@ -844,19 +1003,21 @@ function COE_Totem:GetCooldownLeft( totem )
if (totem.CurCooldown == 0) then
return 0;
else
return totem.CurCooldown - Chronos.getTimer( "COECooldown" .. totem.SpellName );
return totem.CurCooldown -
Chronos.getTimer("COECooldown" .. totem.SpellName);
end
end
--[[ ----------------------------------------------------------------
METHOD: COESched_ExpirationWarning
PURPOSE: Issues an expiration warning for the specified totem
-------------------------------------------------------------------]]
function COESched_ExpirationWarning(timemark, totem)
COE:DebugMessage("Method Executing: COESched_ExpirationWarning with totem parameter ".. totem.SpellName);
COE:DebugMessage(
"Method Executing: COESched_ExpirationWarning with totem parameter " ..
totem.SpellName);
if (COE_Config:GetSaved(COEOPT_ENABLETOTEMBAR) == 1 and
COE_Config:GetSaved(COEOPT_ENABLETIMERS) == 1 and
@@ -870,16 +1031,17 @@ function COESched_ExpirationWarning( timemark, totem )
end
if (timemark > 0) then
COE:Notification( string.format( COESTR_TOTEMWARNING, text, timemark ), COECOL_TOTEMWARNING );
COE:Notification(string.format(COESTR_TOTEMWARNING, text, timemark),
COECOL_TOTEMWARNING);
else
COE:Notification( string.format( COESTR_TOTEMEXPIRED, text ), COECOL_TOTEMDESTROYED );
COE:Notification(string.format(COESTR_TOTEMEXPIRED, text),
COECOL_TOTEMDESTROYED);
COE_Totem:DeactivateTimer(totem);
end
end
end
--[[ ----------------------------------------------------------------
METHOD: COESched_CooldownEnd
@@ -893,7 +1055,6 @@ function COESched_CooldownEnd( totem )
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:TotemDamage
@@ -914,7 +1075,8 @@ function COE_Totem:TotemDamage()
if (COE.TotemData[i].SpellName == match[1]) then
-- subtract damage
-- ----------------
COE.TotemData[i].CurHealth = COE.TotemData[i].CurHealth - tonumber( match[2] );
COE.TotemData[i].CurHealth =
COE.TotemData[i].CurHealth - tonumber(match[2]);
-- totem destroyed?
-- -----------------
@@ -922,28 +1084,31 @@ function COE_Totem:TotemDamage()
if (COE.TotemData[i].CurHealth <= 0) then
COE:DebugMessage(match[1] .. " destroyed");
if( COE_Config:GetSaved( COEOPT_TIMERNOTIFICATIONS ) == 1 ) then
COE:Notification( string.format( COESTR_TOTEMDESTROYED, COE.TotemData[i].SpellName ),
if (COE_Config:GetSaved(COEOPT_TIMERNOTIFICATIONS) ==
1) then
COE:Notification(string.format(
COESTR_TOTEMDESTROYED,
COE.TotemData[i].SpellName),
COECOL_TOTEMDESTROYED);
end
COE_Totem:DeactivateTimer(COE.TotemData[i]);
else
COE:DebugMessage( match[1] .. " took " .. match[2] .. " damage. " ..
COE:DebugMessage(
match[1] .. " took " .. match[2] .. " damage. " ..
COE.TotemData[i].CurHealth .. " health left");
end
end
break;
break
end
end
break;
break
end
end
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:ResetTimers
@@ -961,7 +1126,6 @@ function COE_Totem:ResetTimers()
end
--[[ =============================================================================================
T I M E R - H O O K S
@@ -977,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)
@@ -1004,7 +1169,6 @@ function COE_Totem:SetupTimerHooks()
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:HookUseAction
@@ -1012,12 +1176,10 @@ 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
if (COE_Config:GetSaved(COEOPT_ENABLETIMERS) == 0) then return; end
-- get action tooltip
-- -------------------
@@ -1033,7 +1195,8 @@ function COE_Totem:HookUseAction( id, book )
trinket = text == COESTR_TRINKET_TOOLTIP;
for i = 1, COE.TotemCount do
if( (trinket and COE.TotemData[i].isTrinket) or COE.TotemData[i].SpellName == text ) then
if ((trinket and COE.TotemData[i].isTrinket) or
COE.TotemData[i].SpellName == text) then
if (COE.TotemData[i].isTrinket) then
rank = 0;
@@ -1065,14 +1228,12 @@ function COE_Totem:HookUseAction( id, book )
end
-- no totem spell. remove pending totem if set
-- --------------------------------------------
COE_Totem:SetPendingTotem(nil);
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:HookCastSpell
@@ -1080,12 +1241,11 @@ end
a totem
-------------------------------------------------------------------]]
function COE_Totem:HookCastSpell(id, book)
COE:DebugMessage("Method Executing: HookCastSpell");
-- use only when timers are enabled
-- ---------------------------------
if( COE_Config:GetSaved( COEOPT_ENABLETIMERS ) == 0 ) then
return;
end
if (COE_Config:GetSaved(COEOPT_ENABLETIMERS) == 0) then return; end
-- get the associated totem object
-- --------------------------------
@@ -1108,7 +1268,6 @@ function COE_Totem:HookCastSpell( id, book )
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:HookCastSpellByName
@@ -1116,12 +1275,11 @@ end
a totem
-------------------------------------------------------------------]]
function COE_Totem:HookCastSpellByName(SpellName)
COE:DebugMessage("Method Executing: HookCastSpellByName");
-- use only when timers are enabled
-- ---------------------------------
if( COE_Config:GetSaved( COEOPT_ENABLETIMERS ) == 0 ) then
return;
end
if (COE_Config:GetSaved(COEOPT_ENABLETIMERS) == 0) then return; end
-- extract rank information
-- -------------------------
@@ -1153,7 +1311,6 @@ function COE_Totem:HookCastSpellByName( SpellName )
end
--[[ ----------------------------------------------------------------
METHOD: COE_Totem:HookUseInventoryItem
@@ -1161,18 +1318,16 @@ end
a totem
-------------------------------------------------------------------]]
function COE_Totem:HookUseInventoryItem(slotid)
COE:DebugMessage("Method Executing: HookUseInventoryItem");
-- use only when timers are enabled
-- ---------------------------------
if( COE_Config:GetSaved( COEOPT_ENABLETIMERS ) == 0 ) then
return;
end
if (COE_Config:GetSaved(COEOPT_ENABLETIMERS) == 0) then return; end
-- only use for trinket slots
-- ---------------------------
if( slotid ~= GetInventorySlotInfo( "Trinket0Slot" ) and slotid ~= GetInventorySlotInfo( "Trinket1Slot" ) ) then
return;
end
if (slotid ~= GetInventorySlotInfo("Trinket0Slot") and slotid ~=
GetInventorySlotInfo("Trinket1Slot")) then return; end
-- iterate through out totems and find the trinket totem
-- ------------------------------------------------------
@@ -1197,4 +1352,3 @@ function COE_Totem:HookUseInventoryItem( slotid )
end
+148 -192
View File
@@ -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
View File
@@ -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
+78 -82
View File
@@ -1,18 +1,14 @@
--[[ ----------------------------------------------------------------
E N G L I S H
-------------------------------------------------------------------]]
-- Errors
-------------------------------------------------------------------]] -- Errors
-- -------
COESTR_NOTASHAMAN = "You are not a shaman. Unloading Call Of Elements";
COESTR_NOTOTEM = "No totem available yet";
COESTR_UI_NOTASSIGNED = "<No text assigned>";
COESTR_INVALIDELEMENT = "Invalid element found in totem: ";
-- Notifications
-- --------------
COESTR_TOTEMWARNING = "%s expires in %d seconds";
@@ -31,7 +27,6 @@ COESTR_HEALING = "Healing %s with %s (Rank %d)";
COESTR_HEALLOWERRANK = "Not enough mana. Using rank %d instead";
COESTR_HEALOOM = "Out of mana!";
-- String patterns
-- ----------------
COESTR_SCANTOTEMS = "Totem";
@@ -51,13 +46,11 @@ COESTR_MINAMOUNT = "(%d*) to";
COESTR_MAXAMOUNT = "to (%d*)";
COESTR_TRINKET = "^.*%[Enamored Water Spirit%].*$";
-- Spell Names and IDs
-- ----------------
COESTR_TOTEMICRECALL = "Totemic Recall";
COESTR_TOTEMICRECALLID = 35;
-- Totem Advisor
-- --------------
COESTR_POISON = "Poison";
@@ -68,12 +61,12 @@ COESTR_TOTEMTREMOR = "Tremor Totem";
COESTR_CLEANSINGTOTEM = "Throw %s now!";
COESTR_TREMOR = {
"Sleep", "Terrify", "Psychic Scream", "Mind Control", "Bellowing Roar", "Fear",
"Intimidating Shout", "Panic", "Terrifying Screech", "Seduction",
"Howl of Terror", "Intimidating Growl", "Crystalline Slumber", "Druid's Slumber"
"Sleep", "Terrify", "Psychic Scream", "Mind Control", "Bellowing Roar",
"Fear", "Intimidating Shout", "Panic", "Terrifying Screech", "Seduction",
"Howl of Terror", "Intimidating Growl", "Crystalline Slumber",
"Druid's Slumber"
}
-- Tools
-- ---------
COESTR_TOTEMTOOLS_EARTH = "Earth";
@@ -81,7 +74,6 @@ COESTR_TOTEMTOOLS_FIRE = "Fire";
COESTR_TOTEMTOOLS_WATER = "Water";
COESTR_TOTEMTOOLS_AIR = "Air";
-- Elements
-- ---------
COESTR_ELEMENT_EARTH = "Earth";
@@ -89,63 +81,61 @@ COESTR_ELEMENT_FIRE = "Fire";
COESTR_ELEMENT_WATER = "Water";
COESTR_ELEMENT_AIR = "Air";
-- UI elements
-- ------------
COEUI_STRINGS = {
COE_ConfigClose = "Close";
COE_ConfigTotemTabPanel = "Totem Options";
COE_ConfigHealingTabPanel = "Healing Options";
COE_ConfigDebuffTabPanel = "Debuff Options";
COE_ConfigTotemTotemBar = "Totem Bars";
COE_ConfigTotemTotemOptions = "Options";
COE_ConfigTotemTotemSets = "Totem Sets";
COE_OptionEnableTotemBar = "Enable Totem Bar";
COE_OptionHideBackdrop = "Hide background when inactive";
COE_OptionEnableTimers = "Enable totem timers";
COE_OptionEnableTimerNotifications = "Enable notifications";
COE_OptionTTAlignment = "Tooltip Alignment";
COE_OptionDisplayMode = "Anchor Button";
COE_OptionDisplayAlignment = "Button Alignment";
COE_OptionAdvisor = "Enable totem advisor";
COE_OptionEnableSets = "Enable totem sets";
COE_OptionEnableAutoSwitch = "Autoswitch sets in PVP";
COE_OptionActiveSet = "Active totem set";
COE_OptionNewSet = "New set";
COE_OptionDeleteSet = "Delete set";
COE_OptionConfigureSet = "Configure set";
COE_OptionStopConfigureSet = "OK";
COE_OptionCastOrderString = "Cast Order";
COE_OptionConfigureBar = "Configure Totems";
COE_OptionFixBar = "Fix totem bar positions";
COE_OptionConfigureOrder = "Configure Order";
COE_OptionScanTotems = "Reload Totems";
COE_OptionCurrentFrame = "Configure Bar";
COE_OptionDirection = "Direction";
COE_OptionFrameMode = "Bar mode";
COE_OptionFlexCount = "Static buttons";
COE_OptionScaling = "Scaling";
COE_OptionEnableTimerFrame = "Show separate timer frame";
COE_OptionGroupBars = "Move bars as group";
COE_OptionOverrideRank = "Rank 1 modifier";
COE_OptionFrameTimersOnly = "Show timers ONLY in timer frame";
COE_ConfigClose = "Close",
COE_ConfigTotemTabPanel = "Totem Options",
COE_ConfigHealingTabPanel = "Healing Options",
COE_ConfigDebuffTabPanel = "Debuff Options",
COE_ConfigTotemTotemBar = "Totem Bars",
COE_ConfigTotemTotemOptions = "Options",
COE_ConfigTotemTotemSets = "Totem Sets",
COE_OptionEnableTotemBar = "Enable Totem Bar",
COE_OptionHideBackdrop = "Hide background when inactive",
COE_OptionEnableTimers = "Enable totem timers",
COE_OptionEnableTimerNotifications = "Enable notifications",
COE_OptionTTAlignment = "Tooltip Alignment",
COE_OptionDisplayMode = "Anchor Button",
COE_OptionDisplayAlignment = "Button Alignment",
COE_OptionAdvisor = "Enable totem advisor",
COE_OptionEnableSets = "Enable totem sets",
COE_OptionEnableAutoSwitch = "Autoswitch sets in PVP",
COE_OptionActiveSet = "Active totem set",
COE_OptionNewSet = "New set",
COE_OptionDeleteSet = "Delete set",
COE_OptionConfigureSet = "Configure set",
COE_OptionStopConfigureSet = "OK",
COE_OptionCastOrderString = "Cast Order",
COE_OptionConfigureBar = "Configure Totems",
COE_OptionFixBar = "Fix totem bar positions",
COE_OptionConfigureOrder = "Configure Order",
COE_OptionScanTotems = "Reload Totems",
COE_OptionCurrentFrame = "Configure Bar",
COE_OptionDirection = "Direction",
COE_OptionFrameMode = "Bar mode",
COE_OptionFlexCount = "Static buttons",
COE_OptionScaling = "Scaling",
COE_OptionEnableTimerFrame = "Show separate timer frame",
COE_OptionGroupBars = "Move bars as group",
COE_OptionOverrideRank = "Rank 1 modifier",
COE_OptionFrameTimersOnly = "Show timers ONLY in timer frame"
}
-- Tooltips
-- ---------
COEUI_TOOLTIPS = {
COE_ConfigTotemTab = "Shows the totem options";
COE_ConfigHealingTab = "Shows the healing options";
COE_ConfigDebuffTab = "Shows the debuff options";
COE_OptionEnableTotemBar = "Enables and shows the totem bar\nwhich holds all of your available\ntotems for quick use";
COE_OptionHideBackdrop = "Hides the background when the mouse\nis not above the totem bar";
COE_OptionEnableTimers = "Enables the display of\nthe remaining totem time\nshown inside the totem button";
COE_OptionEnableTimerNotifications = "Displays warnings when a totem\nexpires or is destroyed";
COE_OptionAdvisor = "Displays notifications when you\nor a member of your party/raid\nhas a debuff that can be cured\nby one of your totems";
COE_OptionEnableAutoSwitch = "Automatically switches to the\nclass totem set when targetting an\nenemy player";
COE_OptionFixBar = "Fixes the totem bar position\nto prevent dragging it accidentally";
COE_OptionGroupBars = "When you drag one bar,\nthe other bars will follow";
COE_ConfigTotemTab = "Shows the totem options",
COE_ConfigHealingTab = "Shows the healing options",
COE_ConfigDebuffTab = "Shows the debuff options",
COE_OptionEnableTotemBar = "Enables and shows the totem bar\nwhich holds all of your available\ntotems for quick use",
COE_OptionHideBackdrop = "Hides the background when the mouse\nis not above the totem bar",
COE_OptionEnableTimers = "Enables the display of\nthe remaining totem time\nshown inside the totem button",
COE_OptionEnableTimerNotifications = "Displays warnings when a totem\nexpires or is destroyed",
COE_OptionAdvisor = "Displays notifications when you\nor a member of your party/raid\nhas a debuff that can be cured\nby one of your totems",
COE_OptionEnableAutoSwitch = "Automatically switches to the\nclass totem set when targetting an\nenemy player",
COE_OptionFixBar = "Fixes the totem bar position\nto prevent dragging it accidentally",
COE_OptionGroupBars = "When you drag one bar,\nthe other bars will follow"
}
COESTR_TRINKET_TOOLTIP = "Enamored Water Spirit";
@@ -154,21 +144,21 @@ COESTR_TRINKET_TOTEM = "Ancient Mana Spring Totem";
-- Combo boxes
-- ------------
COEUI_TTALIGN = {
{ "ANCHOR_TOPLEFT"; "Top Left" };
{ "ANCHOR_LEFT"; "Left" };
{ "ANCHOR_BOTTOMLEFT"; "Bottom Left" };
{ "ANCHOR_TOPRIGHT"; "Top Right" };
{ "ANCHOR_RIGHT"; "Right" };
{ "ANCHOR_BOTTOMRIGHT"; "Bottom Right" };
{ "DISABLED"; "Disabled" };
{"ANCHOR_TOPLEFT", "Top Left"}, {"ANCHOR_LEFT", "Left"},
{"ANCHOR_BOTTOMLEFT", "Bottom Left"}, {"ANCHOR_TOPRIGHT", "Top Right"},
{"ANCHOR_RIGHT", "Right"}, {"ANCHOR_BOTTOMRIGHT", "Bottom Right"},
{"DISABLED", "Disabled"}
}
COEUI_DISPLAYMODE = {"Customize", "Timers Only", "Active Set"}
COEUI_DISPLAYALIGN = {"Box", "Vertical", "Horizontal"}
COEUI_PVPSETS = { "[PVP] Druid", "[PVP] Hunter", "[PVP] Mage", "[PVP] Paladin", "[PVP] Priest",
"[PVP] Rogue", "[PVP] Shaman", "[PVP] Warlock", "[PVP] Warrior" }
COEUI_PVPSETS = {
"[PVP] Druid", "[PVP] Hunter", "[PVP] Mage", "[PVP] Paladin",
"[PVP] Priest", "[PVP] Rogue", "[PVP] Shaman", "[PVP] Warlock",
"[PVP] Warrior"
}
COEUI_DEFAULTSET = "Default";
COEUI_OVERRIDERANK = {"No key", "Use SHIFT", "Use ALT", "Use CTRL"};
@@ -179,7 +169,6 @@ COEUI_DIRECTION = { "Up", "Down", "Left", "Right" };
COEUI_FRAMEMODE = {"Closed", "Open", "Flex", "Hidden"};
-- Key bindings
-- -------------
BINDING_HEADER_CALLOFELEMENTS = "Call Of Elements";
@@ -214,7 +203,6 @@ BINDING_NAME_TOTEMAIR5 = "Air Totem #5";
BINDING_NAME_TOTEMAIR6 = "Air Totem #6";
BINDING_NAME_TOTEMAIR7 = "Air Totem #7";
-- Key modifiers
-- --------------
COEMODIFIER_ALT = "ALT";
@@ -226,20 +214,28 @@ COEMODIFIER_SHIFT_SHORT = "S";
COEMODIFIER_NUMPAD = "Num Pad";
COEMODIFIER_NUMPAD_SHORT = "NP";
-- Shell commands
-- ---------------
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_NEXTSET = "'/coe nexset' - Switches to the next custom totem set or the default set";
COESHELL_PRIORSET = "'/coe priorset' - Switches to the prior custom totem set or the default set";
COESHELL_SET = "'/coe set <name>' - Switches to set with the specified name. <name> is case-sensitive";
COESHELL_RESTARTSET = "'/coe restartset' - Next time you throw the active set, it recasts all totems";
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 =
"'/coe priorset' - Switches to the prior custom totem set or the default set";
COESHELL_SET =
"'/coe set <name>' - Switches to set with the specified name. <name> is case-sensitive";
COESHELL_RESTARTSET =
"'/coe restartset' - Next time you throw the active set, it recasts all totems";
COESHELL_RESET = "'/coe reset' - Resets all timers and the active set";
COESHELL_RESETFRAMES = "'/coe resetframes' - Returns all element bars to the screen center";
COESHELL_RESETORDERING = "'/coe resetordering' - Resets the ordering of your totem bars";
COESHELL_RESETFRAMES =
"'/coe resetframes' - Returns all element bars to the screen center";
COESHELL_RESETORDERING =
"'/coe resetordering' - Resets the ordering of your totem bars";
COESHELL_RELOAD = "'/coe reload' - Reloads all totems and sets";
COESHELL_MACRONOTE = "The following commands only work as macros dragged to your action bars:";
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)";