-- ================================================================================ --
-- EMA - ( Ebony's MultiBoxing Assistant ) --
-- Current Author: Jennifer Cally (Ebony) --
-- --
-- License: All Rights Reserved 2018-2022 Jennifer Calladine --
-- --
-- Some Code Used from "Jamba" that is --
-- Released under the MIT License --
-- "Jamba" Copyright 2008-2015 Michael "Jafula" Miller --
-- --
-- ================================================================================ --
-- Create the addon using AceAddon-3.0 and embed some libraries.
local EMA = LibStub( "AceAddon-3.0" ):NewAddon(
"Mail",
"Module-1.0",
"AceConsole-3.0",
"AceEvent-3.0",
"AceHook-3.0",
"AceTimer-3.0"
)
-- Get the EMA Utilities Library.
local EMAUtilities = LibStub:GetLibrary( "EbonyUtilities-1.0" )
local EMAHelperSettings = LibStub:GetLibrary( "EMAHelperSettings-1.0" )
--local LibBagUtils = LibStub:GetLibrary( "LibBagUtils-1.0" )
local AceGUI = LibStub( "AceGUI-3.0" )
-- Constants and Locale for this module.
EMA.moduleName = "Mail"
EMA.settingsDatabaseName = "MailProfileDB"
EMA.chatCommand = "ema-Mail"
local L = LibStub( "AceLocale-3.0" ):GetLocale( "Core" )
EMA.parentDisplayName = L["INTERACTION"]
EMA.moduleDisplayName = L["Mail"]
-- Icon
EMA.moduleIcon = "Interface\\Addons\\EMA\\Media\\MailIcon.tga"
-- order
EMA.moduleOrder = 20
-- Settings - the values to store and their defaults for the settings database.
EMA.settings = {
global = {
['**'] = {
autoMailItemsListGlobal = {},
},
},
profile = {
messageArea = EMAApi.DefaultMessageArea(),
showEMAMailWindow = false,
globalMailList = false,
blackListItem = false,
MailBoEItems = false,
autoMailToonNameBoE = "",
MailTagName = EMAApi.AllGroup(),
autoBoEItemTag = EMAApi.AllGroup(),
MailCRItems = false,
autoMailToonNameCR = "",
autoCRItemTag = EMAApi.AllGroup(),
MailRecipeFItems = false,
autoMailToonNameRecipeF = "",
autoRecipeFItemTag = EMAApi.AllGroup(),
autoMailItemsList = {},
adjustMoneyWithMail = false,
goldAmountToKeepOnToon = 250,
autoMailToonNameGold = "",
autoMailMoneyTag = EMAApi.AllGroup(),
},
}
-- Configuration.
function EMA:GetConfiguration()
local configuration = {
name = EMA.moduleDisplayName,
handler = EMA,
type = 'group',
childGroups = "tab",
get = "EMAConfigurationGetSetting",
set = "EMAConfigurationSetSetting",
args = {
config = {
type = "input",
name = L["OPEN_CONFIG"],
desc = L["OPEN_CONFIG_HELP"],
usage = "/ema-mail config",
get = false,
set = "",
},
push = {
type = "input",
name = L["PUSH_SETTINGS"],
desc = L["PUSH_ALL_SETTINGS"],
usage = "/ema-mail push",
get = false,
set = "EMASendSettings",
guiHidden = true,
},
copy = {
type = "input",
name = L["COPY"],
desc = L["COPY_HELP"],
usage = "/ema-mail copy",
get = false,
set = "CopyListCommmand",
},
},
}
return configuration
end
-------------------------------------------------------------------------------------------------------------
-- Command this module sends.
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
-- Messages module sends.
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
-- Popup Dialogs.
-------------------------------------------------------------------------------------------------------------
local function InitializePopupDialogs()
StaticPopupDialogs["EMAMail_CONFIRM_REMOVE_MAIL_ITEMS"] = {
text = L["REMOVE_MAIL_LIST"],
button1 = YES,
button2 = NO,
timeout = 0,
whileDead = 1,
hideOnEscape = 1,
OnAccept = function()
EMA:RemoveItem()
end,
}
end
------------------------------------------------------------------------------------------------------------
-- Addon initialization, enabling and disabling.
-------------------------------------------------------------------------------------------------------------
-- Initialise the module.
function EMA:OnInitialize()
-- Initialise the popup dialogs.
InitializePopupDialogs()
EMA.autoMailItemLink = nil
EMA.autoMailToonName = nil
EMA.MailItemTable = {}
EMA.ShiftkeyDown = false
EMA.OldMailName = ""
EMA.Count = 0
-- Create the settings control.
EMA:SettingsCreate()
-- Initialse the EMAModule part of this module.
EMA:EMAModuleInitialize( EMA.settingsControl.widgetSettings.frame )
-- Populate the settings.
EMA:SettingsRefresh()
end
-- Called when the addon is enabled.
function EMA:OnEnable()
EMA:RegisterEvent( "MAIL_SHOW" )
EMA:RegisterEvent( "MAIL_CLOSED" )
EMA:RegisterEvent( "MAIL_SEND_SUCCESS")
EMA:RawHook( "ContainerFrameItemButton_OnModifiedClick", true)
EMA:RegisterMessage( EMAApi.MESSAGE_MESSAGE_AREAS_CHANGED, "OnMessageAreasChanged" )
EMA:RegisterMessage( EMAApi.GROUP_LIST_CHANGED , "OnGroupAreasChanged" )
end
-- Called when the addon is disabled.
function EMA:OnDisable()
-- AceHook-3.0 will tidy up the hooks for us.
end
function EMA:SettingsCreate()
EMA.settingsControl = {}
-- Create the settings panel.
EMAHelperSettings:CreateSettings(
EMA.settingsControl,
EMA.moduleDisplayName,
EMA.parentDisplayName,
EMA.SettingsPushSettingsClick,
EMA.moduleIcon,
EMA.moduleOrder
)
local bottomOfInfo = EMA:SettingsCreateMail( EMAHelperSettings:TopOfSettings() )
EMA.settingsControl.widgetSettings.content:SetHeight( -bottomOfInfo )
-- Help
local helpTable = {}
EMAHelperSettings:CreateHelp( EMA.settingsControl, helpTable, EMA:GetConfiguration() )
end
function EMA:SettingsPushSettingsClick( event )
EMA:EMASendSettings()
end
function EMA:SettingsCreateMail( top )
local buttonControlWidth = 85
local checkBoxHeight = EMAHelperSettings:GetCheckBoxHeight()
local editBoxHeight = EMAHelperSettings:GetEditBoxHeight()
local buttonHeight = EMAHelperSettings:GetButtonHeight()
local dropdownHeight = EMAHelperSettings:GetDropdownHeight()
local left = EMAHelperSettings:LeftOfSettings()
local headingHeight = EMAHelperSettings:HeadingHeight()
local headingWidth = EMAHelperSettings:HeadingWidth( false )
local horizontalSpacing = EMAHelperSettings:GetHorizontalSpacing()
local indentContinueLabel = horizontalSpacing * 18
local verticalSpacing = EMAHelperSettings:GetVerticalSpacing()
local MailWidth = headingWidth
local dropBoxWidth = (headingWidth - horizontalSpacing) / 4
local halfWidth = (headingWidth - horizontalSpacing) / 2
local thirdWidth = (headingWidth - indentContinueLabel) / 3
local left2 = left + thirdWidth + horizontalSpacing
local left3 = left2 + thirdWidth + horizontalSpacing
local movingTop = top
local movingTopEdit = - 10
-- A blank to get layout to show right?
EMAHelperSettings:CreateHeading( EMA.settingsControl, L[""], movingTop, false )
movingTop = movingTop - headingHeight
EMAHelperSettings:CreateHeading( EMA.settingsControl, L["MAIL_LIST_HEADER"], movingTop, false )
movingTop = movingTop - headingHeight
EMA.settingsControl.checkBoxShowEMAMailWindow = EMAHelperSettings:CreateCheckBox(
EMA.settingsControl,
halfWidth,
left,
movingTop,
L["MAIL_LIST"],
EMA.SettingsToggleShowEMAMailWindow,
L["MAIL_LIST_HELP"]
)
EMA.settingsControl.checkBoxGlobalMailList = EMAHelperSettings:CreateCheckBox(
EMA.settingsControl,
halfWidth,
left3,
movingTop,
L["GLOBAL_LIST"],
EMA.SettingsToggleGlobalMailList,
L["GLOBAL_SETTINGS_LIST_HELP"]
)
movingTop = movingTop - checkBoxHeight
EMA.settingsControl.MailItemsHighlightRow = 1
EMA.settingsControl.MailItemsOffset = 1
local list = {}
list.listFrameName = "EMAMailIteamsSettingsFrame"
list.parentFrame = EMA.settingsControl.widgetSettings.content
list.listTop = movingTop
list.listLeft = left
list.listWidth = MailWidth
list.rowHeight = 15
list.rowsToDisplay = 10
list.columnsToDisplay = 4
list.columnInformation = {}
list.columnInformation[1] = {}
list.columnInformation[1].width = 40
list.columnInformation[1].alignment = "LEFT"
list.columnInformation[2] = {}
list.columnInformation[2].width = 20
list.columnInformation[2].alignment = "LEFT"
list.columnInformation[3] = {}
list.columnInformation[3].width = 20
list.columnInformation[3].alignment = "LEFT"
list.columnInformation[4] = {}
list.columnInformation[4].width = 20
list.columnInformation[4].alignment = "LEFT"
list.scrollRefreshCallback = EMA.SettingsScrollRefresh
list.rowClickCallback = EMA.SettingsMailItemsRowClick
EMA.settingsControl.MailItems = list
EMAHelperSettings:CreateScrollList( EMA.settingsControl.MailItems )
movingTop = movingTop - list.listHeight - verticalSpacing
EMA.settingsControl.MailItemsButtonRemove = EMAHelperSettings:CreateButton(
EMA.settingsControl,
buttonControlWidth,
left2 + 50,
movingTop,
L["REMOVE"],
EMA.SettingsMailItemsRemoveClick
)
movingTop = movingTop - buttonHeight - verticalSpacing
EMAHelperSettings:CreateHeading( EMA.settingsControl, L["ADD_ITEMS"], movingTop, false )
movingTop = movingTop - headingHeight
EMA.settingsControl.MailItemsEditBoxMailItem = EMAHelperSettings:CreateEditBox(
EMA.settingsControl,
thirdWidth,
left2,
movingTop,
L["ITEM_DROP"]
)
EMA.settingsControl.MailItemsEditBoxMailItem:SetCallback( "OnEnterPressed", EMA.SettingsEditBoxChangedMailItem )
movingTop = movingTop - editBoxHeight
EMA.settingsControl.listCheckBoxBoxOtherBlackListItem = EMAHelperSettings:CreateCheckBox(
EMA.settingsControl,
thirdWidth,
left,
movingTop + movingTopEdit,
L["BLACKLIST_ITEM"],
EMA.SettingsToggleBlackListItem,
L["BLACKLIST_ITEM_HELP"]
)
EMA.settingsControl.tabNumListDropDownList = EMAHelperSettings:CreateEditBox(
EMA.settingsControl,
thirdWidth,
left2,
movingTop,
L["MAILTOON"]
)
EMA.settingsControl.tabNumListDropDownList:SetCallback( "OnEnterPressed", EMA.EditMailToonName )
--Group
EMA.settingsControl.MailItemsEditBoxMailTag = EMAHelperSettings:CreateDropdown(
EMA.settingsControl,
thirdWidth,
left3,
movingTop,
L["GROUP_LIST"]
)
EMA.settingsControl.MailItemsEditBoxMailTag:SetList( EMAApi.GroupList() )
EMA.settingsControl.MailItemsEditBoxMailTag:SetCallback( "OnValueChanged", EMA.GroupListDropDownList )
movingTop = movingTop - editBoxHeight
EMA.settingsControl.MailItemsButtonAdd = EMAHelperSettings:CreateButton(
EMA.settingsControl,
buttonControlWidth,
left2 + 50,
movingTop,
L["ADD"],
EMA.SettingsMailItemsAddClick
)
movingTop = movingTop - buttonHeight
EMAHelperSettings:CreateHeading( EMA.settingsControl, L["Mail_OPTIONS"], movingTop, false )
movingTop = movingTop - headingHeight
EMA.settingsControl.checkBoxMailBoEItems = EMAHelperSettings:CreateCheckBox(
EMA.settingsControl,
thirdWidth,
left,
movingTop + movingTopEdit,
L["MAIL_BOE_ITEMS"],
EMA.SettingsToggleMailBoEItems,
L["MAIL_BOE_ITEMS_HELP"]
)
EMA.settingsControl.tabNumListDropDownListBoE = EMAHelperSettings:CreateEditBox(
EMA.settingsControl,
thirdWidth,
left2,
movingTop,
L["MAILTOON"]
)
EMA.settingsControl.tabNumListDropDownListBoE:SetCallback( "OnEnterPressed", EMA.EditMailToonNameBoE )
EMA.settingsControl.MailTradeBoEItemsTagBoE = EMAHelperSettings:CreateDropdown(
EMA.settingsControl,
thirdWidth,
left3,
movingTop,
L["GROUP_LIST"]
)
EMA.settingsControl.MailTradeBoEItemsTagBoE:SetList( EMAApi.GroupList() )
EMA.settingsControl.MailTradeBoEItemsTagBoE:SetCallback( "OnValueChanged", EMA.GroupListDropDownListBoE)
movingTop = movingTop - editBoxHeight - 3
EMA.settingsControl.checkBoxMailCRItems = EMAHelperSettings:CreateCheckBox(
EMA.settingsControl,
thirdWidth,
left,
movingTop + movingTopEdit,
L["MAIL_REAGENTS"],
EMA.SettingsToggleMailCRItems,
L["MAIL_REAGENTS_HELP"]
)
EMA.settingsControl.tabNumListDropDownListCR = EMAHelperSettings:CreateEditBox(
EMA.settingsControl,
thirdWidth,
left2,
movingTop,
L["MAILTOON"]
)
EMA.settingsControl.tabNumListDropDownListCR:SetCallback( "OnEnterPressed", EMA.EditMailToonNameCR )
EMA.settingsControl.MailTradeCRItemsTagCR = EMAHelperSettings:CreateDropdown(
EMA.settingsControl,
thirdWidth,
left3,
movingTop,
L["GROUP_LIST"]
)
EMA.settingsControl.MailTradeCRItemsTagCR:SetList( EMAApi.GroupList() )
EMA.settingsControl.MailTradeCRItemsTagCR:SetCallback( "OnValueChanged", EMA.GroupListDropDownListCR )
-- Recipes & Formulas
movingTop = movingTop - editBoxHeight - 3
EMA.settingsControl.checkBoxMailRecipeFItems = EMAHelperSettings:CreateCheckBox(
EMA.settingsControl,
thirdWidth,
left,
movingTop + movingTopEdit,
L["MAIL_RECIPES"],
EMA.SettingsToggleMailRecipeF,
L["MAIL_RECIPES_HELP"]
)
EMA.settingsControl.tabNumListDropDownListRecipeF = EMAHelperSettings:CreateEditBox(
EMA.settingsControl,
thirdWidth,
left2,
movingTop,
L["MAILTOON"]
)
EMA.settingsControl.tabNumListDropDownListRecipeF:SetCallback( "OnEnterPressed", EMA.SettingsToggleMailRecipeFName )
EMA.settingsControl.MailTradeRecipeFItemsTagRecipeF = EMAHelperSettings:CreateDropdown(
EMA.settingsControl,
thirdWidth,
left3,
movingTop,
L["GROUP_LIST"]
)
EMA.settingsControl.MailTradeRecipeFItemsTagRecipeF:SetList( EMAApi.GroupList() )
EMA.settingsControl.MailTradeRecipeFItemsTagRecipeF:SetCallback( "OnValueChanged", EMA.EditMailToonNameRecipeFGroup )
movingTop = movingTop - editBoxHeight - headingHeight
-- movingTop = movingTop - editBoxHeight
EMAHelperSettings:CreateHeading( EMA.settingsControl, L["MAIL_GOLD_OPTIONS"] , movingTop, false )
movingTop = movingTop - headingHeight
EMA.settingsControl.checkBoxAdjustMoneyOnToonViaMail = EMAHelperSettings:CreateCheckBox(
EMA.settingsControl,
headingWidth,
left,
movingTop,
L["MAIL_GOLD"],
EMA.SettingsToggleAdjustMoneyOnToonViaMail,
L["MAIL_GOLD_HELP"]
)
movingTop = movingTop - checkBoxHeight
EMA.settingsControl.editBoxGoldAmountToLeaveOnToon = EMAHelperSettings:CreateEditBox(
EMA.settingsControl,
dropBoxWidth,
left,
movingTop,
L["GOLD_TO_KEEP"]
)
EMA.settingsControl.editBoxGoldAmountToLeaveOnToon:SetCallback( "OnEnterPressed", EMA.EditBoxChangedGoldAmountToLeaveOnToon )
EMA.settingsControl.SettingsToggleAdjustMoneyOnToonName = EMAHelperSettings:CreateEditBox(
EMA.settingsControl,
thirdWidth,
left2,
movingTop,
L["MAILTOON"]
)
EMA.settingsControl.SettingsToggleAdjustMoneyOnToonName:SetCallback( "OnEnterPressed", EMA.EditMailToonNameGold )
EMA.settingsControl.SettingsToggleAdjustMoneyOnToonTag = EMAHelperSettings:CreateDropdown(
EMA.settingsControl,
thirdWidth,
left3,
movingTop,
L["GROUP_LIST"]
)
EMA.settingsControl.SettingsToggleAdjustMoneyOnToonTag:SetList( EMAApi.GroupList() )
EMA.settingsControl.SettingsToggleAdjustMoneyOnToonTag:SetCallback( "OnValueChanged", EMA.GroupListDropDownListGold )
movingTop = movingTop - editBoxHeight
EMA.settingsControl.dropdownMessageArea = EMAHelperSettings:CreateDropdown(
EMA.settingsControl,
dropBoxWidth,
left2,
movingTop,
L["MESSAGE_AREA"]
)
EMA.settingsControl.dropdownMessageArea:SetList( EMAApi.MessageAreaList() )
EMA.settingsControl.dropdownMessageArea:SetCallback( "OnValueChanged", EMA.SettingsSetMessageArea )
movingTop = movingTop - dropdownHeight - verticalSpacing
return movingTop
end
-------------------------------------------------------------------------------------------------------------
-- Settings Callbacks.
-------------------------------------------------------------------------------------------------------------
function EMA:SettingsScrollRefresh()
FauxScrollFrame_Update(
EMA.settingsControl.MailItems.listScrollFrame,
EMA:GetMailItemsMaxPosition(),
EMA.settingsControl.MailItems.rowsToDisplay,
EMA.settingsControl.MailItems.rowHeight
)
EMA.settingsControl.MailItemsOffset = FauxScrollFrame_GetOffset( EMA.settingsControl.MailItems.listScrollFrame )
for iterateDisplayRows = 1, EMA.settingsControl.MailItems.rowsToDisplay do
-- Reset.
EMA.settingsControl.MailItems.rows[iterateDisplayRows].columns[1].textString:SetText( "" )
EMA.settingsControl.MailItems.rows[iterateDisplayRows].columns[1].textString:SetTextColor( 1.0, 1.0, 1.0, 1.0 )
EMA.settingsControl.MailItems.rows[iterateDisplayRows].columns[2].textString:SetText( "" )
EMA.settingsControl.MailItems.rows[iterateDisplayRows].columns[2].textString:SetTextColor( 1.0, 1.0, 1.0, 1.0 )
EMA.settingsControl.MailItems.rows[iterateDisplayRows].columns[3].textString:SetText( "" )
EMA.settingsControl.MailItems.rows[iterateDisplayRows].columns[3].textString:SetTextColor( 1.0, 1.0, 1.0, 1.0 )
EMA.settingsControl.MailItems.rows[iterateDisplayRows].columns[4].textString:SetText( "" )
EMA.settingsControl.MailItems.rows[iterateDisplayRows].columns[4].textString:SetTextColor( 1.0, 0, 0, 1.0 )
EMA.settingsControl.MailItems.rows[iterateDisplayRows].highlight:SetColorTexture( 0.0, 0.0, 0.0, 0.0 )
-- Get data.
local dataRowNumber = iterateDisplayRows + EMA.settingsControl.MailItemsOffset
if dataRowNumber <= EMA:GetMailItemsMaxPosition() then
-- Put data information into columns.
local MailItemsInformation = EMA:GetMailItemsAtPosition( dataRowNumber )
local blackListText = ""
if MailItemsInformation.blackList == true then
blackListText = L["ITEM_ON_BLACKLIST"]
end
EMA.settingsControl.MailItems.rows[iterateDisplayRows].columns[1].textString:SetText( MailItemsInformation.name )
EMA.settingsControl.MailItems.rows[iterateDisplayRows].columns[2].textString:SetText( MailItemsInformation.GBTab )
EMA.settingsControl.MailItems.rows[iterateDisplayRows].columns[3].textString:SetText( MailItemsInformation.tag )
EMA.settingsControl.MailItems.rows[iterateDisplayRows].columns[4].textString:SetText( blackListText )
-- Highlight the selected row.
if dataRowNumber == EMA.settingsControl.MailItemsHighlightRow then
EMA.settingsControl.MailItems.rows[iterateDisplayRows].highlight:SetColorTexture( 1.0, 1.0, 0.0, 0.5 )
end
end
end
end
function EMA:SettingsMailItemsRowClick( rowNumber, columnNumber )
if EMA.settingsControl.MailItemsOffset + rowNumber <= EMA:GetMailItemsMaxPosition() then
EMA.settingsControl.MailItemsHighlightRow = EMA.settingsControl.MailItemsOffset + rowNumber
EMA:SettingsScrollRefresh()
end
end
function EMA:SettingsMailItemsRemoveClick( event )
StaticPopup_Show( "EMAMail_CONFIRM_REMOVE_MAIL_ITEMS" )
end
function EMA:SettingsEditBoxChangedMailItem( event, text )
EMA.autoMailItemLink = text
EMA:SettingsRefresh()
end
function EMA:SettingsMailItemsAddClick( event )
if EMA.autoMailItemLink ~= nil and EMA.autoMailToonName ~= nil and EMA.db.MailTagName ~= nil then
EMA:AddItem( EMA.autoMailItemLink, EMA.autoMailToonName, EMA.db.MailTagName, EMA.db.blackListItem )
EMA.autoMailItemLink = nil
EMA.settingsControl.MailItemsEditBoxMailItem:SetText( "" )
EMA:SettingsRefresh()
end
end
function EMA:GroupListDropDownList (event, value )
-- if nil or the blank group then don't get Name.
if value == " " or value == nil then
return
end
for index, groupName in ipairs( EMAApi.GroupList() ) do
if index == value then
EMA.db.MailTagName = groupName
break
end
end
EMA:SettingsRefresh()
end
function EMA:SettingsToggleBlackListItem( event, checked )
EMA.db.blackListItem = checked
EMA:SettingsRefresh()
end
function EMA:EditMailToonName (event, value )
-- if nil or the blank group then don't get Name.
if value == " " or value == nil then
return
end
EMA.autoMailToonName = value
EMA:SettingsRefresh()
end
function EMA:SettingsToggleMailBoEItems(event, checked )
EMA.db.MailBoEItems = checked
EMA:SettingsRefresh()
end
function EMA:EditMailToonNameBoE (event, value )
-- if nil or the blank group then don't get Name.
if value == " " or value == nil then
return
end
EMA.db.autoMailToonNameBoE = value
EMA:SettingsRefresh()
end
function EMA:GroupListDropDownListBoE (event, value )
-- if nil or the blank group then don't get Name.
if value == " " or value == nil then
return
end
for index, groupName in ipairs( EMAApi.GroupList() ) do
if index == value then
EMA.db.autoBoEItemTag = groupName
break
end
end
EMA:SettingsRefresh()
end
function EMA:SettingsToggleMailCRItems(event, checked )
EMA.db.MailCRItems = checked
EMA:SettingsRefresh()
end
function EMA:EditMailToonNameCR (event, value )
-- if nil or the blank group then don't get Name.
if value == " " or value == nil then
return
end
EMA.db.autoMailToonNameCR = value
EMA:SettingsRefresh()
end
function EMA:GroupListDropDownListCR (event, value )
-- if nil or the blank group then don't get Name.
if value == " " or value == nil then
return
end
for index, groupName in ipairs( EMAApi.GroupList() ) do
if index == value then
EMA.db.autoCRItemTag = groupName
break
end
end
EMA:SettingsRefresh()
end
function EMA:SettingsToggleMailRecipeF(event, checked )
EMA.db.MailRecipeFItems = checked
EMA:SettingsRefresh()
end
function EMA:SettingsToggleMailRecipeFName (event, value )
-- if nil or the blank group then don't get Name.
if value == " " or value == nil then
return
end
EMA.db.autoMailToonNameRecipeF = value
EMA:SettingsRefresh()
end
function EMA:EditMailToonNameRecipeFGroup (event, value )
-- if nil or the blank group then don't get Name.
if value == " " or value == nil then
return
end
for index, groupName in ipairs( EMAApi.GroupList() ) do
if index == value then
EMA.db.autoRecipeFItemTag = groupName
break
end
end
EMA:SettingsRefresh()
end
function EMA:OnMessageAreasChanged( message )
EMA.settingsControl.dropdownMessageArea:SetList( EMAApi.MessageAreaList() )
end
function EMA:OnGroupAreasChanged( message )
EMA.settingsControl.MailItemsEditBoxMailTag:SetList( EMAApi.GroupList() )
EMA.settingsControl.MailTradeBoEItemsTagBoE:SetList( EMAApi.GroupList() )
EMA.settingsControl.MailTradeCRItemsTagCR:SetList( EMAApi.GroupList() )
EMA.settingsControl.MailTradeRecipeFItemsTagRecipeF:SetList( EMAApi.GroupList() )
end
function EMA:SettingsSetMessageArea( event, value )
EMA.db.messageArea = value
EMA:SettingsRefresh()
end
function EMA:SettingsToggleShowEMAMailWindow( event, checked )
EMA.db.showEMAMailWindow = checked
EMA:SettingsRefresh()
end
function EMA:SettingsToggleGlobalMailList( event, checked )
EMA.db.globalMailList = checked
EMA:SettingsRefresh()
end
-- Gold Stuff!
function EMA:SettingsToggleAdjustMoneyOnToonViaMail( event, checked )
EMA.db.adjustMoneyWithMail = checked
EMA:SettingsRefresh()
end
function EMA:EditBoxChangedGoldAmountToLeaveOnToon( event, text )
EMA.db.goldAmountToKeepOnToon = tonumber( text )
if EMA.db.goldAmountToKeepOnToon == nil then
EMA.db.goldAmountToKeepOnToon = 0
end
EMA:SettingsRefresh()
end
function EMA:GroupListDropDownListGold (event, value )
-- if nil or the blank group then don't get Name.
if value == " " or value == nil then
return
end
for index, groupName in ipairs( EMAApi.GroupList() ) do
if index == value then
EMA.db.autoMailMoneyTag = groupName
break
end
end
EMA:SettingsRefresh()
end
function EMA:EditMailToonNameGold (event, value )
-- if nil or the blank group then don't get Name.
if value == " " or value == nil then
return
end
EMA.db.autoMailToonNameGold = value
EMA:SettingsRefresh()
end
function EMA:CopyListCommmand()
EMA:Print("Copying Local List To Global List")
EMA.db.global.autoMailItemsListGlobal = EMAUtilities:CopyTable( EMA.db.autoMailItemsList )
EMA:SettingsRefresh()
end
-- Settings received.
function EMA:EMAOnSettingsReceived( characterName, settings )
if characterName ~= EMA.characterName then
-- Update the settings.
EMA.db.messageArea = settings.messageArea
EMA.db.showEMAMailWindow = settings.showEMAMailWindow
EMA.db.globalMailList = settings.globalMailList
EMA.db.MailTagName = settings.MailTagName
EMA.db.MailBoEItems = settings.MailBoEItems
EMA.db.autoMailToonNameBoE = settings.autoMailToonNameBoE
EMA.db.autoBoEItemTag = settings.autoBoEItemTag
EMA.db.MailCRItems = settings.MailCRItems
EMA.db.autoMailToonNameCR = settings.autoMailToonNameCR
EMA.db.autoCRItemTag = settings.autoCRItemTag
EMA.db.MailRecipeFItems = settings.MailRecipeFItems
EMA.db.autoMailToonNameRecipeF = settings.autoMailToonNameRecipeF
EMA.db.autoRecipeFItemTag = settings.autoRecipeFItemTag
EMA.db.autoMailItemsList = EMAUtilities:CopyTable( settings.autoMailItemsList )
EMA.db.global.autoMailItemsListGlobal = EMAUtilities:CopyTable( settings.global.autoMailItemsListGlobal )
EMA.db.adjustMoneyWithMail = settings.adjustMoneyWithMail
EMA.db.goldAmountToKeepOnToon = settings.goldAmountToKeepOnToon
EMA.db.autoMailToonNameGold = settings.autoMailToonNameGold
EMA.db.autoMailMoneyTag = settings.autoMailMoneyTag
-- Refresh the settings.
EMA:SettingsRefresh()
-- Tell the player.
EMA:Print( L["SETTINGS_RECEIVED_FROM_A"]( characterName ) )
end
end
function EMA:BeforeEMAProfileChanged()
end
function EMA:OnEMAProfileChanged()
EMA:SettingsRefresh()
end
function EMA:SettingsRefresh()
EMA.settingsControl.checkBoxShowEMAMailWindow:SetValue( EMA.db.showEMAMailWindow )
-- global CheckBox
EMA.settingsControl.checkBoxGlobalMailList:SetValue( EMA.db.globalMailList )
EMA.settingsControl.checkBoxGlobalMailList:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.MailItemsEditBoxMailTag:SetText( EMA.db.MailTagName )
EMA.settingsControl.listCheckBoxBoxOtherBlackListItem:SetValue( EMA.db.blackListItem )
EMA.settingsControl.checkBoxMailBoEItems:SetValue( EMA.db.MailBoEItems )
EMA.settingsControl.tabNumListDropDownListBoE:SetText( EMA.db.autoMailToonNameBoE )
EMA.settingsControl.MailTradeBoEItemsTagBoE:SetText( EMA.db.autoBoEItemTag )
EMA.settingsControl.checkBoxMailCRItems:SetValue( EMA.db.MailCRItems )
EMA.settingsControl.tabNumListDropDownListCR:SetText( EMA.db.autoMailToonNameCR )
EMA.settingsControl.MailTradeCRItemsTagCR:SetText( EMA.db.autoCRItemTag )
EMA.settingsControl.checkBoxMailRecipeFItems:SetValue( EMA.db.MailRecipeFItems )
EMA.settingsControl.tabNumListDropDownListRecipeF:SetText( EMA.db.autoMailToonNameRecipeF )
EMA.settingsControl.MailTradeRecipeFItemsTagRecipeF:SetText( EMA.db.autoRecipeFItemTag )
EMA.settingsControl.dropdownMessageArea:SetValue( EMA.db.messageArea )
EMA.settingsControl.checkBoxAdjustMoneyOnToonViaMail:SetValue( EMA.db.adjustMoneyWithMail )
EMA.settingsControl.editBoxGoldAmountToLeaveOnToon:SetText( tostring( EMA.db.goldAmountToKeepOnToon ) )
EMA.settingsControl.editBoxGoldAmountToLeaveOnToon:SetDisabled( not EMA.db.adjustMoneyWithMail )
EMA.settingsControl.SettingsToggleAdjustMoneyOnToonName:SetText( EMA.db.autoMailToonNameGold )
EMA.settingsControl.SettingsToggleAdjustMoneyOnToonName:SetDisabled( not EMA.db.adjustMoneyWithMail )
EMA.settingsControl.SettingsToggleAdjustMoneyOnToonTag:SetText( EMA.db.autoMailMoneyTag )
EMA.settingsControl.SettingsToggleAdjustMoneyOnToonTag:SetDisabled( not EMA.db.adjustMoneyWithMail )
EMA.settingsControl.MailItemsEditBoxMailItem:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.listCheckBoxBoxOtherBlackListItem:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.MailItemsEditBoxMailTag:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.tabNumListDropDownList:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.MailItemsButtonRemove:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.MailItemsButtonAdd:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.checkBoxMailBoEItems:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.tabNumListDropDownListBoE:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.MailTradeBoEItemsTagBoE:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.checkBoxMailCRItems:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.tabNumListDropDownListCR:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.MailTradeCRItemsTagCR:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.checkBoxMailRecipeFItems:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.tabNumListDropDownListRecipeF:SetDisabled( not EMA.db.showEMAMailWindow )
EMA.settingsControl.MailTradeRecipeFItemsTagRecipeF:SetDisabled( not EMA.db.showEMAMailWindow )
EMA:SettingsScrollRefresh()
end
--Comms not sure if we going to use comms here.
-- A EMA command has been received.
function EMA:EMAOnCommandReceived( characterName, commandName, ... )
if characterName == self.characterName then
return
end
end
-------------------------------------------------------------------------------------------------------------
-- Mail functionality.
-------------------------------------------------------------------------------------------------------------
function EMA:ContainerFrameItemButton_OnModifiedClick( self, event, ... )
local isConfigOpen = EMAPrivate.SettingsFrame.Widget:IsVisible()
if isConfigOpen == true and IsShiftKeyDown() == true then
local GUIPanel = EMAPrivate.SettingsFrame.TreeGroupStatus.selected
local currentModule = string.find(GUIPanel, EMA.moduleDisplayName)
--EMA:Print("test2", GUIPanel, "vs", currentModule )
if currentModule ~= nil then
local itemID, itemLink = GameTooltip:GetItem()
--EMA:Print("test1", itemID, itemLink )
if itemLink ~= nil then
EMA.settingsControl.MailItemsEditBoxMailItem:SetText( "" )
EMA.settingsControl.MailItemsEditBoxMailItem:SetText( itemLink )
EMA.autoMailItemLink = itemLink
return
end
end
end
return EMA.hooks["ContainerFrameItemButton_OnModifiedClick"]( self, event, ... )
end
function EMA:GetMailItemsMaxPosition()
if EMA.db.globalMailList == true then
return #EMA.db.global.autoMailItemsListGlobal
else
return #EMA.db.autoMailItemsList
end
end
function EMA:GetMailItemsAtPosition( position )
if EMA.db.globalMailList == true then
return EMA.db.global.autoMailItemsListGlobal[position]
else
return EMA.db.autoMailItemsList[position]
end
end
function EMA:AddItem( itemLink, GBTab, itemTag, blackList )
--EMA:Print("testDBAdd", itemLink, GBTab, itemTag )
-- Get some more information about the item.
local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo( itemLink )
-- If the item could be found.
if name ~= nil then
local itemInformation = {}
itemInformation.link = link
itemInformation.name = name
itemInformation.GBTab = GBTab
itemInformation.tag = itemTag
itemInformation.blackList = blackList
if EMA.db.globalMailList == true then
table.insert( EMA.db.global.autoMailItemsListGlobal, itemInformation )
else
table.insert( EMA.db.autoMailItemsList, itemInformation )
end
EMA:SettingsRefresh()
EMA:SettingsMailItemsRowClick( 1, 1 )
end
end
function EMA:RemoveItem()
if EMA.db.globalMailList == true then
table.remove( EMA.db.global.autoMailItemsListGlobal, EMA.settingsControl.MailItemsHighlightRow )
else
table.remove( EMA.db.autoMailItemsList, EMA.settingsControl.MailItemsHighlightRow )
end
EMA:SettingsRefresh()
EMA:SettingsMailItemsRowClick( EMA.settingsControl.MailItemsHighlightRow - 1, 1 )
end
function EMA:MAIL_SHOW(event, ...)
--EMA:Print("test")
if EMA.db.showEMAMailWindow == true then
if not IsShiftKeyDown() then
EMA:AddAllToMailBox()
else
EMA.ShiftkeyDown = true
end
end
if EMA.db.adjustMoneyWithMail == true and EMA.db.showEMAMailWindow == true then
EMA:ScheduleTimer( "AddGoldToMailBox", 0.3 )
end
end
function EMA:MAIL_CLOSED(event, ...)
EMA.ShiftkeyDown = false
end
function EMA:AddAllToMailBox()
--EMA:Print("run")
MailFrameTab_OnClick(nil, "2")
--EMA.OldMailName = SendMailNameEditBox:GetText()
SendMailNameEditBox:SetText( "" )
SendMailMoneyGold:SetText( "" )
SendMailMoneySilver:SetText( "" )
SendMailMoneyCopper:SetText( "" )
SendMailNameEditBox:ClearFocus()
EMA.Count = 1
for bagID = 0, NUM_BAG_SLOTS do
for slotID = 1,GetContainerNumSlots( bagID ),1 do
local item = Item:CreateFromBagAndSlot(bagID, slotID)
if ( item ) then
local bagItemLink = item:GetItemLink()
if ( bagItemLink ) then
--EMA:Print( "Bags OK. checking", itemLink )
local itemLink = item:GetItemLink()
local location = item:GetItemLocation()
local itemTypeNew = C_Item.GetItemInventoryType( location )
local isBop = C_Item.IsBound( location )
local itemRarity = C_Item.GetItemQuality( location )
local itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, itemIcon, itemSellPrice, itemClassID, itemSubClassID, bindType, expacID, itemSetID, isCraftingReagent = GetItemInfo( bagItemLink )
local canSend = false
local toonName = nil
if EMA.db.MailBoEItems == true then
if itemTypeNew ~= 0 then
if EMAApi.IsCharacterInGroup( EMA.characterName, EMA.db.autoBoEItemTag ) == true then
if isBop == false then
if itemRarity == 2 or itemRarity == 3 or itemRarity == 4 then
canSend = true
toonName = EMA.db.autoMailToonNameBoE
end
end
end
end
end
if EMA.db.MailCRItems == true then
if isCraftingReagent == true then
if EMAApi.IsCharacterInGroup( EMA.characterName, EMA.db.autoCRItemTag ) == true then
--EMA:Print("testCR", classID, bagItemLink)
if isBop == false then
canSend = true
toonName = EMA.db.autoMailToonNameCR
end
end
end
end
if EMA.db.MailRecipeFItems == true then
if itemClassID == 9 then
--EMA:Print("testRF", itemClassID, bagItemLink)
if EMAApi.IsCharacterInGroup( EMA.characterName, EMA.db.autoRecipeFItemTag ) == true then
if isBop == false then
canSend = true
toonName = EMA.db.autoMailToonNameRecipeF
end
end
end
end
if EMA.db.globalMailList == true then
itemTable = EMA.db.global.autoMailItemsListGlobal
else
itemTable = EMA.db.autoMailItemsList
end
for position, itemInformation in pairs( itemTable ) do
if EMAUtilities:DoItemLinksContainTheSameItem( itemLink, itemInformation.link ) then
if EMAApi.IsCharacterInGroup( EMA.characterName, itemInformation.tag ) == true then
--EMA:Print("DataTest", itemInformation.link, itemInformation.blackList )
--EMA:Print("test", itemLink)
canSend = true
toonName = itemInformation.GBTab
end
if itemInformation.blackList == true then
canSend = false
end
end
end
if canSend == true and toonName ~= "" and toonName ~= nil then
local currentMailToon = SendMailNameEditBox:GetText()
local characterName = EMAUtilities:AddRealmToNameIfMissing( toonName )
if toonName == currentMailToon or currentMailToon == "" and characterName ~= EMA.characterName then
if EMA.Count <= ATTACHMENTS_MAX_SEND then
--EMA:Print("sending Mail:", count)
EMA.Count = EMA.Count + 1
SendMailNameEditBox:SetText( toonName )
SendMailSubjectEditBox:SetText( L["SENT_AUTO_MAILER"] )
PickupContainerItem( bagID, slotID )
UseContainerItem( bagID , slotID )
end
end
end
end
end
end
end
EMA:ScheduleTimer( "DoSendMail", 2, nil )
end
function EMA:MAIL_SEND_SUCCESS( event, ... )
--EMA:Print("try sendMail Again")
if EMA.db.showEMAMailWindow == true then
if EMA.ShiftkeyDown == false and EMA.Count < 1 then
EMA:ScheduleTimer( "AddAllToMailBox", 1.55, nil )
end
end
if EMA.db.adjustMoneyWithMail == true and EMA.db.showEMAMailWindow == true then
EMA:ScheduleTimer( "AddGoldToMailBox", 2 )
end
end
function EMA:DoSendMail( gold )
--EMA:Print("newSendRun")
for iterateMailSlots = 1, ATTACHMENTS_MAX_SEND do
if HasSendMailItem( iterateMailSlots ) == true or gold == true then
--EMA:Print("canSend")
SendMailMailButton:Click()
EMA.Count = 0
break
end
end
local gold = SendMailMoneyCopper:GetText()
--EMA:Print("test", gold)
if HasSendMailItem( "1" ) == false and gold == "" then
MailFrameTab_OnClick(nil, 1)
end
end
-- gold
function EMA:AddGoldToMailBox()
if EMA.ShiftkeyDown == true then
return
end
local moneyToKeepOnToon = tonumber( EMA.db.goldAmountToKeepOnToon ) * 10000
local moneyOnToon = GetMoney() - 30
local moneyToDepositOrWithdraw = moneyOnToon - moneyToKeepOnToon
local toonName = EMA.db.autoMailToonNameGold
--EMA:Print("i have", moneyOnToon, "keep", moneyToKeepOnToon, "send", moneyToDepositOrWithdraw )
if moneyToDepositOrWithdraw == 0 then
return
end
if moneyToDepositOrWithdraw > 0 and HasSendMailItem("1") == false then
local currentMailToon = SendMailNameEditBox:GetText()
local characterName = EMAUtilities:AddRealmToNameIfMissing( toonName )
if MailFrame:IsVisible() == true then
--EMA:Print("blizzardFarme")
if toonName == currentMailToon or currentMailToon == "" and characterName ~= EMA.characterName then
if EMAApi.IsCharacterInGroup( EMA.characterName, EMA.db.autoMailMoneyTag ) == true then
local gold, silver, copper = EMAUtilities:MoneyString( moneyToDepositOrWithdraw )
local coinText = GetCoinText( moneyToDepositOrWithdraw )
--EMA:Print("Send", "gold", gold, "silver", silver, "copper", copper )
MailFrameTab_OnClick(nil, "2")
SendMailSubjectEditBox:SetText( (L["SENT_AUTO_MAILER_GOLD"](coinText) ) )
SendMailNameEditBox:SetText( toonName )
SendMailMoneyGold:SetText(gold)
SendMailMoneySilver:SetText(silver)
SendMailMoneyCopper:SetText(copper)
EMA:ScheduleTimer( "DoSendMail", 2, true )
end
end
else
EMA:Print("[PH] Can Only Send Mail From BlizzardUI Mail Frame!")
end
end
end