--[[ Events.lua The main event handler for Bagnon and Banknon. It controls when the frames update, and when and when they are not shown. The UI by default partially supports showing/hiding at the mailbox, and fully supports the inventory frame showing/hiding at a vendor. I've extended the behavior in the following ways: If a frame was previously shown by a user, it will not automatically close. The events of showing the bank, tradeskill, auction, and trading can also be set to open the inventory or bank windows. --]] bgn_atBank = nil; --a flag for if the player is at the bank or not function BagnonEvents_OnEvent() --[[ Events For Updating Items --]] if ( event == "BAG_UPDATE" or event == "BAG_UPDATE_COOLDOWN") then if( Bagnon and Bagnon:IsVisible() and Bagnon_FrameHasBag("Bagnon", arg1) ) then BagnonFrame_Update(Bagnon, arg1); elseif( Banknon and Banknon:IsVisible() and Bagnon_FrameHasBag("Banknon", arg1) ) then BagnonFrame_Update(Banknon, arg1); end elseif( event == "PLAYERBANKSLOTS_CHANGED") then if( Banknon and Banknon:IsVisible() and Bagnon_FrameHasBag("Banknon", -1) ) then BagnonFrame_Update(Banknon, -1); end elseif( event == "ITEM_LOCK_CHANGED" ) then if( Bagnon and Bagnon:IsVisible() ) then BagnonFrame_UpdateLock(Bagnon); end if( Banknon and Banknon:IsVisible() ) then BagnonFrame_UpdateLock(Banknon); end --the keyring's size changes based on the player's level elseif( event == "PLAYER_LEVEL_UP") then if( Bagnon and Bagnon:IsVisible() and Bagnon_FrameHasBag("Bagnon", KEYRING_CONTAINER) ) then BagnonFrame_Generate(Bagnon); end --[[ Automatic Frame Opening/Closing Events --]] elseif(event == "BANKFRAME_OPENED") then bgn_atBank = 1; if(BagnonSets.showBagsAtBank) then BagnonFrame_Open("Bagnon", 1); end if(BagnonSets.showBankAtBank and Bagnon_IsAddOnEnabled("Banknon")) then BagnonFrame_Open("Banknon", 1); else BagnonEvents_ShowBlizBank(); end elseif(event == "BANKFRAME_CLOSED") then bgn_atBank = nil; if(BagnonSets.showBagsAtBank) then BagnonFrame_Close("Bagnon", 1); end if(BagnonSets.showBankAtBank) then BagnonFrame_Close("Banknon", 1); end elseif(event == "TRADE_SHOW") then if(BagnonSets.showBagsAtTrade) then BagnonFrame_Open("Bagnon", 1); end if(BagnonSets.showBankAtTrade) then BagnonFrame_Open("Banknon", 1); end elseif(event == "TRADE_CLOSED") then if(BagnonSets.showBagsAtTrade) then BagnonFrame_Close("Bagnon", 1); end if(BagnonSets.showBankAtTrade) then BagnonFrame_Close("Banknon", 1); end elseif(event == "TRADE_SKILL_SHOW") then if(BagnonSets.showBagsAtCraft) then BagnonFrame_Open("Bagnon", 1); end if(BagnonSets.showBankAtCraft) then BagnonFrame_Open("Banknon", 1); end elseif(event == "TRADE_SKILL_CLOSE") then if(BagnonSets.showBagsAtCraft) then BagnonFrame_Close("Bagnon", 1); end if(BagnonSets.showBankAtCraft) then BagnonFrame_Close("Banknon", 1); end elseif(event == "AUCTION_HOUSE_SHOW") then if(BagnonSets.showBagsAtAH) then BagnonFrame_Open("Bagnon", 1); end if(BagnonSets.showBankAtAH) then BagnonFrame_Open("Banknon", 1); end elseif(event == "AUCTION_HOUSE_CLOSED") then if(BagnonSets.showBagsAtAH) then BagnonFrame_Close("Bagnon", 1); end if(BagnonSets.showBankAtAH) then BagnonFrame_Close("Banknon", 1); end elseif(event == "MAIL_SHOW") then if(BagnonSets.showBankAtMail) then BagnonFrame_Open("Banknon", 1); end elseif(event == "MAIL_CLOSED") then BagnonFrame_Close("Bagnon", 1); if(BagnonSets.showBankAtMail) then BagnonFrame_Close("Banknon", 1); end elseif(event == "MERCHANT_SHOW") then if(BagnonSets.showBankAtVendor) then BagnonFrame_Open("Banknon", 1); end elseif(event == "MERCHANT_CLOSED") then if(BagnonSets.showBankAtVendor) then BagnonFrame_Close("Banknon", 1); end --[[ Loading Event ]]-- elseif(event == "ADDON_LOADED" and arg1 == "Bagnon_Core") then BagnonEvents:UnregisterEvent("ADDON_LOADED"); BagnonEvents_Load(this); end end function BagnonEvents_Load(eventFrame) BankFrame:UnregisterEvent("BANKFRAME_OPENED"); --disable the ItemOnUpdate function for those using KCItems, since it causes a pretty bad memory leak if KC_Items then BagnonItem_OnUpdate = function() return; end; end BagnonEvents_LoadVariables(); BagnonEvents_ObtainLocalizedNames(); Infield.AddRescaleAction(BagnonEvents_RescaleAll); eventFrame:RegisterEvent("BAG_UPDATE"); eventFrame:RegisterEvent("PLAYERBANKSLOTS_CHANGED"); eventFrame:RegisterEvent("ITEM_LOCK_CHANGED"); eventFrame:RegisterEvent("BAG_UPDATE_COOLDOWN"); eventFrame:RegisterEvent("PLAYER_LEVEL_UP"); eventFrame:RegisterEvent("BANKFRAME_OPENED"); eventFrame:RegisterEvent("BANKFRAME_CLOSED"); eventFrame:RegisterEvent("TRADE_SHOW"); eventFrame:RegisterEvent("TRADE_CLOSED"); eventFrame:RegisterEvent("TRADE_SKILL_SHOW"); eventFrame:RegisterEvent("TRADE_SKILL_CLOSE"); eventFrame:RegisterEvent("AUCTION_HOUSE_SHOW"); eventFrame:RegisterEvent("AUCTION_HOUSE_CLOSED"); eventFrame:RegisterEvent("MAIL_SHOW"); eventFrame:RegisterEvent("MAIL_CLOSED"); eventFrame:RegisterEvent("MERCHANT_SHOW"); eventFrame:RegisterEvent("MERCHANT_CLOSED"); end function BagnonEvents_LoadVariables() if(not BagnonSets) then BagnonSets = { showBagsAtBank = 1, showBagsAtAH = 1, showBankAtBank = 1, showTooltips = 1, qualityBorders = 1, version = BAGNON_VERSION, }; BagnonMsg(BAGNON_INITIALIZED); elseif(BagnonSets.version ~= BAGNON_VERSION) then if(BagnonSets.overrideBank) then BagnonSets.showBankAtBank = 1; BagnonSets.overrideBank = nil; end BagnonSets.version = BAGNON_VERSION; BagnonMsg(BAGNON_UPDATED); end end local function BagnonHasInfo() return (GetLocale() == "enUS" or GetLocale() == "deDE" or GetLocale() == "frFR" or GetLocale() == "zhCN" or GetLocale() == "zhTW" or BagnonSets.noDebug); end --try and get localized names, so that its possible to do special bag coloring function BagnonEvents_ObtainLocalizedNames() if( not BagnonHasInfo() ) then BagnonMsg("Obtaining localized data. Please report the following to where you downloaded Bagnon from."); BagnonMsg( GetLocale() ); end --backpack local name, _, _, _, iType, subType = GetItemInfo(4500); if(name) then if( not BagnonHasInfo() ) then BagnonMsg( "Backpack: " .. (iType or "null") .. ", " .. (subType or "null") ); end if(iType) then BAGNON_ITEMTYPE_CONTAINER = iType; BAGNON_SUBTYPE_BAG = subType; end end --ammo name, _, _, _, iType, subType = GetItemInfo(8218); if(name) then if( not BagnonHasInfo() ) then BagnonMsg( "Ammo: " .. (iType or "null") .. ", " .. (subType or "null") ); end if(iType) then BAGNON_ITEMTYPE_QUIVER = iType; end end --soul pouch name, _, _, _, iType, subType = GetItemInfo(21340); if(name) then if( not BagnonHasInfo() ) then BagnonMsg( "Soul Bag: " .. (iType or "null") .. ", " .. (subType or "null") ); end if(subType) then BAGNON_SUBTYPE_SOULBAG = subType; end end end function BagnonEvents_RescaleAll() if(Bagnon) then BagnonFrame_Reposition(Bagnon); end if(Banknon) then BagnonFrame_Reposition(Banknon); end end --[[ Taken from Blizzard's code Shows the normal bank frame --]] function BagnonEvents_ShowBlizBank() BankFrameTitleText:SetText( UnitName("npc") ); SetPortraitTexture(BankPortraitTexture,"npc"); ShowUIPanel(BankFrame); if( not BankFrame:IsVisible() ) then CloseBankFrame(); end UpdateBagSlotStatus(); end --[[ Create the Event Handler Frame ]]-- CreateFrame("Frame", "BagnonEvents") BagnonEvents:RegisterEvent("ADDON_LOADED"); BagnonEvents:SetScript("OnEvent", BagnonEvents_OnEvent); BagnonEvents:Hide();