-- ================================================================================ -- -- 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( "Sell", "Module-1.0", "AceConsole-3.0", "AceEvent-3.0", "AceHook-3.0", "AceTimer-3.0" ) -- Load libraries. local EMAUtilities = LibStub:GetLibrary( "EbonyUtilities-1.0" ) local EMAHelperSettings = LibStub:GetLibrary( "EMAHelperSettings-1.0" ) local AceGUI = LibStub:GetLibrary( "AceGUI-3.0" ) local ItemUpgradeInfo = LibStub:GetLibrary( "LibItemUpgradeInfo-1.0" ) -- Constants and Locale for this module. EMA.moduleName = "Sell" EMA.settingsDatabaseName = "SellProfileDB" EMA.chatCommand = "ema-sell" local L = LibStub( "AceLocale-3.0" ):GetLocale( "Core" ) EMA.parentDisplayName = L["VENDOR"] EMA.moduleDisplayName = L["VENDOR"] -- Icon EMA.moduleIcon = "Interface\\Addons\\EMA\\Media\\SellIcon.tga" -- order EMA.moduleOrder = 80 EMA.moduleListOrder = 1 -- Settings - the values to store and their defaults for the settings database. EMA.settings = { global = { ['**'] = { autoSellOtherItemsListGlobal = {}, }, }, profile = { sellItemOnAllWithAltKey = false, -- Other Items autoSellOtherItemsList = {}, messageArea = EMAApi.DefaultMessageArea(), globalSellList = false, autoSellItem = false, blackListItem = false, --destroyItem = false, -- Gray autoSellPoor = false, autoSellBoEPoor = false, -- Green autoSellUncommon = false, autoSellIlvlUncommon = 0, autoSellBoEUncommon = false, -- Rare autoSellRare = false, autoSellIlvlRare = 0, autoSellBoERare = false, -- Epic autoSellEpic = false, autoSellIlvlEpic = 0, autoSellBoEEpic = false, -- Toys autoSellToys = false, autoSellMounts = false, -- 9.0.3 alreadyWipedLists = false }, } -- 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-team config", get = false, set = "", }, push = { type = "input", name = L["PUSH_SETTINGS"], desc = L["PUSH_SETTINGS_INFO"], usage = "/ema-sell push", get = false, set = "EMASendSettings", }, copy = { type = "input", name = L["COPY"], desc = L["COPY_HELP"], usage = "/ema-sell copy", get = false, set = "CopyListCommmand", }, }, } return configuration end ------------------------------------------------------------------------------------------------------------- -- Command this module sends. ------------------------------------------------------------------------------------------------------------- EMA.COMMAND_SELL_ITEM = "SellItem" ------------------------------------------------------------------------------------------------------------- -- Messages module sends. ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- -- Sell Management. ------------------------------------------------------------------------------------------------------------- EMA.BAG_PLAYER_BACKPACK = 0 -- NUM_BAG_SLOTS is defined as 4 in Blizzard's FrameXML\BankFrame.lua. EMA.BAG_PLAYER_MAXIMUM = NUM_BAG_SLOTS -- Store ItemQuality https://wow.gamepedia.com/API_TYPE_Quality EMA.ITEM_QUALITY_POOR = 0 EMA.ITEM_QUALITY_COMMON = 1 EMA.ITEM_QUALITY_UNCOMMON = 2 EMA.ITEM_QUALITY_RARE = 3 EMA.ITEM_QUALITY_EPIC = 4 EMA.ITEM_QUALITY_LEGENDARY = 5 EMA.ITEM_QUALITY_ARTIFACT = 6 EMA.ITEM_QUALITY_HEIRLOOM = 7 EMA.MIN_ITEM_LEVEL = 5 function EMA:BeforeEMAProfileChanged() end function EMA:OnEMAProfileChanged() EMA:SettingsRefresh() end function EMA:SettingsRefresh() -- Sell on all with alt key. EMA.settingsControl.checkBoxSellItemOnAllWithAltKey:SetValue( EMA.db.sellItemOnAllWithAltKey ) -- global Sell CheckBox EMA.settingsControl.checkBoxGlobalSellList:SetValue( EMA.db.globalSellList ) EMA.settingsControl.checkBoxGlobalSellList:SetDisabled( not EMA.db.autoSellItem ) -- Auto sell Quality and Ilvl items. EMA.settingsControl.checkBoxAutoSellItems:SetValue( EMA.db.autoSellItem ) -- Poor EMA.settingsControl.checkBoxAutoSellPoor:SetValue ( EMA.db.autoSellPoor ) EMA.settingsControl.checkBoxAutoSellBoEPoor:SetValue ( EMA.db.autoSellBoEPoor ) EMA.settingsControl.checkBoxAutoSellPoor:SetDisabled ( not EMA.db.autoSellItem or not EMA.db.autoSellItem ) EMA.settingsControl.checkBoxAutoSellBoEPoor:SetDisabled ( not EMA.db.autoSellPoor or not EMA.db.autoSellItem ) -- Uncommon EMA.settingsControl.checkBoxAutoSellUncommon:SetValue (EMA.db.autoSellUncommon ) EMA.settingsControl.editBoxAutoSellIlvlUncommon:SetText (EMA.db.autoSellIlvlUncommon ) EMA.settingsControl.checkBoxAutoSellBoEUncommon:SetValue (EMA.db.autoSellBoEUncommon ) EMA.settingsControl.checkBoxAutoSellUncommon:SetDisabled ( not EMA.db.autoSellItem ) EMA.settingsControl.editBoxAutoSellIlvlUncommon:SetDisabled ( not EMA.db.autoSellUncommon or not EMA.db.autoSellItem ) EMA.settingsControl.checkBoxAutoSellBoEUncommon:SetDisabled ( not EMA.db.autoSellUncommon or not EMA.db.autoSellItem ) -- Rare EMA.settingsControl.checkBoxAutoSellRare:SetValue (EMA.db.autoSellRare ) EMA.settingsControl.editBoxAutoSellIlvlRare:SetText (EMA.db.autoSellIlvlRare ) EMA.settingsControl.checkBoxAutoSellBoERare:SetValue (EMA.db.autoSellBoERare ) EMA.settingsControl.checkBoxAutoSellRare:SetDisabled ( not EMA.db.autoSellItem ) EMA.settingsControl.editBoxAutoSellIlvlRare:SetDisabled ( not EMA.db.autoSellRare or not EMA.db.autoSellItem ) EMA.settingsControl.checkBoxAutoSellBoERare:SetDisabled ( not EMA.db.autoSellRare or not EMA.db.autoSellItem ) -- Epic EMA.settingsControl.checkBoxAutoSellEpic:SetValue ( EMA.db.autoSellEpic ) EMA.settingsControl.editBoxAutoSellIlvlEpic:SetText ( EMA.db.autoSellIlvlEpic) EMA.settingsControl.checkBoxAutoSellBoEEpic:SetValue ( EMA.db.autoSellBoEEpic ) EMA.settingsControl.checkBoxAutoSellEpic:SetDisabled ( not EMA.db.autoSellItem ) EMA.settingsControl.editBoxAutoSellIlvlEpic:SetDisabled ( not EMA.db.autoSellEpic or not EMA.db.autoSellItem ) EMA.settingsControl.checkBoxAutoSellBoEEpic:SetDisabled ( not EMA.db.autoSellEpic or not EMA.db.autoSellItem ) -- Toys if EMAPrivate.Core.isEmaClassicBccBuild() == false then EMA.settingsControl.checkBoxAutoSellToys:SetValue( EMA.db.autoSellToys ) EMA.settingsControl.checkBoxAutoSellToys:SetDisabled ( not EMA.db.autoSellItem ) EMA.settingsControl.checkBoxAutoSellMounts:SetValue( EMA.db.autoSellMounts ) EMA.settingsControl.checkBoxAutoSellMounts:SetDisabled ( not EMA.db.autoSellItem ) end -- Messages. EMA.settingsControl.dropdownMessageArea:SetValue( EMA.db.messageArea ) -- list. EMA.settingsControl.listCheckBoxBoxOtherBlackListItem:SetValue( EMA.db.blackListItem ) --EMA.settingsControl.listCheckBoxBoxOtherDestroy:SetValue( EMA.db.destroyItem ) EMA.settingsControl.listEditBoxOtherTag:SetText( EMA.autoSellOtherItemTag ) EMA.settingsControl.listEditBoxOtherItem:SetDisabled( not EMA.db.autoSellItem ) EMA.settingsControl.listEditBoxOtherTag:SetDisabled( not EMA.db.autoSellItem ) EMA.settingsControl.listButtonRemove:SetDisabled( not EMA.db.autoSellItem ) EMA.settingsControl.listButtonAdd:SetDisabled( not EMA.db.autoSellItem ) EMA.settingsControl.listCheckBoxBoxOtherBlackListItem:SetDisabled( not EMA.db.autoSellItem or not EMA.db.autoSellItem ) --EMA.settingsControl.listCheckBoxBoxOtherDestroy:SetDisabled( not EMA.db.autoSellItem or not EMA.db.autoSellItem ) --EMA.settingsControl.listEditBoxOtherItem:RegisterForClicks( "RightButtonDown" ) EMA:SettingslistScrollRefresh() end -- Settings received. function EMA:EMAOnSettingsReceived( characterName, settings ) if characterName ~= EMA.characterName then -- Update the settings. EMA.db.sellItemOnAllWithAltKey = settings.sellItemOnAllWithAltKey EMA.db.globalSellList = settings.globalSellList EMA.db.autoSellItem = settings.autoSellItem EMA.db.autoSellPoor = settings.autoSellPoor EMA.db.autoSellBoEPoor = settings.autoSellBoEPoor EMA.db.autoSellUncommon = settings.autoSellUncommon EMA.db.autoSellIlvlUncommon = settings.autoSellIlvlUncommon EMA.db.autoSellBoEUncommon = settings.autoSellBoEUncommon EMA.db.autoSellRare = settings.autoSellRare EMA.db.autoSellIlvlRare = settings.autoSellIlvlRare EMA.db.autoSellBoERare = settings.autoSellBoERare EMA.db.autoSellEpic = settings.autoSellEpic EMA.db.autoSellIlvlEpic = settings.autoSellIlvlEpic EMA.db.autoSellBoEEpic = settings.autoSellBoEEpic EMA.db.autoSellToys = settings.autoSellToys EMA.db.autoSellMounts = settings.autoSellMounts EMA.db.blackListItem = settings.blackListItem EMA.db.destroyItem = settings.destroyItem EMA.db.messageArea = settings.messageArea EMA.db.autoSellOtherItemsList = EMAUtilities:CopyTable( settings.autoSellOtherItemsList ) EMA.db.global.autoSellOtherItemsListGlobal = EMAUtilities:CopyTable( settings.global.autoSellOtherItemsListGlobal ) -- Refresh the settings. EMA:SettingsRefresh() -- Tell the player. EMA:Print( L["SETTINGS_RECEIVED_FROM_A"]( characterName ) ) end end ------------------------------------------------------------------------------------------------------------- -- Settings Dialogs. ------------------------------------------------------------------------------------------------------------- local function SettingsCreateMain( top ) -- Position and size constants. local buttonControlWidth = 105 local checkBoxHeight = EMAHelperSettings:GetCheckBoxHeight() local buttonHeight = EMAHelperSettings:GetButtonHeight() local editBoxHeight = EMAHelperSettings:GetEditBoxHeight() local dropdownHeight = EMAHelperSettings:GetDropdownHeight() local left = EMAHelperSettings:LeftOfSettings() local headingHeight = EMAHelperSettings:HeadingHeight() local headingWidth = EMAHelperSettings:HeadingWidth( false ) local horizontalSpacing = EMAHelperSettings:GetHorizontalSpacing() local indent = horizontalSpacing * 12 local indentContinueLabel = horizontalSpacing * 18 local verticalSpacing = EMAHelperSettings:GetVerticalSpacing() local dropBoxWidth = (headingWidth - horizontalSpacing) / 4 local listWidth = headingWidth 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["SELL_ALL"], movingTop, false ) movingTop = movingTop - headingHeight EMA.settingsControl.checkBoxSellItemOnAllWithAltKey = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, headingWidth, left, movingTop, L["ALT_SELL_ALL"], EMA.SettingsToggleSellItemOnAllWithAltKey, L["ALT_SELL_ALL_HELP"] ) movingTop = movingTop - checkBoxHeight EMAHelperSettings:CreateHeading( EMA.settingsControl, L["SELL_LIST"], movingTop, false ) movingTop = movingTop - headingHeight EMA.settingsControl.checkBoxAutoSellItems = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, halfWidth, left, movingTop, L["AUTO_SELL_ITEMS"], EMA.SettingsToggleAutoSellItems, L["AUTO_SELL_ITEMS_HELP"] ) EMA.settingsControl.checkBoxGlobalSellList = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, halfWidth, left3, movingTop, L["GLOBAL_LIST"], EMA.SettingsToggleGlobalSellList, L["GLOBAL_SETTINGS_LIST_HELP"] ) movingTop = movingTop - checkBoxHeight EMA.settingsControl.listHighlightRow = 1 EMA.settingsControl.listOffset = 1 local list = {} list.listFrameName = "EMASellSettingslistFrame" list.parentFrame = EMA.settingsControl.widgetSettings.content list.listTop = movingTop list.listLeft = left list.listWidth = listWidth list.rowHeight = 15 list.rowsToDisplay = 8 list.columnsToDisplay = 3 list.columnInformation = {} list.columnInformation[1] = {} list.columnInformation[1].width = 60 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.SettingslistScrollRefresh list.rowClickCallback = EMA.SettingslistRowClick EMA.settingsControl.list = list EMAHelperSettings:CreateScrollList( EMA.settingsControl.list ) movingTop = movingTop - list.listHeight - verticalSpacing EMA.settingsControl.listButtonRemove = EMAHelperSettings:CreateButton( EMA.settingsControl, buttonControlWidth, left2 + 50, movingTop, L["REMOVE"], EMA.SettingslistRemoveClick ) movingTop = movingTop - buttonHeight - verticalSpacing EMAHelperSettings:CreateHeading( EMA.settingsControl, L["ADD_TO_LIST"], movingTop, false ) movingTop = movingTop - headingHeight EMA.settingsControl.listEditBoxOtherItem = EMAHelperSettings:CreateEditBox( EMA.settingsControl, thirdWidth, left2, movingTop, L["ITEM_DROP"] ) EMA.settingsControl.listEditBoxOtherItem:SetCallback( "OnEnterPressed", EMA.SettingsEditBoxChangedOtherItem ) 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.listCheckBoxBoxOtherDestroy = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, thirdWidth, left2, movingTop + movingTopEdit, L["DESTROY_ITEM"], EMA.SettingsToggleDestroyItem, L["DESTROY_ITEM_HELP"] ) ]] EMA.settingsControl.listEditBoxOtherTag = EMAHelperSettings:CreateDropdown( EMA.settingsControl, dropBoxWidth, left3, movingTop, L["GROUP_LIST"] ) EMA.settingsControl.listEditBoxOtherTag:SetList( EMAApi.GroupList() ) EMA.settingsControl.listEditBoxOtherTag:SetCallback( "OnValueChanged", EMA.SellOtherGroupDropDownList ) movingTop = movingTop - editBoxHeight EMA.settingsControl.listButtonAdd = EMAHelperSettings:CreateButton( EMA.settingsControl, buttonControlWidth, left2 + 50, movingTop, L["ADD"], EMA.SettingslistAddClick ) movingTop = movingTop - buttonHeight EMAHelperSettings:CreateHeading( EMA.settingsControl, L["SELL_ITEMS"], movingTop, false ) --movingTop = movingTop - headingHeight -- Gray movingTop = movingTop - checkBoxHeight - 3 EMA.settingsControl.checkBoxAutoSellPoor = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, thirdWidth, left, movingTop, L["SELL_GRAY"], EMA.SettingsToggleAutoSellPoor, L["SELL_GRAY_HELP"] ) EMA.settingsControl.checkBoxAutoSellBoEPoor = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, thirdWidth, left2, movingTop, L["ONLY_SB"], EMA.SettingsToggleAutoSellBoEPoor, L["ONLY_SB_HELP"] ) -- Green movingTop = movingTop - checkBoxHeight - 3 EMA.settingsControl.checkBoxAutoSellUncommon = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, thirdWidth, left, movingTop + movingTopEdit, L["SELL_GREEN"], EMA.SettingsToggleAutoSellUncommon, L["SELL_GREEN_HELP"] ) EMA.settingsControl.checkBoxAutoSellBoEUncommon = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, thirdWidth, left2, movingTop + movingTopEdit, L["ONLY_SB"], EMA.SettingsToggleAutoSellBoEUncommon, L["ONLY_SB_HELP"] ) EMA.settingsControl.editBoxAutoSellIlvlUncommon = EMAHelperSettings:CreateEditBox( EMA.settingsControl, thirdWidth, left3, movingTop, L["iLVL"], L["iLVL_HELP"] ) EMA.settingsControl.editBoxAutoSellIlvlUncommon:SetCallback( "OnEnterPressed", EMA.SettingsEditBoxChangedIlvlUncommon ) -- Rare movingTop = movingTop - editBoxHeight - 3 EMA.settingsControl.checkBoxAutoSellRare = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, thirdWidth, left, movingTop + movingTopEdit, L["SELL_RARE"], EMA.SettingsToggleAutoSellRare, L["SELL_RARE_HELP"] ) EMA.settingsControl.checkBoxAutoSellBoERare = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, thirdWidth, left2, movingTop + movingTopEdit, L["ONLY_SB"], EMA.SettingsToggleAutoSellBoERare, L["ONLY_SB_HELP"] ) EMA.settingsControl.editBoxAutoSellIlvlRare = EMAHelperSettings:CreateEditBox( EMA.settingsControl, thirdWidth, left3, movingTop, L["iLVL"], L["iLVL_HELP"] ) EMA.settingsControl.editBoxAutoSellIlvlRare:SetCallback( "OnEnterPressed", EMA.SettingsEditBoxChangedIlvlRare ) -- Epic movingTop = movingTop - editBoxHeight - 3 EMA.settingsControl.checkBoxAutoSellEpic = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, thirdWidth, left, movingTop + movingTopEdit, L["SELL_EPIC"], EMA.SettingsToggleAutoSellEpic, L["SELL_EPIC_HELP"] ) EMA.settingsControl.checkBoxAutoSellBoEEpic = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, thirdWidth, left2, movingTop + movingTopEdit, L["ONLY_SB"], EMA.SettingsToggleAutoSellBoEEpic, L["ONLY_SB_HELP"] ) EMA.settingsControl.editBoxAutoSellIlvlEpic = EMAHelperSettings:CreateEditBox( EMA.settingsControl, thirdWidth, left3, movingTop, L["iLVL"], L["iLVL_HELP"] ) EMA.settingsControl.editBoxAutoSellIlvlEpic:SetCallback( "OnEnterPressed", EMA.SettingsEditBoxChangedIlvlEpic ) -- Toy if EMAPrivate.Core.isEmaClassicBccBuild() == false then movingTop = movingTop - editBoxHeight - 3 EMA.settingsControl.checkBoxAutoSellToys = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, thirdWidth, left, movingTop + movingTopEdit, L["AUTO_SELL_TOYS"], EMA.SettingsToggleAutoSellToys, L["AUTO_SELL_TOYS_HELP"] ) EMA.settingsControl.checkBoxAutoSellMounts = EMAHelperSettings:CreateCheckBox( EMA.settingsControl, thirdWidth, left2, movingTop + movingTopEdit, L["AUTO_SELL_MOUNTS"], EMA.SettingsToggleAutoSellMounts, L["AUTO_SELL_MOUNTS_HELP"] ) end movingTop = movingTop - editBoxHeight - 3 EMAHelperSettings:CreateHeading( EMA.settingsControl, L["SELL"]..L[" "]..L["MESSAGES_HEADER"], movingTop, false ) movingTop = movingTop - headingHeight EMA.settingsControl.dropdownMessageArea = EMAHelperSettings:CreateDropdown( EMA.settingsControl, thirdWidth, 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 function EMA:OnMessageAreasChanged( message ) EMA.settingsControl.dropdownMessageArea:SetList( EMAApi.MessageAreaList() ) end local function SettingsCreate() EMA.settingsControl = {} EMAHelperSettings:CreateSettings( EMA.settingsControl, EMA.moduleDisplayName, EMA.parentDisplayName, EMA.SettingsPushSettingsClick, EMA.moduleIcon, EMA.moduleOrder ) local bottomOfSell = SettingsCreateMain( EMAHelperSettings:TopOfSettings() ) EMA.settingsControl.widgetSettings.content:SetHeight( -bottomOfSell ) local helpTable = {} EMAHelperSettings:CreateHelp( EMA.settingsControl, helpTable, EMA:GetConfiguration() ) end ------------------------------------------------------------------------------------------------------------- -- Settings Callbacks. ------------------------------------------------------------------------------------------------------------- function EMA:SettingslistScrollRefresh() FauxScrollFrame_Update( EMA.settingsControl.list.listScrollFrame, EMA:GetlistMaxPosition(), EMA.settingsControl.list.rowsToDisplay, EMA.settingsControl.list.rowHeight ) EMA.settingsControl.listOffset = FauxScrollFrame_GetOffset( EMA.settingsControl.list.listScrollFrame ) for iterateDisplayRows = 1, EMA.settingsControl.list.rowsToDisplay do -- Reset. EMA.settingsControl.list.rows[iterateDisplayRows].columns[1].textString:SetText( "" ) EMA.settingsControl.list.rows[iterateDisplayRows].columns[1].textString:SetTextColor( 1.0, 1.0, 1.0, 1.0 ) EMA.settingsControl.list.rows[iterateDisplayRows].columns[2].textString:SetText( "" ) EMA.settingsControl.list.rows[iterateDisplayRows].columns[2].textString:SetTextColor( 1.0, 1.0, 1.0, 1.0 ) EMA.settingsControl.list.rows[iterateDisplayRows].columns[3].textString:SetText( "" ) EMA.settingsControl.list.rows[iterateDisplayRows].columns[3].textString:SetTextColor( 1.0, 0, 0, 1.0 ) --EMA.settingsControl.list.rows[iterateDisplayRows].columns[4].textString:SetText( "" ) --EMA.settingsControl.list.rows[iterateDisplayRows].columns[4].textString:SetTextColor( 1.0, 0, 0, 1.0 ) EMA.settingsControl.list.rows[iterateDisplayRows].highlight:SetColorTexture( 0.0, 0.0, 0.0, 0.0 ) -- Get data. local dataRowNumber = iterateDisplayRows + EMA.settingsControl.listOffset if dataRowNumber <= EMA:GetlistMaxPosition() then -- Put data information into columns local listInformation = EMA:GetOtherAtPosition( dataRowNumber ) local blackListText = "" local destroyText = "" if listInformation.blackList == true then blackListText = L["ITEM_ON_BLACKLIST"] end if listInformation.destroyItem == true then destroyText = L["DESTROY_ITEM"] end EMA.settingsControl.list.rows[iterateDisplayRows].columns[1].textString:SetText( listInformation.name ) EMA.settingsControl.list.rows[iterateDisplayRows].columns[2].textString:SetText( listInformation.tag ) EMA.settingsControl.list.rows[iterateDisplayRows].columns[3].textString:SetText( blackListText ) --EMA.settingsControl.list.rows[iterateDisplayRows].columns[4].textString:SetText( destroyText ) -- Highlight the selected row. if dataRowNumber == EMA.settingsControl.listHighlightRow then EMA.settingsControl.list.rows[iterateDisplayRows].highlight:SetColorTexture( 1.0, 1.0, 0.0, 0.5 ) end end end end function EMA:SettingslistRowClick( rowNumber, columnNumber ) if EMA.settingsControl.listOffset + rowNumber <= EMA:GetlistMaxPosition() then EMA.settingsControl.listHighlightRow = EMA.settingsControl.listOffset + rowNumber EMA:SettingslistScrollRefresh() end end function EMA:SettingsPushSettingsClick( event ) EMA:EMASendSettings() end function EMA:SettingsToggleSellItemOnAllWithAltKey( event, checked ) EMA.db.sellItemOnAllWithAltKey = checked EMA:SettingsRefresh() end function EMA:SettingsToggleAutoSellToys( event, checked ) EMA.db.autoSellToys = checked EMA:SettingsRefresh() end function EMA:SettingsToggleAutoSellMounts( event, checked ) EMA.db.autoSellMounts = checked EMA:SettingsRefresh() end function EMA:SettingsToggleAutoSellItems( event, checked ) EMA.db.autoSellItem = checked EMA:SettingsRefresh() end function EMA:SettingsToggleGlobalSellList( event, checked ) EMA.db.globalSellList = checked EMA:SettingsRefresh() end -- Poor function EMA:SettingsToggleAutoSellPoor( event, checked ) EMA.db.autoSellPoor = checked EMA:SettingsRefresh() end function EMA:SettingsToggleAutoSellBoEPoor( event, checked ) EMA.db.autoSellBoEPoor = checked EMA:SettingsRefresh() end -- Uncommon function EMA:SettingsToggleAutoSellUncommon( event, checked ) EMA.db.autoSellUncommon = checked EMA:SettingsRefresh() end function EMA:SettingsEditBoxChangedIlvlUncommon( event, text ) EMA.db.autoSellIlvlUncommon = text EMA:SettingsRefresh() end function EMA:SettingsToggleAutoSellBoEUncommon( event, checked ) EMA.db.autoSellBoEUncommon = checked EMA:SettingsRefresh() end -- Rare function EMA:SettingsToggleAutoSellRare( event, checked ) EMA.db.autoSellRare = checked EMA:SettingsRefresh() end function EMA:SettingsEditBoxChangedIlvlRare( event, text ) EMA.db.autoSellIlvlRare = text EMA:SettingsRefresh() end function EMA:SettingsToggleAutoSellBoERare( event, checked ) EMA.db.autoSellBoERare = checked EMA:SettingsRefresh() end -- Epic function EMA:SettingsToggleAutoSellEpic( event, checked ) EMA.db.autoSellEpic = checked EMA:SettingsRefresh() end function EMA:SettingsEditBoxChangedIlvlEpic( event, text ) EMA.db.autoSellIlvlEpic = text EMA:SettingsRefresh() end function EMA:SettingsToggleAutoSellBoEEpic( event, checked ) EMA.db.autoSellBoEEpic = checked EMA:SettingsRefresh() end function EMA:OnGroupAreasChanged( message ) EMA.settingsControl.listEditBoxOtherTag:SetList( EMAApi.GroupList() ) end function EMA:SettingsSetMessageArea( event, value ) EMA.db.messageArea = value EMA:SettingsRefresh() end function EMA:SettingslistRemoveClick( event ) StaticPopup_Show( "EMASELL_CONFIRM_REMOVE_AUTO_SELL_OTHER_ITEMS" ) end function EMA:SettingsEditBoxChangedOtherItem( event, text ) EMA.autoSellOtherItemLink = text EMA:SettingsRefresh() end function EMA:SellOtherGroupDropDownList (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.autoSellOtherItemTag = groupName break end end EMA:SettingsRefresh() end function EMA:SettingsEditBoxChangedUnusableSoulboundTag( event, text ) if not text or text:trim() == "" or text:find( "%W" ) ~= nil then EMA:Print( L["ITEM_TAG_ERR"] ) return end EMA.db.autoSellUnusableSoulboundTag = text EMA:SettingsRefresh() end function EMA:SettingsToggleBlackListItem( event, checked ) EMA.db.blackListItem = checked EMA:SettingsRefresh() end --[[ function EMA:SettingsToggleDestroyItem( event, checked ) EMA.db.destroyItem = checked EMA:SettingsRefresh() end ]] function EMA:SettingslistAddClick( event ) --EMA:Print("test", EMA.autoSellOtherItemLink, EMA.autoSellOtherItemTag ) if EMA.autoSellOtherItemLink ~= nil and EMA.autoSellOtherItemTag ~= nil then EMA:AddOther( EMA.autoSellOtherItemLink, EMA.autoSellOtherItemTag, EMA.db.blackListItem ) --, EMA.db.destroyItem ) EMA.autoSellOtherItemLink = nil EMA.settingsControl.listEditBoxOtherItem:SetText( "" ) EMA:SettingsRefresh() end end function EMA:CopyListCommmand() EMA:Print("Copying Local List To Global List") EMA.db.global.autoSellOtherItemsListGlobal = EMAUtilities:CopyTable( EMA.db.autoSellOtherItemsList ) EMA:SettingsRefresh() end ------------------------------------------------------------------------------------------------------------- -- Popup Dialogs. ------------------------------------------------------------------------------------------------------------- -- Initialize Popup Dialogs. local function InitializePopupDialogs() StaticPopupDialogs["EMASELL_CONFIRM_REMOVE_AUTO_SELL_OTHER_ITEMS"] = { text = L["POPUP_REMOVE_ITEM"], button1 = YES, button2 = NO, timeout = 0, whileDead = 1, hideOnEscape = 1, OnAccept = function() EMA:RemoveOther() end, } end ------------------------------------------------------------------------------------------------------------- -- Addon initialization, enabling and disabling. ------------------------------------------------------------------------------------------------------------- -- Initialise the module. function EMA:OnInitialize() EMA.autoSellOtherItemLink = nil EMA.autoSellOtherItemTag = EMAApi.AllGroup() EMA.TrySellIAgainCount = 15 EMA.sellCountTotal = 0 EMA.sellGoldTotal = 0 EMA.SellFristTime = true -- Create the settings control. SettingsCreate() -- Initialise the EMAModule part of this module. EMA:EMAModuleInitialize( EMA.settingsControl.widgetSettings.frame ) -- Populate the settings. EMA:SettingsRefresh() -- Initialise the popup dialogs. InitializePopupDialogs() -- 9.0.3 Remove DESTROY_ITEM EMA:ClearList() end -- Called when the addon is enabled. function EMA:OnEnable() EMA:RegisterEvent( "MERCHANT_SHOW" ) EMA:RegisterEvent( "MERCHANT_CLOSED" ) -- Hook the item click event. 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() end ------------------------------------------------------------------------------------------------------------- -- Sell functionality. ------------------------------------------------------------------------------------------------------------- -- The ContainerFrameItemButton_OnModifiedClick hook. function EMA:ContainerFrameItemButton_OnModifiedClick( self, event, ... ) if EMA.db.sellItemOnAllWithAltKey == true and IsAltKeyDown() and EMAUtilities:MerchantFrameIsShown() then local bag, slot = self:GetParent():GetID(), self:GetID() local texture, count, locked, quality, readable, lootable, link = GetContainerItemInfo( bag, slot ) EMA:EMASendCommandToTeam( EMA.COMMAND_SELL_ITEM, link ) end 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.listEditBoxOtherItem:SetText( "" ) EMA.settingsControl.listEditBoxOtherItem:SetText( itemLink ) EMA.autoSellOtherItemLink = itemLink return end end end return EMA.hooks["ContainerFrameItemButton_OnModifiedClick"]( self, event, ... ) end function EMA:DoSellItem( itemlink ) for bagID = 0, NUM_BAG_SLOTS do for slotID = 1,GetContainerNumSlots( bagID ),1 do --EMA:Print( "Bags OK. checking", itemLink ) local item = Item:CreateFromBagAndSlot(bagID, slotID) if ( item ) then local bagItemLink = item:GetItemLink() local bagItemName = item:GetItemName() if (bagItemLink ) then if EMAUtilities:DoItemLinksContainTheSameItem( bagItemLink, itemlink ) then if EMAUtilities:MerchantFrameIsShown() == true then UseContainerItem( bagID, slotID ) -- Tell the Boss. EMA:EMASendMessageToTeam( EMA.db.messageArea, L["I_HAVE_SOLD_X"]( bagItemLink ), false ) end end end end end end end function EMA:GetlistMaxPosition() if EMA.db.globalSellList == true then return #EMA.db.global.autoSellOtherItemsListGlobal else return #EMA.db.autoSellOtherItemsList end end function EMA:GetOtherAtPosition( position ) if EMA.db.globalSellList == true then return EMA.db.global.autoSellOtherItemsListGlobal[position] else return EMA.db.autoSellOtherItemsList[position] end end function EMA:AddOther( itemLink, itemTag, blackList) --, destroy ) --EMA:Print( itemLink, itemTag, blackList, destroy ) -- 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 = itemLink itemInformation.name = name itemInformation.tag = itemTag itemInformation.blackList = blackList itemInformation.destroyItem = destroy if EMA.db.globalSellList == true then table.insert( EMA.db.global.autoSellOtherItemsListGlobal, itemInformation ) else table.insert( EMA.db.autoSellOtherItemsList, itemInformation ) end EMA:SettingsRefresh() EMA:SettingslistRowClick( EMA:GetlistMaxPosition() , 1 ) end end function EMA:RemoveOther() --EMA:Print("test", EMA.settingsControl.listHighlightRow) if EMA.db.globalSellList == true then table.remove( EMA.db.global.autoSellOtherItemsListGlobal, EMA.settingsControl.listHighlightRow ) else table.remove( EMA.db.autoSellOtherItemsList, EMA.settingsControl.listHighlightRow ) end EMA:SettingsRefresh() EMA:SettingslistRowClick( EMA.settingsControl.listHighlightRow -1, 1 ) end function EMA:MERCHANT_SHOW() -- Sell Items if EMA.db.autoSellItem == true then EMA:ScheduleTimer("DoMerchantSellItems", 0.5 ) end end function EMA:MERCHANT_CLOSED() if EMA.db.autoSellItem == true then EMA.TrySellIAgainCount = 10 EMA.sellCountTotal = 0 EMA.sellGoldTotal = 0 EMA.SellFristTime = true end end function EMA:DoMerchantSellItems() local count = 0 local sellCount = 0 local gold = 0 for bagID = 0, NUM_BAG_SLOTS do for slotID = 1,GetContainerNumSlots( bagID ) do --EMA:Print( "Bags OK. checking", itemLink ) local item = Item:CreateFromBagAndSlot(bagID, slotID) if ( item ) then local bagItemID = item:GetItemID() if ( bagItemID ) then local itemLink = item:GetItemLink() local location = item:GetItemLocation() local itemType = C_Item.GetItemInventoryType( location ) local isBop = C_Item.IsBound( location ) local itemRarity = C_Item.GetItemQuality( location ) local iLvl = C_Item.GetCurrentItemLevel( location ) local _, itemCount = GetContainerItemInfo( bagID, slotID ) local itemName, _, _, _, _, _, _, _, _, _, itemSellPrice = GetItemInfo( itemLink ) if EMAPrivate.Core.isEmaClassicBccBuild == false then local hasToy = PlayerHasToy(bagItemID) end --EMA:Print("ItemTest", bagItemID, itemLink, itemRarity, itemType, isBop, itemRarity, iLvl, itemSellPrice) local canSell = false local canDestroy = false if EMA.db.autoSellPoor == true then if itemRarity == EMA.ITEM_QUALITY_POOR then canSell = true if EMA.db.autoSellBoEPoor == true then if isBop == false then canSell = false end end end end -- Green if EMA.db.autoSellUncommon == true then if itemRarity == EMA.ITEM_QUALITY_UNCOMMON then if itemType ~= 0 then --EMA:Print("testGreen", itemLink, itemRarity, "a", EMA.ITEM_QUALITY_UNCOMMON ) local num = tonumber( EMA.db.autoSellIlvlUncommon ) --EMA:Print("testGreen", num , "vs", iLvl, "item", link ) if num ~= nil and iLvl ~= nil and ( iLvl > EMA.MIN_ITEM_LEVEL ) then if num >= iLvl then --EMA:Print("canSell" ) canSell = true end end if EMA.db.autoSellBoEUncommon == true then --EMA:Print("IsBoP", isBop) if isBop == false then canSell = false end end end end end --Blue if EMA.db.autoSellRare == true then if itemRarity == EMA.ITEM_QUALITY_RARE then if itemType ~= 0 then --EMA:Print("testGreen", itemLink, itemRarity, "a", EMA.ITEM_QUALITY_RARE ) local num = tonumber( EMA.db.autoSellIlvlRare ) --EMA:Print("testGreen", num , "vs", iLvl, "item", link ) if num ~= nil and iLvl ~= nil and ( iLvl > EMA.MIN_ITEM_LEVEL ) then if num >= iLvl then --EMA:Print("canSell" ) canSell = true end end if EMA.db.autoSellBoERare == true then --EMA:Print("IsBoP", isBop) if isBop == false then canSell = false end end end end end -- Epic if EMA.db.autoSellEpic == true then if itemRarity == EMA.ITEM_QUALITY_EPIC then if itemType ~= 0 then --EMA:Print("testGreen", itemLink, itemRarity, "a", EMA.ITEM_QUALITY_EPIC ) local num = tonumber( EMA.db.autoSellIlvlEpic ) --EMA:Print("testGreen", num , "vs", iLvl, "item", link ) if num ~= nil and iLvl ~= nil and ( iLvl > EMA.MIN_ITEM_LEVEL ) then if num >= iLvl then --EMA:Print("canSell") canSell = true end end if EMA.db.autoSellBoEEpic == true then --local isBop = EMAUtilities:ToolTipBagScaner( link,bag,slot ) --EMA:Print("IsBoP", isBop) if isBop == false then canSell = false end end end end end -- Toys if EMA.db.autoSellToys == true and EMAPrivate.Core.isEmaClassicBccBuild == false then if hasToy == true and isBop == true then --EMA:Print("ToyTest", hasToy, itemSellPrice ) if itemSellPrice > 0 then --EMA:Print("canSellToy") canSell = true else --EMA:Print("canNotSellToy") canSell = true end end end -- Mounts if EMA.db.autoSellMounts == true and EMAPrivate.Core.isEmaClassicBccBuild == false then local mountIDs = C_MountJournal.GetMountIDs() for i = 1, #mountIDs do local creatureName,mountSpellID,_,_,_,_,_,_,_,_, isCollected, mountID = C_MountJournal.GetMountInfoByID(mountIDs[i]) if itemName == creatureName then --EMA:Print("found a mount", creatureName) if isCollected == true and isBop == true then --EMA:Print("Mount is Known!", creatureName ) if itemSellPrice > 0 then --EMA:Print("canSellToy") canSell = true else --EMA:Print("canNotSellToy") canSell = true end end end end end -- Sell List/BackList if EMA.db.globalSellList == true then itemTable = EMA.db.global.autoSellOtherItemsListGlobal else itemTable = EMA.db.autoSellOtherItemsList end for position, itemInformation in pairs( itemTable ) do if EMAApi.IsCharacterInGroup( EMA.characterName, itemInformation.tag ) == true then if EMAUtilities:DoItemLinksContainTheSameItem( itemLink, itemInformation.link ) then --EMA:Print("DataTest", itemInformation.blackList, itemInformation.destroyItem ) --EMA:Print("test", itemLink) canSell = true if itemInformation.blackList == true then canSell = false end end end end if canSell == true then --EMA:Print("END OF LOOT", canSell, itemLink, itemCount) if itemSellPrice ~= nil and itemSellPrice > 0 then if EMAUtilities:MerchantFrameIsShown() == true then if itemCount > 1 then count = count + itemCount gold = gold + itemSellPrice * itemCount else count = count + 1 gold = gold + itemSellPrice end sellCount = sellCount + 0.4 --UseContainerItem( bagID, slotID ) --EMA:Print("can sell now", bagID, slotID ) EMA:ScheduleTimer("SellItem", sellCount, bagID, slotID, itemCount ) end end end end end end end if count > 0 then EMA:ScheduleTimer("TellTeam", sellCount + 1 , count, gold ) end end function EMA:SellItem( bagID, slotID, itemCount ) --EMA:Print("sellItem", bagID, slotID ) if EMAUtilities:MerchantFrameIsShown() == true then UseContainerItem( bagID, slotID ) end end function EMA:TellTeam( count, gold ) --EMA:Print("tellTeam", count, gold ) if count > 0 then local formattedGoldAmount = GetCoinTextureString(gold) EMA:EMASendMessageToTeam( EMA.db.messageArea, L["I_SOLD_ITEMS_PLUS_GOLD"]( count )..formattedGoldAmount, false ) end end -- A EMA command has been recieved. function EMA:EMAOnCommandReceived( characterName, commandName, ... ) if commandName == EMA.COMMAND_SELL_ITEM then EMA:DoSellItem( ... ) end end -- 9.0.3 Remove destroyItem from the tables function EMA:ClearList() if EMA.db.alreadyWipedLists == false then local itemTable = EMA.db.global.autoSellOtherItemsListGlobal local itemTableTwo = EMA.db.autoSellOtherItemsList for position, itemInformation in pairs( itemTable ) do if itemInformation.destroyItem == true then table.remove( EMA.db.global.autoSellOtherItemsListGlobal, position ) end end for position, itemInformation in pairs( itemTableTwo ) do if itemInformation.destroyItem == true then table.remove( EMA.db.autoSellOtherItemsList, position ) end end EMA:SettingsRefresh() EMA.db.alreadyWipedLists = true end end EMAApi.ClearList = EMA.ClearList