9 Commits

Author SHA1 Message Date
MDGitHubRepo fcc3fe6915 Merge pull request #9 from MDGitHubRepo/Issue-#8-Tauren-totemic-slam-error
Issue #8 Fixed tauren totemic slam issue
2025-01-02 10:16:32 -05:00
MDGitHubRepo fc2c7dab7f Added exception for totemic slam spell 2025-01-02 10:15:40 -05:00
MDGitHubRepo b19325489a Update README.md 2024-12-20 06:23:37 -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 3254 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
]]
--[[ ----------------------------------------------------------------
]] --[[ ----------------------------------------------------------------
COE.TotemData contains a list of totem classes that are
returned by COE:CreateTotem
For every available totem the player has, one object is
added to this list
-------------------------------------------------------------------]]
COE["TotemData"] = {};
-------------------------------------------------------------------]] COE["TotemData"] =
{};
COE["TotemCount"] = 0;
--[[ ----------------------------------------------------------------
COE.MaxTotems stores the maximum number of totems per element
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
@@ -37,7 +33,6 @@ COE.TotemsAvailable["Fire"] = 0;
COE.TotemsAvailable["Water"] = 0;
COE.TotemsAvailable["Air"] = 0;
--[[ ----------------------------------------------------------------
COE.ActiveTotems contains a pointer to the active totem of
each element
@@ -50,9 +45,14 @@ COE.TotemsAvailable["Air"] = 0;
to prevent actions that trigger SPELLCAST_STOP and are not
hooked from activating the timer accidentally
-------------------------------------------------------------------]]
COE["ActiveTotems"] = { Earth = nil, Fire = nil, Water = nil, Air = nil };
COE["TotemPending"] = { Totem = nil, UseRank = 0, Timeout = 0.75 };
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
@@ -60,33 +60,39 @@ COE["TotemPending"] = { Totem = nil, UseRank = 0, Timeout = 0.75 };
or fear effects
-------------------------------------------------------------------]]
COE["CleansingTotems"] = {
Poison = { Totem = nil, Button = nil, Warn = false },
Disease = { Totem = nil, Button = nil, Warn = false },
Tremor = { Totem = nil, Button = nil, Warn = false } };
Poison = {Totem = nil, Button = nil, Warn = false},
Disease = {Totem = nil, Button = nil, Warn = false},
Tremor = {Totem = nil, Button = nil, Warn = false}
};
--[[ ----------------------------------------------------------------
COE.TotemSets contains the totem pointers for each set and
element
-------------------------------------------------------------------]]
COE["TotemSetCount"] = 0;
COE["TotemSets"] = { }
COE["TotemSets"] = {}
--[[ ----------------------------------------------------------------
COE.SetCycle stores which totem of the active set have
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"] = { SpellName = "", 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 };
COE["NoTotem"] = {
SpellName = "",
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
@@ -94,23 +100,31 @@ COE["NoTotem"] = { SpellName = "", Element = "", Texture = "Interface\\Icons\\IN
PURPOSE: Returns the totem class for a new totem
-------------------------------------------------------------------]]
function COE:CreateTotem()
return { SpellName = "", Element = "", Texture = "",
ToolPresent = false, Ranks = {}, MaxRank = 0, isActive = false,
CurDuration = 0, CurHealth = 0, CurCooldown = 0,
isTrinket = false, TrinketSlot = nil };
return {
SpellName = "",
Element = "",
Texture = "",
ToolPresent = false,
Ranks = {},
MaxRank = 0,
isActive = false,
CurDuration = 0,
CurHealth = 0,
CurCooldown = 0,
isTrinket = false,
TrinketSlot = nil
};
end
--[[ ----------------------------------------------------------------
METHOD: COE:CreateTotemRank
PURPOSE: Returns the class for a new totem rank
-------------------------------------------------------------------]]
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
--[[ ----------------------------------------------------------------
METHOD: COE:ElementFromTool
@@ -118,7 +132,7 @@ end
This is needed for the french version to work. In the
english and german versions it just returns the input
-------------------------------------------------------------------]]
function COE:ElementFromTool( element )
function COE:ElementFromTool(element)
if element == COESTR_TOTEMTOOLS_EARTH then
return COESTR_ELEMENT_EARTH;
@@ -132,27 +146,25 @@ function COE:ElementFromTool( element )
end
--[[ ----------------------------------------------------------------
METHOD: COE:LocalizedElement
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";
elseif( element == COESTR_ELEMENT_FIRE ) then
elseif (element == COESTR_ELEMENT_FIRE) then
return "Fire";
elseif( element == COESTR_ELEMENT_WATER ) then
elseif (element == COESTR_ELEMENT_WATER) then
return "Water";
elseif( element == COESTR_ELEMENT_AIR ) then
elseif (element == COESTR_ELEMENT_AIR) then
return "Air";
end
end
--[[ ----------------------------------------------------------------
METHOD: COE:ScanTotems
@@ -161,7 +173,7 @@ end
-------------------------------------------------------------------]]
function COE:ScanTotems()
COE:DebugMessage( "Scanning Totems..." );
COE:DebugMessage("Scanning Totems...");
-- delete existing totem objects
-- ------------------------------
@@ -174,49 +186,48 @@ function COE:ScanTotems()
-- iterate over all spells in the spellbook
-- -----------------------------------------
local i, k = 1;
local i = 1;
while true do
local SpellName, SpellRank = GetSpellName( i, BOOKTYPE_SPELL );
if not SpellName or SpellName == "Totemic Recall" then
do break end;
end
local SpellName, SpellRank = GetSpellName(i, BOOKTYPE_SPELL);
if not SpellName then do break end end
-- 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 totem = nil;
-- get the rank value
-- -------------------
local _,_,rank = string.find( SpellRank, COESTR_TOTEMRANK );
if( not rank ) then
local _, _, rank = string.find(SpellRank, COESTR_TOTEMRANK);
if (not rank) then
rank = 1;
else
rank = tonumber( rank );
rank = tonumber(rank);
end
-- =======================================================================
-- check if totem already exists with another rank in the list
-- =======================================================================
for k = 1, COE.TotemCount do
if( SpellName == COE.TotemData[k].SpellName ) then
if (SpellName == COE.TotemData[k].SpellName) then
-- use existing totem object
-- --------------------------
totem = COE.TotemData[k];
newtotem = false;
break;
break
end
end
COETotemTT:SetSpell( i, BOOKTYPE_SPELL );
COETotemTT:SetSpell(i, BOOKTYPE_SPELL);
-- =======================================================================
-- create new totem object if not found
-- =======================================================================
if( not totem ) then
if (not totem) then
totem = COE:CreateTotem();
-- set totem spell name
@@ -226,44 +237,46 @@ function COE:ScanTotems()
-- get totem school from tooltip
-- ------------------------------
local text = COETotemTTTextLeft4;
if( text and text:GetText() ) then
if (text and text:GetText()) then
local _,_, element = string.find( text:GetText(), COESTR_TOTEMTOOLS );
if( element ) then
local _, _, element =
string.find(text:GetText(), COESTR_TOTEMTOOLS);
if (element) then
-- if element starts with a |, the player does
-- not possess the needed totem for this spell
-- extract the color code before using the element
-- ------------------------------------------------
if( string.sub( element, 1, 1 ) == "|" ) then
element = string.sub( element, 11 );
if (string.sub(element, 1, 1) == "|") then
element = string.sub(element, 11);
end
-- get element from tool
-- ----------------------
element = COE:ElementFromTool( element );
element = COE:ElementFromTool(element);
-- translate element to english
-- -----------------------------
element = COE:LocalizedElement( element );
element = COE:LocalizedElement(element);
-- valid element?
-- ---------------
if( COE.TotemsAvailable[element] ~= nil ) then
if (COE.TotemsAvailable[element] ~= nil) then
totem.Element = element;
COE.TotemsAvailable[element] = COE.TotemsAvailable[element] + 1;
COE.TotemsAvailable[element] =
COE.TotemsAvailable[element] + 1;
else
COE:Message( COESTR_INVALIDELEMENT .. SpellName );
COE:Message(COESTR_INVALIDELEMENT .. SpellName);
end
end
end
-- get totem texture
-- ------------------
totem.Texture = GetSpellTexture( i, BOOKTYPE_SPELL );
totem.Texture = GetSpellTexture(i, BOOKTYPE_SPELL);
-- get tool presence
-- ------------------
totem.ToolPresent = COE:IsToolPresent( i );
totem.ToolPresent = COE:IsToolPresent(i);
end
-- =======================================================================
@@ -278,56 +291,56 @@ function COE:ScanTotems()
-- get totem mana cost from tooltip
-- ---------------------------------
text = COETotemTTTextLeft2;
if( text and text:GetText() ) then
if (text and text:GetText()) then
local _,_, mana = string.find( text:GetText(), COESTR_TOTEMMANA );
if( mana ) then
totemrank.Mana = tonumber( mana );
end
local _, _, mana = string.find(text:GetText(), COESTR_TOTEMMANA);
if (mana) then totemrank.Mana = tonumber(mana); end
end
-- 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
-- --------------------
totem.Ranks[rank] = totemrank;
if( rank > totem.MaxRank ) then
totem.MaxRank = rank;
end
if (rank > totem.MaxRank) then totem.MaxRank = rank; end
-- is this a new totem?
-- ---------------------
if( newtotem ) then
if (newtotem) then
-- store totem
-- ------------
COE.TotemCount = COE.TotemCount + 1;
COE.TotemData[COE.TotemCount] = totem;
-- check if it's a cleansing totem
-- --------------------------------
if( SpellName == COESTR_TOTEMPOISON ) then
if (SpellName == COESTR_TOTEMPOISON) then
COE.CleansingTotems.Poison.Totem = totem;
elseif( SpellName == COESTR_TOTEMDISEASE ) then
elseif (SpellName == COESTR_TOTEMDISEASE) then
COE.CleansingTotems.Disease.Totem = totem;
elseif( SpellName == COESTR_TOTEMTREMOR ) then
elseif (SpellName == COESTR_TOTEMTREMOR) then
COE.CleansingTotems.Tremor.Totem = totem;
end
COE:DebugMessage( "Found totem: " .. SpellName );
COE:DebugMessage("Found totem: " .. SpellName);
end
-- =======================================================================
-- check visibility options
-- =======================================================================
if( COE_DisplayedTotems[SpellName] == nil ) then
if (COE_DisplayedTotems[SpellName] == nil) then
-- perhaps a new totem. set it to default visible
-- 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
-- update old saved variables versions by adding the element
-- ----------------------------------------------------------
@@ -347,7 +360,7 @@ function COE:ScanTotems()
-- to make it invisible anyway
-- 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();
trinket.SpellName = "Trinket";
trinket.Element = "Water";
@@ -365,11 +378,11 @@ function COE:ScanTotems()
COE.TotemCount = COE.TotemCount + 1;
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
-- 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
@@ -377,10 +390,11 @@ function COE:ScanTotems()
-- Finish
-- ===================================
COE:DebugMessage( "Found " .. COE.TotemCount .. " totems in spellbook" ..
"(" .. COE.TotemsAvailable.Earth .. " Earth, " ..
COE.TotemsAvailable.Fire .. " Fire, " .. COE.TotemsAvailable.Water .. " Water, " ..
COE.TotemsAvailable.Air .. " Air)" );
COE:DebugMessage(
"Found " .. COE.TotemCount .. " totems in spellbook" .. "(" ..
COE.TotemsAvailable.Earth .. " Earth, " .. COE.TotemsAvailable.Fire ..
" Fire, " .. COE.TotemsAvailable.Water .. " Water, " ..
COE.TotemsAvailable.Air .. " Air)");
-- reorder new totems
-- -------------------
@@ -388,7 +402,6 @@ function COE:ScanTotems()
end
--[[ ----------------------------------------------------------------
METHOD: COE:GetTotemDurationAndHealth
@@ -398,14 +411,14 @@ end
totem duration then
Also the health and the cooldown of the totem are returned
-------------------------------------------------------------------]]
function COE:GetTotemDurationAndHealth( spellid )
function COE:GetTotemDurationAndHealth(spellid)
COETotemTTTextRight3:SetText( nil );
COETotemTT:SetSpell( spellid, BOOKTYPE_SPELL );
COETotemTTTextRight3:SetText(nil);
COETotemTT:SetSpell(spellid, BOOKTYPE_SPELL);
text = COETotemTTTextLeft5:GetText();
if( not text ) then
COE:DebugMessage( "nil text with id: " .. spellid );
if (not text) then
COE:DebugMessage("nil text with id: " .. spellid);
return 0, 0;
end
@@ -420,33 +433,34 @@ function COE:GetTotemDurationAndHealth( spellid )
-- first search for a minute specification
-- if we find one it is surely the totem duration
-- -----------------------------------------------
local _,_,minutetext = string.find( text, COESTR_MINUTEDURATION );
if( minutetext ) then
local _, _, minutetext = string.find(text, COESTR_MINUTEDURATION);
if (minutetext) then
-- calculate the duration in seconds
-- ----------------------------------
local min = tonumber( string.sub( minutetext, 1, 1 ) );
local sec = tonumber( string.sub( minutetext, 3, 4 ) ) / 100 * 60;
local min = tonumber(string.sub(minutetext, 1, 1));
local sec = tonumber(string.sub(minutetext, 3, 4)) / 100 * 60;
duration = min * 60 + sec;
else
_,_,minutetext = string.find( text, COESTR_MINUTEDURATION_INT );
if( minutetext ) then
duration = tonumber( minutetext ) * 60;
_, _, minutetext = string.find(text, COESTR_MINUTEDURATION_INT);
if (minutetext) then
duration = tonumber(minutetext) * 60;
else
-- now test for a duration in seconds
-- -----------------------------------
local _,b,sectext1 = string.find( text, COESTR_SECDURATION );
if( sectext1 ) then
local _, b, sectext1 = string.find(text, COESTR_SECDURATION);
if (sectext1) then
-- look if there are two second specifications
-- 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
duration = math.max( tonumber( sectext1 ), tonumber( sectext2 ) );
if (sectext2) then
duration = math.max(tonumber(sectext1), tonumber(sectext2));
else
duration = tonumber( sectext1 );
duration = tonumber(sectext1);
end
end
end
@@ -457,11 +471,11 @@ function COE:GetTotemDurationAndHealth( spellid )
-- ===============================================================
for num, regex in COESTR_TOTEMHEALTH do
local match = { string.gfind( text, regex )() };
if ( table.getn(match) >= 1 ) then
local match = {string.gfind(text, regex)()};
if (table.getn(match) >= 1) then
health = tonumber( match[1] );
break;
health = tonumber(match[1]);
break
end
end
@@ -471,16 +485,16 @@ function COE:GetTotemDurationAndHealth( spellid )
text = COETotemTTTextRight3:GetText();
if( not text ) then
if (not text) then
cooldown = 0;
else
_,_,cooldown = string.find( text, COESTR_SECDURATION );
if( cooldown ) then
cooldown = tonumber( cooldown );
_, _, cooldown = string.find(text, COESTR_SECDURATION);
if (cooldown) then
cooldown = tonumber(cooldown);
else
_,_,cooldown = string.find( text, COESTR_MINUTEDURATION_INT );
if( cooldown ) then
cooldown = tonumber( cooldown ) * 60;
_, _, cooldown = string.find(text, COESTR_MINUTEDURATION_INT);
if (cooldown) then
cooldown = tonumber(cooldown) * 60;
else
cooldown = 0;
end
@@ -491,7 +505,6 @@ function COE:GetTotemDurationAndHealth( spellid )
end
--[[ ----------------------------------------------------------------
METHOD: COE:IsToolPresent
@@ -501,33 +514,30 @@ end
This is done by testing the color of the "Tools:" section
in the totem tooltip
-------------------------------------------------------------------]]
function COE:IsToolPresent( spellid )
function COE:IsToolPresent(spellid)
-- get totem tooltip
-- ------------------
COETotemTT:SetSpell( spellid, BOOKTYPE_SPELL );
COETotemTT:SetSpell(spellid, BOOKTYPE_SPELL);
-- test for presence of the totem tool
-- ------------------------------------
local text = COETotemTTTextLeft4;
if( text and text:GetText() ) then
if (text and text:GetText()) then
local _,_, element = string.find( text:GetText(), COESTR_TOTEMTOOLS );
if( element ) then
local _, _, element = string.find(text:GetText(), COESTR_TOTEMTOOLS);
if (element) then
-- if element doesn't start with a |, the player
-- possesses the needed totem for this spell
-- ------------------------------------------------
if( string.sub( element, 1, 1 ) ~= "|" ) then
return true;
end
if (string.sub(element, 1, 1) ~= "|") then return true; end
end
end
return false;
end
--[[ ----------------------------------------------------------------
METHOD: COE:IsTrinketPresent
@@ -539,12 +549,12 @@ end
function COE:IsTrinketPresent()
for i = 0, 1 do
local slot = GetInventorySlotInfo( "Trinket" .. i .. "Slot" );
local item = GetInventoryItemLink( "player", slot );
local slot = GetInventorySlotInfo("Trinket" .. i .. "Slot");
local item = GetInventoryItemLink("player", slot);
if( item ) then
local itemname = string.find( item, COESTR_TRINKET );
if( itemname ) then
if (item) then
local itemname = string.find(item, COESTR_TRINKET);
if (itemname) then
-- trinket is equipped
-- --------------------
return true, slot;
@@ -556,7 +566,6 @@ function COE:IsTrinketPresent()
end
--[[ ----------------------------------------------------------------
METHOD: COE:ReorderNewTotems
@@ -565,32 +574,50 @@ end
totems in this element
-------------------------------------------------------------------]]
function COE:ReorderNewTotems()
COE:DebugMessage("Executing ReorderNewTotems");
local nextslot = { Earth = COE.TotemsAvailable.Earth, Fire = COE.TotemsAvailable.Fire,
Water = COE.TotemsAvailable.Water, Air = COE.TotemsAvailable.Air };
local nextslot = {
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 k;
COE:DebugMessage("ReorderNewTotems COE.TotemCount: " .. COE.TotemCount);
for k = 1, COE.TotemCount do
local totem = COE.TotemData[k];
if( COE_DisplayedTotems[totem.SpellName] ~= nil ) then
if( COE_DisplayedTotems[totem.SpellName].Order == 0 ) then
COE:DebugMessage(
"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
-- 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;
end
-- register that this slot of the element is now in use
-- mark as error if already in use
-- -----------------------------------------------------
if( used[totem.Element][COE_DisplayedTotems[totem.SpellName].Order] == nil ) then
used[totem.Element][COE_DisplayedTotems[totem.SpellName].Order] = true;
if (used[totem.Element][COE_DisplayedTotems[totem.SpellName].Order] ==
nil) then
used[totem.Element][COE_DisplayedTotems[totem.SpellName].Order] =
true;
else
bError = true;
end
@@ -599,14 +626,14 @@ function COE:ReorderNewTotems()
-- are there multiple entries for one slot?
-- -----------------------------------------
if( bError ) then
if (bError) then
-- there is something wrong with the saved variables
-- reset all ordering and reassign it
-- --------------------------------------------------
for k = 1, COE.TotemCount do
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;
end
end
@@ -617,7 +644,6 @@ function COE:ReorderNewTotems()
end
--[[ ----------------------------------------------------------------
METHOD: COE:InitTotemSets
@@ -626,30 +652,34 @@ end
-------------------------------------------------------------------]]
function COE:InitTotemSets()
local indices = { "Earth", "Fire", "Water", "Air" };
local indices = {"Earth", "Fire", "Water", "Air"};
COE.TotemSets = {};
-- 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,
CastOrder = COE_SavedTotemSets[set].CastOrder };
COE.TotemSets[set] = {
Earth = nil,
Fire = nil,
Water = nil,
Air = nil,
CastOrder = COE_SavedTotemSets[set].CastOrder
};
-- 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
-- ------------------------
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];
end
end
@@ -659,35 +689,41 @@ function COE:InitTotemSets()
-- 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,
CastOrder = COE_CustomTotemSets[set].CastOrder };
COE.TotemSets[COESET_DEFAULT + set] = {
Earth = nil,
Fire = nil,
Water = nil,
Air = nil,
CastOrder = COE_CustomTotemSets[set].CastOrder
};
-- for each element
-- -----------------
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
-- ------------------------
for totem in COE.TotemData do
if( COE.TotemData[totem].SpellName == COE_CustomTotemSets[set][indices[k]] ) then
COE.TotemSets[COESET_DEFAULT + set][indices[k]] = COE.TotemData[totem];
if (COE.TotemData[totem].SpellName ==
COE_CustomTotemSets[set][indices[k]]) then
COE.TotemSets[COESET_DEFAULT + set][indices[k]] =
COE.TotemData[totem];
end
end
end
end
end
COE.TotemSetCount = table.getn( COE.TotemSets );
COE.TotemSetCount = table.getn(COE.TotemSets);
end
--[[ =============================================================================================
F I X E S
@@ -705,19 +741,19 @@ function COE:Fix_CastOrderLocalization()
-- for each standard set
-- ----------------------
local set, k;
for set = 1, table.getn( COE_SavedTotemSets ) do
for set = 1, table.getn(COE_SavedTotemSets) 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;
elseif( COE_SavedTotemSets[set].CastOrder[k] == "Fire" ) then
elseif (COE_SavedTotemSets[set].CastOrder[k] == "Fire") then
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;
elseif( COE_SavedTotemSets[set].CastOrder[k] == "Air" ) then
elseif (COE_SavedTotemSets[set].CastOrder[k] == "Air") then
COE_SavedTotemSets[set].CastOrder[k] = COESTR_ELEMENT_AIR;
end
end
@@ -725,11 +761,10 @@ function COE:Fix_CastOrderLocalization()
-- notify user
-- ------------
COE:Message( COESTR_FIXEDSETS );
COE:Message(COESTR_FIXEDSETS);
end
--[[ ----------------------------------------------------------------
METHOD: COE:Fix_DisplayedTotems
@@ -739,41 +774,38 @@ function COE:Fix_DisplayedTotems()
local i;
local fixed = false;
foreach( COE_DisplayedTotems, function( index, value )
foreach(COE_DisplayedTotems, function(index, value)
-- is this an old-style entry?
-- ----------------------------
if( type( value ) == "boolean" ) then
COE_DisplayedTotems[index] = { Order = 0, Visible = value };
if (type(value) == "boolean") then
COE_DisplayedTotems[index] = {Order = 0, Visible = value};
fixed = true;
elseif( type( value ) == "table" ) then
if( COE_DisplayedTotems[index].Visible == nil ) then
elseif (type(value) == "table") then
if (COE_DisplayedTotems[index].Visible == nil) then
COE_DisplayedTotems[index].Visible = true;
fixed = true;
end
if( COE_DisplayedTotems[index].Order == nil ) then
if (COE_DisplayedTotems[index].Order == nil) then
COE_DisplayedTotems[index].Order = 0;
fixed = true;
end
else
COE_DisplayedTotems[index] = { Order = 0, Visible = value };
COE_DisplayedTotems[index] = {Order = 0, Visible = value};
fixed = true;
end
end );
end);
-- notify user
-- ------------
if( fixed ) then
COE:Message( COESTR_FIXEDDISPLAY );
end
if (fixed) then COE:Message(COESTR_FIXEDDISPLAY); end
end
--[[ ----------------------------------------------------------------
METHOD: COE:Fix_CastOrderLocalization2
@@ -785,19 +817,22 @@ function COE:Fix_CastOrderLocalization2()
-- for each standard set
-- ----------------------
local set, k;
for set = 1, table.getn( COE_SavedTotemSets ) do
for set = 1, table.getn(COE_SavedTotemSets) 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;
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;
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;
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;
end
end
@@ -805,19 +840,22 @@ function COE:Fix_CastOrderLocalization2()
-- 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
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;
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;
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;
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;
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)
]]
if( not COE ) then
COE = {};
end
]] if (not COE) then COE = {}; end
COE_VERSION = 2.6
@@ -40,7 +36,6 @@ COE["EventPrintMode"] = false;
COE["UpdateInterval"] = 0.1;
COE["ForceUpdate"] = COE.UpdateInterval * 2;
--[[ ----------------------------------------------------------------
The AdvisorInterval controls how often the party/raid is
scanned for debuffs that are curable by totems
@@ -50,31 +45,30 @@ COE["ForceUpdate"] = COE.UpdateInterval * 2;
COE["AdvisorInterval"] = 1;
COE["AdvisorWarningInterval"] = 7;
--[[ ----------------------------------------------------------------
METHOD: COE:Init
PURPOSE: Loads submodules and initializes data
-------------------------------------------------------------------]]
function COE:Init()
COE:Message( "Call of Elements v" .. COE_VERSION );
COE:Message("Call of Elements v" .. COE_VERSION);
-- load only for shamans
-- ----------------------
local _, EnglishClass = UnitClass( "player" );
if( EnglishClass ~= "SHAMAN" ) then
COE:Message( COESTR_NOTASHAMAN );
local _, EnglishClass = UnitClass("player");
if (EnglishClass ~= "SHAMAN") then
COE:Message(COESTR_NOTASHAMAN);
COE.Initialized = false;
else
COE.Initialized = true;
this:RegisterEvent( "VARIABLES_LOADED" );
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("CHAT_MSG_SPELL_SELF_BUFF");
-- register shell command
-- -----------------------
SlashCmdList["COE"] = COEProcessShellCommand;
SLASH_COE1="/coe";
SLASH_COE1 = "/coe";
end
end
@@ -101,22 +95,28 @@ end
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
-- ------------------------------------------------
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
@@ -125,10 +125,9 @@ end
PURPOSE: Adds a message to the default chat frame
-------------------------------------------------------------------]]
function COE:Message( msg )
DEFAULT_CHAT_FRAME:AddMessage( "[COE] " .. msg, 0.93, 0.83, 0.45 );
end;
function COE:Message(msg)
DEFAULT_CHAT_FRAME:AddMessage("[COE] " .. msg, 0.93, 0.83, 0.45);
end
--[[ ----------------------------------------------------------------
METHOD: COE:DebugMessage
@@ -136,12 +135,11 @@ end;
PURPOSE: Adds a debug message to the default chat frame if
debug mode is enabled
-------------------------------------------------------------------]]
function COE:DebugMessage( msg )
if( COE.DebugMode ) then
DEFAULT_CHAT_FRAME:AddMessage( "[COE] " .. msg, 1, 0, 0 );
function COE:DebugMessage(msg)
if (COE.DebugMode) then
DEFAULT_CHAT_FRAME:AddMessage("[COE] " .. msg, 1, 0, 0);
end
end;
end
--[[ ----------------------------------------------------------------
METHOD: COE:Notification
@@ -149,28 +147,27 @@ end;
PURPOSE: Adds a message to the error frame in the upper
screen center
-------------------------------------------------------------------]]
function COE:Notification( msg, color )
function COE:Notification(msg, color)
local col;
-- choose color
-- -------------
if( color == COECOL_TOTEMWARNING ) then
col = { r = 0, g = 0.6, b = 1 };
elseif( color == COECOL_TOTEMDESTROYED ) then
col = { r = 1, g = 0.4, b = 0 };
elseif( color == COECOL_TOTEMCLEANSING ) then
col = { r = 0, g = 1, b = 0.4 };
if (color == COECOL_TOTEMWARNING) then
col = {r = 0, g = 0.6, b = 1};
elseif (color == COECOL_TOTEMDESTROYED) then
col = {r = 1, g = 0.4, b = 0};
elseif (color == COECOL_TOTEMCLEANSING) then
col = {r = 0, g = 1, b = 0.4};
else
col = { r = 1, g = 1, b = 1 };
col = {r = 1, g = 1, b = 1};
end
-- add message
-- ------------
UIErrorsFrame:AddMessage( msg, col.r, col.g, col.b, 1.0, UIERRORS_HOLD_TIME );
end;
UIErrorsFrame:AddMessage(msg, col.r, col.g, col.b, 1.0, UIERRORS_HOLD_TIME);
end
--[[ ----------------------------------------------------------------
METHOD: COE:ToggleConfigFrame
@@ -179,74 +176,73 @@ end;
-------------------------------------------------------------------]]
function COE:ToggleConfigFrame()
if( COE_ConfigFrame:IsVisible() ) then
if (COE_ConfigFrame:IsVisible()) then
COE_Config:CloseDialog()
else
COE_ConfigFrame:Show();
end
PlaySound( "igMainMenuOption" );
PlaySound("igMainMenuOption");
end
--[[ ----------------------------------------------------------------
METHOD: COEProcessShellCommand
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();
elseif( msg == "list" ) then
elseif (msg == "list" or msg == "help") then
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();
elseif( msg == "priorset" ) then
elseif (msg == "priorset") then
COE_Totem:SwitchToPriorSet();
elseif( msg == "throwset" ) then
elseif (msg == "throwset") then
COE_Totem:ThrowSet();
elseif( msg == "restartset" ) then
elseif (msg == "restartset") then
COE_Totem:ResetSetCycle();
elseif( msg == "reset" ) then
elseif (msg == "reset") then
COE_Totem:ResetTimers();
elseif( msg == "reload" ) then
elseif (msg == "reload") then
COE_Totem:Rescan();
elseif( msg == "resetframes" ) then
elseif (msg == "resetframes") then
COE_Totem:ResetFrames();
elseif( msg == "advised" ) then
elseif (msg == "advised") then
COE_Totem:ThrowAdvisedTotem();
elseif( msg == "resetordering" ) then
elseif (msg == "resetordering") then
COE_DisplayedTotems = {};
COE_Totem:Rescan();
elseif( msg == "bestheal" ) then
elseif (msg == "bestheal") then
COE_Heal:BestHeal();
elseif( msg == "battleheal" ) then
elseif (msg == "battleheal") then
COE_Heal:BattleHeal();
else
local _,_,arg = string.find( msg, "set (.*)" );
if( arg ) then
COE_Totem:SwitchToSet( arg );
end
local _, _, arg = string.find(msg, "set (.*)");
if (arg) then COE_Totem:SwitchToSet(arg); end
end
end
--[[ ----------------------------------------------------------------
METHOD: COE:DisplayShellCommands
@@ -254,24 +250,24 @@ end
-------------------------------------------------------------------]]
function COE:DisplayShellCommands()
COE:Message( COESHELL_INTRO );
COE:Message( COESHELL_CONFIG );
COE:Message( COESHELL_LIST );
COE:Message( COESHELL_NEXTSET );
COE:Message( COESHELL_PRIORSET );
COE:Message( COESHELL_SET );
COE:Message( COESHELL_RESTARTSET );
COE:Message( COESHELL_RESET );
COE:Message( COESHELL_RESETFRAMES );
COE:Message( COESHELL_RESETORDERING );
COE:Message( COESHELL_RELOAD );
COE:Message( COESHELL_MACRONOTE );
COE:Message( COESHELL_THROWSET );
COE:Message( COESHELL_ADVISED );
COE:Message(COESHELL_INTRO);
COE:Message(COESHELL_CONFIG);
COE:Message(COESHELL_LIST);
COE:Message(COESHELL_NEXTSET);
COE:Message(COESHELL_PRIORSET);
COE:Message(COESHELL_SET);
COE:Message(COESHELL_RESTARTSET);
COE:Message(COESHELL_RESET);
COE:Message(COESHELL_RESETFRAMES);
COE:Message(COESHELL_RESETORDERING);
COE:Message(COESHELL_RELOAD);
COE:Message(COESHELL_MACRONOTE);
COE:Message(COESHELL_THROWSET);
COE:Message(COESHELL_ADVISED);
COE:Message(COESHELL_DEBUG);
end
--[[ ----------------------------------------------------------------
METHOD: COE:FixSavedVariables
@@ -283,37 +279,37 @@ function COE:FixSavedVariables()
-- 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
-- ------------------------
COE_Config:SetOption( COEOPT_VERSION, 1.6 );
COE_Config:SetOption(COEOPT_VERSION, 1.6);
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
-- --------------------------------
COE:Fix_CastOrderLocalization();
COE:Message( COESTR_UDATEDSAVED .. "1.7" );
COE_Config:SetOption( COEOPT_VERSION, 1.7 );
version = COE_Config:GetSaved( COEOPT_VERSION );
COE:Message(COESTR_UDATEDSAVED .. "1.7");
COE_Config:SetOption(COEOPT_VERSION, 1.7);
version = COE_Config:GetSaved(COEOPT_VERSION);
end
if( version == 1.7 ) then
if (version == 1.7) then
-- fix cast order again to due to a typo
-- --------------------------------------
COE:Fix_CastOrderLocalization();
COE:Message( COESTR_UDATEDSAVED .. "1.8" );
COE_Config:SetOption( COEOPT_VERSION, 1.8 );
version = COE_Config:GetSaved( COEOPT_VERSION );
COE:Message(COESTR_UDATEDSAVED .. "1.8");
COE_Config:SetOption(COEOPT_VERSION, 1.8);
version = COE_Config:GetSaved(COEOPT_VERSION);
end
-- fix totem set element strings
-- ------------------------------
COE:Fix_CastOrderLocalization2();
COE_Config:SetOption( COEOPT_VERSION, 2.1 );
COE_Config:SetOption(COEOPT_VERSION, 2.1);
end
+86 -90
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";
@@ -42,8 +37,8 @@ COESTR_MINUTEDURATION = "(%d%.%d%d) min";
COESTR_MINUTEDURATION_INT = "(%d) min";
COESTR_SECDURATION = "(%d%d?) sec";
COESTR_CASTBYNAME = "%(Rank (%d)%)";
COESTR_TOTEMDAMAGE = { ".+ [crh]+its (.+ Totem) ?%u* for (%d+).*" };
COESTR_TOTEMHEALTH = { "(%d*) health" };
COESTR_TOTEMDAMAGE = {".+ [crh]+its (.+ Totem) ?%u* for (%d+).*"};
COESTR_TOTEMHEALTH = {"(%d*) health"};
COESTR_SHOCKSPELL = "(%a* Shock)";
COESTR_HEALINGWAVE = "Healing Wave";
COESTR_LESSERWAVE = "Lesser Healing Wave";
@@ -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,31 +144,30 @@ 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_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",
"[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" };
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_FRAMEMODE = { "Closed", "Open", "Flex", "Hidden" };
COEUI_DIRECTION = {"Up", "Down", "Left", "Right"};
COEUI_FRAMEMODE = {"Closed", "Open", "Flex", "Hidden"};
-- Key bindings
-- -------------
@@ -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)";
+5 -2
View File
@@ -3,5 +3,8 @@ Shaman totem addon for turtle wow. Based on https://github.com/laytya/CallOfElem
To use the addon:
* download repo or release
* extract files to folder in turtle wow Interface/Addons folder path
* rename folder to "CallOfElements"
* extract folder named "turtle-wow-call-of-elements-xxxx" from zip to turtle wow Interface/Addons folder path
* rename folder to "CallOfElements", make sure files are in CallOfElements folder
Dependencies:
* COE requires the addon Chronos. It can be found in this repository of addons https://github.com/refaim/Vanilla-WoW-1.12-Addon-Development-Libraries-Archive. Download the repository and copy the "Chronos" file into the addons folder located at turtle_wow_folder\Interface\AddOns\.