-- ================================================================================ --
-- EMA - ( Ebony's MultiBoxing Assistant ) --
-- Current Author: Jennifer Cally (Ebony) --
-- --
-- License: All Rights Reserved 2018-2020 Jennifer Cally --
-- --
-- Some Code Used from "Jamba" that is --
-- Released under the MIT License --
-- "Jamba" Copyright 2008-2015 Michael "Jafula" Miller --
-- --
-- ================================================================================ --
local MAJOR, MINOR = "Module-1.0", 2
local EMAModule, oldMinor = LibStub:NewLibrary( MAJOR, MINOR )
if not EMAModule then
return
end
-- Load libraries.
LibStub( "AceConsole-3.0" ):Embed( EMAModule )
local L = LibStub( "AceLocale-3.0" ):GetLocale( "Core" )
-------------------------------------------------------------------------------------------------------------
-- EMA Module Mixin Management.
-------------------------------------------------------------------------------------------------------------
-- A list of modules that embed this module.
EMAModule.embeddedModules = EMAModule.embeddedModules or {}
-- These methods are the embbedable methods.
local mixinMethods = {
"EMARegisterModule", "EMAModuleInitialize",
"EMASendCommandToTeam", "EMASendCommandToMaster",
"EMASendMessageToTeam", "EMASendCommandToToon",
"EMASendSettings", "EMAOnSettingsReceived",
"EMAChatCommand",
"EMAConfigurationGetSetting", "EMAConfigurationSetSetting",
}
-- Embed all the embeddable methods into the target module.
function EMAModule:Embed( targetModule )
for key, value in pairs( mixinMethods ) do
targetModule[value] = self[value]
end
LibStub( "AceConsole-3.0" ):Embed( targetModule )
self.embeddedModules[targetModule] = true
return targetModule
end
-------------------------------------------------------------------------------------------------------------
-- EMA Module Registration.
-------------------------------------------------------------------------------------------------------------
-- Register a module with EMA. EMA needs modules to be registered in order to faciliate communications.
function EMAModule:EMARegisterModule( moduleName )
EMAPrivate.Core.RegisterModule( self, moduleName )
end
-------------------------------------------------------------------------------------------------------------
-- EMA Communications.
-------------------------------------------------------------------------------------------------------------
-- Send settings to all available EMA Team characters.
function EMAModule:EMASendSettings()
EMAPrivate.Core.SendSettings( self, self.db )
end
-- Send a command to all available EMA Team characters.
function EMAModule:EMASendCommandToTeam( commandName, ... )
EMAPrivate.Core.SendCommandToTeam( self, commandName, ... )
end
-- Send a command to just the master character.
function EMAModule:EMASendCommandToMaster( commandName, ... )
EMAPrivate.Core.SendCommandToMaster( self, commandName, ... )
end
function EMAModule:EMASendCommandToToon( characterName, commandName, ... )
EMAPrivate.Core.SendCommandToToon( self, characterName, commandName, ... )
end
-- Send a message to the team.
function EMAModule:EMASendMessageToTeam( areaName, message, suppressSender, ... )
EMAPrivate.Message.SendMessage( areaName, message, suppressSender, ... )
end
-------------------------------------------------------------------------------------------------------------
-- EMA Chat Commands.
-------------------------------------------------------------------------------------------------------------
-- Does the Chat Command Exist
local function DoesTheChatCommandExist( configuration, command )
local exist = false
for key, info in pairs( configuration ) do
stringName = string.lower( key )
--print("aa", stringName, "vs", command )
if info.type == "input" then
if stringName == command then
exist = true
break
end
end
end
return exist
end
-- Handle the chat command v2 EMA.
function EMAModule:EMAChatCommand( inputBefore )
input = string.lower( inputBefore )
--print("test2", "input", input, "command", self.chatCommand, "module", self.moduleName )
local inputString, tag = strsplit( " ", inputBefore )
local CommandExist = DoesTheChatCommandExist( self:GetConfiguration().args, inputString )
if input == "config" then
if InCombatLockdown() then
print( L["CANNOT_OPEN_IN_COMBAT"] )
return
end
-- Show Config
EMAPrivate.SettingsFrame.Widget:Show()
EMAPrivate.SettingsFrame.TreeGroupStatus.groups[self.parentDisplayName] = true
EMAPrivate.SettingsFrame.WidgetTree:SelectByPath( self.parentDisplayName, self.moduleDisplayName )
EMAPrivate.SettingsFrame.Tree.ButtonClick( nil, nil, self.moduleDisplayName, false)
elseif CommandExist then
--Command Found now Handle IT!
--print("Command Found", input )
LibStub( "AceConfigCmd-3.0" ):HandleCommand( self.chatCommand, self.moduleName, input )
else
-- hell knows what to do so HELP!!!
--print("No found Command Found HELP", input )
for key, info in pairs( self:GetConfiguration().args ) do
if info.type == "input" then
print("|cFFFFFF00"..info.usage, "|cFFFFFFFF".." [ "..info.desc.." ]" )
end
end
end
end
-------------------------------------------------------------------------------------------------------------
-- Module initialization and settings management.
-------------------------------------------------------------------------------------------------------------
-- Initialise the module.
function EMAModule:EMAModuleInitialize( settingsFrame )
-- Create the settings database supplying the settings values along with defaults.
self.completeDatabase = LibStub( "AceDB-3.0" ):New( self.settingsDatabaseName, self.settings )
self.db = self.completeDatabase.profile
self.db.global = self.completeDatabase.global
-- Create the settings.
LibStub( "AceConfig-3.0" ):RegisterOptionsTable( self.moduleName, self:GetConfiguration() )
self.settingsFrame = settingsFrame
-- Register the chat command for this module.
--print("EMAChatCommand", self.chatCommand, self.chatCommandTwo, self.chatCommandThree )
if self.chatCommand then
self:RegisterChatCommand( self.chatCommand, "EMAChatCommand" )
end
-- Remember the characters name.
-- If server has a space in realm name GetRealmName() will show space this will not work with blizzard API so we need to hack this to work --ebony
--local _, k = UnitFullName("player")
local k = GetRealmName()
local realm = k:gsub( "%s+", "")
self.characterRealm = realm
self.characterNameLessRealm = UnitName( "player" )
--self.characterName = UnitFullName( "player" )
self.characterName = self.characterNameLessRealm.."-"..self.characterRealm
--self.characterName = UnitFullName("player")
self.characterGUID = UnitGUID( "player" )
-- Register this module with EMA.
self:EMARegisterModule( self.moduleName )
end
-- Get a settings value.
function EMAModule:EMAConfigurationGetSetting( key )
return self.db[key[#key]]
end
-- Set a settings value.
function EMAModule:EMAConfigurationSetSetting( key, value )
self.db[key[#key]] = value
end
-------------------------------------------------------------------------------------------------------------
-- Upgrade Library.
-------------------------------------------------------------------------------------------------------------
-- Upgrade all modules that are already using this library to use the newer version.
for targetModule, value in pairs( EMAModule.embeddedModules ) do
EMAModule:Embed( targetModule )
end