Files
CallOfElements/CallOfElements.lua
T
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

306 lines
9.4 KiB
Lua

--[[
CALL OF ELEMENTS
The All-In-One Shaman Addon
by Wyverex (2006)
]] if (not COE) then COE = {}; end
COE_VERSION = 2.6
COECOL_TOTEMWARNING = 1;
COECOL_TOTEMDESTROYED = 2;
COECOL_TOTEMCLEANSING = 3;
--[[ ----------------------------------------------------------------
When DebugMode is set to true, all DebugMessage calls will
write a debug message into the chat frame
-------------------------------------------------------------------]]
COE["DebugMode"] = false;
--[[ ----------------------------------------------------------------
When EventPrintMode is set to true, all event calls not caught
will write to a debug message into the chat frame. Requires
DebugMode enabled
-------------------------------------------------------------------]]
COE["EventPrintMode"] = false;
--[[ ----------------------------------------------------------------
These variables control frame updates
UpdateInterval sets the interval in seconds after which a
frame is updated
ForceUpdate can be used as input into Update handlers to force
an update regardless of the current timer
-------------------------------------------------------------------]]
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
The AdvisorWarningInterval controls how often the player is
notified about existing debuffs
-------------------------------------------------------------------]]
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);
-- load only for shamans
-- ----------------------
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("CHAT_MSG_SPELL_SELF_BUFF");
-- register shell command
-- -----------------------
SlashCmdList["COE"] = COEProcessShellCommand;
SLASH_COE1 = "/coe";
end
end
--[[ ----------------------------------------------------------------
METHOD: COE:FindSpellId
PURPOSE: Utility function that can provide spell ID from name.
Run in client chat with '/script COE:FindSpellName("a_spell_name")'.
-------------------------------------------------------------------]]
function COE:FindSpellId(spellNameTarget)
local spellName;
for i = 1, 1000 do
spellName = GetSpellName(i, BOOKTYPE_SPELL);
if (spellName == spellNameTarget) then
print(spellName .. "is id: " .. i);
end
end
end
--[[ ----------------------------------------------------------------
METHOD: COE:OnEvent
PURPOSE: Handles frame events
-------------------------------------------------------------------]]
function COE:OnEvent(event)
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
if (string.find(arg1, "Mana from Totemic Recall")) then
COE:DebugMessage("Totemic Recall initiating reset of timers.");
COE_Totem:ResetTimers();
end
elseif (COE.EventPrintMode) then
COE:DebugMessage(event);
end
end
--[[ ----------------------------------------------------------------
METHOD: COE:Message
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
--[[ ----------------------------------------------------------------
METHOD: COE:DebugMessage
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);
end
end
--[[ ----------------------------------------------------------------
METHOD: COE:Notification
PURPOSE: Adds a message to the error frame in the upper
screen center
-------------------------------------------------------------------]]
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};
else
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
--[[ ----------------------------------------------------------------
METHOD: COE:ToggleConfigFrame
PURPOSE: Toggles the configuration dialog
-------------------------------------------------------------------]]
function COE:ToggleConfigFrame()
if (COE_ConfigFrame:IsVisible()) then
COE_Config:CloseDialog()
else
COE_ConfigFrame:Show();
end
PlaySound("igMainMenuOption");
end
--[[ ----------------------------------------------------------------
METHOD: COEProcessShellCommand
PURPOSE: Executes the entered shell command
-------------------------------------------------------------------]]
function COEProcessShellCommand(msg)
if (msg == "" or msg == "config") then
COE:ToggleConfigFrame();
elseif (msg == "list") then
COE:DisplayShellCommands();
elseif (msg == "nextset") then
COE_Totem:SwitchToNextSet();
elseif (msg == "priorset") then
COE_Totem:SwitchToPriorSet();
elseif (msg == "throwset") then
COE_Totem:ThrowSet();
elseif (msg == "restartset") then
COE_Totem:ResetSetCycle();
elseif (msg == "reset") then
COE_Totem:ResetTimers();
elseif (msg == "reload") then
COE_Totem:Rescan();
elseif (msg == "resetframes") then
COE_Totem:ResetFrames();
elseif (msg == "advised") then
COE_Totem:ThrowAdvisedTotem();
elseif (msg == "resetordering") then
COE_DisplayedTotems = {};
COE_Totem:Rescan();
elseif (msg == "bestheal") then
COE_Heal:BestHeal();
elseif (msg == "battleheal") then
COE_Heal:BattleHeal();
else
local _, _, arg = string.find(msg, "set (.*)");
if (arg) then COE_Totem:SwitchToSet(arg); end
end
end
--[[ ----------------------------------------------------------------
METHOD: COE:DisplayShellCommands
PURPOSE: Shows a list of all shell commands
-------------------------------------------------------------------]]
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);
end
--[[ ----------------------------------------------------------------
METHOD: COE:FixSavedVariables
PURPOSE: If this addon version is higher than the one in
the saved variables, check if we have to fix the
saved variables due to fixed bugs
-------------------------------------------------------------------]]
function COE:FixSavedVariables()
-- is the version stored in the saved variables?
-- ----------------------------------------------
if (not COE_Config:GetSaved(COEOPT_VERSION)) then
-- this is version <= v1.6
-- ------------------------
COE_Config:SetOption(COEOPT_VERSION, 1.6);
end
local version = COE_Config:GetSaved(COEOPT_VERSION);
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);
end
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);
end
-- fix totem set element strings
-- ------------------------------
COE:Fix_CastOrderLocalization2();
COE_Config:SetOption(COEOPT_VERSION, 2.1);
end