Browse Source

Merge 60b279ed6f into 8a6c8fd3a2

pull/27/merge
Kian Soltani 5 months ago committed by GitHub
parent
commit
cfdd91c359
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 4
      .gitignore
  2. 30
      TradeSkillMaster/Core/Mover.lua
  3. 656
      TradeSkillMaster/Data/Conversions.lua
  4. 3
      TradeSkillMaster_Crafting/Locale/enUS.lua
  5. 22
      TradeSkillMaster_Crafting/Modules/CraftingGUI.lua
  6. 2
      TradeSkillMaster_Crafting/Modules/Gather.lua
  7. 738
      TradeSkillMaster_Crafting/Modules/Inventory.lua
  8. 4
      TradeSkillMaster_ItemTracker/Locale/enUS.lua
  9. 111
      TradeSkillMaster_ItemTracker/Modules/data.lua
  10. 87
      TradeSkillMaster_ItemTracker/TradeSkillMaster_ItemTracker.lua

4
.gitignore vendored

@ -4,4 +4,6 @@
.install
.lua/*
.vscode
.idea
.idea
deploy.bat
claude.md

30
TradeSkillMaster/Core/Mover.lua

@ -14,9 +14,23 @@ local AceGUI = LibStub("AceGUI-3.0") -- load the AceGUI libraries
local lib = TSMAPI
local bankType
local ascensionBankType -- Ascension WoW: "personal", "realm", or nil for real guild bank
local fullMoves, splitMoves, bagState = {}, {}, {}
local callbackMsg = {}
-- Ascension WoW: Detect bank type based on first tab name
local function GetAscensionBankType()
local numTabs = GetNumGuildBankTabs()
if numTabs == 0 then return nil end
local firstTabName = GetGuildBankTabInfo(1)
if firstTabName == "Personal Bank" then
return "personal"
elseif firstTabName == "Realm Bank" then
return "realm"
end
return nil
end
-- this is a set of wrapper functions so that I can switch
-- between guildbank and bank function easily (taken from warehousing)
@ -42,6 +56,7 @@ function TSM:OnEnable()
TSM:RegisterEvent("GUILDBANKFRAME_OPENED", function(event)
bankType = "guildbank"
ascensionBankType = GetAscensionBankType() -- Ascension WoW: detect personal/realm bank
end)
TSM:RegisterEvent("BANKFRAME_OPENED", function(event)
@ -50,6 +65,7 @@ function TSM:OnEnable()
TSM:RegisterEvent("GUILDBANKFRAME_CLOSED", function(event, addon)
bankType = nil
ascensionBankType = nil -- Ascension WoW: reset
TSM:UnregisterEvent("GUILDBANKBAGSLOTS_CHANGED")
end)
@ -402,13 +418,23 @@ function TSM.generateMoves(includeSoulbound)
if next(fullMoves) ~= nil then
if bankType == "guildbank" then
TSMAPI:CreateTimeDelay("moveItem", 0.05, TSM.moveItem, 0.35)
-- Ascension WoW: Personal/Realm banks don't need slow delays like real guild banks
if ascensionBankType then
TSMAPI:CreateTimeDelay("moveItem", 0.05, TSM.moveItem, 0.05)
else
TSMAPI:CreateTimeDelay("moveItem", 0.05, TSM.moveItem, 0.35)
end
else
TSMAPI:CreateTimeDelay("moveItem", 0.05, TSM.moveItem, 0.05)
end
elseif next(splitMoves) ~= nil then
if bankType == "guildbank" then
TSMAPI:CreateTimeDelay("moveSplitItem", 0.05, TSM.moveSplitItem, 0.75)
-- Ascension WoW: Personal/Realm banks don't need slow delays like real guild banks
if ascensionBankType then
TSMAPI:CreateTimeDelay("moveSplitItem", 0.05, TSM.moveSplitItem, 0.1)
else
TSMAPI:CreateTimeDelay("moveSplitItem", 0.05, TSM.moveSplitItem, 0.75)
end
else
TSMAPI:CreateTimeDelay("moveSplitItem", 0.05, TSM.moveSplitItem, 0.4)
end

656
TradeSkillMaster/Data/Conversions.lua

@ -12,284 +12,284 @@ local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster") -- loads the lo
local conversions = {
-- Epic WotLK gems
["item:36919:0:0:0:0:0:0"] = { -- Cardinal Ruby
["item:36910:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
},
["item:36922:0:0:0:0:0:0"] = { -- King's Amber
["item:36910:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
},
["item:36925:0:0:0:0:0:0"] = { -- Majestic Zircon
["item:36910:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
},
["item:36928:0:0:0:0:0:0"] = { -- Dreadstone
["item:36910:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
},
["item:36931:0:0:0:0:0:0"] = { -- Ametrine
["item:36910:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
},
["item:36934:0:0:0:0:0:0"] = { -- Eye of Zul
["item:36910:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
},
-- ["item:36919:0:0:0:0:0:0"] = { -- Cardinal Ruby
-- ["item:36910:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
-- },
-- ["item:36922:0:0:0:0:0:0"] = { -- King's Amber
-- ["item:36910:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
-- },
-- ["item:36925:0:0:0:0:0:0"] = { -- Majestic Zircon
-- ["item:36910:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
-- },
-- ["item:36928:0:0:0:0:0:0"] = { -- Dreadstone
-- ["item:36910:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
-- },
-- ["item:36931:0:0:0:0:0:0"] = { -- Ametrine
-- ["item:36910:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
-- },
-- ["item:36934:0:0:0:0:0:0"] = { -- Eye of Zul
-- ["item:36910:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
-- },
-- common pigments (inks)
["item:39151:0:0:0:0:0:0"] = { -- Alabaster Pigment (Ivory / Moonglow Ink)
["item:765:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:2447:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:2449:0:0:0:0:0:0"] = {rate=.6, source="mill"},
},
["item:39343:0:0:0:0:0:0"] = { -- Azure Pigment (Ink of the Sea)
["item:39969:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:36904:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:36907:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:36901:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:39970:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:37921:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:36905:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:36906:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:36903:0:0:0:0:0:0"] = {rate=.6, source="mill"},
},
["item:61979:0:0:0:0:0:0"] = { -- Ashen Pigment (Blackfallow Ink)
["item:52983:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:52984:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:52985:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:52986:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:52987:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:52988:0:0:0:0:0:0"] = {rate=.6, source="mill"},
},
["item:39334:0:0:0:0:0:0"] = { -- Dusky Pigment (Midnight Ink)
["item:785:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:2450:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:2452:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:2453:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:3820:0:0:0:0:0:0"] = {rate=.6, source="mill"},
},
["item:39339:0:0:0:0:0:0"] = { -- Emerald Pigment (Jadefire Ink)
["item:3818:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:3821:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:3358:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:3819:0:0:0:0:0:0"] = {rate=.6, source="mill"},
},
["item:39338:0:0:0:0:0:0"] = { -- Golden Pigment (Lion's Ink)
["item:3355:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:3369:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:3356:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:3357:0:0:0:0:0:0"] = {rate=.6, source="mill"},
},
["item:39342:0:0:0:0:0:0"] = { -- Nether Pigment (Ethereal Ink)
["item:22786:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:22785:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:22789:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:22787:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:22790:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:22793:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:22791:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:22792:0:0:0:0:0:0"] = {rate=.6, source="mill"},
},
["item:79251:0:0:0:0:0:0"] = { -- Shadow Pigment (Ink of Dreams)
["item:72237:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:72234:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:79010:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:72235:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:79011:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:89639:0:0:0:0:0:0"] = {rate=.5, source="mill"},
},
["item:39341:0:0:0:0:0:0"] = { -- Silvery Pigment (Shimmering Ink)
["item:13464:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:13463:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:13465:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:13466:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:13467:0:0:0:0:0:0"] = {rate=.6, source="mill"},
},
["item:39340:0:0:0:0:0:0"] = { -- Violet Pigment (Celestial Ink)
["item:4625:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:8831:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:8838:0:0:0:0:0:0"] = {rate=.5, source="mill"},
["item:8839:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:8845:0:0:0:0:0:0"] = {rate=.6, source="mill"},
["item:8846:0:0:0:0:0:0"] = {rate=.6, source="mill"},
},
-- ["item:39151:0:0:0:0:0:0"] = { -- Alabaster Pigment (Ivory / Moonglow Ink)
-- ["item:765:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:2447:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:2449:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- },
-- ["item:39343:0:0:0:0:0:0"] = { -- Azure Pigment (Ink of the Sea)
-- ["item:39969:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:36904:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:36907:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:36901:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:39970:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:37921:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:36905:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:36906:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:36903:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- },
-- ["item:61979:0:0:0:0:0:0"] = { -- Ashen Pigment (Blackfallow Ink)
-- ["item:52983:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:52984:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:52985:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:52986:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:52987:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:52988:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- },
-- ["item:39334:0:0:0:0:0:0"] = { -- Dusky Pigment (Midnight Ink)
-- ["item:785:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:2450:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:2452:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:2453:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:3820:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- },
-- ["item:39339:0:0:0:0:0:0"] = { -- Emerald Pigment (Jadefire Ink)
-- ["item:3818:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:3821:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:3358:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:3819:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- },
-- ["item:39338:0:0:0:0:0:0"] = { -- Golden Pigment (Lion's Ink)
-- ["item:3355:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:3369:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:3356:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:3357:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- },
-- ["item:39342:0:0:0:0:0:0"] = { -- Nether Pigment (Ethereal Ink)
-- ["item:22786:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:22785:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:22789:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:22787:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:22790:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:22793:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:22791:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:22792:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- },
-- ["item:79251:0:0:0:0:0:0"] = { -- Shadow Pigment (Ink of Dreams)
-- ["item:72237:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:72234:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:79010:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:72235:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:79011:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:89639:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- },
-- ["item:39341:0:0:0:0:0:0"] = { -- Silvery Pigment (Shimmering Ink)
-- ["item:13464:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:13463:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:13465:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:13466:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:13467:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- },
-- ["item:39340:0:0:0:0:0:0"] = { -- Violet Pigment (Celestial Ink)
-- ["item:4625:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:8831:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:8838:0:0:0:0:0:0"] = {rate=.5, source="mill"},
-- ["item:8839:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:8845:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- ["item:8846:0:0:0:0:0:0"] = {rate=.6, source="mill"},
-- },
-- rare pigments (inks)
["item:43109:0:0:0:0:0:0"] = { -- Icy Pigment (Snowfall Ink)
["item:39969:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:36904:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:36907:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:36901:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:39970:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:37921:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:36905:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:36906:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:36903:0:0:0:0:0:0"] = {rate=.1, source="mill"},
},
["item:61980:0:0:0:0:0:0"] = { -- Burning Embers (Inferno Ink)
["item:52983:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:52984:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:52985:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:52986:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:52987:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:52988:0:0:0:0:0:0"] = {rate=.1, source="mill"},
},
["item:43104:0:0:0:0:0:0"] = { -- Burnt Pigment (Dawnstar Ink)
["item:3356:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:3357:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:3369:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:3355:0:0:0:0:0:0"] = {rate=.05, source="mill"},
},
["item:43108:0:0:0:0:0:0"] = { -- Ebon Pigment (Darkflame Ink)
["item:22792:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:22790:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:22791:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:22793:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:22786:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:22785:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:22787:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:22789:0:0:0:0:0:0"] = {rate=.05, source="mill"},
},
["item:43105:0:0:0:0:0:0"] = { -- Indigo Pigment (Royal Ink)
["item:3358:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:3819:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:3821:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:3818:0:0:0:0:0:0"] = {rate=.05, source="mill"},
},
["item:79253:0:0:0:0:0:0"] = { -- Misty Pigment (Starlight Ink)
["item:72237:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:72234:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:79010:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:72235:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:79011:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:89639:0:0:0:0:0:0"] = {rate=.05, source="mill"},
},
["item:43106:0:0:0:0:0:0"] = { -- Ruby Pigment (Fiery Ink)
["item:4625:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:8838:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:8831:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:8845:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:8846:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:8839:0:0:0:0:0:0"] = {rate=.1, source="mill"},
},
["item:43107:0:0:0:0:0:0"] = { -- Sapphire Pigment (Ink of the Sky)
["item:13463:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:13464:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:13465:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:13466:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:13467:0:0:0:0:0:0"] = {rate=.1, source="mill"},
},
["item:43103:0:0:0:0:0:0"] = { -- Verdant Pigment (Hunter's Ink)
["item:2453:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:3820:0:0:0:0:0:0"] = {rate=.1, source="mill"},
["item:2450:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:785:0:0:0:0:0:0"] = {rate=.05, source="mill"},
["item:2452:0:0:0:0:0:0"] = {rate=.05, source="mill"},
},
-- -- rare pigments (inks)
-- ["item:43109:0:0:0:0:0:0"] = { -- Icy Pigment (Snowfall Ink)
-- ["item:39969:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:36904:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:36907:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:36901:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:39970:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:37921:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:36905:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:36906:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:36903:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- },
-- ["item:61980:0:0:0:0:0:0"] = { -- Burning Embers (Inferno Ink)
-- ["item:52983:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:52984:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:52985:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:52986:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:52987:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:52988:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- },
-- ["item:43104:0:0:0:0:0:0"] = { -- Burnt Pigment (Dawnstar Ink)
-- ["item:3356:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:3357:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:3369:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:3355:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- },
-- ["item:43108:0:0:0:0:0:0"] = { -- Ebon Pigment (Darkflame Ink)
-- ["item:22792:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:22790:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:22791:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:22793:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:22786:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:22785:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:22787:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:22789:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- },
-- ["item:43105:0:0:0:0:0:0"] = { -- Indigo Pigment (Royal Ink)
-- ["item:3358:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:3819:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:3821:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:3818:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- },
-- ["item:79253:0:0:0:0:0:0"] = { -- Misty Pigment (Starlight Ink)
-- ["item:72237:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:72234:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:79010:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:72235:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:79011:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:89639:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- },
-- ["item:43106:0:0:0:0:0:0"] = { -- Ruby Pigment (Fiery Ink)
-- ["item:4625:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:8838:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:8831:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:8845:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:8846:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:8839:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- },
-- ["item:43107:0:0:0:0:0:0"] = { -- Sapphire Pigment (Ink of the Sky)
-- ["item:13463:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:13464:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:13465:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:13466:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:13467:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- },
-- ["item:43103:0:0:0:0:0:0"] = { -- Verdant Pigment (Hunter's Ink)
-- ["item:2453:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:3820:0:0:0:0:0:0"] = {rate=.1, source="mill"},
-- ["item:2450:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:785:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- ["item:2452:0:0:0:0:0:0"] = {rate=.05, source="mill"},
-- },
--Vanilla Gems
["item:774:0:0:0:0:0:0"] = { -- malachite
["item:2770:0:0:0:0:0:0"] = {rate=.5, source="prospect"},
},
["item:818:0:0:0:0:0:0"] = { -- Tigerseye
["item:2770:0:0:0:0:0:0"] = {rate=.5, source="prospect"},
},
["item:1210:0:0:0:0:0:0"] = { -- Shadowgem
["item:2771:0:0:0:0:0:0"] = {rate=.4, source="prospect"},
["item:2770:0:0:0:0:0:0"] = {rate=.1, source="prospect"},
},
["item:1206:0:0:0:0:0:0"] = { -- Moss Agate
["item:2771:0:0:0:0:0:0"] = {rate=.3, source="prospect"},
},
["item:1705:0:0:0:0:0:0"] = { -- Lesser moonstone
["item:2771:0:0:0:0:0:0"] = {rate=.4, source="prospect"},
["item:2772:0:0:0:0:0:0"] = { rate=.3, source="prospect"},
},
["item:1529:0:0:0:0:0:0"] = { -- Jade
["item:2772:0:0:0:0:0:0"] = {rate=.4, source="prospect"},
["item:2771:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
},
["item:3864:0:0:0:0:0:0"] = { -- Citrine
["item:2772:0:0:0:0:0:0"] = {rate=.4, source="prospect"}, -- iron
["item:3858:0:0:0:0:0:0"] = {rate=.3, source="prospect"}, -- mith
["item:2771:0:0:0:0:0:0"] = {rate=.03, source="prospect"}, -- tin
},
["item:7909:0:0:0:0:0:0"] = { -- Aquamarine
["item:3858:0:0:0:0:0:0"] = {rate=.3, source="prospect"},
["item:2772:0:0:0:0:0:0"] = {rate=.05, source="prospect"},
["item:2771:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
},
["item:7910:0:0:0:0:0:0"] = { -- Star Ruby
["item:3858:0:0:0:0:0:0"] = {rate=.4, source="prospect"},
["item:10620:0:0:0:0:0:0"] = {rate=.1, source="prospect"},
["item:2772:0:0:0:0:0:0"] = {rate=.05, source="prospect"},
},
["item:12361:0:0:0:0:0:0"] = { -- Blue Sapphire
["item:10620:0:0:0:0:0:0"] = {rate=.3, source="prospect"},
["item:3858:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
},
["item:12799:0:0:0:0:0:0"] = { -- Large Opal
["item:10620:0:0:0:0:0:0"] = {rate =.3, source="prospect"}, -- thorium
["item:3858:0:0:0:0:0:0"] = {rate=.03, source="prospect"}, -- Mith
},
["item:12800:0:0:0:0:0:0"] = { -- Azerothian Diamond
["item:10620:0:0:0:0:0:0"] = {rate=.3, source="prospect"},
["item:3858:0:0:0:0:0:0"] = {rate=.02, source="prospect"},
},
["item:12364:0:0:0:0:0:0"] = { -- Huge Emerald
["item:10620:0:0:0:0:0:0"] = {rate=.3, source="prospect"},
["item:3858:0:0:0:0:0:0"] = {rate=.02, source="prospect"},
},
-- --Vanilla Gems
-- ["item:774:0:0:0:0:0:0"] = { -- malachite
-- ["item:2770:0:0:0:0:0:0"] = {rate=.5, source="prospect"},
-- },
-- ["item:818:0:0:0:0:0:0"] = { -- Tigerseye
-- ["item:2770:0:0:0:0:0:0"] = {rate=.5, source="prospect"},
-- },
-- ["item:1210:0:0:0:0:0:0"] = { -- Shadowgem
-- ["item:2771:0:0:0:0:0:0"] = {rate=.4, source="prospect"},
-- ["item:2770:0:0:0:0:0:0"] = {rate=.1, source="prospect"},
-- },
-- ["item:1206:0:0:0:0:0:0"] = { -- Moss Agate
-- ["item:2771:0:0:0:0:0:0"] = {rate=.3, source="prospect"},
-- },
-- ["item:1705:0:0:0:0:0:0"] = { -- Lesser moonstone
-- ["item:2771:0:0:0:0:0:0"] = {rate=.4, source="prospect"},
-- ["item:2772:0:0:0:0:0:0"] = { rate=.3, source="prospect"},
-- },
-- ["item:1529:0:0:0:0:0:0"] = { -- Jade
-- ["item:2772:0:0:0:0:0:0"] = {rate=.4, source="prospect"},
-- ["item:2771:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
-- },
-- ["item:3864:0:0:0:0:0:0"] = { -- Citrine
-- ["item:2772:0:0:0:0:0:0"] = {rate=.4, source="prospect"}, -- iron
-- ["item:3858:0:0:0:0:0:0"] = {rate=.3, source="prospect"}, -- mith
-- ["item:2771:0:0:0:0:0:0"] = {rate=.03, source="prospect"}, -- tin
-- },
-- ["item:7909:0:0:0:0:0:0"] = { -- Aquamarine
-- ["item:3858:0:0:0:0:0:0"] = {rate=.3, source="prospect"},
-- ["item:2772:0:0:0:0:0:0"] = {rate=.05, source="prospect"},
-- ["item:2771:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
-- },
-- ["item:7910:0:0:0:0:0:0"] = { -- Star Ruby
-- ["item:3858:0:0:0:0:0:0"] = {rate=.4, source="prospect"},
-- ["item:10620:0:0:0:0:0:0"] = {rate=.1, source="prospect"},
-- ["item:2772:0:0:0:0:0:0"] = {rate=.05, source="prospect"},
-- },
-- ["item:12361:0:0:0:0:0:0"] = { -- Blue Sapphire
-- ["item:10620:0:0:0:0:0:0"] = {rate=.3, source="prospect"},
-- ["item:3858:0:0:0:0:0:0"] = {rate=.03, source="prospect"},
-- },
-- ["item:12799:0:0:0:0:0:0"] = { -- Large Opal
-- ["item:10620:0:0:0:0:0:0"] = {rate =.3, source="prospect"}, -- thorium
-- ["item:3858:0:0:0:0:0:0"] = {rate=.03, source="prospect"}, -- Mith
-- },
-- ["item:12800:0:0:0:0:0:0"] = { -- Azerothian Diamond
-- ["item:10620:0:0:0:0:0:0"] = {rate=.3, source="prospect"},
-- ["item:3858:0:0:0:0:0:0"] = {rate=.02, source="prospect"},
-- },
-- ["item:12364:0:0:0:0:0:0"] = { -- Huge Emerald
-- ["item:10620:0:0:0:0:0:0"] = {rate=.3, source="prospect"},
-- ["item:3858:0:0:0:0:0:0"] = {rate=.02, source="prospect"},
-- },
-- uncommon gems
["item:23117:0:0:0:0:0:0"] = { -- Azure Moonstone
["item:23424:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
["item:23425:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
},
["item:23077:0:0:0:0:0:0"] = { -- Blood Garnet
["item:23424:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
["item:23425:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
},
["item:23079:0:0:0:0:0:0"] = { -- Deep Peridot
["item:23424:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
["item:23425:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
},
["item:21929:0:0:0:0:0:0"] = { -- Flame Spessarite
["item:23424:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
["item:23425:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
},
["item:23112:0:0:0:0:0:0"] = { -- Golden Draenite
["item:23424:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
["item:23425:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
},
["item:23107:0:0:0:0:0:0"] = { -- Shadow Draenite
["item:23424:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
["item:23425:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
},
["item:36917:0:0:0:0:0:0"] = { -- Bloodstone
["item:36909:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
["item:36912:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
["item:36910:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
},
["item:36923:0:0:0:0:0:0"] = { -- Chalcedony
["item:36909:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
["item:36912:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
["item:36910:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
},
["item:36932:0:0:0:0:0:0"] = { -- Dark Jade
["item:36909:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
["item:36912:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
["item:36910:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
},
["item:36929:0:0:0:0:0:0"] = { -- Huge Citrine
["item:36909:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
["item:36912:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
["item:36910:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
},
["item:36926:0:0:0:0:0:0"] = { -- Shadow Crystal
["item:36909:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
["item:36912:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
["item:36910:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
},
["item:36920:0:0:0:0:0:0"] = { -- Sun Crystal
["item:36909:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
["item:36912:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
["item:36910:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
},
-- -- uncommon gems
-- ["item:23117:0:0:0:0:0:0"] = { -- Azure Moonstone
-- ["item:23424:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- ["item:23425:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- },
-- ["item:23077:0:0:0:0:0:0"] = { -- Blood Garnet
-- ["item:23424:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- ["item:23425:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- },
-- ["item:23079:0:0:0:0:0:0"] = { -- Deep Peridot
-- ["item:23424:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- ["item:23425:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- },
-- ["item:21929:0:0:0:0:0:0"] = { -- Flame Spessarite
-- ["item:23424:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- ["item:23425:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- },
-- ["item:23112:0:0:0:0:0:0"] = { -- Golden Draenite
-- ["item:23424:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- ["item:23425:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- },
-- ["item:23107:0:0:0:0:0:0"] = { -- Shadow Draenite
-- ["item:23424:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- ["item:23425:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- },
-- ["item:36917:0:0:0:0:0:0"] = { -- Bloodstone
-- ["item:36909:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
-- ["item:36912:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- ["item:36910:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
-- },
-- ["item:36923:0:0:0:0:0:0"] = { -- Chalcedony
-- ["item:36909:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
-- ["item:36912:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- ["item:36910:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
-- },
-- ["item:36932:0:0:0:0:0:0"] = { -- Dark Jade
-- ["item:36909:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
-- ["item:36912:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- ["item:36910:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
-- },
-- ["item:36929:0:0:0:0:0:0"] = { -- Huge Citrine
-- ["item:36909:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
-- ["item:36912:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- ["item:36910:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
-- },
-- ["item:36926:0:0:0:0:0:0"] = { -- Shadow Crystal
-- ["item:36909:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
-- ["item:36912:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- ["item:36910:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
-- },
-- ["item:36920:0:0:0:0:0:0"] = { -- Sun Crystal
-- ["item:36909:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
-- ["item:36912:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
-- ["item:36910:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
-- },
-- ["item:52182:0:0:0:0:0:0"] = { -- Jasper
-- ["item:53038:0:0:0:0:0:0"] = {rate=.25, source="prospect"},
-- ["item:52185:0:0:0:0:0:0"] = {rate=.2, source="prospect"},
@ -358,60 +358,60 @@ local conversions = {
-- },
--Rare Gems
["item:23440:0:0:0:0:0:0"] = { -- Dawnstone
["item:23424:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
["item:23425:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
},
["item:23436:0:0:0:0:0:0"] = { -- Living Ruby
["item:23424:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
["item:23425:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
},
["item:23441:0:0:0:0:0:0"] = { -- Nightseye
["item:23424:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
["item:23425:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
},
["item:23439:0:0:0:0:0:0"] = { -- Noble Topaz
["item:23424:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
["item:23425:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
},
["item:23438:0:0:0:0:0:0"] = { -- Star of Elune
["item:23424:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
["item:23425:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
},
["item:23437:0:0:0:0:0:0"] = { -- Talasite
["item:23424:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
["item:23425:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
},
["item:36921:0:0:0:0:0:0"] = { -- Autumn's Glow
["item:36909:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
["item:36912:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
["item:36910:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
},
["item:36933:0:0:0:0:0:0"] = { -- Forest Emerald
["item:36909:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
["item:36912:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
["item:36910:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
},
["item:36930:0:0:0:0:0:0"] = { -- Monarch Topaz
["item:36909:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
["item:36912:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
["item:36910:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
},
["item:36918:0:0:0:0:0:0"] = { -- Scarlet Ruby
["item:36909:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
["item:36912:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
["item:36910:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
},
["item:36924:0:0:0:0:0:0"] = { -- Sky Sapphire
["item:36909:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
["item:36912:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
["item:36910:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
},
["item:36927:0:0:0:0:0:0"] = { -- Twilight Opal
["item:36909:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
["item:36912:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
["item:36910:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
},
-- ["item:23440:0:0:0:0:0:0"] = { -- Dawnstone
-- ["item:23424:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
-- ["item:23425:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- },
-- ["item:23436:0:0:0:0:0:0"] = { -- Living Ruby
-- ["item:23424:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
-- ["item:23425:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- },
-- ["item:23441:0:0:0:0:0:0"] = { -- Nightseye
-- ["item:23424:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
-- ["item:23425:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- },
-- ["item:23439:0:0:0:0:0:0"] = { -- Noble Topaz
-- ["item:23424:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
-- ["item:23425:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- },
-- ["item:23438:0:0:0:0:0:0"] = { -- Star of Elune
-- ["item:23424:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
-- ["item:23425:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- },
-- ["item:23437:0:0:0:0:0:0"] = { -- Talasite
-- ["item:23424:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
-- ["item:23425:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- },
-- ["item:36921:0:0:0:0:0:0"] = { -- Autumn's Glow
-- ["item:36909:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
-- ["item:36912:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- ["item:36910:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- },
-- ["item:36933:0:0:0:0:0:0"] = { -- Forest Emerald
-- ["item:36909:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
-- ["item:36912:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- ["item:36910:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- },
-- ["item:36930:0:0:0:0:0:0"] = { -- Monarch Topaz
-- ["item:36909:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
-- ["item:36912:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- ["item:36910:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- },
-- ["item:36918:0:0:0:0:0:0"] = { -- Scarlet Ruby
-- ["item:36909:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
-- ["item:36912:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- ["item:36910:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- },
-- ["item:36924:0:0:0:0:0:0"] = { -- Sky Sapphire
-- ["item:36909:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
-- ["item:36912:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- ["item:36910:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- },
-- ["item:36927:0:0:0:0:0:0"] = { -- Twilight Opal
-- ["item:36909:0:0:0:0:0:0"] = {rate=.01, source="prospect"},
-- ["item:36912:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- ["item:36910:0:0:0:0:0:0"] = {rate=.04, source="prospect"},
-- },
-- ["item:52192:0:0:0:0:0:0"] = { -- Dream Emerald
-- ["item:53038:0:0:0:0:0:0"] = {rate=.08, source="prospect"},
-- ["item:52185:0:0:0:0:0:0"] = {rate=.05, source="prospect"},

3
TradeSkillMaster_Crafting/Locale/enUS.lua

@ -168,6 +168,9 @@ L["Total"] = true
L["Vendor"] = true
L["Visit Bank"] = true
L["Visit Guild Bank"] = true
L["Visit Personal Bank"] = true
L["Visit Realm Bank"] = true
L["Realm Bank"] = true
L["Visit Vendor"] = true
L["Warning: The min restock quantity must be lower than the max restock quantity."] = true
L["When you click on the \"Restock Queue\" button enough of each craft will be queued so that you have this maximum number on hand. For example, if you have 2 of item X on hand and you set this to 4, 2 more will be added to the craft queue."] = true

22
TradeSkillMaster_Crafting/Modules/CraftingGUI.lua

@ -2041,7 +2041,12 @@ function GUI:CreateGatheringSelectionFrame(parent)
dropdown:SetMultiselect(true)
dropdown:SetCallback("OnValueChanged", function(_, _, profession, value)
private.gather.professions[profession] = value or nil
GUI:UpdateGatherSelectionWindow()
-- Only update the button state, don't rebuild the dropdown list
if next(private.gather.professions) then
frame.gatherButton:Enable()
else
frame.gatherButton:Disable()
end
end)
frame.professionDropdown = dropdown
@ -2622,8 +2627,19 @@ function GUI:GatheringEventHandler(event)
if not GUI.gatheringFrame or not GUI.gatheringFrame:IsShown() then return end
if event == "GUILDBANKFRAME_OPENED" then
private.currentSource = UnitName("player")
private.currentTask = L["Visit Guild Bank"]
-- Ascension WoW: Detect bank type based on first tab name
local numTabs = GetNumGuildBankTabs()
local firstTabName = numTabs > 0 and GetGuildBankTabInfo(1) or nil
if firstTabName == "Personal Bank" then
private.currentSource = UnitName("player")
private.currentTask = L["Visit Personal Bank"]
elseif firstTabName == "Realm Bank" then
private.currentSource = L["Realm Bank"]
private.currentTask = L["Visit Realm Bank"]
else
private.currentSource = UnitName("player")
private.currentTask = L["Visit Guild Bank"]
end
elseif event == "GUILDBANKFRAME_CLOSED" then
private.currentSource = nil
private.currentTask = nil

2
TradeSkillMaster_Crafting/Modules/Gather.lua

@ -34,7 +34,7 @@ function Gather:gatherItems(source, task)
if source == L["Vendor"] then
Gather:BuyFromMerchant(items)
elseif source == UnitName("player") and (task == L["Visit Bank"] or task == L["Visit Guild Bank"]) then
elseif (source == UnitName("player") or source == L["Realm Bank"]) and (task == L["Visit Bank"] or task == L["Visit Guild Bank"] or task == L["Visit Personal Bank"] or task == L["Visit Realm Bank"]) then
Gather:GatherBank(items)
elseif source == UnitName("player") and task == L["Mail Items"] then
Gather:MailItems(items)

738
TradeSkillMaster_Crafting/Modules/Inventory.lua

@ -1,340 +1,400 @@
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Crafting --
-- http://www.curse.com/addons/wow/tradeskillmaster_crafting --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- load the parent file (TSM) into a local variable and register this file as a module
local TSM = select(2, ...)
local Inventory = TSM:NewModule("Inventory", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Crafting") -- loads the localization table
-- gets the number of an item in the current player's bags
function Inventory:GetPlayerBagNum(itemString)
if not itemString then return end
if TSMAPI.SOULBOUND_MATS[itemString] then
return GetItemCount(itemString)
else
local bags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", UnitName("player")) or {}
return bags and bags[itemString] or 0
end
end
function Inventory:GetTotals()
local bagTotal, auctionTotal, otherTotal, total = {}, {}, {}, {}
for _, player in pairs(TSMAPI:ModuleAPI("ItemTracker", "playerlist") or {}) do
if player == UnitName("player") or not TSM.db.global.ignoreCharacters[player] then
local bags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", player) or {}
local bank = TSMAPI:ModuleAPI("ItemTracker", "playerbank", player) or {}
local mail = TSMAPI:ModuleAPI("ItemTracker", "playermail", player) or {}
local auctions = TSMAPI:ModuleAPI("ItemTracker", "playerauctions", player) or {}
for itemString, quantity in pairs(bags) do
if player == UnitName("player") then
bagTotal[itemString] = (bagTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
else
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
end
for itemString, quantity in pairs(bank) do
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
for itemString, quantity in pairs(mail) do
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
for itemString, quantity in pairs(auctions) do
auctionTotal[itemString] = (auctionTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
end
end
for itemString in pairs(TSMAPI.SOULBOUND_MATS) do
local bagNum = GetItemCount(itemString)
local bankNum = GetItemCount(itemString, true) - GetItemCount(itemString)
bagTotal[itemString] = (bagTotal[itemString] or 0) + bagNum
otherTotal[itemString] = (otherTotal[itemString] or 0) + bankNum
total[itemString] = (total[itemString] or 0) + bagNum + bankNum
end
-- add gbank counts of all non-ignored guilds
for _, guild in pairs(TSMAPI:ModuleAPI("ItemTracker", "guildlist") or {}) do
if not TSM.db.global.ignoreGuilds[guild] then
local gbank = TSMAPI:ModuleAPI("ItemTracker", "guildbank", guild) or {}
for itemString, quantity in pairs(gbank) do
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
end
end
return bagTotal, auctionTotal, otherTotal, total
end
-- gets the total number of some item that they have
function Inventory:GetTotalQuantity(itemString)
if not itemString then return 0 end
local count = 0
-- add bags/bank/mail/auction counts of all non-ignored characters (always including current character)
for _, player in pairs(TSMAPI:ModuleAPI("ItemTracker", "playerlist") or {}) do
if player == UnitName("player") or not TSM.db.global.ignoreCharacters[player] then
local bags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", player) or {}
local bank = TSMAPI:ModuleAPI("ItemTracker", "playerbank", player) or {}
local mail = TSMAPI:ModuleAPI("ItemTracker", "playermail", player) or {}
local auctions = TSMAPI:ModuleAPI("ItemTracker", "playerauctions", player) or {}
count = count + (bags[itemString] or 0)
count = count + (bank[itemString] or 0)
count = count + (mail[itemString] or 0)
count = count + (auctions[itemString] or 0)
end
end
-- add gbank counts of all non-ignored guilds
for _, guild in pairs(TSMAPI:ModuleAPI("ItemTracker", "guildlist") or {}) do
if not TSM.db.global.ignoreGuilds[guild] then
local bank = TSMAPI:ModuleAPI("ItemTracker", "guildbank", guild) or {}
count = count + (bank[itemString] or 0)
end
end
if TSMAPI.SOULBOUND_MATS[itemString] then
count = count + GetItemCount(itemString, true)
end
return count
end
function Inventory:GetItemSources(crafter, neededMats)
if not neededMats then return end
local sources = {}
local gbank = {}
local next = next
local crafterBags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", crafter) or {}
local crafterMail = TSMAPI:ModuleAPI("ItemTracker", "playermail", crafter) or {}
local crafterBank = TSMAPI:ModuleAPI("ItemTracker", "playerbank", crafter) or {}
-- add vendor items
local task = {}
local items = {}
for itemString, quantity in pairs(neededMats) do
if TSMAPI:GetVendorCost(itemString) then
local vendorNeed = quantity - ((crafterBags[itemString] or 0) + (crafterMail[itemString] or 0) + (crafterBank[itemString] or 0))
if vendorNeed > 0 then
items[itemString] = vendorNeed
end
elseif TSMAPI.Conversions[itemString] and TSMAPI.InkConversions[itemString] then
local tradeItem, data = next(TSMAPI.Conversions[itemString])
if data.source == "vendortrade" then
local num = floor(Inventory:GetTotalQuantity(tradeItem) * data.rate)
if quantity > Inventory:GetTotalQuantity(itemString) and num >= (quantity - Inventory:GetTotalQuantity(itemString)) then
items[itemString] = quantity - Inventory:GetTotalQuantity(itemString)
neededMats[tradeItem] = (neededMats[tradeItem] or 0) + quantity / data.rate -- add the qty of IOD to needed mats
end
end
end
end
if next(items) then
tinsert(task, { taskType = L["Visit Vendor"], items = items })
tinsert(sources, { sourceName = L["Vendor"], isCrafter = false, isVendor = true, isAH = false, tasks = task })
end
-- double check if crafter already has all the items needed
local shortItems = {}
for itemString, quantity in pairs(neededMats) do
local soulboundBagCount
if TSMAPI.SOULBOUND_MATS[itemString] then
soulboundBagCount = GetItemCount(itemString)
end
local need = max(quantity - (crafterBags[itemString] or soulboundBagCount or 0), 0)
if need > 0 then
shortItems[itemString] = need
end
end
if not next(shortItems) then return end
-- add bags/bank/mail "tasks" for needed items of all non-ignored characters (always include crafter)
for _, player in pairs(TSMAPI:ModuleAPI("ItemTracker", "playerlist") or {}) do
if player == crafter or not TSM.db.global.ignoreCharacters[player] then
local task = {}
local bags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", player) or {}
local bank = TSMAPI:ModuleAPI("ItemTracker", "playerbank", player) or {}
local guild = TSMAPI:ModuleAPI("ItemTracker", "playerguild", player) or {}
local gbank = {}
if guild and not TSM.db.global.ignoreGuilds[guild] then
gbank = TSMAPI:ModuleAPI("ItemTracker", "guildbank", guild) or {}
end
local mail = TSMAPI:ModuleAPI("ItemTracker", "playermail", player) or {}
local bankItems = {}
local gbankItems = {}
local mailItems = {}
local bagItems = {}
for itemString in pairs(neededMats) do
local soulboundBagCount, soulboundBankCount
if TSMAPI.SOULBOUND_MATS[itemString] then
soulboundBagCount = GetItemCount(itemString)
soulboundBankCount = GetItemCount(itemString, true) - soulboundBagCount
end
if (bank[itemString] or (soulboundBankCount and soulboundBankCount > 0)) and shortItems[itemString] then
if shortItems[itemString] - (crafterMail[itemString] or 0) - (player ~= crafter and bags[itemString] or 0) > 0 then
bankItems[itemString] = bank[itemString] or soulboundBankCount
end
end
if gbank[itemString] and shortItems[itemString] then
if shortItems[itemString] - (crafterMail[itemString] or 0) - (player ~= crafter and bags[itemString] or 0) > 0 then
gbankItems[itemString] = gbank[itemString]
end
end
if mail[itemString] and shortItems[itemString] then
mailItems[itemString] = mail[itemString]
end
if bags[itemString] and shortItems[itemString] then
if player ~= crafter then
if shortItems[itemString] - (crafterMail[itemString] or 0) > 0 then
bagItems[itemString] = bags[itemString]
end
end
end
end
-- add mail tasks for destroyable items bought through shopping search (exclude items already added to mail tasks)
for itemString, quantity in pairs(TSM.db.realm.gathering.destroyingMats) do
if mail[itemString] and not shortItems[itemString] then
mailItems[itemString] = quantity
end
end
if next(bankItems) then
tinsert(task, { taskType = L["Visit Bank"], items = bankItems })
end
if next(gbankItems) then
tinsert(task, { taskType = L["Visit Guild Bank"], items = gbankItems })
end
if next(mailItems) then
tinsert(task, { taskType = L["Collect Mail"], items = mailItems })
end
if next(bagItems) then
tinsert(task, { taskType = L["Mail Items"], items = bagItems })
end
if next(task) then
tinsert(sources, { sourceName = player, isCrafter = player == crafter, isVendor = false, isAH = false, tasks = task, isCurrent = (player == UnitName("player")) })
end
end
end
-- add auction house tasks
local auctionTask = {}
local auctionItems = {}
for itemString, quantity in pairs(neededMats) do
if not TSMAPI.SOULBOUND_MATS[itemString] and not TSMAPI:GetVendorCost(itemString) then
local need
if TSM.Inventory.gatherItem == itemString and TSM.Inventory.gatherQuantity then
need = TSM.Inventory.gatherQuantity
else
need = max(quantity - (TSM.Inventory:GetTotalQuantity(itemString) or 0), 0)
end
if need > 0 then
auctionItems[itemString] = need
end
end
end
if next(auctionItems) then
tinsert(auctionTask, { taskType = L["Search for Mats"], items = auctionItems })
tinsert(sources, { sourceName = L["Auction House"], isCrafter = false, isVendor = false, isAH = true, tasks = auctionTask })
end
-- add destroying tasks
local destroyingTask, millItems, prospectItems, transformItems, deItems = {}, {}, {}, {}, {}
for itemString, quantity in pairs(neededMats) do
local need = max(quantity - (TSM.Inventory:GetTotalQuantity(itemString) or 0), 0)
-- conversion items
for destroyItem, data in pairs(TSMAPI.Conversions[itemString] or {}) do
if TSM.db.realm.gathering.destroyingMats[destroyItem] then
if need > 0 then
local destroyNeed
if data.source == "mill" then
destroyNeed = floor(TSM.db.realm.gathering.destroyingMats[destroyItem] / 5)
if destroyNeed > 0 then
millItems[destroyItem] = (millItems[destroyItem] or 0) + destroyNeed
end
elseif data.source == "prospect" then
destroyNeed = floor(TSM.db.realm.gathering.destroyingMats[destroyItem] / 5)
if destroyNeed > 0 then
prospectItems[destroyItem] = (prospectItems[destroyItem] or 0) + destroyNeed
end
elseif data.source == "transform" then
if data.rate == 1 / 3 then
destroyNeed = floor(TSM.db.realm.gathering.destroyingMats[destroyItem] / 3)
elseif data.rate == 1 / 10 then
destroyNeed = floor(TSM.db.realm.gathering.destroyingMats[destroyItem] / 10)
else
destroyNeed = TSM.db.realm.gathering.destroyingMats[destroyItem]
end
if destroyNeed > 0 then
transformItems[destroyItem] = (transformItems[destroyItem] or 0) + destroyNeed
end
end
else
TSM.db.realm.gathering.destroyingMats[destroyItem] = nil
end
end
end
-- disenchantable items
if next(TSM.db.realm.gathering.destroyingMats) then
for deItemString, quantity in pairs(TSM.db.realm.gathering.destroyingMats) do
if Inventory:IsDisenchantable(deItemString) then
if need > 0 then
deItems[deItemString] = quantity
else
TSM.db.realm.gathering.destroyingMats[deItemString] = nil
end
end
end
end
end
if next(millItems) then
tinsert(destroyingTask, { taskType = L["Milling"], items = millItems })
end
if next(prospectItems) then
tinsert(destroyingTask, { taskType = L["Prospect"], items = prospectItems })
end
if next(transformItems) then
tinsert(destroyingTask, { taskType = L["Transform"], items = transformItems })
end
if next(deItems) then
tinsert(destroyingTask, { taskType = L["Disenchant"], items = deItems })
end
if next(destroyingTask) then
tinsert(sources, { sourceName = L["Destroying"], isCrafter = false, isVendor = false, isAH = true, tasks = destroyingTask })
end
sort(sources, function(a, b)
if a.isCurrent then return true end
if b.isCurrent then return false end
if a.isAH then return false end
if b.isAH then return true end
if a.isVendor then return false end
if b.isVendor then return true end
if a.isCrafter then return false end
if b.isCrafter then return true end
return a.sourceName < b.sourceName
end)
return sources
end
function Inventory:IsDisenchantable(itemString)
local _, link, quality, _, _, iType = TSMAPI:GetSafeItemInfo(itemString)
local WEAPON, ARMOR = GetAuctionItemClasses()
if itemString and not TSMAPI.DisenchantingData.notDisenchantable[itemString] and (iType == ARMOR or iType == WEAPON) then
return true
end
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Crafting --
-- http://www.curse.com/addons/wow/tradeskillmaster_crafting --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- load the parent file (TSM) into a local variable and register this file as a module
local TSM = select(2, ...)
local Inventory = TSM:NewModule("Inventory", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Crafting") -- loads the localization table
-- gets the number of an item in the current player's bags
function Inventory:GetPlayerBagNum(itemString)
if not itemString then return end
if TSMAPI.SOULBOUND_MATS[itemString] then
return GetItemCount(itemString)
else
local bags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", UnitName("player")) or {}
return bags and bags[itemString] or 0
end
end
function Inventory:GetTotals()
local bagTotal, auctionTotal, otherTotal, total = {}, {}, {}, {}
for _, player in pairs(TSMAPI:ModuleAPI("ItemTracker", "playerlist") or {}) do
if player == UnitName("player") or not TSM.db.global.ignoreCharacters[player] then
local bags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", player) or {}
local bank = TSMAPI:ModuleAPI("ItemTracker", "playerbank", player) or {}
local mail = TSMAPI:ModuleAPI("ItemTracker", "playermail", player) or {}
local auctions = TSMAPI:ModuleAPI("ItemTracker", "playerauctions", player) or {}
for itemString, quantity in pairs(bags) do
if player == UnitName("player") then
bagTotal[itemString] = (bagTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
else
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
end
for itemString, quantity in pairs(bank) do
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
for itemString, quantity in pairs(mail) do
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
for itemString, quantity in pairs(auctions) do
auctionTotal[itemString] = (auctionTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
end
end
for itemString in pairs(TSMAPI.SOULBOUND_MATS) do
local bagNum = GetItemCount(itemString)
local bankNum = GetItemCount(itemString, true) - GetItemCount(itemString)
bagTotal[itemString] = (bagTotal[itemString] or 0) + bagNum
otherTotal[itemString] = (otherTotal[itemString] or 0) + bankNum
total[itemString] = (total[itemString] or 0) + bagNum + bankNum
end
-- add gbank counts of all non-ignored guilds
for _, guild in pairs(TSMAPI:ModuleAPI("ItemTracker", "guildlist") or {}) do
if not TSM.db.global.ignoreGuilds[guild] then
local gbank = TSMAPI:ModuleAPI("ItemTracker", "guildbank", guild) or {}
for itemString, quantity in pairs(gbank) do
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
end
end
-- Ascension WoW: add personal bank counts for all non-ignored characters
for _, player in pairs(TSMAPI:ModuleAPI("ItemTracker", "playerlist") or {}) do
if player == UnitName("player") or not TSM.db.global.ignoreCharacters[player] then
local personalBank = TSMAPI:ModuleAPI("ItemTracker", "personalbank", player) or {}
for itemString, quantity in pairs(personalBank) do
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
end
end
-- Ascension WoW: add realm bank counts
local realmBank = TSMAPI:ModuleAPI("ItemTracker", "realmbank") or {}
for itemString, quantity in pairs(realmBank) do
otherTotal[itemString] = (otherTotal[itemString] or 0) + quantity
total[itemString] = (total[itemString] or 0) + quantity
end
return bagTotal, auctionTotal, otherTotal, total
end
-- gets the total number of some item that they have
function Inventory:GetTotalQuantity(itemString)
if not itemString then return 0 end
local count = 0
-- add bags/bank/mail/auction counts of all non-ignored characters (always including current character)
for _, player in pairs(TSMAPI:ModuleAPI("ItemTracker", "playerlist") or {}) do
if player == UnitName("player") or not TSM.db.global.ignoreCharacters[player] then
local bags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", player) or {}
local bank = TSMAPI:ModuleAPI("ItemTracker", "playerbank", player) or {}
local mail = TSMAPI:ModuleAPI("ItemTracker", "playermail", player) or {}
local auctions = TSMAPI:ModuleAPI("ItemTracker", "playerauctions", player) or {}
count = count + (bags[itemString] or 0)
count = count + (bank[itemString] or 0)
count = count + (mail[itemString] or 0)
count = count + (auctions[itemString] or 0)
end
end
-- add gbank counts of all non-ignored guilds
for _, guild in pairs(TSMAPI:ModuleAPI("ItemTracker", "guildlist") or {}) do
if not TSM.db.global.ignoreGuilds[guild] then
local bank = TSMAPI:ModuleAPI("ItemTracker", "guildbank", guild) or {}
count = count + (bank[itemString] or 0)
end
end
-- Ascension WoW: add personal bank counts for all non-ignored characters
for _, player in pairs(TSMAPI:ModuleAPI("ItemTracker", "playerlist") or {}) do
if player == UnitName("player") or not TSM.db.global.ignoreCharacters[player] then
local personalBank = TSMAPI:ModuleAPI("ItemTracker", "personalbank", player) or {}
count = count + (personalBank[itemString] or 0)
end
end
-- Ascension WoW: add realm bank count
local realmBank = TSMAPI:ModuleAPI("ItemTracker", "realmbank") or {}
count = count + (realmBank[itemString] or 0)
if TSMAPI.SOULBOUND_MATS[itemString] then
count = count + GetItemCount(itemString, true)
end
return count
end
function Inventory:GetItemSources(crafter, neededMats)
if not neededMats then return end
local sources = {}
local gbank = {}
local next = next
local crafterBags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", crafter) or {}
local crafterMail = TSMAPI:ModuleAPI("ItemTracker", "playermail", crafter) or {}
local crafterBank = TSMAPI:ModuleAPI("ItemTracker", "playerbank", crafter) or {}
-- Ascension WoW: crafter's personal bank
local crafterPersonalBank = TSMAPI:ModuleAPI("ItemTracker", "personalbank", crafter) or {}
-- add vendor items
local task = {}
local items = {}
for itemString, quantity in pairs(neededMats) do
if TSMAPI:GetVendorCost(itemString) then
local vendorNeed = quantity - ((crafterBags[itemString] or 0) + (crafterMail[itemString] or 0) + (crafterBank[itemString] or 0) + (crafterPersonalBank[itemString] or 0))
if vendorNeed > 0 then
items[itemString] = vendorNeed
end
elseif TSMAPI.Conversions[itemString] and TSMAPI.InkConversions[itemString] then
local tradeItem, data = next(TSMAPI.Conversions[itemString])
if data.source == "vendortrade" then
local num = floor(Inventory:GetTotalQuantity(tradeItem) * data.rate)
if quantity > Inventory:GetTotalQuantity(itemString) and num >= (quantity - Inventory:GetTotalQuantity(itemString)) then
items[itemString] = quantity - Inventory:GetTotalQuantity(itemString)
neededMats[tradeItem] = (neededMats[tradeItem] or 0) + quantity / data.rate -- add the qty of IOD to needed mats
end
end
end
end
if next(items) then
tinsert(task, { taskType = L["Visit Vendor"], items = items })
tinsert(sources, { sourceName = L["Vendor"], isCrafter = false, isVendor = true, isAH = false, tasks = task })
end
-- double check if crafter already has all the items needed
local shortItems = {}
for itemString, quantity in pairs(neededMats) do
local soulboundBagCount
if TSMAPI.SOULBOUND_MATS[itemString] then
soulboundBagCount = GetItemCount(itemString)
end
local need = max(quantity - (crafterBags[itemString] or soulboundBagCount or 0), 0)
if need > 0 then
shortItems[itemString] = need
end
end
if not next(shortItems) then return end
-- add bags/bank/mail "tasks" for needed items of all non-ignored characters (always include crafter)
for _, player in pairs(TSMAPI:ModuleAPI("ItemTracker", "playerlist") or {}) do
if player == crafter or not TSM.db.global.ignoreCharacters[player] then
local task = {}
local bags = TSMAPI:ModuleAPI("ItemTracker", "playerbags", player) or {}
local bank = TSMAPI:ModuleAPI("ItemTracker", "playerbank", player) or {}
local guild = TSMAPI:ModuleAPI("ItemTracker", "playerguild", player) or {}
local gbank = {}
if guild and not TSM.db.global.ignoreGuilds[guild] then
gbank = TSMAPI:ModuleAPI("ItemTracker", "guildbank", guild) or {}
end
local mail = TSMAPI:ModuleAPI("ItemTracker", "playermail", player) or {}
-- Ascension WoW: personal bank for this player
local personalBank = TSMAPI:ModuleAPI("ItemTracker", "personalbank", player) or {}
local bankItems = {}
local gbankItems = {}
local mailItems = {}
local bagItems = {}
local personalBankItems = {}
for itemString in pairs(neededMats) do
local soulboundBagCount, soulboundBankCount
if TSMAPI.SOULBOUND_MATS[itemString] then
soulboundBagCount = GetItemCount(itemString)
soulboundBankCount = GetItemCount(itemString, true) - soulboundBagCount
end
if (bank[itemString] or (soulboundBankCount and soulboundBankCount > 0)) and shortItems[itemString] then
if shortItems[itemString] - (crafterMail[itemString] or 0) - (player ~= crafter and bags[itemString] or 0) > 0 then
bankItems[itemString] = bank[itemString] or soulboundBankCount
end
end
if gbank[itemString] and shortItems[itemString] then
if shortItems[itemString] - (crafterMail[itemString] or 0) - (player ~= crafter and bags[itemString] or 0) > 0 then
gbankItems[itemString] = gbank[itemString]
end
end
-- Ascension WoW: check personal bank
if personalBank[itemString] and shortItems[itemString] then
if shortItems[itemString] - (crafterMail[itemString] or 0) - (player ~= crafter and bags[itemString] or 0) > 0 then
personalBankItems[itemString] = personalBank[itemString]
end
end
if mail[itemString] and shortItems[itemString] then
mailItems[itemString] = mail[itemString]
end
if bags[itemString] and shortItems[itemString] then
if player ~= crafter then
if shortItems[itemString] - (crafterMail[itemString] or 0) > 0 then
bagItems[itemString] = bags[itemString]
end
end
end
end
-- add mail tasks for destroyable items bought through shopping search (exclude items already added to mail tasks)
for itemString, quantity in pairs(TSM.db.realm.gathering.destroyingMats) do
if mail[itemString] and not shortItems[itemString] then
mailItems[itemString] = quantity
end
end
if next(bankItems) then
tinsert(task, { taskType = L["Visit Bank"], items = bankItems })
end
if next(gbankItems) then
tinsert(task, { taskType = L["Visit Guild Bank"], items = gbankItems })
end
-- Ascension WoW: personal bank task
if next(personalBankItems) then
tinsert(task, { taskType = L["Visit Personal Bank"], items = personalBankItems })
end
if next(mailItems) then
tinsert(task, { taskType = L["Collect Mail"], items = mailItems })
end
if next(bagItems) then
tinsert(task, { taskType = L["Mail Items"], items = bagItems })
end
if next(task) then
tinsert(sources, { sourceName = player, isCrafter = player == crafter, isVendor = false, isAH = false, tasks = task, isCurrent = (player == UnitName("player")) })
end
end
end
-- Ascension WoW: add realm bank as a separate source
local realmBank = TSMAPI:ModuleAPI("ItemTracker", "realmbank") or {}
local realmBankTask = {}
local realmBankItems = {}
for itemString in pairs(neededMats) do
if realmBank[itemString] and shortItems[itemString] then
if shortItems[itemString] - (crafterMail[itemString] or 0) > 0 then
realmBankItems[itemString] = realmBank[itemString]
end
end
end
if next(realmBankItems) then
tinsert(realmBankTask, { taskType = L["Visit Realm Bank"], items = realmBankItems })
tinsert(sources, { sourceName = L["Realm Bank"], isCrafter = false, isVendor = false, isAH = false, tasks = realmBankTask, isCurrent = true })
end
-- add auction house tasks
local auctionTask = {}
local auctionItems = {}
for itemString, quantity in pairs(neededMats) do
if not TSMAPI.SOULBOUND_MATS[itemString] and not TSMAPI:GetVendorCost(itemString) then
local need
if TSM.Inventory.gatherItem == itemString and TSM.Inventory.gatherQuantity then
need = TSM.Inventory.gatherQuantity
else
need = max(quantity - (TSM.Inventory:GetTotalQuantity(itemString) or 0), 0)
end
if need > 0 then
auctionItems[itemString] = need
end
end
end
if next(auctionItems) then
tinsert(auctionTask, { taskType = L["Search for Mats"], items = auctionItems })
tinsert(sources, { sourceName = L["Auction House"], isCrafter = false, isVendor = false, isAH = true, tasks = auctionTask })
end
-- add destroying tasks
local destroyingTask, millItems, prospectItems, transformItems, deItems = {}, {}, {}, {}, {}
for itemString, quantity in pairs(neededMats) do
local need = max(quantity - (TSM.Inventory:GetTotalQuantity(itemString) or 0), 0)
-- conversion items
for destroyItem, data in pairs(TSMAPI.Conversions[itemString] or {}) do
if TSM.db.realm.gathering.destroyingMats[destroyItem] then
if need > 0 then
local destroyNeed
if data.source == "mill" then
destroyNeed = floor(TSM.db.realm.gathering.destroyingMats[destroyItem] / 5)
if destroyNeed > 0 then
millItems[destroyItem] = (millItems[destroyItem] or 0) + destroyNeed
end
elseif data.source == "prospect" then
destroyNeed = floor(TSM.db.realm.gathering.destroyingMats[destroyItem] / 5)
if destroyNeed > 0 then
prospectItems[destroyItem] = (prospectItems[destroyItem] or 0) + destroyNeed
end
elseif data.source == "transform" then
if data.rate == 1 / 3 then
destroyNeed = floor(TSM.db.realm.gathering.destroyingMats[destroyItem] / 3)
elseif data.rate == 1 / 10 then
destroyNeed = floor(TSM.db.realm.gathering.destroyingMats[destroyItem] / 10)
else
destroyNeed = TSM.db.realm.gathering.destroyingMats[destroyItem]
end
if destroyNeed > 0 then
transformItems[destroyItem] = (transformItems[destroyItem] or 0) + destroyNeed
end
end
else
TSM.db.realm.gathering.destroyingMats[destroyItem] = nil
end
end
end
-- disenchantable items
if next(TSM.db.realm.gathering.destroyingMats) then
for deItemString, quantity in pairs(TSM.db.realm.gathering.destroyingMats) do
if Inventory:IsDisenchantable(deItemString) then
if need > 0 then
deItems[deItemString] = quantity
else
TSM.db.realm.gathering.destroyingMats[deItemString] = nil
end
end
end
end
end
if next(millItems) then
tinsert(destroyingTask, { taskType = L["Milling"], items = millItems })
end
if next(prospectItems) then
tinsert(destroyingTask, { taskType = L["Prospect"], items = prospectItems })
end
if next(transformItems) then
tinsert(destroyingTask, { taskType = L["Transform"], items = transformItems })
end
if next(deItems) then
tinsert(destroyingTask, { taskType = L["Disenchant"], items = deItems })
end
if next(destroyingTask) then
tinsert(sources, { sourceName = L["Destroying"], isCrafter = false, isVendor = false, isAH = true, tasks = destroyingTask })
end
sort(sources, function(a, b)
if a.isCurrent then return true end
if b.isCurrent then return false end
if a.isAH then return false end
if b.isAH then return true end
if a.isVendor then return false end
if b.isVendor then return true end
if a.isCrafter then return false end
if b.isCrafter then return true end
return a.sourceName < b.sourceName
end)
return sources
end
function Inventory:IsDisenchantable(itemString)
local _, link, quality, _, _, iType = TSMAPI:GetSafeItemInfo(itemString)
local WEAPON, ARMOR = GetAuctionItemClasses()
if itemString and not TSMAPI.DisenchantingData.notDisenchantable[itemString] and (iType == ARMOR or iType == WEAPON) then
return true
end
end

4
TradeSkillMaster_ItemTracker/Locale/enUS.lua

@ -14,9 +14,13 @@ local L = LibStub("AceLocale-3.0"):NewLocale("TradeSkillMaster_ItemTracker", "en
if not L then return end
L["%s (%s bags, %s bank, %s AH, %s mail)"] = true
L["%s (%s bags, %s bank, %s AH, %s mail, %s personal)"] = true
L["%s in guild bank"] = true
L["%s in realm bank"] = true
L["%s item(s) total"] = true
L["(%s player, %s alts, %s guild banks, %s AH)"] = true
L["(%s player, %s alts, %s guild, %s AH, %s personal, %s realm)"] = true
L["Realm Bank"] = true
L["AH"] = true
L["Bags"] = true
L["Bank"] = true

111
TradeSkillMaster_ItemTracker/Modules/data.lua

@ -78,12 +78,39 @@ function Data:ThrottleEvent(event)
throttleFrames[event]:Show()
end
-- Ascension WoW bank type constants
local BANK_TYPE_PERSONAL = "personal"
local BANK_TYPE_REALM = "realm"
local BANK_TYPE_GUILD = "guild"
-- Detect the type of bank currently open based on tab names
-- Ascension uses "Personal Bank" and "Realm Bank" as tab names for custom banks
local function GetCurrentBankType()
local numTabs = GetNumGuildBankTabs()
if numTabs == 0 then return nil end
local firstTabName = GetGuildBankTabInfo(1)
if firstTabName == "Personal Bank" then
return BANK_TYPE_PERSONAL
elseif firstTabName == "Realm Bank" then
return BANK_TYPE_REALM
else
return BANK_TYPE_GUILD
end
end
-- Store the current bank type when opened (persists until next open)
local currentOpenBankType = nil
function Data:EventHandler(event, fire)
if isScanning then return end
if fire ~= "FIRE" then
Data:ThrottleEvent(event)
else
if event == "GUILDBANKFRAME_OPENED" then
-- Detect and store the bank type
currentOpenBankType = GetCurrentBankType()
-- Query all tabs of the gbank to ensure all tabs will be scanned.
local initialTab = GetCurrentGuildBankTab()
for tab = 1, GetNumGuildBankTabs() do
@ -93,7 +120,14 @@ function Data:EventHandler(event, fire)
end
QueryGuildBankTab(initialTab)
elseif event == "GUILDBANKBAGSLOTS_CHANGED" then
Data:GetGuildBankData()
-- Route to the appropriate handler based on bank type
if currentOpenBankType == BANK_TYPE_PERSONAL then
Data:GetPersonalBankData()
elseif currentOpenBankType == BANK_TYPE_REALM then
Data:GetRealmBankData()
else
Data:GetGuildBankData()
end
elseif event == "AUCTION_OWNED_LIST_UPDATE" then
Data:ScanPlayerAuctions()
end
@ -128,35 +162,86 @@ function Data:GetBankData(state)
TSM.Sync:BroadcastUpdateRequest()
end
-- scan the guild bank
function Data:GetGuildBankData()
if not TSM.CURRENT_GUILD then
Data:StoreCurrentGuildInfo(true)
if not TSM.CURRENT_GUILD then return end
end
wipe(TSM.guilds[TSM.CURRENT_GUILD].items)
for tab = 1, GetNumGuildBankTabs() do
if select(5, GetGuildBankTabInfo(tab)) > 0 or IsGuildLeader(UnitName("player")) then
-- Helper function to scan all guild bank slots and return items table
local function ScanGuildBankSlots()
local items = {}
local numTabs = GetNumGuildBankTabs()
for tab = 1, numTabs do
local name, icon, isViewable, canDeposit, numWithdrawals = GetGuildBankTabInfo(tab)
-- Ascension WoW: For Personal/Realm banks, always scan (numWithdrawals check may not apply)
local canAccess = (numWithdrawals and numWithdrawals > 0) or IsGuildLeader(UnitName("player")) or (name == "Personal Bank") or (name == "Realm Bank")
if canAccess then
for slot = 1, MAX_GUILDBANK_SLOTS_PER_TAB or 98 do
local itemString = TSMAPI:GetItemString(GetGuildBankItemLink(tab, slot))
local baseItemString = TSMAPI:GetBaseItemString(GetGuildBankItemLink(tab, slot))
if itemString then
local quantity = select(2, GetGuildBankItemInfo(tab, slot))
TSM.guilds[TSM.CURRENT_GUILD].items[itemString] = (TSM.guilds[TSM.CURRENT_GUILD].items[itemString] or 0) + quantity
items[itemString] = (items[itemString] or 0) + quantity
if itemString ~= baseItemString then
TSM.guilds[TSM.CURRENT_GUILD].items[baseItemString] = (TSM.guilds[TSM.CURRENT_GUILD].items[baseItemString] or 0) + quantity
items[baseItemString] = (items[baseItemString] or 0) + quantity
end
end
end
end
end
return items
end
-- scan the guild bank (real guild bank only)
function Data:GetGuildBankData()
if not TSM.CURRENT_GUILD then
Data:StoreCurrentGuildInfo(true)
if not TSM.CURRENT_GUILD then return end
end
wipe(TSM.guilds[TSM.CURRENT_GUILD].items)
local items = ScanGuildBankSlots()
for itemString, quantity in pairs(items) do
TSM.guilds[TSM.CURRENT_GUILD].items[itemString] = quantity
end
if GuildBankFrame and GuildBankFrame:IsVisible() then
TSM.guilds[TSM.CURRENT_GUILD].lastUpdate = time()
end
TSM.Sync:BroadcastUpdateRequest()
end
-- Ascension WoW: scan the personal bank (per character)
function Data:GetPersonalBankData()
-- Initialize personal bank for current player if needed
if not TSM.personalBanks[TSM.CURRENT_PLAYER] then
TSM.personalBanks[TSM.CURRENT_PLAYER] = { items = {}, lastUpdate = 0 }
end
wipe(TSM.personalBanks[TSM.CURRENT_PLAYER].items)
local items = ScanGuildBankSlots()
for itemString, quantity in pairs(items) do
TSM.personalBanks[TSM.CURRENT_PLAYER].items[itemString] = quantity
end
TSM.personalBanks[TSM.CURRENT_PLAYER].lastUpdate = time()
TSM.Sync:BroadcastUpdateRequest()
end
-- Ascension WoW: scan the realm bank (shared across realm)
function Data:GetRealmBankData()
-- Initialize realm bank if needed
if not TSM.realmBank.items then
TSM.realmBank.items = {}
end
wipe(TSM.realmBank.items)
local items = ScanGuildBankSlots()
for itemString, quantity in pairs(items) do
TSM.realmBank.items[itemString] = quantity
end
if GuildBankFrame and GuildBankFrame:IsVisible() then
TSM.realmBank.lastUpdate = time()
end
TSM.Sync:BroadcastUpdateRequest()
end
function Data:ScanPlayerAuctions()
wipe(TSM.characters[TSM.CURRENT_PLAYER].auctions)
TSM.characters[TSM.CURRENT_PLAYER].auctions.time = time()

87
TradeSkillMaster_ItemTracker/TradeSkillMaster_ItemTracker.lua

@ -13,7 +13,7 @@ local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_ItemTracker")
-- default values for the savedDB
local savedDBDefaults = {
-- any global
-- any global
global = {
tooltip = "simple",
},
@ -23,6 +23,10 @@ local savedDBDefaults = {
characters = {},
guilds = {},
ignoreGuilds = {},
-- Ascension WoW: Personal banks (per character, stored by character name)
personalBanks = {},
-- Ascension WoW: Realm bank (shared across all characters on realm)
realmBank = { items = {}, lastUpdate = 0 },
},
-- data that is stored per user profile
@ -47,6 +51,11 @@ local guildDefaults = {
items = {},
lastUpdate = 0,
}
-- Ascension WoW: Personal bank defaults (same structure as guild)
local personalBankDefaults = {
items = {},
lastUpdate = 0,
}
-- Called once the player has loaded into the game
-- Anything that needs to be done in order to initialize the addon should go here
@ -58,9 +67,12 @@ function TSM:OnInitialize()
-- load the saved variables table into TSM.db
TSM.db = LibStub:GetLibrary("AceDB-3.0"):New("AscensionTSM_ItemTrackerDB", savedDBDefaults, true)
TSM.characters = TSM.db.realm.characters
TSM.guilds = TSM.db.realm.guilds
-- Ascension WoW: Personal banks and realm bank
TSM.personalBanks = TSM.db.realm.personalBanks
TSM.realmBank = TSM.db.realm.realmBank
-- handle connected realms for characters
local connectedRealms = TSMAPI.GetConnectedRealms and TSMAPI:GetConnectedRealms() or {}
@ -117,6 +129,11 @@ function TSM:OnInitialize()
for _, guildData in pairs(TSM.guilds) do
ClearItemIDs(guildData.items)
end
-- Ascension WoW: Clean up personal banks and realm bank
for _, personalBankData in pairs(TSM.personalBanks) do
ClearItemIDs(personalBankData.items)
end
ClearItemIDs(TSM.realmBank.items)
TSM.Data:Initialize()
TSM:UpdatePlayerLookup()
@ -151,6 +168,11 @@ function TSM:RegisterModule()
{ key = "guildtotal", callback = "GetGuildTotal" },
{ key = "playerguildtotal", callback = "GetPlayerGuildTotal" },
{ key = "playerguild", callback = "GetPlayerGuild" },
-- Ascension WoW: Personal banks and realm bank APIs
{ key = "personalbank", callback = "GetPersonalBank" },
{ key = "realmbank", callback = "GetRealmBank" },
{ key = "personalbankstotal", callback = "GetPersonalBanksTotal" },
{ key = "realmbanktotal", callback = "GetRealmBankTotal" },
}
--TSM.sync = { callback = "Sync:Callback" }
TSM.tooltipOptions = { callback = "Config:LoadTooltipOptions" }
@ -169,9 +191,18 @@ function TSM:GetTooltip(itemString)
local player, alts = TSM:GetPlayerTotal(itemString)
local guild = TSM:GetGuildTotal(itemString)
local auctions = TSM:GetAuctionsTotal(itemString)
grandTotal = grandTotal + player + alts + guild + auctions
-- Ascension WoW: Add personal banks and realm bank
local personalBanks = TSM:GetPersonalBanksTotal(itemString)
local realmBank = TSM:GetRealmBankTotal(itemString)
grandTotal = grandTotal + player + alts + guild + auctions + personalBanks + realmBank
if grandTotal > 0 then
tinsert(text, { left = " " .. "ItemTracker:", right = format(L["(%s player, %s alts, %s guild banks, %s AH)"], "|cffffffff" .. player .. "|r", "|cffffffff" .. alts .. "|r", "|cffffffff" .. guild .. "|r", "|cffffffff" .. auctions .. "|r") })
tinsert(text, { left = " " .. "ItemTracker:", right = format(L["(%s player, %s alts, %s guild, %s AH, %s personal, %s realm)"],
"|cffffffff" .. player .. "|r",
"|cffffffff" .. alts .. "|r",
"|cffffffff" .. guild .. "|r",
"|cffffffff" .. auctions .. "|r",
"|cffffffff" .. personalBanks .. "|r",
"|cffffffff" .. realmBank .. "|r") })
end
elseif TSM.db.global.tooltip == "full" then
for name, data in pairs(TSM.characters) do
@ -179,17 +210,26 @@ function TSM:GetTooltip(itemString)
local bank = data.bank[itemString] or 0
local auctions = data.auctions[itemString] or 0
local mail = data.mail[itemString] or 0
local total = bags + bank + auctions + mail
-- Ascension WoW: Add personal bank for this character
local personalBank = TSM.personalBanks[name] and TSM.personalBanks[name].items[itemString] or 0
local total = bags + bank + auctions + mail + personalBank
grandTotal = grandTotal + total
local bagText = "|cffffffff" .. bags .. "|r"
local bankText = "|cffffffff" .. bank .. "|r"
local auctionText = "|cffffffff" .. auctions .. "|r"
local mailText = "|cffffffff" .. mail .. "|r"
local personalBankText = "|cffffffff" .. personalBank .. "|r"
local totalText = "|cffffffff" .. total .. "|r"
if total > 0 then
tinsert(text, { left = format(" %s:", name), right = format(L["%s (%s bags, %s bank, %s AH, %s mail)"], "|cffffffff" .. totalText, "|cffffffff" .. bagText, "|cffffffff" .. bankText, "|cffffffff" .. auctionText, "|cffffffff" .. mailText) })
tinsert(text, { left = format(" %s:", name), right = format(L["%s (%s bags, %s bank, %s AH, %s mail, %s personal)"],
"|cffffffff" .. totalText,
"|cffffffff" .. bagText,
"|cffffffff" .. bankText,
"|cffffffff" .. auctionText,
"|cffffffff" .. mailText,
"|cffffffff" .. personalBankText) })
end
end
@ -205,6 +245,14 @@ function TSM:GetTooltip(itemString)
end
end
end
-- Ascension WoW: Show realm bank
local realmBank = TSM:GetRealmBankTotal(itemString)
if realmBank > 0 then
grandTotal = grandTotal + realmBank
local realmBankText = "|cffffffff" .. realmBank .. "|r"
tinsert(text, { left = " " .. L["Realm Bank"] .. ":", right = format(L["%s in realm bank"], realmBankText) })
end
end
if #text > 0 then
@ -343,4 +391,31 @@ function TSM:GetPlayerGuild(player)
player = TSM.playerLookup[player] or player
if not player or not TSM.characters[player] then return end
return TSM.characters[player].guild
end
-- Ascension WoW: Get personal bank data for a player
function TSM:GetPersonalBank(player)
player = player or TSM.CURRENT_PLAYER
player = TSM.playerLookup[player] or player
if not player or not TSM.personalBanks[player] then return end
return TSM.personalBanks[player].items
end
-- Ascension WoW: Get realm bank data
function TSM:GetRealmBank()
return TSM.realmBank.items
end
-- Ascension WoW: Get total items across all personal banks
function TSM:GetPersonalBanksTotal(itemString)
local total = 0
for _, data in pairs(TSM.personalBanks) do
total = total + (data.items[itemString] or 0)
end
return total
end
-- Ascension WoW: Get realm bank total for an item
function TSM:GetRealmBankTotal(itemString)
return TSM.realmBank.items[itemString] or 0
end
Loading…
Cancel
Save