7 Commits

Author SHA1 Message Date
MDGitHubRepo fc2c7dab7f Added exception for totemic slam spell 2025-01-02 10:15:40 -05:00
MDGitHubRepo 56455718be Merge pull request #6 from MDGitHubRepo/Issue-#5-throwset-fixes
Issue #5 throwset fixes
2024-12-14 16:27:50 -05:00
MDGitHubRepo 8d904ad02d 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.
2024-12-14 14:04:16 -05:00
MDGitHubRepo 8f135ba494 Formatting changes 2024-12-14 13:38:00 -05:00
MDGitHubRepo b43c693353 Merge branch 'main' of https://github.com/MDGitHubRepo/turtle-wow-call-of-elements 2024-12-08 22:35:24 -05:00
MDGitHubRepo 3076660609 Fixes #4 - missing totems
Added formatter file, removed whitespaces, fixed issue with tremor totem missing.
2024-12-08 22:35:22 -05:00
MDGitHubRepo f028b5aadc Update README.md 2024-12-02 18:04:21 -05:00
7 changed files with 3251 additions and 3104 deletions
+7
View File
@@ -0,0 +1,7 @@
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"[lua]": {
"editor.defaultFormatter": "Koihik.vscode-lua-format"
}
}
+232 -194
View File
@@ -8,24 +8,20 @@
Totem Module Data Totem Module Data
]] ]] --[[ ----------------------------------------------------------------
--[[ ----------------------------------------------------------------
COE.TotemData contains a list of totem classes that are COE.TotemData contains a list of totem classes that are
returned by COE:CreateTotem returned by COE:CreateTotem
For every available totem the player has, one object is For every available totem the player has, one object is
added to this list added to this list
-------------------------------------------------------------------]] -------------------------------------------------------------------]] COE["TotemData"] =
COE["TotemData"] = {}; {};
COE["TotemCount"] = 0; COE["TotemCount"] = 0;
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
COE.MaxTotems stores the maximum number of totems per element COE.MaxTotems stores the maximum number of totems per element
This is taken right from the current game content This is taken right from the current game content
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
COE["MaxTotems"] = { Earth = 5, Fire = 5, Water = 7, Air = 7 }; COE["MaxTotems"] = {Earth = 5, Fire = 5, Water = 7, Air = 7};
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
COE.TotemsAvailable contains the number of totems available COE.TotemsAvailable contains the number of totems available
@@ -37,7 +33,6 @@ COE.TotemsAvailable["Fire"] = 0;
COE.TotemsAvailable["Water"] = 0; COE.TotemsAvailable["Water"] = 0;
COE.TotemsAvailable["Air"] = 0; COE.TotemsAvailable["Air"] = 0;
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
COE.ActiveTotems contains a pointer to the active totem of COE.ActiveTotems contains a pointer to the active totem of
each element each element
@@ -50,9 +45,14 @@ COE.TotemsAvailable["Air"] = 0;
to prevent actions that trigger SPELLCAST_STOP and are not to prevent actions that trigger SPELLCAST_STOP and are not
hooked from activating the timer accidentally hooked from activating the timer accidentally
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
COE["ActiveTotems"] = { Earth = nil, Fire = nil, Water = nil, Air = nil }; COE["ActiveTotems"] = {Earth = nil, Fire = nil, Water = nil, Air = nil};
COE["TotemPending"] = { Totem = nil, UseRank = 0, Timeout = 0.75 }; 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 COE.CleansingTotems stores pointers to the buttons and totems
@@ -60,33 +60,39 @@ COE["TotemPending"] = { Totem = nil, UseRank = 0, Timeout = 0.75 };
or fear effects or fear effects
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
COE["CleansingTotems"] = { COE["CleansingTotems"] = {
Poison = { Totem = nil, Button = nil, Warn = false }, Poison = {Totem = nil, Button = nil, Warn = false},
Disease = { Totem = nil, Button = nil, Warn = false }, Disease = {Totem = nil, Button = nil, Warn = false},
Tremor = { Totem = nil, Button = nil, Warn = false } }; Tremor = {Totem = nil, Button = nil, Warn = false}
};
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
COE.TotemSets contains the totem pointers for each set and COE.TotemSets contains the totem pointers for each set and
element element
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
COE["TotemSetCount"] = 0; COE["TotemSetCount"] = 0;
COE["TotemSets"] = { } COE["TotemSets"] = {}
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
COE.SetCycle stores which totem of the active set have COE.SetCycle stores which totem of the active set have
already been thrown already been thrown
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
COE["SetCycle"] = { Earth = false, Fire = false, Water = false, Air = false }; COE["SetCycle"] = {Earth = false, Fire = false, Water = false, Air = false};
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
COE.NoTotem is a placeholder for an empty anchor button COE.NoTotem is a placeholder for an empty anchor button
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
COE["NoTotem"] = { SpellName = "", Element = "", Texture = "Interface\\Icons\\INV_Misc_Idol_03.blp", COE["NoTotem"] = {
ToolPresent = false, Ranks = { SpellID = 0, Mana = 0, Duration = 0, Health = 0, Cooldown = 0 }, SpellName = "",
MaxRank = 1, isActive = false, CurDuration = 0, CurHealth = 0, CurCooldown = 0 }; Element = "",
Texture = "Interface\\Icons\\INV_Misc_Idol_03.blp",
ToolPresent = false,
Ranks = {SpellID = 0, Mana = 0, Duration = 0, Health = 0, Cooldown = 0},
MaxRank = 1,
isActive = false,
CurDuration = 0,
CurHealth = 0,
CurCooldown = 0
};
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:CreateTotem METHOD: COE:CreateTotem
@@ -94,23 +100,31 @@ COE["NoTotem"] = { SpellName = "", Element = "", Texture = "Interface\\Icons\\IN
PURPOSE: Returns the totem class for a new totem PURPOSE: Returns the totem class for a new totem
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:CreateTotem() function COE:CreateTotem()
return { SpellName = "", Element = "", Texture = "", return {
ToolPresent = false, Ranks = {}, MaxRank = 0, isActive = false, SpellName = "",
CurDuration = 0, CurHealth = 0, CurCooldown = 0, Element = "",
isTrinket = false, TrinketSlot = nil }; Texture = "",
ToolPresent = false,
Ranks = {},
MaxRank = 0,
isActive = false,
CurDuration = 0,
CurHealth = 0,
CurCooldown = 0,
isTrinket = false,
TrinketSlot = nil
};
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:CreateTotemRank METHOD: COE:CreateTotemRank
PURPOSE: Returns the class for a new totem rank PURPOSE: Returns the class for a new totem rank
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:CreateTotemRank() function COE:CreateTotemRank()
return { SpellID = 0, Mana = 0, Duration = 0, Health = 0, Cooldown = 0 }; return {SpellID = 0, Mana = 0, Duration = 0, Health = 0, Cooldown = 0};
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:ElementFromTool METHOD: COE:ElementFromTool
@@ -118,7 +132,7 @@ end
This is needed for the french version to work. In the This is needed for the french version to work. In the
english and german versions it just returns the input english and german versions it just returns the input
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:ElementFromTool( element ) function COE:ElementFromTool(element)
if element == COESTR_TOTEMTOOLS_EARTH then if element == COESTR_TOTEMTOOLS_EARTH then
return COESTR_ELEMENT_EARTH; return COESTR_ELEMENT_EARTH;
@@ -132,27 +146,25 @@ function COE:ElementFromTool( element )
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:LocalizedElement METHOD: COE:LocalizedElement
PURPOSE: Translates a localized element name into english PURPOSE: Translates a localized element name into english
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:LocalizedElement( element ) function COE:LocalizedElement(element)
if( element == COESTR_ELEMENT_EARTH ) then if (element == COESTR_ELEMENT_EARTH) then
return "Earth"; return "Earth";
elseif( element == COESTR_ELEMENT_FIRE ) then elseif (element == COESTR_ELEMENT_FIRE) then
return "Fire"; return "Fire";
elseif( element == COESTR_ELEMENT_WATER ) then elseif (element == COESTR_ELEMENT_WATER) then
return "Water"; return "Water";
elseif( element == COESTR_ELEMENT_AIR ) then elseif (element == COESTR_ELEMENT_AIR) then
return "Air"; return "Air";
end end
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:ScanTotems METHOD: COE:ScanTotems
@@ -161,7 +173,7 @@ end
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:ScanTotems() function COE:ScanTotems()
COE:DebugMessage( "Scanning Totems..." ); COE:DebugMessage("Scanning Totems...");
-- delete existing totem objects -- delete existing totem objects
-- ------------------------------ -- ------------------------------
@@ -174,49 +186,48 @@ function COE:ScanTotems()
-- iterate over all spells in the spellbook -- iterate over all spells in the spellbook
-- ----------------------------------------- -- -----------------------------------------
local i, k = 1; local i = 1;
while true do while true do
local SpellName, SpellRank = GetSpellName( i, BOOKTYPE_SPELL ); local SpellName, SpellRank = GetSpellName(i, BOOKTYPE_SPELL);
if not SpellName or SpellName == "Totemic Recall" then if not SpellName then do break end end
do break end;
end
-- is this a totem? -- is this a totem?
-- ----------------- -- -----------------
if( string.find( SpellName, COESTR_SCANTOTEMS ) ~= nil ) then if (SpellName ~= "Totemic Recall" and SpellName ~= "Totemic Slam" and
string.find(SpellName, COESTR_SCANTOTEMS) ~= nil) then
local newtotem = true; local newtotem = true;
local totem = nil; local totem = nil;
-- get the rank value -- get the rank value
-- ------------------- -- -------------------
local _,_,rank = string.find( SpellRank, COESTR_TOTEMRANK ); local _, _, rank = string.find(SpellRank, COESTR_TOTEMRANK);
if( not rank ) then if (not rank) then
rank = 1; rank = 1;
else else
rank = tonumber( rank ); rank = tonumber(rank);
end end
-- ======================================================================= -- =======================================================================
-- check if totem already exists with another rank in the list -- check if totem already exists with another rank in the list
-- ======================================================================= -- =======================================================================
for k = 1, COE.TotemCount do for k = 1, COE.TotemCount do
if( SpellName == COE.TotemData[k].SpellName ) then if (SpellName == COE.TotemData[k].SpellName) then
-- use existing totem object -- use existing totem object
-- -------------------------- -- --------------------------
totem = COE.TotemData[k]; totem = COE.TotemData[k];
newtotem = false; newtotem = false;
break; break
end end
end end
COETotemTT:SetSpell( i, BOOKTYPE_SPELL ); COETotemTT:SetSpell(i, BOOKTYPE_SPELL);
-- ======================================================================= -- =======================================================================
-- create new totem object if not found -- create new totem object if not found
-- ======================================================================= -- =======================================================================
if( not totem ) then if (not totem) then
totem = COE:CreateTotem(); totem = COE:CreateTotem();
-- set totem spell name -- set totem spell name
@@ -226,44 +237,46 @@ function COE:ScanTotems()
-- get totem school from tooltip -- get totem school from tooltip
-- ------------------------------ -- ------------------------------
local text = COETotemTTTextLeft4; local text = COETotemTTTextLeft4;
if( text and text:GetText() ) then if (text and text:GetText()) then
local _,_, element = string.find( text:GetText(), COESTR_TOTEMTOOLS ); local _, _, element =
if( element ) then string.find(text:GetText(), COESTR_TOTEMTOOLS);
if (element) then
-- if element starts with a |, the player does -- if element starts with a |, the player does
-- not possess the needed totem for this spell -- not possess the needed totem for this spell
-- extract the color code before using the element -- extract the color code before using the element
-- ------------------------------------------------ -- ------------------------------------------------
if( string.sub( element, 1, 1 ) == "|" ) then if (string.sub(element, 1, 1) == "|") then
element = string.sub( element, 11 ); element = string.sub(element, 11);
end end
-- get element from tool -- get element from tool
-- ---------------------- -- ----------------------
element = COE:ElementFromTool( element ); element = COE:ElementFromTool(element);
-- translate element to english -- translate element to english
-- ----------------------------- -- -----------------------------
element = COE:LocalizedElement( element ); element = COE:LocalizedElement(element);
-- valid element? -- valid element?
-- --------------- -- ---------------
if( COE.TotemsAvailable[element] ~= nil ) then if (COE.TotemsAvailable[element] ~= nil) then
totem.Element = element; totem.Element = element;
COE.TotemsAvailable[element] = COE.TotemsAvailable[element] + 1; COE.TotemsAvailable[element] =
COE.TotemsAvailable[element] + 1;
else else
COE:Message( COESTR_INVALIDELEMENT .. SpellName ); COE:Message(COESTR_INVALIDELEMENT .. SpellName);
end end
end end
end end
-- get totem texture -- get totem texture
-- ------------------ -- ------------------
totem.Texture = GetSpellTexture( i, BOOKTYPE_SPELL ); totem.Texture = GetSpellTexture(i, BOOKTYPE_SPELL);
-- get tool presence -- get tool presence
-- ------------------ -- ------------------
totem.ToolPresent = COE:IsToolPresent( i ); totem.ToolPresent = COE:IsToolPresent(i);
end end
-- ======================================================================= -- =======================================================================
@@ -278,56 +291,56 @@ function COE:ScanTotems()
-- get totem mana cost from tooltip -- get totem mana cost from tooltip
-- --------------------------------- -- ---------------------------------
text = COETotemTTTextLeft2; text = COETotemTTTextLeft2;
if( text and text:GetText() ) then if (text and text:GetText()) then
local _,_, mana = string.find( text:GetText(), COESTR_TOTEMMANA ); local _, _, mana = string.find(text:GetText(), COESTR_TOTEMMANA);
if( mana ) then if (mana) then totemrank.Mana = tonumber(mana); end
totemrank.Mana = tonumber( mana );
end
end end
-- get totem duration and health -- get totem duration and health
-- ------------------------------ -- ------------------------------
totemrank.Duration, totemrank.Health, totemrank.Cooldown = COE:GetTotemDurationAndHealth( i ); totemrank.Duration, totemrank.Health, totemrank.Cooldown =
COE:GetTotemDurationAndHealth(i);
-- store rank in totem -- store rank in totem
-- -------------------- -- --------------------
totem.Ranks[rank] = totemrank; totem.Ranks[rank] = totemrank;
if( rank > totem.MaxRank ) then if (rank > totem.MaxRank) then totem.MaxRank = rank; end
totem.MaxRank = rank;
end
-- is this a new totem? -- is this a new totem?
-- --------------------- -- ---------------------
if( newtotem ) then if (newtotem) then
-- store totem -- store totem
-- ------------ -- ------------
COE.TotemCount = COE.TotemCount + 1; COE.TotemCount = COE.TotemCount + 1;
COE.TotemData[COE.TotemCount] = totem; COE.TotemData[COE.TotemCount] = totem;
-- check if it's a cleansing totem -- check if it's a cleansing totem
-- -------------------------------- -- --------------------------------
if( SpellName == COESTR_TOTEMPOISON ) then if (SpellName == COESTR_TOTEMPOISON) then
COE.CleansingTotems.Poison.Totem = totem; COE.CleansingTotems.Poison.Totem = totem;
elseif( SpellName == COESTR_TOTEMDISEASE ) then elseif (SpellName == COESTR_TOTEMDISEASE) then
COE.CleansingTotems.Disease.Totem = totem; COE.CleansingTotems.Disease.Totem = totem;
elseif( SpellName == COESTR_TOTEMTREMOR ) then elseif (SpellName == COESTR_TOTEMTREMOR) then
COE.CleansingTotems.Tremor.Totem = totem; COE.CleansingTotems.Tremor.Totem = totem;
end end
COE:DebugMessage( "Found totem: " .. SpellName ); COE:DebugMessage("Found totem: " .. SpellName);
end end
-- ======================================================================= -- =======================================================================
-- check visibility options -- check visibility options
-- ======================================================================= -- =======================================================================
if( COE_DisplayedTotems[SpellName] == nil ) then if (COE_DisplayedTotems[SpellName] == nil) then
-- perhaps a new totem. set it to default visible -- perhaps a new totem. set it to default visible
-- and reorder it when the element count is known -- and reorder it when the element count is known
-- ----------------------------------------------- -- -----------------------------------------------
COE_DisplayedTotems[SpellName] = { Order = 0, Element = totem.Element, Visible = true }; COE_DisplayedTotems[SpellName] = {
Order = 0,
Element = totem.Element,
Visible = true
};
else else
-- update old saved variables versions by adding the element -- update old saved variables versions by adding the element
-- ---------------------------------------------------------- -- ----------------------------------------------------------
@@ -347,7 +360,7 @@ function COE:ScanTotems()
-- to make it invisible anyway -- to make it invisible anyway
-- the player needs to have at least one water totem though -- the player needs to have at least one water totem though
-- -------------------------------------------------------------- -- --------------------------------------------------------------
if( COE.TotemsAvailable.Water > 0 ) then if (COE.TotemsAvailable.Water > 0) then
local trinket = COE:CreateTotem(); local trinket = COE:CreateTotem();
trinket.SpellName = "Trinket"; trinket.SpellName = "Trinket";
trinket.Element = "Water"; trinket.Element = "Water";
@@ -365,11 +378,11 @@ function COE:ScanTotems()
COE.TotemCount = COE.TotemCount + 1; COE.TotemCount = COE.TotemCount + 1;
COE.TotemData[COE.TotemCount] = trinket; COE.TotemData[COE.TotemCount] = trinket;
if( COE_DisplayedTotems[trinket.SpellName] == nil ) then if (COE_DisplayedTotems[trinket.SpellName] == nil) then
-- perhaps a new totem. set it to default visible -- perhaps a new totem. set it to default visible
-- and reorder it when the element count is known -- and reorder it when the element count is known
-- ----------------------------------------------- -- -----------------------------------------------
COE_DisplayedTotems[trinket.SpellName] = { Order = 0, Visible = true }; COE_DisplayedTotems[trinket.SpellName] = {Order = 0, Visible = true};
end end
end end
@@ -377,10 +390,11 @@ function COE:ScanTotems()
-- Finish -- Finish
-- =================================== -- ===================================
COE:DebugMessage( "Found " .. COE.TotemCount .. " totems in spellbook" .. COE:DebugMessage(
"(" .. COE.TotemsAvailable.Earth .. " Earth, " .. "Found " .. COE.TotemCount .. " totems in spellbook" .. "(" ..
COE.TotemsAvailable.Fire .. " Fire, " .. COE.TotemsAvailable.Water .. " Water, " .. COE.TotemsAvailable.Earth .. " Earth, " .. COE.TotemsAvailable.Fire ..
COE.TotemsAvailable.Air .. " Air)" ); " Fire, " .. COE.TotemsAvailable.Water .. " Water, " ..
COE.TotemsAvailable.Air .. " Air)");
-- reorder new totems -- reorder new totems
-- ------------------- -- -------------------
@@ -388,7 +402,6 @@ function COE:ScanTotems()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:GetTotemDurationAndHealth METHOD: COE:GetTotemDurationAndHealth
@@ -398,14 +411,14 @@ end
totem duration then totem duration then
Also the health and the cooldown of the totem are returned Also the health and the cooldown of the totem are returned
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:GetTotemDurationAndHealth( spellid ) function COE:GetTotemDurationAndHealth(spellid)
COETotemTTTextRight3:SetText( nil ); COETotemTTTextRight3:SetText(nil);
COETotemTT:SetSpell( spellid, BOOKTYPE_SPELL ); COETotemTT:SetSpell(spellid, BOOKTYPE_SPELL);
text = COETotemTTTextLeft5:GetText(); text = COETotemTTTextLeft5:GetText();
if( not text ) then if (not text) then
COE:DebugMessage( "nil text with id: " .. spellid ); COE:DebugMessage("nil text with id: " .. spellid);
return 0, 0; return 0, 0;
end end
@@ -420,33 +433,34 @@ function COE:GetTotemDurationAndHealth( spellid )
-- first search for a minute specification -- first search for a minute specification
-- if we find one it is surely the totem duration -- if we find one it is surely the totem duration
-- ----------------------------------------------- -- -----------------------------------------------
local _,_,minutetext = string.find( text, COESTR_MINUTEDURATION ); local _, _, minutetext = string.find(text, COESTR_MINUTEDURATION);
if( minutetext ) then if (minutetext) then
-- calculate the duration in seconds -- calculate the duration in seconds
-- ---------------------------------- -- ----------------------------------
local min = tonumber( string.sub( minutetext, 1, 1 ) ); local min = tonumber(string.sub(minutetext, 1, 1));
local sec = tonumber( string.sub( minutetext, 3, 4 ) ) / 100 * 60; local sec = tonumber(string.sub(minutetext, 3, 4)) / 100 * 60;
duration = min * 60 + sec; duration = min * 60 + sec;
else else
_,_,minutetext = string.find( text, COESTR_MINUTEDURATION_INT ); _, _, minutetext = string.find(text, COESTR_MINUTEDURATION_INT);
if( minutetext ) then if (minutetext) then
duration = tonumber( minutetext ) * 60; duration = tonumber(minutetext) * 60;
else else
-- now test for a duration in seconds -- now test for a duration in seconds
-- ----------------------------------- -- -----------------------------------
local _,b,sectext1 = string.find( text, COESTR_SECDURATION ); local _, b, sectext1 = string.find(text, COESTR_SECDURATION);
if( sectext1 ) then if (sectext1) then
-- look if there are two second specifications -- look if there are two second specifications
-- if so, take the greate one -- if so, take the greate one
-- -------------------------------------------- -- --------------------------------------------
local _,_,sectext2 = string.find( string.sub( text, b ), COESTR_SECDURATION ); local _, _, sectext2 = string.find(string.sub(text, b),
COESTR_SECDURATION);
if( sectext2 ) then if (sectext2) then
duration = math.max( tonumber( sectext1 ), tonumber( sectext2 ) ); duration = math.max(tonumber(sectext1), tonumber(sectext2));
else else
duration = tonumber( sectext1 ); duration = tonumber(sectext1);
end end
end end
end end
@@ -457,11 +471,11 @@ function COE:GetTotemDurationAndHealth( spellid )
-- =============================================================== -- ===============================================================
for num, regex in COESTR_TOTEMHEALTH do for num, regex in COESTR_TOTEMHEALTH do
local match = { string.gfind( text, regex )() }; local match = {string.gfind(text, regex)()};
if ( table.getn(match) >= 1 ) then if (table.getn(match) >= 1) then
health = tonumber( match[1] ); health = tonumber(match[1]);
break; break
end end
end end
@@ -471,16 +485,16 @@ function COE:GetTotemDurationAndHealth( spellid )
text = COETotemTTTextRight3:GetText(); text = COETotemTTTextRight3:GetText();
if( not text ) then if (not text) then
cooldown = 0; cooldown = 0;
else else
_,_,cooldown = string.find( text, COESTR_SECDURATION ); _, _, cooldown = string.find(text, COESTR_SECDURATION);
if( cooldown ) then if (cooldown) then
cooldown = tonumber( cooldown ); cooldown = tonumber(cooldown);
else else
_,_,cooldown = string.find( text, COESTR_MINUTEDURATION_INT ); _, _, cooldown = string.find(text, COESTR_MINUTEDURATION_INT);
if( cooldown ) then if (cooldown) then
cooldown = tonumber( cooldown ) * 60; cooldown = tonumber(cooldown) * 60;
else else
cooldown = 0; cooldown = 0;
end end
@@ -491,7 +505,6 @@ function COE:GetTotemDurationAndHealth( spellid )
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:IsToolPresent METHOD: COE:IsToolPresent
@@ -501,33 +514,30 @@ end
This is done by testing the color of the "Tools:" section This is done by testing the color of the "Tools:" section
in the totem tooltip in the totem tooltip
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:IsToolPresent( spellid ) function COE:IsToolPresent(spellid)
-- get totem tooltip -- get totem tooltip
-- ------------------ -- ------------------
COETotemTT:SetSpell( spellid, BOOKTYPE_SPELL ); COETotemTT:SetSpell(spellid, BOOKTYPE_SPELL);
-- test for presence of the totem tool -- test for presence of the totem tool
-- ------------------------------------ -- ------------------------------------
local text = COETotemTTTextLeft4; local text = COETotemTTTextLeft4;
if( text and text:GetText() ) then if (text and text:GetText()) then
local _,_, element = string.find( text:GetText(), COESTR_TOTEMTOOLS ); local _, _, element = string.find(text:GetText(), COESTR_TOTEMTOOLS);
if( element ) then if (element) then
-- if element doesn't start with a |, the player -- if element doesn't start with a |, the player
-- possesses the needed totem for this spell -- possesses the needed totem for this spell
-- ------------------------------------------------ -- ------------------------------------------------
if( string.sub( element, 1, 1 ) ~= "|" ) then if (string.sub(element, 1, 1) ~= "|") then return true; end
return true;
end
end end
end end
return false; return false;
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:IsTrinketPresent METHOD: COE:IsTrinketPresent
@@ -539,12 +549,12 @@ end
function COE:IsTrinketPresent() function COE:IsTrinketPresent()
for i = 0, 1 do for i = 0, 1 do
local slot = GetInventorySlotInfo( "Trinket" .. i .. "Slot" ); local slot = GetInventorySlotInfo("Trinket" .. i .. "Slot");
local item = GetInventoryItemLink( "player", slot ); local item = GetInventoryItemLink("player", slot);
if( item ) then if (item) then
local itemname = string.find( item, COESTR_TRINKET ); local itemname = string.find(item, COESTR_TRINKET);
if( itemname ) then if (itemname) then
-- trinket is equipped -- trinket is equipped
-- -------------------- -- --------------------
return true, slot; return true, slot;
@@ -556,7 +566,6 @@ function COE:IsTrinketPresent()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:ReorderNewTotems METHOD: COE:ReorderNewTotems
@@ -565,32 +574,50 @@ end
totems in this element totems in this element
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:ReorderNewTotems() function COE:ReorderNewTotems()
COE:DebugMessage("Executing ReorderNewTotems");
local nextslot = { Earth = COE.TotemsAvailable.Earth, Fire = COE.TotemsAvailable.Fire, local nextslot = {
Water = COE.TotemsAvailable.Water, Air = COE.TotemsAvailable.Air }; Earth = COE.TotemsAvailable.Earth,
Fire = COE.TotemsAvailable.Fire,
Water = COE.TotemsAvailable.Water,
Air = COE.TotemsAvailable.Air
};
local used = { Earth = {}, Fire = {}, Water = {}, Air = {} }; local used = {Earth = {}, Fire = {}, Water = {}, Air = {}};
local bError = false; local bError = false;
local k; COE:DebugMessage("ReorderNewTotems COE.TotemCount: " .. COE.TotemCount);
for k = 1, COE.TotemCount do for k = 1, COE.TotemCount do
local totem = COE.TotemData[k]; local totem = COE.TotemData[k];
if( COE_DisplayedTotems[totem.SpellName] ~= nil ) then COE:DebugMessage(
if( COE_DisplayedTotems[totem.SpellName].Order == 0 ) then "ReorderNewTotems processing totem: " .. totem.Element .. " " ..
totem.SpellName);
if (COE_DisplayedTotems[totem.SpellName] ~= nil) then
if (COE_DisplayedTotems[totem.SpellName].Order == 0) then
-- this totem has just been added -- this totem has just been added
-- assign the currently free slot -- assign the currently free slot
-- ------------------------------- -- -------------------------------
COE_DisplayedTotems[totem.SpellName].Order = nextslot[totem.Element]; if (not nextslot[totem.Element]) then
COE:DebugMessage(
"ReorderNewTotems nextslot[totem.Element] is nil");
end
COE_DisplayedTotems[totem.SpellName].Order =
nextslot[totem.Element];
nextslot[totem.Element] = nextslot[totem.Element] - 1; nextslot[totem.Element] = nextslot[totem.Element] - 1;
end end
-- register that this slot of the element is now in use -- register that this slot of the element is now in use
-- mark as error if already in use -- mark as error if already in use
-- ----------------------------------------------------- -- -----------------------------------------------------
if( used[totem.Element][COE_DisplayedTotems[totem.SpellName].Order] == nil ) then if (used[totem.Element][COE_DisplayedTotems[totem.SpellName].Order] ==
used[totem.Element][COE_DisplayedTotems[totem.SpellName].Order] = true; nil) then
used[totem.Element][COE_DisplayedTotems[totem.SpellName].Order] =
true;
else else
bError = true; bError = true;
end end
@@ -599,14 +626,14 @@ function COE:ReorderNewTotems()
-- are there multiple entries for one slot? -- are there multiple entries for one slot?
-- ----------------------------------------- -- -----------------------------------------
if( bError ) then if (bError) then
-- there is something wrong with the saved variables -- there is something wrong with the saved variables
-- reset all ordering and reassign it -- reset all ordering and reassign it
-- -------------------------------------------------- -- --------------------------------------------------
for k = 1, COE.TotemCount do for k = 1, COE.TotemCount do
local totem = COE.TotemData[k]; local totem = COE.TotemData[k];
if( COE_DisplayedTotems[totem.SpellName] ~= nil ) then if (COE_DisplayedTotems[totem.SpellName] ~= nil) then
COE_DisplayedTotems[totem.SpellName].Order = 0; COE_DisplayedTotems[totem.SpellName].Order = 0;
end end
end end
@@ -617,7 +644,6 @@ function COE:ReorderNewTotems()
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:InitTotemSets METHOD: COE:InitTotemSets
@@ -626,30 +652,34 @@ end
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:InitTotemSets() function COE:InitTotemSets()
local indices = { "Earth", "Fire", "Water", "Air" }; local indices = {"Earth", "Fire", "Water", "Air"};
COE.TotemSets = {}; COE.TotemSets = {};
-- for each standard set -- for each standard set
-- ---------------------- -- ----------------------
local set; for set = 1, table.getn(COE_SavedTotemSets) do
for set = 1, table.getn( COE_SavedTotemSets ) do
COE.TotemSets[set] = { Earth = nil, Fire = nil, Water = nil, Air = nil, COE.TotemSets[set] = {
CastOrder = COE_SavedTotemSets[set].CastOrder }; Earth = nil,
Fire = nil,
Water = nil,
Air = nil,
CastOrder = COE_SavedTotemSets[set].CastOrder
};
-- for each element -- for each element
-- ----------------- -- -----------------
local k, totem; for k = 1, 4 do
for k = 1,4 do
if( COE_SavedTotemSets[set][indices[k]] ~= "" ) then if (COE_SavedTotemSets[set][indices[k]] ~= "") then
-- iterate over all totems -- iterate over all totems
-- ------------------------ -- ------------------------
for totem in COE.TotemData do for totem in COE.TotemData do
if( COE.TotemData[totem].SpellName == COE_SavedTotemSets[set][indices[k]] ) then if (COE.TotemData[totem].SpellName ==
COE_SavedTotemSets[set][indices[k]]) then
COE.TotemSets[set][indices[k]] = COE.TotemData[totem]; COE.TotemSets[set][indices[k]] = COE.TotemData[totem];
end end
end end
@@ -659,35 +689,41 @@ function COE:InitTotemSets()
-- for each custom set -- for each custom set
-- -------------------- -- --------------------
for set = 1, table.getn( COE_CustomTotemSets ) do for set = 1, table.getn(COE_CustomTotemSets) do
COE.TotemSets[COESET_DEFAULT + set] = { Earth = nil, Fire = nil, Water = nil, Air = nil, COE.TotemSets[COESET_DEFAULT + set] = {
CastOrder = COE_CustomTotemSets[set].CastOrder }; Earth = nil,
Fire = nil,
Water = nil,
Air = nil,
CastOrder = COE_CustomTotemSets[set].CastOrder
};
-- for each element -- for each element
-- ----------------- -- -----------------
local k, totem; local k, totem;
for k = 1,4 do for k = 1, 4 do
if( COE_CustomTotemSets[set][indices[k]] ~= "" ) then if (COE_CustomTotemSets[set][indices[k]] ~= "") then
-- iterate over all totems -- iterate over all totems
-- ------------------------ -- ------------------------
for totem in COE.TotemData do for totem in COE.TotemData do
if( COE.TotemData[totem].SpellName == COE_CustomTotemSets[set][indices[k]] ) then if (COE.TotemData[totem].SpellName ==
COE.TotemSets[COESET_DEFAULT + set][indices[k]] = COE.TotemData[totem]; COE_CustomTotemSets[set][indices[k]]) then
COE.TotemSets[COESET_DEFAULT + set][indices[k]] =
COE.TotemData[totem];
end end
end end
end end
end end
end end
COE.TotemSetCount = table.getn( COE.TotemSets ); COE.TotemSetCount = table.getn(COE.TotemSets);
end end
--[[ ============================================================================================= --[[ =============================================================================================
F I X E S F I X E S
@@ -705,19 +741,19 @@ function COE:Fix_CastOrderLocalization()
-- for each standard set -- for each standard set
-- ---------------------- -- ----------------------
local set, k; local set, k;
for set = 1, table.getn( COE_SavedTotemSets ) do for set = 1, table.getn(COE_SavedTotemSets) do
for k = 1, 4 do for k = 1, 4 do
if( COE_SavedTotemSets[set].CastOrder[k] == "Earth" ) then if (COE_SavedTotemSets[set].CastOrder[k] == "Earth") then
COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_EARTH; COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_EARTH;
elseif( COE_SavedTotemSets[set].CastOrder[k] == "Fire" ) then elseif (COE_SavedTotemSets[set].CastOrder[k] == "Fire") then
COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_FIRE; COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_FIRE;
elseif( COE_SavedTotemSets[set].CastOrder[k] == "Water" ) then elseif (COE_SavedTotemSets[set].CastOrder[k] == "Water") then
COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_WATER; COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_WATER;
elseif( COE_SavedTotemSets[set].CastOrder[k] == "Air" ) then elseif (COE_SavedTotemSets[set].CastOrder[k] == "Air") then
COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_AIR; COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_AIR;
end end
end end
@@ -725,11 +761,10 @@ function COE:Fix_CastOrderLocalization()
-- notify user -- notify user
-- ------------ -- ------------
COE:Message( COESTR_FIXEDSETS ); COE:Message(COESTR_FIXEDSETS);
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:Fix_DisplayedTotems METHOD: COE:Fix_DisplayedTotems
@@ -739,41 +774,38 @@ function COE:Fix_DisplayedTotems()
local i; local i;
local fixed = false; local fixed = false;
foreach( COE_DisplayedTotems, function( index, value ) foreach(COE_DisplayedTotems, function(index, value)
-- is this an old-style entry? -- is this an old-style entry?
-- ---------------------------- -- ----------------------------
if( type( value ) == "boolean" ) then if (type(value) == "boolean") then
COE_DisplayedTotems[index] = { Order = 0, Visible = value }; COE_DisplayedTotems[index] = {Order = 0, Visible = value};
fixed = true; fixed = true;
elseif( type( value ) == "table" ) then elseif (type(value) == "table") then
if( COE_DisplayedTotems[index].Visible == nil ) then if (COE_DisplayedTotems[index].Visible == nil) then
COE_DisplayedTotems[index].Visible = true; COE_DisplayedTotems[index].Visible = true;
fixed = true; fixed = true;
end end
if( COE_DisplayedTotems[index].Order == nil ) then if (COE_DisplayedTotems[index].Order == nil) then
COE_DisplayedTotems[index].Order = 0; COE_DisplayedTotems[index].Order = 0;
fixed = true; fixed = true;
end end
else else
COE_DisplayedTotems[index] = { Order = 0, Visible = value }; COE_DisplayedTotems[index] = {Order = 0, Visible = value};
fixed = true; fixed = true;
end end
end ); end);
-- notify user -- notify user
-- ------------ -- ------------
if( fixed ) then if (fixed) then COE:Message(COESTR_FIXEDDISPLAY); end
COE:Message( COESTR_FIXEDDISPLAY );
end
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:Fix_CastOrderLocalization2 METHOD: COE:Fix_CastOrderLocalization2
@@ -785,19 +817,22 @@ function COE:Fix_CastOrderLocalization2()
-- for each standard set -- for each standard set
-- ---------------------- -- ----------------------
local set, k; local set, k;
for set = 1, table.getn( COE_SavedTotemSets ) do for set = 1, table.getn(COE_SavedTotemSets) do
for k = 1, 4 do for k = 1, 4 do
if( COE_SavedTotemSets[set].CastOrder[k] == COESTR_TOTEMTOOLS_EARTH ) then if (COE_SavedTotemSets[set].CastOrder[k] == COESTR_TOTEMTOOLS_EARTH) then
COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_EARTH; COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_EARTH;
elseif( COE_SavedTotemSets[set].CastOrder[k] == COESTR_TOTEMTOOLS_FIRE ) then elseif (COE_SavedTotemSets[set].CastOrder[k] ==
COESTR_TOTEMTOOLS_FIRE) then
COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_FIRE; COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_FIRE;
elseif( COE_SavedTotemSets[set].CastOrder[k] == COESTR_TOTEMTOOLS_WATER ) then elseif (COE_SavedTotemSets[set].CastOrder[k] ==
COESTR_TOTEMTOOLS_WATER) then
COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_WATER; COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_WATER;
elseif( COE_SavedTotemSets[set].CastOrder[k] == COESTR_TOTEMTOOLS_AIR ) then elseif (COE_SavedTotemSets[set].CastOrder[k] ==
COESTR_TOTEMTOOLS_AIR) then
COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_AIR; COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_AIR;
end end
end end
@@ -805,19 +840,22 @@ function COE:Fix_CastOrderLocalization2()
-- for each custom set -- for each custom set
-- -------------------- -- --------------------
for set = 1, table.getn( COE_CustomTotemSets ) do for set = 1, table.getn(COE_CustomTotemSets) do
for k = 1, 4 do for k = 1, 4 do
if( COE_CustomTotemSets[set].CastOrder[k] == COESTR_TOTEMTOOLS_EARTH ) then if (COE_CustomTotemSets[set].CastOrder[k] == COESTR_TOTEMTOOLS_EARTH) then
COE_CustomTotemSets[set].CastOrder[k] = COESTR_ELEMENT_EARTH; COE_CustomTotemSets[set].CastOrder[k] = COESTR_ELEMENT_EARTH;
elseif( COE_CustomTotemSets[set].CastOrder[k] == COESTR_TOTEMTOOLS_FIRE ) then elseif (COE_CustomTotemSets[set].CastOrder[k] ==
COESTR_TOTEMTOOLS_FIRE) then
COE_CustomTotemSets[set].CastOrder[k] = COESTR_ELEMENT_FIRE; COE_CustomTotemSets[set].CastOrder[k] = COESTR_ELEMENT_FIRE;
elseif( COE_CustomTotemSets[set].CastOrder[k] == COESTR_TOTEMTOOLS_WATER ) then elseif (COE_CustomTotemSets[set].CastOrder[k] ==
COESTR_TOTEMTOOLS_WATER) then
COE_CustomTotemSets[set].CastOrder[k] = COESTR_ELEMENT_WATER; COE_CustomTotemSets[set].CastOrder[k] = COESTR_ELEMENT_WATER;
elseif( COE_CustomTotemSets[set].CastOrder[k] == COESTR_TOTEMTOOLS_AIR ) then elseif (COE_CustomTotemSets[set].CastOrder[k] ==
COESTR_TOTEMTOOLS_AIR) then
COE_CustomTotemSets[set].CastOrder[k] = COESTR_ELEMENT_AIR; COE_CustomTotemSets[set].CastOrder[k] = COESTR_ELEMENT_AIR;
end end
end end
+483 -329
View File
File diff suppressed because it is too large Load Diff
+420 -464
View File
File diff suppressed because it is too large Load Diff
+84 -88
View File
@@ -5,11 +5,7 @@
by Wyverex (2006) by Wyverex (2006)
]] ]] if (not COE) then COE = {}; end
if( not COE ) then
COE = {};
end
COE_VERSION = 2.6 COE_VERSION = 2.6
@@ -40,7 +36,6 @@ COE["EventPrintMode"] = false;
COE["UpdateInterval"] = 0.1; COE["UpdateInterval"] = 0.1;
COE["ForceUpdate"] = COE.UpdateInterval * 2; COE["ForceUpdate"] = COE.UpdateInterval * 2;
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
The AdvisorInterval controls how often the party/raid is The AdvisorInterval controls how often the party/raid is
scanned for debuffs that are curable by totems scanned for debuffs that are curable by totems
@@ -50,31 +45,30 @@ COE["ForceUpdate"] = COE.UpdateInterval * 2;
COE["AdvisorInterval"] = 1; COE["AdvisorInterval"] = 1;
COE["AdvisorWarningInterval"] = 7; COE["AdvisorWarningInterval"] = 7;
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:Init METHOD: COE:Init
PURPOSE: Loads submodules and initializes data PURPOSE: Loads submodules and initializes data
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:Init() function COE:Init()
COE:Message( "Call of Elements v" .. COE_VERSION ); COE:Message("Call of Elements v" .. COE_VERSION);
-- load only for shamans -- load only for shamans
-- ---------------------- -- ----------------------
local _, EnglishClass = UnitClass( "player" ); local _, EnglishClass = UnitClass("player");
if( EnglishClass ~= "SHAMAN" ) then if (EnglishClass ~= "SHAMAN") then
COE:Message( COESTR_NOTASHAMAN ); COE:Message(COESTR_NOTASHAMAN);
COE.Initialized = false; COE.Initialized = false;
else else
COE.Initialized = true; COE.Initialized = true;
this:RegisterEvent( "VARIABLES_LOADED" ); this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("CHAT_MSG_SPELL_SELF_BUFF"); this:RegisterEvent("CHAT_MSG_SPELL_SELF_BUFF");
-- register shell command -- register shell command
-- ----------------------- -- -----------------------
SlashCmdList["COE"] = COEProcessShellCommand; SlashCmdList["COE"] = COEProcessShellCommand;
SLASH_COE1="/coe"; SLASH_COE1 = "/coe";
end end
end end
@@ -101,22 +95,28 @@ end
PURPOSE: Handles frame events PURPOSE: Handles frame events
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:OnEvent( event ) 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 if (event == "VARIABLES_LOADED") then
-- fix saved variables if this update has to do so -- fix saved variables if this update has to do so
-- ------------------------------------------------ -- ------------------------------------------------
COE:FixSavedVariables(); COE:FixSavedVariables();
elseif (event == "CHAT_MSG_SPELL_SELF_BUFF") then elseif (event == "CHAT_MSG_SPELL_SELF_BUFF") then
-- resolve Totemic Recall event
if (string.find(arg1, "Mana from Totemic Recall")) then if (string.find(arg1, "Mana from Totemic Recall")) then
COE:DebugMessage("Totemic Recall initiating reset of timers."); COE:DebugMessage("Totemic Recall initiating reset of timers.");
COE_Totem:ResetTimers(); 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 end
elseif (COE.EventPrintMode) then
COE:DebugMessage(event);
end end
end end
@@ -125,10 +125,9 @@ end
PURPOSE: Adds a message to the default chat frame PURPOSE: Adds a message to the default chat frame
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:Message( msg ) function COE:Message(msg)
DEFAULT_CHAT_FRAME:AddMessage( "[COE] " .. msg, 0.93, 0.83, 0.45 ); DEFAULT_CHAT_FRAME:AddMessage("[COE] " .. msg, 0.93, 0.83, 0.45);
end; end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:DebugMessage METHOD: COE:DebugMessage
@@ -136,12 +135,11 @@ end;
PURPOSE: Adds a debug message to the default chat frame if PURPOSE: Adds a debug message to the default chat frame if
debug mode is enabled debug mode is enabled
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:DebugMessage( msg ) function COE:DebugMessage(msg)
if( COE.DebugMode ) then if (COE.DebugMode) then
DEFAULT_CHAT_FRAME:AddMessage( "[COE] " .. msg, 1, 0, 0 ); DEFAULT_CHAT_FRAME:AddMessage("[COE] " .. msg, 1, 0, 0);
end end
end; end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:Notification METHOD: COE:Notification
@@ -149,28 +147,27 @@ end;
PURPOSE: Adds a message to the error frame in the upper PURPOSE: Adds a message to the error frame in the upper
screen center screen center
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:Notification( msg, color ) function COE:Notification(msg, color)
local col; local col;
-- choose color -- choose color
-- ------------- -- -------------
if( color == COECOL_TOTEMWARNING ) then if (color == COECOL_TOTEMWARNING) then
col = { r = 0, g = 0.6, b = 1 }; col = {r = 0, g = 0.6, b = 1};
elseif( color == COECOL_TOTEMDESTROYED ) then elseif (color == COECOL_TOTEMDESTROYED) then
col = { r = 1, g = 0.4, b = 0 }; col = {r = 1, g = 0.4, b = 0};
elseif( color == COECOL_TOTEMCLEANSING ) then elseif (color == COECOL_TOTEMCLEANSING) then
col = { r = 0, g = 1, b = 0.4 }; col = {r = 0, g = 1, b = 0.4};
else else
col = { r = 1, g = 1, b = 1 }; col = {r = 1, g = 1, b = 1};
end end
-- add message -- add message
-- ------------ -- ------------
UIErrorsFrame:AddMessage( msg, col.r, col.g, col.b, 1.0, UIERRORS_HOLD_TIME ); UIErrorsFrame:AddMessage(msg, col.r, col.g, col.b, 1.0, UIERRORS_HOLD_TIME);
end;
end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:ToggleConfigFrame METHOD: COE:ToggleConfigFrame
@@ -179,74 +176,73 @@ end;
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:ToggleConfigFrame() function COE:ToggleConfigFrame()
if( COE_ConfigFrame:IsVisible() ) then if (COE_ConfigFrame:IsVisible()) then
COE_Config:CloseDialog() COE_Config:CloseDialog()
else else
COE_ConfigFrame:Show(); COE_ConfigFrame:Show();
end end
PlaySound( "igMainMenuOption" ); PlaySound("igMainMenuOption");
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COEProcessShellCommand METHOD: COEProcessShellCommand
PURPOSE: Executes the entered shell command PURPOSE: Executes the entered shell command
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COEProcessShellCommand( msg ) function COEProcessShellCommand(msg)
if( msg == "" or msg == "config" ) then if (msg == "" or msg == "config") then
COE:ToggleConfigFrame(); COE:ToggleConfigFrame();
elseif( msg == "list" ) then elseif (msg == "list" or msg == "help") then
COE:DisplayShellCommands(); COE:DisplayShellCommands();
elseif( msg == "nextset" ) then elseif (msg == "debug") then
COE["DebugMode"] = not COE.DebugMode;
COE:Message(tostring(COE.DebugMode));
elseif (msg == "nextset") then
COE_Totem:SwitchToNextSet(); COE_Totem:SwitchToNextSet();
elseif( msg == "priorset" ) then elseif (msg == "priorset") then
COE_Totem:SwitchToPriorSet(); COE_Totem:SwitchToPriorSet();
elseif( msg == "throwset" ) then elseif (msg == "throwset") then
COE_Totem:ThrowSet(); COE_Totem:ThrowSet();
elseif( msg == "restartset" ) then elseif (msg == "restartset") then
COE_Totem:ResetSetCycle(); COE_Totem:ResetSetCycle();
elseif( msg == "reset" ) then elseif (msg == "reset") then
COE_Totem:ResetTimers(); COE_Totem:ResetTimers();
elseif( msg == "reload" ) then elseif (msg == "reload") then
COE_Totem:Rescan(); COE_Totem:Rescan();
elseif( msg == "resetframes" ) then elseif (msg == "resetframes") then
COE_Totem:ResetFrames(); COE_Totem:ResetFrames();
elseif( msg == "advised" ) then elseif (msg == "advised") then
COE_Totem:ThrowAdvisedTotem(); COE_Totem:ThrowAdvisedTotem();
elseif( msg == "resetordering" ) then elseif (msg == "resetordering") then
COE_DisplayedTotems = {}; COE_DisplayedTotems = {};
COE_Totem:Rescan(); COE_Totem:Rescan();
elseif( msg == "bestheal" ) then elseif (msg == "bestheal") then
COE_Heal:BestHeal(); COE_Heal:BestHeal();
elseif( msg == "battleheal" ) then elseif (msg == "battleheal") then
COE_Heal:BattleHeal(); COE_Heal:BattleHeal();
else else
local _,_,arg = string.find( msg, "set (.*)" ); local _, _, arg = string.find(msg, "set (.*)");
if( arg ) then if (arg) then COE_Totem:SwitchToSet(arg); end
COE_Totem:SwitchToSet( arg );
end
end end
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:DisplayShellCommands METHOD: COE:DisplayShellCommands
@@ -254,24 +250,24 @@ end
-------------------------------------------------------------------]] -------------------------------------------------------------------]]
function COE:DisplayShellCommands() function COE:DisplayShellCommands()
COE:Message( COESHELL_INTRO ); COE:Message(COESHELL_INTRO);
COE:Message( COESHELL_CONFIG ); COE:Message(COESHELL_CONFIG);
COE:Message( COESHELL_LIST ); COE:Message(COESHELL_LIST);
COE:Message( COESHELL_NEXTSET ); COE:Message(COESHELL_NEXTSET);
COE:Message( COESHELL_PRIORSET ); COE:Message(COESHELL_PRIORSET);
COE:Message( COESHELL_SET ); COE:Message(COESHELL_SET);
COE:Message( COESHELL_RESTARTSET ); COE:Message(COESHELL_RESTARTSET);
COE:Message( COESHELL_RESET ); COE:Message(COESHELL_RESET);
COE:Message( COESHELL_RESETFRAMES ); COE:Message(COESHELL_RESETFRAMES);
COE:Message( COESHELL_RESETORDERING ); COE:Message(COESHELL_RESETORDERING);
COE:Message( COESHELL_RELOAD ); COE:Message(COESHELL_RELOAD);
COE:Message( COESHELL_MACRONOTE ); COE:Message(COESHELL_MACRONOTE);
COE:Message( COESHELL_THROWSET ); COE:Message(COESHELL_THROWSET);
COE:Message( COESHELL_ADVISED ); COE:Message(COESHELL_ADVISED);
COE:Message(COESHELL_DEBUG);
end end
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
METHOD: COE:FixSavedVariables METHOD: COE:FixSavedVariables
@@ -283,37 +279,37 @@ function COE:FixSavedVariables()
-- is the version stored in the saved variables? -- is the version stored in the saved variables?
-- ---------------------------------------------- -- ----------------------------------------------
if( not COE_Config:GetSaved( COEOPT_VERSION ) ) then if (not COE_Config:GetSaved(COEOPT_VERSION)) then
-- this is version <= v1.6 -- this is version <= v1.6
-- ------------------------ -- ------------------------
COE_Config:SetOption( COEOPT_VERSION, 1.6 ); COE_Config:SetOption(COEOPT_VERSION, 1.6);
end end
local version = COE_Config:GetSaved( COEOPT_VERSION ); local version = COE_Config:GetSaved(COEOPT_VERSION);
if( version == 1.6 ) then if (version == 1.6) then
-- fix localized cast order in 1.7 -- fix localized cast order in 1.7
-- -------------------------------- -- --------------------------------
COE:Fix_CastOrderLocalization(); COE:Fix_CastOrderLocalization();
COE:Message( COESTR_UDATEDSAVED .. "1.7" ); COE:Message(COESTR_UDATEDSAVED .. "1.7");
COE_Config:SetOption( COEOPT_VERSION, 1.7 ); COE_Config:SetOption(COEOPT_VERSION, 1.7);
version = COE_Config:GetSaved( COEOPT_VERSION ); version = COE_Config:GetSaved(COEOPT_VERSION);
end end
if( version == 1.7 ) then if (version == 1.7) then
-- fix cast order again to due to a typo -- fix cast order again to due to a typo
-- -------------------------------------- -- --------------------------------------
COE:Fix_CastOrderLocalization(); COE:Fix_CastOrderLocalization();
COE:Message( COESTR_UDATEDSAVED .. "1.8" ); COE:Message(COESTR_UDATEDSAVED .. "1.8");
COE_Config:SetOption( COEOPT_VERSION, 1.8 ); COE_Config:SetOption(COEOPT_VERSION, 1.8);
version = COE_Config:GetSaved( COEOPT_VERSION ); version = COE_Config:GetSaved(COEOPT_VERSION);
end end
-- fix totem set element strings -- fix totem set element strings
-- ------------------------------ -- ------------------------------
COE:Fix_CastOrderLocalization2(); COE:Fix_CastOrderLocalization2();
COE_Config:SetOption( COEOPT_VERSION, 2.1 ); COE_Config:SetOption(COEOPT_VERSION, 2.1);
end end
+86 -90
View File
@@ -1,18 +1,14 @@
--[[ ---------------------------------------------------------------- --[[ ----------------------------------------------------------------
E N G L I S H E N G L I S H
-------------------------------------------------------------------]] -------------------------------------------------------------------]] -- Errors
-- Errors
-- ------- -- -------
COESTR_NOTASHAMAN = "You are not a shaman. Unloading Call Of Elements"; COESTR_NOTASHAMAN = "You are not a shaman. Unloading Call Of Elements";
COESTR_NOTOTEM = "No totem available yet"; COESTR_NOTOTEM = "No totem available yet";
COESTR_UI_NOTASSIGNED = "<No text assigned>"; COESTR_UI_NOTASSIGNED = "<No text assigned>";
COESTR_INVALIDELEMENT = "Invalid element found in totem: "; COESTR_INVALIDELEMENT = "Invalid element found in totem: ";
-- Notifications -- Notifications
-- -------------- -- --------------
COESTR_TOTEMWARNING = "%s expires in %d seconds"; 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_HEALLOWERRANK = "Not enough mana. Using rank %d instead";
COESTR_HEALOOM = "Out of mana!"; COESTR_HEALOOM = "Out of mana!";
-- String patterns -- String patterns
-- ---------------- -- ----------------
COESTR_SCANTOTEMS = "Totem"; COESTR_SCANTOTEMS = "Totem";
@@ -42,8 +37,8 @@ COESTR_MINUTEDURATION = "(%d%.%d%d) min";
COESTR_MINUTEDURATION_INT = "(%d) min"; COESTR_MINUTEDURATION_INT = "(%d) min";
COESTR_SECDURATION = "(%d%d?) sec"; COESTR_SECDURATION = "(%d%d?) sec";
COESTR_CASTBYNAME = "%(Rank (%d)%)"; COESTR_CASTBYNAME = "%(Rank (%d)%)";
COESTR_TOTEMDAMAGE = { ".+ [crh]+its (.+ Totem) ?%u* for (%d+).*" }; COESTR_TOTEMDAMAGE = {".+ [crh]+its (.+ Totem) ?%u* for (%d+).*"};
COESTR_TOTEMHEALTH = { "(%d*) health" }; COESTR_TOTEMHEALTH = {"(%d*) health"};
COESTR_SHOCKSPELL = "(%a* Shock)"; COESTR_SHOCKSPELL = "(%a* Shock)";
COESTR_HEALINGWAVE = "Healing Wave"; COESTR_HEALINGWAVE = "Healing Wave";
COESTR_LESSERWAVE = "Lesser Healing Wave"; COESTR_LESSERWAVE = "Lesser Healing Wave";
@@ -51,13 +46,11 @@ COESTR_MINAMOUNT = "(%d*) to";
COESTR_MAXAMOUNT = "to (%d*)"; COESTR_MAXAMOUNT = "to (%d*)";
COESTR_TRINKET = "^.*%[Enamored Water Spirit%].*$"; COESTR_TRINKET = "^.*%[Enamored Water Spirit%].*$";
-- Spell Names and IDs -- Spell Names and IDs
-- ---------------- -- ----------------
COESTR_TOTEMICRECALL = "Totemic Recall"; COESTR_TOTEMICRECALL = "Totemic Recall";
COESTR_TOTEMICRECALLID = 35; COESTR_TOTEMICRECALLID = 35;
-- Totem Advisor -- Totem Advisor
-- -------------- -- --------------
COESTR_POISON = "Poison"; COESTR_POISON = "Poison";
@@ -68,12 +61,12 @@ COESTR_TOTEMTREMOR = "Tremor Totem";
COESTR_CLEANSINGTOTEM = "Throw %s now!"; COESTR_CLEANSINGTOTEM = "Throw %s now!";
COESTR_TREMOR = { COESTR_TREMOR = {
"Sleep", "Terrify", "Psychic Scream", "Mind Control", "Bellowing Roar", "Fear", "Sleep", "Terrify", "Psychic Scream", "Mind Control", "Bellowing Roar",
"Intimidating Shout", "Panic", "Terrifying Screech", "Seduction", "Fear", "Intimidating Shout", "Panic", "Terrifying Screech", "Seduction",
"Howl of Terror", "Intimidating Growl", "Crystalline Slumber", "Druid's Slumber" "Howl of Terror", "Intimidating Growl", "Crystalline Slumber",
"Druid's Slumber"
} }
-- Tools -- Tools
-- --------- -- ---------
COESTR_TOTEMTOOLS_EARTH = "Earth"; COESTR_TOTEMTOOLS_EARTH = "Earth";
@@ -81,7 +74,6 @@ COESTR_TOTEMTOOLS_FIRE = "Fire";
COESTR_TOTEMTOOLS_WATER = "Water"; COESTR_TOTEMTOOLS_WATER = "Water";
COESTR_TOTEMTOOLS_AIR = "Air"; COESTR_TOTEMTOOLS_AIR = "Air";
-- Elements -- Elements
-- --------- -- ---------
COESTR_ELEMENT_EARTH = "Earth"; COESTR_ELEMENT_EARTH = "Earth";
@@ -89,63 +81,61 @@ COESTR_ELEMENT_FIRE = "Fire";
COESTR_ELEMENT_WATER = "Water"; COESTR_ELEMENT_WATER = "Water";
COESTR_ELEMENT_AIR = "Air"; COESTR_ELEMENT_AIR = "Air";
-- UI elements -- UI elements
-- ------------ -- ------------
COEUI_STRINGS = { COEUI_STRINGS = {
COE_ConfigClose = "Close"; COE_ConfigClose = "Close",
COE_ConfigTotemTabPanel = "Totem Options"; COE_ConfigTotemTabPanel = "Totem Options",
COE_ConfigHealingTabPanel = "Healing Options"; COE_ConfigHealingTabPanel = "Healing Options",
COE_ConfigDebuffTabPanel = "Debuff Options"; COE_ConfigDebuffTabPanel = "Debuff Options",
COE_ConfigTotemTotemBar = "Totem Bars"; COE_ConfigTotemTotemBar = "Totem Bars",
COE_ConfigTotemTotemOptions = "Options"; COE_ConfigTotemTotemOptions = "Options",
COE_ConfigTotemTotemSets = "Totem Sets"; COE_ConfigTotemTotemSets = "Totem Sets",
COE_OptionEnableTotemBar = "Enable Totem Bar"; COE_OptionEnableTotemBar = "Enable Totem Bar",
COE_OptionHideBackdrop = "Hide background when inactive"; COE_OptionHideBackdrop = "Hide background when inactive",
COE_OptionEnableTimers = "Enable totem timers"; COE_OptionEnableTimers = "Enable totem timers",
COE_OptionEnableTimerNotifications = "Enable notifications"; COE_OptionEnableTimerNotifications = "Enable notifications",
COE_OptionTTAlignment = "Tooltip Alignment"; COE_OptionTTAlignment = "Tooltip Alignment",
COE_OptionDisplayMode = "Anchor Button"; COE_OptionDisplayMode = "Anchor Button",
COE_OptionDisplayAlignment = "Button Alignment"; COE_OptionDisplayAlignment = "Button Alignment",
COE_OptionAdvisor = "Enable totem advisor"; COE_OptionAdvisor = "Enable totem advisor",
COE_OptionEnableSets = "Enable totem sets"; COE_OptionEnableSets = "Enable totem sets",
COE_OptionEnableAutoSwitch = "Autoswitch sets in PVP"; COE_OptionEnableAutoSwitch = "Autoswitch sets in PVP",
COE_OptionActiveSet = "Active totem set"; COE_OptionActiveSet = "Active totem set",
COE_OptionNewSet = "New set"; COE_OptionNewSet = "New set",
COE_OptionDeleteSet = "Delete set"; COE_OptionDeleteSet = "Delete set",
COE_OptionConfigureSet = "Configure set"; COE_OptionConfigureSet = "Configure set",
COE_OptionStopConfigureSet = "OK"; COE_OptionStopConfigureSet = "OK",
COE_OptionCastOrderString = "Cast Order"; COE_OptionCastOrderString = "Cast Order",
COE_OptionConfigureBar = "Configure Totems"; COE_OptionConfigureBar = "Configure Totems",
COE_OptionFixBar = "Fix totem bar positions"; COE_OptionFixBar = "Fix totem bar positions",
COE_OptionConfigureOrder = "Configure Order"; COE_OptionConfigureOrder = "Configure Order",
COE_OptionScanTotems = "Reload Totems"; COE_OptionScanTotems = "Reload Totems",
COE_OptionCurrentFrame = "Configure Bar"; COE_OptionCurrentFrame = "Configure Bar",
COE_OptionDirection = "Direction"; COE_OptionDirection = "Direction",
COE_OptionFrameMode = "Bar mode"; COE_OptionFrameMode = "Bar mode",
COE_OptionFlexCount = "Static buttons"; COE_OptionFlexCount = "Static buttons",
COE_OptionScaling = "Scaling"; COE_OptionScaling = "Scaling",
COE_OptionEnableTimerFrame = "Show separate timer frame"; COE_OptionEnableTimerFrame = "Show separate timer frame",
COE_OptionGroupBars = "Move bars as group"; COE_OptionGroupBars = "Move bars as group",
COE_OptionOverrideRank = "Rank 1 modifier"; COE_OptionOverrideRank = "Rank 1 modifier",
COE_OptionFrameTimersOnly = "Show timers ONLY in timer frame"; COE_OptionFrameTimersOnly = "Show timers ONLY in timer frame"
} }
-- Tooltips -- Tooltips
-- --------- -- ---------
COEUI_TOOLTIPS = { COEUI_TOOLTIPS = {
COE_ConfigTotemTab = "Shows the totem options"; COE_ConfigTotemTab = "Shows the totem options",
COE_ConfigHealingTab = "Shows the healing options"; COE_ConfigHealingTab = "Shows the healing options",
COE_ConfigDebuffTab = "Shows the debuff 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_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_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_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_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_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_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_OptionFixBar = "Fixes the totem bar position\nto prevent dragging it accidentally",
COE_OptionGroupBars = "When you drag one bar,\nthe other bars will follow"; COE_OptionGroupBars = "When you drag one bar,\nthe other bars will follow"
} }
COESTR_TRINKET_TOOLTIP = "Enamored Water Spirit"; COESTR_TRINKET_TOOLTIP = "Enamored Water Spirit";
@@ -154,31 +144,30 @@ COESTR_TRINKET_TOTEM = "Ancient Mana Spring Totem";
-- Combo boxes -- Combo boxes
-- ------------ -- ------------
COEUI_TTALIGN = { COEUI_TTALIGN = {
{ "ANCHOR_TOPLEFT"; "Top Left" }; {"ANCHOR_TOPLEFT", "Top Left"}, {"ANCHOR_LEFT", "Left"},
{ "ANCHOR_LEFT"; "Left" }; {"ANCHOR_BOTTOMLEFT", "Bottom Left"}, {"ANCHOR_TOPRIGHT", "Top Right"},
{ "ANCHOR_BOTTOMLEFT"; "Bottom Left" }; {"ANCHOR_RIGHT", "Right"}, {"ANCHOR_BOTTOMRIGHT", "Bottom Right"},
{ "ANCHOR_TOPRIGHT"; "Top Right" }; {"DISABLED", "Disabled"}
{ "ANCHOR_RIGHT"; "Right" };
{ "ANCHOR_BOTTOMRIGHT"; "Bottom Right" };
{ "DISABLED"; "Disabled" };
} }
COEUI_DISPLAYMODE = { "Customize", "Timers Only", "Active Set" } COEUI_DISPLAYMODE = {"Customize", "Timers Only", "Active Set"}
COEUI_DISPLAYALIGN = { "Box", "Vertical", "Horizontal" } COEUI_DISPLAYALIGN = {"Box", "Vertical", "Horizontal"}
COEUI_PVPSETS = { "[PVP] Druid", "[PVP] Hunter", "[PVP] Mage", "[PVP] Paladin", "[PVP] Priest", COEUI_PVPSETS = {
"[PVP] Rogue", "[PVP] Shaman", "[PVP] Warlock", "[PVP] Warrior" } "[PVP] Druid", "[PVP] Hunter", "[PVP] Mage", "[PVP] Paladin",
"[PVP] Priest", "[PVP] Rogue", "[PVP] Shaman", "[PVP] Warlock",
"[PVP] Warrior"
}
COEUI_DEFAULTSET = "Default"; COEUI_DEFAULTSET = "Default";
COEUI_OVERRIDERANK = { "No key", "Use SHIFT", "Use ALT", "Use CTRL" }; COEUI_OVERRIDERANK = {"No key", "Use SHIFT", "Use ALT", "Use CTRL"};
COEUI_CURRENTFRAME = { "Earth", "Fire", "Water", "Air" }; COEUI_CURRENTFRAME = {"Earth", "Fire", "Water", "Air"};
COEUI_DIRECTION = { "Up", "Down", "Left", "Right" }; COEUI_DIRECTION = {"Up", "Down", "Left", "Right"};
COEUI_FRAMEMODE = { "Closed", "Open", "Flex", "Hidden" };
COEUI_FRAMEMODE = {"Closed", "Open", "Flex", "Hidden"};
-- Key bindings -- Key bindings
-- ------------- -- -------------
@@ -214,7 +203,6 @@ BINDING_NAME_TOTEMAIR5 = "Air Totem #5";
BINDING_NAME_TOTEMAIR6 = "Air Totem #6"; BINDING_NAME_TOTEMAIR6 = "Air Totem #6";
BINDING_NAME_TOTEMAIR7 = "Air Totem #7"; BINDING_NAME_TOTEMAIR7 = "Air Totem #7";
-- Key modifiers -- Key modifiers
-- -------------- -- --------------
COEMODIFIER_ALT = "ALT"; COEMODIFIER_ALT = "ALT";
@@ -226,20 +214,28 @@ COEMODIFIER_SHIFT_SHORT = "S";
COEMODIFIER_NUMPAD = "Num Pad"; COEMODIFIER_NUMPAD = "Num Pad";
COEMODIFIER_NUMPAD_SHORT = "NP"; COEMODIFIER_NUMPAD_SHORT = "NP";
-- Shell commands -- Shell commands
-- --------------- -- ---------------
COESHELL_INTRO = "Available shell commands for Call Of Elements:"; COESHELL_INTRO = "Available shell commands for Call Of Elements:";
COESHELL_CONFIG = "'/coe' or '/coe config' - Shows the configuration dialog"; 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_NEXTSET =
COESHELL_PRIORSET = "'/coe priorset' - Switches to the prior custom totem set or the default set"; "'/coe nexset' - Switches to the next custom totem set or the default set";
COESHELL_SET = "'/coe set <name>' - Switches to set with the specified name. <name> is case-sensitive"; COESHELL_PRIORSET =
COESHELL_RESTARTSET = "'/coe restartset' - Next time you throw the active set, it recasts all totems"; "'/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_RESET = "'/coe reset' - Resets all timers and the active set";
COESHELL_RESETFRAMES = "'/coe resetframes' - Returns all element bars to the screen center"; COESHELL_RESETFRAMES =
COESHELL_RESETORDERING = "'/coe resetordering' - Resets the ordering of your totem bars"; "'/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_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_THROWSET = "'/coe throwset' - Throws the active totem set";
COESHELL_ADVISED = "'/coe advised' - Throws the next advised totem"; COESHELL_ADVISED = "'/coe advised' - Throws the next advised totem";
COESHELL_DEBUG =
"'/coe debug' - Toggles debug message printing (disable by default)";
+2 -2
View File
@@ -3,5 +3,5 @@ Shaman totem addon for turtle wow. Based on https://github.com/laytya/CallOfElem
To use the addon: To use the addon:
* download repo or release * download repo or release
* extract files to folder in turtle wow Interface/Addons folder path * extract folder named "turtle-wow-call-of-elements-xxxx" from zip to turtle wow Interface/Addons folder path
* rename folder to "CallOfElements" * rename folder to "CallOfElements", make sure files are in CallOfElements folder