Files
CallOfElements/CallOfElements.lua
T
MDGitHubRepo 233acdbaaa Add files via upload
Updated totemdata.lua to ignore spellname "Totemic Recall" when building the totems.
2024-11-29 13:25:01 -05:00

289 lines
7.8 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;
--[[ ----------------------------------------------------------------
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" );
-- register shell command
-- -----------------------
SlashCmdList["COE"] = COEProcessShellCommand;
SLASH_COE1="/coe";
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();
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, 0.5, 0.5, 0.5 );
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