f68fb493a4
Rewrote the totemic recall trigger logic and removed resent message in method.
320 lines
9.0 KiB
Lua
320 lines
9.0 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
|