diff --git a/Jamba-AdvancedLoot/Jamba-AdvancedLoot.toc b/Jamba-AdvancedLoot/Jamba-AdvancedLoot.toc index 4a8a9dd..e82eb22 100644 --- a/Jamba-AdvancedLoot/Jamba-AdvancedLoot.toc +++ b/Jamba-AdvancedLoot/Jamba-AdvancedLoot.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: Jamba-AdvancedLoot ## Notes: Jamba-AdvancedLoot -## Author: Max Schilling -## Version: 7.0.3-5.0 +## Author: Ebony, Former Author: Jafula & Max Schilling +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba diff --git a/Jamba-AdvancedLoot/Locales/Locales.xml b/Jamba-AdvancedLoot/Locales/Locales.xml index 8e22097..3a7360b 100644 --- a/Jamba-AdvancedLoot/Locales/Locales.xml +++ b/Jamba-AdvancedLoot/Locales/Locales.xml @@ -10,4 +10,4 @@ Credits: Built on top of the awesome JAMBA addon, most code is copied nearly dir <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaAdvancedLoot-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-Curr/Jamba-Curr.toc b/Jamba-Curr/Jamba-Curr.toc index c31e9e1..7da10b0 100644 --- a/Jamba-Curr/Jamba-Curr.toc +++ b/Jamba-Curr/Jamba-Curr.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: JambaCurr ## Notes: JambaCurr ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba @@ -10,5 +10,3 @@ ## LoadOnDemand: 1 Locales\Locales.xml JambaCurr.lua - - diff --git a/Jamba-Curr/JambaCurr.lua b/Jamba-Curr/JambaCurr.lua index 993d4fd..0d9a976 100644 --- a/Jamba-Curr/JambaCurr.lua +++ b/Jamba-Curr/JambaCurr.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -60,7 +60,7 @@ AJM.currTypes.SealofBrokenFate = 1273 AJM.currTypes.ShadowyCoins = 1154 AJM.currTypes.SightlessEye = 1149 AJM.currTypes.TimeWornArtifact = 1268 - +AJM.currTypes.CuriousCoin = 1275 -------------------------------------- End of edit -------------------------------------------------------------- @@ -1488,8 +1488,8 @@ function AJM:DoShowToonsCurrency( characterName, currencyValues ) currencyFrameCharacterInfo.TypeFiveText:SetTextColor( r, g, b, a ) currencyFrameCharacterInfo.TypeSixText:SetTextColor( r, g, b, a ) - --currencyFrameCharacterInfo.GoldText:SetText( JambaUtilities:FormatMoneyString( currencyValues.currGold ) ) - currencyFrameCharacterInfo.GoldText:SetText( GetCoinTextureString( currencyValues.currGold ) ) + currencyFrameCharacterInfo.GoldText:SetText( JambaUtilities:FormatMoneyString( currencyValues.currGold ) ) + --currencyFrameCharacterInfo.GoldText:SetText( GetCoinTextureString( currencyValues.currGold ) ) currencyFrameCharacterInfo.TypeOneText:SetText( currencyValues.currTypeOne ) currencyFrameCharacterInfo.TypeTwoText:SetText( currencyValues.currTypeTwo ) currencyFrameCharacterInfo.TypeThreeText:SetText( currencyValues.currTypeThree ) @@ -1498,11 +1498,11 @@ function AJM:DoShowToonsCurrency( characterName, currencyValues ) currencyFrameCharacterInfo.TypeSixText:SetText( currencyValues.currTypeSix ) -- Total gold. AJM.currencyTotalGold = AJM.currencyTotalGold + currencyValues.currGold - --parentFrame.TotalGoldText:SetText( JambaUtilities:FormatMoneyString( AJM.currencyTotalGold ) ) - parentFrame.TotalGoldText:SetText( GetCoinTextureString( AJM.currencyTotalGold ) ) + parentFrame.TotalGoldText:SetText( JambaUtilities:FormatMoneyString( AJM.currencyTotalGold ) ) + --parentFrame.TotalGoldText:SetText( GetCoinTextureString( AJM.currencyTotalGold ) ) if IsInGuild() then - --parentFrame.TotalGoldGuildText:SetText( JambaUtilities:FormatMoneyString( GetGuildBankMoney() ) ) - parentFrame.TotalGoldGuildText:SetText( GetCoinTextureString( GetGuildBankMoney() ) ) + parentFrame.TotalGoldGuildText:SetText( JambaUtilities:FormatMoneyString( GetGuildBankMoney() ) ) + --parentFrame.TotalGoldGuildText:SetText( GetCoinTextureString( GetGuildBankMoney() ) ) end -- Update width of currency list. AJM:CurrencyListSetColumnWidth() @@ -1517,4 +1517,4 @@ function AJM:JambaOnCommandReceived( characterName, commandName, ... ) if commandName == AJM.COMMAND_HERE_IS_CURRENCY then AJM:DoShowToonsCurrency( characterName, ... ) end -end \ No newline at end of file +end diff --git a/Jamba-Curr/Locales/JambaCurr-Locale-enUS.lua b/Jamba-Curr/Locales/JambaCurr-Locale-enUS.lua index 08ae073..fbb9e0d 100644 --- a/Jamba-Curr/Locales/JambaCurr-Locale-enUS.lua +++ b/Jamba-Curr/Locales/JambaCurr-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -75,4 +75,4 @@ L["Shows Currency on The Currency display window."] = true L["You can change the Currency ID here.\n\nFor a list of ID's\nhttp://www.wowhead.com/currencies"] = true L["Show Currency Window"] = true L["Open Currency List On Start Up.\n\nThe Master Minion Only)"] = true -L["Lock Currency List\n\n(Enables Mouse Click-Through)"] = true \ No newline at end of file +L["Lock Currency List\n\n(Enables Mouse Click-Through)"] = true diff --git a/Jamba-Curr/Locales/Locales.xml b/Jamba-Curr/Locales/Locales.xml index 28cbf06..424585b 100644 --- a/Jamba-Curr/Locales/Locales.xml +++ b/Jamba-Curr/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaCurr-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-DisplayTeam/Jamba-DisplayTeam.toc b/Jamba-DisplayTeam/Jamba-DisplayTeam.toc index 3d82797..13cd196 100644 --- a/Jamba-DisplayTeam/Jamba-DisplayTeam.toc +++ b/Jamba-DisplayTeam/Jamba-DisplayTeam.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: Jamba-DisplayTeam ## Notes: Jamba-DisplayTeam ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba diff --git a/Jamba-DisplayTeam/JambaDisplayTeam.lua b/Jamba-DisplayTeam/JambaDisplayTeam.lua index b22026a..0cad4d8 100644 --- a/Jamba-DisplayTeam/JambaDisplayTeam.lua +++ b/Jamba-DisplayTeam/JambaDisplayTeam.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -51,6 +51,7 @@ AJM.settings = { barsAreStackedVertically = true, teamListHorizontal = true, showListTitle = false, + olnyShowInParty = false, showCharacterPortrait = true, characterPortraitWidth = 80, showFollowStatus = true, @@ -81,10 +82,6 @@ AJM.settings = { comboStatusHeight = 10, comboStatusShowValues = true, comboStatusShowPercentage = true, --- showBagInformation = true, --- showBagFreeSlotsOnly = true, --- bagInformationWidth = 80, --- bagInformationHeight = 25, showToolTipInfo = true, -- ShowEquippedOnly = false, framePoint = "LEFT", @@ -154,7 +151,6 @@ end AJM.COMMAND_FOLLOW_STATUS_UPDATE = "FlwStsUpd" AJM.COMMAND_EXPERIENCE_STATUS_UPDATE = "ExpStsUpd" ---AJM.COMMAND_BAGINFORMATION_UPDATE = "BagInfoUpd" AJM.COMMAND_TOONINFORMATION_UPDATE = "IlvlInfoUpd" AJM.COMMAND_REPUTATION_STATUS_UPDATE = "RepStsUpd" AJM.COMMAND_COMBO_STATUS_UPDATE = "CboStsUpd" @@ -192,16 +188,11 @@ local function GetCharacterHeight() local heightExperienceStatus = 0 local heightHealthStatus = 0 local heightPowerStatus = 0 - local heightComboStatus = 0 --- local heightBagInformation = 0 + local heightComboStatus = 0 local heightAllBars = 0 if AJM.db.showCharacterPortrait == true then heightPortrait = AJM.db.characterPortraitWidth + AJM.db.teamListVerticalSpacing end --- if AJM.db.showBagInformation == true then --- heightBagInformation = AJM.db.bagInformationHeight + AJM.db.teamListVerticalSpacing --- heightAllBars = heightAllBars + heightBagInformation --- end if AJM.db.showFollowStatus == true then heightFollowStatus = AJM.db.followStatusHeight + AJM.db.barVerticalSpacing heightAllBars = heightAllBars + heightFollowStatus @@ -244,10 +235,6 @@ local function GetCharacterWidth() if AJM.db.showCharacterPortrait == true then widthPortrait = AJM.db.characterPortraitWidth + AJM.db.teamListHorizontalSpacing end --- if AJM.db.showBagInformation == true then --- widthBagInformation = AJM.db.bagInformationWidth + AJM.db.teamListHorizontalSpacing --- widthAllBars = widthAllBars + widthBagInformation --- end if AJM.db.showFollowStatus == true then widthFollowStatus = AJM.db.followStatusWidth + AJM.db.barHorizontalSpacing widthAllBars = widthAllBars + widthFollowStatus @@ -409,10 +396,18 @@ function AJM:RefreshTeamListControlsShow() for index, characterName in JambaApi.TeamListOrdered() do characterName = JambaUtilities:AddRealmToNameIfMissing ( characterName ) -- Is the team member online? - if JambaApi.GetCharacterOnlineStatus( characterName ) == true then - -- Yes, the team member is online, draw their status bars. - AJM:UpdateJambaTeamStatusBar( characterName, AJM.totalMembersDisplayed ) - AJM.totalMembersDisplayed = AJM.totalMembersDisplayed + 1 + if JambaApi.GetCharacterOnlineStatus( characterName ) == true then + -- Checks the player is the party to hide the bar if needed. + if AJM.db.olnyShowInParty == true then + if UnitClass(Ambiguate( characterName, "none" ) ) then + -- Yes, the team member is online, draw their status bars. + AJM:UpdateJambaTeamStatusBar( characterName, AJM.totalMembersDisplayed ) + AJM.totalMembersDisplayed = AJM.totalMembersDisplayed + 1 + end + else + AJM:UpdateJambaTeamStatusBar( characterName, AJM.totalMembersDisplayed ) + AJM.totalMembersDisplayed = AJM.totalMembersDisplayed + 1 + end end end UpdateJambaTeamListDimensions() @@ -504,24 +499,6 @@ function AJM:CreateJambaTeamStatusBar( characterName, parentFrame ) portraitButtonClick:SetAttribute( "unit", Ambiguate( characterName, "all" ) ) characterStatusBar["portraitButton"] = portraitButton characterStatusBar["portraitButtonClick"] = portraitButtonClick ---[[ - -- Set the bag information. - local bagInformationFrameName = AJM.globalFramePrefix.."BagInformationFrame" - local bagInformationFrame = CreateFrame( "Frame", bagInformationFrameName, parentFrame ) - local bagInformationFrameText = bagInformationFrame:CreateFontString( bagInformationFrameName.."Text", "OVERLAY", "GameFontNormal" ) - bagInformationFrameText:SetText( "999/999" ) - bagInformationFrame:SetAlpha( 1 ) - --bagInformationFrameText:SetPoint( "CENTER", bagInformationFrame, "CENTER", 0, 0 ) - bagInformationFrameText:SetAllPoints() - bagInformationFrameText:SetJustifyH( "CENTER" ) - bagInformationFrameText:SetJustifyV( "MIDDLE" ) - bagInformationFrameText:SetTextColor( 1.00, 1.00, 1.00, 1.00 ) - bagInformationFrame.slotsFree = 999 - bagInformationFrame.totalSlots = 999 - --bagInformationFrame.durability = 100 - characterStatusBar["bagInformationFrame"] = bagInformationFrame - characterStatusBar["bagInformationFrameText"] = bagInformationFrameText ---]] -- Set the follow bar. local followName = AJM.globalFramePrefix.."FollowBar" local followBar = CreateFrame( "StatusBar", followName, parentFrame, "TextStatusBar,SecureActionButtonTemplate" ) @@ -782,7 +759,7 @@ function AJM:ShowFollowTooltip( frame, followBar, characterName, canShow ) GameTooltip:AddLine(Ambiguate( characterName, "none" ), 1, 0.82, 0, 1) end --level of player if not max. - if followBar.CharacterLevel == followBar.MaxCharacterLevel then + if followBar.CharacterLevel ~= followBar.MaxCharacterLevel then GameTooltip:AddLine(L["Player Level:"]..L[" "]..L["("]..tostring (format("%.0f", followBar.CharacterLevel ))..L[")"],1,1,1,1) end -- Item Level of player @@ -802,6 +779,12 @@ function AJM:ShowFollowTooltip( frame, followBar, characterName, canShow ) GameTooltip:AddLine(L["Has New Mail From:"], 1, 0.82, 0, 1) GameTooltip:AddLine( followBar.Mail,1,1,1,1) end + if not (followBar.CurrText == "currNothing") then + GameTooltip:AddLine(" ",1,1,1,1) + GameTooltip:AddLine(L["Currency Info:"], 1, 0.82, 0, 1) + GameTooltip:AddLine( followBar.CurrText,1,1,1,1) + end + GameTooltip:Show() else GameTooltip:Hide() @@ -828,7 +811,6 @@ function AJM:HideJambaTeamStatusBar( characterName ) -- Hide the bars. characterStatusBar["portraitButton"]:Hide() characterStatusBar["portraitButtonClick"]:Hide() --- characterStatusBar["bagInformationFrame"]:Hide() characterStatusBar["followBar"]:Hide() characterStatusBar["followBarClick"]:Hide() characterStatusBar["experienceBar"]:Hide() @@ -1264,16 +1246,26 @@ local function SettingsCreateDisplayOptions( top ) -- Create appearance & layout. JambaHelperSettings:CreateHeading( AJM.settingsControl, L["Appearance & Layout"], movingTop, true ) movingTop = movingTop - headingHeight - AJM.settingsControl.displayOptionsCheckBoxShowListTitle = JambaHelperSettings:CreateCheckBox( + AJM.settingsControl.displayOptionsCheckBoxShowListTitle = JambaHelperSettings:CreateCheckBox( AJM.settingsControl, - halfWidthSlider, + thirdWidth, left, movingTop, L["Show Title"], AJM.SettingsToggleShowTeamListTitle, L["Show Team List Title"] ) + AJM.settingsControl.displayOptionsCheckBoxOlnyShowInParty = JambaHelperSettings:CreateCheckBox( + AJM.settingsControl, + thirdWidth, + left2, + movingTop, + L["Olny Show in Party"], + AJM.SettingsToggleOlnyShowinParty, + L["Olny Show Display-Team\nIn Party or Raid"] + ) movingTop = movingTop - checkBoxHeight - verticalSpacing + AJM.settingsControl.displayOptionsCharactersPerBar = JambaHelperSettings:CreateSlider( AJM.settingsControl, halfWidthSlider, @@ -1715,47 +1707,6 @@ local function SettingsCreateDisplayOptions( top ) AJM.settingsControl.displayOptionsComboStatusHeightSlider:SetSliderValues( 10, 100, 1 ) AJM.settingsControl.displayOptionsComboStatusHeightSlider:SetCallback( "OnValueChanged", AJM.SettingsChangeComboStatusHeight ) movingTop = movingTop - sliderHeight - sectionSpacing ---[[ - -- Create bag information status. - JambaHelperSettings:CreateHeading( AJM.settingsControl, L["Bag Information"], movingTop, true ) - movingTop = movingTop - headingHeight - AJM.settingsControl.displayOptionsCheckBoxShowBagInformation = JambaHelperSettings:CreateCheckBox( - AJM.settingsControl, - thirdWidth, - left, - movingTop, - L["Show"], - AJM.SettingsToggleShowBagInformation - ) - AJM.settingsControl.displayOptionsCheckBoxShowFreeBagSlotsOnly = JambaHelperSettings:CreateCheckBox( - AJM.settingsControl, - thirdWidth + thirdWidth, - left2, - movingTop, - L["Only Show Free Bag Slots"], - AJM.SettingsToggleShowFreeBagSlotsOnly - ) - movingTop = movingTop - checkBoxHeight - verticalSpacing - AJM.settingsControl.displayOptionsBagInformationWidthSlider = JambaHelperSettings:CreateSlider( - AJM.settingsControl, - halfWidthSlider, - left, - movingTop, - L["Width"] - ) - AJM.settingsControl.displayOptionsBagInformationWidthSlider:SetSliderValues( 15, 300, 1 ) - AJM.settingsControl.displayOptionsBagInformationWidthSlider:SetCallback( "OnValueChanged", AJM.SettingsChangeBagInformationWidth ) - AJM.settingsControl.displayOptionsBagInformationHeightSlider = JambaHelperSettings:CreateSlider( - AJM.settingsControl, - halfWidthSlider, - column2left, - movingTop, - L["Height"] - ) - AJM.settingsControl.displayOptionsBagInformationHeightSlider:SetSliderValues( 15, 100, 1 ) - AJM.settingsControl.displayOptionsBagInformationHeightSlider:SetCallback( "OnValueChanged", AJM.SettingsChangeBagInformationHeight ) - movingTop = movingTop - sliderHeight - verticalSpacing ---]] return movingTop end @@ -1796,6 +1747,7 @@ function AJM:SettingsRefresh() -- AJM.settingsControl.displayOptionsCheckBoxStackVertically:SetValue( AJM.db.barsAreStackedVertically ) -- AJM.settingsControl.displayOptionsCheckBoxTeamHorizontal:SetValue( AJM.db.teamListHorizontal ) AJM.settingsControl.displayOptionsCheckBoxShowListTitle:SetValue( AJM.db.showListTitle ) + AJM.settingsControl.displayOptionsCheckBoxOlnyShowInParty:SetValue( AJM.db.olnyShowInParty ) AJM.settingsControl.displayOptionsTeamListTransparencySlider:SetValue( AJM.db.frameAlpha ) AJM.settingsControl.displayOptionsTeamListScaleSlider:SetValue( AJM.db.teamListScale ) AJM.settingsControl.displayOptionsTeamListMediaStatus:SetValue( AJM.db.statusBarTexture ) @@ -1838,10 +1790,6 @@ function AJM:SettingsRefresh() AJM.settingsControl.displayOptionsComboStatusHeightSlider:SetValue( AJM.db.comboStatusHeight ) AJM.settingsControl.displayOptionsBackgroundColourPicker:SetColor( AJM.db.frameBackgroundColourR, AJM.db.frameBackgroundColourG, AJM.db.frameBackgroundColourB, AJM.db.frameBackgroundColourA ) AJM.settingsControl.displayOptionsBorderColourPicker:SetColor( AJM.db.frameBorderColourR, AJM.db.frameBorderColourG, AJM.db.frameBorderColourB, AJM.db.frameBorderColourA ) --- AJM.settingsControl.displayOptionsCheckBoxShowBagInformation:SetValue( AJM.db.showBagInformation ) --- AJM.settingsControl.displayOptionsCheckBoxShowFreeBagSlotsOnly:SetValue( AJM.db.showBagFreeSlotsOnly ) --- AJM.settingsControl.displayOptionsBagInformationWidthSlider:SetValue( AJM.db.bagInformationWidth ) --- AJM.settingsControl.displayOptionsBagInformationHeightSlider:SetValue( AJM.db.bagInformationHeight ) -- AJM.settingsControl.displayOptionsCheckBoxShowEquippedOnly:SetValue( AJM.db.ShowEquippedOnly ) -- State. -- Trying to change state in combat lockdown causes taint. Let's not do that. Eventually it would be nice to have a "proper state driven team display", @@ -1854,6 +1802,7 @@ function AJM:SettingsRefresh() --AJM.settingsControl.displayOptionsCheckBoxStackVertically:SetDisabled( not AJM.db.showTeamList ) --AJM.settingsControl.displayOptionsCheckBoxTeamHorizontal:SetDisabled( not AJM.db.showTeamList ) AJM.settingsControl.displayOptionsCheckBoxShowListTitle:SetDisabled( not AJM.db.showTeamList ) + AJM.settingsControl.displayOptionsCheckBoxOlnyShowInParty:SetDisabled( not AJM.db.showTeamList ) AJM.settingsControl.displayOptionsTeamListScaleSlider:SetDisabled( not AJM.db.showTeamList ) AJM.settingsControl.displayOptionsTeamListTransparencySlider:SetDisabled( not AJM.db.showTeamList ) AJM.settingsControl.displayOptionsTeamListMediaStatus:SetDisabled( not AJM.db.showTeamList ) @@ -1896,10 +1845,6 @@ function AJM:SettingsRefresh() AJM.settingsControl.displayOptionsComboStatusHeightSlider:SetDisabled( not AJM.db.showTeamList or not AJM.db.showComboStatus) AJM.settingsControl.displayOptionsBackgroundColourPicker:SetDisabled( not AJM.db.showTeamList ) AJM.settingsControl.displayOptionsBorderColourPicker:SetDisabled( not AJM.db.showTeamList ) --- AJM.settingsControl.displayOptionsCheckBoxShowBagInformation:SetDisabled( not AJM.db.showTeamList ) --- AJM.settingsControl.displayOptionsCheckBoxShowFreeBagSlotsOnly:SetDisabled( not AJM.db.showTeamList or not AJM.db.ShowBagInformationn) --- AJM.settingsControl.displayOptionsBagInformationWidthSlider:SetDisabled( not AJM.db.showTeamList or not AJM.db.ShowBagInformation) --- AJM.settingsControl.displayOptionsBagInformationHeightSlider:SetDisabled( not AJM.db.showTeamList or not AJM.db.ShowBagInformation) AJM.settingsControl.displayOptionsCheckBoxShowToolTipInfo:SetDisabled( not AJM.db.showTeamList or not AJM.db.showFollowStatus ) -- AJM.settingsControl.displayOptionsCheckBoxShowEquippedOnly:SetDisabled( not AJM.db.showTeamList or not AJM.db.showFollowStatus ) if AJM.teamListCreated == true then @@ -1914,8 +1859,6 @@ function AJM:SettingsRefresh() AJM:SettingsUpdateHealthAll() AJM:SettingsUpdatePowerAll() AJM:SettingsUpdateComboAll() - --AJM:SettingsUpdateBagInformationAll() - --AJM:SettingsUpdateIlvlInformationAll() end else AJM.updateSettingsAfterCombat = true @@ -1934,12 +1877,13 @@ function AJM:JambaOnSettingsReceived( characterName, settings ) --AJM.db.barsAreStackedVertically = settings.barsAreStackedVertically --AJM.db.teamListHorizontal = settings.teamListHorizontal AJM.db.showListTitle = settings.showListTitle + AJM.db.olnyShowInParty = settings.olnyShowInParty AJM.db.teamListScale = settings.teamListScale AJM.db.statusBarTexture = settings.statusBarTexture AJM.db.borderStyle = settings.borderStyle AJM.db.backgroundStyle = settings.backgroundStyle AJM.db.fontStyle = settings.fontStyle - + AJM.db.fontSize = settings.fontSize AJM.db.showCharacterPortrait = settings.showCharacterPortrait AJM.db.characterPortraitWidth = settings.characterPortraitWidth AJM.db.showFollowStatus = settings.showFollowStatus @@ -1947,7 +1891,6 @@ function AJM:JambaOnSettingsReceived( characterName, settings ) AJM.db.followStatusHeight = settings.followStatusHeight AJM.db.followStatusShowName = settings.followStatusShowName AJM.db.showToolTipInfo = settings.showToolTipInfo --- AJM.db.followStatusShowLevel = settings.followStatusShowLevel AJM.db.showExperienceStatus = settings.showExperienceStatus AJM.db.showXpStatus = settings.showXpStatus AJM.db.showArtifactStatus = settings.showArtifactStatus @@ -1972,12 +1915,6 @@ function AJM:JambaOnSettingsReceived( characterName, settings ) AJM.db.comboStatusHeight = settings.comboStatusHeight AJM.db.comboStatusShowValues = settings.comboStatusShowValues AJM.db.comboStatusShowPercentage = settings.comboStatusShowPercentage --- AJM.db.showBagInformation = settings.showBagInformation --- AJM.db.showBagFreeSlotsOnly = settings.showBagFreeSlotsOnly --- AJM.db.bagInformationWidth = settings.bagInformationWidth --- AJM.db.bagInformationHeight = settings.bagInformationHeight - --EBS - -- AJM.db.ShowEquippedOnly = settings.ShowEquippedOnly AJM.db.frameAlpha = settings.frameAlpha AJM.db.framePoint = settings.framePoint @@ -2051,6 +1988,11 @@ function AJM:SettingsToggleShowTeamListTitle( event, checked ) AJM:SettingsRefresh() end +function AJM:SettingsToggleOlnyShowinParty( event, checked ) + AJM.db.olnyShowInParty = checked + AJM:SettingsRefresh() +end + function AJM:SettingsChangeScale( event, value ) AJM.db.teamListScale = tonumber( value ) AJM:SettingsRefresh() @@ -2267,29 +2209,6 @@ function AJM:SettingsBorderColourPickerChanged( event, r, g, b, a ) end --[[ -function AJM:SettingsToggleShowBagInformation( event, checked ) - AJM.db.showBagInformation = checked - AJM:SettingsRefresh() -end - -function AJM:SettingsToggleShowFreeBagSlotsOnly( event, checked ) - AJM.db.showBagFreeSlotsOnly = checked - AJM:SettingsRefresh() -end - -function AJM:SettingsChangeBagInformationWidth( event, value ) - AJM.db.bagInformationWidth = tonumber( value ) - AJM:SettingsRefresh() -end - -function AJM:SettingsChangeBagInformationHeight( event, value ) - AJM.db.bagInformationHeight = tonumber( value ) - AJM:SettingsRefresh() -end ---]] ---ilvl - ---[[ function AJM:SettingsToggleShowEquippedOnly( event, checked ) AJM.db.ShowEquippedOnly = checked AJM:SettingsRefresh() @@ -2312,9 +2231,6 @@ function AJM:JambaOnCommandReceived( characterName, commandName, ... ) if commandName == AJM.COMMAND_REPUTATION_STATUS_UPDATE then AJM:ProcessUpdateReputationStatusMessage( characterName, ... ) end --- if commandName == AJM.COMMAND_BAGINFORMATION_UPDATE then --- AJM:ProcessUpdateBagInformationMessage( characterName, ... ) --- end if commandName == AJM.COMMAND_TOONINFORMATION_UPDATE then AJM:ProcessUpdateToonInformationMessage ( characterName, ... ) end @@ -2353,113 +2269,8 @@ function AJM:RangeUpdateCommand() end end ---[[ -------------------------------------------------------------------------------------------------------------- --- Bag Information Updates. -------------------------------------------------------------------------------------------------------------- - -function AJM:ITEM_PUSH( event, ... ) - AJM:SendBagInformationUpdateCommand() -end - -function AJM:SendBagInformationUpdateCommand() - if AJM.db.showTeamList == true and AJM.db.showBagInformation == true then - if UnitIsGhost( "player" ) then - return - end - if UnitIsDead( "player" ) then - return - end - local slotsFree, totalSlots = LibBagUtils:CountSlots( "BAGS", 0 ) - local curTotal, maxTotal, broken = 0, 0, 0 - - --for i = 1, 18 do - -- local curItemDurability, maxItemDurability = GetInventoryItemDurability(i) - -- if curItemDurability and maxItemDurability then - -- curTotal = curTotal + curItemDurability - -- maxTotal = maxTotal + maxItemDurability - -- if maxItemDurability > 0 and curItemDurability == 0 then - -- broken = broken + 1 - -- end - -- end - --local percent = curTotal / maxTotal * 100 - --return percent, broken - --end - --AJM:Print("Durability", percent, broken) - --if AJM.previousSlotsFree ~= slotsFree or AJM.previousTotalSlots ~= totalSlots then - if AJM.db.showTeamListOnMasterOnly == true then - AJM:JambaSendCommandToMaster( AJM.COMMAND_BAGINFORMATION_UPDATE, slotsFree, totalSlots ) - else - AJM:JambaSendCommandToTeam( AJM.COMMAND_BAGINFORMATION_UPDATE, slotsFree, totalSlots ) - end - end -end - -function AJM:ProcessUpdateBagInformationMessage( characterName, slotsFree, totalSlots, range ) - AJM:UpdateBagInformation( characterName, slotsFree, totalSlots, range ) -end - -function AJM:SettingsUpdateBagInformationAll() - for characterName, characterStatusBar in pairs( AJM.characterStatusBar ) do - AJM:UpdateBagInformation( characterName, nil, nil, nil, nil ) - end -end - -function AJM:UpdateBagInformation( characterName, slotsFree, totalSlots, range ) --percent, range ) --- AJM:Print("Data", characterName, slotsFree, totalSlots, percent ) - if CanDisplayTeamList() == false then - return - end - if AJM.db.showBagInformation == false then - return - end - characterName = JambaUtilities:AddRealmToNameIfMissing( characterName ) - local characterStatusBar = AJM.characterStatusBar[characterName] - if characterStatusBar == nil then - return - end - local bagInformationFrame = characterStatusBar["bagInformationFrame"] - local bagInformationFrameText = characterStatusBar["bagInformationFrameText"] - if slotsFree == nil then - slotsFree = bagInformationFrame.slotsFree - end - if totalSlots == nil then - totalSlots = bagInformationFrame.totalSlots - end --- if percent == nil or percent == false then --- percent = bagInformationFrame.durability --- end - bagInformationFrame.slotsFree = slotsFree - bagInformationFrame.totalSlots = totalSlots --- bagInformationFrame.durability = percent - if UnitInParty(Ambiguate( characterName, "none" ) ) == true then - if range == false then - bagInformationFrame:SetAlpha( 0.5 ) - else - bagInformationFrame:SetAlpha( 1 ) - end - else - bagInformationFrame:SetAlpha( 1 ) - end - - --AJM:Print("test", percent) - --local durability = gsub(percent, "%.[^|]+", "") - --AJM:Print("hello", durability) - --text = text..L["Dura"]..L[" "]..tostring(gsub(percent, "%.[^|]+", "") )..L["%"] - local text = "" - if AJM.db.showBagFreeSlotsOnly == true then - --text = text..("\n")..L["BgS"]..L[" "]..tostring(slotsFree) - text = tostring(slotsFree) - else - --text = text..("\n")..L["BgS"]..L[" "]..tostring((totalSlots - slotsFree)).."/"..tostring(totalSlots) - text = tostring((totalSlots - slotsFree)).."/"..tostring(totalSlots) - end - bagInformationFrameText:SetText( text ) - --AJM:Print("freespace", slotsFree, totalSlots) --Debug -end ---]] ------------------------------------------------------------------------------------------------------------- --- Ilvl Information Updates. +-- ToolTip Information Updates. ------------------------------------------------------------------------------------------------------------- function AJM:JambaRequestUpdate() @@ -2596,7 +2407,6 @@ function AJM:SettingsUpdateToonInfomation( characterName, characterLevel, charac followBar.TotalBagSpace = totalSlots followBar.Mail = mailText followBar.CurrText = currText - end ------------------------------------------------------------------------------------------------------------- @@ -3081,35 +2891,41 @@ end ------------------------------------------------------------------------------------------------------------- function AJM:UNIT_HEALTH( event, unit, ... ) - AJM:SendHealthStatusUpdateCommand( unit, nil ) - --AJM:Print("test2", unit) + AJM:SendHealthStatusUpdateCommand( unit ) + --AJM:Print("test2", unit) end function AJM:UNIT_MAXHEALTH( event, unit, ... ) - AJM:SendHealthStatusUpdateCommand( unit, nil ) + --AJM:Print("sendtest2", unit ) + AJM:SendHealthStatusUpdateCommand( unit ) end -function AJM:SendHealthStatusUpdateCommand( unit ) +function AJM:SendHealthStatusUpdateCommand(unit) + if unit == nil then + return + end if AJM.db.showTeamList == true and AJM.db.showHealthStatus == true then local playerHealth = UnitHealth( unit ) local playerMaxHealth = UnitHealthMax( unit ) - local isDead = UnitIsDeadOrGhost( unit ) local characterName, characterRealm = UnitName( unit ) local character = JambaUtilities:AddRealmToNameIfNotNil( characterName, characterRealm ) - --AJM:Print("HeathStats", character, playerHealth, playerMaxHealth, range) - AJM:UpdateHealthStatus( character, playerHealth, playerMaxHealth, isDead ) + --AJM:Print("HeathStats", character, playerHealth, playerMaxHealth) + AJM:UpdateHealthStatus( character, playerHealth, playerMaxHealth) end end function AJM:SettingsUpdateHealthAll() for characterName, characterStatusBar in pairs( AJM.characterStatusBar ) do - AJM:UpdateHealthStatus( characterName, nil, nil, nil, nil ) + AJM:UpdateHealthStatus( characterName, nil, nil ) end end -function AJM:UpdateHealthStatus( characterName, playerHealth, playerMaxHealth, isDead ) - --AJM:Print("testUpdate", characterName, playerHealth, playerMaxHealth, isDead) +function AJM:UpdateHealthStatus( characterName, playerHealth, playerMaxHealth ) + --AJM:Print("testUpdate", characterName, playerHealth, playerMaxHealth) + if characterName == nil then + return + end if CanDisplayTeamList() == false then return end @@ -3207,12 +3023,15 @@ end function AJM:SettingsUpdatePowerAll() for characterName, characterStatusBar in pairs( AJM.characterStatusBar ) do - AJM:UpdatePowerStatus( characterName, nil, nil, nil ) + AJM:UpdatePowerStatus( characterName, nil, nil ) end end function AJM:UpdatePowerStatus( characterName, playerPower, playerMaxPower) --AJM:Print("testPOwer", characterName, playerPower, playerMaxPower ) + if characterName == nil then + return + end if CanDisplayTeamList() == false then return end @@ -3309,10 +3128,6 @@ function AJM:RUNE_POWER_UPDATE( event, ...) AJM:SendComboStatusUpdateCommand() end -function AJM:PLAYER_TALENT_UPDATE(event, ...) - AJM:SendComboStatusUpdateCommand() -end - function AJM:SendComboStatusUpdateCommand() --AJM:Print("test") if AJM.db.showTeamList == true and AJM.db.showComboStatus == true then @@ -3508,6 +3323,7 @@ function AJM:OnEnable() AJM:RegisterEvent( "HONOR_XP_UPDATE" ) AJM:RegisterEvent( "HONOR_LEVEL_UPDATE" ) AJM:RegisterEvent( "HONOR_PRESTIGE_UPDATE" ) + AJM:RegisterEvent( "GROUP_ROSTER_UPDATE" ) AJM.SharedMedia.RegisterCallback( AJM, "LibSharedMedia_Registered" ) AJM.SharedMedia.RegisterCallback( AJM, "LibSharedMedia_SetGlobal" ) AJM:RegisterMessage( JambaApi.MESSAGE_TEAM_CHARACTER_ADDED, "OnCharactersChanged" ) @@ -3516,6 +3332,7 @@ function AJM:OnEnable() AJM:RegisterMessage( JambaApi.MESSAGE_TEAM_MASTER_CHANGED, "OnMasterChanged" ) AJM:RegisterMessage( JambaApi.MESSAGE_CHARACTER_ONLINE, "OnCharactersChanged") AJM:RegisterMessage( JambaApi.MESSAGE_CHARACTER_OFFLINE, "OnCharactersChanged") + AJM:SecureHook( "SetWatchedFactionIndex" ) AJM:ScheduleTimer( "RefreshTeamListControls", 3 ) AJM:ScheduleTimer( "SendExperienceStatusUpdateCommand", 5 ) @@ -3541,23 +3358,25 @@ function AJM:UpdateAll(event, ...) AJM:ScheduleTimer( "SendReputationStatusUpdateCommand", 2 ) AJM:ScheduleTimer( "SendInfomationUpdateCommand", 2 ) AJM:ScheduleTimer( "SendComboStatusUpdateCommand", 2 ) - for index, characterName in JambaApi.TeamListOrderedOnline() do - unit = Ambiguate( characterName, "none" ) - AJM:ScheduleTimer( "SendHealthStatusUpdateCommand", 2, unit ) - AJM:ScheduleTimer( "SendPowerStatusUpdateCommand", 2, unit ) - end end function AJM:OnMasterChanged( message, characterName ) AJM:SettingsRefresh() end ---[[ -function AJM:UNIT_LEVEL( event, ... ) - --AJM:SettingsUpdateFollowTextAll() - AJM:SendIlvlInformationUpdateCommand() -end]] +function AJM:GROUP_ROSTER_UPDATE() + AJM:ScheduleTimer( "RefreshTeamListControls", 1 ) + AJM:ScheduleTimer( "SendExperienceStatusUpdateCommand", 1 ) + AJM:ScheduleTimer( "SendReputationStatusUpdateCommand", 1 ) + AJM:ScheduleTimer( "SendInfomationUpdateCommand", 1 ) + AJM:ScheduleTimer( "SendComboStatusUpdateCommand", 1 ) + for index, characterName in JambaApi.TeamListOrderedOnline() do + unit = Ambiguate( characterName, "none" ) + AJM:ScheduleTimer( "SendHealthStatusUpdateCommand", 2, unit ) + AJM:ScheduleTimer( "SendPowerStatusUpdateCommand", 2, unit ) + end +end function AJM:PLAYER_REGEN_ENABLED( event, ... ) if AJM.db.hideTeamListInCombat == true then @@ -3583,9 +3402,13 @@ function AJM:PLAYER_REGEN_DISABLED( event, ... ) end end +function AJM:PLAYER_TALENT_UPDATE(event, ...) + AJM:SendComboStatusUpdateCommand() + AJM:ScheduleTimer( "SendExperienceStatusUpdateCommand", 1 ) +end + function AJM:OnCharactersChanged() AJM:RefreshTeamListControls() - --AJM:SendIlvlInformationUpdateCommand() end diff --git a/Jamba-DisplayTeam/Locales/JambaDisplayTeam-Locale-enUS.lua b/Jamba-DisplayTeam/Locales/JambaDisplayTeam-Locale-enUS.lua index 8b74b88..167ba85 100644 --- a/Jamba-DisplayTeam/Locales/JambaDisplayTeam-Locale-enUS.lua +++ b/Jamba-DisplayTeam/Locales/JambaDisplayTeam-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -77,10 +77,13 @@ L["Bag Space:"] = true L["Durability:"] = true L["Gold:"] = true L["Has New Mail From:"] = true -L["Currency:"] = true +L["Currency Info:"] = true L["Unknown Sender"] = true L["Show ToolTip"] = true L["Characters Per Bar"] = true +L["Olny Show in Party"] = true +L["Olny Show Display-Team\nIn Party or Raid"] = true + --Help System L["Show Team List"] = true diff --git a/Jamba-DisplayTeam/Locales/Locales.xml b/Jamba-DisplayTeam/Locales/Locales.xml index 0ef4e87..3ac59fd 100644 --- a/Jamba-DisplayTeam/Locales/Locales.xml +++ b/Jamba-DisplayTeam/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaDisplayTeam-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-FTL/Jamba-FTL.toc b/Jamba-FTL/Jamba-FTL.toc index ad60a68..af34be5 100644 --- a/Jamba-FTL/Jamba-FTL.toc +++ b/Jamba-FTL/Jamba-FTL.toc @@ -1,12 +1,12 @@ -## Interface: 70000 +## Interface: 70100 ## Title: JambaFTL ## Notes: JambaFTL ## Author: olipcs (although most of the code is originaly from Jafula) (any changes added to support 4.0.5 from ebony!) -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba ## SavedVariables: JambaFTLProfileDB ## LoadOnDemand: 1 Locales\Locales.xml -JambaFTL.lua \ No newline at end of file +JambaFTL.lua diff --git a/Jamba-FTL/JambaFTL.lua b/Jamba-FTL/JambaFTL.lua index dd101d9..beee8ff 100644 --- a/Jamba-FTL/JambaFTL.lua +++ b/Jamba-FTL/JambaFTL.lua @@ -701,4 +701,4 @@ end -- Called when the addon is disabled. function AJM:OnDisable() end - \ No newline at end of file + diff --git a/Jamba-FTL/Locales/Locales.xml b/Jamba-FTL/Locales/Locales.xml index a0d3c9f..e6c26a5 100644 --- a/Jamba-FTL/Locales/Locales.xml +++ b/Jamba-FTL/Locales/Locales.xml @@ -9,4 +9,4 @@ Credits: Many thanks goes to Jafula for the awsome JAMBA addon --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaFTL-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-Follow/Jamba-Follow.toc b/Jamba-Follow/Jamba-Follow.toc index a841306..8b3d01a 100644 --- a/Jamba-Follow/Jamba-Follow.toc +++ b/Jamba-Follow/Jamba-Follow.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: JambaFollow ## Notes: JambaFollow ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba diff --git a/Jamba-Follow/JambaFollow.lua b/Jamba-Follow/JambaFollow.lua index a9d2f32..aeeecf5 100644 --- a/Jamba-Follow/JambaFollow.lua +++ b/Jamba-Follow/JambaFollow.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -794,6 +794,10 @@ function AJM:AutoFollowEndSend() if AJM.db.doNotWarnFollowBreakInCombat == true and AJM.outOfCombat == false then canWarn = false end + --Do not warn if a passenger in a vehicle. + if UnitInVehicle("Player") == true and UnitControllingVehicle("player") == false then + canWarn = false + end -- Do not warn if any other members in combat? if AJM.db.doNotWarnFollowBreakMembersInCombat == true and AJM:AreTeamMembersInCombat() == true then canWarn = false diff --git a/Jamba-Follow/Locales/JambaFollow-Locale-enUS.lua b/Jamba-Follow/Locales/JambaFollow-Locale-enUS.lua index 330b19f..c71ef63 100644 --- a/Jamba-Follow/Locales/JambaFollow-Locale-enUS.lua +++ b/Jamba-Follow/Locales/JambaFollow-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba-Follow/Locales/Locales.xml b/Jamba-Follow/Locales/Locales.xml index 9d5d038..5624384 100644 --- a/Jamba-Follow/Locales/Locales.xml +++ b/Jamba-Follow/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaFollow-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-ItemUse/Jamba-ItemUse.toc b/Jamba-ItemUse/Jamba-ItemUse.toc index 223895b..69ad7c1 100644 --- a/Jamba-ItemUse/Jamba-ItemUse.toc +++ b/Jamba-ItemUse/Jamba-ItemUse.toc @@ -1,13 +1,17 @@ -## Interface: 70000 +## Interface: 70100 ## Title: JambaItemUse ## Notes: JambaItemUse ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba ## SavedVariables: JambaItemUseProfileDB ## LoadOnDemand: 1 +## X-Curse-Packaged-Version: Release-7.1.0-5.1.3 +## X-Curse-Project-Name: Jamba +## X-Curse-Project-ID: jamba +## X-Curse-Repository-ID: wow/jamba/mainline Locales\Locales.xml JambaItemUse.lua diff --git a/Jamba-ItemUse/JambaItemUse.lua b/Jamba-ItemUse/JambaItemUse.lua index 7c09b62..2064f70 100644 --- a/Jamba-ItemUse/JambaItemUse.lua +++ b/Jamba-ItemUse/JambaItemUse.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -16,9 +16,11 @@ local AJM = LibStub( "AceAddon-3.0" ):NewAddon( -- Get the Jamba Utilities Library. local JambaUtilities = LibStub:GetLibrary( "JambaUtilities-1.0" ) local JambaHelperSettings = LibStub:GetLibrary( "JambaHelperSettings-1.0" ) -local LibBagUtils = LibStub:GetLibrary( "LibBagUtils-1.0" ) -local LibGratuity = LibStub( "LibGratuity-3.0" ) +--local LibBagUtils = LibStub:GetLibrary( "LibBagUtils-1.0" ) +--local LibGratuity = LibStub( "LibGratuity-3.0" ) local LibActionButton = LibStub( "LibActionButtonJamba-1.0" ) +local tooltipName = "AJMScanner" +local tooltipScanner = CreateFrame("GameTooltip", tooltipName, nil, "GameTooltipTemplate") AJM.SharedMedia = LibStub( "LibSharedMedia-3.0" ) -- Constants and Locale for this module. @@ -61,10 +63,13 @@ AJM.settings = { borderStyle = L["Blizzard Tooltip"], backgroundStyle = L["Blizzard Dialog Background"], itemUseScale = 1, - itemUseTitleHeight = 2, + itemUseTitleHeight = 3, itemUseVerticalSpacing = 3, itemUseHorizontalSpacing = 2, autoAddQuestItemsToBar = true, + autoAddArtifactItemsToBar = true, + autoAddSatchelsItemsToBar = true, + hideClearButton = false, itemBarsSynchronized = true, numberOfItems = 10, numberOfRows = 2, @@ -205,7 +210,17 @@ local function CreateJambaItemUseFrame() AJM.db.frameXOffset = xOffset AJM.db.frameYOffset = yOffset end ) - frame:ClearAllPoints() + -- Artifact Remove Buttion + local updateButton = CreateFrame( "Button", "ButtonUpdate", frame, "UIPanelButtonTemplate" ) + updateButton:SetScript( "OnClick", function() AJM:ClearButton() end ) + updateButton:SetPoint( "TOPRIGHT", frame, "TOPRIGHT", -4, -3 ) + updateButton:SetHeight( 20 ) + updateButton:SetWidth( 70 ) + updateButton:SetText( L["Clear"] ) + updateButton:SetScript("OnEnter", function(self) AJM:ShowTooltip(updateButton, true) end) + updateButton:SetScript("OnLeave", function(self) GameTooltip:Hide() end) + ArtifactUpdateButton = updateButton + frame:ClearAllPoints() frame:SetPoint( AJM.db.framePoint, UIParent, AJM.db.frameRelativePoint, AJM.db.frameXOffset, AJM.db.frameYOffset ) frame:SetBackdrop( { bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", @@ -217,10 +232,40 @@ local function CreateJambaItemUseFrame() frame:SetAlpha(AJM.db.frameAlpha) -- Set the global frame reference for this frame. JambaItemUseFrame = frame + -- Remove unsued items --test AJM:SettingsUpdateBorderStyle() AJM.itemUseCreated = true + AJM.UpdateHeight() end +function AJM:ShowTooltip(frame, show) + if show then + GameTooltip:SetOwner(frame, "ANCHOR_TOP") + GameTooltip:SetPoint("TOPLEFT", frame, "TOPRIGHT", 16, 0) + GameTooltip:ClearLines() + GameTooltip:AddLine(L["Clears items no longer in your bags "], 1, 0.82, 0, 1) + GameTooltip:Show() + else + GameTooltip:Hide() + end +end + + +function AJM:UpdateHeight() + if AJM.db.hideClearButton == false then + AJM.db.itemUseTitleHeight = 2 + local newHeight = AJM.db.itemUseTitleHeight + 20 + ArtifactUpdateButton:Show() + return newHeight + else + AJM.db.itemUseTitleHeight = 2 + oldHeight = AJM.db.itemUseTitleHeight + ArtifactUpdateButton:Hide() + return oldHeight + end +end + + function AJM:ShowItemUseCommand() AJM.db.showItemUse = true AJM:SetItemUseVisibility() @@ -279,12 +324,15 @@ function AJM:UpdateQuestItemsInBar() local action = itemInfo.action if kind == "item" then local itemLink,_,_,_,_,questItem = GetItemInfo( action ) + --AJM:Print("Checking Item...", itemLink, action) if questItem == "Quest" then - --AJM:Print("Checking Item...", itemLink, action) - if AJM:IsInInventory( itemLink ) == false then - --AJM:Print("NOT IN BAGS", itemLink) - AJM.db.itemsAdvanced[iterateItems] = nil - end + if JambaApi.IsCharacterTheMaster( AJM.characterName ) == true then + if AJM:IsInInventory( itemLink ) == false then + --AJM:Print("NOT IN BAGS", itemLink) + AJM.db.itemsAdvanced[iterateItems] = nil + AJM:JambaSendSettings() + end + end end end end @@ -385,16 +433,19 @@ end --ebony test Using the wowapi and not the scanning of tooltips function AJM:CheckForQuestItemAndAddToBar() + --[[ for bag = 0,4,1 do - for slot = 1,GetContainerNumSlots(bag),1 do - local IsQuestItem,StartsQuest,_ = GetContainerItemQuestInfo(bag,slot) - local _,_,_,_,readable,_,itemLink = GetContainerItemInfo(bag,slot) -- readable??? - if not IsQuestItem and StartsQuest then - local itemString = GetItemInfo(itemLink) - AJM:AddAnItemToTheBarIfNotExists( itemLink, true ) - end + for slot = 1,GetContainerNumSlots(bag),1 do + local IsQuestItem,StartsQuest,_ = GetContainerItemQuestInfo(bag,slot) + local _,_,_,_,readable,_,itemLink = GetContainerItemInfo(bag,slot) -- readable??? + -- Quests now auto get started since 7.1 kinda making this usless. + --if not IsQuestItem and StartsQuest then + --local itemString = GetItemInfo(itemLink) + --AJM:AddAnItemToTheBarIfNotExists( itemLink, true) + --end end - end + end + ]] for iterateQuests=1,GetNumQuestLogEntries() do local questLogTitleText,_,_,_,isHeader = GetQuestLogTitle(iterateQuests) if not isHeader then @@ -404,7 +455,8 @@ function AJM:CheckForQuestItemAndAddToBar() local questname,rank = GetItemSpell(questItemLink) -- Only means to detect if the item is usable if questname then if JambaUtilities:DoItemLinksContainTheSameItem( questItemLink, questItemLink ) == true then - AJM:AddAnItemToTheBarIfNotExists( questItemLink, false ) + --AJM:Print("addItem", questItemLink ) + AJM:AddAnItemToTheBarIfNotExists( questItemLink, false) end end end @@ -412,6 +464,111 @@ function AJM:CheckForQuestItemAndAddToBar() end end +-- Add satchels to item bar. +function AJM:CheckForSatchelsItemAndAddToBar() + for bag = 0, NUM_BAG_SLOTS do + for slot = 1, GetContainerNumSlots(bag) do + local texture, count, locked, quality, readable, lootable, link, isFiltered, hasNoValue, itemID = GetContainerItemInfo(bag, slot) + --AJM:Print("test", link, lootable) + if link and lootable then + --AJM:Print("satchelsFound", link) + AJM:AddAnItemToTheBarIfNotExists( link, false ) + end + end + end +end + +-- Removes unused items. + +function AJM:ClearButton() + local state = "0" + for iterateItems = 1, AJM.maximumNumberOfItems, 1 do + local itemContainer = AJM.itemContainer[iterateItems] + if itemContainer == nil then + AJM:CreateJambaItemUseItemContainer( iterateItems, parentFrame ) + itemContainer = AJM.itemContainer[iterateItems] + end + local containerButton = itemContainer["container"] + local itemInfo = AJM:GetItemFromItemDatabase( iterateItems ) + local kind = itemInfo.kind + local action = itemInfo.action + if kind == "item" then + local name, itemLink,_,_,_,itemType,questItem = GetItemInfo( action ) + if itemLink and itemLink:match("item:%d") then + tooltipScanner:SetOwner(UIParent, "ANCHOR_NONE") + tooltipScanner:SetHyperlink(itemLink) + --AJM:Print("scanTooltip", itemLink) + local tooltipText = _G[tooltipName.."TextLeft3"]:GetText() + --AJM:Print("tooltiptest", tooltipText, tooltipTextTwo) + if tooltipText == nil or tooltipText ~= "Unique" then + --AJM:Print("testWorks!", itemLink) + if AJM:IsInInventory( name ) == false then + --AJM:Print("NOT IN BAGS", itemLink) + AJM.db.itemsAdvanced[iterateItems] = nil + AJM:SettingsRefresh() + AJM:JambaSendSettings() + end + end + end + end + end +end + +-- Adds artifact power items to item bar. +function AJM:CheckForArtifactItemAndAddToBar() + for bag = 0, NUM_BAG_SLOTS do + for slot = 1, GetContainerNumSlots(bag) do + local itemLink = GetContainerItemLink(bag, slot) + --AJM:Print("bagcheck", itemLink) + if itemLink and itemLink:match("item:%d") then + tooltipScanner:SetOwner(UIParent, "ANCHOR_NONE") + tooltipScanner:SetHyperlink(itemLink) + --AJM:Print("scanTooltip", itemLink) + local tooltipText = _G[tooltipName.."TextLeft2"]:GetText() + if tooltipText and tooltipText:match(ARTIFACT_POWER) then + --AJM:Print("artifactPowerFound", itemLink) + AJM:AddAnItemToTheBarIfNotExists( itemLink, false ) + end + end + end + end +end + +--Removes artifact power after used. +--[[ +function AJM:UpdateArtifactItemsInBar() + local state = "0" + for iterateItems = 1, AJM.maximumNumberOfItems, 1 do + local itemContainer = AJM.itemContainer[iterateItems] + if itemContainer == nil then + AJM:CreateJambaItemUseItemContainer( iterateItems, parentFrame ) + itemContainer = AJM.itemContainer[iterateItems] + end + local containerButton = itemContainer["container"] + local itemInfo = AJM:GetItemFromItemDatabase( iterateItems ) + local kind = itemInfo.kind + local action = itemInfo.action + if kind == "item" then + local name, itemLink,_,_,_,_,questItem = GetItemInfo( action ) + if itemLink and itemLink:match("item:%d") then + tooltipScanner:SetOwner(UIParent, "ANCHOR_NONE") + tooltipScanner:SetHyperlink(itemLink) + --AJM:Print("scanTooltip", name, itemLink) + local tooltipText = _G[tooltipName.."TextLeft2"]:GetText() + if tooltipText and tooltipText:match(ARTIFACT_POWER) then + if AJM:IsInInventory( name ) == false then + --AJM:Print("NOT IN BAGS", itemLink) + AJM.db.itemsAdvanced[iterateItems] = nil + AJM:SettingsRefresh() + AJM:JambaSendSettings() + end + end + end + end + end +end +--]] + --Checks the item is in the player players bag function AJM:IsInInventory(itemLink) for bag = 0,4,1 do @@ -433,7 +590,7 @@ function AJM:IsInInventory(itemLink) end -function AJM:AddAnItemToTheBarIfNotExists( itemLink, startsQuest ) +function AJM:AddAnItemToTheBarIfNotExists( itemLink, startsQuest) local itemInfo local barItemId local iterateItems @@ -441,11 +598,15 @@ function AJM:AddAnItemToTheBarIfNotExists( itemLink, startsQuest ) local itemId = JambaUtilities:GetItemIdFromItemLink( itemLink ) for iterateItems = 1, AJM.db.numberOfItems, 1 do itemInfo = AJM:GetItemFromItemDatabase( iterateItems ) + --AJM:Print("check", itemLink, itemInfo.action) if itemInfo.kind == "item" and itemInfo.action == itemId then alreadyExists = true + -- AJM:Print("test", itemLink ) + return end end if alreadyExists == false then + --AJM:Print("test2", itemLink ) for iterateItems = 1, AJM.db.numberOfItems, 1 do itemInfo = AJM:GetItemFromItemDatabase( iterateItems ) --Checks the items we talking about is in the bags of the player. @@ -453,9 +614,9 @@ function AJM:AddAnItemToTheBarIfNotExists( itemLink, startsQuest ) AJM:AddItemToItemDatabase( iterateItems, "item", itemId ) AJM:JambaSendSettings() AJM:SettingsRefresh() - if startsQuest == true then - AJM:JambaSendMessageToTeam( AJM.db.messageArea, L["New item that starts a quest found!"], false ) - end + if startsQuest then + AJM:JambaSendMessageToTeam( AJM.db.messageArea, L["New item that starts a quest found!"], false ) + end return end end @@ -490,7 +651,8 @@ function AJM:RefreshItemUseControls() row = math.floor((iterateItems - 1) / itemsPerRow) rowLeftModifier = math.floor((iterateItems-1) % itemsPerRow) positionLeft = 6 + (AJM.itemSize * rowLeftModifier) + (AJM.db.itemUseHorizontalSpacing * rowLeftModifier) - positionTop = -AJM.db.itemUseTitleHeight - (AJM.db.itemUseVerticalSpacing * 2) - (row * AJM.itemSize) - (row * AJM.db.itemUseVerticalSpacing) + local getHeight = AJM.UpdateHeight() + positionTop = -getHeight - (AJM.db.itemUseVerticalSpacing * 2) - (row * AJM.itemSize) - (row * AJM.db.itemUseVerticalSpacing) containerButton:SetWidth( AJM.itemSize ) containerButton:SetHeight( AJM.itemSize ) containerButton:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", positionLeft, positionTop ) @@ -503,7 +665,8 @@ function AJM:UpdateJambaItemUseDimensions() local frame = JambaItemUseFrame local itemsPerRow = AJM.db.numberOfItems / AJM.db.numberOfRows frame:SetWidth( 5 + (AJM.db.itemUseHorizontalSpacing * (3 + itemsPerRow-1)) + (AJM.itemSize * itemsPerRow) ) - frame:SetHeight( AJM.db.itemUseTitleHeight + (AJM.itemSize * AJM.db.numberOfRows) + (AJM.db.itemUseVerticalSpacing * AJM.db.numberOfRows) + (AJM.db.itemUseVerticalSpacing * 3)) + local getHeight = AJM.UpdateHeight() + frame:SetHeight( getHeight + (AJM.itemSize * AJM.db.numberOfRows) + (AJM.db.itemUseVerticalSpacing * AJM.db.numberOfRows) + (AJM.db.itemUseVerticalSpacing * 3)) frame:SetScale( AJM.db.itemUseScale ) end @@ -568,6 +731,33 @@ local function SettingsCreateOptions( top ) L["Automatically Add Quest Items To Bar"], AJM.SettingsToggleAutoAddQuestItem ) + movingTop = movingTop - checkBoxHeight - verticalSpacing + AJM.settingsControl.displayOptionsCheckBoxAutoAddArtifactItem = JambaHelperSettings:CreateCheckBox( + AJM.settingsControl, + headingWidth, + left, + movingTop, + L["Automatically Add Artifact Power Items To Bar"], + AJM.SettingsToggleAutoAddArtifactItem + ) + movingTop = movingTop - checkBoxHeight - verticalSpacing + AJM.settingsControl.displayOptionsCheckBoxAutoAddSatchelsItem = JambaHelperSettings:CreateCheckBox( + AJM.settingsControl, + headingWidth, + left, + movingTop, + L["Automatically Add Satchel Items To Bar"], + AJM.SettingsToggleAutoAddSatchelsItem + ) + movingTop = movingTop - checkBoxHeight - verticalSpacing + AJM.settingsControl.displayOptionsCheckBoxHideClearButton = JambaHelperSettings:CreateCheckBox( + AJM.settingsControl, + headingWidth, + left, + movingTop, + L["Hides the clear Button"], + AJM.SettingsToggleHideClearButton + ) movingTop = movingTop - checkBoxHeight - verticalSpacing AJM.settingsControl.displayOptionsCheckBoxHideItemUseInCombat = JambaHelperSettings:CreateCheckBox( AJM.settingsControl, @@ -720,6 +910,9 @@ function AJM:SettingsRefresh() AJM.settingsControl.displayOptionsItemUseNumberOfItems:SetValue( AJM.db.numberOfItems ) AJM.settingsControl.displayOptionsItemUseNumberOfRows:SetValue( AJM.db.numberOfRows ) AJM.settingsControl.displayOptionsCheckBoxAutoAddQuestItem:SetValue( AJM.db.autoAddQuestItemsToBar ) + AJM.settingsControl.displayOptionsCheckBoxAutoAddArtifactItem:SetValue( AJM.db.autoAddArtifactItemsToBar ) + AJM.settingsControl.displayOptionsCheckBoxAutoAddSatchelsItem:SetValue( AJM.db.autoAddSatchelsItemsToBar ) + AJM.settingsControl.displayOptionsCheckBoxHideClearButton:SetValue( AJM.db.hideClearButton ) AJM.settingsControl.displayOptionsCheckBoxItemBarsSynchronized:SetValue( AJM.db.itemBarsSynchronized ) AJM.settingsControl.displayOptionsItemUseScaleSlider:SetValue( AJM.db.itemUseScale ) AJM.settingsControl.displayOptionsItemUseTransparencySlider:SetValue( AJM.db.frameAlpha ) @@ -737,6 +930,9 @@ function AJM:SettingsRefresh() AJM.settingsControl.displayOptionsItemUseNumberOfItems:SetDisabled( not AJM.db.showItemUse ) AJM.settingsControl.displayOptionsItemUseNumberOfRows:SetDisabled( not AJM.db.showItemUse ) AJM.settingsControl.displayOptionsCheckBoxAutoAddQuestItem:SetDisabled( not AJM.db.showItemUse ) + AJM.settingsControl.displayOptionsCheckBoxAutoAddArtifactItem:SetDisabled( not AJM.db.showItemUse ) + AJM.settingsControl.displayOptionsCheckBoxAutoAddSatchelsItem:SetDisabled( not AJM.db.showItemUse ) + AJM.settingsControl.displayOptionsCheckBoxHideClearButton:SetDisabled( not AJM.db.showItemUse ) AJM.settingsControl.displayOptionsCheckBoxItemBarsSynchronized:SetDisabled( not AJM.db.showItemUse ) AJM.settingsControl.displayOptionsItemUseScaleSlider:SetDisabled( not AJM.db.showItemUse ) AJM.settingsControl.displayOptionsItemUseTransparencySlider:SetDisabled( not AJM.db.showItemUse ) @@ -750,6 +946,7 @@ function AJM:SettingsRefresh() AJM:SettingsUpdateBorderStyle() AJM:SetItemUseVisibility() AJM:UpdateItemsInBar() + AJM:UpdateHeight() end else AJM.updateSettingsAfterCombat = true @@ -780,6 +977,21 @@ function AJM:SettingsToggleAutoAddQuestItem( event, checked ) AJM:SettingsRefresh() end +function AJM:SettingsToggleAutoAddArtifactItem( event, checked ) + AJM.db.autoAddArtifactItemsToBar = checked + AJM:SettingsRefresh() +end + +function AJM:SettingsToggleAutoAddSatchelsItem( event, checked ) + AJM.db.autoAddSatchelsItemsToBar = checked + AJM:SettingsRefresh() +end + +function AJM:SettingsToggleHideClearButton(event, checked ) + AJM.db.hideClearButton = checked + AJM:SettingsRefresh() +end + function AJM:SettingsToggleItemBarsSynchronized( event, checked ) AJM.db.itemBarsSynchronized = checked AJM:SettingsRefresh() @@ -900,6 +1112,9 @@ function AJM:JambaOnSettingsReceived( characterName, settings ) AJM.db.itemUseVerticalSpacing = settings.itemUseVerticalSpacing AJM.db.itemUseHorizontalSpacing = settings.itemUseHorizontalSpacing AJM.db.autoAddQuestItemsToBar = settings.autoAddQuestItemsToBar + AJM.db.autoAddArtifactItemsToBar = settings.autoAddArtifactItemsToBar + AJM.db.autoAddSatchelsItemsToBar = settings.autoAddSatchelsItemsToBar + AJM.db.hideClearButton = settings.hideClearButton AJM.db.itemBarsSynchronized = settings.itemBarsSynchronized AJM.db.numberOfItems = settings.numberOfItems AJM.db.numberOfRows = settings.numberOfRows @@ -960,19 +1175,31 @@ end function AJM:BAG_UPDATE() if not InCombatLockdown() then AJM:UpdateItemsInBar() + AJM:UpdateQuestItemsInBar() + --AJM:ScheduleTimer( "UpdateArtifactItemsInBar", 1 ) end end function AJM:QUEST_UPDATE() if not InCombatLockdown() then - AJM:UpdateQuestItemsInBar() end + AJM:UpdateQuestItemsInBar() + end end function AJM:ITEM_PUSH() + if AJM.db.showItemUse == false then + return + end if AJM.db.autoAddQuestItemsToBar == true then - AJM:ScheduleTimer( "CheckForQuestItemAndAddToBar", 2 ) + AJM:ScheduleTimer( "CheckForQuestItemAndAddToBar", 1 ) end + if AJM.db.autoAddArtifactItemsToBar == true then + AJM:ScheduleTimer( "CheckForArtifactItemAndAddToBar", 1 ) + end + if AJM.db.autoAddSatchelsItemsToBar == true then + AJM:ScheduleTimer( "CheckForSatchelsItemAndAddToBar", 1 ) + end end function AJM:UPDATE_BINDINGS() diff --git a/Jamba-ItemUse/Locales/JambaItemUse-Locale-enUS.lua b/Jamba-ItemUse/Locales/JambaItemUse-Locale-enUS.lua index ee0fe64..51677ad 100644 --- a/Jamba-ItemUse/Locales/JambaItemUse-Locale-enUS.lua +++ b/Jamba-ItemUse/Locales/JambaItemUse-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -65,4 +65,10 @@ L["Number Of Rows"] = true L["New item that starts a quest found!"] = true L["Clear Item Bar"] = true L["Clear the item bar (remove all items)."] = true +L["Hides the clear Button"] = true L["Item Bar Cleared"] = true +L["Automatically Add Artifact Power Items To Bar"] = true +L["Automatically Add Satchel Items To Bar"] = true +L["New Artifact Power Item found!"] = true +L["Clear"] = true +L["Clears items no longer in your bags "] = true diff --git a/Jamba-ItemUse/Locales/Locales.xml b/Jamba-ItemUse/Locales/Locales.xml index 14d9304..e9fe15b 100644 --- a/Jamba-ItemUse/Locales/Locales.xml +++ b/Jamba-ItemUse/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaItemUse-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-Macro/Jamba-Macro.toc b/Jamba-Macro/Jamba-Macro.toc index 3cdb663..a28eba0 100644 --- a/Jamba-Macro/Jamba-Macro.toc +++ b/Jamba-Macro/Jamba-Macro.toc @@ -1,12 +1,12 @@ -## Interface: 70000 +## Interface: 70100 ## Title: Jamba-Macro ## Notes: Jamba-Macro ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba ## SavedVariables: JambaMacroProfileDB ## LoadOnDemand: 1 Locales\Locales.xml -JambaMacro.lua \ No newline at end of file +JambaMacro.lua diff --git a/Jamba-Macro/JambaMacro.lua b/Jamba-Macro/JambaMacro.lua index 3707f92..4c6d016 100644 --- a/Jamba-Macro/JambaMacro.lua +++ b/Jamba-Macro/JambaMacro.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba-Macro/Locales/Jamba-Macro-Locale-enUS.lua b/Jamba-Macro/Locales/Jamba-Macro-Locale-enUS.lua index 944995c..a30a082 100644 --- a/Jamba-Macro/Locales/Jamba-Macro-Locale-enUS.lua +++ b/Jamba-Macro/Locales/Jamba-Macro-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba-Macro/Locales/Locales.xml b/Jamba-Macro/Locales/Locales.xml index bd8b828..079efe2 100644 --- a/Jamba-Macro/Locales/Locales.xml +++ b/Jamba-Macro/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="Jamba-Macro-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-Mount/Jamba-Mount.toc b/Jamba-Mount/Jamba-Mount.toc new file mode 100644 index 0000000..67a08fa --- /dev/null +++ b/Jamba-Mount/Jamba-Mount.toc @@ -0,0 +1,12 @@ +## Interface: 70100 +## Title: Jamba-Mount +## Notes: Jamba-Mount +## Author: Ebony +## Version: 7.1.5-5.1.7 +## X-Category: Interface Enhancements +## X-Child-Of: Jamba +## Dependencies: Jamba +## SavedVariables: JambaMountProfileDB +## LoadOnDemand: 1 +Locales\Locales.xml +JambaMount.lua diff --git a/Jamba-Mount/JambaMount.lua b/Jamba-Mount/JambaMount.lua new file mode 100644 index 0000000..d141145 --- /dev/null +++ b/Jamba-Mount/JambaMount.lua @@ -0,0 +1,427 @@ +--[[ +Jamba - Jafula's Awesome Multi-Boxer Assistant +Copyright 2008 - 2017 Michael "Jafula" Miller +License: The MIT License + +This is was made by Ebony with the idea from Hydra +]]-- + +-- Create the addon using AceAddon-3.0 and embed some libraries. +local AJM = LibStub( "AceAddon-3.0" ):NewAddon( + "JambaMount", + "JambaModule-1.0", + "AceConsole-3.0", + "AceEvent-3.0", + "AceHook-3.0", + "AceTimer-3.0" +) + +-- Get the Jamba Utilities Library. +local JambaUtilities = LibStub:GetLibrary( "JambaUtilities-1.0" ) +local JambaHelperSettings = LibStub:GetLibrary( "JambaHelperSettings-1.0" ) + +-- Constants and Locale for this module. +AJM.moduleName = "Jamba-Mount" +AJM.settingsDatabaseName = "JambaMountProfileDB" +AJM.chatCommand = "jamba-mount" +local L = LibStub( "AceLocale-3.0" ):GetLocale( AJM.moduleName ) +AJM.parentDisplayName = L["Toon"] +AJM.moduleDisplayName = L["Mount"] + +-- Settings - the values to store and their defaults for the settings database. +AJM.settings = { + profile = { + mountWithTeam = true, + dismountWithTeam = true, + dismountWithMaster = true, + mountInRange = false, + --mountName = nil, + --messageArea = JambaApi.DefaultMessageArea(), + warningArea = JambaApi.DefaultWarningArea() + }, +} + +-- Configuration. +function AJM:GetConfiguration() + local configuration = { + name = AJM.moduleDisplayName, + handler = AJM, + type = 'group', + childGroups = "tab", + get = "JambaConfigurationGetSetting", + set = "JambaConfigurationSetSetting", + args = { + push = { + type = "input", + name = L["Push Settings"], + desc = L["Push the Mount settings to all characters in the team."], + usage = "/jamba-mount push", + get = false, + set = "JambaSendSettings", + order = 4, + guiHidden = true, + }, + }, + } + return configuration +end + +------------------------------------------------------------------------------------------------------------- +-- Command this module sends. +------------------------------------------------------------------------------------------------------------- + +AJM.COMMAND_MOUNT_ME = "JambaMountMe" +AJM.COMMAND_MOUNT_DISMOUNT = "JambaMountDisMount" + +------------------------------------------------------------------------------------------------------------- +-- Messages module sends. +------------------------------------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------------------------------------- +-- Addon initialization, enabling and disabling. +------------------------------------------------------------------------------------------------------------- + +-- Initialise the module. +function AJM:OnInitialize() + -- Create the settings control. + AJM:SettingsCreate() + -- Initialse the JambaModule part of this module. + AJM:JambaModuleInitialize( AJM.settingsControl.widgetSettings.frame ) + -- Populate the settings. + AJM:SettingsRefresh() +end + +-- Called when the addon is enabled. +function AJM:OnEnable() +-- AJM:RegisterEvent("PLAYER_REGEN_ENABLED") +-- AJM:RegisterEvent("PLAYER_REGEN_DISABLED") + AJM:RegisterEvent("UNIT_SPELLCAST_START") + AJM:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED") + --AJM:RegisterEvent("UNIT_AURA") + AJM:RegisterMessage( JambaApi.MESSAGE_MESSAGE_AREAS_CHANGED, "OnMessageAreasChanged" ) + +end + +-- Called when the addon is disabled. +function AJM:OnDisable() + -- AceHook-3.0 will tidy up the hooks for us. +end + +function AJM:SettingsCreate() + AJM.settingsControl = {} + -- Create the settings panel. + JambaHelperSettings:CreateSettings( + AJM.settingsControl, + AJM.moduleDisplayName, + AJM.parentDisplayName, + AJM.SettingsPushSettingsClick + ) + local bottomOfInfo = AJM:SettingsCreateMount( JambaHelperSettings:TopOfSettings() ) + AJM.settingsControl.widgetSettings.content:SetHeight( -bottomOfInfo ) + -- Help + local helpTable = {} + JambaHelperSettings:CreateHelp( AJM.settingsControl, helpTable, AJM:GetConfiguration() ) +end + +function AJM:SettingsPushSettingsClick( event ) + AJM:JambaSendSettings() +end + +function AJM:SettingsCreateMount( top ) + local checkBoxHeight = JambaHelperSettings:GetCheckBoxHeight() + local left = JambaHelperSettings:LeftOfSettings() + local headingHeight = JambaHelperSettings:HeadingHeight() + local headingWidth = JambaHelperSettings:HeadingWidth( false ) + local dropdownHeight = JambaHelperSettings:GetDropdownHeight() + local verticalSpacing = JambaHelperSettings:GetVerticalSpacing() + local movingTop = top + JambaHelperSettings:CreateHeading( AJM.settingsControl, L["Mount Options"], movingTop, false ) + movingTop = movingTop - headingHeight + AJM.settingsControl.checkBoxMountWithTeam = JambaHelperSettings:CreateCheckBox( + AJM.settingsControl, + headingWidth, + left, + movingTop, + L["Mount with Team"], + AJM.SettingsToggleMountWithTeam + ) + movingTop = movingTop - headingHeight + AJM.settingsControl.checkBoxDismountWithTeam = JambaHelperSettings:CreateCheckBox( + AJM.settingsControl, + headingWidth, + left, + movingTop, + L["Dismount with Team"], + AJM.SettingsToggleDisMountWithTeam, + L["Dismount with Character That Dismount"] + ) + movingTop = movingTop - headingHeight + AJM.settingsControl.checkBoxDismountWithMaster = JambaHelperSettings:CreateCheckBox( + AJM.settingsControl, + headingWidth, + left, + movingTop, + L["Only Dismount's from Master"], + AJM.SettingsToggleDisMountWithMaster, + L["Only Dismount's from Master character."] + ) + movingTop = movingTop - headingHeight + AJM.settingsControl.checkBoxMountInRange = JambaHelperSettings:CreateCheckBox( + AJM.settingsControl, + headingWidth, + left, + movingTop, + L["Only Mount when in Range"], + AJM.SettingsToggleMountInRange, + L["Only Works In a party!"] + ) +-- movingTop = movingTop - checkBoxHeight +-- AJM.settingsControl.dropdownMessageArea = JambaHelperSettings:CreateDropdown( +-- AJM.settingsControl, +-- headingWidth, +-- left, +-- movingTop, +-- L["Message Area"] +-- ) +-- AJM.settingsControl.dropdownMessageArea:SetList( JambaApi.MessageAreaList() ) +-- AJM.settingsControl.dropdownMessageArea:SetCallback( "OnValueChanged", AJM.SettingsSetMessageArea ) + movingTop = movingTop - checkBoxHeight + AJM.settingsControl.dropdownWarningArea = JambaHelperSettings:CreateDropdown( + AJM.settingsControl, + headingWidth, + left, + movingTop, + L["Send Warning Area"] + ) + AJM.settingsControl.dropdownWarningArea:SetList( JambaApi.MessageAreaList() ) + AJM.settingsControl.dropdownWarningArea:SetCallback( "OnValueChanged", AJM.SettingsSetWarningArea ) + + + + movingTop = movingTop - dropdownHeight - verticalSpacing + return movingTop +end + +function AJM:OnMessageAreasChanged( message ) + --AJM.settingsControl.dropdownMessageArea:SetList( JambaApi.MessageAreaList() ) + AJM.settingsControl.dropdownWarningArea:SetList( JambaApi.MessageAreaList() ) +end + +function AJM:SettingsSetWarningArea( event, value ) + AJM.db.warningArea = value + AJM:SettingsRefresh() +end + +--function AJM:SettingsSetMessageArea( event, value ) +-- AJM.db.messageArea = value +-- AJM:SettingsRefresh() +--end + +function AJM:SettingsToggleMountWithTeam( event, checked ) + AJM.db.mountWithTeam = checked + AJM:SettingsRefresh() +end + +function AJM:SettingsToggleDisMountWithTeam( event, checked ) + AJM.db.dismountWithTeam = checked + AJM:SettingsRefresh() +end + +function AJM:SettingsToggleDisMountWithMaster( event, checked ) + AJM.db.dismountWithMaster = checked + AJM:SettingsRefresh() +end + +function AJM:SettingsToggleMountInRange( event, checked ) + AJM.db.mountInRange = checked + AJM:SettingsRefresh() +end + +-- Settings received. +function AJM:JambaOnSettingsReceived( characterName, settings ) + if characterName ~= AJM.characterName then + -- Update the settings. + AJM.db.mountWithTeam = settings.mountWithTeam + AJM.db.dismountWithTeam = settings.dismountWithTeam + AJM.db.dismountWithMaster = settings.dismountWithMaster + AJM.db.mountInRange = settings.mountInRange + AJM.db.messageArea = settings.messageArea + AJM.db.warningArea = settings.warningArea + -- Refresh the settings. + AJM:SettingsRefresh() + -- Tell the player. + AJM:Print( L["Settings received from A."]( characterName ) ) + -- Tell the team? + --AJM:JambaSendMessageToTeam( AJM.db.messageArea, L["Settings received from A."]( characterName ), false ) + end +end + +function AJM:BeforeJambaProfileChanged() +end + +function AJM:OnJambaProfileChanged() + AJM:SettingsRefresh() +end + +function AJM:SettingsRefresh() + AJM.settingsControl.checkBoxMountWithTeam:SetValue( AJM.db.mountWithTeam ) + AJM.settingsControl.checkBoxDismountWithTeam:SetValue( AJM.db.dismountWithTeam ) + AJM.settingsControl.checkBoxDismountWithMaster:SetValue( AJM.db.dismountWithMaster ) + AJM.settingsControl.checkBoxMountInRange:SetValue( AJM.db.mountInRange ) + --AJM.settingsControl.dropdownMessageArea:SetValue( AJM.db.messageArea ) + AJM.settingsControl.dropdownWarningArea:SetValue( AJM.db.warningArea ) + -- Set state. + --AJM.settingsControl.checkBoxMountWithTeam:SetDisabled( not AJM.db.mountWithTeam ) + AJM.settingsControl.checkBoxDismountWithTeam:SetDisabled( not AJM.db.mountWithTeam ) + AJM.settingsControl.checkBoxDismountWithMaster:SetDisabled( not AJM.db.dismountWithTeam or not AJM.db.mountWithTeam ) + AJM.settingsControl.checkBoxMountInRange:SetDisabled( not AJM.db.mountWithTeam ) +end + +------------------------------------------------------------------------------------------------------------- +-- JambaMount functionality. +------------------------------------------------------------------------------------------------------------- + +function AJM:UNIT_SPELLCAST_START(event, unitID, spell, rank, lineID, spellID, ... ) + --AJM:Print("Looking for Spells.", unitID, spellID, spell) + AJM.castingMount = nil + if unitID == "player" then + local mountIDs = C_MountJournal.GetMountIDs() + for i = 1, #mountIDs do + --local name , id, icon, active = C_MountJournal.GetMountInfoByID(i) + local creatureName,_,_,_,_,_,_,_,_,_,_,mountID = C_MountJournal.GetMountInfoByID(mountIDs[i]) + --AJM:Print("Test", spell, creatureName) + if spell == creatureName then + --AJM:Print("SendtoTeam", "name", creatureName, "id", mountID) + if IsShiftKeyDown() == false then + AJM:JambaSendCommandToTeam( AJM.COMMAND_MOUNT_ME, creatureName, mountID ) + AJM.castingMount = creatureName + break + end + end + end + end +end + +function AJM:UNIT_SPELLCAST_SUCCEEDED(event, unitID, spell, rank, lineID, spellID, ... ) + if unitID ~= "player" then + return + end + --AJM:Print("Looking for Spells Done", spell, AJM.castingMount) + if spell == AJM.castingMount then + --AJM:Print("test", spell) + AJM.isMounted = spell + --AJM:Print("Mounted!", AJM.isMounted) + AJM:RegisterEvent("UNIT_AURA") + --else + -- SomeThing gone wrong! so going to cast a random mount! + --AJM:Print("This Mount is not supported!", spell) + --AJM:JambaSendCommandToTeam( AJM.COMMAND_MOUNT_ME, "Random", "0" ) + end + +end + +function AJM:UNIT_AURA(event, unitID, ... ) + --AJM:Print("tester", unitID, AJM.isMounted) + if unitID ~= "player" or AJM.isMounted == nil or AJM.db.dismountWithTeam == false then + return + end + if not UnitBuff( unitID, AJM.isMounted) then + --AJM:Print("I have Dismounted - Send to team!") + if AJM.db.dismountWithMaster == true then + if JambaApi.IsCharacterTheMaster( AJM.characterName ) == true then + if IsShiftKeyDown() == false then + --AJM:Print("test") + AJM:JambaSendCommandToTeam( AJM.COMMAND_MOUNT_DISMOUNT ) + AJM:UnregisterEvent("UNIT_AURA") + end + else + --AJM:Print("test1") + return + end + else + AJM:JambaSendCommandToTeam( AJM.COMMAND_MOUNT_DISMOUNT ) + AJM:UnregisterEvent("UNIT_AURA") + end + end +end + +function AJM:TeamMount(characterName, name, mountID) + --AJM:Print("testTeamMount", characterName, name, mountID ) + --mount with team truned off. + if AJM.db.mountWithTeam == false then + return + end + -- already mounted. + if IsMounted() then + return + end + -- Checks if character is in range. + if AJM.db.mountInRange == true then + if UnitIsVisible(Ambiguate(characterName, "none") ) == false then + --AJM:Print("UnitIsNotVisible", characterName) + return + end + end + -- Checks done now the fun stuff! + --Do i have the same mount as master? + hasMount = false + local creatureName, spellID, icon, active, isUsable, sourceType, isFavorite, isFactionSpecific, faction, hideOnChar, isCollected, mountID = C_MountJournal.GetMountInfoByID(mountID) + if isUsable == true then + --AJM:Print("i have this Mount", creatureName) + hasMount = true + mount = mountID + else + --AJM:Print("i Do not have Mount", creatureName) + for i = 1, C_MountJournal.GetNumMounts() do + local creatureName, spellID, icon, active, isUsable, sourceType, isFavorite, isFactionSpecific, faction, hideOnChar, isCollected, mountID = C_MountJournal.GetMountInfoByID(i) + --AJM:Print("looking for a mount i can use", i) + if isUsable == true then + mount = mountID + hasMount = true + break + end + end + end + +--AJM:Print("test1420", mount, name) + -- for unsupported mounts. + if hasMount == true then + --AJM:Print("test14550", mount, name ) + if name == "Random" then + C_MountJournal.SummonByID(0) + else + --AJM:Print("test1054" ) + C_MountJournal.SummonByID( mount ) + end + if IsMounted() == false then + AJM:ScheduleTimer( "AmNotMounted", 2 ) + end + end +end + +function AJM:AmNotMounted() + if IsMounted() == false then + --AJM:Print("test") + AJM:JambaSendMessageToTeam( AJM.db.warningArea, L["I am unable to Mount."], false ) + end +end + + + +-- A Jamba command has been received. +function AJM:JambaOnCommandReceived( characterName, commandName, ... ) + if characterName ~= self.characterName then + if commandName == AJM.COMMAND_MOUNT_ME then + --AJM:Print("command") + AJM:TeamMount( characterName, ... ) + end + -- Dismount if mounted! + if commandName == AJM.COMMAND_MOUNT_DISMOUNT then + --AJM:Print("time to Dismount") + if IsMounted() then + Dismount() + end + end + end +end diff --git a/Jamba-Mount/Locales/JambaMount-Locale-enUS.lua b/Jamba-Mount/Locales/JambaMount-Locale-enUS.lua new file mode 100644 index 0000000..47f0f36 --- /dev/null +++ b/Jamba-Mount/Locales/JambaMount-Locale-enUS.lua @@ -0,0 +1,27 @@ +--[[ +Jamba - Jafula's Awesome Multi-Boxer Assistant +Copyright 2008 - 2017 Michael "Jafula" Miller +License: The MIT License +]]-- + +local L = LibStub("AceLocale-3.0"):NewLocale( "Jamba-Mount", "enUS", true ) +L["Settings received from A."] = function( characterName ) + return "Settings received from "..characterName.."." +end + +L["Toon"] = true +L["Mount"] = true +L["Mount Options"] = true +L["Push Settings"] = true +L["Push the Mount settings to all characters in the team."] = true +L["Mount with Team"] = true +L["Dismount with Team"] = true +L["Only Dismount's from Master"] = true +L["Only Mount when in Range"] = true +L["Message Area"] = true +L["Send Warning Area"] = true +---------------Help System----------------------- +L["I am unable to Mount."] = true +L["Only Works In a party!"] = true +L["Dismount with Character That Dismount"] = true +L["Only Dismount's from Master character."] = true diff --git a/Jamba-Mount/Locales/Locales.xml b/Jamba-Mount/Locales/Locales.xml new file mode 100644 index 0000000..ae1937a --- /dev/null +++ b/Jamba-Mount/Locales/Locales.xml @@ -0,0 +1,9 @@ +<!-- +Jamba - Jafula's Awesome Multi-Boxer Assistant +Copyright 2008 - 2017 Michael "Jafula" Miller +License: The MIT License +--> + +<Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> + <Script file="JambaMount-Locale-enUS.lua" /> +</Ui> diff --git a/Jamba-Purchase/Jamba-Purchase.toc b/Jamba-Purchase/Jamba-Purchase.toc index edc0913..384b5ab 100644 --- a/Jamba-Purchase/Jamba-Purchase.toc +++ b/Jamba-Purchase/Jamba-Purchase.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: Jamba-Purchase ## Notes: Jamba-Purchase ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba diff --git a/Jamba-Purchase/JambaPurchase.lua b/Jamba-Purchase/JambaPurchase.lua index ef9d799..569c4ec 100644 --- a/Jamba-Purchase/JambaPurchase.lua +++ b/Jamba-Purchase/JambaPurchase.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba-Purchase/Locales/JambaPurchase-Locale-enUS.lua b/Jamba-Purchase/Locales/JambaPurchase-Locale-enUS.lua index f55a4ac..6528163 100644 --- a/Jamba-Purchase/Locales/JambaPurchase-Locale-enUS.lua +++ b/Jamba-Purchase/Locales/JambaPurchase-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba-Purchase/Locales/Locales.xml b/Jamba-Purchase/Locales/Locales.xml index ba0e513..32ff556 100644 --- a/Jamba-Purchase/Locales/Locales.xml +++ b/Jamba-Purchase/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaPurchase-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-Quest/Jamba-Quest.toc b/Jamba-Quest/Jamba-Quest.toc index 49be9a0..4f84694 100644 --- a/Jamba-Quest/Jamba-Quest.toc +++ b/Jamba-Quest/Jamba-Quest.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: JambaQuest ## Notes: JambaQuest ## Author: Ebony, DropDownchanges by Schilm, Former Author: Jafula -## Version: 7.0.3-5.0.1 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba diff --git a/Jamba-Quest/JambaQuest.lua b/Jamba-Quest/JambaQuest.lua index 685fb59..b2ddcf7 100644 --- a/Jamba-Quest/JambaQuest.lua +++ b/Jamba-Quest/JambaQuest.lua @@ -1,6 +1,6 @@ --[[ Jamba -- Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --]] @@ -177,7 +177,7 @@ function AJM:OnEnable() AJM:RegisterEvent( "QUEST_PROGRESS" ) AJM:RegisterEvent( "WORLD_MAP_UPDATE" ) AJM:RegisterEvent( "ZONE_CHANGED_NEW_AREA" ) - -- Quest post hooks. + -- Quest post hooks. AJM:SecureHook( "SelectGossipOption" ) AJM:SecureHook( "SelectGossipActiveQuest" ) AJM:SecureHook( "SelectGossipAvailableQuest" ) @@ -186,7 +186,9 @@ function AJM:OnEnable() AJM:SecureHook( "AcceptQuest" ) AJM:SecureHook( "AcknowledgeAutoAcceptQuest" ) AJM:SecureHook( "CompleteQuest" ) - AJM:SecureHook( "DeclineQuest" ) + --AJM:SecureHook( "DeclineQuest" ) + AJM:SecureHook( "IgnoreQuest" ) + AJM:SecureHook( "UnignoreQuest" ) AJM:SecureHook( "GetQuestReward" ) AJM:SecureHook( "ToggleFrame" ) AJM:SecureHook( "ToggleQuestLog" ) @@ -1234,7 +1236,16 @@ function AJM:DoSelectAvailableQuest( sender, questIndex ) end end -function AJM:DeclineQuest() +function AJM:UnignoreQuest() + if AJM.db.mirrorMasterQuestSelectionAndDeclining == true then + if AJM.isInternalCommand == false then + AJM:DebugMessage( "DeclineQuest" ) + AJM:JambaSendCommandToTeam( AJM.COMMAND_DECLINE_QUEST ) + end + end +end + +function AJM:IgnoreQuest() if AJM.db.mirrorMasterQuestSelectionAndDeclining == true then if AJM.isInternalCommand == false then AJM:DebugMessage( "DeclineQuest" ) @@ -1247,7 +1258,13 @@ function AJM:DoDeclineQuest( sender ) if AJM.db.mirrorMasterQuestSelectionAndDeclining == true then AJM.isInternalCommand = true AJM:DebugMessage( "DoDeclineQuest" ) - DeclineQuest() + --DeclineQuest() + local isIgnored = IsQuestIgnored() + if isIgnored then + UnignoreQuest() + else + IgnoreQuest() + end AJM.isInternalCommand = false end end diff --git a/Jamba-Quest/Locales/JambaQuest-Locale-enUS.lua b/Jamba-Quest/Locales/JambaQuest-Locale-enUS.lua index b0b607b..af192dc 100644 --- a/Jamba-Quest/Locales/JambaQuest-Locale-enUS.lua +++ b/Jamba-Quest/Locales/JambaQuest-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba -- Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba-Quest/Locales/Locales.xml b/Jamba-Quest/Locales/Locales.xml index 2dc985f..f632b18 100644 --- a/Jamba-Quest/Locales/Locales.xml +++ b/Jamba-Quest/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaQuest-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-QuestWatcher/Jamba-QuestWatcher.toc b/Jamba-QuestWatcher/Jamba-QuestWatcher.toc index f434bbc..8e5a312 100644 --- a/Jamba-QuestWatcher/Jamba-QuestWatcher.toc +++ b/Jamba-QuestWatcher/Jamba-QuestWatcher.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: JambaQuestWatcher ## Notes: JambaQuestWatcher ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba diff --git a/Jamba-QuestWatcher/JambaQuestWatcher.lua b/Jamba-QuestWatcher/JambaQuestWatcher.lua index a2ea30a..0a5f997 100644 --- a/Jamba-QuestWatcher/JambaQuestWatcher.lua +++ b/Jamba-QuestWatcher/JambaQuestWatcher.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -177,8 +177,12 @@ function AJM:OnEnable() AJM:SecureHook( "SetAbandonQuest" ) -- Update the quest watcher for watched quests. AJM:ScheduleTimer( "JambaQuestWatcherUpdate", 1, false ) + AJM:ScheduleTimer( "JambaQuestWatcherScenarioUpdate", 1, false ) AJM:UpdateUnlockWatcherFrame() - AJM:UpdateHideBlizzardWatchFrame() + -- To Hide After elv changes. --ebony + AJM:ScheduleTimer( "UpdateHideBlizzardWatchFrame", 2 ) + -- Remvoed me somtime 7.0.4 + --AJM:UpdateHideBlizzardWatchFrame() if AJM.db.enableQuestWatcher == true then AJM:QuestWatcherQuestListScrollRefresh() end @@ -259,16 +263,16 @@ function AJM:SettingsCreateQuestWatcherControl( top ) AJM.SettingsToggleEnableQuestWatcher, L["Enables Jamba Objective Tracker"] ) - movingTop = movingTop - checkBoxHeight - AJM.settingsControlWatcher.checkBoxShowFrame = JambaHelperSettings:CreateCheckBox( - AJM.settingsControlWatcher, - headingWidth, - left, - movingTop, - L["Show Quest Watcher"], - AJM.SettingsToggleShowFrame, - L["Show Quest Watcher"] - ) +-- movingTop = movingTop - checkBoxHeight +-- AJM.settingsControlWatcher.checkBoxShowFrame = JambaHelperSettings:CreateCheckBox( +-- AJM.settingsControlWatcher, +-- headingWidth, +-- left, +-- movingTop, +-- L["Show Quest Watcher"], +-- AJM.SettingsToggleShowFrame, +-- L["Show Quest Watcher"] +-- ) movingTop = movingTop - checkBoxHeight AJM.settingsControlWatcher.checkBoxUnlockWatcherFrame = JambaHelperSettings:CreateCheckBox( AJM.settingsControlWatcher, @@ -683,13 +687,14 @@ function AJM:JambaOnSettingsReceived( characterName, settings ) AJM.db.doNotHideCompletedObjectives = settings.doNotHideCompletedObjectives AJM.db.showCompletedObjectivesAsDone = settings.showCompletedObjectivesAsDone AJM.db.hideQuestIfAllComplete = settings.hideQuestIfAllComplete - AJM.db.showFrame = settings.showFrame +-- AJM.db.showFrame = settings.showFrame AJM.db.sendProgressChatMessages = settings.sendProgressChatMessages AJM.db.messageArea = settings.messageArea -- Refresh the settings. AJM:SettingsRefresh() AJM:UpdateUnlockWatcherFrame() - AJM:UpdateHideBlizzardWatchFrame() + --AJM:UpdateHideBlizzardWatchFrame() + AJM:ScheduleTimer( "UpdateHideBlizzardWatchFrame", 2 ) -- Tell the player. AJM:Print( L["Settings received from A."]( characterName ) ) -- Tell the team? @@ -730,7 +735,7 @@ function AJM:SettingsRefresh() AJM.settingsControlWatcher.checkBoxShowCompletedObjectivesAsDone:SetValue( AJM.db.showCompletedObjectivesAsDone ) AJM.settingsControlWatcher.checkBoxShowDoNotHideCompletedObjectives:SetValue( AJM.db.doNotHideCompletedObjectives ) AJM.settingsControlWatcher.checkBoxHideQuestIfAllComplete:SetValue( AJM.db.hideQuestIfAllComplete ) - AJM.settingsControlWatcher.checkBoxShowFrame:SetValue( AJM.db.showFrame ) +-- AJM.settingsControlWatcher.checkBoxShowFrame:SetValue( AJM.db.showFrame ) AJM.settingsControlWatcher.dropdownMessageArea:SetValue( AJM.db.messageArea ) AJM.settingsControlWatcher.checkBoxSendProgressChatMessages:SetValue( AJM.db.sendProgressChatMessages ) -- Quest watcher state. @@ -752,7 +757,7 @@ function AJM:SettingsRefresh() AJM.settingsControlWatcher.checkBoxShowCompletedObjectivesAsDone:SetDisabled( not AJM.db.enableQuestWatcher ) AJM.settingsControlWatcher.checkBoxShowDoNotHideCompletedObjectives:SetDisabled( not AJM.db.enableQuestWatcher ) AJM.settingsControlWatcher.checkBoxHideQuestIfAllComplete:SetDisabled( not AJM.db.enableQuestWatcher ) - AJM.settingsControlWatcher.checkBoxShowFrame:SetDisabled( not AJM.db.enableQuestWatcher ) +-- AJM.settingsControlWatcher.checkBoxShowFrame:SetDisabled( not AJM.db.enableQuestWatcher ) AJM.settingsControlWatcher.dropdownMessageArea:SetDisabled( not AJM.db.enableQuestWatcher ) AJM.settingsControlWatcher.checkBoxSendProgressChatMessages:SetDisabled( not AJM.db.enableQuestWatcher ) if AJM.questWatcherFrameCreated == true then @@ -872,7 +877,8 @@ end function AJM:SettingsToggleHideBlizzardWatchFrame( event, checked ) AJM.db.hideBlizzardWatchFrame = checked - AJM:UpdateHideBlizzardWatchFrame() + --AJM:UpdateHideBlizzardWatchFrame() + AJM:ScheduleTimer( "UpdateHideBlizzardWatchFrame", 2 ) AJM:SettingsRefresh() end @@ -943,8 +949,10 @@ function AJM:AddQuestWatch( questIndex ) if AJM.db.enableQuestWatcher == false then return end - AJM:UpdateHideBlizzardWatchFrame() + --AJM:UpdateHideBlizzardWatchFrame() + AJM:ScheduleTimer( "UpdateHideBlizzardWatchFrame", 2 ) AJM:JambaQuestWatcherUpdate( true ) + AJM:JambaQuestWatcherScenarioUpdate( true ) end function AJM:RemoveQuestWatch( questIndex ) @@ -952,8 +960,9 @@ function AJM:RemoveQuestWatch( questIndex ) return end AJM:DebugMessage( "RemoveQuestWatch", questIndex ) - AJM:UpdateHideBlizzardWatchFrame() - local title, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, questID, startEvent, displayQuestID, isOnMap, hasLocalPOI, isTask, isStory = GetQuestLogTitle( questIndex ) + --AJM:UpdateHideBlizzardWatchFrame() + AJM:ScheduleTimer( "UpdateHideBlizzardWatchFrame", 2 ) + local title, level, suggestedGroup, isHeader, isCollapsed, isComplete, frequency, questID, startEvent, displayQuestID, isOnMap, hasLocalPOI, isTask, isStory = GetQuestLogTitle( questIndex ) AJM:DebugMessage( "About to call RemoveQuestFromWatchList with value:", questID ) AJM:RemoveQuestFromWatchList( questID ) end @@ -979,6 +988,7 @@ end function AJM:QUEST_WATCH_UPDATE( event, ... ) + --AJM:Print("test4") if AJM.db.enableQuestWatcher == true then -- Wait a bit for the correct information to come through from the server... AJM:ScheduleTimer( "JambaQuestWatcherUpdate", 1, true ) @@ -987,6 +997,7 @@ end function AJM:QUEST_LOG_UPDATE( event, ... ) + --AJM:Print("test") if AJM.db.enableQuestWatcher == true then -- Wait a bit for the correct information to come through from the server... AJM:ScheduleTimer( "JambaQuestWatcherUpdate", 1, true ) @@ -995,22 +1006,31 @@ end function AJM:SCENARIO_UPDATE( event, ... ) + --AJM:Print("test2") if AJM.db.enableQuestWatcher == true then - AJM:JambaQuestWatchListUpdateButtonClicked() + --AJM:JambaQuestWatchListUpdateButtonClicked() + AJM:RemoveQuestsNotBeingWatched() + AJM:ScheduleTimer( "JambaQuestWatcherScenarioUpdate", 1, true ) end end function AJM:SCENARIO_CRITERIA_UPDATE( event, ... ) + --AJM:Print("test3") if AJM.db.enableQuestWatcher == true then -- Wait a bit for the correct information to come through from the server... - AJM:ScheduleTimer( "JambaQuestWatcherUpdate", 1, false ) + --AJM:ScheduleTimer( "JambaQuestWatcherUpdate", 1, false ) + AJM:ScheduleTimer( "JambaQuestWatcherScenarioUpdate", 1, true ) end end function AJM:PLAYER_ENTERING_WORLD( event, ... ) + --AJM:Print("test4") if AJM.db.enableQuestWatcher == true then - AJM:JambaQuestWatchListUpdateButtonClicked() + AJM:RemoveQuestsNotBeingWatched() + AJM:ScheduleTimer( "JambaQuestWatcherScenarioUpdate", 1, false ) + AJM:ScheduleTimer( "JambaQuestWatcherUpdate", 1, false ) + --AJM:JambaQuestWatchListUpdateButtonClicked() end end @@ -1049,6 +1069,7 @@ end function AJM:DoQuestWatchListUpdate( characterName ) AJM:JambaQuestWatcherUpdate( false ) + AJM:JambaQuestWatcherScenarioUpdate( false ) end @@ -1211,16 +1232,14 @@ end -- QUEST WATCH COMMUNICATION ------------------------------------------------------------------------------------------------------------- --Ebony test - -function AJM:JambaQuestWatcherUpdate( useCache ) +function AJM:JambaQuestWatcherScenarioUpdate( useCache ) if AJM.db.enableQuestWatcher == false then return end - AJM:DebugMessage( "Sending quest watch information...") -- Scenario information local isInScenario = C_Scenario.IsInScenario() if isInScenario == true then - local useCache = false + --local useCache = false local scenarioName, currentStage, numStages, flags, _, _, _, xp, money = C_Scenario.GetInfo() --AJM:Print("scenario", scenarioName, currentStage, numStages) for StagesIndex = 1, currentStage do @@ -1262,26 +1281,26 @@ function AJM:JambaQuestWatcherUpdate( useCache ) local criteriaString, criteriaType, completed, quantity, totalQuantity, flags, assetID, quantityString, criteriaID, duration, elapsed = C_Scenario.GetCriteriaInfo(criteriaIndex) --AJM:Print("test", criteriaString, criteriaType, completed, quantity, totalQuantity ) --Ebony to fix a bug with character trial quest (this might be a blizzard bug) TODO relook at somepoint in beta. - if (criteriaString) then - local questID = 1001 - local amountCompleted = tostring( quantity ).."/"..( totalQuantity ) - --AJM:Print("Stages", numStages) - local name = nil - if (numStages) > 1 then - local textName = "Scenario:"..stageName.." "..currentStage.."/"..numStages - newName = textName - else - local textName = "Scenario:"..stageName - newName = textName - end - local name = newName - if (AJM:QuestCacheUpdate( questID, criteriaIndex, amountCompleted, objectiveFinished ) == true) or (useCache == false) then - --AJM:Print("test", questID, name, criteriaIndex, criteriaString , amountCompleted , completed, completed) - AJM:JambaSendCommandToTeam( AJM.COMMAND_QUEST_WATCH_OBJECTIVE_UPDATE, questID, name, criteriaIndex, criteriaString , amountCompleted , completed, completed ) if AJM.db.sendProgressChatMessages == true then - if AJM.db.sendProgressChatMessages == true then - AJM:JambaSendMessageToTeam( AJM.db.messageArea, objectiveText.." "..amountCompleted, false ) + if (criteriaString) then + local questID = 1001 + local amountCompleted = tostring( quantity ).."/"..( totalQuantity ) + --AJM:Print("Stages", numStages) + local name = nil + if (numStages) > 1 then + local textName = "Scenario:"..stageName.." "..currentStage.."/"..numStages + newName = textName + else + local textName = "Scenario:"..stageName + newName = textName end - end + local name = newName + if (AJM:QuestCacheUpdate( questID, criteriaIndex, amountCompleted, objectiveFinished ) == true) or (useCache == false) then + --AJM:Print("test", questID, name, criteriaIndex, criteriaString , amountCompleted , completed, completed) + AJM:JambaSendCommandToTeam( AJM.COMMAND_QUEST_WATCH_OBJECTIVE_UPDATE, questID, name, criteriaIndex, criteriaString , amountCompleted , completed, completed ) if AJM.db.sendProgressChatMessages == true then + -- if AJM.db.sendProgressChatMessages == true then + -- AJM:JambaSendMessageToTeam( AJM.db.messageArea, objectiveText.." "..amountCompleted, false ) + -- end + end end end end @@ -1305,14 +1324,22 @@ function AJM:JambaQuestWatcherUpdate( useCache ) --AJM:Print("scenarioBouns", questID, name, criteriaIndexa, criteriaString , amountCompleted , totalQuantity, completed ) if (AJM:QuestCacheUpdate( questID, criteriaIndex, amountCompleted, objectiveFinished ) == true) or (useCache == false) then AJM:JambaSendCommandToTeam( AJM.COMMAND_QUEST_WATCH_OBJECTIVE_UPDATE, questID, name, criteriaIndex, criteriaString , amountCompleted , completed, completed ) - if AJM.db.sendProgressChatMessages == true then - AJM:JambaSendMessageToTeam( AJM.db.messageArea, objectiveText.." "..amountCompleted, false ) - end + --if AJM.db.sendProgressChatMessages == true then + -- AJM:JambaSendMessageToTeam( AJM.db.messageArea, objectiveText.." "..amountCompleted, false ) + --end end end end end end +end + + +function AJM:JambaQuestWatcherUpdate( useCache ) + if AJM.db.enableQuestWatcher == false then + return + end + AJM:DebugMessage( "Sending quest watch information...") -- old wow quests system for iterateWatchedQuests = 1, GetNumQuestWatches() do --for iterateQuests = 1, GetNumQuestLogEntries() do @@ -2207,25 +2234,27 @@ end -- A Jamba command has been recieved. function AJM:JambaOnCommandReceived( characterName, commandName, ... ) - if commandName == AJM.COMMAND_QUEST_WATCH_OBJECTIVE_UPDATE then - AJM:DoQuestWatchObjectiveUpdate( characterName, ... ) - end - if commandName == AJM.COMMAND_UPDATE_QUEST_WATCHER_LIST then - AJM:DoQuestWatchListUpdate( characterName, ... ) - end - if commandName == AJM.COMMAND_QUEST_WATCH_REMOVE_QUEST then - AJM:DoRemoveQuestFromWatchList( characterName, ... ) - end - if commandName == AJM.COMMAND_AUTO_QUEST_COMPLETE then - AJM:DoAutoQuestFieldComplete( characterName, ... ) - end - if commandName == AJM.COMMAND_REMOVE_AUTO_QUEST_COMPLETE then - AJM:DoRemoveAutoQuestFieldComplete( characterName, ... ) - end - if commandName == AJM.COMMAND_AUTO_QUEST_OFFER then - AJM:DoAutoQuestFieldOffer( characterName, ... ) - end + --if characterName ~= AJM.characterName then + if commandName == AJM.COMMAND_QUEST_WATCH_OBJECTIVE_UPDATE then + AJM:DoQuestWatchObjectiveUpdate( characterName, ... ) + end + if commandName == AJM.COMMAND_UPDATE_QUEST_WATCHER_LIST then + AJM:DoQuestWatchListUpdate( characterName, ... ) + end + if commandName == AJM.COMMAND_QUEST_WATCH_REMOVE_QUEST then + AJM:DoRemoveQuestFromWatchList( characterName, ... ) + end + if commandName == AJM.COMMAND_AUTO_QUEST_COMPLETE then + AJM:DoAutoQuestFieldComplete( characterName, ... ) + end + if commandName == AJM.COMMAND_REMOVE_AUTO_QUEST_COMPLETE then + AJM:DoRemoveAutoQuestFieldComplete( characterName, ... ) + end + if commandName == AJM.COMMAND_AUTO_QUEST_OFFER then + AJM:DoAutoQuestFieldOffer( characterName, ... ) + end + --end end -JambaApi.ClearAllQuests = ClearAllQuests \ No newline at end of file +JambaApi.ClearAllQuests = ClearAllQuests diff --git a/Jamba-QuestWatcher/Locales/JambaQuestWatcher-Locale-enUS.lua b/Jamba-QuestWatcher/Locales/JambaQuestWatcher-Locale-enUS.lua index fb9b25b..23a9d06 100644 --- a/Jamba-QuestWatcher/Locales/JambaQuestWatcher-Locale-enUS.lua +++ b/Jamba-QuestWatcher/Locales/JambaQuestWatcher-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba-QuestWatcher/Locales/Locales.xml b/Jamba-QuestWatcher/Locales/Locales.xml index 53c26eb..5a048be 100644 --- a/Jamba-QuestWatcher/Locales/Locales.xml +++ b/Jamba-QuestWatcher/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaQuestWatcher-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-Sell/Jamba-Sell.toc b/Jamba-Sell/Jamba-Sell.toc index aebca63..2cddcbe 100644 --- a/Jamba-Sell/Jamba-Sell.toc +++ b/Jamba-Sell/Jamba-Sell.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: JambaSell ## Notes: JambaSell ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba diff --git a/Jamba-Sell/JambaSell.lua b/Jamba-Sell/JambaSell.lua index 451ca39..5408a54 100644 --- a/Jamba-Sell/JambaSell.lua +++ b/Jamba-Sell/JambaSell.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba-Sell/Locales/JambaSell-Locale-enUS.lua b/Jamba-Sell/Locales/JambaSell-Locale-enUS.lua index 7313003..9335066 100644 --- a/Jamba-Sell/Locales/JambaSell-Locale-enUS.lua +++ b/Jamba-Sell/Locales/JambaSell-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba-Sell/Locales/Locales.xml b/Jamba-Sell/Locales/Locales.xml index a74c300..de2c799 100644 --- a/Jamba-Sell/Locales/Locales.xml +++ b/Jamba-Sell/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaSell-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-Talk/Jamba-Talk.toc b/Jamba-Talk/Jamba-Talk.toc index 0df5750..7d8fd75 100644 --- a/Jamba-Talk/Jamba-Talk.toc +++ b/Jamba-Talk/Jamba-Talk.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: JambaTalk ## Notes: JambaTalk ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba diff --git a/Jamba-Talk/JambaTalk.lua b/Jamba-Talk/JambaTalk.lua index f2914db..eabff5d 100644 --- a/Jamba-Talk/JambaTalk.lua +++ b/Jamba-Talk/JambaTalk.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -785,4 +785,4 @@ function AJM:JambaOnCommandReceived( characterName, commandName, ... ) if commandName == AJM.COMMAND_MESSAGE then AJM:ProcessReceivedMessage( characterName, ... ) end -end \ No newline at end of file +end diff --git a/Jamba-Talk/Locales/JambaTalk-Locale-enUS.lua b/Jamba-Talk/Locales/JambaTalk-Locale-enUS.lua index ac47052..068a91e 100644 --- a/Jamba-Talk/Locales/JambaTalk-Locale-enUS.lua +++ b/Jamba-Talk/Locales/JambaTalk-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba-Talk/Locales/Locales.xml b/Jamba-Talk/Locales/Locales.xml index c947bae..df18854 100644 --- a/Jamba-Talk/Locales/Locales.xml +++ b/Jamba-Talk/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaTalk-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-Target/Bindings.xml b/Jamba-Target/Bindings.xml index c4b345c..2b1eedb 100644 --- a/Jamba-Target/Bindings.xml +++ b/Jamba-Target/Bindings.xml @@ -1,4 +1,4 @@ -<Bindings> +<Bindings> <Binding name="JAMBATARGETMARK" header="JAMBA_TARGET" category="Jamba" runOnUp="true"> JambaTargetMarkTargetKeyPress( keystate ) diff --git a/Jamba-Target/Jamba-Target.toc b/Jamba-Target/Jamba-Target.toc index ba5458a..62a7b79 100644 --- a/Jamba-Target/Jamba-Target.toc +++ b/Jamba-Target/Jamba-Target.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: JambaTarget ## Notes: JambaTarget ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba diff --git a/Jamba-Target/JambaTarget.lua b/Jamba-Target/JambaTarget.lua index 770f2ac..949ee0e 100644 --- a/Jamba-Target/JambaTarget.lua +++ b/Jamba-Target/JambaTarget.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba-Target/Locales/JambaTarget-Locale-enUS.lua b/Jamba-Target/Locales/JambaTarget-Locale-enUS.lua index d436452..7f5919d 100644 --- a/Jamba-Target/Locales/JambaTarget-Locale-enUS.lua +++ b/Jamba-Target/Locales/JambaTarget-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -71,4 +71,4 @@ L["Background"] = true L["Background Colour"] = true L["Blizzard Tooltip"] = true L["Blizzard Dialog Background"] = true -L["Scale"] = true \ No newline at end of file +L["Scale"] = true diff --git a/Jamba-Target/Locales/Locales.xml b/Jamba-Target/Locales/Locales.xml index d3bf55f..c4fd6e8 100644 --- a/Jamba-Target/Locales/Locales.xml +++ b/Jamba-Target/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaTarget-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-Taxi/Jamba-Taxi.toc b/Jamba-Taxi/Jamba-Taxi.toc index 90088d1..9a49185 100644 --- a/Jamba-Taxi/Jamba-Taxi.toc +++ b/Jamba-Taxi/Jamba-Taxi.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: Jamba-Taxi ## Notes: Jamba-Taxi ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba diff --git a/Jamba-Taxi/JambaTaxi.lua b/Jamba-Taxi/JambaTaxi.lua index f687e3b..b52d5c1 100644 --- a/Jamba-Taxi/JambaTaxi.lua +++ b/Jamba-Taxi/JambaTaxi.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -10,7 +10,8 @@ local AJM = LibStub( "AceAddon-3.0" ):NewAddon( "JambaModule-1.0", "AceConsole-3.0", "AceEvent-3.0", - "AceHook-3.0" + "AceHook-3.0", + "AceTimer-3.0" ) -- Get the Jamba Utilities Library. @@ -30,6 +31,7 @@ AJM.settings = { profile = { takeMastersTaxi = true, requestTaxiStop = true, + changeTexiTime = 5, messageArea = JambaApi.DefaultMessageArea(), }, } @@ -125,10 +127,15 @@ end function AJM:SettingsCreateTaxi( top ) local checkBoxHeight = JambaHelperSettings:GetCheckBoxHeight() local left = JambaHelperSettings:LeftOfSettings() + local sliderHeight = JambaHelperSettings:GetSliderHeight() local headingHeight = JambaHelperSettings:HeadingHeight() + local horizontalSpacing = JambaHelperSettings:GetHorizontalSpacing() local headingWidth = JambaHelperSettings:HeadingWidth( false ) + local halfWidthSlider = (headingWidth - horizontalSpacing) / 2 local dropdownHeight = JambaHelperSettings:GetDropdownHeight() local verticalSpacing = JambaHelperSettings:GetVerticalSpacing() + + local movingTop = top JambaHelperSettings:CreateHeading( AJM.settingsControl, L["Taxi Options"], movingTop, false ) movingTop = movingTop - headingHeight @@ -137,8 +144,9 @@ function AJM:SettingsCreateTaxi( top ) headingWidth, left, movingTop, - L["Take Master's Taxi"], - AJM.SettingsToggleTakeTaxi + L["Take Teams Taxi"], + AJM.SettingsToggleTakeTaxi, + L["Take the same flight as the any team member (Other Team Members must have NPC Flight Master window open)."] ) movingTop = movingTop - headingHeight AJM.settingsControl.checkBoxrequestStop = JambaHelperSettings:CreateCheckBox( @@ -149,7 +157,20 @@ function AJM:SettingsCreateTaxi( top ) L["Request Taxi Stop with Master"], AJM.SettingsTogglerequestStop ) - movingTop = movingTop - checkBoxHeight + movingTop = movingTop - headingHeight + movingTop = movingTop - headingHeight + AJM.settingsControl.changeTexiTime = JambaHelperSettings:CreateSlider( + AJM.settingsControl, + halfWidthSlider, + left, + movingTop, + L["Clones To Take Taxi After Master"] + ) + AJM.settingsControl.changeTexiTime:SetSliderValues( 0, 10, 1 ) + AJM.settingsControl.changeTexiTime:SetCallback( "OnValueChanged", AJM.SettingsChangeTaxiTimer ) + + --movingTop = movingTop - halfWidthSlider + movingTop = movingTop - sliderHeight - verticalSpacing AJM.settingsControl.dropdownMessageArea = JambaHelperSettings:CreateDropdown( AJM.settingsControl, headingWidth, @@ -182,12 +203,21 @@ function AJM:SettingsTogglerequestStop( event, checked ) AJM.db.requestTaxiStop = checked AJM:SettingsRefresh() end + +function AJM:SettingsChangeTaxiTimer( event, value ) + AJM.db.changeTexiTime = tonumber( value ) + AJM:SettingsRefresh() +end + + + -- Settings received. function AJM:JambaOnSettingsReceived( characterName, settings ) if characterName ~= AJM.characterName then -- Update the settings. AJM.db.takeMastersTaxi = settings.takeMastersTaxi AJM.db.requestTaxiStop = settings.requestTaxiStop + AJM.db.changeTexiTime = settings.changeTexiTime AJM.db.messageArea = settings.messageArea -- Refresh the settings. AJM:SettingsRefresh() @@ -209,6 +239,7 @@ function AJM:SettingsRefresh() AJM.settingsControl.checkBoxTakeMastersTaxi:SetValue( AJM.db.takeMastersTaxi ) AJM.settingsControl.checkBoxrequestStop:SetValue( AJM.db.requestTaxiStop ) AJM.settingsControl.dropdownMessageArea:SetValue( AJM.db.messageArea ) + AJM.settingsControl.changeTexiTime:SetValue( AJM.db.changeTexiTime ) end ------------------------------------------------------------------------------------------------------------- @@ -235,8 +266,9 @@ local function TakeTaxi( sender, nodeName ) AJM:SendMessage( AJM.MESSAGE_TAXI_TAKEN ) -- Take a taxi. AJM.jambaTakesTaxi = true - GetNumRoutes( nodeIndex ) - TakeTaxiNode( nodeIndex ) + AJM:ScheduleTimer( "TakeTimedTaxi", AJM.db.changeTexiTime , nodeIndex ) + --GetNumRoutes( nodeIndex ) + --TakeTaxiNode( nodeIndex ) else -- Tell the master that this character could not take the same flight. AJM:JambaSendMessageToTeam( AJM.db.messageArea, L["I am unable to fly to A."]( nodeName ), false ) @@ -245,6 +277,14 @@ local function TakeTaxi( sender, nodeName ) end end +function AJM.TakeTimedTaxi( event, nodeIndex, ...) + if nodeIndex ~= nil then + GetNumRoutes( nodeIndex ) + TakeTaxiNode( nodeIndex ) + end +end + + -- Called after the character has just taken a flight (hooked function). function AJM:TakeTaxiNode( taxiNodeIndex ) -- If the take masters taxi option is on. @@ -312,4 +352,4 @@ function AJM:JambaOnCommandReceived( characterName, commandName, ... ) end JambaApi.Taxi = {} -JambaApi.Taxi.MESSAGE_TAXI_TAKEN = AJM.MESSAGE_TAXI_TAKEN \ No newline at end of file +JambaApi.Taxi.MESSAGE_TAXI_TAKEN = AJM.MESSAGE_TAXI_TAKEN diff --git a/Jamba-Taxi/Locales/JambaTaxi-Locale-enUS.lua b/Jamba-Taxi/Locales/JambaTaxi-Locale-enUS.lua index 82dcfd4..8ad147e 100644 --- a/Jamba-Taxi/Locales/JambaTaxi-Locale-enUS.lua +++ b/Jamba-Taxi/Locales/JambaTaxi-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -9,9 +9,10 @@ L["Slash Commands"] = true L["Toon"] = true L["Taxi"] = true L["Taxi Options"] = true -L["Take Master's Taxi"] = true +L["Take Teams Taxi"] = true L["Request Taxi Stop with Master"] = true -L["Take the same flight as the master did (minions's must have NPC Flight Master window open)."] = true +L["Clones To Take Taxi After Master"] = true +L["Take the same flight as the any team member (Other Team Members must have NPC Flight Master window open)."] = true L["Push Settings"] = true L["Push the taxi settings to all characters in the team."] = true L["I Have Requested a Stop From X"] = function( sender ) @@ -23,4 +24,4 @@ end L["I am unable to fly to A."] = function( nodename ) return "I am unable to fly to "..nodename.."." end -L["Message Area"] = true \ No newline at end of file +L["Message Area"] = true diff --git a/Jamba-Taxi/Locales/Locales.xml b/Jamba-Taxi/Locales/Locales.xml index 3fe226a..cdccdd0 100644 --- a/Jamba-Taxi/Locales/Locales.xml +++ b/Jamba-Taxi/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaTaxi-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-Toon/Jamba-Toon.toc b/Jamba-Toon/Jamba-Toon.toc index 1639862..eddd88b 100644 --- a/Jamba-Toon/Jamba-Toon.toc +++ b/Jamba-Toon/Jamba-Toon.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: JambaToon ## Notes: JambaToon ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba diff --git a/Jamba-Toon/JambaToon.lua b/Jamba-Toon/JambaToon.lua index a59b322..aa87d0d 100644 --- a/Jamba-Toon/JambaToon.lua +++ b/Jamba-Toon/JambaToon.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -1196,4 +1196,4 @@ function AJM:JambaOnCommandReceived( characterName, commandName, ... ) if commandName == AJM.COMMAND_SOUL_STONE then AJM:doSoulStone() end -end \ No newline at end of file +end diff --git a/Jamba-Toon/Locales/JambaToon-Locale-enUS.lua b/Jamba-Toon/Locales/JambaToon-Locale-enUS.lua index 29bcd08..8106656 100644 --- a/Jamba-Toon/Locales/JambaToon-Locale-enUS.lua +++ b/Jamba-Toon/Locales/JambaToon-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba-Toon/Locales/Locales.xml b/Jamba-Toon/Locales/Locales.xml index 090b381..935b20b 100644 --- a/Jamba-Toon/Locales/Locales.xml +++ b/Jamba-Toon/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaToon-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba-Trade/Jamba-Trade.toc b/Jamba-Trade/Jamba-Trade.toc index 43ce6e0..cd1783c 100644 --- a/Jamba-Trade/Jamba-Trade.toc +++ b/Jamba-Trade/Jamba-Trade.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: JambaTrade ## Notes: JambaTrade ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## X-Category: Interface Enhancements ## X-Child-Of: Jamba ## Dependencies: Jamba diff --git a/Jamba-Trade/JambaTrade.lua b/Jamba-Trade/JambaTrade.lua index 54492c8..6fa16b4 100644 --- a/Jamba-Trade/JambaTrade.lua +++ b/Jamba-Trade/JambaTrade.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -634,6 +634,7 @@ function AJM:TRADE_SHOW( event, ... ) end end + function AJM:TradeShowAdjustMoneyWithMaster() if JambaApi.IsCharacterTheMaster( AJM.characterName ) == true then return @@ -645,8 +646,22 @@ function AJM:TradeShowAdjustMoneyWithMaster() return end if moneyToDepositOrWithdraw > 0 then - PickupPlayerMoney( moneyToDepositOrWithdraw ) - AddTradeMoney() + for index, character in JambaApi.TeamListOrderedOnline() do + --AJM:Print("Team", character ) + local teamCharacterName = ( Ambiguate( character, "none" ) ) + local tradePlayersName = GetUnitName("NPC") + if tradePlayersName == teamCharacterName then + --AJM:Print("found", tradePlayersName, teamCharacterName ) + --PickupPlayerMoney( moneyToDepositOrWithdraw ) + --GetCursorMoney() + --AddTradeMoney() + MoneyInputFrame_SetCopper(TradePlayerInputMoneyFrame, moneyToDepositOrWithdraw) + break + else + AJM:Print(tradePlayersName, "is not Member of the team, Will not trade Gold.") + end + end + end end diff --git a/Jamba-Trade/Locales/JambaTrade-Locale-enUS.lua b/Jamba-Trade/Locales/JambaTrade-Locale-enUS.lua index baf1318..bb5ef7c 100644 --- a/Jamba-Trade/Locales/JambaTrade-Locale-enUS.lua +++ b/Jamba-Trade/Locales/JambaTrade-Locale-enUS.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -39,4 +39,4 @@ L["7. Heirloom (light yellow)"] = true L["Unknown"] = true L["Ignore Soulbound"] = true L["Trade Excess Gold To Master From Minion"] = true -L["Amount Of Gold To Keep"] = true \ No newline at end of file +L["Amount Of Gold To Keep"] = true diff --git a/Jamba-Trade/Locales/Locales.xml b/Jamba-Trade/Locales/Locales.xml index 829dc16..e819376 100644 --- a/Jamba-Trade/Locales/Locales.xml +++ b/Jamba-Trade/Locales/Locales.xml @@ -1,9 +1,9 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> <Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd" xmlns="http://www.blizzard.com/wow/ui/"> <Script file="JambaTrade-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/AceGUIContainer-JambaWindow.lua b/Jamba/AceGUIContainer-JambaWindow.lua index 2906b35..7b8bc11 100644 --- a/Jamba/AceGUIContainer-JambaWindow.lua +++ b/Jamba/AceGUIContainer-JambaWindow.lua @@ -1,6 +1,6 @@ --[[ Jamba4 - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License Changed to a Newer Ace3 By Ebony diff --git a/Jamba/AceGUIWidget-JambaContinueLabel.lua b/Jamba/AceGUIWidget-JambaContinueLabel.lua index f058da5..7be5993 100644 --- a/Jamba/AceGUIWidget-JambaContinueLabel.lua +++ b/Jamba/AceGUIWidget-JambaContinueLabel.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License diff --git a/Jamba/AceGUIWidget-JambaNormalLabel.lua b/Jamba/AceGUIWidget-JambaNormalLabel.lua index 91d1fb1..ab55d07 100644 --- a/Jamba/AceGUIWidget-JambaNormalLabel.lua +++ b/Jamba/AceGUIWidget-JambaNormalLabel.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba/Bindings.xml b/Jamba/Bindings.xml index ff51a3e..017fcf7 100644 --- a/Jamba/Bindings.xml +++ b/Jamba/Bindings.xml @@ -1,6 +1,6 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License --> diff --git a/Jamba/CHANGELOG.txt b/Jamba/CHANGELOG.txt index 0c71037..deb27b6 100644 --- a/Jamba/CHANGELOG.txt +++ b/Jamba/CHANGELOG.txt @@ -1,8 +1,180 @@ --------------------------- ChangeLogs: --------------------------- +Jamba Version: 5.1.7 +WoW Game Version: 7.1.5 +File Version: 7.1.5-5.1.7 +Release Date: 25/1/2017 +Modules: AdvancedLoot, Core, Display-Team, Follow, FTL, ItemUse, Macro, Purchase, Quest, Sell, Talk, Target, Taxi, Toon, Curr, Trade, Mount + + +*Jamba-Core + - Updated Copyright Dates To 2017 -- Happy New Year! + +*Jamba-Taxi + - Added a timmer/delay to help with sharding. see http://www.dual-boxing.com/threads/53568-Jamba-Fight-Master-Change-5-2-x + - Added A Slider to set the dayly of the the Fightmater set to 0 to disable. + +*Jamba-Mount + - Should now work with Mounts it did not before. Thanks to zinkala on curse for the fix. + +*Jamba-TeamDisplay + - Currency should work agian in tooltips (Set From In Game Currency Backback box.) + + +--------------------------- +Jamba Version: 5.1.6 +WoW Game Version: 7.1.0 +File Version: 7.1.0-5.1.6 +Release Date: 21/12/2016 +Modules: AdvancedLoot, Core, Display-Team, Follow, FTL, ItemUse, Macro, Purchase, Quest, Sell, Talk, Target, Taxi, Toon, Curr, Trade, Mount + +*Jamba-Core + - Updated Libaction button to 0.28.2 + +*Jamba-Display-Team + - Fixed Players level on tooltip + +*Jamba-item-bar + - Fixed a bug in the code that was making a Lua-Error. + + + +--------------------------- +Jamba Version: 5.1.4/5 +WoW Game Version: 7.1.0 +File Version: 7.1.0-5.1.4 +Release Date: 11/11/2016 +Modules: AdvancedLoot, Core, Display-Team, Follow, FTL, ItemUse, Macro, Purchase, Quest, Sell, Talk, Target, Taxi, Toon, Curr, Trade, Mount + +*jamba-Item-Use + - Now uses blizzard code to scan tooltips. + - Removed LibGratuity + - Update Artifact is now a tooltip and a button that only say's "clear" to clear up space. (for wubsie ;) The size of two buttons.) + - Added a Auto add Satchel Items (items you can open, Blizzard-Devs seems to love them!) + + +--------------------------- +Jamba Version: 5.1.2/3 +WoW Game Version: 7.1.0 +File Version: 7.1.0-5.1.2 +Release Date: 28/10/2016 +Modules: AdvancedLoot, Core, Display-Team, Follow, FTL, ItemUse, Macro, Purchase, Quest, Sell, Talk, Target, Taxi, Toon, Curr, Trade, Mount + +*Jamba-currency + - Added Curious Coin to DataBase + +*jamba-Item-use + - The clear button should now work on all team members and not just master + - Fixed a bug that was stop quest items auto getting removed. + - No Longer Shows Update Button if you truned off auto add of artifact power. + +*Jamba-Display-Team + -Fixed a API bug that was getting nil when entering phased zones. + +--------------------------- +Jamba Version: 5.1.0 +WoW Game Version: 7.1.0 +File Version: 7.1.0-5.1.0 +Release Date: 26/10/2016 +Modules: AdvancedLoot, Core, Display-Team, Follow, FTL, ItemUse, Macro, Purchase, Quest, Sell, Talk, Target, Taxi, Toon, Curr, Trade, Mount + +*jamba-core + - Updated for patch 7.1 + + +*Jamba-Item-Use + - Now Adds Artifact Power Items to the jamba Item_Use bar. + - Added a Button to remove all artifact items, nolonger updates on its own* + * Developer note: This auto update was not working great with Clones not having the same item. + - Nolonger adds quest items that starts quests, Quests was changed to Auto-Pickup quests in WoW-7.0.3. + + +*jamba-team + - Added Jamba Tag Invite, /jamba-team inviteTag <tag> (for use to make two partys of five. or party of the same class etc.) + - Should not convent to raid if using more then 5 players and using a small tag party + +*Jamba-team display + - ToolTip has Currency Back! To set Currency use the show BackPack setting in the Currency Tab. + - Added a New option to olny show the Display-Team in when in a party/raid. + - Should now updated Team HP/Mana When you join a party. + - Should now updated Artifact XP power when you change spec. + +*Jamba-Mount* Beta-c + - New Module + - Mounts and dismounts with the team. + - Holding Shift key down will stop the minions from mounting. - BetaE + - Added a Option for minions to dismount olny if the master dismounts. -BetaE + - Holding Shift key down will stop the minions dismounting + +*Jamba-follow + - nolonger warns if a passenger in a vehicle. (When you mount a 2 seater mount.) + +*Jamba-Quest* + - Now forwards quest Unignore and Ignore to the team. + +--------------------------- +Jamba Version: 5.0.4 +WoW Game Version: 7.0.3 +File Version: 7.0.3-5.0.4 +Release Date: 11/09/2016 +Modules: AdvancedLoot, Core, Display-Team, Follow, FTL, ItemUse, Macro, Purchase, Quest, Sell, Talk, Target, Taxi, Toon, Curr, Trade + + +*Jamba-Quest-Tracker + - Now Should always hide Blizzard's objective Tracker when using ElvUI Shadow & Light. + +*Jamba-Trade + - No longer trade Excess Gold with players that are not team members. + - Now Shows the Gold in the Edit box when tradeing gold on minions. + +*Jamba-Team + -Removed Some Debug code. + + + + +--------------------------- + +Jamba Version: 5.0.3 +WoW Game Version: 7.0.3 +File Version: 7.0.3-5.0.3 +Release Date: 10/08/2016 +Modules: AdvancedLoot, Core, Display-Team, Follow, FTL, ItemUse, Macro, Purchase, Quest, Sell, Talk, Target, Taxi, Toon, Curr, Trade + + +*Jamba-Quest-Tracker + - No Longer makes the Communications Lag. + + + +--------------------------- +Jamba Version: 5.0.2 +WoW Game Version: 7.0.3 +File Version: 7.0.3-5.0.2 +Release Date: 28/07/2016 +Modules: AdvancedLoot, Core, Display-Team, Follow, FTL, ItemUse, Macro, Purchase, Quest, Sell, Talk, Target, Taxi, Toon, Curr, Trade + +*Jamba-core + - Updated Ace3 to the newest and lastest + +*Jamba-Quest-Tracker + -No Longer Spams Quest objective Text. + +*Jamba-Display-Team + -Will Now Send Font Size with team settings. + +Jamba-Toon + - no longer not show gold,Silver or copper icons. + + + +--------------------------- +ChangeLogs: +--------------------------- Jamba Version: 5.0.1 WoW Game Version: 7.0.3 +File Version: 7.0.3-5.0.1 Release Date: 19/07/2016 Modules: AdvancedLoot, Core, Display-Team, Follow, FTL, ItemUse, Macro, Purchase, Quest, Sell, Talk, Target, Taxi, Toon, Curr, Trade @@ -70,7 +242,8 @@ Initial Legion Release. - Gold of the minion. - Mail if the minion has mail and who it is from (Same as minimap) - Tooltip should no longer show in combat. - - Removed the old Display Bag Space Bar added to tooltips + - Tooltip now shows character name if name is hidden on the bar. + - Removed the old Display Bag Space Bar added to tooltips - Renamed "Combo PointBar" to "Class Power Bar" - Added Support for Other class Power -Warlocks - Soul Shards diff --git a/Jamba/Jamba.toc b/Jamba/Jamba.toc index 3572ec1..0f450ae 100644 --- a/Jamba/Jamba.toc +++ b/Jamba/Jamba.toc @@ -1,8 +1,8 @@ -## Interface: 70000 +## Interface: 70100 ## Title: Jamba ## Notes: Jamba ## Author: Ebony, Former Author: Jafula -## Version: 7.0.3-5.0 +## Version: 7.1.5-5.1.7 ## SavedVariables: JambaCoreProfileDB, JambaCommunicationsProfileDB, JambaTeamProfileDB, JambaTagProfileDB, JambaMessageProfileDB JambaEmbeds.xml JambaUtilities.lua diff --git a/Jamba/JambaCommunications.lua b/Jamba/JambaCommunications.lua index 8ccf3dc..78509b1 100644 --- a/Jamba/JambaCommunications.lua +++ b/Jamba/JambaCommunications.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License diff --git a/Jamba/JambaCore.lua b/Jamba/JambaCore.lua index 3e23291..4a74c64 100644 --- a/Jamba/JambaCore.lua +++ b/Jamba/JambaCore.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License @@ -824,4 +824,4 @@ JambaPrivate.Core.SendCommandToMaster = SendCommandToMaster JambaPrivate.Core.SendCommandToToon = SendCommandToToon -- TODO: Remove send command to minions? --JambaPrivate.Core.SendCommandToMinions = SendCommandToMinions -JambaPrivate.Core.OnCommandReceived = OnCommandReceived \ No newline at end of file +JambaPrivate.Core.OnCommandReceived = OnCommandReceived diff --git a/Jamba/JambaEmbeds.xml b/Jamba/JambaEmbeds.xml index eb2a6de..0f2ee8c 100644 --- a/Jamba/JambaEmbeds.xml +++ b/Jamba/JambaEmbeds.xml @@ -1,6 +1,6 @@ <!-- Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License http://jafula.com/jamba/ --> @@ -36,4 +36,4 @@ http://jafula.com/jamba/ <Include file="AceGUIWidget-JambaNormalLabel.lua" /> <Include file="AceGUIWidget-JambaContinueLabel.lua" /> <Include file="AceGUIWidget-JambaKeybinding.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/JambaHelperSettings.lua b/Jamba/JambaHelperSettings.lua index 3f34930..a88306d 100644 --- a/Jamba/JambaHelperSettings.lua +++ b/Jamba/JambaHelperSettings.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License diff --git a/Jamba/JambaMessage.lua b/Jamba/JambaMessage.lua index 4d84ada..3cac3d0 100644 --- a/Jamba/JambaMessage.lua +++ b/Jamba/JambaMessage.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License @@ -1033,4 +1033,4 @@ JambaPrivate.Message.SendMessage = SendMessage JambaApi.MessageAreaList = MessageAreaList JambaApi.DefaultMessageArea = DefaultMessageArea JambaApi.DefaultWarningArea = DefaultWarningArea -JambaApi.MESSAGE_MESSAGE_AREAS_CHANGED = AJM.MESSAGE_MESSAGE_AREAS_CHANGED \ No newline at end of file +JambaApi.MESSAGE_MESSAGE_AREAS_CHANGED = AJM.MESSAGE_MESSAGE_AREAS_CHANGED diff --git a/Jamba/JambaModule.lua b/Jamba/JambaModule.lua index a95fc1c..35ee227 100644 --- a/Jamba/JambaModule.lua +++ b/Jamba/JambaModule.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- diff --git a/Jamba/JambaStartupMessage.xml b/Jamba/JambaStartupMessage.xml index c6c9507..db4cbfb 100644 --- a/Jamba/JambaStartupMessage.xml +++ b/Jamba/JambaStartupMessage.xml @@ -79,4 +79,4 @@ </Button> </Frames> </Frame> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/JambaTag.lua b/Jamba/JambaTag.lua index d50ac39..56210e6 100644 --- a/Jamba/JambaTag.lua +++ b/Jamba/JambaTag.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License @@ -765,4 +765,4 @@ JambaApi.AllTagsList = AllTagsList JambaApi.AllTagsListIterator = AllTagsListIterator JambaApi.DoesCharacterHaveTag = DoesCharacterHaveTag JambaApi.IsAValidTag = IsAValidTag -JambaApi.GetCharacterWithTag = GetCharacterWithTag \ No newline at end of file +JambaApi.GetCharacterWithTag = GetCharacterWithTag diff --git a/Jamba/JambaTeam.lua b/Jamba/JambaTeam.lua index 99e8dba..e0c8864 100644 --- a/Jamba/JambaTeam.lua +++ b/Jamba/JambaTeam.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License @@ -106,7 +106,15 @@ function AJM:GetConfiguration() usage = "/jamba-team invite", get = false, set = "InviteTeamToParty", - }, + }, + inviteTag = { + type = "input", + name = L["Invites"], + desc = L["Invite team members to a <tag> party."], + usage = "/jamba-team invite <tag>", + get = false, + set = "InviteTeamToPartys", + }, disband = { type = "input", name = L["Disband"], @@ -168,6 +176,7 @@ AJM.orderedCharactersOnline = {} -- Command this module sends. ------------------------------------------------------------------------------------------------------------- +AJM.COMMAND_TAG_PARTY = "JambaTeamTagGroup" -- Leave party command. AJM.COMMAND_LEAVE_PARTY = "JambaTeamLeaveGroup" -- Set master command. @@ -176,6 +185,7 @@ AJM.COMMAND_SET_MASTER = "JambaTeamSetMaster" AJM.COMMAND_SET_OFFLINE = "JambaTeamSetOffline" AJM.COMMAND_SET_ONLINE = "JambaTeamSetOnline" + ------------------------------------------------------------------------------------------------------------- -- Messages module sends. ------------------------------------------------------------------------------------------------------------- @@ -1059,7 +1069,8 @@ function AJM.DoTeamPartyInvite() InviteUnit( AJM.inviteList[AJM.currentInviteCount] ) AJM.currentInviteCount = AJM.currentInviteCount + 1 if AJM.currentInviteCount < AJM.inviteCount then - if GetTeamListMaximumOrderOnline() > 5 and AJM.db.inviteConvertToRaid == true then + --if GetTeamListMaximumOrderOnline() > 5 and AJM.db.inviteConvertToRaid == true then + if AJM.inviteCount > 5 and AJM.db.inviteConvertToRaid == true then ConvertToRaid() end AJM:ScheduleTimer( "DoTeamPartyInvite", 0.5 ) @@ -1070,6 +1081,55 @@ function AJM.DoTeamPartyInvite() end end +function AJM:InviteTeamToPartys( info, tag ) + -- Iterate each enabled member and invite them to a group. + if tag == nil then + return + end + if JambaPrivate.Tag.DoesCharacterHaveTag( AJM.characterName, tag ) == false then + --AJM:Print("IDONOTHAVETAG", tag) + for index, characterName in TeamListOrdered() do + --AJM:Print("NextChartohavetag", tag, characterName ) + if JambaPrivate.Tag.DoesCharacterHaveTag( characterName, tag ) then + --AJM:Print("i have tag", tag, characterName ) + AJM:JambaSendCommandToTeam( AJM.COMMAND_TAG_PARTY, characterName, tag ) + break + end + end + return + else + AJM.inviteList = {} + AJM.inviteCount = 0 + for index, characterName in TeamListOrdered() do + if GetCharacterOnlineStatus( characterName ) == true then + --AJM:Print("test", characterName, tag ) + if JambaPrivate.Tag.DoesCharacterHaveTag( characterName, tag ) then + --AJM:Print("HasTag", characterName, tag ) + -- As long as they are not the player doing the inviting. + if characterName ~= AJM.characterName then + AJM.inviteList[AJM.inviteCount] = characterName + AJM.inviteCount = AJM.inviteCount + 1 + end + end + end + end + end + AJM.currentInviteCount = 0 + AJM:ScheduleTimer( "DoTeamPartyInvite", 0.5 ) +end + +function AJM:TagParty(test, characterName, tag, ...) + --AJM:Print("test", characterName, tag ) + if AJM.characterName == characterName then + --AJM:Print("this msg is for me", characterName ) + if JambaPrivate.Tag.DoesCharacterHaveTag( AJM.characterName, tag ) then + AJM:InviteTeamToPartys( nil, tag) + else + return + end + end +end + function AJM:PLAYER_FOCUS_CHANGED() -- Change master on focus change option enabled? if AJM.db.focusChangeSetMaster == true then @@ -1154,7 +1214,7 @@ end function AJM:PARTY_INVITE_REQUEST( event, inviter, ... ) - AJM:Print("Inviter", inviter) + --AJM:Print("Inviter", inviter) -- Accept this invite, initially no. local acceptInvite = false -- Is character not in a group? @@ -1698,6 +1758,11 @@ function AJM:JambaOnCommandReceived( sender, commandName, ... ) AJM.ReceivesetOnline( ... ) end end + if commandName == AJM.COMMAND_TAG_PARTY then + if IsCharacterInTeam( sender ) == true then + AJM.TagParty( characterName, tag, ... ) + end + end end -- Functions available from Jamba Team for other Jamba internal objects. @@ -1740,4 +1805,4 @@ JambaApi.setOffline = setOffline JambaApi.setOnline = setOnline JambaApi.GetTeamListMaximumOrderOnline = GetTeamListMaximumOrderOnline JambaApi.TeamListOrderedOnline = TeamListOrderedOnline -JambaApi.GetPositionForCharacterNameOnline = GetPositionForCharacterNameOnline \ No newline at end of file +JambaApi.GetPositionForCharacterNameOnline = GetPositionForCharacterNameOnline diff --git a/Jamba/JambaUtilities.lua b/Jamba/JambaUtilities.lua index bbf23de..8154374 100644 --- a/Jamba/JambaUtilities.lua +++ b/Jamba/JambaUtilities.lua @@ -1,6 +1,6 @@ --[[ Jamba - Jafula's Awesome Multi-Boxer Assistant -Copyright 2008 - 2016 Michael "Jafula" Miller +Copyright 2008 - 2017 Michael "Jafula" Miller License: The MIT License ]]-- @@ -201,4 +201,4 @@ end - \ No newline at end of file + diff --git a/Jamba/LICENSE b/Jamba/LICENSE index 1975f7b..46eaad7 100644 --- a/Jamba/LICENSE +++ b/Jamba/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2008-2016 Michael "Jafula" Miller +Copyright (c) 2008-2017 Michael "Jafula" Miller Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Jamba/LibActionButtonJamba-1.0-57.lua b/Jamba/LibActionButtonJamba-1.0-57.lua new file mode 100644 index 0000000..aa883b4 --- /dev/null +++ b/Jamba/LibActionButtonJamba-1.0-57.lua @@ -0,0 +1,1576 @@ +--[[ +Copyright (c) 2010-2017, Hendrik "nevcairiel" Leppkes <h.leppkes@gmail.com> + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the developer nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +]] +local MAJOR_VERSION = "LibActionButtonJamba-1.0" +local MINOR_VERSION = 57 + +if not LibStub then error(MAJOR_VERSION .. " requires LibStub.") end +local lib, oldversion = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION) +if not lib then return end + +-- Lua functions +local _G = _G +local type, error, tostring, tonumber, assert, select = type, error, tostring, tonumber, assert, select +local setmetatable, wipe, unpack, pairs, next = setmetatable, wipe, unpack, pairs, next +local str_match, format, tinsert, tremove = string.match, format, tinsert, tremove + +-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded +-- List them here for Mikk's FindGlobals script +-- Note: No WoW API function get upvalued to allow proper interaction with any addons that try to hook them. +-- GLOBALS: LibStub, CreateFrame, InCombatLockdown, ClearCursor, GetCursorInfo, GameTooltip, GameTooltip_SetDefaultAnchor +-- GLOBALS: GetBindingKey, GetBindingText, SetBinding, SetBindingClick, GetCVar, GetMacroInfo +-- GLOBALS: PickupAction, PickupItem, PickupMacro, PickupPetAction, PickupSpell, PickupCompanion, PickupEquipmentSet +-- GLOBALS: CooldownFrame_SetTimer, UIParent, IsSpellOverlayed, SpellFlyout, GetMouseFocus, SetClampedTextureRotation +-- GLOBALS: GetActionInfo, GetActionTexture, HasAction, GetActionText, GetActionCount, GetActionCooldown, IsAttackAction +-- GLOBALS: IsAutoRepeatAction, IsEquippedAction, IsCurrentAction, IsConsumableAction, IsUsableAction, IsStackableAction, IsActionInRange +-- GLOBALS: GetSpellLink, GetMacroSpell, GetSpellTexture, GetSpellCount, GetSpellCooldown, IsAttackSpell, IsCurrentSpell +-- GLOBALS: FindSpellBookSlotBySpellID, IsUsableSpell, IsConsumableSpell, IsSpellInRange, IsAutoRepeatSpell +-- GLOBALS: GetItemIcon, GetItemCount, GetItemCooldown, IsEquippedItem, IsCurrentItem, IsUsableItem, IsConsumableItem, IsItemInRange +-- GLOBALS: GetActionCharges, IsItemAction, GetSpellCharges +-- GLOBALS: RANGE_INDICATOR, ATTACK_BUTTON_FLASH_TIME, TOOLTIP_UPDATE_TIME + +local KeyBound = LibStub("LibKeyBound-1.0", true) +local CBH = LibStub("CallbackHandler-1.0") + +lib.eventFrame = lib.eventFrame or CreateFrame("Frame") +lib.eventFrame:UnregisterAllEvents() + +lib.buttonRegistry = lib.buttonRegistry or {} +lib.activeButtons = lib.activeButtons or {} +lib.actionButtons = lib.actionButtons or {} +lib.nonActionButtons = lib.nonActionButtons or {} + +lib.unusedOverlayGlows = lib.unusedOverlayGlows or {} +lib.numOverlays = lib.numOverlays or 0 + +lib.ACTION_HIGHLIGHT_MARKS = lib.ACTION_HIGHLIGHT_MARKS or setmetatable({}, { __index = ACTION_HIGHLIGHT_MARKS }) + +lib.callbacks = lib.callbacks or CBH:New(lib) + +local Generic = CreateFrame("CheckButton") +local Generic_MT = {__index = Generic} + +local Action = setmetatable({}, {__index = Generic}) +local Action_MT = {__index = Action} + +local PetAction = setmetatable({}, {__index = Generic}) +local PetAction_MT = {__index = PetAction} + +local Spell = setmetatable({}, {__index = Generic}) +local Spell_MT = {__index = Spell} + +local Item = setmetatable({}, {__index = Generic}) +local Item_MT = {__index = Item} + +local Macro = setmetatable({}, {__index = Generic}) +local Macro_MT = {__index = Macro} + +local Custom = setmetatable({}, {__index = Generic}) +local Custom_MT = {__index = Custom} + +local type_meta_map = { + empty = Generic_MT, + action = Action_MT, + --pet = PetAction_MT, + spell = Spell_MT, + item = Item_MT, + macro = Macro_MT, + custom = Custom_MT +} + +local ButtonRegistry, ActiveButtons, ActionButtons, NonActionButtons = lib.buttonRegistry, lib.activeButtons, lib.actionButtons, lib.nonActionButtons + +local Update, UpdateButtonState, UpdateUsable, UpdateCount, UpdateCooldown, UpdateTooltip, UpdateNewAction +local StartFlash, StopFlash, UpdateFlash, UpdateHotkeys, UpdateRangeTimer, UpdateOverlayGlow +local UpdateFlyout, ShowGrid, HideGrid, UpdateGrid, SetupSecureSnippets, WrapOnClick +local ShowOverlayGlow, HideOverlayGlow, GetOverlayGlow, OverlayGlowAnimOutFinished +local HookCooldown + +local InitializeEventHandler, OnEvent, ForAllButtons, OnUpdate + +local DefaultConfig = { + outOfRangeColoring = "button", + tooltip = "enabled", + showGrid = false, + colors = { + range = { 0.8, 0.1, 0.1 }, + mana = { 0.5, 0.5, 1.0 } + }, + hideElements = { + macro = false, + hotkey = false, + equipped = false, + }, + keyBoundTarget = false, + clickOnDown = false, + flyoutDirection = "UP", +} + +--- Create a new action button. +-- @param id Internal id of the button (not used by LibActionButton-1.0, only for tracking inside the calling addon) +-- @param name Name of the button frame to be created (not used by LibActionButton-1.0 aside from naming the frame) +-- @param header Header that drives these action buttons (if any) +function lib:CreateButton(id, name, header, config) + if type(name) ~= "string" then + error("Usage: CreateButton(id, name. header): Buttons must have a valid name!", 2) + end + if not header then + error("Usage: CreateButton(id, name, header): Buttons without a secure header are not yet supported!", 2) + end + + if not KeyBound then + KeyBound = LibStub("LibKeyBound-1.0", true) + end + + local button = setmetatable(CreateFrame("CheckButton", name, header, "SecureActionButtonTemplate, ActionButtonTemplate"), Generic_MT) + button:RegisterForDrag("LeftButton", "RightButton") + button:RegisterForClicks("AnyUp") + + -- Frame Scripts + button:SetScript("OnEnter", Generic.OnEnter) + button:SetScript("OnLeave", Generic.OnLeave) + button:SetScript("PreClick", Generic.PreClick) + button:SetScript("PostClick", Generic.PostClick) + + button.id = id + button.header = header + -- Mapping of state -> action + button.state_types = {} + button.state_actions = {} + + -- Store the LAB Version that created this button for debugging + button.__LAB_Version = MINOR_VERSION + + -- just in case we're not run by a header, default to state 0 + button:SetAttribute("state", 0) + + SetupSecureSnippets(button) + WrapOnClick(button) + + -- adjust hotkey style for better readability + button.HotKey:SetFont(button.HotKey:GetFont(), 13, "OUTLINE") + button.HotKey:SetVertexColor(0.75, 0.75, 0.75) + + -- adjust count/stack size + button.Count:SetFont(button.Count:GetFont(), 16, "OUTLINE") + + -- hook Cooldown stuff for alpha fix in 6.0 + HookCooldown(button) + + -- Store the button in the registry, needed for event and OnUpdate handling + if not next(ButtonRegistry) then + InitializeEventHandler() + end + ButtonRegistry[button] = true + + button:UpdateConfig(config) + + -- run an initial update + button:UpdateAction() + UpdateHotkeys(button) + + -- somewhat of a hack for the Flyout buttons to not error. + button.action = 0 + + lib.callbacks:Fire("OnButtonCreated", button) + + return button +end + +function SetupSecureSnippets(button) + button:SetAttribute("_custom", Custom.RunCustom) + -- secure UpdateState(self, state) + -- update the type and action of the button based on the state + button:SetAttribute("UpdateState", [[ + local state = ... + self:SetAttribute("state", state) + local type, action = (self:GetAttribute(format("labtype-%s", state)) or "empty"), self:GetAttribute(format("labaction-%s", state)) + + self:SetAttribute("type", type) + if type ~= "empty" and type ~= "custom" then + local action_field = (type == "pet") and "action" or type + self:SetAttribute(action_field, action) + self:SetAttribute("action_field", action_field) + end + local onStateChanged = self:GetAttribute("OnStateChanged") + if onStateChanged then + self:Run(onStateChanged, state, type, action) + end + ]]) + + -- this function is invoked by the header when the state changes + button:SetAttribute("_childupdate-state", [[ + self:RunAttribute("UpdateState", message) + self:CallMethod("UpdateAction") + ]]) + + -- secure PickupButton(self, kind, value, ...) + -- utility function to place a object on the cursor + button:SetAttribute("PickupButton", [[ + local kind, value = ... + if kind == "empty" then + return "clear" + elseif kind == "action" or kind == "pet" then + local actionType = (kind == "pet") and "petaction" or kind + return actionType, value + elseif kind == "spell" or kind == "item" or kind == "macro" then + return "clear", kind, value + else + print("LibActionButton-1.0: Unknown type: " .. tostring(kind)) + return false + end + ]]) + + button:SetAttribute("OnDragStart", [[ + if (self:GetAttribute("buttonlock") and not IsModifiedClick("PICKUPACTION")) or self:GetAttribute("LABdisableDragNDrop") then return false end + local state = self:GetAttribute("state") + local type = self:GetAttribute("type") + -- if the button is empty, we can't drag anything off it + if type == "empty" or type == "custom" then + return false + end + -- Get the value for the action attribute + local action_field = self:GetAttribute("action_field") + local action = self:GetAttribute(action_field) + + -- non-action fields need to change their type to empty + if type ~= "action" and type ~= "pet" then + self:SetAttribute(format("labtype-%s", state), "empty") + self:SetAttribute(format("labaction-%s", state), nil) + -- update internal state + self:RunAttribute("UpdateState", state) + -- send a notification to the insecure code + self:CallMethod("ButtonContentsChanged", state, "empty", nil) + end + -- return the button contents for pickup + return self:RunAttribute("PickupButton", type, action) + ]]) + + button:SetAttribute("OnReceiveDrag", [[ + if self:GetAttribute("LABdisableDragNDrop") then return false end + local kind, value, subtype, extra = ... + if not kind or not value then return false end + local state = self:GetAttribute("state") + local buttonType, buttonAction = self:GetAttribute("type"), nil + if buttonType == "custom" then return false end + -- action buttons can do their magic themself + -- for all other buttons, we'll need to update the content now + if buttonType ~= "action" and buttonType ~= "pet" then + -- with "spell" types, the 4th value contains the actual spell id + if kind == "spell" then + if extra then + value = extra + else + print("no spell id?", ...) + end + elseif kind == "item" and value then + value = format("item:%d", value) + end + + -- Get the action that was on the button before + if buttonType ~= "empty" then + buttonAction = self:GetAttribute(self:GetAttribute("action_field")) + end + + -- TODO: validate what kind of action is being fed in here + -- We can only use a handful of the possible things on the cursor + -- return false for all those we can't put on buttons + + self:SetAttribute(format("labtype-%s", state), kind) + self:SetAttribute(format("labaction-%s", state), value) + -- update internal state + self:RunAttribute("UpdateState", state) + -- send a notification to the insecure code + self:CallMethod("ButtonContentsChanged", state, kind, value) + else + -- get the action for (pet-)action buttons + buttonAction = self:GetAttribute("action") + end + return self:RunAttribute("PickupButton", buttonType, buttonAction) + ]]) + + button:SetScript("OnDragStart", nil) + -- Wrapped OnDragStart(self, button, kind, value, ...) + button.header:WrapScript(button, "OnDragStart", [[ + return self:RunAttribute("OnDragStart") + ]]) + -- Wrap twice, because the post-script is not run when the pre-script causes a pickup (doh) + -- we also need some phony message, or it won't work =/ + button.header:WrapScript(button, "OnDragStart", [[ + return "message", "update" + ]], [[ + self:RunAttribute("UpdateState", self:GetAttribute("state")) + ]]) + + button:SetScript("OnReceiveDrag", nil) + -- Wrapped OnReceiveDrag(self, button, kind, value, ...) + button.header:WrapScript(button, "OnReceiveDrag", [[ + return self:RunAttribute("OnReceiveDrag", kind, value, ...) + ]]) + -- Wrap twice, because the post-script is not run when the pre-script causes a pickup (doh) + -- we also need some phony message, or it won't work =/ + button.header:WrapScript(button, "OnReceiveDrag", [[ + return "message", "update" + ]], [[ + self:RunAttribute("UpdateState", self:GetAttribute("state")) + ]]) +end + +function WrapOnClick(button) + -- Wrap OnClick, to catch changes to actions that are applied with a click on the button. + button.header:WrapScript(button, "OnClick", [[ + if self:GetAttribute("type") == "action" then + local type, action = GetActionInfo(self:GetAttribute("action")) + return nil, format("%s|%s", tostring(type), tostring(action)) + end + ]], [[ + local type, action = GetActionInfo(self:GetAttribute("action")) + if message ~= format("%s|%s", tostring(type), tostring(action)) then + self:RunAttribute("UpdateState", self:GetAttribute("state")) + end + ]]) +end + +----------------------------------------------------------- +--- utility + +function lib:GetAllButtons() + local buttons = {} + for button in next, ButtonRegistry do + buttons[button] = true + end + return buttons +end + +function Generic:ClearSetPoint(...) + self:ClearAllPoints() + self:SetPoint(...) +end + +function Generic:NewHeader(header) + self.header = header + self:SetParent(header) + SetupSecureSnippets(self) + WrapOnClick(self) +end + + +----------------------------------------------------------- +--- state management + +function Generic:ClearStates() + for state in pairs(self.state_types) do + self:SetAttribute(format("labtype-%s", state), nil) + self:SetAttribute(format("labaction-%s", state), nil) + end + wipe(self.state_types) + wipe(self.state_actions) +end + +function Generic:SetState(state, kind, action) + if not state then state = self:GetAttribute("state") end + state = tostring(state) + -- we allow a nil kind for setting a empty state + if not kind then kind = "empty" end + if not type_meta_map[kind] then + error("SetStateAction: unknown action type: " .. tostring(kind), 2) + end + if kind ~= "empty" and action == nil then + error("SetStateAction: an action is required for non-empty states", 2) + end + if kind ~= "custom" and action ~= nil and type(action) ~= "number" and type(action) ~= "string" or (kind == "custom" and type(action) ~= "table") then + error("SetStateAction: invalid action data type, only strings and numbers allowed", 2) + end + + if kind == "item" then + if tonumber(action) then + action = format("item:%s", action) + else + local itemString = str_match(action, "^|c%x+|H(item[%d:]+)|h%[") + if itemString then + action = itemString + end + end + end + + self.state_types[state] = kind + self.state_actions[state] = action + self:UpdateState(state) +end + +function Generic:UpdateState(state) + if not state then state = self:GetAttribute("state") end + state = tostring(state) + self:SetAttribute(format("labtype-%s", state), self.state_types[state]) + self:SetAttribute(format("labaction-%s", state), self.state_actions[state]) + if state ~= tostring(self:GetAttribute("state")) then return end + if self.header then + self.header:SetFrameRef("updateButton", self) + self.header:Execute([[ + local frame = self:GetFrameRef("updateButton") + control:RunFor(frame, frame:GetAttribute("UpdateState"), frame:GetAttribute("state")) + ]]) + else + -- TODO + end + self:UpdateAction() +end + +function Generic:GetAction(state) + if not state then state = self:GetAttribute("state") end + state = tostring(state) + return self.state_types[state] or "empty", self.state_actions[state] +end + +function Generic:UpdateAllStates() + for state in pairs(self.state_types) do + self:UpdateState(state) + end +end + +function Generic:ButtonContentsChanged(state, kind, value) + state = tostring(state) + self.state_types[state] = kind or "empty" + self.state_actions[state] = value + lib.callbacks:Fire("OnButtonContentsChanged", self, state, self.state_types[state], self.state_actions[state]) + self:UpdateAction(self) +end + +function Generic:DisableDragNDrop(flag) + if InCombatLockdown() then + error("LibActionButton-1.0: You can only toggle DragNDrop out of combat!", 2) + end + if flag then + self:SetAttribute("LABdisableDragNDrop", true) + else + self:SetAttribute("LABdisableDragNDrop", nil) + end +end + +function Generic:AddToButtonFacade(group) + if type(group) ~= "table" or type(group.AddButton) ~= "function" then + error("LibActionButton-1.0:AddToButtonFacade: You need to supply a proper group to use!", 2) + end + group:AddButton(self) + self.LBFSkinned = true +end + +function Generic:AddToMasque(group) + if type(group) ~= "table" or type(group.AddButton) ~= "function" then + error("LibActionButton-1.0:AddToMasque: You need to supply a proper group to use!", 2) + end + group:AddButton(self) + self.MasqueSkinned = true +end + +function Generic:UpdateAlpha() + UpdateCooldown(self) +end + +----------------------------------------------------------- +--- frame scripts + +-- copied (and adjusted) from SecureHandlers.lua +local function PickupAny(kind, target, detail, ...) + if kind == "clear" then + ClearCursor() + kind, target, detail = target, detail, ... + end + + if kind == 'action' then + PickupAction(target) + elseif kind == 'item' then + PickupItem(target) + elseif kind == 'macro' then + PickupMacro(target) + elseif kind == 'petaction' then + PickupPetAction(target) + elseif kind == 'spell' then + PickupSpell(target) + elseif kind == 'companion' then + PickupCompanion(target, detail) + elseif kind == 'equipmentset' then + PickupEquipmentSet(target) + end +end + +function Generic:OnEnter() + if self.config.tooltip ~= "disabled" and (self.config.tooltip ~= "nocombat" or not InCombatLockdown()) then + UpdateTooltip(self) + end + if KeyBound then + KeyBound:Set(self) + end + + if self._state_type == "action" and self.NewActionTexture then + lib.ACTION_HIGHLIGHT_MARKS[self._state_action] = false + UpdateNewAction(self) + end +end + +function Generic:OnLeave() + GameTooltip:Hide() +end + +-- Insecure drag handler to allow clicking on the button with an action on the cursor +-- to place it on the button. Like action buttons work. +function Generic:PreClick() + if self._state_type == "action" or self._state_type == "pet" + or InCombatLockdown() or self:GetAttribute("LABdisableDragNDrop") + then + return + end + -- check if there is actually something on the cursor + local kind, value, subtype = GetCursorInfo() + if not (kind and value) then return end + self._old_type = self._state_type + if self._state_type and self._state_type ~= "empty" then + self._old_type = self._state_type + self:SetAttribute("type", "empty") + --self:SetState(nil, "empty", nil) + end + self._receiving_drag = true +end + +local function formatHelper(input) + if type(input) == "string" then + return format("%q", input) + else + return tostring(input) + end +end + +function Generic:PostClick() + UpdateButtonState(self) + if self._receiving_drag and not InCombatLockdown() then + if self._old_type then + self:SetAttribute("type", self._old_type) + self._old_type = nil + end + local oldType, oldAction = self._state_type, self._state_action + local kind, data, subtype, extra = GetCursorInfo() + self.header:SetFrameRef("updateButton", self) + self.header:Execute(format([[ + local frame = self:GetFrameRef("updateButton") + control:RunFor(frame, frame:GetAttribute("OnReceiveDrag"), %s, %s, %s, %s) + control:RunFor(frame, frame:GetAttribute("UpdateState"), %s) + ]], formatHelper(kind), formatHelper(data), formatHelper(subtype), formatHelper(extra), formatHelper(self:GetAttribute("state")))) + PickupAny("clear", oldType, oldAction) + end + self._receiving_drag = nil +end + +----------------------------------------------------------- +--- configuration + +local function merge(target, source, default) + for k,v in pairs(default) do + if type(v) ~= "table" then + if source and source[k] ~= nil then + target[k] = source[k] + else + target[k] = v + end + else + if type(target[k]) ~= "table" then target[k] = {} else wipe(target[k]) end + merge(target[k], type(source) == "table" and source[k], v) + end + end + return target +end + +function Generic:UpdateConfig(config) + if config and type(config) ~= "table" then + error("LibActionButton-1.0: UpdateConfig requires a valid configuration!", 2) + end + local oldconfig = self.config + if not self.config then self.config = {} end + -- merge the two configs + merge(self.config, config, DefaultConfig) + + if self.config.outOfRangeColoring == "button" or (oldconfig and oldconfig.outOfRangeColoring == "button") then + UpdateUsable(self) + end + if self.config.outOfRangeColoring == "hotkey" then + self.outOfRange = nil + elseif oldconfig and oldconfig.outOfRangeColoring == "hotkey" then + self.HotKey:SetVertexColor(0.75, 0.75, 0.75) + end + + if self.config.hideElements.macro then + self.Name:Hide() + else + self.Name:Show() + end + + self:SetAttribute("flyoutDirection", self.config.flyoutDirection) + + UpdateHotkeys(self) + UpdateGrid(self) + Update(self) + self:RegisterForClicks(self.config.clickOnDown and "AnyDown" or "AnyUp") +end + +----------------------------------------------------------- +--- event handler + +function ForAllButtons(method, onlyWithAction) + assert(type(method) == "function") + for button in next, (onlyWithAction and ActiveButtons or ButtonRegistry) do + method(button) + end +end + +function InitializeEventHandler() + lib.eventFrame:SetScript("OnEvent", OnEvent) + lib.eventFrame:RegisterEvent("PLAYER_ENTERING_WORLD") + lib.eventFrame:RegisterEvent("ACTIONBAR_SHOWGRID") + lib.eventFrame:RegisterEvent("ACTIONBAR_HIDEGRID") + --lib.eventFrame:RegisterEvent("ACTIONBAR_PAGE_CHANGED") + --lib.eventFrame:RegisterEvent("UPDATE_BONUS_ACTIONBAR") + lib.eventFrame:RegisterEvent("ACTIONBAR_SLOT_CHANGED") + lib.eventFrame:RegisterEvent("UPDATE_BINDINGS") + lib.eventFrame:RegisterEvent("UPDATE_SHAPESHIFT_FORM") + lib.eventFrame:RegisterEvent("UPDATE_VEHICLE_ACTIONBAR") + + lib.eventFrame:RegisterEvent("ACTIONBAR_UPDATE_STATE") + lib.eventFrame:RegisterEvent("ACTIONBAR_UPDATE_USABLE") + lib.eventFrame:RegisterEvent("ACTIONBAR_UPDATE_COOLDOWN") + lib.eventFrame:RegisterEvent("PLAYER_TARGET_CHANGED") + lib.eventFrame:RegisterEvent("TRADE_SKILL_SHOW") + lib.eventFrame:RegisterEvent("TRADE_SKILL_CLOSE") + lib.eventFrame:RegisterEvent("ARCHAEOLOGY_CLOSED") + lib.eventFrame:RegisterEvent("PLAYER_ENTER_COMBAT") + lib.eventFrame:RegisterEvent("PLAYER_LEAVE_COMBAT") + lib.eventFrame:RegisterEvent("START_AUTOREPEAT_SPELL") + lib.eventFrame:RegisterEvent("STOP_AUTOREPEAT_SPELL") + lib.eventFrame:RegisterEvent("UNIT_ENTERED_VEHICLE") + lib.eventFrame:RegisterEvent("UNIT_EXITED_VEHICLE") + lib.eventFrame:RegisterEvent("COMPANION_UPDATE") + lib.eventFrame:RegisterEvent("UNIT_INVENTORY_CHANGED") + lib.eventFrame:RegisterEvent("LEARNED_SPELL_IN_TAB") + lib.eventFrame:RegisterEvent("PET_STABLE_UPDATE") + lib.eventFrame:RegisterEvent("PET_STABLE_SHOW") + lib.eventFrame:RegisterEvent("SPELL_ACTIVATION_OVERLAY_GLOW_SHOW") + lib.eventFrame:RegisterEvent("SPELL_ACTIVATION_OVERLAY_GLOW_HIDE") + lib.eventFrame:RegisterEvent("SPELL_UPDATE_CHARGES") + lib.eventFrame:RegisterEvent("UPDATE_SUMMONPETS_ACTION") + + -- With those two, do we still need the ACTIONBAR equivalents of them? + lib.eventFrame:RegisterEvent("SPELL_UPDATE_COOLDOWN") + lib.eventFrame:RegisterEvent("SPELL_UPDATE_USABLE") + lib.eventFrame:RegisterEvent("PLAYER_EQUIPMENT_CHANGED") + + lib.eventFrame:RegisterEvent("LOSS_OF_CONTROL_ADDED") + lib.eventFrame:RegisterEvent("LOSS_OF_CONTROL_UPDATE") + + lib.eventFrame:Show() + lib.eventFrame:SetScript("OnUpdate", OnUpdate) +end + +function OnEvent(frame, event, arg1, ...) + if (event == "UNIT_INVENTORY_CHANGED" and arg1 == "player") or event == "LEARNED_SPELL_IN_TAB" then + local tooltipOwner = GameTooltip:GetOwner() + if ButtonRegistry[tooltipOwner] then + tooltipOwner:SetTooltip() + end + elseif event == "ACTIONBAR_SLOT_CHANGED" then + for button in next, ButtonRegistry do + if button._state_type == "action" and (arg1 == 0 or arg1 == tonumber(button._state_action)) then + Update(button) + end + end + elseif event == "PLAYER_ENTERING_WORLD" or event == "UPDATE_SHAPESHIFT_FORM" or event == "UPDATE_VEHICLE_ACTIONBAR" then + ForAllButtons(Update) + elseif event == "ACTIONBAR_PAGE_CHANGED" or event == "UPDATE_BONUS_ACTIONBAR" then + -- TODO: Are these even needed? + elseif event == "ACTIONBAR_SHOWGRID" then + ShowGrid() + elseif event == "ACTIONBAR_HIDEGRID" then + HideGrid() + elseif event == "UPDATE_BINDINGS" then + ForAllButtons(UpdateHotkeys) + elseif event == "PLAYER_TARGET_CHANGED" then + UpdateRangeTimer() + elseif (event == "ACTIONBAR_UPDATE_STATE") or + ((event == "UNIT_ENTERED_VEHICLE" or event == "UNIT_EXITED_VEHICLE") and (arg1 == "player")) or + ((event == "COMPANION_UPDATE") and (arg1 == "MOUNT")) then + ForAllButtons(UpdateButtonState, true) + elseif event == "ACTIONBAR_UPDATE_USABLE" then + for button in next, ActionButtons do + UpdateUsable(button) + end + elseif event == "SPELL_UPDATE_USABLE" then + for button in next, NonActionButtons do + UpdateUsable(button) + end + elseif event == "ACTIONBAR_UPDATE_COOLDOWN" then + for button in next, ActionButtons do + UpdateCooldown(button) + if GameTooltip:GetOwner() == button then + UpdateTooltip(button) + end + end + elseif event == "SPELL_UPDATE_COOLDOWN" then + for button in next, NonActionButtons do + UpdateCooldown(button) + if GameTooltip:GetOwner() == button then + UpdateTooltip(button) + end + end + elseif event == "LOSS_OF_CONTROL_ADDED" then + for button in next, ActiveButtons do + UpdateCooldown(button) + if GameTooltip:GetOwner() == button then + UpdateTooltip(button) + end + end + elseif event == "LOSS_OF_CONTROL_UPDATE" then + for button in next, ActiveButtons do + UpdateCooldown(button) + end + elseif event == "TRADE_SKILL_SHOW" or event == "TRADE_SKILL_CLOSE" or event == "ARCHAEOLOGY_CLOSED" then + ForAllButtons(UpdateButtonState, true) + elseif event == "PLAYER_ENTER_COMBAT" then + for button in next, ActiveButtons do + if button:IsAttack() then + StartFlash(button) + end + end + elseif event == "PLAYER_LEAVE_COMBAT" then + for button in next, ActiveButtons do + if button:IsAttack() then + StopFlash(button) + end + end + elseif event == "START_AUTOREPEAT_SPELL" then + for button in next, ActiveButtons do + if button:IsAutoRepeat() then + StartFlash(button) + end + end + elseif event == "STOP_AUTOREPEAT_SPELL" then + for button in next, ActiveButtons do + if button.flashing == 1 and not button:IsAttack() then + StopFlash(button) + end + end + elseif event == "PET_STABLE_UPDATE" or event == "PET_STABLE_SHOW" then + ForAllButtons(Update) + elseif event == "SPELL_ACTIVATION_OVERLAY_GLOW_SHOW" then + for button in next, ActiveButtons do + local spellId = button:GetSpellId() + if spellId and spellId == arg1 then + ShowOverlayGlow(button) + else + if button._state_type == "action" then + local actionType, id = GetActionInfo(button._state_action) + if actionType == "flyout" and FlyoutHasSpell(id, arg1) then + ShowOverlayGlow(button) + end + end + end + end + elseif event == "SPELL_ACTIVATION_OVERLAY_GLOW_HIDE" then + for button in next, ActiveButtons do + local spellId = button:GetSpellId() + if spellId and spellId == arg1 then + HideOverlayGlow(button) + else + if button._state_type == "action" then + local actionType, id = GetActionInfo(button._state_action) + if actionType == "flyout" and FlyoutHasSpell(id, arg1) then + HideOverlayGlow(button) + end + end + end + end + elseif event == "PLAYER_EQUIPMENT_CHANGED" then + for button in next, ActiveButtons do + if button._state_type == "item" then + Update(button) + end + end + elseif event == "SPELL_UPDATE_CHARGES" then + ForAllButtons(UpdateCount, true) + elseif event == "UPDATE_SUMMONPETS_ACTION" then + for button in next, ActiveButtons do + if button._state_type == "action" then + local actionType, id = GetActionInfo(button._state_action) + if actionType == "summonpet" then + local texture = GetActionTexture(button._state_action) + if texture then + button.icon:SetTexture(texture) + end + end + end + end + end +end + +local flashTime = 0 +local rangeTimer = -1 +function OnUpdate(_, elapsed) + flashTime = flashTime - elapsed + rangeTimer = rangeTimer - elapsed + -- Run the loop only when there is something to update + if rangeTimer <= 0 or flashTime <= 0 then + for button in next, ActiveButtons do + -- Flashing + if button.flashing == 1 and flashTime <= 0 then + if button.Flash:IsShown() then + button.Flash:Hide() + else + button.Flash:Show() + end + end + + -- Range + if rangeTimer <= 0 then + local inRange = button:IsInRange() + local oldRange = button.outOfRange + button.outOfRange = (inRange == false) + if oldRange ~= button.outOfRange then + if button.config.outOfRangeColoring == "button" then + UpdateUsable(button) + elseif button.config.outOfRangeColoring == "hotkey" then + local hotkey = button.HotKey + if hotkey:GetText() == RANGE_INDICATOR then + if inRange == false then + hotkey:Show() + else + hotkey:Hide() + end + end + if inRange == false then + hotkey:SetVertexColor(unpack(button.config.colors.range)) + else + hotkey:SetVertexColor(0.75, 0.75, 0.75) + end + end + end + end + end + + -- Update values + if flashTime <= 0 then + flashTime = flashTime + ATTACK_BUTTON_FLASH_TIME + end + if rangeTimer <= 0 then + rangeTimer = TOOLTIP_UPDATE_TIME + end + end +end + +local gridCounter = 0 +function ShowGrid() + gridCounter = gridCounter + 1 + if gridCounter >= 1 then + for button in next, ButtonRegistry do + if button:IsShown() then + button:SetAlpha(1.0) + end + end + end +end + +function HideGrid() + if gridCounter > 0 then + gridCounter = gridCounter - 1 + end + if gridCounter == 0 then + for button in next, ButtonRegistry do + if button:IsShown() and not button:HasAction() and not button.config.showGrid then + button:SetAlpha(0.0) + end + end + end +end + +function UpdateGrid(self) + if self.config.showGrid then + self:SetAlpha(1.0) + elseif gridCounter == 0 and self:IsShown() and not self:HasAction() then + self:SetAlpha(0.0) + end +end + +----------------------------------------------------------- +--- KeyBound integration + +function Generic:GetBindingAction() + return self.config.keyBoundTarget or "CLICK "..self:GetName()..":LeftButton" +end + +function Generic:GetHotkey() + local name = "CLICK "..self:GetName()..":LeftButton" + local key = GetBindingKey(self.config.keyBoundTarget or name) + if not key and self.config.keyBoundTarget then + key = GetBindingKey(name) + end + if key then + return KeyBound and KeyBound:ToShortKey(key) or key + end +end + +local function getKeys(binding, keys) + keys = keys or "" + for i = 1, select("#", GetBindingKey(binding)) do + local hotKey = select(i, GetBindingKey(binding)) + if keys ~= "" then + keys = keys .. ", " + end + keys = keys .. GetBindingText(hotKey, "KEY_") + end + return keys +end + +function Generic:GetBindings() + local keys, binding + + if self.config.keyBoundTarget then + keys = getKeys(self.config.keyBoundTarget) + end + + keys = getKeys("CLICK "..self:GetName()..":LeftButton") + + return keys +end + +function Generic:SetKey(key) + if self.config.keyBoundTarget then + SetBinding(key, self.config.keyBoundTarget) + else + SetBindingClick(key, self:GetName(), "LeftButton") + end + lib.callbacks:Fire("OnKeybindingChanged", self, key) +end + +local function clearBindings(binding) + while GetBindingKey(binding) do + SetBinding(GetBindingKey(binding), nil) + end +end + +function Generic:ClearBindings() + if self.config.keyBoundTarget then + clearBindings(self.config.keyBoundTarget) + end + clearBindings("CLICK "..self:GetName()..":LeftButton") + lib.callbacks:Fire("OnKeybindingChanged", self, nil) +end + +----------------------------------------------------------- +--- button management + +function Generic:UpdateAction(force) + local type, action = self:GetAction() + if force or type ~= self._state_type or action ~= self._state_action then + -- type changed, update the metatable + if force or self._state_type ~= type then + local meta = type_meta_map[type] or type_meta_map.empty + setmetatable(self, meta) + self._state_type = type + end + self._state_action = action + Update(self) + end +end + +function Update(self) + if self:HasAction() then + ActiveButtons[self] = true + if self._state_type == "action" then + ActionButtons[self] = true + NonActionButtons[self] = nil + else + ActionButtons[self] = nil + NonActionButtons[self] = true + end + self:SetAlpha(1.0) + UpdateButtonState(self) + UpdateUsable(self) + UpdateCooldown(self) + UpdateFlash(self) + else + ActiveButtons[self] = nil + ActionButtons[self] = nil + NonActionButtons[self] = nil + if gridCounter == 0 and not self.config.showGrid then + self:SetAlpha(0.0) + end + self.cooldown:Hide() + self:SetChecked(false) + end + + -- Add a green border if button is an equipped item + if self:IsEquipped() and not self.config.hideElements.equipped then + self.Border:SetVertexColor(0, 1.0, 0, 0.35) + self.Border:Show() + else + self.Border:Hide() + end + + -- Update Action Text + if not self:IsConsumableOrStackable() then + self.Name:SetText(self:GetActionText()) + else + self.Name:SetText("") + end + + -- Update icon and hotkey + local texture = self:GetTexture() + if texture then + self.icon:SetTexture(texture) + self.icon:Show() + self.rangeTimer = - 1 + self:SetNormalTexture("Interface\\Buttons\\UI-Quickslot2") + if not self.LBFSkinned and not self.MasqueSkinned then + self.NormalTexture:SetTexCoord(0, 0, 0, 0) + end + else + self.icon:Hide() + self.cooldown:Hide() + self.rangeTimer = nil + self:SetNormalTexture("Interface\\Buttons\\UI-Quickslot") + if self.HotKey:GetText() == RANGE_INDICATOR then + self.HotKey:Hide() + else + self.HotKey:SetVertexColor(0.75, 0.75, 0.75) + end + if not self.LBFSkinned and not self.MasqueSkinned then + self.NormalTexture:SetTexCoord(-0.15, 1.15, -0.15, 1.17) + end + end + + self:UpdateLocal() + + UpdateCount(self) + + UpdateFlyout(self) + + UpdateOverlayGlow(self) + + UpdateNewAction(self) + + if GameTooltip:GetOwner() == self then + UpdateTooltip(self) + end + + -- this could've been a spec change, need to call OnStateChanged for action buttons, if present + if not InCombatLockdown() and self._state_type == "action" then + local onStateChanged = self:GetAttribute("OnStateChanged") + if onStateChanged then + self.header:SetFrameRef("updateButton", self) + self.header:Execute(([[ + local frame = self:GetFrameRef("updateButton") + control:RunFor(frame, frame:GetAttribute("OnStateChanged"), %s, %s, %s) + ]]):format(formatHelper(self:GetAttribute("state")), formatHelper(self._state_type), formatHelper(self._state_action))) + end + end + lib.callbacks:Fire("OnButtonUpdate", self) +end + +function Generic:UpdateLocal() + -- dummy function the other button types can override for special updating +end + +function UpdateButtonState(self) + if self:IsCurrentlyActive() or self:IsAutoRepeat() then + self:SetChecked(true) + else + self:SetChecked(false) + end + lib.callbacks:Fire("OnButtonState", self) +end + +function UpdateUsable(self) + -- TODO: make the colors configurable + -- TODO: allow disabling of the whole recoloring + if self.config.outOfRangeColoring == "button" and self.outOfRange then + self.icon:SetVertexColor(unpack(self.config.colors.range)) + else + local isUsable, notEnoughMana = self:IsUsable() + if isUsable then + self.icon:SetVertexColor(1.0, 1.0, 1.0) + --self.NormalTexture:SetVertexColor(1.0, 1.0, 1.0) + elseif notEnoughMana then + self.icon:SetVertexColor(unpack(self.config.colors.mana)) + --self.NormalTexture:SetVertexColor(0.5, 0.5, 1.0) + else + self.icon:SetVertexColor(0.4, 0.4, 0.4) + --self.NormalTexture:SetVertexColor(1.0, 1.0, 1.0) + end + end + lib.callbacks:Fire("OnButtonUsable", self) +end + +function UpdateCount(self) + if not self:HasAction() then + self.Count:SetText("") + return + end + if self:IsConsumableOrStackable() then + local count = self:GetCount() + if count > (self.maxDisplayCount or 9999) then + self.Count:SetText("*") + else + self.Count:SetText(count) + end + else + local charges, maxCharges, chargeStart, chargeDuration = self:GetCharges() + if charges and maxCharges and maxCharges > 0 then + self.Count:SetText(charges) + else + self.Count:SetText("") + end + end +end + +local function SetCooldownHook(cooldown, ...) + local effectiveAlpha = cooldown:GetEffectiveAlpha() + local start, duration = ... + + if start ~= 0 or duration ~= 0 then + -- update swipe alpha + cooldown.__metaLAB.SetSwipeColor(cooldown, cooldown.__SwipeR, cooldown.__SwipeG, cooldown.__SwipeB, cooldown.__SwipeA * effectiveAlpha) + + -- only draw bling and edge if alpha is over 50% + cooldown:SetDrawBling(effectiveAlpha > 0.5) + if effectiveAlpha < 0.5 then + cooldown:SetDrawEdge(false) + end + + -- ensure the swipe isn't drawn on fully faded bars + if effectiveAlpha <= 0.0 then + cooldown:SetDrawSwipe(false) + end + end + + return cooldown.__metaLAB.SetCooldown(cooldown, ...) +end + +local function SetSwipeColorHook(cooldown, r, g, b, a) + local effectiveAlpha = cooldown:GetEffectiveAlpha() + cooldown.__SwipeR, cooldown.__SwipeG, cooldown.__SwipeB, cooldown.__SwipeA = r, g, b, (a or 1) + return cooldown.__metaLAB.SetSwipeColor(cooldown, r, g, b, a * effectiveAlpha) +end + +function HookCooldown(button) + if not button.cooldown.__metaLAB then + button.cooldown.__metaLAB = getmetatable(button.cooldown).__index + button.cooldown.__SwipeR, button.cooldown.__SwipeG, button.cooldown.__SwipeB, button.cooldown.__SwipeA = 0, 0, 0, 0.8 + + button.cooldown.SetCooldown = SetCooldownHook + button.cooldown.SetSwipeColor = SetSwipeColorHook + end +end + +function OnCooldownDone(self) + self:SetScript("OnCooldownDone", nil) + UpdateCooldown(self:GetParent()) +end + +function UpdateCooldown(self) + local locStart, locDuration = self:GetLossOfControlCooldown() + local start, duration, enable, charges, maxCharges = self:GetCooldown() + + if (locStart + locDuration) > (start + duration) then + if self.cooldown.currentCooldownType ~= COOLDOWN_TYPE_LOSS_OF_CONTROL then + self.cooldown:SetEdgeTexture("Interface\\Cooldown\\edge-LoC") + self.cooldown:SetHideCountdownNumbers(true) + self.cooldown.currentCooldownType = COOLDOWN_TYPE_LOSS_OF_CONTROL + self.cooldown:SetSwipeColor(0.17, 0, 0, 0.8) + end + CooldownFrame_SetTimer(self.cooldown, locStart, locDuration, 1, nil, nil, true) + else + if self.cooldown.currentCooldownType ~= COOLDOWN_TYPE_NORMAL then + self.cooldown:SetEdgeTexture("Interface\\Cooldown\\edge") + self.cooldown:SetHideCountdownNumbers(false) + self.cooldown.currentCooldownType = COOLDOWN_TYPE_NORMAL + self.cooldown:SetSwipeColor(0, 0, 0, 0.8) + end + if locStart > 0 then + self.cooldown:SetScript("OnCooldownDone", OnCooldownDone) + end + CooldownFrame_SetTimer(self.cooldown, start, duration, enable, charges, maxCharges) + end +end + +function StartFlash(self) + self.flashing = 1 + flashTime = 0 + UpdateButtonState(self) +end + +function StopFlash(self) + self.flashing = 0 + self.Flash:Hide() + UpdateButtonState(self) +end + +function UpdateFlash(self) + if (self:IsAttack() and self:IsCurrentlyActive()) or self:IsAutoRepeat() then + StartFlash(self) + else + StopFlash(self) + end +end + +function UpdateTooltip(self) + if (GetCVar("UberTooltips") == "1") then + GameTooltip_SetDefaultAnchor(GameTooltip, self); + else + GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); + end + if self:SetTooltip() then + self.UpdateTooltip = UpdateTooltip + else + self.UpdateTooltip = nil + end +end + +function UpdateHotkeys(self) + local key = self:GetHotkey() + if not key or key == "" or self.config.hideElements.hotkey then + self.HotKey:SetText(RANGE_INDICATOR) + self.HotKey:SetPoint("TOPLEFT", self, "TOPLEFT", 1, - 2) + self.HotKey:Hide() + else + self.HotKey:SetText(key) + self.HotKey:SetPoint("TOPLEFT", self, "TOPLEFT", - 2, - 2) + self.HotKey:Show() + end +end + +local function OverlayGlow_OnHide(self) + if self.animOut:IsPlaying() then + self.animOut:Stop() + OverlayGlowAnimOutFinished(self.animOut) + end +end + +function GetOverlayGlow() + local overlay = tremove(lib.unusedOverlayGlows); + if not overlay then + lib.numOverlays = lib.numOverlays + 1 + overlay = CreateFrame("Frame", "LAB10ActionButtonOverlay"..lib.numOverlays, UIParent, "ActionBarButtonSpellActivationAlert") + overlay.animOut:SetScript("OnFinished", OverlayGlowAnimOutFinished) + overlay:SetScript("OnHide", OverlayGlow_OnHide) + end + return overlay +end + +function ShowOverlayGlow(self) + if self.overlay then + if self.overlay.animOut:IsPlaying() then + self.overlay.animOut:Stop() + self.overlay.animIn:Play() + end + else + self.overlay = GetOverlayGlow() + local frameWidth, frameHeight = self:GetSize() + self.overlay:SetParent(self) + self.overlay:ClearAllPoints() + --Make the height/width available before the next frame: + self.overlay:SetSize(frameWidth * 1.4, frameHeight * 1.4) + self.overlay:SetPoint("TOPLEFT", self, "TOPLEFT", -frameWidth * 0.2, frameHeight * 0.2) + self.overlay:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", frameWidth * 0.2, -frameHeight * 0.2) + self.overlay.animIn:Play() + end +end + +function HideOverlayGlow(self) + if self.overlay then + if self.overlay.animIn:IsPlaying() then + self.overlay.animIn:Stop() + end + if self:IsVisible() then + self.overlay.animOut:Play() + else + OverlayGlowAnimOutFinished(self.overlay.animOut) + end + end +end + +function OverlayGlowAnimOutFinished(animGroup) + local overlay = animGroup:GetParent() + local actionButton = overlay:GetParent() + overlay:Hide() + tinsert(lib.unusedOverlayGlows, overlay) + actionButton.overlay = nil +end + +function UpdateOverlayGlow(self) + local spellId = self:GetSpellId() + if spellId and IsSpellOverlayed(spellId) then + ShowOverlayGlow(self) + else + HideOverlayGlow(self) + end +end + +hooksecurefunc("MarkNewActionHighlight", function(action, flag) + lib.ACTION_HIGHLIGHT_MARKS[action] = flag + for button in next, ButtonRegistry do + if button._state_type == "action" and action == tonumber(button._state_action) then + UpdateNewAction(button) + end + end +end) + +function UpdateNewAction(self) + -- special handling for "New Action" markers + if self.NewActionTexture then + if self._state_type == "action" and lib.ACTION_HIGHLIGHT_MARKS[self._state_action] then + self.NewActionTexture:Show() + else + self.NewActionTexture:Hide() + end + end +end + +-- Hook UpdateFlyout so we can use the blizzy templates +hooksecurefunc("ActionButton_UpdateFlyout", function(self, ...) + if ButtonRegistry[self] then + UpdateFlyout(self) + end +end) + +function UpdateFlyout(self) + -- disabled FlyoutBorder/BorderShadow, those are not handled by LBF and look terrible + self.FlyoutBorder:Hide() + self.FlyoutBorderShadow:Hide() + if self._state_type == "action" then + -- based on ActionButton_UpdateFlyout in ActionButton.lua + local actionType = GetActionInfo(self._state_action) + if actionType == "flyout" then + -- Update border and determine arrow position + local arrowDistance + if (SpellFlyout and SpellFlyout:IsShown() and SpellFlyout:GetParent() == self) or GetMouseFocus() == self then + arrowDistance = 5 + else + arrowDistance = 2 + end + + -- Update arrow + self.FlyoutArrow:Show() + self.FlyoutArrow:ClearAllPoints() + local direction = self:GetAttribute("flyoutDirection"); + if direction == "LEFT" then + self.FlyoutArrow:SetPoint("LEFT", self, "LEFT", -arrowDistance, 0) + SetClampedTextureRotation(self.FlyoutArrow, 270) + elseif direction == "RIGHT" then + self.FlyoutArrow:SetPoint("RIGHT", self, "RIGHT", arrowDistance, 0) + SetClampedTextureRotation(self.FlyoutArrow, 90) + elseif direction == "DOWN" then + self.FlyoutArrow:SetPoint("BOTTOM", self, "BOTTOM", 0, -arrowDistance) + SetClampedTextureRotation(self.FlyoutArrow, 180) + else + self.FlyoutArrow:SetPoint("TOP", self, "TOP", 0, arrowDistance) + SetClampedTextureRotation(self.FlyoutArrow, 0) + end + + -- return here, otherwise flyout is hidden + return + end + end + self.FlyoutArrow:Hide() +end + +function UpdateRangeTimer() + rangeTimer = -1 +end + +local function GetSpellIdByName(spellName) + if not spellName then return end + local spellLink = GetSpellLink(spellName) + if spellLink then + return tonumber(spellLink:match("spell:(%d+)")) + end + return nil +end + +----------------------------------------------------------- +--- WoW API mapping +--- Generic Button +Generic.HasAction = function(self) return nil end +Generic.GetActionText = function(self) return "" end +Generic.GetTexture = function(self) return nil end +Generic.GetCharges = function(self) return nil end +Generic.GetCount = function(self) return 0 end +Generic.GetCooldown = function(self) return 0, 0, 0 end +Generic.IsAttack = function(self) return nil end +Generic.IsEquipped = function(self) return nil end +Generic.IsCurrentlyActive = function(self) return nil end +Generic.IsAutoRepeat = function(self) return nil end +Generic.IsUsable = function(self) return nil end +Generic.IsConsumableOrStackable = function(self) return nil end +Generic.IsUnitInRange = function(self, unit) return nil end +Generic.IsInRange = function(self) + local unit = self:GetAttribute("unit") + if unit == "player" then + unit = nil + end + local val = self:IsUnitInRange(unit) + -- map 1/0 to true false, since the return values are inconsistent between actions and spells + if val == 1 then val = true elseif val == 0 then val = false end + return val +end +Generic.SetTooltip = function(self) return nil end +Generic.GetSpellId = function(self) return nil end +Generic.GetLossOfControlCooldown = function(self) return 0, 0 end + +----------------------------------------------------------- +--- Action Button +Action.HasAction = function(self) return HasAction(self._state_action) end +Action.GetActionText = function(self) return GetActionText(self._state_action) end +Action.GetTexture = function(self) return GetActionTexture(self._state_action) end +Action.GetCharges = function(self) return GetActionCharges(self._state_action) end +Action.GetCount = function(self) return GetActionCount(self._state_action) end +Action.GetCooldown = function(self) return GetActionCooldown(self._state_action) end +Action.IsAttack = function(self) return IsAttackAction(self._state_action) end +Action.IsEquipped = function(self) return IsEquippedAction(self._state_action) end +Action.IsCurrentlyActive = function(self) return IsCurrentAction(self._state_action) end +Action.IsAutoRepeat = function(self) return IsAutoRepeatAction(self._state_action) end +Action.IsUsable = function(self) return IsUsableAction(self._state_action) end +Action.IsConsumableOrStackable = function(self) return IsConsumableAction(self._state_action) or IsStackableAction(self._state_action) or (not IsItemAction(self._state_action) and GetActionCount(self._state_action) > 0) end +Action.IsUnitInRange = function(self, unit) return IsActionInRange(self._state_action, unit) end +Action.SetTooltip = function(self) return GameTooltip:SetAction(self._state_action) end +Action.GetSpellId = function(self) + local actionType, id, subType = GetActionInfo(self._state_action) + if actionType == "spell" then + return id + elseif actionType == "macro" then + local _, _, spellId = GetMacroSpell(id) + return spellId + end +end +Action.GetLossOfControlCooldown = function(self) return GetActionLossOfControlCooldown(self._state_action) end + +----------------------------------------------------------- +--- Spell Button +Spell.HasAction = function(self) return true end +Spell.GetActionText = function(self) return "" end +Spell.GetTexture = function(self) return GetSpellTexture(self._state_action) end +Spell.GetCharges = function(self) return GetSpellCharges(self._state_action) end +Spell.GetCount = function(self) return GetSpellCount(self._state_action) end +Spell.GetCooldown = function(self) return GetSpellCooldown(self._state_action) end +Spell.IsAttack = function(self) return IsAttackSpell(FindSpellBookSlotBySpellID(self._state_action), "spell") end -- needs spell book id as of 4.0.1.13066 +Spell.IsEquipped = function(self) return nil end +Spell.IsCurrentlyActive = function(self) return IsCurrentSpell(self._state_action) end +Spell.IsAutoRepeat = function(self) return IsAutoRepeatSpell(FindSpellBookSlotBySpellID(self._state_action), "spell") end -- needs spell book id as of 4.0.1.13066 +Spell.IsUsable = function(self) return IsUsableSpell(self._state_action) end +Spell.IsConsumableOrStackable = function(self) return IsConsumableSpell(self._state_action) end +Spell.IsUnitInRange = function(self, unit) return IsSpellInRange(FindSpellBookSlotBySpellID(self._state_action), "spell", unit) end -- needs spell book id as of 4.0.1.13066 +Spell.SetTooltip = function(self) return GameTooltip:SetSpellByID(self._state_action) end +Spell.GetSpellId = function(self) return self._state_action end + +----------------------------------------------------------- +--- Item Button +local function getItemId(input) + return input:match("^item:(%d+)") +end + +Item.HasAction = function(self) return true end +Item.GetActionText = function(self) return "" end +Item.GetTexture = function(self) return GetItemIcon(self._state_action) end +Item.GetCharges = function(self) return nil end +Item.GetCount = function(self) return GetItemCount(self._state_action, nil, true) end +Item.GetCooldown = function(self) return GetItemCooldown(getItemId(self._state_action)) end +Item.IsAttack = function(self) return nil end +Item.IsEquipped = function(self) return IsEquippedItem(self._state_action) end +Item.IsCurrentlyActive = function(self) return IsCurrentItem(self._state_action) end +Item.IsAutoRepeat = function(self) return nil end +Item.IsUsable = function(self) return IsUsableItem(self._state_action) end +Item.IsConsumableOrStackable = function(self) return IsConsumableItem(self._state_action) end +Item.IsUnitInRange = function(self, unit) return IsItemInRange(self._state_action, unit) end +Item.SetTooltip = function(self) return GameTooltip:SetHyperlink(self._state_action) end +Item.GetSpellId = function(self) return nil end + +----------------------------------------------------------- +--- Macro Button +-- TODO: map results of GetMacroSpell/GetMacroItem to proper results +Macro.HasAction = function(self) return true end +Macro.GetActionText = function(self) return (GetMacroInfo(self._state_action)) end +Macro.GetTexture = function(self) return (select(2, GetMacroInfo(self._state_action))) end +Macro.GetCharges = function(self) return nil end +Macro.GetCount = function(self) return 0 end +Macro.GetCooldown = function(self) return 0, 0, 0 end +Macro.IsAttack = function(self) return nil end +Macro.IsEquipped = function(self) return nil end +Macro.IsCurrentlyActive = function(self) return nil end +Macro.IsAutoRepeat = function(self) return nil end +Macro.IsUsable = function(self) return nil end +Macro.IsConsumableOrStackable = function(self) return nil end +Macro.IsUnitInRange = function(self, unit) return nil end +Macro.SetTooltip = function(self) return nil end +Macro.GetSpellId = function(self) return nil end + +----------------------------------------------------------- +--- Custom Button +Custom.HasAction = function(self) return true end +Custom.GetActionText = function(self) return "" end +Custom.GetTexture = function(self) return self._state_action.texture end +Custom.GetCharges = function(self) return nil end +Custom.GetCount = function(self) return 0 end +Custom.GetCooldown = function(self) return 0, 0, 0 end +Custom.IsAttack = function(self) return nil end +Custom.IsEquipped = function(self) return nil end +Custom.IsCurrentlyActive = function(self) return nil end +Custom.IsAutoRepeat = function(self) return nil end +Custom.IsUsable = function(self) return true end +Custom.IsConsumableOrStackable = function(self) return nil end +Custom.IsUnitInRange = function(self, unit) return nil end +Custom.SetTooltip = function(self) return GameTooltip:SetText(self._state_action.tooltip) end +Custom.GetSpellId = function(self) return nil end +Custom.RunCustom = function(self, unit, button) return self._state_action.func(self, unit, button) end + +----------------------------------------------------------- +--- Update old Buttons +if oldversion and next(lib.buttonRegistry) then + InitializeEventHandler() + for button in next, lib.buttonRegistry do + -- this refreshes the metatable on the button + Generic.UpdateAction(button, true) + SetupSecureSnippets(button) + if oldversion < 12 then + WrapOnClick(button) + end + if oldversion < 23 then + if button.overlay then + button.overlay:Hide() + ActionButton_HideOverlayGlow(button) + button.overlay = nil + UpdateOverlayGlow(button) + end + end + end +end diff --git a/Jamba/LibActionButtonJamba-1.0-66.lua b/Jamba/LibActionButtonJamba-1.0-66.lua new file mode 100644 index 0000000..8f28d61 --- /dev/null +++ b/Jamba/LibActionButtonJamba-1.0-66.lua @@ -0,0 +1,1585 @@ +--[[ +Copyright (c) 2010-2017, Hendrik "nevcairiel" Leppkes <h.leppkes@gmail.com> + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the developer nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +]] +local MAJOR_VERSION = "LibActionButtonJamba-1.0" +local MINOR_VERSION = 68 + +if not LibStub then error(MAJOR_VERSION .. " requires LibStub.") end +local lib, oldversion = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION) +if not lib then return end + +-- Lua functions +local _G = _G +local type, error, tostring, tonumber, assert, select = type, error, tostring, tonumber, assert, select +local setmetatable, wipe, unpack, pairs, next = setmetatable, wipe, unpack, pairs, next +local str_match, format, tinsert, tremove = string.match, format, tinsert, tremove + +-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded +-- List them here for Mikk's FindGlobals script +-- Note: No WoW API function get upvalued to allow proper interaction with any addons that try to hook them. +-- GLOBALS: LibStub, CreateFrame, InCombatLockdown, ClearCursor, GetCursorInfo, GameTooltip, GameTooltip_SetDefaultAnchor +-- GLOBALS: GetBindingKey, GetBindingText, SetBinding, SetBindingClick, GetCVar, GetMacroInfo +-- GLOBALS: PickupAction, PickupItem, PickupMacro, PickupPetAction, PickupSpell, PickupCompanion, PickupEquipmentSet +-- GLOBALS: CooldownFrame_SetTimer, UIParent, IsSpellOverlayed, SpellFlyout, GetMouseFocus, SetClampedTextureRotation +-- GLOBALS: GetActionInfo, GetActionTexture, HasAction, GetActionText, GetActionCount, GetActionCooldown, IsAttackAction +-- GLOBALS: IsAutoRepeatAction, IsEquippedAction, IsCurrentAction, IsConsumableAction, IsUsableAction, IsStackableAction, IsActionInRange +-- GLOBALS: GetSpellLink, GetMacroSpell, GetSpellTexture, GetSpellCount, GetSpellCooldown, IsAttackSpell, IsCurrentSpell +-- GLOBALS: FindSpellBookSlotBySpellID, IsUsableSpell, IsConsumableSpell, IsSpellInRange, IsAutoRepeatSpell +-- GLOBALS: GetItemIcon, GetItemCount, GetItemCooldown, IsEquippedItem, IsCurrentItem, IsUsableItem, IsConsumableItem, IsItemInRange +-- GLOBALS: GetActionCharges, IsItemAction, GetSpellCharges +-- GLOBALS: RANGE_INDICATOR, ATTACK_BUTTON_FLASH_TIME, TOOLTIP_UPDATE_TIME +-- GLOBALS: ZoneAbilityFrame, HasZoneAbility, GetLastZoneAbilitySpellTexture + +local KeyBound = LibStub("LibKeyBound-1.0", true) +local CBH = LibStub("CallbackHandler-1.0") +local LBG = LibStub("LibButtonGlow-1.0", true) +local Masque = LibStub("Masque", true) + +lib.eventFrame = lib.eventFrame or CreateFrame("Frame") +lib.eventFrame:UnregisterAllEvents() + +lib.buttonRegistry = lib.buttonRegistry or {} +lib.activeButtons = lib.activeButtons or {} +lib.actionButtons = lib.actionButtons or {} +lib.nonActionButtons = lib.nonActionButtons or {} + +lib.ChargeCooldowns = lib.ChargeCooldowns or {} +lib.NumChargeCooldowns = lib.NumChargeCooldowns or 0 + +lib.ACTION_HIGHLIGHT_MARKS = lib.ACTION_HIGHLIGHT_MARKS or setmetatable({}, { __index = ACTION_HIGHLIGHT_MARKS }) + +lib.callbacks = lib.callbacks or CBH:New(lib) + +local Generic = CreateFrame("CheckButton") +local Generic_MT = {__index = Generic} + +local Action = setmetatable({}, {__index = Generic}) +local Action_MT = {__index = Action} + +local PetAction = setmetatable({}, {__index = Generic}) +local PetAction_MT = {__index = PetAction} + +local Spell = setmetatable({}, {__index = Generic}) +local Spell_MT = {__index = Spell} + +local Item = setmetatable({}, {__index = Generic}) +local Item_MT = {__index = Item} + +local Macro = setmetatable({}, {__index = Generic}) +local Macro_MT = {__index = Macro} + +local Custom = setmetatable({}, {__index = Generic}) +local Custom_MT = {__index = Custom} + +local type_meta_map = { + empty = Generic_MT, + action = Action_MT, + --pet = PetAction_MT, + spell = Spell_MT, + item = Item_MT, + macro = Macro_MT, + custom = Custom_MT +} + +local ButtonRegistry, ActiveButtons, ActionButtons, NonActionButtons = lib.buttonRegistry, lib.activeButtons, lib.actionButtons, lib.nonActionButtons + +local Update, UpdateButtonState, UpdateUsable, UpdateCount, UpdateCooldown, UpdateTooltip, UpdateNewAction, ClearNewActionHighlight +local StartFlash, StopFlash, UpdateFlash, UpdateHotkeys, UpdateRangeTimer, UpdateOverlayGlow +local UpdateFlyout, ShowGrid, HideGrid, UpdateGrid, SetupSecureSnippets, WrapOnClick +local ShowOverlayGlow, HideOverlayGlow +local EndChargeCooldown + +local InitializeEventHandler, OnEvent, ForAllButtons, OnUpdate + +local DefaultConfig = { + outOfRangeColoring = "button", + tooltip = "enabled", + showGrid = false, + colors = { + range = { 0.8, 0.1, 0.1 }, + mana = { 0.5, 0.5, 1.0 } + }, + hideElements = { + macro = false, + hotkey = false, + equipped = false, + }, + keyBoundTarget = false, + clickOnDown = false, + flyoutDirection = "UP", +} + +--- Create a new action button. +-- @param id Internal id of the button (not used by LibActionButton-1.0, only for tracking inside the calling addon) +-- @param name Name of the button frame to be created (not used by LibActionButton-1.0 aside from naming the frame) +-- @param header Header that drives these action buttons (if any) +function lib:CreateButton(id, name, header, config) + if type(name) ~= "string" then + error("Usage: CreateButton(id, name. header): Buttons must have a valid name!", 2) + end + if not header then + error("Usage: CreateButton(id, name, header): Buttons without a secure header are not yet supported!", 2) + end + + if not KeyBound then + KeyBound = LibStub("LibKeyBound-1.0", true) + end + + local button = setmetatable(CreateFrame("CheckButton", name, header, "SecureActionButtonTemplate, ActionButtonTemplate"), Generic_MT) + button:RegisterForDrag("LeftButton", "RightButton") + button:RegisterForClicks("AnyUp") + + -- Frame Scripts + button:SetScript("OnEnter", Generic.OnEnter) + button:SetScript("OnLeave", Generic.OnLeave) + button:SetScript("PreClick", Generic.PreClick) + button:SetScript("PostClick", Generic.PostClick) + + button.id = id + button.header = header + -- Mapping of state -> action + button.state_types = {} + button.state_actions = {} + + -- Store the LAB Version that created this button for debugging + button.__LAB_Version = MINOR_VERSION + + -- just in case we're not run by a header, default to state 0 + button:SetAttribute("state", 0) + + SetupSecureSnippets(button) + WrapOnClick(button) + + -- adjust hotkey style for better readability + button.HotKey:SetFont(button.HotKey:GetFont(), 13, "OUTLINE") + button.HotKey:SetVertexColor(0.75, 0.75, 0.75) + + -- adjust count/stack size + button.Count:SetFont(button.Count:GetFont(), 16, "OUTLINE") + + -- Store the button in the registry, needed for event and OnUpdate handling + if not next(ButtonRegistry) then + InitializeEventHandler() + end + ButtonRegistry[button] = true + + button:UpdateConfig(config) + + -- run an initial update + button:UpdateAction() + UpdateHotkeys(button) + + -- somewhat of a hack for the Flyout buttons to not error. + button.action = 0 + + lib.callbacks:Fire("OnButtonCreated", button) + + return button +end + +function SetupSecureSnippets(button) + button:SetAttribute("_custom", Custom.RunCustom) + -- secure UpdateState(self, state) + -- update the type and action of the button based on the state + button:SetAttribute("UpdateState", [[ + local state = ... + self:SetAttribute("state", state) + local type, action = (self:GetAttribute(format("labtype-%s", state)) or "empty"), self:GetAttribute(format("labaction-%s", state)) + + self:SetAttribute("type", type) + if type ~= "empty" and type ~= "custom" then + local action_field = (type == "pet") and "action" or type + self:SetAttribute(action_field, action) + self:SetAttribute("action_field", action_field) + end + local onStateChanged = self:GetAttribute("OnStateChanged") + if onStateChanged then + self:Run(onStateChanged, state, type, action) + end + ]]) + + -- this function is invoked by the header when the state changes + button:SetAttribute("_childupdate-state", [[ + self:RunAttribute("UpdateState", message) + self:CallMethod("UpdateAction") + ]]) + + -- secure PickupButton(self, kind, value, ...) + -- utility function to place a object on the cursor + button:SetAttribute("PickupButton", [[ + local kind, value = ... + if kind == "empty" then + return "clear" + elseif kind == "action" or kind == "pet" then + local actionType = (kind == "pet") and "petaction" or kind + return actionType, value + elseif kind == "spell" or kind == "item" or kind == "macro" then + return "clear", kind, value + else + print("LibActionButton-1.0: Unknown type: " .. tostring(kind)) + return false + end + ]]) + + button:SetAttribute("OnDragStart", [[ + if (self:GetAttribute("buttonlock") and not IsModifiedClick("PICKUPACTION")) or self:GetAttribute("LABdisableDragNDrop") then return false end + local state = self:GetAttribute("state") + local type = self:GetAttribute("type") + -- if the button is empty, we can't drag anything off it + if type == "empty" or type == "custom" then + return false + end + -- Get the value for the action attribute + local action_field = self:GetAttribute("action_field") + local action = self:GetAttribute(action_field) + + -- non-action fields need to change their type to empty + if type ~= "action" and type ~= "pet" then + self:SetAttribute(format("labtype-%s", state), "empty") + self:SetAttribute(format("labaction-%s", state), nil) + -- update internal state + self:RunAttribute("UpdateState", state) + -- send a notification to the insecure code + self:CallMethod("ButtonContentsChanged", state, "empty", nil) + end + -- return the button contents for pickup + return self:RunAttribute("PickupButton", type, action) + ]]) + + button:SetAttribute("OnReceiveDrag", [[ + if self:GetAttribute("LABdisableDragNDrop") then return false end + local kind, value, subtype, extra = ... + if not kind or not value then return false end + local state = self:GetAttribute("state") + local buttonType, buttonAction = self:GetAttribute("type"), nil + if buttonType == "custom" then return false end + -- action buttons can do their magic themself + -- for all other buttons, we'll need to update the content now + if buttonType ~= "action" and buttonType ~= "pet" then + -- with "spell" types, the 4th value contains the actual spell id + if kind == "spell" then + if extra then + value = extra + else + print("no spell id?", ...) + end + elseif kind == "item" and value then + value = format("item:%d", value) + end + + -- Get the action that was on the button before + if buttonType ~= "empty" then + buttonAction = self:GetAttribute(self:GetAttribute("action_field")) + end + + -- TODO: validate what kind of action is being fed in here + -- We can only use a handful of the possible things on the cursor + -- return false for all those we can't put on buttons + + self:SetAttribute(format("labtype-%s", state), kind) + self:SetAttribute(format("labaction-%s", state), value) + -- update internal state + self:RunAttribute("UpdateState", state) + -- send a notification to the insecure code + self:CallMethod("ButtonContentsChanged", state, kind, value) + else + -- get the action for (pet-)action buttons + buttonAction = self:GetAttribute("action") + end + return self:RunAttribute("PickupButton", buttonType, buttonAction) + ]]) + + button:SetScript("OnDragStart", nil) + -- Wrapped OnDragStart(self, button, kind, value, ...) + button.header:WrapScript(button, "OnDragStart", [[ + return self:RunAttribute("OnDragStart") + ]]) + -- Wrap twice, because the post-script is not run when the pre-script causes a pickup (doh) + -- we also need some phony message, or it won't work =/ + button.header:WrapScript(button, "OnDragStart", [[ + return "message", "update" + ]], [[ + self:RunAttribute("UpdateState", self:GetAttribute("state")) + ]]) + + button:SetScript("OnReceiveDrag", nil) + -- Wrapped OnReceiveDrag(self, button, kind, value, ...) + button.header:WrapScript(button, "OnReceiveDrag", [[ + return self:RunAttribute("OnReceiveDrag", kind, value, ...) + ]]) + -- Wrap twice, because the post-script is not run when the pre-script causes a pickup (doh) + -- we also need some phony message, or it won't work =/ + button.header:WrapScript(button, "OnReceiveDrag", [[ + return "message", "update" + ]], [[ + self:RunAttribute("UpdateState", self:GetAttribute("state")) + ]]) +end + +function WrapOnClick(button) + -- Wrap OnClick, to catch changes to actions that are applied with a click on the button. + button.header:WrapScript(button, "OnClick", [[ + if self:GetAttribute("type") == "action" then + local type, action = GetActionInfo(self:GetAttribute("action")) + return nil, format("%s|%s", tostring(type), tostring(action)) + end + ]], [[ + local type, action = GetActionInfo(self:GetAttribute("action")) + if message ~= format("%s|%s", tostring(type), tostring(action)) then + self:RunAttribute("UpdateState", self:GetAttribute("state")) + end + ]]) +end + +----------------------------------------------------------- +--- utility + +function lib:GetAllButtons() + local buttons = {} + for button in next, ButtonRegistry do + buttons[button] = true + end + return buttons +end + +function Generic:ClearSetPoint(...) + self:ClearAllPoints() + self:SetPoint(...) +end + +function Generic:NewHeader(header) + self.header = header + self:SetParent(header) + SetupSecureSnippets(self) + WrapOnClick(self) +end + + +----------------------------------------------------------- +--- state management + +function Generic:ClearStates() + for state in pairs(self.state_types) do + self:SetAttribute(format("labtype-%s", state), nil) + self:SetAttribute(format("labaction-%s", state), nil) + end + wipe(self.state_types) + wipe(self.state_actions) +end + +function Generic:SetState(state, kind, action) + if not state then state = self:GetAttribute("state") end + state = tostring(state) + -- we allow a nil kind for setting a empty state + if not kind then kind = "empty" end + if not type_meta_map[kind] then + error("SetStateAction: unknown action type: " .. tostring(kind), 2) + end + if kind ~= "empty" and action == nil then + error("SetStateAction: an action is required for non-empty states", 2) + end + if kind ~= "custom" and action ~= nil and type(action) ~= "number" and type(action) ~= "string" or (kind == "custom" and type(action) ~= "table") then + error("SetStateAction: invalid action data type, only strings and numbers allowed", 2) + end + + if kind == "item" then + if tonumber(action) then + action = format("item:%s", action) + else + local itemString = str_match(action, "^|c%x+|H(item[%d:]+)|h%[") + if itemString then + action = itemString + end + end + end + + self.state_types[state] = kind + self.state_actions[state] = action + self:UpdateState(state) +end + +function Generic:UpdateState(state) + if not state then state = self:GetAttribute("state") end + state = tostring(state) + self:SetAttribute(format("labtype-%s", state), self.state_types[state]) + self:SetAttribute(format("labaction-%s", state), self.state_actions[state]) + if state ~= tostring(self:GetAttribute("state")) then return end + if self.header then + self.header:SetFrameRef("updateButton", self) + self.header:Execute([[ + local frame = self:GetFrameRef("updateButton") + control:RunFor(frame, frame:GetAttribute("UpdateState"), frame:GetAttribute("state")) + ]]) + else + -- TODO + end + self:UpdateAction() +end + +function Generic:GetAction(state) + if not state then state = self:GetAttribute("state") end + state = tostring(state) + return self.state_types[state] or "empty", self.state_actions[state] +end + +function Generic:UpdateAllStates() + for state in pairs(self.state_types) do + self:UpdateState(state) + end +end + +function Generic:ButtonContentsChanged(state, kind, value) + state = tostring(state) + self.state_types[state] = kind or "empty" + self.state_actions[state] = value + lib.callbacks:Fire("OnButtonContentsChanged", self, state, self.state_types[state], self.state_actions[state]) + self:UpdateAction(self) +end + +function Generic:DisableDragNDrop(flag) + if InCombatLockdown() then + error("LibActionButton-1.0: You can only toggle DragNDrop out of combat!", 2) + end + if flag then + self:SetAttribute("LABdisableDragNDrop", true) + else + self:SetAttribute("LABdisableDragNDrop", nil) + end +end + +function Generic:AddToButtonFacade(group) + if type(group) ~= "table" or type(group.AddButton) ~= "function" then + error("LibActionButton-1.0:AddToButtonFacade: You need to supply a proper group to use!", 2) + end + group:AddButton(self) + self.LBFSkinned = true +end + +function Generic:AddToMasque(group) + if type(group) ~= "table" or type(group.AddButton) ~= "function" then + error("LibActionButton-1.0:AddToMasque: You need to supply a proper group to use!", 2) + end + group:AddButton(self) + self.MasqueSkinned = true +end + +function Generic:UpdateAlpha() + UpdateCooldown(self) +end + +----------------------------------------------------------- +--- frame scripts + +-- copied (and adjusted) from SecureHandlers.lua +local function PickupAny(kind, target, detail, ...) + if kind == "clear" then + ClearCursor() + kind, target, detail = target, detail, ... + end + + if kind == 'action' then + PickupAction(target) + elseif kind == 'item' then + PickupItem(target) + elseif kind == 'macro' then + PickupMacro(target) + elseif kind == 'petaction' then + PickupPetAction(target) + elseif kind == 'spell' then + PickupSpell(target) + elseif kind == 'companion' then + PickupCompanion(target, detail) + elseif kind == 'equipmentset' then + PickupEquipmentSet(target) + end +end + +function Generic:OnEnter() + if self.config.tooltip ~= "disabled" and (self.config.tooltip ~= "nocombat" or not InCombatLockdown()) then + UpdateTooltip(self) + end + if KeyBound then + KeyBound:Set(self) + end + + if self._state_type == "action" and self.NewActionTexture then + ClearNewActionHighlight(self._state_action, false, false) + UpdateNewAction(self) + end +end + +function Generic:OnLeave() + GameTooltip:Hide() +end + +-- Insecure drag handler to allow clicking on the button with an action on the cursor +-- to place it on the button. Like action buttons work. +function Generic:PreClick() + if self._state_type == "action" or self._state_type == "pet" + or InCombatLockdown() or self:GetAttribute("LABdisableDragNDrop") + then + return + end + -- check if there is actually something on the cursor + local kind, value, subtype = GetCursorInfo() + if not (kind and value) then return end + self._old_type = self._state_type + if self._state_type and self._state_type ~= "empty" then + self._old_type = self._state_type + self:SetAttribute("type", "empty") + --self:SetState(nil, "empty", nil) + end + self._receiving_drag = true +end + +local function formatHelper(input) + if type(input) == "string" then + return format("%q", input) + else + return tostring(input) + end +end + +function Generic:PostClick() + UpdateButtonState(self) + if self._receiving_drag and not InCombatLockdown() then + if self._old_type then + self:SetAttribute("type", self._old_type) + self._old_type = nil + end + local oldType, oldAction = self._state_type, self._state_action + local kind, data, subtype, extra = GetCursorInfo() + self.header:SetFrameRef("updateButton", self) + self.header:Execute(format([[ + local frame = self:GetFrameRef("updateButton") + control:RunFor(frame, frame:GetAttribute("OnReceiveDrag"), %s, %s, %s, %s) + control:RunFor(frame, frame:GetAttribute("UpdateState"), %s) + ]], formatHelper(kind), formatHelper(data), formatHelper(subtype), formatHelper(extra), formatHelper(self:GetAttribute("state")))) + PickupAny("clear", oldType, oldAction) + end + self._receiving_drag = nil + + if self._state_type == "action" and lib.ACTION_HIGHLIGHT_MARKS[self._state_action] then + ClearNewActionHighlight(self._state_action, false, false) + end +end + +----------------------------------------------------------- +--- configuration + +local function merge(target, source, default) + for k,v in pairs(default) do + if type(v) ~= "table" then + if source and source[k] ~= nil then + target[k] = source[k] + else + target[k] = v + end + else + if type(target[k]) ~= "table" then target[k] = {} else wipe(target[k]) end + merge(target[k], type(source) == "table" and source[k], v) + end + end + return target +end + +function Generic:UpdateConfig(config) + if config and type(config) ~= "table" then + error("LibActionButton-1.0: UpdateConfig requires a valid configuration!", 2) + end + local oldconfig = self.config + if not self.config then self.config = {} end + -- merge the two configs + merge(self.config, config, DefaultConfig) + + if self.config.outOfRangeColoring == "button" or (oldconfig and oldconfig.outOfRangeColoring == "button") then + UpdateUsable(self) + end + if self.config.outOfRangeColoring == "hotkey" then + self.outOfRange = nil + elseif oldconfig and oldconfig.outOfRangeColoring == "hotkey" then + self.HotKey:SetVertexColor(0.75, 0.75, 0.75) + end + + if self.config.hideElements.macro then + self.Name:Hide() + else + self.Name:Show() + end + + self:SetAttribute("flyoutDirection", self.config.flyoutDirection) + + UpdateHotkeys(self) + UpdateGrid(self) + Update(self) + self:RegisterForClicks(self.config.clickOnDown and "AnyDown" or "AnyUp") +end + +----------------------------------------------------------- +--- event handler + +function ForAllButtons(method, onlyWithAction) + assert(type(method) == "function") + for button in next, (onlyWithAction and ActiveButtons or ButtonRegistry) do + method(button) + end +end + +function InitializeEventHandler() + lib.eventFrame:SetScript("OnEvent", OnEvent) + lib.eventFrame:RegisterEvent("PLAYER_ENTERING_WORLD") + lib.eventFrame:RegisterEvent("ACTIONBAR_SHOWGRID") + lib.eventFrame:RegisterEvent("ACTIONBAR_HIDEGRID") + --lib.eventFrame:RegisterEvent("ACTIONBAR_PAGE_CHANGED") + --lib.eventFrame:RegisterEvent("UPDATE_BONUS_ACTIONBAR") + lib.eventFrame:RegisterEvent("ACTIONBAR_SLOT_CHANGED") + lib.eventFrame:RegisterEvent("UPDATE_BINDINGS") + lib.eventFrame:RegisterEvent("UPDATE_SHAPESHIFT_FORM") + lib.eventFrame:RegisterEvent("UPDATE_VEHICLE_ACTIONBAR") + + lib.eventFrame:RegisterEvent("ACTIONBAR_UPDATE_STATE") + lib.eventFrame:RegisterEvent("ACTIONBAR_UPDATE_USABLE") + lib.eventFrame:RegisterEvent("ACTIONBAR_UPDATE_COOLDOWN") + lib.eventFrame:RegisterEvent("PLAYER_TARGET_CHANGED") + lib.eventFrame:RegisterEvent("TRADE_SKILL_SHOW") + lib.eventFrame:RegisterEvent("TRADE_SKILL_CLOSE") + lib.eventFrame:RegisterEvent("ARCHAEOLOGY_CLOSED") + lib.eventFrame:RegisterEvent("PLAYER_ENTER_COMBAT") + lib.eventFrame:RegisterEvent("PLAYER_LEAVE_COMBAT") + lib.eventFrame:RegisterEvent("START_AUTOREPEAT_SPELL") + lib.eventFrame:RegisterEvent("STOP_AUTOREPEAT_SPELL") + lib.eventFrame:RegisterEvent("UNIT_ENTERED_VEHICLE") + lib.eventFrame:RegisterEvent("UNIT_EXITED_VEHICLE") + lib.eventFrame:RegisterEvent("COMPANION_UPDATE") + lib.eventFrame:RegisterEvent("UNIT_INVENTORY_CHANGED") + lib.eventFrame:RegisterEvent("LEARNED_SPELL_IN_TAB") + lib.eventFrame:RegisterEvent("PET_STABLE_UPDATE") + lib.eventFrame:RegisterEvent("PET_STABLE_SHOW") + lib.eventFrame:RegisterEvent("SPELL_ACTIVATION_OVERLAY_GLOW_SHOW") + lib.eventFrame:RegisterEvent("SPELL_ACTIVATION_OVERLAY_GLOW_HIDE") + lib.eventFrame:RegisterEvent("SPELL_UPDATE_CHARGES") + lib.eventFrame:RegisterEvent("UPDATE_SUMMONPETS_ACTION") + + -- With those two, do we still need the ACTIONBAR equivalents of them? + lib.eventFrame:RegisterEvent("SPELL_UPDATE_COOLDOWN") + lib.eventFrame:RegisterEvent("SPELL_UPDATE_USABLE") + lib.eventFrame:RegisterEvent("PLAYER_EQUIPMENT_CHANGED") + + lib.eventFrame:RegisterEvent("LOSS_OF_CONTROL_ADDED") + lib.eventFrame:RegisterEvent("LOSS_OF_CONTROL_UPDATE") + + lib.eventFrame:Show() + lib.eventFrame:SetScript("OnUpdate", OnUpdate) +end + +function OnEvent(frame, event, arg1, ...) + if (event == "UNIT_INVENTORY_CHANGED" and arg1 == "player") or event == "LEARNED_SPELL_IN_TAB" then + local tooltipOwner = GameTooltip:GetOwner() + if ButtonRegistry[tooltipOwner] then + tooltipOwner:SetTooltip() + end + elseif event == "ACTIONBAR_SLOT_CHANGED" then + for button in next, ButtonRegistry do + if button._state_type == "action" and (arg1 == 0 or arg1 == tonumber(button._state_action)) then + ClearNewActionHighlight(button._state_action, true, false) + Update(button) + end + end + elseif event == "PLAYER_ENTERING_WORLD" or event == "UPDATE_SHAPESHIFT_FORM" or event == "UPDATE_VEHICLE_ACTIONBAR" then + ForAllButtons(Update) + elseif event == "ACTIONBAR_PAGE_CHANGED" or event == "UPDATE_BONUS_ACTIONBAR" then + -- TODO: Are these even needed? + elseif event == "ACTIONBAR_SHOWGRID" then + ShowGrid() + elseif event == "ACTIONBAR_HIDEGRID" then + HideGrid() + elseif event == "UPDATE_BINDINGS" then + ForAllButtons(UpdateHotkeys) + elseif event == "PLAYER_TARGET_CHANGED" then + UpdateRangeTimer() + elseif (event == "ACTIONBAR_UPDATE_STATE") or + ((event == "UNIT_ENTERED_VEHICLE" or event == "UNIT_EXITED_VEHICLE") and (arg1 == "player")) or + ((event == "COMPANION_UPDATE") and (arg1 == "MOUNT")) then + ForAllButtons(UpdateButtonState, true) + elseif event == "ACTIONBAR_UPDATE_USABLE" then + for button in next, ActionButtons do + UpdateUsable(button) + end + elseif event == "SPELL_UPDATE_USABLE" then + for button in next, NonActionButtons do + UpdateUsable(button) + end + elseif event == "ACTIONBAR_UPDATE_COOLDOWN" then + for button in next, ActionButtons do + UpdateCooldown(button) + if GameTooltip:GetOwner() == button then + UpdateTooltip(button) + end + end + elseif event == "SPELL_UPDATE_COOLDOWN" then + for button in next, NonActionButtons do + UpdateCooldown(button) + if GameTooltip:GetOwner() == button then + UpdateTooltip(button) + end + end + elseif event == "LOSS_OF_CONTROL_ADDED" then + for button in next, ActiveButtons do + UpdateCooldown(button) + if GameTooltip:GetOwner() == button then + UpdateTooltip(button) + end + end + elseif event == "LOSS_OF_CONTROL_UPDATE" then + for button in next, ActiveButtons do + UpdateCooldown(button) + end + elseif event == "TRADE_SKILL_SHOW" or event == "TRADE_SKILL_CLOSE" or event == "ARCHAEOLOGY_CLOSED" then + ForAllButtons(UpdateButtonState, true) + elseif event == "PLAYER_ENTER_COMBAT" then + for button in next, ActiveButtons do + if button:IsAttack() then + StartFlash(button) + end + end + elseif event == "PLAYER_LEAVE_COMBAT" then + for button in next, ActiveButtons do + if button:IsAttack() then + StopFlash(button) + end + end + elseif event == "START_AUTOREPEAT_SPELL" then + for button in next, ActiveButtons do + if button:IsAutoRepeat() then + StartFlash(button) + end + end + elseif event == "STOP_AUTOREPEAT_SPELL" then + for button in next, ActiveButtons do + if button.flashing == 1 and not button:IsAttack() then + StopFlash(button) + end + end + elseif event == "PET_STABLE_UPDATE" or event == "PET_STABLE_SHOW" then + ForAllButtons(Update) + elseif event == "SPELL_ACTIVATION_OVERLAY_GLOW_SHOW" then + for button in next, ActiveButtons do + local spellId = button:GetSpellId() + if spellId and spellId == arg1 then + ShowOverlayGlow(button) + else + if button._state_type == "action" then + local actionType, id = GetActionInfo(button._state_action) + if actionType == "flyout" and FlyoutHasSpell(id, arg1) then + ShowOverlayGlow(button) + end + end + end + end + elseif event == "SPELL_ACTIVATION_OVERLAY_GLOW_HIDE" then + for button in next, ActiveButtons do + local spellId = button:GetSpellId() + if spellId and spellId == arg1 then + HideOverlayGlow(button) + else + if button._state_type == "action" then + local actionType, id = GetActionInfo(button._state_action) + if actionType == "flyout" and FlyoutHasSpell(id, arg1) then + HideOverlayGlow(button) + end + end + end + end + elseif event == "PLAYER_EQUIPMENT_CHANGED" then + for button in next, ActiveButtons do + if button._state_type == "item" then + Update(button) + end + end + elseif event == "SPELL_UPDATE_CHARGES" then + ForAllButtons(UpdateCount, true) + elseif event == "UPDATE_SUMMONPETS_ACTION" then + for button in next, ActiveButtons do + if button._state_type == "action" then + local actionType, id = GetActionInfo(button._state_action) + if actionType == "summonpet" then + local texture = GetActionTexture(button._state_action) + if texture then + button.icon:SetTexture(texture) + end + end + end + end + end +end + +local flashTime = 0 +local rangeTimer = -1 +function OnUpdate(_, elapsed) + flashTime = flashTime - elapsed + rangeTimer = rangeTimer - elapsed + -- Run the loop only when there is something to update + if rangeTimer <= 0 or flashTime <= 0 then + for button in next, ActiveButtons do + -- Flashing + if button.flashing == 1 and flashTime <= 0 then + if button.Flash:IsShown() then + button.Flash:Hide() + else + button.Flash:Show() + end + end + + -- Range + if rangeTimer <= 0 then + local inRange = button:IsInRange() + local oldRange = button.outOfRange + button.outOfRange = (inRange == false) + if oldRange ~= button.outOfRange then + if button.config.outOfRangeColoring == "button" then + UpdateUsable(button) + elseif button.config.outOfRangeColoring == "hotkey" then + local hotkey = button.HotKey + if hotkey:GetText() == RANGE_INDICATOR then + if inRange == false then + hotkey:Show() + else + hotkey:Hide() + end + end + if inRange == false then + hotkey:SetVertexColor(unpack(button.config.colors.range)) + else + hotkey:SetVertexColor(0.75, 0.75, 0.75) + end + end + end + end + end + + -- Update values + if flashTime <= 0 then + flashTime = flashTime + ATTACK_BUTTON_FLASH_TIME + end + if rangeTimer <= 0 then + rangeTimer = TOOLTIP_UPDATE_TIME + end + end +end + +local gridCounter = 0 +function ShowGrid() + gridCounter = gridCounter + 1 + if gridCounter >= 1 then + for button in next, ButtonRegistry do + if button:IsShown() then + button:SetAlpha(1.0) + end + end + end +end + +function HideGrid() + if gridCounter > 0 then + gridCounter = gridCounter - 1 + end + if gridCounter == 0 then + for button in next, ButtonRegistry do + if button:IsShown() and not button:HasAction() and not button.config.showGrid then + button:SetAlpha(0.0) + end + end + end +end + +function UpdateGrid(self) + if self.config.showGrid then + self:SetAlpha(1.0) + elseif gridCounter == 0 and self:IsShown() and not self:HasAction() then + self:SetAlpha(0.0) + end +end + +----------------------------------------------------------- +--- KeyBound integration + +function Generic:GetBindingAction() + return self.config.keyBoundTarget or "CLICK "..self:GetName()..":LeftButton" +end + +function Generic:GetHotkey() + local name = "CLICK "..self:GetName()..":LeftButton" + local key = GetBindingKey(self.config.keyBoundTarget or name) + if not key and self.config.keyBoundTarget then + key = GetBindingKey(name) + end + if key then + return KeyBound and KeyBound:ToShortKey(key) or key + end +end + +local function getKeys(binding, keys) + keys = keys or "" + for i = 1, select("#", GetBindingKey(binding)) do + local hotKey = select(i, GetBindingKey(binding)) + if keys ~= "" then + keys = keys .. ", " + end + keys = keys .. GetBindingText(hotKey, "KEY_") + end + return keys +end + +function Generic:GetBindings() + local keys, binding + + if self.config.keyBoundTarget then + keys = getKeys(self.config.keyBoundTarget) + end + + keys = getKeys("CLICK "..self:GetName()..":LeftButton") + + return keys +end + +function Generic:SetKey(key) + if self.config.keyBoundTarget then + SetBinding(key, self.config.keyBoundTarget) + else + SetBindingClick(key, self:GetName(), "LeftButton") + end + lib.callbacks:Fire("OnKeybindingChanged", self, key) +end + +local function clearBindings(binding) + while GetBindingKey(binding) do + SetBinding(GetBindingKey(binding), nil) + end +end + +function Generic:ClearBindings() + if self.config.keyBoundTarget then + clearBindings(self.config.keyBoundTarget) + end + clearBindings("CLICK "..self:GetName()..":LeftButton") + lib.callbacks:Fire("OnKeybindingChanged", self, nil) +end + +----------------------------------------------------------- +--- button management + +function Generic:UpdateAction(force) + local type, action = self:GetAction() + if force or type ~= self._state_type or action ~= self._state_action then + -- type changed, update the metatable + if force or self._state_type ~= type then + local meta = type_meta_map[type] or type_meta_map.empty + setmetatable(self, meta) + self._state_type = type + end + self._state_action = action + Update(self) + end +end + +function Update(self) + if self:HasAction() then + ActiveButtons[self] = true + if self._state_type == "action" then + ActionButtons[self] = true + NonActionButtons[self] = nil + else + ActionButtons[self] = nil + NonActionButtons[self] = true + end + self:SetAlpha(1.0) + UpdateButtonState(self) + UpdateUsable(self) + UpdateCooldown(self) + UpdateFlash(self) + else + ActiveButtons[self] = nil + ActionButtons[self] = nil + NonActionButtons[self] = nil + if gridCounter == 0 and not self.config.showGrid then + self:SetAlpha(0.0) + end + self.cooldown:Hide() + self:SetChecked(false) + + if self.chargeCooldown then + EndChargeCooldown(self.chargeCooldown) + end + end + + -- Add a green border if button is an equipped item + if self:IsEquipped() and not self.config.hideElements.equipped then + self.Border:SetVertexColor(0, 1.0, 0, 0.35) + self.Border:Show() + else + self.Border:Hide() + end + + -- Update Action Text + if not self:IsConsumableOrStackable() then + self.Name:SetText(self:GetActionText()) + else + self.Name:SetText("") + end + + -- Update icon and hotkey + local texture = self:GetTexture() + + -- Zone ability button handling + self.zoneAbilityDisabled = false + self.icon:SetDesaturated(false) + if self._state_type == "action" then + local action_type, id = GetActionInfo(self._state_action) + if ((action_type == "spell" or action_type == "companion") and ZoneAbilityFrame and ZoneAbilityFrame.baseName and not HasZoneAbility()) then + local name = GetSpellInfo(ZoneAbilityFrame.baseName) + local abilityName = GetSpellInfo(id) + if name == abilityName then + texture = GetLastZoneAbilitySpellTexture() + self.zoneAbilityDisabled = true + self.icon:SetDesaturated(true) + end + end + end + + if texture then + self.icon:SetTexture(texture) + self.icon:Show() + self.rangeTimer = - 1 + self:SetNormalTexture("Interface\\Buttons\\UI-Quickslot2") + if not self.LBFSkinned and not self.MasqueSkinned then + self.NormalTexture:SetTexCoord(0, 0, 0, 0) + end + else + self.icon:Hide() + self.cooldown:Hide() + self.rangeTimer = nil + self:SetNormalTexture("Interface\\Buttons\\UI-Quickslot") + if self.HotKey:GetText() == RANGE_INDICATOR then + self.HotKey:Hide() + else + self.HotKey:SetVertexColor(0.75, 0.75, 0.75) + end + if not self.LBFSkinned and not self.MasqueSkinned then + self.NormalTexture:SetTexCoord(-0.15, 1.15, -0.15, 1.17) + end + end + + self:UpdateLocal() + + UpdateCount(self) + + UpdateFlyout(self) + + UpdateOverlayGlow(self) + + UpdateNewAction(self) + + if GameTooltip:GetOwner() == self then + UpdateTooltip(self) + end + + -- this could've been a spec change, need to call OnStateChanged for action buttons, if present + if not InCombatLockdown() and self._state_type == "action" then + local onStateChanged = self:GetAttribute("OnStateChanged") + if onStateChanged then + self.header:SetFrameRef("updateButton", self) + self.header:Execute(([[ + local frame = self:GetFrameRef("updateButton") + control:RunFor(frame, frame:GetAttribute("OnStateChanged"), %s, %s, %s) + ]]):format(formatHelper(self:GetAttribute("state")), formatHelper(self._state_type), formatHelper(self._state_action))) + end + end + lib.callbacks:Fire("OnButtonUpdate", self) +end + +function Generic:UpdateLocal() +-- dummy function the other button types can override for special updating +end + +function UpdateButtonState(self) + if self:IsCurrentlyActive() or self:IsAutoRepeat() then + self:SetChecked(true) + else + self:SetChecked(false) + end + lib.callbacks:Fire("OnButtonState", self) +end + +function UpdateUsable(self) + -- TODO: make the colors configurable + -- TODO: allow disabling of the whole recoloring + if self.config.outOfRangeColoring == "button" and self.outOfRange then + self.icon:SetVertexColor(unpack(self.config.colors.range)) + else + local isUsable, notEnoughMana = self:IsUsable() + if isUsable then + self.icon:SetVertexColor(1.0, 1.0, 1.0) + --self.NormalTexture:SetVertexColor(1.0, 1.0, 1.0) + elseif notEnoughMana then + self.icon:SetVertexColor(unpack(self.config.colors.mana)) + --self.NormalTexture:SetVertexColor(0.5, 0.5, 1.0) + else + self.icon:SetVertexColor(0.4, 0.4, 0.4) + --self.NormalTexture:SetVertexColor(1.0, 1.0, 1.0) + end + end + lib.callbacks:Fire("OnButtonUsable", self) +end + +function UpdateCount(self) + if not self:HasAction() then + self.Count:SetText("") + return + end + if self:IsConsumableOrStackable() then + local count = self:GetCount() + if count > (self.maxDisplayCount or 9999) then + self.Count:SetText("*") + else + self.Count:SetText(count) + end + else + local charges, maxCharges, chargeStart, chargeDuration = self:GetCharges() + if charges and maxCharges and maxCharges > 1 then + self.Count:SetText(charges) + else + self.Count:SetText("") + end + end +end + +function EndChargeCooldown(self) + self:Hide() + self:SetParent(UIParent) + self.parent.chargeCooldown = nil + self.parent = nil + tinsert(lib.ChargeCooldowns, self) +end + +local function StartChargeCooldown(parent, chargeStart, chargeDuration, chargeModRate) + if not parent.chargeCooldown then + local cooldown = tremove(lib.ChargeCooldowns) + if not cooldown then + lib.NumChargeCooldowns = lib.NumChargeCooldowns + 1 + cooldown = CreateFrame("Cooldown", "LAB10ChargeCooldown"..lib.NumChargeCooldowns, parent, "CooldownFrameTemplate"); + cooldown:SetScript("OnCooldownDone", EndChargeCooldown) + cooldown:SetHideCountdownNumbers(true) + cooldown:SetDrawSwipe(false) + end + cooldown:SetParent(parent) + cooldown:SetAllPoints(parent) + cooldown:SetFrameStrata("TOOLTIP") + cooldown:Show() + parent.chargeCooldown = cooldown + cooldown.parent = parent + end + -- set cooldown + parent.chargeCooldown:SetDrawBling(parent.chargeCooldown:GetEffectiveAlpha() > 0.5) + CooldownFrame_Set(parent.chargeCooldown, chargeStart, chargeDuration, true, true, chargeModRate) + + -- update charge cooldown skin when masque is used + if Masque and Masque.UpdateCharge then + Masque:UpdateCharge(parent) + end + + if not chargeStart or chargeStart == 0 then + EndChargeCooldown(parent.chargeCooldown) + end +end + +local function OnCooldownDone(self) + self:SetScript("OnCooldownDone", nil) + UpdateCooldown(self:GetParent()) +end + +function UpdateCooldown(self) + local locStart, locDuration = self:GetLossOfControlCooldown() + local start, duration, enable, modRate = self:GetCooldown() + local charges, maxCharges, chargeStart, chargeDuration, chargeModRate = self:GetCharges() + + self.cooldown:SetDrawBling(self.cooldown:GetEffectiveAlpha() > 0.5) + + if (locStart + locDuration) > (start + duration) then + if self.cooldown.currentCooldownType ~= COOLDOWN_TYPE_LOSS_OF_CONTROL then + self.cooldown:SetEdgeTexture("Interface\\Cooldown\\edge-LoC") + self.cooldown:SetSwipeColor(0.17, 0, 0) + self.cooldown:SetHideCountdownNumbers(true) + self.cooldown.currentCooldownType = COOLDOWN_TYPE_LOSS_OF_CONTROL + end + CooldownFrame_Set(self.cooldown, locStart, locDuration, true, true, modRate) + else + if self.cooldown.currentCooldownType ~= COOLDOWN_TYPE_NORMAL then + self.cooldown:SetEdgeTexture("Interface\\Cooldown\\edge") + self.cooldown:SetSwipeColor(0, 0, 0) + self.cooldown:SetHideCountdownNumbers(false) + self.cooldown.currentCooldownType = COOLDOWN_TYPE_NORMAL + end + if locStart > 0 then + self.cooldown:SetScript("OnCooldownDone", OnCooldownDone) + end + + if charges and maxCharges and charges > 0 and charges < maxCharges then + StartChargeCooldown(self, chargeStart, chargeDuration, chargeModRate) + elseif self.chargeCooldown then + EndChargeCooldown(self.chargeCooldown) + end + CooldownFrame_Set(self.cooldown, start, duration, enable, false, modRate) + end +end + +function StartFlash(self) + self.flashing = 1 + flashTime = 0 + UpdateButtonState(self) +end + +function StopFlash(self) + self.flashing = 0 + self.Flash:Hide() + UpdateButtonState(self) +end + +function UpdateFlash(self) + if (self:IsAttack() and self:IsCurrentlyActive()) or self:IsAutoRepeat() then + StartFlash(self) + else + StopFlash(self) + end +end + +function UpdateTooltip(self) + if (GetCVar("UberTooltips") == "1") then + GameTooltip_SetDefaultAnchor(GameTooltip, self); + else + GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); + end + if self:SetTooltip() then + self.UpdateTooltip = UpdateTooltip + else + self.UpdateTooltip = nil + end +end + +function UpdateHotkeys(self) + local key = self:GetHotkey() + if not key or key == "" or self.config.hideElements.hotkey then + self.HotKey:SetText(RANGE_INDICATOR) + self.HotKey:SetPoint("TOPLEFT", self, "TOPLEFT", 1, - 2) + self.HotKey:Hide() + else + self.HotKey:SetText(key) + self.HotKey:SetPoint("TOPLEFT", self, "TOPLEFT", - 2, - 2) + self.HotKey:Show() + end +end + +function ShowOverlayGlow(self) + if LBG then + LBG.ShowOverlayGlow(self) + end +end + +function HideOverlayGlow(self) + if LBG then + LBG.HideOverlayGlow(self) + end +end + +function UpdateOverlayGlow(self) + local spellId = self:GetSpellId() + if spellId and IsSpellOverlayed(spellId) then + ShowOverlayGlow(self) + else + HideOverlayGlow(self) + end +end + +function ClearNewActionHighlight(action, preventIdenticalActionsFromClearing, value) + lib.ACTION_HIGHLIGHT_MARKS[action] = value + + for button in next, ButtonRegistry do + if button._state_type == "action" and action == tonumber(button._state_action) then + UpdateNewAction(button) + end + end + + if preventIdenticalActionsFromClearing then + return + end + + -- iterate through actions and unmark all that are the same type + local unmarkedType, unmarkedID = GetActionInfo(action) + for actionKey, markValue in pairs(lib.ACTION_HIGHLIGHT_MARKS) do + if markValue then + local actionType, actionID = GetActionInfo(actionKey) + if actionType == unmarkedType and actionID == unmarkedID then + ClearNewActionHighlight(actionKey, true, value) + end + end + end +end + +hooksecurefunc("MarkNewActionHighlight", function(action) + lib.ACTION_HIGHLIGHT_MARKS[action] = true + for button in next, ButtonRegistry do + if button._state_type == "action" and action == tonumber(button._state_action) then + UpdateNewAction(button) + end + end +end) + +hooksecurefunc("ClearNewActionHighlight", function(action, preventIdenticalActionsFromClearing) + ClearNewActionHighlight(action, preventIdenticalActionsFromClearing, nil) +end) + +function UpdateNewAction(self) + -- special handling for "New Action" markers + if self.NewActionTexture then + if self._state_type == "action" and lib.ACTION_HIGHLIGHT_MARKS[self._state_action] then + self.NewActionTexture:Show() + else + self.NewActionTexture:Hide() + end + end +end + +-- Hook UpdateFlyout so we can use the blizzy templates +hooksecurefunc("ActionButton_UpdateFlyout", function(self, ...) + if ButtonRegistry[self] then + UpdateFlyout(self) + end +end) + +function UpdateFlyout(self) + -- disabled FlyoutBorder/BorderShadow, those are not handled by LBF and look terrible + self.FlyoutBorder:Hide() + self.FlyoutBorderShadow:Hide() + if self._state_type == "action" then + -- based on ActionButton_UpdateFlyout in ActionButton.lua + local actionType = GetActionInfo(self._state_action) + if actionType == "flyout" then + -- Update border and determine arrow position + local arrowDistance + if (SpellFlyout and SpellFlyout:IsShown() and SpellFlyout:GetParent() == self) or GetMouseFocus() == self then + arrowDistance = 5 + else + arrowDistance = 2 + end + + -- Update arrow + self.FlyoutArrow:Show() + self.FlyoutArrow:ClearAllPoints() + local direction = self:GetAttribute("flyoutDirection"); + if direction == "LEFT" then + self.FlyoutArrow:SetPoint("LEFT", self, "LEFT", -arrowDistance, 0) + SetClampedTextureRotation(self.FlyoutArrow, 270) + elseif direction == "RIGHT" then + self.FlyoutArrow:SetPoint("RIGHT", self, "RIGHT", arrowDistance, 0) + SetClampedTextureRotation(self.FlyoutArrow, 90) + elseif direction == "DOWN" then + self.FlyoutArrow:SetPoint("BOTTOM", self, "BOTTOM", 0, -arrowDistance) + SetClampedTextureRotation(self.FlyoutArrow, 180) + else + self.FlyoutArrow:SetPoint("TOP", self, "TOP", 0, arrowDistance) + SetClampedTextureRotation(self.FlyoutArrow, 0) + end + + -- return here, otherwise flyout is hidden + return + end + end + self.FlyoutArrow:Hide() +end + +function UpdateRangeTimer() + rangeTimer = -1 +end + +----------------------------------------------------------- +--- WoW API mapping +--- Generic Button +Generic.HasAction = function(self) return nil end +Generic.GetActionText = function(self) return "" end +Generic.GetTexture = function(self) return nil end +Generic.GetCharges = function(self) return nil end +Generic.GetCount = function(self) return 0 end +Generic.GetCooldown = function(self) return 0, 0, 0 end +Generic.IsAttack = function(self) return nil end +Generic.IsEquipped = function(self) return nil end +Generic.IsCurrentlyActive = function(self) return nil end +Generic.IsAutoRepeat = function(self) return nil end +Generic.IsUsable = function(self) return nil end +Generic.IsConsumableOrStackable = function(self) return nil end +Generic.IsUnitInRange = function(self, unit) return nil end +Generic.IsInRange = function(self) + local unit = self:GetAttribute("unit") + if unit == "player" then + unit = nil + end + local val = self:IsUnitInRange(unit) + -- map 1/0 to true false, since the return values are inconsistent between actions and spells + if val == 1 then val = true elseif val == 0 then val = false end + return val +end +Generic.SetTooltip = function(self) return nil end +Generic.GetSpellId = function(self) return nil end +Generic.GetLossOfControlCooldown = function(self) return 0, 0 end + +----------------------------------------------------------- +--- Action Button +Action.HasAction = function(self) return HasAction(self._state_action) end +Action.GetActionText = function(self) return GetActionText(self._state_action) end +Action.GetTexture = function(self) return GetActionTexture(self._state_action) end +Action.GetCharges = function(self) return GetActionCharges(self._state_action) end +Action.GetCount = function(self) return GetActionCount(self._state_action) end +Action.GetCooldown = function(self) return GetActionCooldown(self._state_action) end +Action.IsAttack = function(self) return IsAttackAction(self._state_action) end +Action.IsEquipped = function(self) return IsEquippedAction(self._state_action) end +Action.IsCurrentlyActive = function(self) return IsCurrentAction(self._state_action) end +Action.IsAutoRepeat = function(self) return IsAutoRepeatAction(self._state_action) end +Action.IsUsable = function(self) return IsUsableAction(self._state_action) end +Action.IsConsumableOrStackable = function(self) return IsConsumableAction(self._state_action) or IsStackableAction(self._state_action) or (not IsItemAction(self._state_action) and GetActionCount(self._state_action) > 0) end +Action.IsUnitInRange = function(self, unit) return IsActionInRange(self._state_action, unit) end +Action.SetTooltip = function(self) return GameTooltip:SetAction(self._state_action) end +Action.GetSpellId = function(self) + local actionType, id, subType = GetActionInfo(self._state_action) + if actionType == "spell" then + return id + elseif actionType == "macro" then + local _, _, spellId = GetMacroSpell(id) + return spellId + end +end +Action.GetLossOfControlCooldown = function(self) return GetActionLossOfControlCooldown(self._state_action) end + +----------------------------------------------------------- +--- Spell Button +Spell.HasAction = function(self) return true end +Spell.GetActionText = function(self) return "" end +Spell.GetTexture = function(self) return GetSpellTexture(self._state_action) end +Spell.GetCharges = function(self) return GetSpellCharges(self._state_action) end +Spell.GetCount = function(self) return GetSpellCount(self._state_action) end +Spell.GetCooldown = function(self) return GetSpellCooldown(self._state_action) end +Spell.IsAttack = function(self) return IsAttackSpell(FindSpellBookSlotBySpellID(self._state_action), "spell") end -- needs spell book id as of 4.0.1.13066 +Spell.IsEquipped = function(self) return nil end +Spell.IsCurrentlyActive = function(self) return IsCurrentSpell(self._state_action) end +Spell.IsAutoRepeat = function(self) return IsAutoRepeatSpell(FindSpellBookSlotBySpellID(self._state_action), "spell") end -- needs spell book id as of 4.0.1.13066 +Spell.IsUsable = function(self) return IsUsableSpell(self._state_action) end +Spell.IsConsumableOrStackable = function(self) return IsConsumableSpell(self._state_action) end +Spell.IsUnitInRange = function(self, unit) return IsSpellInRange(FindSpellBookSlotBySpellID(self._state_action), "spell", unit) end -- needs spell book id as of 4.0.1.13066 +Spell.SetTooltip = function(self) return GameTooltip:SetSpellByID(self._state_action) end +Spell.GetSpellId = function(self) return self._state_action end + +----------------------------------------------------------- +--- Item Button +local function getItemId(input) + return input:match("^item:(%d+)") +end + +Item.HasAction = function(self) return true end +Item.GetActionText = function(self) return "" end +Item.GetTexture = function(self) return GetItemIcon(self._state_action) end +Item.GetCharges = function(self) return nil end +Item.GetCount = function(self) return GetItemCount(self._state_action, nil, true) end +Item.GetCooldown = function(self) return GetItemCooldown(getItemId(self._state_action)) end +Item.IsAttack = function(self) return nil end +Item.IsEquipped = function(self) return IsEquippedItem(self._state_action) end +Item.IsCurrentlyActive = function(self) return IsCurrentItem(self._state_action) end +Item.IsAutoRepeat = function(self) return nil end +Item.IsUsable = function(self) return IsUsableItem(self._state_action) end +Item.IsConsumableOrStackable = function(self) return IsConsumableItem(self._state_action) end +Item.IsUnitInRange = function(self, unit) return IsItemInRange(self._state_action, unit) end +Item.SetTooltip = function(self) return GameTooltip:SetHyperlink(self._state_action) end +Item.GetSpellId = function(self) return nil end + +----------------------------------------------------------- +--- Macro Button +-- TODO: map results of GetMacroSpell/GetMacroItem to proper results +Macro.HasAction = function(self) return true end +Macro.GetActionText = function(self) return (GetMacroInfo(self._state_action)) end +Macro.GetTexture = function(self) return (select(2, GetMacroInfo(self._state_action))) end +Macro.GetCharges = function(self) return nil end +Macro.GetCount = function(self) return 0 end +Macro.GetCooldown = function(self) return 0, 0, 0 end +Macro.IsAttack = function(self) return nil end +Macro.IsEquipped = function(self) return nil end +Macro.IsCurrentlyActive = function(self) return nil end +Macro.IsAutoRepeat = function(self) return nil end +Macro.IsUsable = function(self) return nil end +Macro.IsConsumableOrStackable = function(self) return nil end +Macro.IsUnitInRange = function(self, unit) return nil end +Macro.SetTooltip = function(self) return nil end +Macro.GetSpellId = function(self) return nil end + +----------------------------------------------------------- +--- Custom Button +Custom.HasAction = function(self) return true end +Custom.GetActionText = function(self) return "" end +Custom.GetTexture = function(self) return self._state_action.texture end +Custom.GetCharges = function(self) return nil end +Custom.GetCount = function(self) return 0 end +Custom.GetCooldown = function(self) return 0, 0, 0 end +Custom.IsAttack = function(self) return nil end +Custom.IsEquipped = function(self) return nil end +Custom.IsCurrentlyActive = function(self) return nil end +Custom.IsAutoRepeat = function(self) return nil end +Custom.IsUsable = function(self) return true end +Custom.IsConsumableOrStackable = function(self) return nil end +Custom.IsUnitInRange = function(self, unit) return nil end +Custom.SetTooltip = function(self) return GameTooltip:SetText(self._state_action.tooltip) end +Custom.GetSpellId = function(self) return nil end +Custom.RunCustom = function(self, unit, button) return self._state_action.func(self, unit, button) end + +----------------------------------------------------------- +--- Update old Buttons +if oldversion and next(lib.buttonRegistry) then + InitializeEventHandler() + for button in next, lib.buttonRegistry do + -- this refreshes the metatable on the button + Generic.UpdateAction(button, true) + SetupSecureSnippets(button) + if oldversion < 12 then + WrapOnClick(button) + end + if oldversion < 23 then + if button.overlay then + button.overlay:Hide() + ActionButton_HideOverlayGlow(button) + button.overlay = nil + UpdateOverlayGlow(button) + end + end + end +end diff --git a/Jamba/LibActionButtonJamba-1.0.lua b/Jamba/LibActionButtonJamba-1.0.lua index 93899c3..8f28d61 100644 --- a/Jamba/LibActionButtonJamba-1.0.lua +++ b/Jamba/LibActionButtonJamba-1.0.lua @@ -1,5 +1,5 @@ --[[ -Copyright (c) 2010-2015, Hendrik "nevcairiel" Leppkes <h.leppkes@gmail.com> +Copyright (c) 2010-2017, Hendrik "nevcairiel" Leppkes <h.leppkes@gmail.com> All rights reserved. @@ -29,14 +29,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] local MAJOR_VERSION = "LibActionButtonJamba-1.0" -local MINOR_VERSION = 66 +local MINOR_VERSION = 68 if not LibStub then error(MAJOR_VERSION .. " requires LibStub.") end local lib, oldversion = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION) if not lib then return end -local IsLegion = select(4, GetBuildInfo()) >= 70000 - -- Lua functions local _G = _G local type, error, tostring, tonumber, assert, select = type, error, tostring, tonumber, assert, select @@ -57,7 +55,7 @@ local str_match, format, tinsert, tremove = string.match, format, tinsert, tremo -- GLOBALS: GetItemIcon, GetItemCount, GetItemCooldown, IsEquippedItem, IsCurrentItem, IsUsableItem, IsConsumableItem, IsItemInRange -- GLOBALS: GetActionCharges, IsItemAction, GetSpellCharges -- GLOBALS: RANGE_INDICATOR, ATTACK_BUTTON_FLASH_TIME, TOOLTIP_UPDATE_TIME --- GLOBALS: DraenorZoneAbilityFrame, HasDraenorZoneAbility, GetLastDraenorSpellTexture +-- GLOBALS: ZoneAbilityFrame, HasZoneAbility, GetLastZoneAbilitySpellTexture local KeyBound = LibStub("LibKeyBound-1.0", true) local CBH = LibStub("CallbackHandler-1.0") @@ -112,7 +110,7 @@ local type_meta_map = { local ButtonRegistry, ActiveButtons, ActionButtons, NonActionButtons = lib.buttonRegistry, lib.activeButtons, lib.actionButtons, lib.nonActionButtons -local Update, UpdateButtonState, UpdateUsable, UpdateCount, UpdateCooldown, UpdateTooltip, UpdateNewAction +local Update, UpdateButtonState, UpdateUsable, UpdateCount, UpdateCooldown, UpdateTooltip, UpdateNewAction, ClearNewActionHighlight local StartFlash, StopFlash, UpdateFlash, UpdateHotkeys, UpdateRangeTimer, UpdateOverlayGlow local UpdateFlyout, ShowGrid, HideGrid, UpdateGrid, SetupSecureSnippets, WrapOnClick local ShowOverlayGlow, HideOverlayGlow @@ -532,7 +530,7 @@ function Generic:OnEnter() end if self._state_type == "action" and self.NewActionTexture then - lib.ACTION_HIGHLIGHT_MARKS[self._state_action] = false + ClearNewActionHighlight(self._state_action, false, false) UpdateNewAction(self) end end @@ -587,6 +585,10 @@ function Generic:PostClick() PickupAny("clear", oldType, oldAction) end self._receiving_drag = nil + + if self._state_type == "action" and lib.ACTION_HIGHLIGHT_MARKS[self._state_action] then + ClearNewActionHighlight(self._state_action, false, false) + end end ----------------------------------------------------------- @@ -706,6 +708,7 @@ function OnEvent(frame, event, arg1, ...) elseif event == "ACTIONBAR_SLOT_CHANGED" then for button in next, ButtonRegistry do if button._state_type == "action" and (arg1 == 0 or arg1 == tonumber(button._state_action)) then + ClearNewActionHighlight(button._state_action, true, false) Update(button) end end @@ -1054,17 +1057,17 @@ function Update(self) -- Update icon and hotkey local texture = self:GetTexture() - -- Draenor zone button handling - self.draenorZoneDisabled = false + -- Zone ability button handling + self.zoneAbilityDisabled = false self.icon:SetDesaturated(false) if self._state_type == "action" then local action_type, id = GetActionInfo(self._state_action) - if ((action_type == "spell" or action_type == "companion") and DraenorZoneAbilityFrame and DraenorZoneAbilityFrame.baseName and not HasDraenorZoneAbility()) then - local name = GetSpellInfo(DraenorZoneAbilityFrame.baseName) + if ((action_type == "spell" or action_type == "companion") and ZoneAbilityFrame and ZoneAbilityFrame.baseName and not HasZoneAbility()) then + local name = GetSpellInfo(ZoneAbilityFrame.baseName) local abilityName = GetSpellInfo(id) if name == abilityName then - texture = GetLastDraenorSpellTexture() - self.draenorZoneDisabled = true + texture = GetLastZoneAbilitySpellTexture() + self.zoneAbilityDisabled = true self.icon:SetDesaturated(true) end end @@ -1185,7 +1188,7 @@ function EndChargeCooldown(self) tinsert(lib.ChargeCooldowns, self) end -local function StartChargeCooldown(parent, chargeStart, chargeDuration) +local function StartChargeCooldown(parent, chargeStart, chargeDuration, chargeModRate) if not parent.chargeCooldown then local cooldown = tremove(lib.ChargeCooldowns) if not cooldown then @@ -1193,7 +1196,6 @@ local function StartChargeCooldown(parent, chargeStart, chargeDuration) cooldown = CreateFrame("Cooldown", "LAB10ChargeCooldown"..lib.NumChargeCooldowns, parent, "CooldownFrameTemplate"); cooldown:SetScript("OnCooldownDone", EndChargeCooldown) cooldown:SetHideCountdownNumbers(true) - cooldown:SetDrawEdge(true) cooldown:SetDrawSwipe(false) end cooldown:SetParent(parent) @@ -1205,7 +1207,7 @@ local function StartChargeCooldown(parent, chargeStart, chargeDuration) end -- set cooldown parent.chargeCooldown:SetDrawBling(parent.chargeCooldown:GetEffectiveAlpha() > 0.5) - parent.chargeCooldown:SetCooldown(chargeStart, chargeDuration) + CooldownFrame_Set(parent.chargeCooldown, chargeStart, chargeDuration, true, true, chargeModRate) -- update charge cooldown skin when masque is used if Masque and Masque.UpdateCharge then @@ -1224,8 +1226,8 @@ end function UpdateCooldown(self) local locStart, locDuration = self:GetLossOfControlCooldown() - local start, duration, enable = self:GetCooldown() - local charges, maxCharges, chargeStart, chargeDuration = self:GetCharges() + local start, duration, enable, modRate = self:GetCooldown() + local charges, maxCharges, chargeStart, chargeDuration, chargeModRate = self:GetCharges() self.cooldown:SetDrawBling(self.cooldown:GetEffectiveAlpha() > 0.5) @@ -1236,11 +1238,7 @@ function UpdateCooldown(self) self.cooldown:SetHideCountdownNumbers(true) self.cooldown.currentCooldownType = COOLDOWN_TYPE_LOSS_OF_CONTROL end - if IsLegion then - CooldownFrame_Set(self.cooldown, locStart, locDuration, true, true) - else - CooldownFrame_SetTimer(self.cooldown, locStart, locDuration, 1, true) - end + CooldownFrame_Set(self.cooldown, locStart, locDuration, true, true, modRate) else if self.cooldown.currentCooldownType ~= COOLDOWN_TYPE_NORMAL then self.cooldown:SetEdgeTexture("Interface\\Cooldown\\edge") @@ -1253,15 +1251,11 @@ function UpdateCooldown(self) end if charges and maxCharges and charges > 0 and charges < maxCharges then - StartChargeCooldown(self, chargeStart, chargeDuration) + StartChargeCooldown(self, chargeStart, chargeDuration, chargeModRate) elseif self.chargeCooldown then EndChargeCooldown(self.chargeCooldown) end - if IsLegion then - CooldownFrame_Set(self.cooldown, start, duration, enable) - else - CooldownFrame_SetTimer(self.cooldown, start, duration, enable) - end + CooldownFrame_Set(self.cooldown, start, duration, enable, false, modRate) end end @@ -1332,8 +1326,33 @@ function UpdateOverlayGlow(self) end end -hooksecurefunc("MarkNewActionHighlight", function(action, flag) - lib.ACTION_HIGHLIGHT_MARKS[action] = flag +function ClearNewActionHighlight(action, preventIdenticalActionsFromClearing, value) + lib.ACTION_HIGHLIGHT_MARKS[action] = value + + for button in next, ButtonRegistry do + if button._state_type == "action" and action == tonumber(button._state_action) then + UpdateNewAction(button) + end + end + + if preventIdenticalActionsFromClearing then + return + end + + -- iterate through actions and unmark all that are the same type + local unmarkedType, unmarkedID = GetActionInfo(action) + for actionKey, markValue in pairs(lib.ACTION_HIGHLIGHT_MARKS) do + if markValue then + local actionType, actionID = GetActionInfo(actionKey) + if actionType == unmarkedType and actionID == unmarkedID then + ClearNewActionHighlight(actionKey, true, value) + end + end + end +end + +hooksecurefunc("MarkNewActionHighlight", function(action) + lib.ACTION_HIGHLIGHT_MARKS[action] = true for button in next, ButtonRegistry do if button._state_type == "action" and action == tonumber(button._state_action) then UpdateNewAction(button) @@ -1341,6 +1360,10 @@ hooksecurefunc("MarkNewActionHighlight", function(action, flag) end end) +hooksecurefunc("ClearNewActionHighlight", function(action, preventIdenticalActionsFromClearing) + ClearNewActionHighlight(action, preventIdenticalActionsFromClearing, nil) +end) + function UpdateNewAction(self) -- special handling for "New Action" markers if self.NewActionTexture then diff --git a/Jamba/Libs/AceAddon-3.0/AceAddon-3.0.xml b/Jamba/Libs/AceAddon-3.0/AceAddon-3.0.xml index e6ad639..dcf24c7 100644 --- a/Jamba/Libs/AceAddon-3.0/AceAddon-3.0.xml +++ b/Jamba/Libs/AceAddon-3.0/AceAddon-3.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="AceAddon-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceBucket-3.0/AceBucket-3.0.xml b/Jamba/Libs/AceBucket-3.0/AceBucket-3.0.xml index 43c6bee..06ab712 100644 --- a/Jamba/Libs/AceBucket-3.0/AceBucket-3.0.xml +++ b/Jamba/Libs/AceBucket-3.0/AceBucket-3.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="AceBucket-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceComm-3.0/AceComm-3.0.xml b/Jamba/Libs/AceComm-3.0/AceComm-3.0.xml index 09e8d87..24fb43b 100644 --- a/Jamba/Libs/AceComm-3.0/AceComm-3.0.xml +++ b/Jamba/Libs/AceComm-3.0/AceComm-3.0.xml @@ -2,4 +2,4 @@ ..\FrameXML\UI.xsd"> <Script file="ChatThrottleLib.lua"/> <Script file="AceComm-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceConfig-3.0/AceConfig-3.0.xml b/Jamba/Libs/AceConfig-3.0/AceConfig-3.0.xml index 87972ad..a3569b7 100644 --- a/Jamba/Libs/AceConfig-3.0/AceConfig-3.0.xml +++ b/Jamba/Libs/AceConfig-3.0/AceConfig-3.0.xml @@ -5,4 +5,4 @@ <Include file="AceConfigDialog-3.0\AceConfigDialog-3.0.xml"/> <!--<Include file="AceConfigDropdown-3.0\AceConfigDropdown-3.0.xml"/>--> <Script file="AceConfig-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.xml b/Jamba/Libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.xml index 188d354..9e157b5 100644 --- a/Jamba/Libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.xml +++ b/Jamba/Libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="AceConfigCmd-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua b/Jamba/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua index 820aea8..3612fe8 100644 --- a/Jamba/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua +++ b/Jamba/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua @@ -1,10 +1,10 @@ --- AceConfigDialog-3.0 generates AceGUI-3.0 based windows based on option tables. -- @class file -- @name AceConfigDialog-3.0 --- @release $Id: AceConfigDialog-3.0.lua 1126 2014-11-10 06:38:01Z nevcairiel $ +-- @release $Id: AceConfigDialog-3.0.lua 1139 2016-07-03 07:43:51Z nevcairiel $ local LibStub = LibStub -local MAJOR, MINOR = "AceConfigDialog-3.0", 60 +local MAJOR, MINOR = "AceConfigDialog-3.0", 61 local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR) if not AceConfigDialog then return end @@ -1092,7 +1092,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName) local image, width, height = GetOptionsMemberValue("image",v, options, path, appName) - if type(image) == "string" then + if type(image) == "string" or type(image) == "number" then control = gui:Create("Icon") if not width then width = GetOptionsMemberValue("imageWidth",v, options, path, appName) @@ -1154,7 +1154,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin local image = GetOptionsMemberValue("image", v, options, path, appName) local imageCoords = GetOptionsMemberValue("imageCoords", v, options, path, appName) - if type(image) == "string" then + if type(image) == "string" or type(image) == "number" then if type(imageCoords) == "table" then control:SetImage(image, unpack(imageCoords)) else @@ -1354,7 +1354,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName) local image, width, height = GetOptionsMemberValue("image",v, options, path, appName) - if type(image) == "string" then + if type(image) == "string" or type(image) == "number" then if not width then width = GetOptionsMemberValue("imageWidth",v, options, path, appName) end diff --git a/Jamba/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.xml b/Jamba/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.xml index 86ce057..8e1e606 100644 --- a/Jamba/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.xml +++ b/Jamba/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="AceConfigDialog-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua b/Jamba/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua index d684d66..cf81973 100644 --- a/Jamba/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua +++ b/Jamba/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua @@ -8,8 +8,8 @@ -- :IterateOptionsTables() (and :GetOptionsTable() if only given one argument) return a function reference that the requesting config handling addon must call with valid "uiType", "uiName". -- @class file -- @name AceConfigRegistry-3.0 --- @release $Id: AceConfigRegistry-3.0.lua 1105 2013-12-08 22:11:58Z nevcairiel $ -local MAJOR, MINOR = "AceConfigRegistry-3.0", 15 +-- @release $Id: AceConfigRegistry-3.0.lua 1139 2016-07-03 07:43:51Z nevcairiel $ +local MAJOR, MINOR = "AceConfigRegistry-3.0", 16 local AceConfigRegistry = LibStub:NewLibrary(MAJOR, MINOR) if not AceConfigRegistry then return end @@ -57,6 +57,7 @@ local istable={["table"]=true, _="table"} local ismethodtable={["table"]=true,["string"]=true,["function"]=true, _="methodname, funcref or table"} local optstring={["nil"]=true,["string"]=true, _="string"} local optstringfunc={["nil"]=true,["string"]=true,["function"]=true, _="string or funcref"} +local optstringnumberfunc={["nil"]=true,["string"]=true,["number"]=true,["function"]=true, _="string, number or funcref"} local optnumber={["nil"]=true,["number"]=true, _="number"} local optmethod={["nil"]=true,["string"]=true,["function"]=true, _="methodname or funcref"} local optmethodfalse={["nil"]=true,["string"]=true,["function"]=true,["boolean"]={[false]=true}, _="methodname, funcref or false"} @@ -82,7 +83,7 @@ local basekeys={ dialogHidden=optmethodbool, dropdownHidden=optmethodbool, cmdHidden=optmethodbool, - icon=optstringfunc, + icon=optstringnumberfunc, iconCoords=optmethodtable, handler=opttable, get=optmethodfalse, @@ -95,7 +96,7 @@ local basekeys={ local typedkeys={ header={}, description={ - image=optstringfunc, + image=optstringnumberfunc, imageCoords=optmethodtable, imageHeight=optnumber, imageWidth=optnumber, @@ -112,7 +113,7 @@ local typedkeys={ childGroups=optstring, }, execute={ - image=optstringfunc, + image=optstringnumberfunc, imageCoords=optmethodtable, imageHeight=optnumber, imageWidth=optnumber, @@ -127,7 +128,7 @@ local typedkeys={ }, toggle={ tristate=optbool, - image=optstringfunc, + image=optstringnumberfunc, imageCoords=optmethodtable, }, tristate={ diff --git a/Jamba/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.xml b/Jamba/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.xml index 101bfda..4ea69ca 100644 --- a/Jamba/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.xml +++ b/Jamba/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="AceConfigRegistry-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceConsole-3.0/AceConsole-3.0.lua b/Jamba/Libs/AceConsole-3.0/AceConsole-3.0.lua index c001123..0567a65 100644 --- a/Jamba/Libs/AceConsole-3.0/AceConsole-3.0.lua +++ b/Jamba/Libs/AceConsole-3.0/AceConsole-3.0.lua @@ -9,7 +9,7 @@ -- make into AceConsole. -- @class file -- @name AceConsole-3.0 --- @release $Id: AceConsole-3.0.lua 878 2009-11-02 18:51:58Z nevcairiel $ +-- @release $Id: AceConsole-3.0.lua 1143 2016-07-11 08:52:03Z nevcairiel $ local MAJOR,MINOR = "AceConsole-3.0", 7 local AceConsole, oldminor = LibStub:NewLibrary(MAJOR, MINOR) @@ -136,7 +136,7 @@ end --- Retreive one or more space-separated arguments from a string. -- Treats quoted strings and itemlinks as non-spaced. --- @param string The raw argument string +-- @param str The raw argument string -- @param numargs How many arguments to get (default 1) -- @param startpos Where in the string to start scanning (default 1) -- @return Returns arg1, arg2, ..., nextposition\\ diff --git a/Jamba/Libs/AceConsole-3.0/AceConsole-3.0.xml b/Jamba/Libs/AceConsole-3.0/AceConsole-3.0.xml index be9f47c..4f4699a 100644 --- a/Jamba/Libs/AceConsole-3.0/AceConsole-3.0.xml +++ b/Jamba/Libs/AceConsole-3.0/AceConsole-3.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="AceConsole-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceDB-3.0/AceDB-3.0.lua b/Jamba/Libs/AceDB-3.0/AceDB-3.0.lua index a17c6f1..b42b442 100644 --- a/Jamba/Libs/AceDB-3.0/AceDB-3.0.lua +++ b/Jamba/Libs/AceDB-3.0/AceDB-3.0.lua @@ -10,6 +10,7 @@ -- * **race** Race-specific data. All of the players characters of the same race share this database. -- * **faction** Faction-specific data. All of the players characters of the same faction share this database. -- * **factionrealm** Faction and realm specific data. All of the players characters on the same realm and of the same faction share this database. +-- * **locale** Locale specific data, based on the locale of the players game client. -- * **global** Global Data. All characters on the same account share this database. -- * **profile** Profile-specific data. All characters using the same profile share this database. The user can control which profile should be used. -- @@ -39,7 +40,7 @@ -- end -- @class file -- @name AceDB-3.0.lua --- @release $Id: AceDB-3.0.lua 1124 2014-10-27 21:00:07Z funkydude $ +-- @release $Id: AceDB-3.0.lua 1142 2016-07-11 08:36:19Z nevcairiel $ local ACEDB_MAJOR, ACEDB_MINOR = "AceDB-3.0", 26 local AceDB, oldminor = LibStub:NewLibrary(ACEDB_MAJOR, ACEDB_MINOR) diff --git a/Jamba/Libs/AceDB-3.0/AceDB-3.0.xml b/Jamba/Libs/AceDB-3.0/AceDB-3.0.xml index 46b20ba..108fc70 100644 --- a/Jamba/Libs/AceDB-3.0/AceDB-3.0.xml +++ b/Jamba/Libs/AceDB-3.0/AceDB-3.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="AceDB-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceDBOptions-3.0/AceDBOptions-3.0.lua b/Jamba/Libs/AceDBOptions-3.0/AceDBOptions-3.0.lua index 616f35e..5028fef 100644 --- a/Jamba/Libs/AceDBOptions-3.0/AceDBOptions-3.0.lua +++ b/Jamba/Libs/AceDBOptions-3.0/AceDBOptions-3.0.lua @@ -1,8 +1,8 @@ --- AceDBOptions-3.0 provides a universal AceConfig options screen for managing AceDB-3.0 profiles. -- @class file -- @name AceDBOptions-3.0 --- @release $Id: AceDBOptions-3.0.lua 1066 2012-09-18 14:36:49Z nevcairiel $ -local ACEDBO_MAJOR, ACEDBO_MINOR = "AceDBOptions-3.0", 14 +-- @release $Id: AceDBOptions-3.0.lua 1140 2016-07-03 07:53:29Z nevcairiel $ +local ACEDBO_MAJOR, ACEDBO_MINOR = "AceDBOptions-3.0", 15 local AceDBOptions, oldminor = LibStub:NewLibrary(ACEDBO_MAJOR, ACEDBO_MINOR) if not AceDBOptions then return end -- No upgrade needed @@ -53,19 +53,19 @@ if LOCALE == "deDE" then L["choose_sub"] = "Wählt ein bereits vorhandenes Profil aus." L["copy"] = "Kopieren von..." L["copy_desc"] = "Kopiere die Einstellungen von einem vorhandenen Profil in das aktive Profil." - -- L["current"] = "Current Profile:" + L["current"] = "Aktuelles Profil:" L["default"] = "Standard" L["delete"] = "Profil löschen" L["delete_confirm"] = "Willst du das ausgewählte Profil wirklich löschen?" - L["delete_desc"] = "Lösche vorhandene oder unbenutzte Profile aus der Datenbank um Platz zu sparen und um die SavedVariables Datei 'sauber' zu halten." + L["delete_desc"] = "Lösche vorhandene oder unbenutzte Profile aus der Datenbank, um Platz zu sparen und die SavedVariables-Datei 'sauber' zu halten." L["delete_sub"] = "Löscht ein Profil aus der Datenbank." - L["intro"] = "Hier kannst du das aktive Datenbankprofile ändern, damit du verschiedene Einstellungen für jeden Charakter erstellen kannst, wodurch eine sehr flexible Konfiguration möglich wird." + L["intro"] = "Hier kannst du das aktive Datenbankprofil ändern, damit du verschiedene Einstellungen für jeden Charakter erstellen kannst, wodurch eine sehr flexible Konfiguration möglich wird." L["new"] = "Neu" L["new_sub"] = "Ein neues Profil erstellen." L["profiles"] = "Profile" L["profiles_sub"] = "Profile verwalten" L["reset"] = "Profil zurücksetzen" - L["reset_desc"] = "Setzt das momentane Profil auf Standardwerte zurück, für den Fall das mit der Konfiguration etwas schief lief oder weil du einfach neu starten willst." + L["reset_desc"] = "Setzt das momentane Profil auf Standardwerte zurück, für den Fall, dass mit der Konfiguration etwas schief lief oder weil du einfach neu starten willst." L["reset_sub"] = "Das aktuelle Profil auf Standard zurücksetzen." elseif LOCALE == "frFR" then L["choose"] = "Profils existants" @@ -73,7 +73,7 @@ elseif LOCALE == "frFR" then L["choose_sub"] = "Permet de choisir un des profils déjà disponibles." L["copy"] = "Copier à partir de" L["copy_desc"] = "Copie les paramètres d'un profil déjà existant dans le profil actuellement actif." - -- L["current"] = "Current Profile:" + L["current"] = "Profil actuel :" L["default"] = "Défaut" L["delete"] = "Supprimer un profil" L["delete_confirm"] = "Etes-vous sûr de vouloir supprimer le profil sélectionné ?" @@ -88,32 +88,32 @@ elseif LOCALE == "frFR" then L["reset_desc"] = "Réinitialise le profil actuel au cas où votre configuration est corrompue ou si vous voulez tout simplement faire table rase." L["reset_sub"] = "Réinitialise le profil actuel avec les paramètres par défaut." elseif LOCALE == "koKR" then - L["choose"] = "프로필 선택" - L["choose_desc"] = "새로운 이름을 입력하거나, 이미 있는 프로필중 하나를 선택하여 새로운 프로필을 만들 수 있습니다." - L["choose_sub"] = "당신이 현재 이용할수 있는 프로필을 선택합니다." - L["copy"] = "복사" - L["copy_desc"] = "현재 사용중인 프로필에, 선택한 프로필의 설정을 복사합니다." - -- L["current"] = "Current Profile:" + L["choose"] = "저장 중인 프로필" + L["choose_desc"] = "입력창에 새로운 이름을 입력하거나 저장 중인 프로필 중 하나를 선택하여 새로운 프로필을 만들 수 있습니다." + L["choose_sub"] = "현재 이용할 수 있는 프로필 중 하나를 선택합니다." + L["copy"] = "복사해오기" + L["copy_desc"] = "현재 사용 중인 프로필에 선택한 프로필의 설정을 복사합니다." + L["current"] = "현재 프로필:" L["default"] = "기본값" L["delete"] = "프로필 삭제" - L["delete_confirm"] = "정말로 선택한 프로필의 삭제를 원하십니까?" - L["delete_desc"] = "데이터베이스에 사용중이거나 저장된 프로파일 삭제로 SavedVariables 파일의 정리와 공간 절약이 됩니다." + L["delete_confirm"] = "정말로 선택한 프로필을 삭제할까요?" + L["delete_desc"] = "저장 공간 절약과 SavedVariables 파일의 정리를 위해 데이터베이스에서 사용하지 않는 프로필을 삭제하세요." L["delete_sub"] = "데이터베이스의 프로필을 삭제합니다." - L["intro"] = "모든 캐릭터의 다양한 설정과 사용중인 데이터베이스 프로필, 어느것이던지 매우 다루기 쉽게 바꿀수 있습니다." + L["intro"] = "활성 데이터베이스 프로필을 변경할 수 있고, 각 캐릭터 별로 다른 설정을 할 수 있습니다." L["new"] = "새로운 프로필" L["new_sub"] = "새로운 프로필을 만듭니다." L["profiles"] = "프로필" - L["profiles_sub"] = "프로필 설정" + L["profiles_sub"] = "프로필 관리" L["reset"] = "프로필 초기화" - L["reset_desc"] = "단순히 다시 새롭게 구성을 원하는 경우, 현재 프로필을 기본값으로 초기화 합니다." - L["reset_sub"] = "현재의 프로필을 기본값으로 초기화 합니다" + L["reset_desc"] = "설정이 깨졌거나 처음부터 다시 설정을 원하는 경우, 현재 프로필을 기본값으로 초기화하세요." + L["reset_sub"] = "현재 프로필을 기본값으로 초기화합니다" elseif LOCALE == "esES" or LOCALE == "esMX" then L["choose"] = "Perfiles existentes" L["choose_desc"] = "Puedes crear un nuevo perfil introduciendo un nombre en el recuadro o puedes seleccionar un perfil de los ya existentes." L["choose_sub"] = "Selecciona uno de los perfiles disponibles." L["copy"] = "Copiar de" L["copy_desc"] = "Copia los ajustes de un perfil existente al perfil actual." - -- L["current"] = "Current Profile:" + L["current"] = "Perfil actual:" L["default"] = "Por defecto" L["delete"] = "Borrar un Perfil" L["delete_confirm"] = "¿Estas seguro que quieres borrar el perfil seleccionado?" @@ -129,31 +129,31 @@ elseif LOCALE == "esES" or LOCALE == "esMX" then L["reset_sub"] = "Reinicar el perfil actual al de por defecto" elseif LOCALE == "zhTW" then L["choose"] = "現有的設定檔" - L["choose_desc"] = "你可以通過在文本框內輸入一個名字創立一個新的設定檔,也可以選擇一個已經存在的設定檔。" - L["choose_sub"] = "從當前可用的設定檔裏面選擇一個。" + L["choose_desc"] = "您可以在文字方塊內輸入名字以建立新的設定檔,或是選擇一個現有的設定檔使用。" + L["choose_sub"] = "從當前可用的設定檔裡面選擇一個。" L["copy"] = "複製自" - L["copy_desc"] = "從當前某個已保存的設定檔複製到當前正使用的設定檔。" - -- L["current"] = "Current Profile:" + L["copy_desc"] = "從一個現有的設定檔,將設定複製到現在使用中的設定檔。" + L["current"] = "目前設定檔:" L["default"] = "預設" L["delete"] = "刪除一個設定檔" - L["delete_confirm"] = "你確定要刪除所選擇的設定檔嗎?" - L["delete_desc"] = "從資料庫裏刪除不再使用的設定檔,以節省空間,並且清理SavedVariables檔。" - L["delete_sub"] = "從資料庫裏刪除一個設定檔。" - L["intro"] = "你可以選擇一個活動的資料設定檔,這樣你的每個角色就可以擁有不同的設定值,可以給你的插件設定帶來極大的靈活性。" + L["delete_confirm"] = "確定要刪除所選擇的設定檔嗎?" + L["delete_desc"] = "從資料庫裡刪除不再使用的設定檔,以節省空間,並且清理 SavedVariables 檔案。" + L["delete_sub"] = "從資料庫裡刪除一個設定檔。" + L["intro"] = "您可以從資料庫中選擇一個設定檔來使用,如此就可以讓每個角色使用不同的設定。" L["new"] = "新建" L["new_sub"] = "新建一個空的設定檔。" L["profiles"] = "設定檔" L["profiles_sub"] = "管理設定檔" L["reset"] = "重置設定檔" - L["reset_desc"] = "將當前的設定檔恢復到它的預設值,用於你的設定檔損壞,或者你只是想重來的情況。" - L["reset_sub"] = "將當前的設定檔恢復為預設值" + L["reset_desc"] = "將現用的設定檔重置為預設值;用於設定檔損壞,或者單純想要重來的情況。" + L["reset_sub"] = "將目前的設定檔重置為預設值" elseif LOCALE == "zhCN" then L["choose"] = "现有的配置文件" L["choose_desc"] = "你可以通过在文本框内输入一个名字创立一个新的配置文件,也可以选择一个已经存在的配置文件。" L["choose_sub"] = "从当前可用的配置文件里面选择一个。" L["copy"] = "复制自" L["copy_desc"] = "从当前某个已保存的配置文件复制到当前正使用的配置文件。" - -- L["current"] = "Current Profile:" + L["current"] = "当前配置文件:" L["default"] = "默认" L["delete"] = "删除一个配置文件" L["delete_confirm"] = "你确定要删除所选择的配置文件么?" @@ -173,7 +173,7 @@ elseif LOCALE == "ruRU" then L["choose_sub"] = "Выбор одиного из уже доступных профилей" L["copy"] = "Скопировать из" L["copy_desc"] = "Скопировать настройки из выбранного профиля в активный." - -- L["current"] = "Current Profile:" + L["current"] = "Текущий профиль:" L["default"] = "По умолчанию" L["delete"] = "Удалить профиль" L["delete_confirm"] = "Вы уверены, что вы хотите удалить выбранный профиль?" @@ -185,17 +185,17 @@ elseif LOCALE == "ruRU" then L["profiles"] = "Профили" L["profiles_sub"] = "Управление профилями" L["reset"] = "Сброс профиля" - L["reset_desc"] = "Если ваша конфигурации испорчена или если вы хотите настроить всё заново - сбросьте текущий профиль на стандартные значения." + L["reset_desc"] = "Сбросить текущий профиль к стандартным настройкам, если ваша конфигурация испорчена или вы хотите настроить всё заново." L["reset_sub"] = "Сброс текущего профиля на стандартный" elseif LOCALE == "itIT" then - L["choose"] = "Profili esistenti" - L["choose_desc"] = "Puoi creare un nuovo profilo digitando il nome della casella di testo, oppure scegliendone uno tra i profili gia' esistenti." - L["choose_sub"] = "Seleziona uno dei profili disponibili." + L["choose"] = "Profili Esistenti" + L["choose_desc"] = "Puoi creare un nuovo profilo digitando il nome della casella di testo, oppure scegliendone uno tra i profili già esistenti." + L["choose_sub"] = "Seleziona uno dei profili attualmente disponibili." L["copy"] = "Copia Da" L["copy_desc"] = "Copia le impostazioni da un profilo esistente, nel profilo attivo in questo momento." L["current"] = "Profilo Attivo:" L["default"] = "Standard" - L["delete"] = "Cancella un profilo" + L["delete"] = "Cancella un Profilo" L["delete_confirm"] = "Sei sicuro di voler cancellare il profilo selezionato?" L["delete_desc"] = "Cancella i profili non utilizzati dal database per risparmiare spazio e mantenere puliti i file di configurazione SavedVariables." L["delete_sub"] = "Cancella un profilo dal Database." @@ -205,8 +205,28 @@ elseif LOCALE == "itIT" then L["profiles"] = "Profili" L["profiles_sub"] = "Gestisci Profili" L["reset"] = "Reimposta Profilo" - L["reset_desc"] = "Riporta il tuo profilo attivo alle sue impostazioni di default, nel caso in cui la tua configurazione si sia corrotta, o semplicemente tu voglia re-inizializzarla." - L["reset_sub"] = "Reimposta il profilo ai suoi valori di default." + L["reset_desc"] = "Riporta il tuo profilo attivo alle sue impostazioni predefinite, nel caso in cui la tua configurazione si sia corrotta, o semplicemente tu voglia re-inizializzarla." + L["reset_sub"] = "Reimposta il profilo ai suoi valori predefiniti." +elseif LOCALE == "ptBR" then + L["choose"] = "Perfis Existentes" + L["choose_desc"] = "Você pode tanto criar um perfil novo tanto digitando um nome na caixa de texto, quanto escolher um dos perfis já existentes." + L["choose_sub"] = "Selecione um de seus perfis atualmente disponíveis." + L["copy"] = "Copiar De" + L["copy_desc"] = "Copia as definições de um perfil existente no perfil atualmente ativo." + L["current"] = "Perfil Autal:" + L["default"] = "Padrão" + L["delete"] = "Remover um Perfil" + L["delete_confirm"] = "Tem certeza que deseja remover o perfil selecionado?" + L["delete_desc"] = "Remove perfis existentes e inutilizados do banco de dados para economizar espaço, e limpar o arquivo SavedVariables." + L["delete_sub"] = "Remove um perfil do banco de dados." + L["intro"] = "Você pode alterar o perfil do banco de dados ativo, para que possa ter definições diferentes para cada personagem." + L["new"] = "Novo" + L["new_sub"] = "Cria um novo perfil vazio." + L["profiles"] = "Perfis" + L["profiles_sub"] = "Gerenciar Perfis" + L["reset"] = "Resetar Perfil" + L["reset_desc"] = "Reseta o perfil atual para os valores padrões, no caso de sua configuração estar quebrada, ou simplesmente se deseja começar novamente." + L["reset_sub"] = "Resetar o perfil atual ao padrão" end local defaultProfiles diff --git a/Jamba/Libs/AceDBOptions-3.0/AceDBOptions-3.0.xml b/Jamba/Libs/AceDBOptions-3.0/AceDBOptions-3.0.xml index 2668fb0..51305f9 100644 --- a/Jamba/Libs/AceDBOptions-3.0/AceDBOptions-3.0.xml +++ b/Jamba/Libs/AceDBOptions-3.0/AceDBOptions-3.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="AceDBOptions-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceEvent-3.0/AceEvent-3.0.xml b/Jamba/Libs/AceEvent-3.0/AceEvent-3.0.xml index 313ef4d..41ef791 100644 --- a/Jamba/Libs/AceEvent-3.0/AceEvent-3.0.xml +++ b/Jamba/Libs/AceEvent-3.0/AceEvent-3.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="AceEvent-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets.toc b/Jamba/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets.toc index 3644493..482fb71 100644 --- a/Jamba/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets.toc +++ b/Jamba/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets.toc @@ -1,4 +1,4 @@ -## Interface: 60200 +## Interface: 60200 ## X-Curse-Packaged-Version: r53 ## X-Curse-Project-Name: AceGUI-3.0-SharedMediaWidgets ## X-Curse-Project-ID: ace-gui-3-0-shared-media-widgets @@ -16,4 +16,4 @@ # Libs\AceGUI-3.0\AceGUI-3.0.xml #@end-no-lib-strip@ -widget.xml \ No newline at end of file +widget.xml diff --git a/Jamba/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/widget.xml b/Jamba/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/widget.xml index 15cd102..43c46a1 100644 --- a/Jamba/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/widget.xml +++ b/Jamba/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/widget.xml @@ -6,4 +6,4 @@ <Script file="StatusbarWidget.lua" /> <Script file="BorderWidget.lua" /> <Script file="BackgroundWidget.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceGUI-3.0-SharedMediaWidgets/widget.xml b/Jamba/Libs/AceGUI-3.0-SharedMediaWidgets/widget.xml index dd3eb2b..ecf2945 100644 --- a/Jamba/Libs/AceGUI-3.0-SharedMediaWidgets/widget.xml +++ b/Jamba/Libs/AceGUI-3.0-SharedMediaWidgets/widget.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Include file="AceGUI-3.0-SharedMediaWidgets\widget.xml" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua index 06f5d52..0dae68c 100644 --- a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua +++ b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua @@ -284,21 +284,6 @@ local function Constructor() sizer_e:SetScript("OnMouseUp", MoverSizer_OnMouseUp) --Container Support - - local content = CreateFrame("Frame",nil,frame) - self.content = content - content.obj = self - content:SetPoint("TOPLEFT",frame,"TOPLEFT",12,-32) - content:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-12,13) - - AceGUI:RegisterAsContainer(self) - return self - -end - - - ---[[ local content = CreateFrame("Frame", nil, frame) content:SetPoint("TOPLEFT", 17, -27) content:SetPoint("BOTTOMRIGHT", -17, 40) @@ -322,5 +307,5 @@ end return AceGUI:RegisterAsContainer(widget) end ---]] + AceGUI:RegisterWidgetType(Type, Constructor, Version) diff --git a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua index a56e7cd..6dd0c4d 100644 --- a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua +++ b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua @@ -2,10 +2,12 @@ ScrollFrame Container Plain container that scrolls its content and doesn't grow in height. -------------------------------------------------------------------------------]] -local Type, Version = "ScrollFrame", 23 +local Type, Version = "ScrollFrame", 24 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end +local IsLegion = select(4, GetBuildInfo()) >= 70000 + -- Lua APIs local pairs, assert, type = pairs, assert, type local min, max, floor, abs = math.min, math.max, math.floor, math.abs @@ -176,7 +178,11 @@ local function Constructor() local scrollbg = scrollbar:CreateTexture(nil, "BACKGROUND") scrollbg:SetAllPoints(scrollbar) - scrollbg:SetTexture(0, 0, 0, 0.4) + if IsLegion then + scrollbg:SetColorTexture(0, 0, 0, 0.4) + else + scrollbg:SetTexture(0, 0, 0, 0.4) + end --Container Support local content = CreateFrame("Frame", nil, scrollframe) diff --git a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua index 085449b..9bf17d8 100644 --- a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua +++ b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua @@ -2,10 +2,12 @@ TreeGroup Container Container that uses a tree control to switch between groups. -------------------------------------------------------------------------------]] -local Type, Version = "TreeGroup", 38 +local Type, Version = "TreeGroup", 40 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end +local IsLegion = select(4, GetBuildInfo()) >= 70000 + -- Lua APIs local next, pairs, ipairs, assert, type = next, pairs, ipairs, assert, type local math_min, math_max, floor = math.min, math.max, floor @@ -295,6 +297,7 @@ local methods = { ["OnAcquire"] = function(self) self:SetTreeWidth(DEFAULT_TREE_WIDTH, DEFAULT_TREE_SIZABLE) self:EnableButtonTooltips(true) + self.frame:SetScript("OnUpdate", FirstFrameUpdate) end, ["OnRelease"] = function(self) @@ -669,7 +672,12 @@ local function Constructor() local scrollbg = scrollbar:CreateTexture(nil, "BACKGROUND") scrollbg:SetAllPoints(scrollbar) - scrollbg:SetTexture(0,0,0,0.4) + + if IsLegion then + scrollbg:SetColorTexture(0,0,0,0.4) + else + scrollbg:SetTexture(0,0,0,0.4) + end local border = CreateFrame("Frame",nil,frame) border:SetPoint("TOPLEFT", treeframe, "TOPRIGHT") diff --git a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua index 028e524..c7c72c1 100644 --- a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua +++ b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua @@ -13,12 +13,6 @@ local pairs = pairs local _G = _G local PlaySound, CreateFrame, UIParent = PlaySound, CreateFrame, UIParent -local wowMoP -do - local _, _, _, interface = GetBuildInfo() - wowMoP = (interface >= 50000) -end - --[[----------------------------------------------------------------------------- Scripts -------------------------------------------------------------------------------]] @@ -80,7 +74,7 @@ Constructor -------------------------------------------------------------------------------]] local function Constructor() local name = "AceGUI30Button" .. AceGUI:GetNextWidgetNum(Type) - local frame = CreateFrame("Button", name, UIParent, wowMoP and "UIPanelButtonTemplate" or "UIPanelButtonTemplate2") + local frame = CreateFrame("Button", name, UIParent, "UIPanelButtonTemplate") frame:Hide() frame:EnableMouse(true) diff --git a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua index b7060aa..740a467 100644 --- a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua +++ b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua @@ -1,10 +1,12 @@ --[[----------------------------------------------------------------------------- ColorPicker Widget -------------------------------------------------------------------------------]] -local Type, Version = "ColorPicker", 22 +local Type, Version = "ColorPicker", 23 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end +local IsLegion = select(4, GetBuildInfo()) >= 70000 + -- Lua APIs local pairs = pairs @@ -146,8 +148,11 @@ local function Constructor() local texture = frame:CreateTexture(nil, "BACKGROUND") texture:SetWidth(16) texture:SetHeight(16) - texture:SetTexture(1, 1, 1) - --texture:SetColorTexture(1, 1, 1) + if IsLegion then + texture:SetColorTexture(1, 1, 1) + else + texture:SetTexture(1, 1, 1) + end texture:SetPoint("CENTER", colorSwatch) texture:Show() diff --git a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua index 1f28cb5..5ea840f 100644 --- a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua +++ b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua @@ -1,7 +1,9 @@ ---[[ $Id: AceGUIWidget-DropDown-Items.lua 996 2010-12-01 18:34:17Z nevcairiel $ ]]-- +--[[ $Id: AceGUIWidget-DropDown-Items.lua 1137 2016-05-15 10:57:36Z nevcairiel $ ]]-- local AceGUI = LibStub("AceGUI-3.0") +local IsLegion = select(4, GetBuildInfo()) >= 70000 + -- Lua APIs local select, assert = select, assert @@ -440,7 +442,7 @@ end -- A single line to separate items do local widgetType = "Dropdown-Item-Separator" - local widgetVersion = 1 + local widgetVersion = 2 -- exported, override local function SetDisabled(self, disabled) @@ -455,7 +457,11 @@ do local line = self.frame:CreateTexture(nil, "OVERLAY") line:SetHeight(1) - line:SetTexture(.5, .5, .5) + if IsLegion then + line:SetColorTexture(.5, .5, .5) + else + line:SetTexture(.5, .5, .5) + end line:SetPoint("LEFT", self.frame, "LEFT", 10, 0) line:SetPoint("RIGHT", self.frame, "RIGHT", -10, 0) diff --git a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua index c67902c..d039026 100644 --- a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua +++ b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua @@ -1,7 +1,7 @@ --[[----------------------------------------------------------------------------- EditBox Widget -------------------------------------------------------------------------------]] -local Type, Version = "EditBox", 25 +local Type, Version = "EditBox", 26 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -200,6 +200,10 @@ local methods = { if not self.frame:IsShown() then self.frame:SetScript("OnShow", Frame_OnShowFocus) end + end, + + ["HighlightText"] = function(self, from, to) + self.editbox:HighlightText(from, to) end } diff --git a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua index 8d01b54..561da73 100644 --- a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua +++ b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua @@ -9,7 +9,7 @@ if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end local select, pairs, print = select, pairs, print -- WoW APIs -local CreateFrame, UIParent, GetBuildInfo = CreateFrame, UIParent, GetBuildInfo +local CreateFrame, UIParent = CreateFrame, UIParent --[[----------------------------------------------------------------------------- Scripts @@ -131,12 +131,8 @@ local function Constructor() for method, func in pairs(methods) do widget[method] = func end - -- SetText is deprecated, but keep it around for a while. (say, to WoW 4.0) - if (select(4, GetBuildInfo()) < 40000) then - widget.SetText = widget.SetLabel - else - widget.SetText = function(self, ...) print("AceGUI-3.0-Icon: SetText is deprecated! Use SetLabel instead!"); self:SetLabel(...) end - end + + widget.SetText = function(self, ...) print("AceGUI-3.0-Icon: SetText is deprecated! Use SetLabel instead!"); self:SetLabel(...) end return AceGUI:RegisterAsWidget(widget) end diff --git a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua index 7dccc64..ec4cead 100644 --- a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua +++ b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua @@ -2,7 +2,7 @@ Keybinding Widget Set Keybindings in the Config UI. -------------------------------------------------------------------------------]] -local Type, Version = "Keybinding", 24 +local Type, Version = "Keybinding", 25 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -17,12 +17,6 @@ local CreateFrame, UIParent = CreateFrame, UIParent -- List them here for Mikk's FindGlobals script -- GLOBALS: NOT_BOUND -local wowMoP -do - local _, _, _, interface = GetBuildInfo() - wowMoP = (interface >= 50000) -end - --[[----------------------------------------------------------------------------- Scripts -------------------------------------------------------------------------------]] @@ -40,11 +34,13 @@ local function Keybinding_OnClick(frame, button) local self = frame.obj if self.waitingForKey then frame:EnableKeyboard(false) + frame:EnableMouseWheel(false) self.msgframe:Hide() frame:UnlockHighlight() self.waitingForKey = nil else frame:EnableKeyboard(true) + frame:EnableMouseWheel(true) self.msgframe:Show() frame:LockHighlight() self.waitingForKey = true @@ -79,6 +75,7 @@ local function Keybinding_OnKeyDown(frame, key) end frame:EnableKeyboard(false) + frame:EnableMouseWheel(false) self.msgframe:Hide() frame:UnlockHighlight() self.waitingForKey = nil @@ -103,6 +100,16 @@ local function Keybinding_OnMouseDown(frame, button) Keybinding_OnKeyDown(frame, button) end +local function Keybinding_OnMouseWheel(frame, direction) + local button + if direction >= 0 then + button = "MOUSEWHEELUP" + else + button = "MOUSEWHEELDOWN" + end + Keybinding_OnKeyDown(frame, button) +end + --[[----------------------------------------------------------------------------- Methods -------------------------------------------------------------------------------]] @@ -115,6 +122,7 @@ local methods = { self.msgframe:Hide() self:SetDisabled(false) self.button:EnableKeyboard(false) + self.button:EnableMouseWheel(false) end, -- ["OnRelease"] = nil, @@ -180,15 +188,17 @@ local function Constructor() local name = "AceGUI30KeybindingButton" .. AceGUI:GetNextWidgetNum(Type) local frame = CreateFrame("Frame", nil, UIParent) - local button = CreateFrame("Button", name, frame, wowMoP and "UIPanelButtonTemplate" or "UIPanelButtonTemplate2") + local button = CreateFrame("Button", name, frame, "UIPanelButtonTemplate") button:EnableMouse(true) + button:EnableMouseWheel(false) button:RegisterForClicks("AnyDown") button:SetScript("OnEnter", Control_OnEnter) button:SetScript("OnLeave", Control_OnLeave) button:SetScript("OnClick", Keybinding_OnClick) button:SetScript("OnKeyDown", Keybinding_OnKeyDown) button:SetScript("OnMouseDown", Keybinding_OnMouseDown) + button:SetScript("OnMouseWheel", Keybinding_OnMouseWheel) button:SetPoint("BOTTOMLEFT") button:SetPoint("BOTTOMRIGHT") button:SetHeight(24) diff --git a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua index a27a2fc..9af4b87 100644 --- a/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua +++ b/Jamba/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua @@ -1,4 +1,4 @@ -local Type, Version = "MultiLineEditBox", 27 +local Type, Version = "MultiLineEditBox", 28 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -14,12 +14,6 @@ local _G = _G -- List them here for Mikk's FindGlobals script -- GLOBALS: ACCEPT, ChatFontNormal -local wowMoP -do - local _, _, _, interface = GetBuildInfo() - wowMoP = (interface >= 50000) -end - --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] @@ -251,7 +245,11 @@ local methods = { self.frame:SetScript("OnShow", OnShowFocus) end end, - + + ["HighlightText"] = function(self, from, to) + self.editBox:HighlightText(from, to) + end, + ["GetCursorPosition"] = function(self) return self.editBox:GetCursorPosition() end, @@ -285,7 +283,7 @@ local function Constructor() label:SetText(ACCEPT) label:SetHeight(10) - local button = CreateFrame("Button", ("%s%dButton"):format(Type, widgetNum), frame, wowMoP and "UIPanelButtonTemplate" or "UIPanelButtonTemplate2") + local button = CreateFrame("Button", ("%s%dButton"):format(Type, widgetNum), frame, "UIPanelButtonTemplate") button:SetPoint("BOTTOMLEFT", 0, 4) button:SetHeight(22) button:SetWidth(label:GetStringWidth() + 24) diff --git a/Jamba/Libs/AceHook-3.0/AceHook-3.0.xml b/Jamba/Libs/AceHook-3.0/AceHook-3.0.xml index add0f26..fe51336 100644 --- a/Jamba/Libs/AceHook-3.0/AceHook-3.0.xml +++ b/Jamba/Libs/AceHook-3.0/AceHook-3.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="AceHook-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceLocale-3.0/AceLocale-3.0.xml b/Jamba/Libs/AceLocale-3.0/AceLocale-3.0.xml index e017af0..bf023f0 100644 --- a/Jamba/Libs/AceLocale-3.0/AceLocale-3.0.xml +++ b/Jamba/Libs/AceLocale-3.0/AceLocale-3.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="AceLocale-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceSerializer-3.0/AceSerializer-3.0.lua b/Jamba/Libs/AceSerializer-3.0/AceSerializer-3.0.lua index 150a31e..0b19e08 100644 --- a/Jamba/Libs/AceSerializer-3.0/AceSerializer-3.0.lua +++ b/Jamba/Libs/AceSerializer-3.0/AceSerializer-3.0.lua @@ -10,8 +10,8 @@ -- make into AceSerializer. -- @class file -- @name AceSerializer-3.0 --- @release $Id: AceSerializer-3.0.lua 1038 2011-10-03 01:39:58Z mikk $ -local MAJOR,MINOR = "AceSerializer-3.0", 4 +-- @release $Id: AceSerializer-3.0.lua 1135 2015-09-19 20:39:16Z nevcairiel $ +local MAJOR,MINOR = "AceSerializer-3.0", 5 local AceSerializer, oldminor = LibStub:NewLibrary(MAJOR, MINOR) if not AceSerializer then return end @@ -27,8 +27,8 @@ local tconcat = table.concat local inf = math.huge local serNaN -- can't do this in 4.3, see ace3 ticket 268 -local serInf = tostring(inf) -local serNegInf = tostring(-inf) +local serInf, serInfMac = "1.#INF", "inf" +local serNegInf, serNegInfMac = "-1.#INF", "-inf" -- Serialization functions @@ -62,11 +62,15 @@ local function SerializeValue(v, res, nres) elseif t=="number" then -- ^N = number (just tostring()ed) or ^F (float components) local str = tostring(v) - if tonumber(str)==v --[[not in 4.3 or str==serNaN]] or str==serInf or str==serNegInf then + if tonumber(str)==v --[[not in 4.3 or str==serNaN]] then -- translates just fine, transmit as-is res[nres+1] = "^N" res[nres+2] = str nres=nres+2 + elseif v == inf or v == -inf then + res[nres+1] = "^N" + res[nres+2] = v == inf and serInf or serNegInf + nres=nres+2 else local m,e = frexp(v) res[nres+1] = "^F" @@ -147,9 +151,9 @@ end local function DeserializeNumberHelper(number) --[[ not in 4.3 if number == serNaN then return 0/0 - else]]if number == serNegInf then + else]]if number == serNegInf or number == serNegInfMac then return -inf - elseif number == serInf then + elseif number == serInf or number == serInfMac then return inf else return tonumber(number) @@ -280,4 +284,4 @@ end -- Update embeds for target, v in pairs(AceSerializer.embeds) do AceSerializer:Embed(target) -end \ No newline at end of file +end diff --git a/Jamba/Libs/AceSerializer-3.0/AceSerializer-3.0.xml b/Jamba/Libs/AceSerializer-3.0/AceSerializer-3.0.xml index 94924af..677d08e 100644 --- a/Jamba/Libs/AceSerializer-3.0/AceSerializer-3.0.xml +++ b/Jamba/Libs/AceSerializer-3.0/AceSerializer-3.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="AceSerializer-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/AceTab-3.0/AceTab-3.0.lua b/Jamba/Libs/AceTab-3.0/AceTab-3.0.lua index a6ab192..b7c64db 100644 --- a/Jamba/Libs/AceTab-3.0/AceTab-3.0.lua +++ b/Jamba/Libs/AceTab-3.0/AceTab-3.0.lua @@ -2,15 +2,13 @@ -- Note: This library is not yet finalized. -- @class file -- @name AceTab-3.0 --- @release $Id: AceTab-3.0.lua 1031 2011-06-29 15:04:34Z nevcairiel $ +-- @release $Id: AceTab-3.0.lua 1148 2016-07-18 09:13:02Z nevcairiel $ local ACETAB_MAJOR, ACETAB_MINOR = 'AceTab-3.0', 9 local AceTab, oldminor = LibStub:NewLibrary(ACETAB_MAJOR, ACETAB_MINOR) if not AceTab then return end -- No upgrade needed -local is335 = GetBuildInfo() >= "3.3.5" - AceTab.registry = AceTab.registry or {} -- local upvalues @@ -38,7 +36,7 @@ end local function hookFrame(f) if f.hookedByAceTab3 then return end f.hookedByAceTab3 = true - if f == (is335 and ChatEdit_GetActiveWindow() or ChatFrameEditBox) then + if f == ChatEdit_GetActiveWindow() then local origCTP = ChatEdit_CustomTabPressed function ChatEdit_CustomTabPressed(...) if AceTab:OnTabPressed(f) then @@ -126,13 +124,9 @@ function AceTab:RegisterTabCompletion(descriptor, prematches, wordlist, usagefun -- Make listenframes into a one-element table if it was not passed a table of frames. if not listenframes then -- default - if is335 then - listenframes = {} - for i = 1, NUM_CHAT_WINDOWS do - listenframes[i] = _G["ChatFrame"..i.."EditBox"] - end - else - listenframes = { ChatFrameEditBox } + listenframes = {} + for i = 1, NUM_CHAT_WINDOWS do + listenframes[i] = _G["ChatFrame"..i.."EditBox"] end elseif type(listenframes) ~= 'table' or type(listenframes[0]) == 'userdata' and type(listenframes.IsObjectType) == 'function' then -- single frame or framename listenframes = { listenframes } @@ -327,7 +321,7 @@ function AceTab:OnTabPressed(this) if this:GetText() == '' then return true end -- allow Blizzard to handle slash commands, themselves - if this == (is335 and ChatEdit_GetActiveWindow() or ChatFrameEditBox) then + if this == ChatEdit_GetActiveWindow() then local command = this:GetText() if strfind(command, "^/[%a%d_]+$") then return true diff --git a/Jamba/Libs/AceTimer-3.0/AceTimer-3.0.xml b/Jamba/Libs/AceTimer-3.0/AceTimer-3.0.xml index 38e9021..d5aee81 100644 --- a/Jamba/Libs/AceTimer-3.0/AceTimer-3.0.xml +++ b/Jamba/Libs/AceTimer-3.0/AceTimer-3.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="AceTimer-3.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua b/Jamba/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua index a127301..675d7b0 100644 --- a/Jamba/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua +++ b/Jamba/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua @@ -1,4 +1,4 @@ ---[[ $Id: CallbackHandler-1.0.lua 965 2010-08-09 00:47:52Z mikk $ ]] +--[[ $Id: CallbackHandler-1.0.lua 1131 2015-06-04 07:29:24Z nevcairiel $ ]] local MAJOR, MINOR = "CallbackHandler-1.0", 6 local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR) @@ -65,9 +65,7 @@ end}) -- UnregisterName - name of the callback unregistration API, default "UnregisterCallback" -- UnregisterAllName - name of the API to unregister all callbacks, default "UnregisterAllCallbacks". false == don't publish this API. -function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAllName, OnUsed, OnUnused) - -- TODO: Remove this after beta has gone out - assert(not OnUsed and not OnUnused, "ACE-80: OnUsed/OnUnused are deprecated. Callbacks are now done to registry.OnUsed and registry.OnUnused") +function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAllName) RegisterName = RegisterName or "RegisterCallback" UnregisterName = UnregisterName or "UnregisterCallback" diff --git a/Jamba/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml b/Jamba/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml index 876df83..c107f88 100644 --- a/Jamba/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml +++ b/Jamba/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="CallbackHandler-1.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/Changelog-Ace3-Release-r1151.txt b/Jamba/Libs/Changelog-Ace3-Release-r1151.txt new file mode 100644 index 0000000..c78dc9d --- /dev/null +++ b/Jamba/Libs/Changelog-Ace3-Release-r1151.txt @@ -0,0 +1,92 @@ +------------------------------------------------------------------------ +r1151 | nevcairiel | 2016-07-18 17:03:29 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + A /tags/Release-r1151 (from /trunk:1150) + +Tag as Release-r1151 +------------------------------------------------------------------------ +r1150 | nevcairiel | 2016-07-18 17:02:20 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + M /trunk/changelog.txt + +Update changelog +------------------------------------------------------------------------ +r1149 | nevcairiel | 2016-07-18 17:02:10 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + M /trunk/Ace3.toc + +Update TOC for 7.0 +------------------------------------------------------------------------ +r1148 | nevcairiel | 2016-07-18 09:13:02 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua + M /trunk/AceTab-3.0/AceTab-3.0.lua + +Remove remaining compat code for ancient WoW versions +------------------------------------------------------------------------ +r1147 | nevcairiel | 2016-07-18 09:10:10 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Button.lua + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua + +Remove pre-MoP compat code from AceGUI widgets +------------------------------------------------------------------------ +r1146 | nevcairiel | 2016-07-18 09:07:16 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua + +Fix global leak +------------------------------------------------------------------------ +r1145 | nevcairiel | 2016-07-18 08:32:42 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua + +AceGUI-3.0: Keybinding: Support mousewheel up/down bindings (Ticket #372) +------------------------------------------------------------------------ +r1144 | nevcairiel | 2016-07-11 09:04:48 +0000 (Mon, 11 Jul 2016) | 1 line +Changed paths: + M /trunk/changelog.txt + +Re-format changelog to be consistent with older entries +------------------------------------------------------------------------ +r1143 | nevcairiel | 2016-07-11 08:52:03 +0000 (Mon, 11 Jul 2016) | 1 line +Changed paths: + M /trunk/AceConsole-3.0/AceConsole-3.0.lua + +AceConsole-3.0: Fix a typo in the LuaDoc function signature +------------------------------------------------------------------------ +r1142 | nevcairiel | 2016-07-11 08:36:19 +0000 (Mon, 11 Jul 2016) | 1 line +Changed paths: + M /trunk/AceDB-3.0/AceDB-3.0.lua + +AceDB-3.0: Add the "locale" profile key to the LuaDoc (Ticket #344) +------------------------------------------------------------------------ +r1141 | nevcairiel | 2016-07-11 08:32:23 +0000 (Mon, 11 Jul 2016) | 1 line +Changed paths: + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua + +AceGUI-3.0: Expose the HighlightText API for EditBox and MultiLineEditBox Widgets (Ticket #378) +------------------------------------------------------------------------ +r1140 | nevcairiel | 2016-07-03 07:53:29 +0000 (Sun, 03 Jul 2016) | 1 line +Changed paths: + M /trunk/AceDBOptions-3.0/AceDBOptions-3.0.lua + +AceDBOptions-3.0: Update localization from the WoWAce Localization system +------------------------------------------------------------------------ +r1139 | nevcairiel | 2016-07-03 07:43:51 +0000 (Sun, 03 Jul 2016) | 1 line +Changed paths: + M /trunk/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua + M /trunk/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua + +AceConfig-3.0: Allow specifying images using the numeric fileID (Ticket #389) +------------------------------------------------------------------------ +r1138 | nevcairiel | 2016-06-01 10:17:04 +0000 (Wed, 01 Jun 2016) | 3 lines +Changed paths: + M /trunk/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua + +AceGUI-3.0: TreeGroup: Refresh the tree in an OnUpdate once after Acquire, not only after creation + +The widget creation and acquire can be on different code paths, this ensures the tree height is always known and the tree populated properly. +------------------------------------------------------------------------ diff --git a/Jamba/Libs/LibBabble-Class-3.0/LibBabble-Class-3.0.lua b/Jamba/Libs/LibBabble-Class-3.0/LibBabble-Class-3.0.lua index db5985e..8c406f2 100644 --- a/Jamba/Libs/LibBabble-Class-3.0/LibBabble-Class-3.0.lua +++ b/Jamba/Libs/LibBabble-Class-3.0/LibBabble-Class-3.0.lua @@ -1,4 +1,4 @@ ---[[ +--[[ Name: LibBabble-Class-3.0 Revision: $Rev: 50 $ Author(s): ckknight (ckknight@gmail.com) diff --git a/Jamba/Libs/LibBabble-Inventory-3.0/LibStub/tests/test.lua b/Jamba/Libs/LibBabble-Inventory-3.0/LibStub/tests/test.lua index 276ddab..338bcf4 100644 --- a/Jamba/Libs/LibBabble-Inventory-3.0/LibStub/tests/test.lua +++ b/Jamba/Libs/LibBabble-Inventory-3.0/LibStub/tests/test.lua @@ -38,4 +38,4 @@ assert(newOldMinor == 3) -- previous version was 3 (even though it gave a string local newLib, newOldMinor = LibStub:NewLibrary("Pants", 5) -- register a new library, using a normal number instead of a string assert(newLib) -assert(newOldMinor == 4) -- previous version was 4 (even though it gave a string) \ No newline at end of file +assert(newOldMinor == 4) -- previous version was 4 (even though it gave a string) diff --git a/Jamba/Libs/LibBabble-Inventory-3.0/LibStub/tests/test3.lua b/Jamba/Libs/LibBabble-Inventory-3.0/LibStub/tests/test3.lua index 30f7b94..21bda2b 100644 --- a/Jamba/Libs/LibBabble-Inventory-3.0/LibStub/tests/test3.lua +++ b/Jamba/Libs/LibBabble-Inventory-3.0/LibStub/tests/test3.lua @@ -11,4 +11,4 @@ assert(not success or not ret) -- either error because proxy is not a string or assert(not pcall(LibStub.NewLibrary, LibStub, "Something", "No number in here")) -- should error, minor has no string in it. -assert(not LibStub:GetLibrary("Something", true)) -- shouldn't've created it from the above statement \ No newline at end of file +assert(not LibStub:GetLibrary("Something", true)) -- shouldn't've created it from the above statement diff --git a/Jamba/Libs/LibBabble-Inventory-3.0/LibStub/tests/test4.lua b/Jamba/Libs/LibBabble-Inventory-3.0/LibStub/tests/test4.lua index 43eb338..4735246 100644 --- a/Jamba/Libs/LibBabble-Inventory-3.0/LibStub/tests/test4.lua +++ b/Jamba/Libs/LibBabble-Inventory-3.0/LibStub/tests/test4.lua @@ -38,4 +38,4 @@ loadfile("../LibStub.lua")() assert(LibStub.IterateLibraries == 123) -print("OK") \ No newline at end of file +print("OK") diff --git a/Jamba/Libs/LibBabble-Inventory-3.0/lib.xml b/Jamba/Libs/LibBabble-Inventory-3.0/lib.xml index b9f9904..8b7a32c 100644 --- a/Jamba/Libs/LibBabble-Inventory-3.0/lib.xml +++ b/Jamba/Libs/LibBabble-Inventory-3.0/lib.xml @@ -2,4 +2,4 @@ ..\FrameXML\UI.xsd"> <Script file="LibBabble-3.0.lua" /> <Script file="LibBabble-Inventory-3.0.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/LibBagUtils-1.0/LibBagUtils-1.0.xml b/Jamba/Libs/LibBagUtils-1.0/LibBagUtils-1.0.xml index 493de1c..67b3140 100644 --- a/Jamba/Libs/LibBagUtils-1.0/LibBagUtils-1.0.xml +++ b/Jamba/Libs/LibBagUtils-1.0/LibBagUtils-1.0.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="LibBagUtils-1.0.lua"/> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/LibDeformat-3.0/LibDeformat-3.0.lua b/Jamba/Libs/LibDeformat-3.0/LibDeformat-3.0.lua index 6580517..29f28e2 100644 --- a/Jamba/Libs/LibDeformat-3.0/LibDeformat-3.0.lua +++ b/Jamba/Libs/LibDeformat-3.0/LibDeformat-3.0.lua @@ -269,4 +269,4 @@ function LibDeformat.Test() end --@end-debug@]===] -setmetatable(LibDeformat, { __call = function(self, ...) return self.Deformat(...) end }) \ No newline at end of file +setmetatable(LibDeformat, { __call = function(self, ...) return self.Deformat(...) end }) diff --git a/Jamba/Libs/LibDeformat-3.0/lib.xml b/Jamba/Libs/LibDeformat-3.0/lib.xml index cf6abae..0f66a4d 100644 --- a/Jamba/Libs/LibDeformat-3.0/lib.xml +++ b/Jamba/Libs/LibDeformat-3.0/lib.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="LibDeformat-3.0.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/LibGratuity-3.0/LibGratuity-3.0.toc b/Jamba/Libs/LibGratuity-3.0/LibGratuity-3.0.toc index 8219037..abd9c15 100644 --- a/Jamba/Libs/LibGratuity-3.0/LibGratuity-3.0.toc +++ b/Jamba/Libs/LibGratuity-3.0/LibGratuity-3.0.toc @@ -1,4 +1,4 @@ -## Interface: 50400 +## Interface: 50400 ## LoadOnDemand: 1 ## Title: Lib: Gratuity-3.0 ## Notes: Tooltip scanning library. diff --git a/Jamba/Libs/LibGratuity-3.0/LibStub/tests/test.lua b/Jamba/Libs/LibGratuity-3.0/LibStub/tests/test.lua index 276ddab..338bcf4 100644 --- a/Jamba/Libs/LibGratuity-3.0/LibStub/tests/test.lua +++ b/Jamba/Libs/LibGratuity-3.0/LibStub/tests/test.lua @@ -38,4 +38,4 @@ assert(newOldMinor == 3) -- previous version was 3 (even though it gave a string local newLib, newOldMinor = LibStub:NewLibrary("Pants", 5) -- register a new library, using a normal number instead of a string assert(newLib) -assert(newOldMinor == 4) -- previous version was 4 (even though it gave a string) \ No newline at end of file +assert(newOldMinor == 4) -- previous version was 4 (even though it gave a string) diff --git a/Jamba/Libs/LibGratuity-3.0/LibStub/tests/test3.lua b/Jamba/Libs/LibGratuity-3.0/LibStub/tests/test3.lua index 30f7b94..21bda2b 100644 --- a/Jamba/Libs/LibGratuity-3.0/LibStub/tests/test3.lua +++ b/Jamba/Libs/LibGratuity-3.0/LibStub/tests/test3.lua @@ -11,4 +11,4 @@ assert(not success or not ret) -- either error because proxy is not a string or assert(not pcall(LibStub.NewLibrary, LibStub, "Something", "No number in here")) -- should error, minor has no string in it. -assert(not LibStub:GetLibrary("Something", true)) -- shouldn't've created it from the above statement \ No newline at end of file +assert(not LibStub:GetLibrary("Something", true)) -- shouldn't've created it from the above statement diff --git a/Jamba/Libs/LibGratuity-3.0/LibStub/tests/test4.lua b/Jamba/Libs/LibGratuity-3.0/LibStub/tests/test4.lua index 43eb338..4735246 100644 --- a/Jamba/Libs/LibGratuity-3.0/LibStub/tests/test4.lua +++ b/Jamba/Libs/LibGratuity-3.0/LibStub/tests/test4.lua @@ -38,4 +38,4 @@ loadfile("../LibStub.lua")() assert(LibStub.IterateLibraries == 123) -print("OK") \ No newline at end of file +print("OK") diff --git a/Jamba/Libs/LibGratuity-3.0/lib.xml b/Jamba/Libs/LibGratuity-3.0/lib.xml index 9b361c4..2934f6f 100644 --- a/Jamba/Libs/LibGratuity-3.0/lib.xml +++ b/Jamba/Libs/LibGratuity-3.0/lib.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="LibGratuity-3.0.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/LibSharedMedia-3.0/lib.xml b/Jamba/Libs/LibSharedMedia-3.0/lib.xml index 34aa874..7f2fd53 100644 --- a/Jamba/Libs/LibSharedMedia-3.0/lib.xml +++ b/Jamba/Libs/LibSharedMedia-3.0/lib.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="LibSharedMedia-3.0.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Jamba/Libs/UTF8/UTF8.toc b/Jamba/Libs/UTF8/UTF8.toc index e971b12..86efe27 100644 --- a/Jamba/Libs/UTF8/UTF8.toc +++ b/Jamba/Libs/UTF8/UTF8.toc @@ -12,4 +12,4 @@ ## X-Website: http://www.wowace.com/addons/utf8/ utf8data.lua -utf8.lua \ No newline at end of file +utf8.lua diff --git a/Jamba/Libs/UTF8/utf8.lua b/Jamba/Libs/UTF8/utf8.lua index 485582c..159f7ae 100644 --- a/Jamba/Libs/UTF8/utf8.lua +++ b/Jamba/Libs/UTF8/utf8.lua @@ -314,4 +314,4 @@ end -- install in the string library if not string.utf8reverse then string.utf8reverse = utf8reverse -end \ No newline at end of file +end diff --git a/Jamba/Libs/UTF8/utf8data.lua b/Jamba/Libs/UTF8/utf8data.lua index 655f719..8bcc38f 100644 --- a/Jamba/Libs/UTF8/utf8data.lua +++ b/Jamba/Libs/UTF8/utf8data.lua @@ -1,4 +1,4 @@ -utf8_lc_uc = { +utf8_lc_uc = { ["a"] = "A", ["b"] = "B", ["c"] = "C", diff --git a/Jamba/Locales/JambaCore-Locale-enUS.lua b/Jamba/Locales/JambaCore-Locale-enUS.lua index 08210c1..cab5d03 100644 --- a/Jamba/Locales/JambaCore-Locale-enUS.lua +++ b/Jamba/Locales/JambaCore-Locale-enUS.lua @@ -6,7 +6,7 @@ License: The MIT License local L = LibStub("AceLocale-3.0"):NewLocale( "Jamba-Core", "enUS", true ) --Change ME when update version -L["Version"] = "5.0" +L["Version"] = "5.1" --End of Changeme L["Slash Commands"] = true L["Team"] = true @@ -93,16 +93,16 @@ L["Full Change Log"] = true L["Full ChangeLog"] = true L["ChangeLog"] = true L["Shows the Full changelog\nOpens a new Frame."] = true -L["Text1"] = "Welcome to Legion 7.0.3!" +L["Text1"] = "Welcome to Legion 7.1.0!" L["Text2"] = "" -L["Text3"] = "Jamba Has Had a Lot of changes here is a few important ones to check out" +L["Text3"] = "Jamba Has Had a few changes for 7.1 to check out" L["Text4"] = "" -L["Text5"] = "Display-team has some nice new changes!." -L["Text6"] = "Honor/XP/Artifact/Rep are now on the same bar." -L["Text7"] = "" -L["Text8"] = "QuestLog changes with a Dropdown-Menu." -L["Text9"] = "Quest Watcher Been renamed and now Supports Most Objectives." -L["Text10"] = "Now Easyer To UseCurrency!" +L["Text5"] = "Jamba-Mount one button to mount all the team." +L["Text6"] = "" +L["Text7"] = "Artifact Power is now Auto added to to the item Use bar!" +L["Text8"] = "" +L["Text9"] = "You can not use jamba to invite groups with tags." +L["Text10"] = "" diff --git a/Jamba/Locales/JambaMessage-Locale-enUS.lua b/Jamba/Locales/JambaMessage-Locale-enUS.lua index ed282d2..cb55c55 100644 --- a/Jamba/Locales/JambaMessage-Locale-enUS.lua +++ b/Jamba/Locales/JambaMessage-Locale-enUS.lua @@ -60,4 +60,4 @@ L["Help1"] = "Core: Message Display Help" L["Help2"] = [[Help Here]] L["Help3"] = "" L["Help4"] = [[More Help Here]] -L["Sound To Play"] = true \ No newline at end of file +L["Sound To Play"] = true diff --git a/Jamba/Locales/JambaTeam-Locale-enUS.lua b/Jamba/Locales/JambaTeam-Locale-enUS.lua index 3ce06dd..39131ae 100644 --- a/Jamba/Locales/JambaTeam-Locale-enUS.lua +++ b/Jamba/Locales/JambaTeam-Locale-enUS.lua @@ -24,7 +24,9 @@ L["Set the master character."] = true L["I Am Master"] = true L["Set this character to be the master character."] = true L["Invite"] = true +L["Invites"] = true L["Invite team members to a party."] = true +L["Invite team members to a <tag> party."] = true L["Disband"] = true L["Disband all team members from their parties."] = true L["Push Settings"] = true @@ -116,4 +118,4 @@ L["Promote Master to party leader."] = true L["Set the Master to the Focus."] = true L["Focus will set master toon."] = true L["The master will be the set from the focus target if a team member \n\nNote: All team members must be setting the focus."] = true -L["Party Loot Control (Instances)"] = true \ No newline at end of file +L["Party Loot Control (Instances)"] = true diff --git a/Jamba/Locales/Locales.xml b/Jamba/Locales/Locales.xml index 95b38f9..e645a09 100644 --- a/Jamba/Locales/Locales.xml +++ b/Jamba/Locales/Locales.xml @@ -9,4 +9,4 @@ License: The MIT License <Script file="JambaTeam-Locale-enUS.lua" /> <Script file="JambaTag-Locale-enUS.lua" /> <Script file="JambaMessage-Locale-enUS.lua" /> -</Ui> \ No newline at end of file +</Ui>