50 Commits

Author SHA1 Message Date
587a7e0d56 CS fixes 2016-09-23 00:36:46 +02:00
0cb3708671 - Clear some leaked globals
- CS fixes
2016-09-22 17:39:49 +02:00
35023a61c1 CS fixes 2016-09-21 00:06:41 +02:00
a4f08a0b44 - Fix some leaked globals
- CS fixes
2016-09-08 17:13:24 +02:00
771bfaf5eb Remove some more locals 2016-09-06 18:16:40 +02:00
48eba18c2b Remove some locals 2016-09-06 18:11:09 +02:00
089d270ade Remove some locals 2016-09-06 18:07:51 +02:00
83abacd2f9 Remove some locals 2016-09-06 18:04:57 +02:00
895f0ccd4c Variables in for statements are always locals 2016-09-06 18:01:28 +02:00
4d657ecee1 - CS fixes
- Local variable fixes
2016-09-06 17:51:08 +02:00
6352b997d1 Fix some more locals 2016-09-06 17:35:07 +02:00
23ff6cf7f3 Fixed some locals 2016-09-06 17:25:16 +02:00
17486c3251 Fix some locals 2016-09-06 17:13:14 +02:00
f6706c380b Fix uninitialized 'quality' variable 2016-09-06 17:01:50 +02:00
f4ac2a0139 Fix lua errors 2016-09-06 16:51:03 +02:00
b49f508c47 Use MyBagsCore-1.1 2016-09-06 16:39:14 +02:00
3a62dd9b99 Use MyBagsCore-1.1 2016-09-06 16:38:30 +02:00
6e353d9ebd Use MyBagsCore-1.1 2016-09-06 16:37:41 +02:00
733b7cc325 Remove MyBagsCache compatibility 2016-09-06 16:34:30 +02:00
f42d4c2a34 Remove MyBagsCache compatibility 2016-09-06 16:33:09 +02:00
7c694ba727 Remove MyBagsCache compatibility 2016-09-06 16:30:52 +02:00
77c25484f1 Remove MyBagsCache compatibility code 2016-09-06 16:28:58 +02:00
f75aa0bd11 Remove MyBagsCache reference 2016-09-06 16:26:57 +02:00
284bf213dd Remove MyBagsCache references 2016-09-06 16:24:25 +02:00
252e10de9a Delete Locals.xml 2016-09-06 16:16:41 +02:00
800a9b450b Delete enUS.lua 2016-09-06 16:16:11 +02:00
e086ca746b Delete Embeds.xml 2016-09-06 16:14:50 +02:00
e140c68663 Delete MyBagsCache.lua 2016-09-06 16:14:21 +02:00
1f35539578 Delete MyBagsCache.toc 2016-09-06 16:13:59 +02:00
5e6b8eebf8 Delete MyBagsCache.xml 2016-09-06 16:12:43 +02:00
570abca36f Bump interface version 2016-07-19 22:37:00 +02:00
7e13a47e52 7.0.3 compatibility fixes 2016-07-19 22:36:49 +02:00
152d61d84f Core lib version update to trigger packager 2015-08-28 12:36:48 +02:00
d21ff3c73a Core lib version update 2015-08-28 12:23:56 +02:00
59d3e610c3 TOC update 2015-08-28 12:23:37 +02:00
b5dc2961b0 Remove unused localization files 2015-01-06 22:25:23 +01:00
238145bef1 Use the localization from the core library 2015-01-06 22:24:49 +01:00
6e5fa165f2 Use the localization from the core library 2015-01-06 22:24:30 +01:00
c0db29ffe8 Use the localization from the core library 2015-01-06 22:24:08 +01:00
5fc53d2191 Use localized title string 2015-01-06 22:23:08 +01:00
b03e7b4df2 Add some new locale string 2015-01-06 22:22:33 +01:00
31f513db74 Move bindings to Addons category 2015-01-06 22:20:51 +01:00
25765b5f3c - Change event registration methods
- Add MyBank sorting
- Fix some tainting issue
2015-01-06 19:41:22 +01:00
3e06a3a7ad Change toc number 2015-01-05 15:55:37 +01:00
1dffea8341 Added bag sort capability to the inventory frame 2015-01-05 15:39:07 +01:00
237217ede4 Add some debug variable 2014-10-22 17:19:01 +02:00
9c84784542 line endings again 2014-10-21 18:12:30 +02:00
5775870bcd line endings 2014-10-21 18:11:43 +02:00
00683de69b TOC update 2014-10-21 18:10:14 +02:00
2b8a6af9e2 Core fixes for 6.0.2 2014-10-21 18:07:13 +02:00
24 changed files with 3694 additions and 4166 deletions

View File

@ -33,24 +33,3 @@ externals:
Libs/AceGUI-3.0: Libs/AceGUI-3.0:
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceGUI-3.0 url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceGUI-3.0
tag: latest tag: latest
MyBagsCache/Libs/LibStub:
url: svn://svn.wowace.com/wow/libstub/mainline/trunk
tag: latest
MyBagsCache/Libs/CallbackHandler-1.0:
url: svn://svn.wowace.com/wow/callbackhandler/mainline/trunk/CallbackHandler-1.0
tag: latest
MyBagsCache/Libs/AceAddon-3.0:
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceAddon-3.0
tag: latest
MyBagsCache/Libs/AceEvent-3.0:
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceEvent-3.0
tag: latest
MyBagsCache/Libs/AceDB-3.0:
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceDB-3.0
tag: latest
MyBagsCache/Libs/AceLocale-3.0:
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceLocale-3.0
tag: latest
move-folders:
MyBags/MyBagsCache: MyBagsCache

View File

@ -1,11 +1,11 @@
<Bindings> <Bindings>
<Binding name="MYINVENTORY" header="MYBAGSHEADER"> <Binding name="MYINVENTORY" header="MYBAGSHEADER" category="ADDONS">
if MyInventory then MyInventory:Toggle() end if MyInventory then MyInventory:Toggle() end
</Binding> </Binding>
<Binding name="MYBANK"> <Binding name="MYBANK" header="MYBAGSHEADER" category="ADDONS">
if MyBank then MyBank:Toggle() end if MyBank then MyBank:Toggle() end
</Binding> </Binding>
<Binding name="MYEQUIPMENT"> <Binding name="MYEQUIPMENT" header="MYBAGSHEADER" category="ADDONS">
if MyEquipment then MyEquipment:Toggle() end if MyEquipment then MyEquipment:Toggle() end
</Binding> </Binding>
</Bindings> </Bindings>

View File

@ -1,6 +1,8 @@
local L = LibStub("AceLocale-3.0"):NewLocale("MyBags", "enUS", true) local L = LibStub("AceLocale-3.0"):NewLocale("MyBags", "enUS", true)
if not L then return end if not L then
return
end
-- Global locales -- Global locales
L["ACE_TEXT_OF"] = "of"; L["ACE_TEXT_OF"] = "of";
@ -13,6 +15,7 @@ L["BINDING_NAME_MYINVENTORY"] = "Toggle MyInventory"
L["BINDING_NAME_MYBANK"] = "Toggle MyBank" L["BINDING_NAME_MYBANK"] = "Toggle MyBank"
L["BINDING_NAME_MYEQUIPMENT"] = "Toggle MyEquipment" L["BINDING_NAME_MYEQUIPMENT"] = "Toggle MyEquipment"
-- Bag types
L["ACEG_TEXT_AMMO"] = "Ammo"; L["ACEG_TEXT_AMMO"] = "Ammo";
L["ACEG_TEXT_QUIVER"] = "Quiver"; L["ACEG_TEXT_QUIVER"] = "Quiver";
L["ACEG_TEXT_SOUL"] = "Soul Bag"; L["ACEG_TEXT_SOUL"] = "Soul Bag";
@ -21,6 +24,7 @@ L["ACEG_TEXT_ENGINEER"] = "Engineering Bag";
L["ACEG_TEXT_GEM"] = "Gem Bag"; L["ACEG_TEXT_GEM"] = "Gem Bag";
L["ACEG_TEXT_HERB"] = "Herb Bag"; L["ACEG_TEXT_HERB"] = "Herb Bag";
L["ACEG_TEXT_MINING"] = "Mining Bag"; L["ACEG_TEXT_MINING"] = "Mining Bag";
L["ACEG_TEXT_NOW_SET_TO"] = "is now set to"; L["ACEG_TEXT_NOW_SET_TO"] = "is now set to";
L["ACEG_TEXT_DEFAULT"] = "default"; L["ACEG_TEXT_DEFAULT"] = "default";
L["ACEG_DISPLAY_OPTION"] = "[|cfff5f530%s|r]"; L["ACEG_DISPLAY_OPTION"] = "[|cfff5f530%s|r]";
@ -32,6 +36,12 @@ L["MYBAGS_TITLE0"] = ""
L["MYBAGS_TITLE1"] = "%s's " L["MYBAGS_TITLE1"] = "%s's "
L["MYBAGS_TITLE2"] = "%s of %s's " L["MYBAGS_TITLE2"] = "%s of %s's "
-- MYBANK_NAME = "MyBank"
-- MYBANK_DESCRIPTION = "All in one bank mod"
L["MYBANKFRAME_TITLE"] = "Bank"
L["MYINVENTORYFRAME_TITLE"] = "Inventory"
L["MYEQUIPMENTFRAME_TITLE"] = "Equipment"
L["MYBAGS_SLOTS_FREE"] = "%d/%d Slots Free"; L["MYBAGS_SLOTS_FREE"] = "%d/%d Slots Free";
L["MYBAGS_SLOTS_USED"] = "%d/%d Slots Used"; L["MYBAGS_SLOTS_USED"] = "%d/%d Slots Used";

View File

@ -1,8 +1,8 @@
## Interface: 50400 ## Interface: 70000
## Author: Ramble (modified by Isharra) (updated by thegabbert) (converted to Ace3 by Takika) ## Author: Ramble (modified by Isharra) (updated by thegabbert) (converted to Ace3 by Takika)
## Title: MyBags |cff007FFF -Ace3-|r ## Title: MyBags |cff007FFF -Ace3-|r
## Notes: Complete Replacement for Inventory and Bank Bags. ## Notes: Complete Replacement for Inventory and Bank Bags.
## OptionalDeps: MyBagsCache, DataStore, DataStore_Containers, DataStore_Characters ## OptionalDeps: DataStore, DataStore_Containers, DataStore_Characters
## SavedVariables: MyInventoryDB, MyBankDB, MyEquipmentDB ## SavedVariables: MyInventoryDB, MyBankDB, MyEquipmentDB
Embeds.xml Embeds.xml

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.blizzard.com/wow/ui/" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\FrameXML\UI.xsd">
<Script file="Libs\LibStub\LibStub.lua"/>
<Include file="Libs\CallbackHandler-1.0\CallbackHandler-1.0.xml"/>
<!--Ace3 Libraries-->
<Include file="Libs\AceAddon-3.0\AceAddon-3.0.xml"/>
<Include file="Libs\AceEvent-3.0\AceEvent-3.0.xml"/>
<Include file="Libs\AceDB-3.0\AceDB-3.0.xml"/>
<Include file="Libs\AceLocale-3.0\AceLocale-3.0.xml"/>
</Ui>

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.blizzard.com/wow/ui/" xsi:schemaLocation="http://www.blizzard.com/wow/ui/FrameXML\UI.xsd">
<Include file="enUS.lua"/>
</Ui>

View File

@ -1,11 +0,0 @@
local L = LibStub("AceLocale-3.0"):NewLocale("MyBagsCache", "enUS", true, true)
if not L then
print("AceLocale not loaded")
return
end
L["ACE_TEXT_OF"] = "of";
L["CHARACTER_DELIMITOR"] = " of ";
L["SplitString must be passed a string as the first argument"] = "SplitString must be passed a string as the first argument";

View File

@ -1,452 +0,0 @@
MyBagsCache = LibStub("AceAddon-3.0"):NewAddon("MyBagsCache", "AceEvent-3.0");
local L = LibStub("AceLocale-3.0"):GetLocale("MyBagsCache")
local select, tinsert, type = select, table.insert, type
local strfind, strsub, strtrim = string.find, string.sub, strtrim
local error, unpack = error, unpack
local tonumber, pairs = tonumber, pairs
local function GetItemInfoFromLink(l)
if (not l) then
return
end
local c, t, id, il, n = select(3, strfind(l, "|cff(%x+)|H(%l+):(%-?%d+)([^|]+)|h%[(.-)%]|h|r"))
-- return n, c, id .. il, id, t
return n, c, id .. il, id
end
local function SplitString(s, p, n)
if (type(s) ~= "string") then
error(L["SplitString must be passed a string as the first argument"], 2)
end
local l, sp, ep = {}, 0
while (sp) do
sp, ep = strfind(s, p)
if (sp) then
tinsert(l, strsub(s, 1, sp - 1))
s = strsub(s, ep + 1)
else
tinsert(l, s)
break
end
if (n) then
n = n - 1
end
if (n and (n == 0)) then
tinsert(l, s)
break
end
end
return unpack(l)
end
local function SortChars(a, b, a_time, b_time, t)
local a_player, a_realm = SplitString(a, L["CHARACTER_DELIMITOR"])
local b_player, b_realm = SplitString(b, L["CHARACTER_DELIMITOR"])
if (t == "realm") then
if (a_realm == b_realm) then
return (a_player > b_player)
else
return (a_realm > b_realm)
end
elseif (t == "char") then
if (a_player == b_player) then
return (a_realm > b_realm)
else
return (a_player > b_player)
end
elseif (t == "update") then
return a_time < b_time
end
end
function MyBagsCache:OnInitialize()
self.db = LibStub("AceDB-3.0"):New("MyBagsCacheDB");
local charName = strtrim(UnitName("player"));
local realmName = strtrim(GetRealmName());
-- self.atBank = false
self.Player = charName .. L["CHARACTER_DELIMITOR"] .. realmName
if not self.db.global[self.Player] then
self.db.global[self.Player]={}
end
end
function MyBagsCache:OnEnable()
self:RegisterEvent("PLAYER_MONEY")
self:RegisterEvent("PLAYERBANKSLOTS_CHANGED")
self:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED")
self:RegisterEvent("BANKFRAME_OPENED")
self:RegisterEvent("BANKFRAME_CLOSED")
self:RegisterEvent("UNIT_INVENTORY_CHANGED")
self:RegisterEvent("BAG_UPDATE")
self:RegisterEvent("BANKFRAME_OPENED")
self:RegisterEvent("BANKFRAME_CLOSED")
self:RegisterEvent("VOID_STORAGE_CONTENTS_UPDATE")
self:RegisterEvent("VOID_TRANSFER_DONE")
-- self:RegisterEvent("INVENTORY_SEARCH_UPDATE")
self:RegisterEvent("VOID_STORAGE_OPEN")
self:RegisterEvent("VOID_STORAGE_CLOSE")
if not self.db.global[self.Player][0] then
self:SaveItems()
end
end
function MyBagsCache:VOID_STORAGE_CONTENTS_UPDATE()
-- Move item in Void OR
-- Move item from Void to Withdraw
if (CanUseVoidStorage()) then
self.atVoid = true
self:SaveItems()
self:SaveUpdateTime()
end
end
function MyBagsCache:VOID_TRANSFER_DONE()
-- Move items between bags and void
if (CanUseVoidStorage()) then
self.atVoid = true
self:SaveItems()
self:SaveUpdateTime()
end
end
--[[
function MyBagsCache:INVENTORY_SEARCH_UPDATE()
-- Search box change
end
]]
function MyBagsCache:VOID_STORAGE_OPEN()
-- Open Void
if (CanUseVoidStorage()) then
self.atVoid = true
self:SaveItems()
self:SaveUpdateTime()
end
end
function MyBagsCache:VOID_STORAGE_CLOSE()
-- Close Void
self.atVoid = false
end
function MyBagsCache:PLAYER_MONEY()
self.db.global[self.Player].cash = GetMoney();
self:SaveUpdateTime()
end
function MyBagsCache:PLAYERBANKBAGSLOTS_CHANGED()
local numSlots, full = GetNumBankSlots()
local cost = GetBankSlotCost(numSlots)
if not self.db.global[self.Player].BankSlots then
self.db.global[self.Player].BankSlots = {}
end
self.db.global[self.Player].BankSlots = {
["Number"] = numSlots,
["Cost"] = cost,
["Full"] = full
}
self:SaveUpdateTime()
end
function MyBagsCache:PLAYERBANKSLOTS_CHANGED()
local itemIndex
for itemIndex = 1, 28 do
self:SaveItemInfo(BANK_CONTAINER, itemIndex)
end
self:SaveUpdateTime()
end
function MyBagsCache:BAG_UPDATE(event, bagIndex)
if not self.atBank and bagIndex > 4 and bagIndex <= 11 then
return
end
local slots = self:SaveBagInfo(bagIndex)
local itemIndex
for itemIndex = 1, slots do
self:SaveItemInfo(bagIndex, itemIndex)
end
self:SaveUpdateTime()
end
function MyBagsCache:UNIT_INVENTORY_CHANGED(event, unit)
if (unit == "player") then
self:SaveEquipment()
self:SaveUpdateTime()
end
end
function MyBagsCache:BANKFRAME_OPENED()
self.atBank = true
self:SaveItems()
self:SaveUpdateTime()
end
function MyBagsCache:BANKFRAME_CLOSED()
self.atBank = false
end
function MyBagsCache:SaveUpdateTime()
self.db.global[self.Player].updateTime = GetTime()
end
function MyBagsCache:SaveItems()
self:SaveVoid()
self:SaveInventory()
self:SaveBank()
self:SaveEquipment()
self:PLAYER_MONEY()
end
function MyBagsCache:SaveVoid()
if not self.atVoid then return end
if not self.db.global[self.Player]["Void"] then
self.db.global[self.Player]["Void"] = {}
end
local itemIndex
local VOID_STORAGE_SIZE = 80
for itemIndex = 1, VOID_STORAGE_SIZE do
local itemID, texture = GetVoidItemInfo(itemIndex);
if (itemID) then
local myName, myLink = GetItemInfo(itemID)
local myColor = select(2, GetItemInfoFromLink(myLink))
self.db.global[self.Player]["Void"][itemIndex] = {
["Name"] = myName,
["Color"] = myColor,
["Link"] = myLink,
["Count"] = 1,
["Texture"] = texture,
}
else
self.db.global[self.Player]["Void"][itemIndex] = nil
end
end
end
function MyBagsCache:SaveInventory()
local bagIndex
for bagIndex = 0, 4 do
local slots = self:SaveBagInfo(bagIndex)
local itemIndex
for itemIndex = 1, slots do
self:SaveItemInfo(bagIndex, itemIndex)
end
end
end
function MyBagsCache:SaveBank()
if not self.atBank then return end
if not self.db.global[self.Player][BANK_CONTAINER] then
self.db.global[self.Player][BANK_CONTAINER] = {}
end
if not self.db.global[self.Player][BANK_CONTAINER][0] then
self.db.global[self.Player][BANK_CONTAINER][0] = {}
end
self.db.global[self.Player][BANK_CONTAINER][0] = {
["Count"] = 28
}
local itemIndex, bagIndex
for itemIndex = 1, 28 do
self:SaveItemInfo(BANK_CONTAINER, itemIndex)
end
for bagIndex = 5, 11 do
local slots = self:SaveBagInfo(bagIndex)
for itemIndex = 1, slots do
self:SaveItemInfo(bagIndex, itemIndex)
end
end
end
function MyBagsCache:SaveEquipment()
if not self.db.global[self.Player].equipment then
self.db.global[self.Player].equipment = {}
end
local itemIndex
for itemIndex = 0, 19 do
self:SaveEquipmentInfo(itemIndex)
end
local hasRelic = UnitHasRelicSlot("player")
self.db.global[self.Player].equipment.hasRelic = hasRelic
end
function MyBagsCache:SaveBagInfo(bagIndex)
local invID -- get Inventory ID
if bagIndex >= 1 and bagIndex <=4 then
invID = ContainerIDToInventoryID(bagIndex)
elseif bagIndex >= 5 and bagIndex <= 11 then
invID = BankButtonIDToInvSlotID(bagIndex, 1)
else
invID = nil;
end
if bagIndex == 0 then -- Set Count to 16
if not self.db.global[self.Player][bagIndex] then
self.db.global[self.Player][bagIndex]= {}
end
self.db.global[self.Player][bagIndex][0] = {
["Count"] = 16,
["Texture"] = "Interface\\Buttons\\Button-Backpack-Up"
}
return 16
end
local bagSize = GetContainerNumSlots(bagIndex)
local itemLink = GetInventoryItemLink("player", invID)
if itemLink then
local name, myColor, myLink = GetItemInfoFromLink(itemLink)
local soulbound, madeBy = nil
local texture = GetInventoryItemTexture("player", invID)
if not self.db.global[self.Player][bagIndex] then
self.db.global[self.Player][bagIndex] = {}
end
self.db.global[self.Player][bagIndex][0] = {
["Name"] = name,
["Color"] = myColor,
["Link"] = myLink,
["Count"] = bagSize,
["Texture"] = texture,
["Soulbound"] = soulbound,
["MadeBy"] = madeBy
}
end
if bagSize > 0 then
return bagSize
else
self.db.global[self.Player][bagIndex] = nil
return 0
end
end
function MyBagsCache:SaveEquipmentInfo(itemIndex)
local itemLink = GetInventoryItemLink("player", itemIndex)
if itemLink or itemIndex == 0 then
-- local myColor, myLink, myName, soulbound, madeBy = nil
local texture = GetInventoryItemTexture("player", itemIndex)
local count = GetInventoryItemCount("player", itemIndex)
local myName, myColor, myLink = GetItemInfoFromLink(itemLink)
if not self.db.global[self.Player].equipment[itemIndex] then
self.db.global[self.Player].equipment[itemIndex] = {}
end
self.db.global[self.Player].equipment[itemIndex] = {
["Name"] = myName,
["Color"] = myColor,
["Link"] = myLink,
["Count"] = count,
["Texture"] = texture,
["Soulbound"] = nil,
["MadeBy"] = nil,
}
else
self.db.global[self.Player].equipment[itemIndex] = nil
end
end
function MyBagsCache:SaveItemInfo(bagIndex, itemIndex)
local itemLink = GetContainerItemLink(bagIndex, itemIndex)
if itemLink then
local myName, myColor, myLink = GetItemInfoFromLink(itemLink)
local texture, itemCount = GetContainerItemInfo(bagIndex, itemIndex)
self.db.global[self.Player][bagIndex][itemIndex] = {
["Name"] = myName,
["Color"] = myColor,
["Link"] = myLink,
["Count"] = itemCount,
["Texture"] = texture,
["Soulbound"] = nil,
["MadeBy"] = nil,
}
else
self.db.global[self.Player][bagIndex][itemIndex] = nil
end
end
function MyBagsCache:GetInfo(bagIndex, slotIndex, charID)
slotIndex = tonumber(slotIndex or 0)
if not self.db.global[charID] or not self.db.global[charID][bagIndex] or not self.db.global[charID][bagIndex][slotIndex] then
return nil, 0, nil, nil, nil
else
local data = self.db.global[charID][bagIndex][slotIndex]
return data.Texture, data.Count, data.Link, data.Color, data.Name
end
end
function MyBagsCache:GetRelic(charID)
if not self.db.global[charID] or not self.db.global[charID].equipment or not self.db.global[charID].equipment.hasRelic then
return nil
else
return self.db.global[charID].equipment.hasRelic
end
end
function MyBagsCache:GetCash(charID)
if not self.db.global[charID] or not self.db.global[charID].cash then
return nil
else
return self.db.global[charID].cash
end
end
function MyBagsCache:GetCharList(realm)
local result = {}
local cache = self.db.global
local index, value
for index, value in pairs(cache) do
if index ~= "profiles" then
local charName, realmID = SplitString(index, L["CHARACTER_DELIMITOR"])
if (not realm or realmID == realm) then
result[index] = {
name = charName,
realm = realmID,
}
end
end
end
return result
end
function MyBagsCache:GetSortedCharList(sorttype, realm)
local result = {}
local idx = 0
local cache = self.db.global
local index, value
for index, value in pairs(cache) do
if index ~= "profiles" then
local realmID = select(2, SplitString(index, L["CHARACTER_DELIMITOR"]))
if (not realm or realmID == realm) then
idx = idx + 1
result[idx] = index
end
end
end
local swapped
local x_time, y_time
local q, w, i
repeat
swapped = 0
for i = 1, idx-1 do
q = result[i]
w = result[i+1]
if (not self.db.global[q].updateTime) then
x_time = 0
else
x_time = self.db.global[q].updateTime
end
if (not self.db.global[w].updateTime) then
y_time = 0
else
y_time = self.db.global[w].updateTime
end
if SortChars(q, w, x_time, y_time, sorttype) then
result[i] = w
result[i+1] = q
swapped = 1
end
end
until swapped == 0
return result
end

View File

@ -1,16 +0,0 @@
## Interface: 50400
## Author: Takika
## Title: MyBagsCache3 |cff007FFF -Ace3-|r
## Notes: Item database for Equipment, Inventory and Bank Bags.
## OptionalDeps: Ace3
## SavedVariables: MyBagsCacheDB
## LoadOnDemand: 0
# Libraries
Embeds.xml
#Locales
Locals\Locals.xml
MyBagsCache.xml
MyBagsCache.lua

View File

@ -1,12 +0,0 @@
<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">
<GameTooltip name="MyBagsCacheHiddenTooltip" inherits="GameTooltipTemplate" parent="UIParent" hidden="true">
<Scripts>
<OnLoad>
self:SetOwner(UIParent, "ANCHOR_NONE");
</OnLoad>
</Scripts>
</GameTooltip>
</Ui>

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.blizzard.com/wow/ui/" xsi:schemaLocation="http://www.blizzard.com/wow/ui/FrameXML\UI.xsd">
<Include file="enUS.lua"/>
</Ui>

View File

@ -1,36 +0,0 @@
local L = LibStub("AceLocale-3.0"):NewLocale("MyBagsCore", "enUS", true)
if not L then
return
end
L["ACE_TEXT_OF"] = "of";
L["CHARACTER_DELIMITOR"] = " of ";
L["ACEG_TEXT_AMMO"] = "Ammo";
L["ACEG_TEXT_QUIVER"] = "Quiver";
L["ACEG_TEXT_SOUL"] = "Soul Bag";
L["ACEG_TEXT_ENCHANT"] = "Enchanting Bag";
L["ACEG_TEXT_ENGINEER"] = "Engineering Bag";
L["ACEG_TEXT_GEM"] = "Gem Bag";
L["ACEG_TEXT_HERB"] = "Herb Bag";
L["ACEG_TEXT_MINING"] = "Mining Bag";
L["ACEG_TEXT_NOW_SET_TO"] = "is now set to";
L["ACEG_TEXT_DEFAULT"] = "default";
L["ACEG_DISPLAY_OPTION"] = "[|cfff5f530%s|r]";
L["ACE_CMD_REPORT_NO_VAL"] = "|cffc7c7c7no value|r"
L["ACE_CMD_RESULT"] = "|cffffff78%s:|r %s"
--MyInventory Title
L["MYBAGS_TITLE0"] = ""
L["MYBAGS_TITLE1"] = "%s's "
L["MYBAGS_TITLE2"] = "%s of %s's "
L["MYBAGS_SLOTS_FREE"] = "%d/%d Slots Free";
L["MYBAGS_SLOTS_USED"] = "%d/%d Slots Used";
-- SLASHCOMMANDS
--KEYBINDINGS
L["BINDING_HEADER_MYBAGSHEADER"] = "My Bags"
L["BINDING_NAME_MYINVENTORY"] = "My Inventory Toggle"
L["BINDING_NAME_MYBANK"] = "My Bank Toggle"
L["BINDING_NAME_MYEQUIPMENT"] = "My Equipment Toggle"

View File

@ -1,20 +1,83 @@
local MBC = "MyBagsCore-1.0" local MBC = "MyBagsCore-1.1"
local MBC_MINOR = "2014.02.11.3" local MBC_MINOR = "2016.09.08.1"
if not LibStub then error(MBC .. " requires LibStub.") end
-- Lua APIs
local error, assert, pairs, unpack = error, assert, pairs, unpack
local strfind, strlen, strsub, strlower, strgmatch, strupper = string.find, string.len, string.sub, string.lower, string.gmatch, string.upper
local strtrim, format, floor = strtrim, format, floor
local tinsert, tremove = table.insert, table.remove
local tostring, tonumber, select = tostring, tonumber, select
-- WoW APIs
local _G = _G
local NewItemsIsNewItem = C_NewItems.IsNewItem
local BackpackTokenFrame_IsShown = BackpackTokenFrame_IsShown
local BankButtonIDToInvSlotID = BankButtonIDToInvSlotID
local BattlePetToolTip_Show = BattlePetToolTip_Show
local ChatEdit_InsertLink = ChatEdit_InsertLink
local ContainerIDToInventoryID = ContainerIDToInventoryID
local CooldownFrame_Set = CooldownFrame_Set
local CreateFrame = CreateFrame
local CursorUpdate = CursorUpdate
local DressUpItemLink = DressUpItemLink
local GetBackpackCurrencyInfo = GetBackpackCurrencyInfo
local GetBankSlotCost = GetBankSlotCost
local GetContainerItemCooldown = GetContainerItemCooldown
local GetContainerItemInfo = GetContainerItemInfo
local GetContainerItemLink = GetContainerItemLink
local GetContainerNumSlots = GetContainerNumSlots
local GetInventoryItemTexture = GetInventoryItemTexture
local GetInventorySlotInfo = GetInventorySlotInfo
local GetItemIcon = GetItemIcon
local GetItemInfo = GetItemInfo
local GetItemQualityColor = GetItemQualityColor
local GetMoney = GetMoney
local GetNumBankSlots = GetNumBankSlots
local GetRealmName = GetRealmName
local IsAddOnLoaded = IsAddOnLoaded
local IsBattlePayItem = IsBattlePayItem
local IsControlKeyDown, IsShiftKeyDown = IsControlKeyDown, IsShiftKeyDown
local IsInventoryItemLocked = IsInventoryItemLocked
local IsInventoryItemProfessionBag = IsInventoryItemProfessionBag
local MoneyFrame_Update = MoneyFrame_Update
local PickupBagFromSlot = PickupBagFromSlot
local PlaySound = PlaySound
local PutItemInBackpack = PutItemInBackpack
local PutItemInBag = PutItemInBag
local SetItemButtonCount = SetItemButtonCount
local SetItemButtonDesaturated = SetItemButtonDesaturated
local SetItemButtonNormalTextureVertexColor = SetItemButtonNormalTextureVertexColor
local SetItemButtonTexture = SetItemButtonTexture
local SetItemButtonTextureVertexColor = SetItemButtonTextureVertexColor
local SetMoneyFrameColor = SetMoneyFrameColor
local SetTooltipMoney = SetTooltipMoney
local ShowInspectCursor = ShowInspectCursor
local SortBags = SortBags
local StaticPopup_Show = StaticPopup_Show
local UnitName = UnitName
--Global variables that we don't cache, list them here for the mikk's Find Globals script
-- GLOBALS: StaticPopupDialogs, UIParent, UISpecialFrames, UIDropDownMenu_SetSelectedValue, ContainerFrameItemButton_OnLoad
-- GLOBALS: BankFrameItemButtonGeneric_OnClick, ContainerFrameItemButton_OnClick, ContainerFrameItemButton_OnEnter
if not LibStub then
error(MBC .. " requires LibStub.")
end
local MyBagsCore = LibStub:NewLibrary(MBC, MBC_MINOR) local MyBagsCore = LibStub:NewLibrary(MBC, MBC_MINOR)
if not MyBagsCore then return end if not MyBagsCore then
return
end
MyBagsCore.embeds = MyBagsCore.embeds or {} -- table containing objects MyBagsCore is embedded in. MyBagsCore.embeds = MyBagsCore.embeds or {} -- table containing objects MyBagsCore is embedded in.
local AC = LibStub("AceConsole-3.0"); local AC = LibStub("AceConsole-3.0")
assert(AC, MBC .. " requires AceConsole-3.0"); assert(AC, MBC .. " requires AceConsole-3.0")
local MYBAGS_BOTTOMOFFSET = 20 local MYBAGS_BOTTOMOFFSET = 20
local MYBAGS_COLWIDTH = 40 local MYBAGS_COLWIDTH = 40
local MYBAGS_ROWHEIGHT = 40 local MYBAGS_ROWHEIGHT = 40
local MYBAGS_MAXBAGSLOTS = 28
local MIN_SCALE_VAL = "0.2" local MIN_SCALE_VAL = "0.2"
local MAX_SCALE_VAL = "2.0" local MAX_SCALE_VAL = "2.0"
@ -27,16 +90,13 @@ local MYBAGS_HERBCOLOR = { 0.0, 0.6, 0.0 }
local MYBAGS_GEMCOLOR = { 0.0, 0.6, 0.6 } local MYBAGS_GEMCOLOR = { 0.0, 0.6, 0.6 }
local MYBAGS_MININGCOLOR = { 0.0, 0.0, 0.6 } local MYBAGS_MININGCOLOR = { 0.0, 0.0, 0.6 }
local ACEG_MAP_ONOFF = {[0]="|cffff5050Off|r",[1]="|cff00ff00On|r"} local ACEG_MAP_ONOFF = {
[0] = "|cffff5050Off|r",
[1] = "|cff00ff00On|r"
}
local L = LibStub("AceLocale-3.0"):GetLocale("MyBags") local L = LibStub("AceLocale-3.0"):GetLocale("MyBags")
local pcall, error, pairs, unpack = pcall, error, pairs, unpack
local strfind, strlen, strsub, strlower, strgmatch, strupper = string.find, string.len, string.sub, string.lower, string.gmatch, string.upper
local strtrim = strtrim
local tinsert, tremove = table.insert, table.remove
local tostring, tonumber, select = tostring, tonumber, select
local mb_options = { local mb_options = {
type = "group", type = "group",
args = { args = {
@ -64,9 +124,10 @@ local function ColorConvertHexToDigit(h)
e = 14, e = 14,
f = 15 f = 15
} }
return ((tonumber(strsub(h,1,1)) or r[strsub(h,1,1)] or 0) * 16 + (tonumber(strsub(h,2,2)) or r[strsub(h,2,2)] or 0))/255,
((tonumber(strsub(h,3,3)) or r[strsub(h,3,3)] or 0) * 16 + (tonumber(strsub(h,4,4)) or r[strsub(h,4,4)] or 0))/255, return ((tonum(strsub(h, 1, 1)) or r[strsub(h, 1, 1)] or 0) * 16 + (tonum(strsub(h, 2, 2)) or r[strsub(h, 2, 2)] or 0)) / 255,
((tonumber(strsub(h,5,5)) or r[strsub(h,5,5)] or 0) * 16 + (tonumber(strsub(h,6,6)) or r[strsub(h,6,6)] or 0))/255 ((tonum(strsub(h, 3, 3)) or r[strsub(h, 3, 3)] or 0) * 16 + (tonum(strsub(h, 4, 4)) or r[strsub(h, 4, 4)] or 0)) / 255,
((tonum(strsub(h, 5, 5)) or r[strsub(h, 5, 5)] or 0) * 16 + (tonum(strsub(h, 6, 6)) or r[strsub(h, 6, 6)] or 0)) / 255
end end
local function GetItemInfoFromLink(l) local function GetItemInfoFromLink(l)
@ -83,10 +144,11 @@ local function GetBattlePetInfoFromLink(l)
return return
end end
local c, id, lvl, num, hp, pw, sp, u, n local id, lvl, rar, hp, pw, sp, n
if (strfind(l, "Hbattlepet")) then if (strfind(l, "Hbattlepet")) then
-- "|cff0070dd|Hbattlepet:1178:1:3:152:13:10:0x0000000000000000|h[Sunreaver Micro-Sentry]|h|r" -- "|cff0070dd|Hbattlepet:1178:1:3:152:13:10:0x0000000000000000|h[Sunreaver Micro-Sentry]|h|r"
c, id, lvl, rar, hp, pw, sp, u, n = select(3, strfind(l, "|cff(%x+)|Hbattlepet:(%-?%d+):(%d+):(%d+):(%d+):(%d+):(%d+):([^|]+)|h%[(.-)%]|h|r")) local u
id, lvl, rar, hp, pw, sp, u, n = select(4, strfind(l, "|cff(%x+)|Hbattlepet:(%-?%d+):(%d+):(%d+):(%d+):(%d+):(%d+):([^|]+)|h%[(.-)%]|h|r"))
end end
return tonum(id), tonum(lvl), tonum(rar), tonum(hp), tonum(pw), tonum(sp), n return tonum(id), tonum(lvl), tonum(rar), tonum(hp), tonum(pw), tonum(sp), n
@ -151,7 +213,6 @@ local function ParseWords(str, pat)
end end
local list = {} local list = {}
local word
for word in strgmatch(str, pat or "%S+") do for word in strgmatch(str, pat or "%S+") do
tinsert(list, word) tinsert(list, word)
@ -186,7 +247,7 @@ function MyBagsCore:OnEmbedInitialize(addon)
addon.SetOpt = function(var,val) addon.SetOpt = function(var,val)
local prof = addon.db:GetCurrentProfile() local prof = addon.db:GetCurrentProfile()
addon.db.profiles[prof][var] = val; addon.db.profiles[prof][var] = val
end end
addon.TogOpt = function(var) addon.TogOpt = function(var)
@ -214,9 +275,11 @@ function MyBagsCore:OnEmbedInitialize(addon)
if val == true then if val == true then
val = 1 val = 1
end end
if (map) then if (map) then
val = map[val or 0] or val val = map[val or 0] or val
end end
AC:Printf(format(L["ACE_CMD_RESULT"], addon.name, text .. " " .. L["ACEG_TEXT_NOW_SET_TO"] .. " " .. format(L["ACEG_DISPLAY_OPTION"], val or L["ACE_CMD_REPORT_NO_VAL"]))) AC:Printf(format(L["ACE_CMD_RESULT"], addon.name, text .. " " .. L["ACEG_TEXT_NOW_SET_TO"] .. " " .. format(L["ACEG_DISPLAY_OPTION"], val or L["ACE_CMD_REPORT_NO_VAL"])))
end end
@ -232,7 +295,6 @@ function MyBagsCore:OnEmbedInitialize(addon)
addon.frame = _G[addon.frameName] addon.frame = _G[addon.frameName]
addon.frame.self = addon addon.frame.self = addon
local inOptions = false local inOptions = false
local key, value
for key, value in pairs(INTERFACEOPTIONS_ADDONCATEGORIES) do for key, value in pairs(INTERFACEOPTIONS_ADDONCATEGORIES) do
if value.name == "MyBags" then if value.name == "MyBags" then
inOptions = true inOptions = true
@ -247,16 +309,14 @@ function MyBagsCore:OnEmbedInitialize(addon)
LibStub("AceConfig-3.0"):RegisterOptionsTable(addon.name, addon.options) LibStub("AceConfig-3.0"):RegisterOptionsTable(addon.name, addon.options)
LibStub("AceConfigDialog-3.0"):AddToBlizOptions(addon.name, addon.name, "MyBags") LibStub("AceConfigDialog-3.0"):AddToBlizOptions(addon.name, addon.name, "MyBags")
local charName = strtrim(UnitName("player")); local charName = strtrim(UnitName("player"))
local realmName = strtrim(GetRealmName()); local realmName = strtrim(GetRealmName())
-- self.atBank = false
addon.Player = charName .. L["CHARACTER_DELIMITOR"] .. realmName addon.Player = charName .. L["CHARACTER_DELIMITOR"] .. realmName
end end
-- OnEnable -- OnEnable
function MyBagsCore:OnEmbedEnable(addon) function MyBagsCore:OnEmbedEnable(addon)
addon:RegisterEvents(); addon:HookFunctions()
addon:HookFunctions();
if addon.GetOpt("Scale") then if addon.GetOpt("Scale") then
addon.frame:SetScale(addon.GetOpt("Scale")) addon.frame:SetScale(addon.GetOpt("Scale"))
end end
@ -288,10 +348,18 @@ function MyBagsCore:RegisterEvents(obj)
self = obj self = obj
end end
self:RegisterEvent("BAG_UPDATE"); self:RegisterEvent("BAG_UPDATE")
self:RegisterEvent("BAG_UPDATE_COOLDOWN", "LayoutFrameOnEvent") self:RegisterEvent("BAG_UPDATE_COOLDOWN", "LayoutFrameOnEvent")
-- self:RegisterEvent("UNIT_INVENTORY_CHANGED", "UNIT_INVENTORY_CHANGED"); -- self:RegisterEvent("UNIT_INVENTORY_CHANGED", "UNIT_INVENTORY_CHANGED")
self:RegisterEvent("ITEM_LOCK_CHANGED", "LayoutFrameOnEvent"); self:RegisterEvent("ITEM_LOCK_CHANGED", "LayoutFrameOnEvent")
end
function MyBagsCore:UnregisterEvents(obj)
if (obj) then
self = obj
end
self:UnregisterAllEvents()
end end
function MyBagsCore:HookFunctions(obj) function MyBagsCore:HookFunctions(obj)
@ -329,7 +397,6 @@ function MyBagsCore:CloseBag(bag)
end end
function MyBagsCore:SetUISpecialFrames() function MyBagsCore:SetUISpecialFrames()
local k, v
if self.GetOpt("NoEsc") then if self.GetOpt("NoEsc") then
for k, v in pairs(UISpecialFrames) do for k, v in pairs(UISpecialFrames) do
if v == (self.frameName) then if v == (self.frameName) then
@ -357,6 +424,7 @@ function MyBagsCore:SetLockTexture()
if not self.GetOpt("Lock") then if not self.GetOpt("Lock") then
texture = texture .. "Un" texture = texture .. "Un"
end end
texture = texture .. "Locked-Up" texture = texture .. "Locked-Up"
button:SetTexture(texture) button:SetTexture(texture)
if self.GetOpt("Lock") and self.GetOpt("Graphics") == "none" then if self.GetOpt("Lock") and self.GetOpt("Graphics") == "none" then
@ -368,12 +436,10 @@ end
function MyBagsCore:CanSaveItems() function MyBagsCore:CanSaveItems()
local live = self:IsLive() local live = self:IsLive()
self.isLive = false
if self:GetInfoFunc() ~= self.GetInfoNone then
self.isLive = live self.isLive = live
if self:GetInfoFunc() ~= self.GetInfoNone then
return true return true
else else
self.isLive = live
return false return false
end end
end end
@ -398,8 +464,8 @@ function MyBagsCore:GetCurrentPlayer()
return self.Player return self.Player
end end
local charName = strtrim(UnitName("player")); local charName = strtrim(UnitName("player"))
local realmName = strtrim(GetRealmName()); local realmName = strtrim(GetRealmName())
return charName .. L["CHARACTER_DELIMITOR"] .. realmName return charName .. L["CHARACTER_DELIMITOR"] .. realmName
end end
@ -424,12 +490,13 @@ function MyBagsCore:TooltipSetOwner(owner, anchor)
end end
function MyBagsCore:Open() function MyBagsCore:Open()
self:RegisterEvents()
if not self.frame:IsVisible() then if not self.frame:IsVisible() then
self.frame:Show() self.frame:Show()
end end
local charName = strtrim(UnitName("player")); local charName = strtrim(UnitName("player"))
local realmName = strtrim(GetRealmName()); local realmName = strtrim(GetRealmName())
self.Player = charName .. L["CHARACTER_DELIMITOR"] .. realmName self.Player = charName .. L["CHARACTER_DELIMITOR"] .. realmName
if self.Player then if self.Player then
@ -446,6 +513,8 @@ function MyBagsCore:Close()
if self.frame:IsVisible() then if self.frame:IsVisible() then
self.frame:Hide() self.frame:Hide()
end end
self:UnregisterEvents()
end end
function MyBagsCore:Toggle() function MyBagsCore:Toggle()
@ -484,7 +553,7 @@ function MyBagsCore:BagIDToInvSlotID(bag, isBank)
end end
if isBank then if isBank then
return BankButtonIDToInvSlotID(bag, 1) return BankButtonIDToInvSlotID(bag - 4, 1)
end end
return ContainerIDToInventoryID(bag) return ContainerIDToInventoryID(bag)
@ -503,6 +572,7 @@ function MyBagsCore:IncludeBag(bag)
if self.db.profiles[prof][bs] and self.db.profiles[prof][bs]["Exclude"] then if self.db.profiles[prof][bs] and self.db.profiles[prof][bs]["Exclude"] then
return false return false
end end
return true return true
end end
end end
@ -528,10 +598,8 @@ function MyBagsCore:GetCash()
local player, realm = self:SplitString(self:GetCurrentPlayer(), L["CHARACTER_DELIMITOR"]) local player, realm = self:SplitString(self:GetCurrentPlayer(), L["CHARACTER_DELIMITOR"])
local char_key = DS:GetCharacter(player, realm) local char_key = DS:GetCharacter(player, realm)
return DS:GetMoney(char_key) return DS:GetMoney(char_key)
elseif IsAddOnLoaded("MyBagsCache") then
local charID = self:GetCurrentPlayer()
return MyBagsCache:GetCash(charID)
end end
return nil return nil
end end
@ -554,9 +622,11 @@ function MyBagsCore:SplitString(s, p, n)
tinsert(l, s) tinsert(l, s)
break break
end end
if (n) then if (n) then
n = n - 1 n = n - 1
end end
if (n and (n == 0)) then if (n and (n == 0)) then
tinsert(l, s) tinsert(l, s)
break break
@ -596,26 +666,23 @@ function MyBagsCore:GetInfo(bag, slot)
end end
function MyBagsCore:GetInfoLive(bag, slot) function MyBagsCore:GetInfoLive(bag, slot)
local charName = strtrim(UnitName("player")); local charName = strtrim(UnitName("player"))
local realmName = strtrim(GetRealmName()); local realmName = strtrim(GetRealmName())
self.Player = charName .. L["CHARACTER_DELIMITOR"] .. realmName self.Player = charName .. L["CHARACTER_DELIMITOR"] .. realmName
local texture, count, ID, locked, quality, readable, name, i_type, _
if slot ~= nil then if slot ~= nil then
-- it's an item -- it's an item
local texture, count, locked, _ , readable = GetContainerItemInfo(bag, slot) texture, count, locked, _, readable = GetContainerItemInfo(bag, slot)
local itemLink = GetContainerItemLink(bag, slot) local itemLink = GetContainerItemLink(bag, slot)
local name, quality, _, ID, i_type
if itemLink then if itemLink then
name, quality, _, ID, i_type = GetItemInfoFromLink(itemLink) name, quality, _, ID, i_type = GetItemInfoFromLink(itemLink)
end end
count = tonum(count)
return texture, count, ID, locked, quality, readable, name or nil, i_type
else else
-- it's a bag -- it's a bag
local count = GetContainerNumSlots(bag) i_type = "bag"
count = GetContainerNumSlots(bag)
local itemLink
local inventoryID = self:BagIDToInvSlotID(bag) local inventoryID = self:BagIDToInvSlotID(bag)
local texture, itemLink, locked, readable
local name, quality, _, ID
if inventoryID then if inventoryID then
texture = GetInventoryItemTexture("player", inventoryID) texture = GetInventoryItemTexture("player", inventoryID)
itemLink = GetInventoryItemLink("player", inventoryID) itemLink = GetInventoryItemLink("player", inventoryID)
@ -626,23 +693,22 @@ function MyBagsCore:GetInfoLive(bag, slot)
readable = IsSpecialtyBagFromLink(itemLink) readable = IsSpecialtyBagFromLink(itemLink)
elseif (bag == -1) then elseif (bag == -1) then
texture = "Interface\\Buttons\\Button-Backpack-Up" texture = "Interface\\Buttons\\Button-Backpack-Up"
count = 28; count = 28
elseif (bag == 0) then elseif (bag == 0) then
texture = "Interface\\Buttons\\Button-Backpack-Up" texture = "Interface\\Buttons\\Button-Backpack-Up"
count = 16 count = 16
end end
end
count = tonum(count) count = tonum(count)
return texture, count, ID, locked, quality, readable, name or nil, "bag" return texture, count, ID, locked, quality, readable, name or nil, i_type
end
end end
function MyBagsCore:GetInfoDataStore(bag, slot) function MyBagsCore:GetInfoDataStore(bag, slot)
local DS = DataStore local DS = DataStore
local player, realm = self:SplitString(self:GetCurrentPlayer(), L["CHARACTER_DELIMITOR"]) local player, realm = self:SplitString(self:GetCurrentPlayer(), L["CHARACTER_DELIMITOR"])
local char_key = DS:GetCharacter(player, realm) local char_key = DS:GetCharacter(player, realm)
local readable local texture, count, ID, quality, readable, name, i_type, _
local quality
if self.isEquipment then if self.isEquipment then
-- texture, count, id, locked, quality, _, name = GetInfo(item) -- texture, count, id, locked, quality, _, name = GetInfo(item)
@ -659,18 +725,18 @@ function MyBagsCore:GetInfoDataStore(bag, slot)
if bag == -1 then if bag == -1 then
bag = 100 bag = 100
end end
local container = DS:GetContainer(char_key, bag) local container = DS:GetContainer(char_key, bag)
if not slot then if not slot then
local texture, ID, count, _, _ = DS:GetContainerInfo(char_key, bag) i_type = "bag"
local name texture, ID, count, _, _ = DS:GetContainerInfo(char_key, bag)
if ID then if ID then
name = GetItemInfo(ID) name = GetItemInfo(ID)
readable = IsSpecialtyBagFromID(ID) readable = IsSpecialtyBagFromID(ID)
end end
return texture, count, ID, nil, quality, readable, name
else else
local ID, slotLink, count = DS:GetSlotInfo(container, slot) local slotLink, itemLink
local name, itemLink, texture, quality, i_type ID, slotLink, count = DS:GetSlotInfo(container, slot)
if ID then if ID then
name, itemLink = GetItemInfo(ID) name, itemLink = GetItemInfo(ID)
texture = GetItemIcon(ID) texture = GetItemIcon(ID)
@ -678,28 +744,15 @@ function MyBagsCore:GetInfoDataStore(bag, slot)
quality, i_type = select(3, strfind(itemLink, "|cff(%x+)|H(%l+):.*|h|r")) quality, i_type = select(3, strfind(itemLink, "|cff(%x+)|H(%l+):.*|h|r"))
end end
end end
if slotLink then if slotLink then
ID = slotLink ID = slotLink
end end
return texture, count, ID, nil, quality, readable, name, i_type
end
end
end
function MyBagsCore:GetInfoMyBagsCache(bag,slot)
local charID = self:GetCurrentPlayer()
local texture, count, ID, locked, quality, readable, name, i_type
if self.isEquipment then
texture, count, ID, quality, name, i_type = MyBagsCache:GetInfo("equipment", bag, charID)
else
texture, count, ID, quality, name, i_type = MyBagsCache:GetInfo(bag, slot, charID)
if not slot and ID then
readable = IsSpecialtyBagFromID(ID)
end
end end
count = tonum(count) count = tonum(count)
return texture, count, ID, nil, quality, readable, name, i_type return texture, count, ID, nil, quality or nil, readable, name, i_type
end
end end
function MyBagsCore:GetInfoNone(bag, slot) function MyBagsCore:GetInfoNone(bag, slot)
@ -708,13 +761,12 @@ end
function MyBagsCore:GetSlotCount() function MyBagsCore:GetSlotCount()
local slots, used, displaySlots = 0, 0, 0 local slots, used, displaySlots = 0, 0, 0
local i
local bagIndex
if self.isBank then if self.isBank then
if self:CanSaveItems() or self.isLive then if self:CanSaveItems() or self.isLive then
slots = 28 slots = 28
displaySlots = 28 displaySlots = 28
end end
for i = 1, slots do for i = 1, slots do
if (self:GetInfo(BANK_CONTAINER, i)) then if (self:GetInfo(BANK_CONTAINER, i)) then
used = used + 1 used = used + 1
@ -747,9 +799,9 @@ end
--ITEMBUTTONS-- --ITEMBUTTONS--
function MyBagsCore:ItemButton_OnLoad(widget) function MyBagsCore:ItemButton_OnLoad(widget)
_G[widget:GetName().."NormalTexture"]:SetTexture("Interface\\AddOns\\MyBags\\Skin\\Button"); _G[widget:GetName() .. "NormalTexture"]:SetTexture("Interface\\AddOns\\MyBags\\Skin\\Button")
ContainerFrameItemButton_OnLoad(widget) ContainerFrameItemButton_OnLoad(widget)
widget.UpdateTooltip = widget.ItemButton_OnEnter; widget.UpdateTooltip = widget.ItemButton_OnEnter
end end
function MyBagsCore:ItemButton_OnLeave(widget) function MyBagsCore:ItemButton_OnLeave(widget)
@ -758,6 +810,7 @@ function MyBagsCore:ItemButton_OnLeave(widget)
if bagButton then if bagButton then
bagButton:UnlockHighlight() bagButton:UnlockHighlight()
end end
CursorUpdate(widget) CursorUpdate(widget)
end end
@ -779,10 +832,10 @@ function MyBagsCore:ItemButton_OnModifiedClick(widget, button)
if self.isLive then if self.isLive then
-- if self.isBank and widget:GetParent():GetID() == BANK_CONTAINER then -- if self.isBank and widget:GetParent():GetID() == BANK_CONTAINER then
-- BankFrameItemButtonGeneric_OnModifiedClick(widget, button) -- BankFrameItemButtonGeneric_OnModifiedClick(widget, button)
-- StackSplitFrame:SetFrameStrata("TOOLTIP"); -- StackSplitFrame:SetFrameStrata("TOOLTIP")
-- else -- else
-- ContainerFrameItemButton_OnModifiedClick(widget, button) -- ContainerFrameItemButton_OnModifiedClick(widget, button)
-- StackSplitFrame:SetFrameStrata("TOOLTIP"); -- StackSplitFrame:SetFrameStrata("TOOLTIP")
-- end -- end
else else
if (button == "LeftButton") then if (button == "LeftButton") then
@ -802,7 +855,7 @@ function MyBagsCore:ItemButton_OnModifiedClick(widget, button)
ChatEdit_InsertLink(hyperLink) ChatEdit_InsertLink(hyperLink)
end end
StackSplitFrame:Hide(); StackSplitFrame:Hide()
end end
end end
end end
@ -821,7 +874,8 @@ function MyBagsCore:ItemButton_OnEnter(widget)
if widget:GetParent() == MyBankFrameBank then if widget:GetParent() == MyBankFrameBank then
GameTooltip:SetInventoryItem("player", BankButtonIDToInvSlotID(widget:GetID())) GameTooltip:SetInventoryItem("player", BankButtonIDToInvSlotID(widget:GetID()))
else else
local hasCooldown, repairCost, speciesID, level, breedQuality, maxHealth, power, speed, name = GameTooltip:SetBagItem(widget:GetParent():GetID(), widget:GetID()) local speciesID = select(3, GameTooltip:SetBagItem(widget:GetParent():GetID(), widget:GetID()))
-- local hasCooldown, repairCost, speciesID, level, breedQuality, maxHealth, power, speed, name = GameTooltip:SetBagItem(widget:GetParent():GetID(), widget:GetID())
if (speciesID and speciesID > 0) then if (speciesID and speciesID > 0) then
local link = GetContainerItemLink(widget:GetParent():GetID(), widget:GetID()) local link = GetContainerItemLink(widget:GetParent():GetID(), widget:GetID())
local id, lvl, rar, hp, pw, sp, n = GetBattlePetInfoFromLink(link) local id, lvl, rar, hp, pw, sp, n = GetBattlePetInfoFromLink(link)
@ -830,6 +884,7 @@ function MyBagsCore:ItemButton_OnEnter(widget)
if (BattlePetTooltip) then if (BattlePetTooltip) then
BattlePetTooltip:Hide() BattlePetTooltip:Hide()
end end
ContainerFrameItemButton_OnEnter(widget) ContainerFrameItemButton_OnEnter(widget)
end end
end end
@ -838,7 +893,9 @@ function MyBagsCore:ItemButton_OnEnter(widget)
local i_type = select(8, self:GetInfo(widget:GetParent():GetID(), widget:GetID() - 1000)) local i_type = select(8, self:GetInfo(widget:GetParent():GetID(), widget:GetID() - 1000))
if ID and i_type ~= "battlepet" then if ID and i_type ~= "battlepet" then
local hyperlink = self:GetHyperlink(ID) local hyperlink = self:GetHyperlink(ID)
if hyperlink then GameTooltip:SetHyperlink(hyperlink) end if hyperlink then
GameTooltip:SetHyperlink(hyperlink)
end
end end
end end
@ -862,16 +919,27 @@ end
--BAGBUTTONS-- --BAGBUTTONS--
function MyBagsCore:BagButton_OnEnter(widget) function MyBagsCore:BagButton_OnEnter(widget)
local bagFrame = widget:GetParent() local bagFrame = widget:GetParent()
local bagID = bagFrame:GetID()
local setTooltip = true local setTooltip = true
self:TooltipSetOwner(widget) self:TooltipSetOwner(widget)
if self.isLive then if self.isLive then
local invSlot = self:BagIDToInvSlotID(bagFrame:GetID()) if (bagID == 0) then
GameTooltip:SetText(BACKPACK_TOOLTIP, 1.0, 1.0, 1.0)
else
--
end
local invSlot = self:BagIDToInvSlotID(bagID)
if not invSlot or (not GameTooltip:SetInventoryItem("player", invSlot)) then if not invSlot or (not GameTooltip:SetInventoryItem("player", invSlot)) then
setTooltip = false setTooltip = false
end end
if (bagID == 0 or not IsInventoryItemProfessionBag("player", ContainerIDToInventoryID(bagID))) then
GameTooltip:AddLine(CLICK_BAG_SETTINGS)
end
else else
local ID = select(3, self:GetInfo(widget:GetParent():GetID())) local ID = select(3, self:GetInfo(bagID))
if bagFrame:GetID() == 0 then if bagID == 0 then
GameTooltip:SetText(BACKPACK_TOOLTIP, 1.0,1.0,1.0) GameTooltip:SetText(BACKPACK_TOOLTIP, 1.0,1.0,1.0)
elseif ID then elseif ID then
local hyperlink = self:GetHyperlink(ID) local hyperlink = self:GetHyperlink(ID)
@ -884,9 +952,8 @@ function MyBagsCore:BagButton_OnEnter(widget)
end end
if not setTooltip then if not setTooltip then
local keyBinding
if self.isBank then if self.isBank then
if self.isLive and not self:IsBagSlotUsable(bagFrame:GetID()) then if self.isLive and not self:IsBagSlotUsable(bagID) then
GameTooltip:SetText(BANK_BAG_PURCHASE) GameTooltip:SetText(BANK_BAG_PURCHASE)
if MyBank.atBank then if MyBank.atBank then
local cost = GetBankSlotCost() local cost = GetBankSlotCost()
@ -897,27 +964,24 @@ function MyBagsCore:BagButton_OnEnter(widget)
else else
SetMoneyFrameColor("GameTooltipMoneyFrame", 1.0, 0.1, 0.1) SetMoneyFrameColor("GameTooltipMoneyFrame", 1.0, 0.1, 0.1)
end end
GameTooltip:Show() GameTooltip:Show()
end end
keyBinding = GetBindingKey("TOGGLEBAG" .. (4 - widget:GetID()))
else else
GameTooltip:SetText(BANK_BAG) GameTooltip:SetText(BANK_BAG)
end end
else else
if bagFrame:GetID() == 0 then if bagID ~= 0 then
-- SetScript("OnEnter", MainMenuBarBackpackButton:GetScript("OnEnter"))
GameTooltip:SetText(BACKPACK_TOOLTIP, 1.0,1.0,1.0)
keyBinding = GetBindingKey("TOGGLEBACKPACK")
else
GameTooltip:SetText(EQUIP_CONTAINER) GameTooltip:SetText(EQUIP_CONTAINER)
else
-- SetScript("OnEnter", MainMenuBarBackpackButton:GetScript("OnEnter"))
-- GameTooltip:SetText(BACKPACK_TOOLTIP, 1.0,1.0,1.0)
end end
end end
end end
if self.GetOpt("HlItems") then if self.GetOpt("HlItems") then
-- Highlight -- Highlight
local i
for i = 1, self.GetOpt("MAXBAGSLOTS") do for i = 1, self.GetOpt("MAXBAGSLOTS") do
local button = _G[bagFrame:GetName() .. "Item" .. i] local button = _G[bagFrame:GetName() .. "Item" .. i]
if button then if button then
@ -925,12 +989,13 @@ function MyBagsCore:BagButton_OnEnter(widget)
end end
end end
end end
GameTooltip:Show()
end end
function MyBagsCore:BagButton_OnLeave(widget) function MyBagsCore:BagButton_OnLeave(widget)
SetMoneyFrameColor("GameTooltipMoneyFrame", 1.0, 1.0, 1.0); SetMoneyFrameColor("GameTooltipMoneyFrame", 1.0, 1.0, 1.0)
GameTooltip:Hide() GameTooltip:Hide()
local i
for i = 1, self.GetOpt("MAXBAGSLOTS") do for i = 1, self.GetOpt("MAXBAGSLOTS") do
local button = _G[widget:GetParent():GetName() .. "Item" .. i] local button = _G[widget:GetParent():GetName() .. "Item" .. i]
if button then if button then
@ -954,6 +1019,7 @@ function MyBagsCore:BagButton_OnClick(widget, button, ignoreShift)
if not StaticPopupDialogs["PURCHASE_BANKBAG"] then if not StaticPopupDialogs["PURCHASE_BANKBAG"] then
return return
end end
StaticPopup_Show("PURCHASE_BANKBAG") StaticPopup_Show("PURCHASE_BANKBAG")
end end
@ -975,8 +1041,10 @@ function MyBagsCore:BagButton_OnClick(widget, button, ignoreShift)
if not self.db.profiles[prof][bg] then if not self.db.profiles[prof][bg] then
self.db.profiles[prof][bg] = {} self.db.profiles[prof][bg] = {}
end end
self.db.profiles[prof][bg]["Exclude"] = true self.db.profiles[prof][bg]["Exclude"] = true
end end
self.hooks.CloseBag(bgnum) self.hooks.CloseBag(bgnum)
self:LayoutFrame() self:LayoutFrame()
end end
@ -1006,6 +1074,7 @@ function MyBagsCore:BagButton_OnReceiveDrag(widget)
else else
hadItem = PutItemInBag(invID) hadItem = PutItemInBag(invID)
end end
if not hadItem then if not hadItem then
if not self:IncludeBag(bagFrame:GetID()) then if not self:IncludeBag(bagFrame:GetID()) then
self.hooks.ToggleBag(bagFrame:GetID()) self.hooks.ToggleBag(bagFrame:GetID())
@ -1020,6 +1089,7 @@ function MyBagsCore:LayoutOptions()
local cash = _G[self.frameName .. "MoneyFrame"] local cash = _G[self.frameName .. "MoneyFrame"]
local slots = _G[self.frameName .. "Slots"] local slots = _G[self.frameName .. "Slots"]
local buttons = _G[self.frameName .. "Buttons"] local buttons = _G[self.frameName .. "Buttons"]
local sortButton = _G[self.frameName .. "SortButton"]
local search = _G[self.frameName .. "SearchBox"] local search = _G[self.frameName .. "SearchBox"]
if search then if search then
@ -1051,39 +1121,41 @@ function MyBagsCore:LayoutOptions()
cash:Hide() cash:Hide()
end end
if self.GetOpt("Token") and ManageBackpackTokenFrame then
local token = _G[self.frameName .. "TokenFrame"] local token = _G[self.frameName .. "TokenFrame"]
if self.GetOpt("Token") and ManageBackpackTokenFrame then
if (BackpackTokenFrame_IsShown()) then if (BackpackTokenFrame_IsShown()) then
token:SetParent(self.frameName) token:SetParent(self.frameName)
token:SetPoint("RIGHT", cash, "LEFT", -10, 0) token:SetPoint("RIGHT", cash, "LEFT", -10, 0)
local i
for i = 1, MAX_WATCHED_TOKENS do for i = 1, MAX_WATCHED_TOKENS do
local name, count, icon, currencyID = GetBackpackCurrencyInfo(i); local name, count, icon, currencyID = GetBackpackCurrencyInfo(i)
-- Update watched tokens -- Update watched tokens
local watchButton = _G[self.frameName .. "TokenFrameToken"..i]; local watchButton = _G[self.frameName .. "TokenFrameToken" .. i]
if (name) then if (name) then
watchButton.icon:SetTexture(icon); watchButton.icon:SetTexture(icon)
if (count <= 99999) then if (count <= 99999) then
watchButton.count:SetText(count); watchButton.count:SetText(count)
else else
watchButton.count:SetText("*"); watchButton.count:SetText("*")
end end
watchButton.currencyID = currencyID;
watchButton:Show(); watchButton.currencyID = currencyID
BackpackTokenFrame.shouldShow = 1; watchButton:Show()
BackpackTokenFrame.numWatchedTokens = i; BackpackTokenFrame.shouldShow = 1
BackpackTokenFrame.numWatchedTokens = i
else else
watchButton:Hide(); watchButton:Hide()
if (i == 1) then if (i == 1) then
BackpackTokenFrame.shouldShow = nil; BackpackTokenFrame.shouldShow = nil
end end
end end
end end
token:Show() token:Show()
else else
token:Hide() token:Hide()
end end
else else
token:Hide()
end end
if self.GetOpt("Buttons") then if self.GetOpt("Buttons") then
@ -1101,6 +1173,7 @@ function MyBagsCore:LayoutOptions()
else else
playerSelectFrame:Hide() playerSelectFrame:Hide()
end end
playerSelectFrame:ClearAllPoints() playerSelectFrame:ClearAllPoints()
if self.GetOpt("Graphics") == "art" then if self.GetOpt("Graphics") == "art" then
@ -1149,6 +1222,7 @@ function MyBagsCore:LayoutOptions()
else else
slots:Hide() slots:Hide()
end end
if self.GetOpt("Reverse") then if self.GetOpt("Reverse") then
self.reverseOrder = true self.reverseOrder = true
else else
@ -1159,14 +1233,44 @@ function MyBagsCore:LayoutOptions()
if self.GetOpt("AIOI") then if self.GetOpt("AIOI") then
self.aioiOrder = true self.aioiOrder = true
local columns = self.GetOpt("Columns") local columns = self.GetOpt("Columns")
if not (self.isEquipment) and self.GetOpt("Bag") == "before" then displaySlots = displaySlots + self.totalBags end if not (self.isEquipment) and self.GetOpt("Bag") == "before" then
displaySlots = displaySlots + self.totalBags
end
columns = tonum(columns) columns = tonum(columns)
if self.isEquipment then displaySlots = 20 end if self.isEquipment then
displaySlots = 20
end
self.curCol = columns - (mod(displaySlots, columns)) self.curCol = columns - (mod(displaySlots, columns))
if self.curCol == columns then self.curCol = 0 end if self.curCol == columns then
self.curCol = 0
end
else else
self.aioiOrder = false self.aioiOrder = false
end end
if self.isLive and self.GetOpt("BagSort") then
-- sortButton:ClearAllPoints()
sortButton:SetPoint("TOPRIGHT", search, "TOPLEFT", -20, 1)
sortButton:SetScript("OnEnter", nil)
sortButton:SetScript("OnLeave", nil)
sortButton:SetScript("OnClick", function()
self:SortBags();
end)
--[[
if search:IsShown() then
sortButton:SetPoint("TOPRIGHT", search, "TOPLEFT", -8, 0)
elseif playerSelectFrame:IsShown() then
sortButton:SetPoint("TOPRIGHT", playerSelectFrame, "TOPLEFT", -8, 0)
else
sortButton:SetPoint("TOPRIGHT", self.frameName, "TOPRIGHT", -8, -32)
end
]]
sortButton:Show()
else
sortButton:Hide()
end
end end
function MyBagsCore:UpdateTitle() function MyBagsCore:UpdateTitle()
@ -1187,7 +1291,7 @@ function MyBagsCore:UpdateTitle()
titleString = L["MYBAGS_TITLE0"] titleString = L["MYBAGS_TITLE0"]
end end
titleString = titleString .. _G[strupper(self.frameName) .. "_TITLE"] titleString = titleString .. L[strupper(self.frameName) .. "_TITLE"]
local title = _G[self.frameName .. "Name"] local title = _G[self.frameName .. "Name"]
local player, realm = self:SplitString(self:GetCurrentPlayer(), L["CHARACTER_DELIMITOR"]) local player, realm = self:SplitString(self:GetCurrentPlayer(), L["CHARACTER_DELIMITOR"])
title:SetText(format(titleString, player, realm)) title:SetText(format(titleString, player, realm))
@ -1275,7 +1379,6 @@ function MyBagsCore:LayoutBagFrame(bagFrame)
searchText = strlower(strtrim(searchText)) searchText = strlower(strtrim(searchText))
end end
local slot
local itemBase = bagFrameName .. "Item" local itemBase = bagFrameName .. "Item"
local bagButton = _G[bagFrameName .. "Bag"] local bagButton = _G[bagFrameName .. "Bag"]
local slotColor = ((self.GetOpt("SlotColor")) or MYBAGS_SLOTCOLOR) local slotColor = ((self.GetOpt("SlotColor")) or MYBAGS_SLOTCOLOR)
@ -1292,7 +1395,7 @@ function MyBagsCore:LayoutBagFrame(bagFrame)
bagFrame.size = tonum(count) bagFrame.size = tonum(count)
if bagButton and bagFrame:GetID() ~= BANK_CONTAINER then if bagButton and bagFrame:GetID() ~= BANK_CONTAINER then
if not texture then if not texture then
local bag_id, texture = GetInventorySlotInfo("Bag0Slot") texture = select(2, GetInventorySlotInfo("Bag0Slot"))
end end
if not self.isLive or (self.isLive and self:IsBagSlotUsable(bagFrame:GetID())) then if not self.isLive or (self.isLive and self:IsBagSlotUsable(bagFrame:GetID())) then
@ -1343,11 +1446,17 @@ function MyBagsCore:LayoutBagFrame(bagFrame)
bagFrame.size = 0 bagFrame.size = 0
else else
for slot = 1, bagFrame.size do for slot = 1, bagFrame.size do
local itemButton = _G[itemBase .. slot] or CreateFrame("Button", itemBase .. slot, bagFrame, "MyBagsItemButtonTemplate") local itemButton
if (self:IsLive()) then if (_G[itemBase .. slot]) then
itemButton:SetID(slot); itemButton = _G[itemBase .. slot]
else else
itemButton:SetID(slot + 1000); itemButton = CreateFrame("Button", itemBase .. slot, bagFrame, "MyBagsItemButtonTemplate")
end
if (self:IsLive()) then
itemButton:SetID(slot)
else
itemButton:SetID(slot + 1000)
end end
if self.curCol >= self.GetOpt("Columns") then if self.curCol >= self.GetOpt("Columns") then
@ -1355,8 +1464,42 @@ function MyBagsCore:LayoutBagFrame(bagFrame)
self.curRow = self.curRow + 1 self.curRow = self.curRow + 1
end end
local newItemTexture = _G[itemBase .. slot .. "NewItemTexture"] local newItemTexture = _G[itemBase .. slot].NewItemTexture
local flash = _G[itemBase .. slot].flashAnim
local newItemAnim = _G[itemBase .. slot].newitemglowAnim
local isNewItem = NewItemsIsNewItem(bagFrame:GetID(), itemButton:GetID())
local isBattlePayItem = IsBattlePayItem(bagFrame:GetID(), itemButton:GetID())
local battlepayItemTexture = _G[itemBase .. slot].BattlepayItemTexture
battlepayItemTexture:Hide()
if (isNewItem) then
if (isBattlePayItem) then
newItemTexture:Hide() newItemTexture:Hide()
battlepayItemTexture:Show()
else
if (quality and NEW_ITEM_ATLAS_BY_QUALITY[quality]) then
newItemTexture:SetAtlas(NEW_ITEM_ATLAS_BY_QUALITY[quality])
else
newItemTexture:SetAtlas("bags-glow-white")
end
battlepayItemTexture:Hide()
newItemTexture:Show()
end
if (not flash:IsPlaying() and not newItemAnim:IsPlaying()) then
flash:Play()
newItemAnim:Play()
end
else
battlepayItemTexture:Hide()
newItemTexture:Hide()
if (flash:IsPlaying() or newItemAnim:IsPlaying()) then
flash:Stop()
newItemAnim:Stop()
end
end
itemButton:Show() itemButton:Show()
itemButton:ClearAllPoints() itemButton:ClearAllPoints()
itemButton:SetPoint("TOPLEFT", self.frame:GetName(), "TOPLEFT", self:GetXY(self.curRow, self.curCol)) itemButton:SetPoint("TOPLEFT", self.frame:GetName(), "TOPLEFT", self:GetXY(self.curRow, self.curCol))
@ -1380,7 +1523,7 @@ function MyBagsCore:LayoutBagFrame(bagFrame)
if self.isLive then if self.isLive then
local start, duration, enable = GetContainerItemCooldown(bagFrame:GetID(), slot) local start, duration, enable = GetContainerItemCooldown(bagFrame:GetID(), slot)
local cooldown = _G[itemButton:GetName() .. "Cooldown"] local cooldown = _G[itemButton:GetName() .. "Cooldown"]
CooldownFrame_SetTimer(cooldown, start, duration, enable) CooldownFrame_Set(cooldown, start, duration, enable)
if duration > 0 and enable == 0 then if duration > 0 and enable == 0 then
SetItemButtonTextureVertexColor(itemButton, 0.4, 0.4, 0.4) SetItemButtonTextureVertexColor(itemButton, 0.4, 0.4, 0.4)
end end
@ -1437,7 +1580,7 @@ function MyBagsCore:LayoutFrame()
self.isLive = self:IsLive() self.isLive = self:IsLive()
local bagBase = self.frameName .. "Bag" local bagBase = self.frameName .. "Bag"
local bagIndex, bagFrame, bag local bagFrame
self.curRow, self.curCol = 0,0 self.curRow, self.curCol = 0,0
self:LayoutOptions() self:LayoutOptions()
if self.isEquipment then if self.isEquipment then
@ -1487,10 +1630,17 @@ function MyBagsCore:LayoutFrameOnEvent(event, unit)
return return
end end
if event == "BAG_UPDATE_COOLDOWN" then
if self.isLive then if self.isLive then
self:LayoutFrame() self:LayoutFrame()
end end
end end
end
function MyBagsCore:SortBags()
PlaySound("UI_BagSorting_01")
SortBags()
end
function MyBagsCore:LockButton_OnClick() function MyBagsCore:LockButton_OnClick()
self.TogOpt("Lock") self.TogOpt("Lock")
@ -1499,7 +1649,6 @@ end
function MyBagsCore:SetColumns(cols) function MyBagsCore:SetColumns(cols)
cols = floor(tonum(cols)) cols = floor(tonum(cols))
self.SetOpt("Columns", cols) self.SetOpt("Columns", cols)
self:LayoutFrame() self:LayoutFrame()
end end
@ -1652,6 +1801,11 @@ function MyBagsCore:SetStrata(strata)
end end
end end
function MyBagsCore:SetBagSort()
self.TogMsg("BagSort", "Bag sorting")
self:LayoutFrame()
end
function MyBagsCore:ResetSettings() function MyBagsCore:ResetSettings()
self.db:ResetProfile() self.db:ResetProfile()
local prof = self.db:GetCurrentProfile() local prof = self.db:GetCurrentProfile()
@ -1678,11 +1832,7 @@ function MyBagsCore:ResetAnchor()
end end
function MyBagsCore:SetAnchor(point) function MyBagsCore:SetAnchor(point)
if point == "topleft" then if not (point == "topleft" or point == "topright" or point == "bottomleft" or point == "bottomright") then
elseif point == "topright" then
elseif point == "bottomleft" then
elseif point == "bottomright" then
else
self.Error("Invalid Entry for Anchor") self.Error("Invalid Entry for Anchor")
return return
end end
@ -1693,7 +1843,8 @@ function MyBagsCore:SetAnchor(point)
local top1 = anchorframe:GetTop() local top1 = anchorframe:GetTop()
local left1 = anchorframe:GetLeft() local left1 = anchorframe:GetLeft()
if not top or not left or not left1 or not top1 then if not top or not left or not left1 or not top1 then
self.Error("Frame must be open to set anchor") return self.Error("Frame must be open to set anchor")
return
end end
self.frame:ClearAllPoints() self.frame:ClearAllPoints()
@ -1716,7 +1867,7 @@ function MyBagsCore:SetAnchor(point)
self.SetOpt("Anchor", point) self.SetOpt("Anchor", point)
self.Result("Anchor", point) self.Result("Anchor", point)
self.anchorPoint = strupper(point) self.anchorPoint = strupper(point)
return TRUE return true
end end
function MyBagsCore:SetCompanion() function MyBagsCore:SetCompanion()
@ -1756,13 +1907,13 @@ function MyBagsCore:BagSearch_OnTextChanged()
local search = _G[self.frameName .. "SearchBox"] local search = _G[self.frameName .. "SearchBox"]
local text = search:GetText() local text = search:GetText()
if (text == SEARCH) then if (text == SEARCH) then
text = ""; text = ""
end end
if (text ~= "") then if (text ~= "") then
search.clearButton:Show(); search.clearButton:Show()
else else
search.clearButton:Hide(); search.clearButton:Hide()
end end
self:LayoutFrame() self:LayoutFrame()
@ -1775,14 +1926,18 @@ function MyBagsCore:BagSearch_OnEditFocusGained()
search.searchIcon:SetVertexColor(1.0, 1.0, 1.0) search.searchIcon:SetVertexColor(1.0, 1.0, 1.0)
local text = search:GetText() local text = search:GetText()
if (text == SEARCH) then if (text == SEARCH) then
text = ""; text = ""
end end
search.clearButton:Show(); search.clearButton:Show()
search:SetText(text) search:SetText(text)
self:LayoutFrame() self:LayoutFrame()
end end
function MyBagsCore:GetCoreVersion()
return MBC .. " version " .. MBC_MINOR
end
local mixins = { local mixins = {
"ToggleBag", "ToggleBag",
"OpenBag", "OpenBag",
@ -1808,7 +1963,6 @@ local mixins = {
"GetInfo", "GetInfo",
"GetInfoLive", "GetInfoLive",
"GetInfoDataStore", "GetInfoDataStore",
"GetInfoMyBagsCache",
"GetInfoNone", "GetInfoNone",
"GetSlotCount", "GetSlotCount",
"ItemButton_OnLoad", "ItemButton_OnLoad",
@ -1830,6 +1984,7 @@ local mixins = {
"LayoutBagFrame", "LayoutBagFrame",
"LayoutFrame", "LayoutFrame",
"LayoutFrameOnEvent", "LayoutFrameOnEvent",
"SortBags",
"LockButton_OnClick", "LockButton_OnClick",
"SetColumns", "SetColumns",
"SetReplace", "SetReplace",
@ -1851,6 +2006,7 @@ local mixins = {
"SetCount", "SetCount",
"SetScale", "SetScale",
"SetStrata", "SetStrata",
"SetBagSort",
"ResetSettings", "ResetSettings",
"ResetAnchor", "ResetAnchor",
"SetAnchor", "SetAnchor",
@ -1861,10 +2017,10 @@ local mixins = {
"BagSearch_OnEditFocusGained", "BagSearch_OnEditFocusGained",
"RegisterEvents", "RegisterEvents",
"UnregisterEvents", "UnregisterEvents",
"GetCoreVersion",
} }
function MyBagsCore:Embed(target) function MyBagsCore:Embed(target)
local k, v
for k, v in pairs(mixins) do for k, v in pairs(mixins) do
target[v] = self[v] target[v] = self[v]
end end

View File

@ -2,7 +2,7 @@
xsi:schemaLocation="http://www.blizzard.com/wow/ui/FrameXML/UI.xsd"> xsi:schemaLocation="http://www.blizzard.com/wow/ui/FrameXML/UI.xsd">
<Script file="MyBags.lua"/> <Script file="MyBags.lua"/>
<!-- Templates --> <!-- Templates -->
<Button name="MyBagsItemButtonTemplate" inherits="ContainerFrameItemButtonTemplate" virtual="true"> <Button name="MyBagsItemButtonTemplate" inherits="ContainerFrameItemButtonTemplate" virtual="true" hidden="true">
<Frames> <Frames>
<Cooldown name="$parentCooldown" inherits="CooldownFrameTemplate"/> <Cooldown name="$parentCooldown" inherits="CooldownFrameTemplate"/>
</Frames> </Frames>
@ -366,6 +366,22 @@
<Frame name="$parentBag4" inherits="MyBagsContainerTemplate" id="4"/> <Frame name="$parentBag4" inherits="MyBagsContainerTemplate" id="4"/>
<Frame name="$parentButtons" inherits="MyBagsButtonBarTemplate"/> <Frame name="$parentButtons" inherits="MyBagsButtonBarTemplate"/>
<Frame name="$parentCharSelect" inherits="MyBagsCharSelectTemplate"/> <Frame name="$parentCharSelect" inherits="MyBagsCharSelectTemplate"/>
<Button name="$parentSortButton">
<Size x="28" y="26"/>
<NormalTexture atlas="bags-button-autosort-up"/>
<PushedTexture atlas="bags-button-autosort-down"/>
<HighlightTexture file="Interface\Buttons\ButtonHilight-Square" alphaMode="ADD">
<Size x="24" y="23"/>
<Anchors>
<Anchor point="CENTER" x="0" y="0"/>
</Anchors>
</HighlightTexture>
<Scripts>
<OnEnter/>
<OnLeave/>
<OnClick/>
</Scripts>
</Button>
<Frame name="$parentTokenFrame"> <Frame name="$parentTokenFrame">
<Size> <Size>
<AbsDimension x="183" y="32"/> <AbsDimension x="183" y="32"/>

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.blizzard.com/wow/ui/" xsi:schemaLocation="http://www.blizzard.com/wow/ui/FrameXML\UI.xsd">
<Include file="enUS.lua"/>
</Ui>

View File

@ -1,34 +0,0 @@
-- Version : English - Ramble
MYBANK_NAME = "MyBank"
MYBANK_DESCRIPTION = "All in one bank mod"
MYBANKFRAME_TITLE = "Bank"
-- SLASHCOMMANDS
-- MYBANK_COMMANDS = {"/mybank", "/mb"}
--[[ MYBANK_CMD_OPTIONS = {
MYBAGS_CMD_OPT_REPLACE, -- done
MYBAGS_CMD_OPT_FREEZE, -- done
MYBAGS_CMD_OPT_LOCK, -- done
MYBAGS_CMD_OPT_COLUMNS, -- done
MYBAGS_CMD_OPT_BAG, -- done
MYBAGS_CMD_OPT_HIGHLIGHT, -- done
MYBAGS_CMD_OPT_NOESC, -- done
MYBAGS_CMD_OPT_TITLE, -- done
MYBAGS_CMD_OPT_CASH, -- done
MYBAGS_CMD_OPT_BUTTONS, -- done
MYBAGS_CMD_OPT_AIOI, -- done
MYBAGS_CMD_OPT_REVERSE, -- done
MYBAGS_CMD_OPT_BORDER, -- done
MYBAGS_CMD_OPT_PLAYERSEL, -- done
MYBAGS_CMD_OPT_COUNT, -- done
MYBAGS_CMD_OPT_SCALE, -- done
MYBAGS_CMD_OPT_STRATA, -- done
MYBAGS_CMD_OPT_ANCHOR, -- done
MYBAGS_CMD_OPT_TOGGLE, -- done
MYBAGS_CMD_RESET, -- done
MYBAGS_CMD_OPT_GRAPHICS, -- skip
MYBAGS_CMD_OPT_SLOTCOLOR, -- skip
}
]]

View File

@ -2,6 +2,7 @@ local MYBANK_DEFAULT_OPTIONS = {
["Columns"] = 14, ["Columns"] = 14,
["Replace"] = true, ["Replace"] = true,
["Bag"] = "bar", ["Bag"] = "bar",
["BagSort"] = true,
["Graphics"] = "art", ["Graphics"] = "art",
["Count"] = "free", ["Count"] = "free",
["HlItems"] = true, ["HlItems"] = true,
@ -34,14 +35,32 @@ local MYBANK_DEFAULT_OPTIONS = {
["_RIGHTOFFSET"] = 3, ["_RIGHTOFFSET"] = 3,
} }
MyBank = LibStub("AceAddon-3.0"):NewAddon("MyBank", "MyBagsCore-1.0", "AceHook-3.0", "AceEvent-3.0", "AceConsole-3.0") MyBank = LibStub("AceAddon-3.0"):NewAddon("MyBank", "MyBagsCore-1.1", "AceHook-3.0", "AceEvent-3.0", "AceConsole-3.0")
local MB_Config = LibStub("AceConfig-3.0") local MB_Config = LibStub("AceConfig-3.0")
local MB_Dialog = LibStub("AceConfigDialog-3.0") local MB_Dialog = LibStub("AceConfigDialog-3.0")
local MB_Cmd = LibStub("AceConfigCmd-3.0") local MB_Cmd = LibStub("AceConfigCmd-3.0")
local MB_Core = LibStub("MyBagsCore-1.0") local MB_Core = LibStub("MyBagsCore-1.1")
local L = LibStub("AceLocale-3.0"):GetLocale("MyBags") local L = LibStub("AceLocale-3.0"):GetLocale("MyBags")
-- Lua APIs
local pairs = pairs
local strtrim = strtrim
-- WoW APIs
local _G = _G
local CloseBackpack = CloseBackpack
local IsBagOpen = IsBagOpen
local MoneyFrame_Update = MoneyFrame_Update
local OpenBackpack = OpenBackpack
local PlaySound = PlaySound
local SetPortraitTexture = SetPortraitTexture
local SortBankBags = SortBankBags
local ToggleBackpack = ToggleBackpack
--Global variables that we don't cache, list them here for the mikk's Find Globals script
-- GLOBALS:
function MyBank:OnInitialize() function MyBank:OnInitialize()
self.name = "MyBank" self.name = "MyBank"
self.frameName = "MyBankFrame" self.frameName = "MyBankFrame"
@ -55,12 +74,13 @@ function MyBank:OnInitialize()
self.anchorParent = "UIParent" self.anchorParent = "UIParent"
self.anchorOffsetX = 5 self.anchorOffsetX = 5
self.anchorOffsetY = 100 self.anchorOffsetY = 100
self.db = LibStub("AceDB-3.0"):New("MyBankDB"); self.db = LibStub("AceDB-3.0"):New("MyBankDB")
local prof = self.db:GetCurrentProfile() local prof = self.db:GetCurrentProfile()
if self.db.profiles[prof] and self.db.profiles[prof]["Columns"] and self.db.profiles[prof]["Columns"] > 0 then if self.db.profiles[prof] and self.db.profiles[prof]["Columns"] and self.db.profiles[prof]["Columns"] > 0 then
else else
self.db.profiles[prof] = self.defaults self.db.profiles[prof] = self.defaults
end end
self:RegisterChatCommand("mb", "MB_ChatCommand") self:RegisterChatCommand("mb", "MB_ChatCommand")
self:RegisterChatCommand("mybank", "MB_ChatCommand") self:RegisterChatCommand("mybank", "MB_ChatCommand")
self.options = { self.options = {
@ -136,6 +156,17 @@ function MyBank:OnInitialize()
MyBank:SetBagDisplay(val) MyBank:SetBagDisplay(val)
end, end,
}, },
bagsort = {
type = "toggle",
name = "BagSort",
desc = "Toggle bag sort button",
get = function(info)
return MyBank.IsSet("BagSort")
end,
set = function(info, val)
MyBank:SetBagSort()
end,
},
back = { back = {
type = "select", type = "select",
name = "Background", name = "Background",
@ -389,7 +420,7 @@ function MyBank:OnInitialize()
end end
function MyBank:OnEnable() function MyBank:OnEnable()
-- MyBagsCore:Enable(self); -- MyBagsCore:Enable(self)
MyBankFrameBank.maxIndex = 28 MyBankFrameBank.maxIndex = 28
MyBankFrameBank:SetID(BANK_CONTAINER) MyBankFrameBank:SetID(BANK_CONTAINER)
MyBankFrameBag0:SetID(5) MyBankFrameBag0:SetID(5)
@ -399,11 +430,14 @@ function MyBank:OnEnable()
MyBankFrameBag4:SetID(9) MyBankFrameBag4:SetID(9)
MyBankFrameBag5:SetID(10) MyBankFrameBag5:SetID(10)
MyBankFrameBag6:SetID(11) MyBankFrameBag6:SetID(11)
if self.GetOpt("Replace") then if self.GetOpt("Replace") then
BankFrame:UnregisterEvent("BANKFRAME_OPENED") BankFrame:UnregisterEvent("BANKFRAME_OPENED")
BankFrame:UnregisterEvent("BANKFRAME_CLOSED") BankFrame:UnregisterEvent("BANKFRAME_CLOSED")
_G["BankFrame"] = self.frame
end end
self:RegisterEvent("BANKFRAME_OPENED")
MyBankFramePortrait:SetTexture("Interface\\Addons\\MyBags\\Skin\\MyBankPortrait") MyBankFramePortrait:SetTexture("Interface\\Addons\\MyBags\\Skin\\MyBankPortrait")
StaticPopupDialogs["PURCHASE_BANKBAG"] = { StaticPopupDialogs["PURCHASE_BANKBAG"] = {
preferredIndex = STATICPOPUPS_NUMDIALOGS, preferredIndex = STATICPOPUPS_NUMDIALOGS,
@ -428,9 +462,10 @@ function MyBank:OnEnable()
end end
function MyBank:MB_ChatCommand(input) function MyBank:MB_ChatCommand(input)
if not input or input:trim() == "" then if not input or strtrim(input) == "" then
MB_Dialog:Open(self.name) MB_Dialog:Open(self.name)
else else
input = strtrim(input)
MB_Cmd.HandleCommand(MyBank, "mybank", self.name, input) MB_Cmd.HandleCommand(MyBank, "mybank", self.name, input)
end end
end end
@ -444,7 +479,10 @@ end
function MyBank:LoadDropDown() function MyBank:LoadDropDown()
local dropDown = _G[self.frameName .. "CharSelectDropDown"] local dropDown = _G[self.frameName .. "CharSelectDropDown"]
local dropDownButton = _G[self.frameName .. "CharSelectDropDownButton"] local dropDownButton = _G[self.frameName .. "CharSelectDropDownButton"]
if not dropDown then return end if not dropDown then
return
end
local last_this = _G["this"] local last_this = _G["this"]
_G["this"] = dropDownButton _G["this"] = dropDownButton
UIDropDownMenu_Initialize(dropDown, self.UserDropDown_Initialize) UIDropDownMenu_Initialize(dropDown, self.UserDropDown_Initialize)
@ -455,13 +493,14 @@ end
function MyBank:UserDropDown_Initialize() function MyBank:UserDropDown_Initialize()
local this = self or _G.this local this = self or _G.this
local chars, char_num, i local chars, char_num
chars = MyBank:GetSortedCharList(MyBank.GetOpt("Sort")) chars = MyBank:GetSortedCharList(MyBank.GetOpt("Sort"))
char_num = getn(chars) char_num = #chars
if (char_num == 0) then if (char_num == 0) then
MyBank.GetOpt("Player") -- MyBank.GetOpt("Player")
return return
end end
local frame = this:GetParent():GetParent() local frame = this:GetParent():GetParent()
local selectedValue = UIDropDownMenu_GetSelectedValue(this) local selectedValue = UIDropDownMenu_GetSelectedValue(this)
@ -473,7 +512,10 @@ function MyBank:UserDropDown_Initialize()
["owner"] = frame.self, ["owner"] = frame.self,
["checked"] = nil, ["checked"] = nil,
} }
if selectedValue == info.value then info.checked = 1 end if selectedValue == info.value then
info.checked = 1
end
UIDropDownMenu_AddButton(info) UIDropDownMenu_AddButton(info)
end end
end end
@ -489,10 +531,14 @@ end
function MyBank:RegisterEvents() function MyBank:RegisterEvents()
MB_Core:RegisterEvents(self) MB_Core:RegisterEvents(self)
self:RegisterEvent("BANKFRAME_OPENED")
self:RegisterEvent("BANKFRAME_CLOSED")
self:RegisterEvent("PLAYERBANKSLOTS_CHANGED", "LayoutFrameOnEvent") self:RegisterEvent("PLAYERBANKSLOTS_CHANGED", "LayoutFrameOnEvent")
self:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED","LayoutFrameOnEvent") self:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED","LayoutFrameOnEvent")
self:RegisterEvent("BANKFRAME_CLOSED")
end
function MyBank:UnregisterEvents()
MB_Core:UnregisterEvents(self)
self:RegisterEvent("BANKFRAME_OPENED")
end end
function MyBank:HookFunctions() function MyBank:HookFunctions()
@ -507,17 +553,20 @@ function MyBank:ToggleAllBags(forceopen)
else else
ToggleBackpack() ToggleBackpack()
end end
local action, i
local action
if (IsBagOpen(0) or MyInventory.frame:IsVisible()) then if (IsBagOpen(0) or MyInventory.frame:IsVisible()) then
action = "OpenBag" action = "OpenBag"
else else
action = "CloseBag" action = "CloseBag"
end end
for i = 1, 4, 1 do for i = 1, 4, 1 do
if not (MyInventory.GetOpt("Replace") and MyInventory:IncludeBag(i)) then if not (MyInventory.GetOpt("Replace") and MyInventory:IncludeBag(i)) then
self.hooks[action](i) self.hooks[action](i)
end end
end end
for i = 5, 11, 1 do for i = 5, 11, 1 do
if not MyBank.GetOpt("Replace") or not MyBank:IncludeBag(i) then if not MyBank.GetOpt("Replace") or not MyBank:IncludeBag(i) then
self.hooks[action](i) self.hooks[action](i)
@ -526,7 +575,6 @@ function MyBank:ToggleAllBags(forceopen)
end end
function MyBank:CloseAllBags() function MyBank:CloseAllBags()
local i
MyInventory:Close() MyInventory:Close()
CloseBackpack() -- just in case backpack is not contolled by MyInventory CloseBackpack() -- just in case backpack is not contolled by MyInventory
for i = 1, 4, 1 do for i = 1, 4, 1 do
@ -534,6 +582,7 @@ function MyBank:CloseAllBags()
self.hooks.CloseBag(i) self.hooks.CloseBag(i)
end end
end end
for i = 5, 11, 1 do for i = 5, 11, 1 do
if not MyBank.GetOpt("Replace") or not MyBank:IncludeBag(i) then if not MyBank.GetOpt("Replace") or not MyBank:IncludeBag(i) then
self.hooks.CloseBag(i) self.hooks.CloseBag(i)
@ -548,6 +597,7 @@ function MyBank:BAG_UPDATE(event, bag)
end end
function MyBank:BANKFRAME_OPENED() function MyBank:BANKFRAME_OPENED()
self:RegisterEvents()
MyBank.atBank = true MyBank.atBank = true
SetPortraitTexture(MyBankFramePortrait, "npc") SetPortraitTexture(MyBankFramePortrait, "npc")
if self.Freeze == "always" or (self.Freeze == "sticky" and self.frame:IsVisible()) then if self.Freeze == "always" or (self.Freeze == "sticky" and self.frame:IsVisible()) then
@ -555,6 +605,7 @@ function MyBank:BANKFRAME_OPENED()
else else
self.holdOpen = false self.holdOpen = false
end end
if self.GetOpt("Replace") then if self.GetOpt("Replace") then
self:Open() self:Open()
else else
@ -571,26 +622,30 @@ function MyBank:BANKFRAME_CLOSED()
end -- calling self:close() would trigger the bank closing twice end -- calling self:close() would trigger the bank closing twice
else else
self.holdOpen = false self.holdOpen = false
if self.isLive then self:LayoutFrame() end if self.isLive then
self:LayoutFrame()
end end
end end
self:UnregisterEvents()
end
function MyBank:GetInfoFunc() function MyBank:GetInfoFunc()
if self.isLive then if self.isLive then
return self.GetInfoLive return self.GetInfoLive
end end
if IsAddOnLoaded("DataStore_Containers") then if IsAddOnLoaded("DataStore_Containers") then
return self.GetInfoDataStore return self.GetInfoDataStore
end end
if IsAddOnLoaded("MyBagsCache") then
return self.GetInfoMyBagsCache
end
return self.GetInfoNone return self.GetInfoNone
end end
function MyBank:GetSortedCharList(sorttype, realm) function MyBank:GetSortedCharList(sorttype, realm)
local result = {}
if IsAddOnLoaded("DataStore_Containers") then if IsAddOnLoaded("DataStore_Containers") then
local realmname
local realmlist = {} local realmlist = {}
local realmcount = 0 local realmcount = 0
if not realm then if not realm then
@ -602,10 +657,8 @@ function MyBank:GetSortedCharList(sorttype, realm)
realmcount = 1 realmcount = 1
realmlist[1] = realm realmlist[1] = realm
end end
local result = {}
local idx = 0 local idx = 0
local i
local charname, charkey
for i = 1, realmcount do for i = 1, realmcount do
for charname, charkey in pairs(DataStore:GetCharacters(realmlist[i])) do for charname, charkey in pairs(DataStore:GetCharacters(realmlist[i])) do
-- charkey = DataStore:GetCharacter(charname, realmlist[i]) -- charkey = DataStore:GetCharacter(charname, realmlist[i])
@ -615,9 +668,10 @@ function MyBank:GetSortedCharList(sorttype, realm)
end end
end end
end end
local swapped local swapped
local q, w local q, w
local x_time, y_time; local x_time, y_time
local charName, realmName local charName, realmName
repeat repeat
swapped = 0 swapped = 0
@ -630,12 +684,14 @@ function MyBank:GetSortedCharList(sorttype, realm)
else else
x_time = DataStore:GetModuleLastUpdate(DataStore_Containers, charName, realmName) x_time = DataStore:GetModuleLastUpdate(DataStore_Containers, charName, realmName)
end end
charName, realmName = self:SplitString(w) charName, realmName = self:SplitString(w)
if (not DataStore:GetModuleLastUpdate(DataStore_Containers, charName, realmName)) then if (not DataStore:GetModuleLastUpdate(DataStore_Containers, charName, realmName)) then
y_time = 0 y_time = 0
else else
y_time = DataStore:GetModuleLastUpdate(DataStore_Containers, charName, realmName) y_time = DataStore:GetModuleLastUpdate(DataStore_Containers, charName, realmName)
end end
if self:SortChars(q, w, x_time, y_time, sorttype) then if self:SortChars(q, w, x_time, y_time, sorttype) then
result[i] = w result[i] = w
result[i + 1] = q result[i + 1] = q
@ -643,51 +699,10 @@ function MyBank:GetSortedCharList(sorttype, realm)
end end
end end
until swapped == 0 until swapped == 0
end
return result return result
end end
if IsAddOnLoaded("MyBagsCache") then
local result = {}
local idx = 0
local cache = MyBagsCache.db.global
local index, value
for index, value in pairs(cache) do
local charName, realmID = self:SplitString(index)
if index ~= "profiles" then
if (not realm or realmID == realm) then
idx = idx + 1
result[idx] = index
end
end
end
local swapped
local q, w
local x_time, y_time
local i
repeat
swapped = 0
for i = 1, idx-1 do
q = result[i]
w = result[i+1]
if (not cache[q].updateTime) then
x_time = 0
else
x_time = cache[q].updateTime
end
if (not cache[w].updateTime) then
y_time = 0
else
y_time = cache[w].updateTime
end
if self:SortChars(q, w, x_time, y_time, sorttype) then
result[i] = w
result[i+1] = q
swapped = 1
end
end
until swapped == 0
return result
end
end
function MyBank:SetReplace() function MyBank:SetReplace()
self.TogMsg("Replace", "Replace default bags") self.TogMsg("Replace", "Replace default bags")
@ -702,3 +717,8 @@ function MyBank:SetReplace()
BankFrame:RegisterEvent("BANKFRAME_CLOSED") BankFrame:RegisterEvent("BANKFRAME_CLOSED")
end end
end end
function MyBank:SortBags()
PlaySound("UI_BagSorting_01")
SortBankBags()
end

View File

@ -1,7 +1,6 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/" <Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/FrameXML/UI.xsd"> xsi:schemaLocation="http://www.blizzard.com/wow/ui/FrameXML/UI.xsd">
<Include file="Locals\Locals.xml"/>
<Script file="MyBank.lua"/> <Script file="MyBank.lua"/>
<Frame name="MyBagsBankContainerTemplate" inherits="MyBagsContainerTemplate" ID="BANK_CONTAINER" virtual="true"> <Frame name="MyBagsBankContainerTemplate" inherits="MyBagsContainerTemplate" ID="BANK_CONTAINER" virtual="true">
</Frame> </Frame>

View File

@ -1,4 +1,3 @@
local MYBAGS_MAXEQUIPSLOTS = 19
local MYBAGS_SLOTCOLOR = { 0.5, 0.5, 0.5 } local MYBAGS_SLOTCOLOR = { 0.5, 0.5, 0.5 }
local MYEQUIPMENT_SLOT = {} local MYEQUIPMENT_SLOT = {}
@ -46,22 +45,72 @@ local MYEQUIPMENT_DEFAULT_OPTIONS = {
["_RIGHTOFFSET"] = 3, ["_RIGHTOFFSET"] = 3,
} }
MyEquipment = LibStub("AceAddon-3.0"):NewAddon("MyEquipment", "AceConsole-3.0", "AceHook-3.0", "AceEvent-3.0", "MyBagsCore-1.0") MyEquipment = LibStub("AceAddon-3.0"):NewAddon("MyEquipment", "AceConsole-3.0", "AceHook-3.0", "AceEvent-3.0", "MyBagsCore-1.1")
local ME_Dialog = LibStub("AceConfigDialog-3.0") local ME_Dialog = LibStub("AceConfigDialog-3.0")
local ME_Cmd = LibStub("AceConfigCmd-3.0") local ME_Cmd = LibStub("AceConfigCmd-3.0")
-- Lua APIs
local pairs = pairs
local strlen, strsub, strfind, strtrim = string.len, string.sub, string.find, strtrim
local select = select
local tonumber = tonumber
-- WoW APIs
local _G = _G
local ChatEdit_InsertLink = ChatEdit_InsertLink
local CursorCanGoInSlot = CursorCanGoInSlot
local CursorUpdate = CursorUpdate
local DressUpItemLink = DressUpItemLink
local GetInventoryItemCooldown = GetInventoryItemCooldown
local GetInventoryItemCount = GetInventoryItemCount
local GetInventoryItemLink = GetInventoryItemLink
local GetInventoryItemTexture = GetInventoryItemTexture
local GetInventorySlotInfo = GetInventorySlotInfo
local InRepairMode = InRepairMode
local IsControlKeyDown = IsControlKeyDown
local IsInventoryItemLocked = IsInventoryItemLocked
local IsShiftKeyDown = IsShiftKeyDown
local PaperDollItemSlotButton_OnClick = PaperDollItemSlotButton_OnClick
local PaperDollItemSlotButton_OnEvent = PaperDollItemSlotButton_OnEvent
local PaperDollItemSlotButton_OnModifiedClick = PaperDollItemSlotButton_OnModifiedClick
local SetItemButtonCount = SetItemButtonCount
local SetItemButtonDesaturated = SetItemButtonDesaturated
local SetItemButtonTexture = SetItemButtonTexture
local SetItemButtonTextureVertexColor = SetItemButtonTextureVertexColor
local SetTooltipMoney = SetTooltipMoney
local ShowInspectCursor = ShowInspectCursor
local UnitHasRelicSlot = UnitHasRelicSlot
--Global variables that we don't cache, list them here for the mikk's Find Globals script
-- GLOBALS:
local function ColorConvertHexToDigit(h) local function ColorConvertHexToDigit(h)
if(strlen(h)~=6) then return 0,0,0 end if (strlen(h) ~= 6) then
local r={a=10,b=11,c=12,d=13,e=14,f=15} return 0, 0, 0
return ((tonumber(strsub(h,1,1)) or r[strsub(h,1,1)] or 0) * 16 + (tonumber(strsub(h,2,2)) or r[strsub(h,2,2)] or 0))/255, end
((tonumber(strsub(h,3,3)) or r[strsub(h,3,3)] or 0) * 16 + (tonumber(strsub(h,4,4)) or r[strsub(h,4,4)] or 0))/255,
((tonumber(strsub(h,5,5)) or r[strsub(h,5,5)] or 0) * 16 + (tonumber(strsub(h,6,6)) or r[strsub(h,6,6)] or 0))/255 local r = {
a = 10,
b = 11,
c = 12,
d = 13,
e = 14,
f = 15
}
return ((tonum(strsub(h, 1, 1)) or r[strsub(h, 1, 1)] or 0) * 16 + (tonum(strsub(h, 2, 2)) or r[strsub(h, 2, 2)] or 0)) / 255,
((tonum(strsub(h, 3, 3)) or r[strsub(h, 3, 3)] or 0) * 16 + (tonum(strsub(h, 4, 4)) or r[strsub(h, 4, 4)] or 0)) / 255,
((tonum(strsub(h, 5, 5)) or r[strsub(h, 5, 5)] or 0) * 16 + (tonum(strsub(h, 6, 6)) or r[strsub(h, 6, 6)] or 0)) / 255
end end
local function GetItemInfoFromLink(l) local function GetItemInfoFromLink(l)
if(not l) then return end if (not l) then
local c,id,il,n=select(3, strfind(l,"|cff(%x+)|Hitem:(%-?%d+)([^|]+)|h%[(.-)%]|h|r")) return
return n,c,id..il,id end
local c, t, id, il, n = select(3, strfind(l, "|cff(%x+)|H(%l+):(%-?%d+)([^|]+)|h%[(.-)%]|h|r"))
return n, c, id .. il, id, t
end end
local function tonum(val) local function tonum(val)
@ -312,7 +361,6 @@ end
function MyEquipment:OnEnable() function MyEquipment:OnEnable()
MyEquipmentFramePortrait:SetTexture("Interface\\Addons\\MyBags\\Skin\\MyEquipmentPortrait") MyEquipmentFramePortrait:SetTexture("Interface\\Addons\\MyBags\\Skin\\MyEquipmentPortrait")
local key, value
for key,value in pairs(SLOTNAMES) do -- Just in case Blizzard shuffles the slot name table around for key,value in pairs(SLOTNAMES) do -- Just in case Blizzard shuffles the slot name table around
local slotId = GetInventorySlotInfo(value) local slotId = GetInventorySlotInfo(value)
MYEQUIPMENT_SLOT[slotId] = value MYEQUIPMENT_SLOT[slotId] = value
@ -333,7 +381,10 @@ end
function MyEquipment:LoadDropDown() function MyEquipment:LoadDropDown()
local dropDown = _G[self.frameName .. "CharSelectDropDown"] local dropDown = _G[self.frameName .. "CharSelectDropDown"]
local dropDownButton = _G[self.frameName .. "CharSelectDropDownButton"] local dropDownButton = _G[self.frameName .. "CharSelectDropDownButton"]
if not dropDown then return end if not dropDown then
return
end
local last_this = _G["this"] local last_this = _G["this"]
_G["this"] = dropDownButton _G["this"] = dropDownButton
UIDropDownMenu_Initialize(dropDown, self.UserDropDown_Initialize) UIDropDownMenu_Initialize(dropDown, self.UserDropDown_Initialize)
@ -347,15 +398,15 @@ function MyEquipment:UserDropDown_Initialize()
local this = self or _G.this local this = self or _G.this
local chars, charnum local chars, charnum
chars = MyEquipment:GetSortedCharList(MyEquipment.GetOpt("Sort")) chars = MyEquipment:GetSortedCharList(MyEquipment.GetOpt("Sort"))
charnum = getn(chars) charnum = #chars
if (charnum == 0) then if (charnum == 0) then
self.GetOpt("Player") -- self.GetOpt("Player")
return return
end end
local frame = this:GetParent():GetParent() local frame = this:GetParent():GetParent()
local selectedValue = UIDropDownMenu_GetSelectedValue(this) local selectedValue = UIDropDownMenu_GetSelectedValue(this)
local i
for i = 1, charnum do for i = 1, charnum do
local info = { local info = {
["text"] = chars[i], ["text"] = chars[i],
@ -364,7 +415,10 @@ function MyEquipment:UserDropDown_Initialize()
["owner"] = frame.self, ["owner"] = frame.self,
["checked"] = nil, ["checked"] = nil,
} }
if selectedValue == info.value then info.checked = 1 end if selectedValue == info.value then
info.checked = 1
end
UIDropDownMenu_AddButton(info) UIDropDownMenu_AddButton(info)
end end
end end
@ -384,11 +438,10 @@ end
function MyEquipment:GetRelic(charID) function MyEquipment:GetRelic(charID)
if self.isLive then if self.isLive then
return UnitHasRelicSlot("player") return UnitHasRelicSlot("player")
elseif IsAddOnLoaded("MyBagsCache") then else
return MyBagsCache:GetRelic(charID)
end
return nil return nil
end end
end
function MyEquipment:GetInfoFunc() function MyEquipment:GetInfoFunc()
if self.isLive then if self.isLive then
@ -397,15 +450,13 @@ function MyEquipment:GetInfoFunc()
elseif IsAddOnLoaded("DataStore_Inventory") then elseif IsAddOnLoaded("DataStore_Inventory") then
return self.GetInfoDataStore return self.GetInfoDataStore
]] ]]
elseif IsAddOnLoaded("MyBagsCache") then else
return self.GetInfoMyBagsCache
end
return self.GetInfoNone return self.GetInfoNone
end end
end
function MyEquipment:GetEquipInfoLive(itemIndex) function MyEquipment:GetEquipInfoLive(itemIndex)
local itemLink = GetInventoryItemLink("player",itemIndex) local itemLink = GetInventoryItemLink("player",itemIndex)
local myColor, myLink, myName = nil
local texture, count, quality, ID = nil local texture, count, quality, ID = nil
if itemLink or itemIndex == 0 then if itemLink or itemIndex == 0 then
texture = GetInventoryItemTexture("player",itemIndex) texture = GetInventoryItemTexture("player",itemIndex)
@ -415,7 +466,7 @@ function MyEquipment:GetEquipInfoLive(itemIndex)
ID = select(4, GetItemInfoFromLink(itemLink)) ID = select(4, GetItemInfoFromLink(itemLink))
end end
end end
local hasRelic = UnitHasRelicSlot("player")
local locked = IsInventoryItemLocked(itemIndex) local locked = IsInventoryItemLocked(itemIndex)
return texture, count, ID, locked, quality, readable, nil return texture, count, ID, locked, quality, readable, nil
end end
@ -423,7 +474,7 @@ end
function MyEquipment:MyEquipmentItemSlotButton_OnLoad(widget) function MyEquipment:MyEquipmentItemSlotButton_OnLoad(widget)
widget:RegisterForDrag("LeftButton") widget:RegisterForDrag("LeftButton")
_G[widget:GetName() .. "NormalTexture"]:SetTexture("Interface\\AddOns\\MyBags\\Skin\\Button") _G[widget:GetName() .. "NormalTexture"]:SetTexture("Interface\\AddOns\\MyBags\\Skin\\Button")
widget.UpdateTooltip = widget.MyEquipmentItemSlotButton_OnEnter; widget.UpdateTooltip = widget.MyEquipmentItemSlotButton_OnEnter
end end
function MyEquipment:MyEquipmentItemSlotButton_OnEnter(widget) function MyEquipment:MyEquipmentItemSlotButton_OnEnter(widget)
@ -433,9 +484,13 @@ function MyEquipment:MyEquipmentItemSlotButton_OnEnter(widget)
local hasItem, hasCooldown, repairCost = GameTooltip:SetInventoryItem("player", widget:GetID()) local hasItem, hasCooldown, repairCost = GameTooltip:SetInventoryItem("player", widget:GetID())
if not hasItem then if not hasItem then
text = TEXT(_G[MYEQUIPMENT_SLOT[tonum(strsub(widget:GetName(), 21))]]) text = TEXT(_G[MYEQUIPMENT_SLOT[tonum(strsub(widget:GetName(), 21))]])
if widget.hasRelic then text = TEXT(_G["RELICSLOT"]) end if widget.hasRelic then
text = TEXT(_G["RELICSLOT"])
end
GameTooltip:SetText(text) GameTooltip:SetText(text)
end end
if (InRepairMode() and repairCost and (repairCost > 0)) then if (InRepairMode() and repairCost and (repairCost > 0)) then
GameTooltip:AddLine(TEXT(REPAIR_COST), "", 1, 1, 1) GameTooltip:AddLine(TEXT(REPAIR_COST), "", 1, 1, 1)
SetTooltipMoney(GameTooltip, repairCost) SetTooltipMoney(GameTooltip, repairCost)
@ -449,11 +504,19 @@ function MyEquipment:MyEquipmentItemSlotButton_OnEnter(widget)
local _, count, ID, _, quality, _, name = self:GetInfo(widget:GetID()) local _, count, ID, _, quality, _, name = self:GetInfo(widget:GetID())
if ID and ID ~= "" then if ID and ID ~= "" then
local hyperlink = self:GetHyperlink(ID) local hyperlink = self:GetHyperlink(ID)
if hyperlink then GameTooltip:SetHyperlink(hyperlink) end if hyperlink then
if IsControlKeyDown() and hyperlink then ShowInspectCursor() end GameTooltip:SetHyperlink(hyperlink)
end
if IsControlKeyDown() and hyperlink then
ShowInspectCursor()
end
else else
text = TEXT(_G[MYEQUIPMENT_SLOT[tonum(strsub(widget:GetName(), 21))]]) text = TEXT(_G[MYEQUIPMENT_SLOT[tonum(strsub(widget:GetName(), 21))]])
if widget.hasRelic then text = TEXT(_G["RELICSLOT"]) end if widget.hasRelic then
text = TEXT(_G["RELICSLOT"])
end
if name then -- it's a bleeding ammo slot if name then -- it's a bleeding ammo slot
text = name text = name
GameTooltip:SetText(text, ColorConvertHexToDigit(quality)) GameTooltip:SetText(text, ColorConvertHexToDigit(quality))
@ -487,7 +550,10 @@ function MyEquipment:MyEquipmentItemSlotButton_OnModifiedClick(widget, button)
elseif (IsShiftKeyDown()) then elseif (IsShiftKeyDown()) then
local ID = select(3, self:GetInfo(widget:GetID())) local ID = select(3, self:GetInfo(widget:GetID()))
local hyperLink local hyperLink
if ID then hyperLink = self:GetHyperlink(ID) end if ID then
hyperLink = self:GetHyperlink(ID)
end
if hyperLink then if hyperLink then
ChatEdit_InsertLink(hyperLink) ChatEdit_InsertLink(hyperLink)
end end
@ -512,6 +578,7 @@ function MyEquipment:MyEquipmentItemSlotButton_OnEvent(widget, event)
else else
widget:UnlockHighlight() widget:UnlockHighlight()
end end
return return
end end
end end
@ -525,7 +592,7 @@ end
function MyEquipment:LayoutEquipmentFrame(self) function MyEquipment:LayoutEquipmentFrame(self)
local itemBase = "MyEquipmentSlotsItem" local itemBase = "MyEquipmentSlotsItem"
local texture, count, locked, quality, ammo, key, value, id local texture, count, locked, quality, id
local slotColor = ((self.GetOpt("SlotColor")) or MYBAGS_SLOTCOLOR) local slotColor = ((self.GetOpt("SlotColor")) or MYBAGS_SLOTCOLOR)
local charID = self:GetCurrentPlayer() local charID = self:GetCurrentPlayer()
local hasRelic = self:GetRelic(charID) local hasRelic = self:GetRelic(charID)
@ -534,6 +601,7 @@ function MyEquipment:LayoutEquipmentFrame(self)
if self.aioiOrder and (hasRelic or hideAmmo) then if self.aioiOrder and (hasRelic or hideAmmo) then
self.curCol = self.curCol + 1 self.curCol = self.curCol + 1
end end
for key, value in pairs(SLOTNAMES) do for key, value in pairs(SLOTNAMES) do
local slot = GetInventorySlotInfo(value) local slot = GetInventorySlotInfo(value)
local itemButton = _G[itemBase .. slot] local itemButton = _G[itemBase .. slot]
@ -541,6 +609,7 @@ function MyEquipment:LayoutEquipmentFrame(self)
self.curCol = 0 self.curCol = 0
self.curRow = self.curRow + 1 self.curRow = self.curRow + 1
end end
itemButton:Show() itemButton:Show()
itemButton:ClearAllPoints() itemButton:ClearAllPoints()
itemButton:SetPoint("TOPLEFT", self.frame:GetName(), "TOPLEFT", self:GetXY(self.curRow, self.curCol)) itemButton:SetPoint("TOPLEFT", self.frame:GetName(), "TOPLEFT", self:GetXY(self.curRow, self.curCol))
@ -549,24 +618,30 @@ function MyEquipment:LayoutEquipmentFrame(self)
if id and id ~= "" then if id and id ~= "" then
itemButton.hasItem = 1 itemButton.hasItem = 1
end end
if self.isLive then if self.isLive then
local start, duration, enable = GetInventoryItemCooldown("player", slot) local start, duration, enable = GetInventoryItemCooldown("player", slot)
local cooldown = _G[itemButton:GetName() .. "Cooldown"] local cooldown = _G[itemButton:GetName() .. "Cooldown"]
CooldownFrame_SetTimer(cooldown,start,duration,enable) CooldownFrame_Set(cooldown, start, duration, enable)
if duration > 0 and enable == 0 then if duration > 0 and enable == 0 then
SetItemButtonTextureVertexColor(itemButton, 0.4,0.4,0.4) SetItemButtonTextureVertexColor(itemButton, 0.4,0.4,0.4)
end end
end end
if value == "RANGEDSLOT" and hasRelic then if value == "RANGEDSLOT" and hasRelic then
itemButton.hasRelic = 1 itemButton.hasRelic = 1
end end
SetItemButtonTexture(itemButton, (texture or "")) SetItemButtonTexture(itemButton, (texture or ""))
SetItemButtonCount(itemButton, count) SetItemButtonCount(itemButton, count)
SetItemButtonDesaturated(itemButton, locked, 0.5, 0.5, 0.5) SetItemButtonDesaturated(itemButton, locked, 0.5, 0.5, 0.5)
if locked and locked ~= "" then if locked and locked ~= "" then
itemButton:LockHighlight() itemButton:LockHighlight()
self.watchLock = 1 self.watchLock = 1
else itemButton:UnlockHighlight() end else
itemButton:UnlockHighlight()
end
if quality and self.GetOpt("Border") then if quality and self.GetOpt("Border") then
SetItemButtonNormalTextureVertexColor(itemButton, ColorConvertHexToDigit(quality)) SetItemButtonNormalTextureVertexColor(itemButton, ColorConvertHexToDigit(quality))
else else
@ -576,7 +651,7 @@ function MyEquipment:LayoutEquipmentFrame(self)
end end
function MyEquipment:ME_ChatCommand(input) function MyEquipment:ME_ChatCommand(input)
if not input or input:trim() == "" then if not input or strtrim(input) == "" then
ME_Dialog:Open(self.name) ME_Dialog:Open(self.name)
else else
ME_Cmd.HandleCommand(MyEquipment, "myequipment", self.name, input) ME_Cmd.HandleCommand(MyEquipment, "myequipment", self.name, input)
@ -584,6 +659,7 @@ function MyEquipment:ME_ChatCommand(input)
end end
function MyEquipment:GetSortedCharList(sorttype, realm) function MyEquipment:GetSortedCharList(sorttype, realm)
local result = {}
--[[ --[[
if IsAddOnLoaded("DataStore_Inventory") then if IsAddOnLoaded("DataStore_Inventory") then
local realmname local realmname
@ -598,7 +674,6 @@ function MyEquipment:GetSortedCharList(sorttype, realm)
realmcount = 1 realmcount = 1
realmlist[1] = realm realmlist[1] = realm
end end
local result = {}
local idx = 0 local idx = 0
local i local i
local charname, charkey local charname, charkey
@ -613,7 +688,7 @@ function MyEquipment:GetSortedCharList(sorttype, realm)
end end
local swapped local swapped
local q, w local q, w
local x_time, y_time; local x_time, y_time
local charName, realmName local charName, realmName
repeat repeat
swapped = 0 swapped = 0
@ -639,49 +714,7 @@ function MyEquipment:GetSortedCharList(sorttype, realm)
end end
end end
until swapped == 0 until swapped == 0
return result
end end
]] ]]
if IsAddOnLoaded("MyBagsCache") then
local result = {}
local idx = 0
local cache = MyBagsCache.db.global
local index, value
for index, value in pairs(cache) do
local charName, realmID = self:SplitString(index)
if index ~= "profiles" then
if (not realm or realmID == realm) then
idx = idx + 1
result[idx] = index
end
end
end
local swapped
local q, w
local x_time, y_time
local i
repeat
swapped = 0
for i = 1, idx-1 do
q = result[i]
w = result[i+1]
if (not cache[q].updateTime) then
x_time = 0
else
x_time = cache[q].updateTime
end
if (not cache[w].updateTime) then
y_time = 0
else
y_time =cache[w].updateTime
end
if self:SortChars(q, w, x_time, y_time, sorttype) then
result[i] = w
result[i+1] = q
swapped = 1
end
end
until swapped == 0
return result return result
end end
end

View File

@ -1,7 +1,6 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/" <Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/FrameXML/UI.xsd"> xsi:schemaLocation="http://www.blizzard.com/wow/ui/FrameXML/UI.xsd">
<Script file="locals.lua" />
<Script file="MyEquipment.lua" /> <Script file="MyEquipment.lua" />
<!-- Templates --> <!-- Templates -->

View File

@ -1,29 +0,0 @@
-- Version : English - Isharra
MYEQUIPMENT_NAME = "MyEquipment"
MYEQUIPMENT_DESCRIPTION = "Equipped items display"
MYEQUIPMENTFRAME_TITLE = "Equipment"
-- SLASHCOMMANDS
-- /me already taken by emote commands
-- MYEQUIPMENT_COMMANDS = {"/myequipment", "/myequip", "/mq"}
--[[ MYEQUIPMENT_CMD_OPTIONS = {
MYBAGS_CMD_OPT_LOCK, -- done
MYBAGS_CMD_OPT_COLUMNS, -- done
MYBAGS_CMD_OPT_NOESC, -- done
MYBAGS_CMD_OPT_TITLE, -- done
MYBAGS_CMD_OPT_CASH, -- done
MYBAGS_CMD_OPT_BUTTONS, -- done
MYBAGS_CMD_OPT_AIOI, -- done
MYBAGS_CMD_OPT_BORDER, -- done
MYBAGS_CMD_OPT_PLAYERSEL, -- done
MYBAGS_CMD_OPT_SCALE, -- done
MYBAGS_CMD_OPT_STRATA, -- done
MYBAGS_CMD_OPT_ANCHOR, -- done
MYBAGS_CMD_OPT_TOGGLE, -- done
MYBAGS_CMD_RESET, -- done
MYBAGS_CMD_OPT_GRAPHICS, -- skip
MYBAGS_CMD_OPT_SLOTCOLOR, -- skip
}
]]

View File

@ -2,6 +2,7 @@ local MYINVENTORY_DEFAULT_OPTIONS = {
["Columns"] = 12, ["Columns"] = 12,
["Replace"] = true, ["Replace"] = true,
["Bag"] = "bar", ["Bag"] = "bar",
["BagSort"] = true,
["Graphics"] = "art", ["Graphics"] = "art",
["Count"] = "free", ["Count"] = "free",
["HlItems"] = true, ["HlItems"] = true,
@ -37,10 +38,10 @@ local MYINVENTORY_DEFAULT_OPTIONS = {
["_RIGHTOFFSET"] = 3, ["_RIGHTOFFSET"] = 3,
} }
MyInventory = LibStub("AceAddon-3.0"):NewAddon("MyInventory", "AceConsole-3.0", "AceHook-3.0", "AceEvent-3.0", "MyBagsCore-1.0") MyInventory = LibStub("AceAddon-3.0"):NewAddon("MyInventory", "AceConsole-3.0", "AceHook-3.0", "AceEvent-3.0", "MyBagsCore-1.1")
local MI_Dialog = LibStub("AceConfigDialog-3.0") local MI_Dialog = LibStub("AceConfigDialog-3.0")
local MI_Cmd = LibStub("AceConfigCmd-3.0") local MI_Cmd = LibStub("AceConfigCmd-3.0")
local MB_Core = LibStub("MyBagsCore-1.0") local MB_Core = LibStub("MyBagsCore-1.1")
local L = LibStub("AceLocale-3.0"):GetLocale("MyBags") local L = LibStub("AceLocale-3.0"):GetLocale("MyBags")
@ -55,6 +56,7 @@ function MyInventory:OnInitialize()
self.anchorOffsetX = -5 self.anchorOffsetX = -5
self.anchorOffsetY = 100 self.anchorOffsetY = 100
self.isBank = false self.isBank = false
self.version = MB_Core:GetCoreVersion()
self.db = LibStub("AceDB-3.0"):New("MyInventoryDB") self.db = LibStub("AceDB-3.0"):New("MyInventoryDB")
local prof = self.db:GetCurrentProfile() local prof = self.db:GetCurrentProfile()
if self.db.profiles[prof] and self.db.profiles[prof]["Columns"] and self.db.profiles[prof]["Columns"] > 0 then if self.db.profiles[prof] and self.db.profiles[prof]["Columns"] and self.db.profiles[prof]["Columns"] > 0 then
@ -136,6 +138,17 @@ function MyInventory:OnInitialize()
MyInventory:SetBagDisplay(val) MyInventory:SetBagDisplay(val)
end end
}, },
bagsort = {
type = "toggle",
name = "BagSort",
desc = "Toggle bag sort button",
get = function(info)
return MyInventory.IsSet("BagSort")
end,
set = function(info, val)
MyInventory:SetBagSort()
end,
},
back = { back = {
type = "select", type = "select",
name = "Background", name = "Background",
@ -443,7 +456,6 @@ function MyInventory:UserDropDown_Initialize()
local chars = MyInventory:GetSortedCharList(MyInventory.GetOpt("Sort")) local chars = MyInventory:GetSortedCharList(MyInventory.GetOpt("Sort"))
local frame = this:GetParent():GetParent() local frame = this:GetParent():GetParent()
local selectedValue = UIDropDownMenu_GetSelectedValue(this) local selectedValue = UIDropDownMenu_GetSelectedValue(this)
local i
for i = 1, getn(chars) do for i = 1, getn(chars) do
local info = { local info = {
@ -531,9 +543,7 @@ function MyInventory:GetInfoFunc()
if IsAddOnLoaded("DataStore_Containers") then if IsAddOnLoaded("DataStore_Containers") then
return self.GetInfoDataStore return self.GetInfoDataStore
end end
if IsAddOnLoaded("MyBagsCache") then
return self.GetInfoMyBagsCache
end
return self.GetInfoNone return self.GetInfoNone
end end
@ -557,7 +567,6 @@ end
function MyInventory:GetSortedCharList(sorttype, realm) function MyInventory:GetSortedCharList(sorttype, realm)
if IsAddOnLoaded("DataStore_Containers") then if IsAddOnLoaded("DataStore_Containers") then
local realmname
local realmlist = {} local realmlist = {}
local realmcount = 0 local realmcount = 0
if not realm then if not realm then
@ -610,46 +619,4 @@ function MyInventory:GetSortedCharList(sorttype, realm)
until swapped == 0 until swapped == 0
return result return result
end end
if IsAddOnLoaded("MyBagsCache") then
local MBC = MyBagsCache
local result = {}
local idx = 0
local cache = MBC.db.global
for index, value in pairs(cache) do
local charName, realmID = self:SplitString(index)
if index ~= "profiles" then
if (not realm or realmID == realm) then
idx = idx + 1
result[idx] = index
end
end
end
local swapped
local q, w
local x_time, y_time;
local max = idx - 1;
repeat
swapped = 0
for i = 1, max do
q = result[i]
w = result[i+1]
if (not MBC.db.global[q].updateTime) then
x_time = 0
else
x_time = MBC.db.global[q].updateTime
end
if (not MBC.db.global[w].updateTime) then
y_time = 0
else
y_time = MBC.db.global[w].updateTime
end
if self:SortChars(q, w, x_time, y_time, sorttype) then
result[i] = w
result[i+1] = q
swapped = 1
end
end
until swapped == 0
return result
end
end end

View File

@ -1,7 +1,6 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/" <Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/FrameXML/UI.xsd"> xsi:schemaLocation="http://www.blizzard.com/wow/ui/FrameXML/UI.xsd">
<Script file="locals.lua"/>
<Script file="MyInventory.lua"/> <Script file="MyInventory.lua"/>
<Frame name="MyInventoryAnchorFrame" hidden="false" movable="true" parent="UIParent"> <Frame name="MyInventoryAnchorFrame" hidden="false" movable="true" parent="UIParent">
<Size> <Size>

View File

@ -1,36 +0,0 @@
-- Version : English - Ramble
MYINVENTORY_NAME = "MyInventory"
MYINVENTORY_DESCRIPTION = "All in one inventory mod"
MYINVENTORYFRAME_TITLE = "Inventory"
-- SLASHCOMMANDS
--[[
MYINVENTORY_COMMANDS = {"/myinventory", "/mi"}
MYINVENTORY_CMD_OPTIONS = {
MYBAGS_CMD_OPT_TOGGLE, -- done
MYBAGS_CMD_OPT_FREEZE, -- done
MYBAGS_CMD_OPT_NOESC, -- done
MYBAGS_CMD_OPT_COLUMNS, -- done
MYBAGS_CMD_OPT_REPLACE, -- done
MYBAGS_CMD_OPT_BAG, -- done
MYBAGS_CMD_OPT_GRAPHICS, -- ????
MYBAGS_CMD_OPT_HIGHLIGHT, -- done
MYBAGS_CMD_OPT_LOCK, -- done
MYBAGS_CMD_OPT_TITLE, -- done
MYBAGS_CMD_OPT_CASH, -- done
MYBAGS_CMD_OPT_BUTTONS, -- done
MYBAGS_CMD_OPT_AIOI, -- done
MYBAGS_CMD_OPT_REVERSE, -- done
MYBAGS_CMD_OPT_BORDER, -- done
MYBAGS_CMD_OPT_PLAYERSEL, -- done
MYBAGS_CMD_OPT_COUNT,
MYBAGS_CMD_OPT_SCALE,
MYBAGS_CMD_OPT_STRATA,
MYBAGS_CMD_OPT_ANCHOR,
MYBAGS_CMD_RESET,
MYBAGS_CMD_OPT_SLOTCOLOR,
MYBAGS_CMD_OPT_COMPANION,
}
]]