--[[**************************************************************** BankItems v10900 Author: wow.jaslaughter.com **************************************************************** Description: Type /bi or /bankitems to see what is currently in your bank. You must visit your bank one time to initialize. Credits: Original concept from Merphle I look for SellValue data for the list, an addon originally by Sarf. I use the version from CapnBry at http://capnbry.net/wow Official Site: wow.jaslaughter.com BankItems-10900 ****************************************************************]] BINDING_HEADER_BANKITEMS = "BankItems Bindings"; BINDING_NAME_TOGGLEBANKITEMS = "Toggle BankItems"; BINDING_NAME_TOGGLEBANKITEMSALL = "Toggle BankItems and all Bags"; BINDING_NAME_RESETFRAMEPOS = "Reset BankItems positions"; BANKITEMS_VERSIONTEXT = "BankItems v10900"; BankItems_Save = {}; local loaded = nil; local bankPlayer = nil; local bankPlayerName = nil; local allRealms = 0; local allBags = 0; local CONTAINER_FRAME_TABLE = { [0] = {"Interface\\ContainerFrame\\UI-BackpackBackground", 256, 256, 239}, [1] = {"Interface\\ContainerFrame\\UI-Bag-1x4", 256, 128, 96}, [2] = {"Interface\\ContainerFrame\\UI-Bag-1x4", 256, 128, 96}, [3] = {"Interface\\ContainerFrame\\UI-Bag-1x4", 256, 128, 96}, [4] = {"Interface\\ContainerFrame\\UI-Bag-1x4", 256, 128, 96}, [5] = {"Interface\\ContainerFrame\\UI-Bag-1x4+2", 256, 128, 116}, [6] = {"Interface\\ContainerFrame\\UI-Bag-1x4+2", 256, 128, 116}, [7] = {"Interface\\ContainerFrame\\UI-Bag-1x4+2", 256, 128, 116}, [8] = {"Interface\\ContainerFrame\\UI-Bag-2x4", 256, 256, 137}, [9] = {"Interface\\ContainerFrame\\UI-Bag-2x4+2", 256, 256, 157}, [10] = {"Interface\\ContainerFrame\\UI-Bag-2x4+2", 256, 256, 157}, [11] = {"Interface\\ContainerFrame\\UI-Bag-2x4+2", 256, 256, 157}, [12] = {"Interface\\ContainerFrame\\UI-Bag-3x4", 256, 256, 178}, [13] = {"Interface\\ContainerFrame\\UI-Bag-3x4+2", 256, 256, 198}, [14] = {"Interface\\ContainerFrame\\UI-Bag-3x4+2", 256, 256, 198}, [15] = {"Interface\\ContainerFrame\\UI-Bag-3x4+2", 256, 256, 198}, [16] = {"Interface\\ContainerFrame\\UI-Bag-4x4", 256, 256, 219}, [18] = {"Interface\\ContainerFrame\\UI-Bag-4x4+2", 256, 256, 239}, [20] = {"Interface\\ContainerFrame\\UI-Bag-5x4", 256, 256, 259}, }; function BankItems_OnLoad() this:RegisterEvent("VARIABLES_LOADED"); this:RegisterEvent("BANKFRAME_OPENED"); this:RegisterEvent("PLAYERBANKSLOTS_CHANGED"); this:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED"); this:RegisterEvent("BAG_UPDATE"); this:RegisterEvent("PLAYER_MONEY"); SlashCmdList["BANKITEMS"] = function(msg) BankItems_SlashHandler(msg) end; SLASH_BANKITEMS1 = "/bankitems"; SLASH_BANKITEMS2 = "/bi"; tinsert(UISpecialFrames,"BankItems_Frame"); end function BankItems_OnEvent(event) if ( event == "VARIABLES_LOADED" ) then loaded = 1; end if ( not loaded ) then return; end if ( bankPlayer == nil ) then bankPlayer = BankItems_GetPlayer(UnitName("player").."|"..BankItems_Trim(GetCVar("realmName"))); BankItems_SaveMoney(); return; end if ( event == "BANKFRAME_OPENED" or event == "PLAYERBANKSLOTS_CHANGED" or event == "PLAYERBANKBAGSLOTS_CHANGED" ) then BankItems_SaveItems(); return; end if ( event == "BAG_UPDATE" and BankFrame:IsVisible() ) then BankItems_SaveItems(); if ( tonumber(arg1) and tonumber(arg1) > 4 and tonumber(arg1) <= 10 ) then BankItems_PopulateBag(arg1); end return; end if ( event == "PLAYER_MONEY" ) then BankItems_SaveMoney(); return; end end function BankItems_Frame_OnShow() PlaySound("igMainMenuOpen"); if ( not BankItems_Frame.hasShown ) then BankItems_Frame.hasShown = 1; SetPortraitTexture(BankItems_Portrait, "player"); BankItems_TotalMoneyText:ClearAllPoints(); BankItems_TotalMoneyText:SetPoint("LEFT","BankItems_MoneyFrameTotalCopperButton","RIGHT",0,0); end BankItems_SaveMoney(); end function BankItems_Frame_OnHide() for bagNum = 1, 6 do getglobal("BankItems_ContainerFrame"..bagNum):Hide(); end end function BankItems_GetPlayer(playerName) if ( not BankItems_Save[playerName] or (not BankItems_Save[playerName].money and table.getn(BankItems_Save[playerName]) == 0) ) then BankItems_Save[playerName] = {}; end BankItems_TitleText:SetText(BankItems_Split(playerName,"|")[1].." of "..BankItems_Split(playerName,"|")[2]); bankPlayerName = playerName; if ( playerName == UnitName("player").."|"..BankItems_Trim(GetCVar("realmName")) ) then SetPortraitTexture(BankItems_Portrait, "player"); else BankItems_Portrait:SetTexture("Interface\\QuestFrame\\UI-QuestLog-BookIcon"); end return BankItems_Save[playerName]; end function BankItems_SlashHandler(msg) if ( msg and strlen(msg) > 0 ) then msg = strlower(msg); end if ( not msg ) then msg = ""; end if ( msg == "list" ) then BankItems_ListAll(); return; end if ( msg == "resetpos" ) then BankItems_ResetPos(); return; end if ( msg == "clear" ) then local selected = BankItems_UserDropdown_GetValue(); if ( BankItems_Save[selected] ) then BankItems_Save[selected] = nil; end bankPlayer = BankItems_GetPlayer(UnitName("player").."|"..BankItems_Trim(GetCVar("realmName"))); if ( BankFrame:IsVisible() ) then BankItems_SaveItems(); end BankItems_SaveMoney(); BankItems_Frame:Hide(); end if ( msg == "clearall" ) then BankItems_Save = {}; bankPlayer = BankItems_GetPlayer(UnitName("player").."|"..BankItems_Trim(GetCVar("realmName"))); if ( BankFrame:IsVisible() ) then BankItems_SaveItems(); end BankItems_SaveMoney(); BankItems_Frame:Hide(); end if ( msg == "help" ) then BankItems_Chat(BANKITEMS_VERSIONTEXT); BankItems_Chat("Type /bi or /bankitems to open BankItems"); BankItems_Chat("-- /bi all : open BankItems and all bags"); BankItems_Chat("-- /bi list : list contents in chat"); BankItems_Chat("-- /bi clear : clear currently selected player's info"); BankItems_Chat("-- /bi clearall : clear all players' info"); BankItems_Chat("-- /bi resetpos : reset BankItems and bags position"); return; end if ( msg == "allrealms" ) then if ( allRealms == 0 ) then allRealms = 1; else allRealms = 0; end end BankItems_PopulateFrame(); if ( BankItems_Frame:IsVisible() ) then BankItems_Frame:Hide(); else BankItems_Frame:Show(); if ( msg == "all" ) then allBags = 1; for num = 1, 6 do getglobal("BankItems_ContainerFrame"..num):Hide(); BankItems_Bag_OnClick(num + 4); end else allBags = 0; end end end function BankItems_ResetPos() BankItems_Frame:ClearAllPoints(); BankItems_Frame:SetPoint("TOPLEFT","UIParent","TOPLEFT",50,-104); BankItems_ContainerFrame1:ClearAllPoints(); BankItems_ContainerFrame1:SetPoint("TOPLEFT","BankItems_Frame","TOPRIGHT",0,-260); BankItems_ContainerFrame2:ClearAllPoints(); BankItems_ContainerFrame2:SetPoint("TOPLEFT","BankItems_Frame","TOPRIGHT",0,0); BankItems_ContainerFrame3:ClearAllPoints(); BankItems_ContainerFrame3:SetPoint("TOPLEFT","BankItems_Frame","TOPRIGHT",0,-520); BankItems_ContainerFrame4:ClearAllPoints(); BankItems_ContainerFrame4:SetPoint("TOPLEFT","BankItems_Frame","TOPRIGHT",256,0); BankItems_ContainerFrame5:ClearAllPoints(); BankItems_ContainerFrame5:SetPoint("TOPLEFT","BankItems_Frame","TOPRIGHT",256,-260); BankItems_ContainerFrame6:ClearAllPoints(); BankItems_ContainerFrame6:SetPoint("TOPLEFT","BankItems_Frame","TOPRIGHT",256,-520); end function BankItems_SaveMoney() if ( UnitName("player") and BankItems_Trim(GetCVar("realmName")) ) then if ( BankItems_Save[UnitName("player").."|"..BankItems_Trim(GetCVar("realmName"))] ) then BankItems_Save[UnitName("player").."|"..BankItems_Trim(GetCVar("realmName"))]["money"] = GetMoney(); end if ( BankItems_MoneyFrame:IsVisible() ) then MoneyFrame_Update("BankItems_MoneyFrame", bankPlayer.money); end end end function BankItems_UpdateTotalMoney() BankItems_SaveMoney(); local totalMula = 0; if ( allRealms == 1 ) then for key, value in BankItems_Save do if ( BankItems_Save[key].money ) then totalMula = totalMula + BankItems_Save[key].money; end end else for key, value in BankItems_Save do local thisRealmPlayers = BankItems_Split(key, "|")[2]; if ( thisRealmPlayers == BankItems_Trim(GetCVar("realmName")) and (table.getn(BankItems_Save[key]) > 0 or BankItems_Save[key].money) ) then if ( BankItems_Save[key].money ) then totalMula = totalMula + BankItems_Save[key].money; end end end end MoneyFrame_Update("BankItems_MoneyFrameTotal", totalMula); end function BankItems_SaveItems() local itemLink,icon,quantity,bagNum_Slots; local currPlayer = BankItems_Save[UnitName("player").."|"..BankItems_Trim(GetCVar("realmName"))]; if ( BankFrame:IsVisible() ) then for num = 1, 24 do itemLink = GetContainerItemLink(BANK_CONTAINER, num); icon, quantity = GetContainerItemInfo(BANK_CONTAINER, num); if ( itemLink ) then currPlayer[num] = { ["icon"] = icon, ["count"] = quantity, ["link"] = itemLink }; else currPlayer[num] = nil; end end for bagNum = 5, 10 do bagNum_Slots = GetContainerNumSlots(bagNum); bagNum_ID = BankButtonIDToInvSlotID(bagNum, 1); itemLink = GetInventoryItemLink("player", bagNum_ID); icon = GetInventoryItemTexture("player", bagNum_ID); if ( icon ) then currPlayer["Bag"..bagNum] = { ["link"] = itemLink, ["icon"] = icon, ["size"] = bagNum_Slots }; else currPlayer["Bag"..bagNum] = nil; getglobal("BankItems_ContainerFrame"..(bagNum - 4)):Hide(); break; end itemLink = nil; for bagItem = 1, bagNum_Slots do itemLink = GetContainerItemLink(bagNum, bagItem); icon, quantity = GetContainerItemInfo(bagNum, bagItem); if ( itemLink ) then currPlayer["Bag"..bagNum][bagItem] = { ["link"] = itemLink, ["icon"] = icon, ["count"] = quantity }; else currPlayer["Bag"..bagNum][bagItem] = nil; end end end end BankItems_SaveMoney(); if ( BankItems_Frame:IsVisible() ) then BankItems_PopulateFrame(); end currPlayer = nil; end function BankItems_ListAll() local sellValue; if ( bankPlayer ) then for num = 1, 24 do if ( bankPlayer[num] and bankPlayer[num].link ) then if ( sellValues ) then sellValue = BankItem_ParseMoney(SellValues[BankItems_ParseLink(bankPlayer[num].link)]); elseif ( ItemLinks ) then sellValue = BankItem_ParseMoney(ItemLinks[BankItems_ParseLink(bankPlayer[num].link)].p); end if ( sellValue ) then BankItems_Chat("Item "..num..": "..bankPlayer[num].link.." x"..bankPlayer[num].count.." (Sells for "..sellValue.." each)"); else BankItems_Chat("Item "..num..": "..bankPlayer[num].link.." x"..bankPlayer[num].count); end end end for bagNum = 5, 10 do if ( bankPlayer["Bag"..bagNum] and bankPlayer["Bag"..bagNum].size > 0 ) then for bagItem = 1, bankPlayer["Bag"..bagNum].size do if ( bankPlayer["Bag"..bagNum][bagItem] and bankPlayer["Bag"..bagNum][bagItem].link ) then if ( sellValues ) then sellValue = BankItem_ParseMoney(SellValues[BankItems_ParseLink(bankPlayer["Bag"..bagNum][bagItem].link)]); elseif ( ItemLinks ) then sellValue = BankItem_ParseMoney(ItemLinks[BankItems_ParseLink(bankPlayer["Bag"..bagNum][bagItem].link)].p); end if ( sellValue ) then BankItems_Chat("Bag "..(bagNum - 4).." Item "..bagItem..": "..bankPlayer["Bag"..bagNum][bagItem].link.." x"..bankPlayer["Bag"..bagNum][bagItem].count.." (Sells for "..sellValue.." each)"); else BankItems_Chat("Bag "..(bagNum - 4).." Item "..bagItem..": "..bankPlayer["Bag"..bagNum][bagItem].link.." x"..bankPlayer["Bag"..bagNum][bagItem].count); end end end end end end end function BankItems_PopulateFrame() local texture,button; if ( bankPlayer ) then for num = 1, 24 do button = getglobal("BankItems_Item"..num); texture = getglobal("BankItems_Item"..num.."IconTexture"); if ( bankPlayer[num] ) then texture:SetTexture(bankPlayer[num].icon); SetItemButtonCount(button,bankPlayer[num].count); else texture:SetTexture(""); SetItemButtonCount(getglobal("BankItems_Item"..num),nil); end end for bagNum = 5, 10 do button = getglobal("BankItems_Bag"..(bagNum - 4)); texture = getglobal(button:GetName().."IconTexture"); if ( bankPlayer["Bag"..bagNum] and bankPlayer["Bag"..bagNum].icon ) then texture:SetTexture(bankPlayer["Bag"..bagNum].icon); SetItemButtonTextureVertexColor(button, 1.0,1.0,1.0); else texture:SetTexture("Interface\\PaperDoll\\UI-PaperDoll-Slot-Bag"); SetItemButtonTextureVertexColor(button, 1.0,0.1,0.1); end button:Show(); end if ( bankPlayer.money ) then MoneyFrame_Update("BankItems_MoneyFrame", bankPlayer.money); BankItems_MoneyFrame:Show(); else BankItems_MoneyFrame:Hide(); end end BankItems_UpdateTotalMoney(); end function BankItems_Button_OnEnter() if ( not bankPlayer[this:GetID()] ) then return; end local myLink = bankPlayer[this:GetID()].link; if ( myLink and strlen(myLink) > 0 ) then GameTooltip:SetOwner(this,"ANCHOR_RIGHT"); _,_,myLink = strfind(myLink,"|H(item:%d+:%d+:%d+:%d+)|"); GameTooltip:SetHyperlink(myLink); end end function BankItems_BagItem_OnEnter() local bagID = "Bag"..this:GetParent():GetID(); if ( not bankPlayer[bagID].link ) then return; end local itemID = bankPlayer[bagID].size - ( this:GetID() - 1 ); if ( bankPlayer[bagID][itemID] ) then local myLink = bankPlayer[bagID][itemID].link; if ( myLink and strlen(myLink) > 0 ) then GameTooltip:SetOwner(this,"ANCHOR_RIGHT"); _,_,myLink = strfind(myLink,"|H(item:%d+:%d+:%d+:%d+)|"); GameTooltip:SetHyperlink(myLink); end end end function BankItems_Button_OnClick(arg1) if ( bankPlayer[this:GetID()] ) then if ( IsControlKeyDown() ) then DressUpItemLink(bankPlayer[this:GetID()].link); elseif ( arg1 == "LeftButton" and ChatFrameEditBox:IsVisible() ) then ChatFrameEditBox:Insert(bankPlayer[this:GetID()].link); end end end function BankItems_BagItem_OnClick(arg1) local bagID = "Bag"..this:GetParent():GetID(); local itemID = bankPlayer[bagID].size - ( this:GetID() - 1 ); if ( bankPlayer[bagID][itemID] ) then if ( IsControlKeyDown() ) then DressUpItemLink(bankPlayer[bagID][itemID].link); elseif ( arg1 == "LeftButton" and ChatFrameEditBox:IsVisible() ) then ChatFrameEditBox:Insert(bankPlayer[bagID][itemID].link); end end end function BankItems_Bag_OnEnter() if ( bankPlayer["Bag"..this:GetID()] and bankPlayer["Bag"..this:GetID()].link ) then local myLink = bankPlayer["Bag"..this:GetID()].link; if ( myLink and strlen(myLink) > 0 ) then GameTooltip:SetOwner(this,"ANCHOR_RIGHT"); _,_,myLink = strfind(myLink,"|H(item:%d+:%d+:%d+:%d+)|"); GameTooltip:SetHyperlink(myLink); end end end function BankItems_Bag_OnClick(bagID) if ( not bankPlayer["Bag"..bagID] or not bankPlayer["Bag"..bagID].link ) then return; end if ( bankPlayer["Bag"..bagID].size == 0 ) then if ( GetContainerNumSlots(bagID) > 0 and BankFrame:IsVisible() ) then BankItems_SaveItems(); else BankItems_Chat("Bank bag is empty, and not initialized."); return; end end local theBag = bankPlayer["Bag"..bagID]; local bagFrame = getglobal("BankItems_ContainerFrame"..(bagID - 4)); local bagName = bagFrame:GetName(); if ( bagFrame:IsVisible() ) then bagFrame:Hide(); return; end getglobal(bagName.."Name"):SetText(BankItems_ParseLink(theBag.link)); getglobal(bagName.."Portrait"):SetTexture(theBag.icon); -- Generate the frame local frameSettings = CONTAINER_FRAME_TABLE[theBag.size]; local frameBG = getglobal(bagName.."BackgroundTexture"); local columns = NUM_CONTAINER_COLUMNS; local rows = ceil(theBag.size / columns); local button,item,idx; bagFrame:SetWidth(CONTAINER_WIDTH); bagFrame:SetHeight(frameSettings[4]); frameBG:SetTexture(frameSettings[1]); frameBG:SetWidth(frameSettings[2]); frameBG:SetHeight(frameSettings[3]); for bagItem = 1, theBag.size do idx = theBag.size - (bagItem - 1); item = theBag[idx]; button = getglobal(bagName.."Item"..bagItem); if ( bagItem == 1 ) then button:SetPoint("BOTTOMRIGHT", bagName, "BOTTOMRIGHT", -11, 9); else if ( mod((bagItem-1), columns) == 0 ) then button:SetPoint("BOTTOMRIGHT", bagName.."Item"..(bagItem - columns), "TOPRIGHT", 0, 4); else button:SetPoint("BOTTOMRIGHT", bagName.."Item"..(bagItem - 1), "BOTTOMLEFT", -5, 0); end end button:Show(); end for bagItem = theBag.size + 1, 20 do getglobal(bagName.."Item"..bagItem):Hide(); end BankItems_PopulateBag(bagID); bagFrame:Show(); PlaySound("igBackPackOpen"); end function BankItems_PopulateBag(bagID) local item,theBag,idx; if ( bankPlayer["Bag"..bagID].size ) then theBag = bankPlayer["Bag"..bagID]; for bagItem = 1, theBag.size do idx = theBag.size - (bagItem - 1); item = theBag[idx]; button = getglobal("BankItems_ContainerFrame"..(bagID - 4).."Item"..bagItem); if ( item ) then SetItemButtonTexture(button, item.icon); SetItemButtonCount(button, item.count); else SetItemButtonTexture(button,""); SetItemButtonCount(button, nil); end end end end function BankItems_Bag_OnShow() getglobal("BankItems_Bag"..(this:GetID() - 4).."HighlightFrameTexture"):Show(); end function BankItems_Bag_OnHide() getglobal("BankItems_Bag"..(this:GetID() - 4).."HighlightFrameTexture"):Hide(); end function BankItems_ParseLink(link) if (string.find(link, "[", 1, true)) then local _,_,name = string.find(link, "^.*%[(.*)%].*$"); return name; else return link; end end function BankItems_Chat(msg) if( DEFAULT_CHAT_FRAME ) then DEFAULT_CHAT_FRAME:AddMessage(" "..msg, 1.0, 1.0, 0.0); end end function BankItem_ParseMoney(money) local disp = ""; if ( money ) then local g,s,c; g = math.floor(money / 10000); money = math.mod(money,10000); s = math.floor(money / 100); money = math.mod(money,100); c = math.mod(money, 100); if ( g and g > 0 ) then disp = g.."g "; end if ( s and s > 0 ) then disp = disp..s.."s "; end if ( c and c > 0) then disp = disp..c.."c"; end if ( strlen(disp) > 0 ) then return disp; else return nil; end else return nil; end end function BankItems_UserDropdown_GetValue() if ( bankPlayerName ) then return bankPlayerName; else return (UnitName("player").."|"..BankItems_Trim(GetCVar("realmName"))); end end function BankItems_UserDropdown_OnLoad() UIDropDownMenu_Initialize(this, BankItems_UserDropdown_Initialize); UIDropDownMenu_SetSelectedValue(this, BankItems_UserDropdown_GetValue()); BankItems_UserDropdown.tooltip = "You are viewing this player's bank contents."; UIDropDownMenu_SetWidth(140, BankItems_UserDropdown); OptionsFrame_EnableDropDown(BankItems_UserDropdown); end function BankItems_UserDropdown_OnClick() if ( not bankPlayer ) then return; end UIDropDownMenu_SetSelectedValue(BankItems_UserDropdown, this.value); if ( this.value ) then bankPlayer = BankItems_GetPlayer(this.value); end BankItems_Frame_OnHide(); BankItems_PopulateFrame(); if ( allBags == 1 ) then for num = 1, 6 do getglobal("BankItems_ContainerFrame"..num):Hide(); BankItems_Bag_OnClick(num + 4); end end end function BankItems_UserDropdown_Initialize() local selectedValue = UIDropDownMenu_GetSelectedValue(BankItems_UserDropdown); local info; if ( allRealms == 1 ) then for key, value in BankItems_Save do if ( table.getn(BankItems_Save[key]) > 0 or BankItems_Save[key].money ) then info = {}; info.text = BankItems_Split(key,"|")[1].." of "..BankItems_Split(key,"|")[2]; info.value = key; info.func = BankItems_UserDropdown_OnClick; if ( selectedValue == info.value ) then info.checked = 1; else info.checked = nil; end UIDropDownMenu_AddButton(info); end end else for key, value in BankItems_Save do local thisRealmPlayers = BankItems_Split(key, "|")[2]; if ( thisRealmPlayers == BankItems_Trim(GetCVar("realmName")) and (table.getn(BankItems_Save[key]) > 0 or BankItems_Save[key].money) ) then info = {}; info.text = BankItems_Split(key,"|")[1].." of "..BankItems_Split(key,"|")[2]; info.value = key; info.func = BankItems_UserDropdown_OnClick; if ( selectedValue == info.value ) then info.checked = 1; else info.checked = nil; end UIDropDownMenu_AddButton(info); end end end end function BankItems_Split(toCut, separator) local splitted = {}; local i = 0; local regEx = "([^" .. separator .. "]*)" .. separator .. "?"; for item in string.gfind(toCut .. separator, regEx) do i = i + 1; splitted[i] = BankItems_Trim(item) or ''; end if ( splitted[i] == '' ) then splitted[i] = nil; end return splitted; end function BankItems_Trim (s) return (string.gsub(s, "^%s*(.-)%s*$", "%1")); end function BankItems_ShowAllRealms_CheckOnClick() if ( BankItems_Frame:IsVisible() ) then BankItems_Frame:Hide(); end BankItems_SlashHandler("allrealms"); end function BankItems_ShowAllRealms_CheckOnLoad() if ( allRealms == 1 ) then this.checked = 1; else this.checked = nil; end OptionsFrame_EnableCheckBox(this); this:SetChecked(this.checked); getglobal(this:GetName().."Text"):SetText("Show All Realms"); this.tooltipText = "Check to show all saved characters, regardless of realm."; end