1.3 Update
- Updated consumables list (added more and removed some lower tier items) - Added tooltip for options window - Added character control - Updated general styles - Fixed Icon Position
This commit is contained in:
+59
-136
@@ -1,159 +1,82 @@
|
||||
-- consumables.lua
|
||||
|
||||
consumablesCategories = {
|
||||
["Elixirs"] = {
|
||||
{ id = 13452, name = "Elixir of the Mongoose" },
|
||||
{ id = 9187, name = "Elixir of Greater Agility" },
|
||||
{ id = 13453, name = "Elixir of Brute Force" },
|
||||
{ id = 13447, name = "Elixir of the Sages" },
|
||||
{ id = 3825, name = "Elixir of Fortitude" },
|
||||
{ id = 9179, name = "Elixir of Greater Intellect" },
|
||||
{ id = 13454, name = "Greater Arcane Elixir" },
|
||||
{ id = 17708, name = "Elixir of Frost Power" },
|
||||
{ id = 9264, name = "Elixir of Shadow Power" },
|
||||
{ id = 6373, name = "Elixir of Firepower" },
|
||||
{ id = 21546, name = "Elixir of Greater Firepower" },
|
||||
{ id = 18294, name = "Elixir of Greater Water Breathing" },
|
||||
{ id = 9088, name = "Gift of Arthas" },
|
||||
{ id = 9155, name = "Arcane Elixir" },
|
||||
{ id = 13452, name = "Elixir of the Mongoose", texture = "Interface\\Icons\\INV_Potion_32", description = "Increases Agility by 25 and critical strike chance by 2% for 1 hour." },
|
||||
{ id = 9187, name = "Elixir of Greater Agility", texture = "Interface\\Icons\\INV_Potion_94", description = "Increases Agility by 15 for 1 hour." },
|
||||
{ id = 13453, name = "Elixir of Brute Force", texture = "Interface\\Icons\\INV_Potion_80", description = "Increases Strength and Stamina by 18 for 1 hour." },
|
||||
{ id = 13447, name = "Elixir of the Sages", texture = "Interface\\Icons\\INV_Potion_29", description = "Increases Intellect and Spirit by 18 for 1 hour." },
|
||||
{ id = 13454, name = "Greater Arcane Elixir", texture = "Interface\\Icons\\INV_Potion_22", description = "Increases spell damage by up to 35 for 1 hour." },
|
||||
{ id = 11348, name = "Elixir of Superior Defense", texture = "Interface\\Icons\\INV_Potion_52", description = "Increases armor by 450 for 1 hour." },
|
||||
{ id = 17708, name = "Elixir of Frost Power", texture = "Interface\\Icons\\INV_Potion_20", description = "Increases Frost spell damage by up to 15 for 1 hour." },
|
||||
{ id = 3456, name = "Lucidity Potion", texture = "Interface\\Icons\\INV_Potion_17", description = "Restores a significant amount of mana over 10 seconds." },
|
||||
{ id = 36003, name = "Elixir of Nimble Mind", texture = "Interface\\Icons\\INV_Potion_34", description = "Increases haste by 5% for 1 hour." },
|
||||
},
|
||||
["Protection Potions"] = {
|
||||
{ id = 13457, name = "Greater Fire Protection Potion" },
|
||||
{ id = 13456, name = "Greater Frost Protection Potion" },
|
||||
{ id = 13458, name = "Greater Nature Protection Potion" },
|
||||
{ id = 13459, name = "Greater Shadow Protection Potion" },
|
||||
{ id = 13461, name = "Greater Arcane Protection Potion" },
|
||||
{ id = 9036, name = "Magic Resistance Potion" },
|
||||
{ id = 13457, name = "Greater Fire Protection Potion", texture = "Interface\\Icons\\INV_Potion_24", description = "Absorbs 1950 to 3250 Fire damage for 1 hour." },
|
||||
{ id = 13456, name = "Greater Frost Protection Potion", texture = "Interface\\Icons\\INV_Potion_20", description = "Absorbs 1950 to 3250 Frost damage for 1 hour." },
|
||||
{ id = 13458, name = "Greater Nature Protection Potion", texture = "Interface\\Icons\\INV_Potion_22", description = "Absorbs 1950 to 3250 Nature damage for 1 hour." },
|
||||
{ id = 13459, name = "Greater Shadow Protection Potion", texture = "Interface\\Icons\\INV_Potion_23", description = "Absorbs 1950 to 3250 Shadow damage for 1 hour." },
|
||||
{ id = 13461, name = "Greater Arcane Protection Potion", texture = "Interface\\Icons\\INV_Potion_25", description = "Absorbs 1950 to 3250 Arcane damage for 1 hour." },
|
||||
{ id = 36002, name = "Greater Physical Protection Potion", texture = "Interface\\Icons\\INV_Potion_93", description = "Reduces physical damage taken by 10% for 1 hour." },
|
||||
},
|
||||
["Utility Potions"] = {
|
||||
{ id = 20008, name = "Living Action Potion" },
|
||||
{ id = 5634, name = "Free Action Potion" },
|
||||
{ id = 3387, name = "Limited Invulnerability Potion" },
|
||||
{ id = 9030, name = "Restorative Potion" },
|
||||
{ id = 13462, name = "Purification Potion" },
|
||||
{ id = 9172, name = "Invisibility Potion" },
|
||||
{ id = 2459, name = "Swiftness Potion" },
|
||||
["Weapon Enhancements"] = {
|
||||
{ id = 12404, name = "Dense Sharpening Stone", texture = "Interface\\Icons\\INV_Stone_SharpeningStone_02", description = "Increases weapon damage by 8 for 30 minutes." },
|
||||
{ id = 12645, name = "Thorium Shield Spike", texture = "Interface\\Icons\\INV_Shield_13", description = "Attaches a Thorium Spike to a shield, causing 20-30 damage when blocking." },
|
||||
{ id = 20749, name = "Brilliant Mana Oil", texture = "Interface\\Icons\\INV_Potion_100", description = "Increases mana regeneration by 12 and spell damage by up to 25 for 30 minutes." },
|
||||
{ id = 20750, name = "Brilliant Wizard Oil", texture = "Interface\\Icons\\INV_Potion_105", description = "Increases spell damage by up to 36 for 30 minutes." },
|
||||
{ id = 3829, name = "Frost Oil", texture = "Interface\\Icons\\INV_Potion_20", description = "Adds a chance to inflict Frost damage on hit. Lasts 30 minutes." },
|
||||
{ id = 23122, name = "Consecrated Sharpening Stone", texture = "Interface\\Icons\\INV_Stone_02", description = "Increases melee attack power by 100 against undead for 30 minutes." },
|
||||
{ id = 18262, name = "Elemental Sharpening Stone", texture = "Interface\\Icons\\INV_Stone_WeightStone_01", description = "Increases critical strike chance by 2% for 30 minutes." },
|
||||
},
|
||||
["Combat Potions"] = {
|
||||
{ id = 13455, name = "Greater Stoneshield Potion" },
|
||||
{ id = 13442, name = "Mighty Rage Potion" },
|
||||
{ id = 5631, name = "Rage Potion" },
|
||||
{ id = 13455, name = "Greater Stoneshield Potion", texture = "Interface\\Icons\\INV_Potion_67", description = "Increases armor by 2000 for 2 minutes." },
|
||||
{ id = 13442, name = "Mighty Rage Potion", texture = "Interface\\Icons\\INV_Potion_41", description = "Restores 45 to 75 rage and increases Strength by 60 for 20 seconds." },
|
||||
{ id = 20007, name = "Mageblood Potion", texture = "Interface\\Icons\\INV_Potion_45", description = "Regenerates 12 mana every 5 seconds for 1 hour." },
|
||||
{ id = 36004, name = "Potion of Brutal Force", texture = "Interface\\Icons\\INV_Potion_26", description = "Increases Strength by 50 for 1 hour." },
|
||||
},
|
||||
["Mana & Health Potions"] = {
|
||||
{ id = 13444, name = "Major Mana Potion" },
|
||||
{ id = 13446, name = "Major Healing Potion" },
|
||||
{ id = 12190, name = "Dreamless Sleep Potion" },
|
||||
{ id = 2456, name = "Rejuvenation Potion" },
|
||||
},
|
||||
["Juju & Other Buffs"] = {
|
||||
{ id = 12460, name = "Juju Power" },
|
||||
{ id = 12451, name = "Juju Might" },
|
||||
{ id = 12457, name = "Juju Chill" },
|
||||
{ id = 12455, name = "Juju Ember" },
|
||||
{ id = 12450, name = "Juju Flurry" },
|
||||
{ id = 8412, name = "Ground Scorpok Assay" },
|
||||
{ id = 8410, name = "R.O.I.D.S." },
|
||||
{ id = 8411, name = "Lung Juice Cocktail" },
|
||||
{ id = 18284, name = "Kreeg's Stout Beatdown" },
|
||||
{ id = 21151, name = "Rumsey Rum Black Label" },
|
||||
{ id = 12820, name = "Winterfall Firewater" },
|
||||
["Utility Items"] = {
|
||||
{ id = 20008, name = "Living Action Potion", texture = "Interface\\Icons\\INV_Potion_16", description = "Removes movement impairing effects and grants immunity to them for 5 seconds." },
|
||||
{ id = 3387, name = "Limited Invulnerability Potion", texture = "Interface\\Icons\\INV_Potion_62", description = "Makes you immune to physical attacks for 6 seconds." },
|
||||
{ id = 5634, name = "Free Action Potion", texture = "Interface\\Icons\\INV_Potion_04", description = "Grants immunity to stun and movement impairing effects for 30 seconds." },
|
||||
{ id = 9030, name = "Restorative Potion", texture = "Interface\\Icons\\INV_Potion_68", description = "Removes a magic, curse, poison, or disease effect every 5 seconds for 30 seconds." },
|
||||
{ id = 4390, name = "Iron Grenade", texture = "Interface\\Icons\\INV_Misc_Bomb_08", description = "Stuns enemies in a 3-yard radius for 3 seconds." },
|
||||
{ id = 15993, name = "Thorium Grenade", texture = "Interface\\Icons\\INV_Misc_Bomb_09", description = "Stuns enemies in a 3-yard radius for 3 seconds." },
|
||||
{ id = 10577, name = "Goblin Sapper Charge", texture = "Interface\\Icons\\INV_Misc_Bomb_07", description = "Deals 450-750 Fire damage to enemies within 10 yards, also damages you." },
|
||||
},
|
||||
["Food Buffs"] = {
|
||||
{ id = 51711, name = "Sweet Mountain Berry (Agility)" },
|
||||
{ id = 51714, name = "Sweet Mountain Berry (Stamina)" },
|
||||
{ id = 12662, name = "Blasted Boar Lung" },
|
||||
{ id = 21023, name = "Dirge's Kickin' Chimaerok Chops" },
|
||||
{ id = 12210, name = "Tender Wolf Steak" },
|
||||
{ id = 12217, name = "Dragonbreath Chili" },
|
||||
{ id = 18254, name = "Runn Tum Tuber Surprise" },
|
||||
{ id = 13931, name = "Nightfin Soup" },
|
||||
{ id = 21217, name = "Sagefish Delight" },
|
||||
{ id = 13928, name = "Grilled Squid" },
|
||||
{ id = 20452, name = "Smoked Desert Dumplings" },
|
||||
{ id = 12202, name = "Roast Raptor" },
|
||||
}
|
||||
{ id = 21023, name = "Dirge's Kickin' Chimaerok Chops", texture = "Interface\\Icons\\INV_Misc_Food_65", description = "Increases Strength by 25 for 1 hour." },
|
||||
{ id = 18254, name = "Runn Tum Tuber Surprise", texture = "Interface\\Icons\\INV_Misc_Food_63", description = "Increases Intellect by 10 for 1 hour." },
|
||||
{ id = 13931, name = "Nightfin Soup", texture = "Interface\\Icons\\INV_Drink_17", description = "Restores 8 mana every 5 seconds for 1 hour." },
|
||||
{ id = 20452, name = "Smoked Desert Dumplings", texture = "Interface\\Icons\\INV_Misc_Food_64", description = "Increases Strength by 20 for 1 hour." },
|
||||
{ id = 51711, name = "Sweet Mountain Berry (Agility)", texture = "Interface\\Icons\\INV_Misc_Food_40", description = "Increases Agility by 10 for 1 hour." },
|
||||
{ id = 51714, name = "Sweet Mountain Berry (Stamina)", texture = "Interface\\Icons\\INV_Misc_Food_40", description = "Increases Stamina by 10 for 1 hour." },
|
||||
},
|
||||
["Special Buffs"] = {
|
||||
{ id = 18269, name = "Hardened Mushrooms", texture = "Interface\\Icons\\INV_Mushroom_08", description = "Increases Stamina by 25 for 1 hour." },
|
||||
{ id = 18270, name = "Power Mushrooms", texture = "Interface\\Icons\\INV_Mushroom_11", description = "Increases Strength by 20 for 1 hour." },
|
||||
{ id = 21151, name = "Rumsey Rum Black Label", texture = "Interface\\Icons\\INV_Drink_04", description = "Increases Stamina by 15 for 15 minutes." },
|
||||
{ id = 12460, name = "Juju Power", texture = "Interface\\Icons\\INV_Misc_MonsterScales_07", description = "Increases Strength by 30 for 30 minutes." },
|
||||
{ id = 12451, name = "Juju Might", texture = "Interface\\Icons\\INV_Misc_MonsterScales_11", description = "Increases Attack Power by 40 for 30 minutes." },
|
||||
{ id = 12455, name = "Juju Ember", texture = "Interface\\Icons\\INV_Misc_MonsterScales_15", description = "Increases Fire Resistance by 15 for 30 minutes." },
|
||||
{ id = 12820, name = "Winterfall Firewater", texture = "Interface\\Icons\\INV_Misc_Powder_Mana", description = "Increases Attack Power by 35 for 20 minutes." },
|
||||
{ id = 36001, name = "Nordanaar Herbal Tea", texture = "Interface\\Icons\\INV_Drink_Milk_05", description = "Restores 525 to 875 health and 810 to 1350 mana." },
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
|
||||
consumablesList = {}
|
||||
consumablesNameToID = {}
|
||||
consumablesTexture = {}
|
||||
consumablesDescription = {}
|
||||
|
||||
for categoryName, consumables in pairs(consumablesCategories) do
|
||||
for _, consumable in ipairs(consumables) do
|
||||
consumablesList[consumable.id] = consumable.name
|
||||
consumablesNameToID[consumable.name] = consumable.id
|
||||
consumablesTexture[consumable.id] = consumable.texture
|
||||
consumablesDescription[consumable.id] = consumable.description
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
consumablesTextures = {
|
||||
-- Elixirs
|
||||
[13452] = "Interface\\Icons\\INV_Potion_32", -- Elixir of the Mongoose
|
||||
[9187] = "Interface\\Icons\\INV_Potion_94", -- Elixir of Greater Agility
|
||||
[13453] = "Interface\\Icons\\INV_Potion_80", -- Elixir of Brute Force
|
||||
[13447] = "Interface\\Icons\\INV_Potion_29", -- Elixir of the Sages
|
||||
[3825] = "Interface\\Icons\\INV_Potion_43", -- Elixir of Fortitude
|
||||
[9179] = "Interface\\Icons\\INV_Potion_10", -- Elixir of Greater Intellect
|
||||
[13454] = "Interface\\Icons\\INV_Potion_22", -- Greater Arcane Elixir
|
||||
[17708] = "Interface\\Icons\\INV_Potion_20", -- Elixir of Frost Power
|
||||
[9264] = "Interface\\Icons\\INV_Potion_48", -- Elixir of Shadow Power
|
||||
[6373] = "Interface\\Icons\\INV_Potion_38", -- Elixir of Firepower
|
||||
[21546] = "Interface\\Icons\\INV_Potion_24", -- Elixir of Greater Firepower
|
||||
[18294] = "Interface\\Icons\\INV_Potion_13", -- Elixir of Greater Water Breathing
|
||||
[9088] = "Interface\\Icons\\INV_Potion_16", -- Gift of Arthas
|
||||
[9155] = "Interface\\Icons\\INV_Potion_83", -- Arcane Elixir
|
||||
|
||||
-- Protection Potions
|
||||
[13457] = "Interface\\Icons\\INV_Potion_24", -- Greater Fire Protection Potion
|
||||
[13456] = "Interface\\Icons\\INV_Potion_20", -- Greater Frost Protection Potion
|
||||
[13458] = "Interface\\Icons\\INV_Potion_22", -- Greater Nature Protection Potion
|
||||
[13459] = "Interface\\Icons\\INV_Potion_23", -- Greater Shadow Protection Potion
|
||||
[13461] = "Interface\\Icons\\INV_Potion_25", -- Greater Arcane Protection Potion
|
||||
[9036] = "Interface\\Icons\\INV_Potion_81", -- Magic Resistance Potion
|
||||
|
||||
-- Utility Potions
|
||||
[20008] = "Interface\\Icons\\INV_Potion_16", -- Living Action Potion
|
||||
[5634] = "Interface\\Icons\\INV_Potion_04", -- Free Action Potion
|
||||
[3387] = "Interface\\Icons\\INV_Potion_62", -- Limited Invulnerability Potion
|
||||
[9030] = "Interface\\Icons\\INV_Potion_68", -- Restorative Potion
|
||||
[13462] = "Interface\\Icons\\INV_Potion_27", -- Purification Potion
|
||||
[9172] = "Interface\\Icons\\INV_Potion_31", -- Invisibility Potion
|
||||
[2459] = "Interface\\Icons\\INV_Potion_95", -- Swiftness Potion
|
||||
|
||||
-- Combat Potions
|
||||
[13455] = "Interface\\Icons\\INV_Potion_67", -- Greater Stoneshield Potion
|
||||
[13442] = "Interface\\Icons\\INV_Potion_41", -- Mighty Rage Potion
|
||||
[5631] = "Interface\\Icons\\INV_Potion_24", -- Rage Potion
|
||||
|
||||
-- Mana & Health Potions
|
||||
[13444] = "Interface\\Icons\\INV_Potion_76", -- Major Mana Potion
|
||||
[13446] = "Interface\\Icons\\INV_Potion_54", -- Major Healing Potion
|
||||
[12190] = "Interface\\Icons\\INV_Potion_83", -- Dreamless Sleep Potion
|
||||
[2456] = "Interface\\Icons\\INV_Potion_01", -- Minor Rejuvenation Potion
|
||||
|
||||
-- Juju & Other Buffs
|
||||
[12460] = "Interface\\Icons\\INV_Misc_MonsterScales_07", -- Juju Power
|
||||
[12451] = "Interface\\Icons\\INV_Misc_MonsterScales_11", -- Juju Might
|
||||
[12457] = "Interface\\Icons\\INV_Misc_MonsterScales_09", -- Juju Chill
|
||||
[12455] = "Interface\\Icons\\INV_Misc_MonsterScales_15", -- Juju Ember
|
||||
[12450] = "Interface\\Icons\\INV_Misc_MonsterScales_17", -- Juju Flurry
|
||||
[8412] = "Interface\\Icons\\INV_Misc_Food_54", -- Ground Scorpok Assay
|
||||
[8410] = "Interface\\Icons\\INV_Misc_Food_54", -- R.O.I.D.S.
|
||||
[8411] = "Interface\\Icons\\INV_Drink_17", -- Lung Juice Cocktail
|
||||
[18284] = "Interface\\Icons\\INV_Drink_05", -- Kreeg's Stout Beatdown
|
||||
[21151] = "Interface\\Icons\\INV_Drink_04", -- Rumsey Rum Black Label
|
||||
[12820] = "Interface\\Icons\\INV_Misc_Powder_Mana", -- Winterfall Firewater
|
||||
|
||||
-- Food Buffs
|
||||
[12662] = "Interface\\Icons\\INV_Misc_Organ_03", -- Demonic Rune (Assuming for Blasted Boar Lung)
|
||||
[21023] = "Interface\\Icons\\INV_Misc_Food_47", -- Dirge's Kickin' Chimaerok Chops
|
||||
[12210] = "Interface\\Icons\\INV_Misc_Food_47", -- Roast Raptor
|
||||
[12217] = "Interface\\Icons\\INV_Misc_Food_41", -- Dragonbreath Chili
|
||||
[18254] = "Interface\\Icons\\INV_Misc_Food_64", -- Runn Tum Tuber Surprise
|
||||
[13931] = "Interface\\Icons\\INV_Misc_Food_47", -- Nightfin Soup
|
||||
[21217] = "Interface\\Icons\\INV_Misc_Food_64", -- Sagefish Delight
|
||||
[13928] = "Interface\\Icons\\INV_Misc_Food_51", -- Grilled Squid
|
||||
[20452] = "Interface\\Icons\\INV_Misc_Food_62", -- Smoked Desert Dumplings
|
||||
[12202] = "Interface\\Icons\\INV_Misc_Food_14", -- Tiger Meat (Assuming for Roast Raptor)
|
||||
}
|
||||
|
||||
|
||||
|
||||
+369
-35
@@ -2,7 +2,7 @@
|
||||
|
||||
-- Metadata -------------------------------------------------------------------------------------------
|
||||
AddonName = "Consumes Tracker"
|
||||
Version = "1.2"
|
||||
Version = "1.3"
|
||||
VState = "multi character (beta)"
|
||||
WindowWidth = 310
|
||||
|
||||
@@ -222,17 +222,23 @@ function ConsumeTracker_CreateMainWindow()
|
||||
end
|
||||
|
||||
-- Tracker Tab
|
||||
local tab1 = CreateTab("ConsumeTracker_MainFrameTab1", "Interface\\ICONS\\INV_Potion_93", 30, "Consumables Tracker", 1)
|
||||
local tab1 = CreateTab("ConsumeTracker_MainFrameTab1", "Interface\\Icons\\INV_Potion_93", 30, "Consumables Tracker", 1)
|
||||
tab1:SetScript("OnClick", function()
|
||||
ConsumeTracker_ShowTab(1)
|
||||
end)
|
||||
|
||||
-- Options Tab
|
||||
local tab2 = CreateTab("ConsumeTracker_MainFrameTab2", "Interface\\ICONS\\INV_Misc_Gear_01", 80, "Options", 2)
|
||||
local tab2 = CreateTab("ConsumeTracker_MainFrameTab2", "Interface\\Icons\\INV_Misc_Gear_01", 80, "Options", 2)
|
||||
tab2:SetScript("OnClick", function()
|
||||
ConsumeTracker_ShowTab(2)
|
||||
end)
|
||||
|
||||
-- Characters Tab
|
||||
local tab3 = CreateTab("ConsumeTracker_MainFrameTab3", "Interface\\Icons\\Ability_Rogue_Disguise", 130, "Characters", 3)
|
||||
tab3:SetScript("OnClick", function()
|
||||
ConsumeTracker_ShowTab(3)
|
||||
end)
|
||||
|
||||
-- Add Grey Line Under Tabs
|
||||
local tabsLine = ConsumeTracker_MainFrame:CreateTexture(nil, "ARTWORK")
|
||||
tabsLine:SetHeight(1)
|
||||
@@ -255,6 +261,12 @@ function ConsumeTracker_CreateMainWindow()
|
||||
tab2Content:SetPoint("TOPLEFT", ConsumeTracker_MainFrame, "TOPLEFT", 30, -80)
|
||||
ConsumeTracker_MainFrame.tabs[2] = tab2Content
|
||||
|
||||
local tab3Content = CreateFrame("Frame", nil, ConsumeTracker_MainFrame)
|
||||
tab3Content:SetWidth(WindowWidth - 50)
|
||||
tab3Content:SetHeight(380)
|
||||
tab3Content:SetPoint("TOPLEFT", ConsumeTracker_MainFrame, "TOPLEFT", 30, -80)
|
||||
ConsumeTracker_MainFrame.tabs[3] = tab3Content
|
||||
|
||||
-- Footer Text
|
||||
local footerText = ConsumeTracker_MainFrame:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
|
||||
footerText:SetText("Made by Horyoshi (v" .. Version .. "-" .. VState .. ")")
|
||||
@@ -288,6 +300,7 @@ function ConsumeTracker_CreateMainWindow()
|
||||
-- Add Custom Content for Tabs
|
||||
ConsumeTracker_CreateTrackerContent(tab1Content)
|
||||
ConsumeTracker_CreateOptionsContent(tab2Content)
|
||||
ConsumeTracker_CreateCharactersContent(tab3Content)
|
||||
end
|
||||
|
||||
|
||||
@@ -469,7 +482,6 @@ function ConsumeTracker_CreateTrackerContent(parentFrame)
|
||||
ConsumeTracker_UpdateTrackerScrollBar()
|
||||
end
|
||||
|
||||
|
||||
-- Function to create the content of the Options tab
|
||||
function ConsumeTracker_CreateOptionsContent(parentFrame)
|
||||
-- Scroll Frame
|
||||
@@ -563,6 +575,16 @@ function ConsumeTracker_CreateOptionsContent(parentFrame)
|
||||
optionFrame:SetScript("OnMouseDown", function()
|
||||
checkbox:Click()
|
||||
end)
|
||||
|
||||
-- Mouseover Tooltip
|
||||
optionFrame:SetScript("OnEnter", function()
|
||||
ConsumeTracker_ShowOptionsTooltip(currentItemID)
|
||||
end)
|
||||
optionFrame:SetScript("OnLeave", function()
|
||||
if ConsumeTracker_OptionsTooltip then
|
||||
ConsumeTracker_OptionsTooltip:Hide()
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- Add some spacing after each category
|
||||
@@ -598,6 +620,160 @@ function ConsumeTracker_CreateOptionsContent(parentFrame)
|
||||
ConsumeTracker_UpdateOptionsScrollBar()
|
||||
end
|
||||
|
||||
function ConsumeTracker_CreateCharactersContent(parentFrame)
|
||||
-- Scroll Frame
|
||||
local scrollFrame = CreateFrame("ScrollFrame", "ConsumeTracker_CharactersScrollFrame", parentFrame)
|
||||
scrollFrame:SetPoint("TOPLEFT", parentFrame, "TOPLEFT", 0, 0)
|
||||
scrollFrame:SetPoint("BOTTOMRIGHT", parentFrame, "BOTTOMRIGHT", -20, 0)
|
||||
scrollFrame:EnableMouseWheel(true)
|
||||
scrollFrame:SetScript("OnMouseWheel", function()
|
||||
local delta = arg1
|
||||
local current = scrollFrame:GetVerticalScroll()
|
||||
local maxScroll = scrollFrame.maxScroll or 0
|
||||
local newScroll = math.max(0, math.min(current - (delta * 20), maxScroll))
|
||||
scrollFrame:SetVerticalScroll(newScroll)
|
||||
if parentFrame.scrollBar then
|
||||
parentFrame.scrollBar:SetValue(newScroll)
|
||||
end
|
||||
end)
|
||||
|
||||
-- Scroll Child Frame
|
||||
local scrollChild = CreateFrame("Frame", nil, scrollFrame)
|
||||
scrollChild:SetWidth(WindowWidth - 10)
|
||||
scrollChild:SetHeight(1)
|
||||
scrollFrame:SetScrollChild(scrollChild)
|
||||
|
||||
-- Initialize variables
|
||||
parentFrame.checkboxes = {}
|
||||
local index = 0 -- Position index
|
||||
|
||||
-- Ensure settings table for characters exists
|
||||
ConsumeTracker_Settings["Characters"] = ConsumeTracker_Settings["Characters"] or {}
|
||||
|
||||
-- Get list of characters
|
||||
local realmName = GetRealmName()
|
||||
local faction = UnitFactionGroup("player")
|
||||
local playerName = UnitName("player")
|
||||
|
||||
local characterList = {}
|
||||
|
||||
-- Ensure data structure exists
|
||||
if ConsumeTracker_Data[realmName] and ConsumeTracker_Data[realmName][faction] then
|
||||
for characterName, _ in pairs(ConsumeTracker_Data[realmName][faction]) do
|
||||
table.insert(characterList, characterName)
|
||||
end
|
||||
end
|
||||
|
||||
-- Ensure current character is included
|
||||
local playerInList = false
|
||||
for _, name in ipairs(characterList) do
|
||||
if name == playerName then
|
||||
playerInList = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if not playerInList then
|
||||
table.insert(characterList, playerName)
|
||||
end
|
||||
|
||||
-- Sort the character list
|
||||
table.sort(characterList)
|
||||
|
||||
-- Create FontString for title
|
||||
local title = scrollChild:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
title:SetPoint("TOPLEFT", scrollChild, "TOPLEFT", 0, 0) -- Offset from the top
|
||||
title:SetText("Select Characters to Track")
|
||||
title:SetTextColor(1, 1, 1)
|
||||
|
||||
-- Offset index to start below the title
|
||||
local startYOffset = 20
|
||||
|
||||
-- For each character
|
||||
for _, characterName in ipairs(characterList) do
|
||||
index = index + 1
|
||||
|
||||
-- Create a local copy of characterName for the closure
|
||||
local currentCharacterName = characterName
|
||||
|
||||
-- Create a frame that encompasses the checkbox and label
|
||||
local optionFrame = CreateFrame("Frame", "ConsumeTracker_CharacterFrame" .. index, scrollChild)
|
||||
optionFrame:SetWidth(WindowWidth - 10)
|
||||
optionFrame:SetHeight(18)
|
||||
optionFrame:SetPoint("TOPLEFT", scrollChild, "TOPLEFT", 0, -(startYOffset + (index - 1) * 20))
|
||||
|
||||
-- Create the checkbox inside the optionFrame
|
||||
local checkbox = CreateFrame("CheckButton", "ConsumeTracker_CharacterCheckbox" .. index, optionFrame)
|
||||
checkbox:SetWidth(16)
|
||||
checkbox:SetHeight(16)
|
||||
checkbox:SetPoint("LEFT", optionFrame, "LEFT", 0, 0)
|
||||
|
||||
-- Create Textures for the checkbox
|
||||
checkbox:SetNormalTexture("Interface\\Buttons\\UI-CheckBox-Up")
|
||||
checkbox:SetPushedTexture("Interface\\Buttons\\UI-CheckBox-Down")
|
||||
checkbox:SetHighlightTexture("Interface\\Buttons\\UI-CheckBox-Highlight")
|
||||
checkbox:SetCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check")
|
||||
|
||||
-- Create FontString for label
|
||||
local label = optionFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
label:SetPoint("LEFT", checkbox, "RIGHT", 4, 0)
|
||||
label:SetText(currentCharacterName)
|
||||
|
||||
-- Set up the checkbox OnClick handler
|
||||
checkbox:SetScript("OnClick", function()
|
||||
if checkbox:GetChecked() then
|
||||
ConsumeTracker_Settings["Characters"][currentCharacterName] = true
|
||||
else
|
||||
ConsumeTracker_Settings["Characters"][currentCharacterName] = false
|
||||
end
|
||||
ConsumeTracker_UpdateTrackerContent()
|
||||
end)
|
||||
-- Load saved setting
|
||||
if ConsumeTracker_Settings["Characters"][currentCharacterName] == nil then
|
||||
-- Default to checked
|
||||
checkbox:SetChecked(true)
|
||||
ConsumeTracker_Settings["Characters"][currentCharacterName] = true
|
||||
else
|
||||
checkbox:SetChecked(ConsumeTracker_Settings["Characters"][currentCharacterName])
|
||||
end
|
||||
parentFrame.checkboxes[currentCharacterName] = checkbox
|
||||
|
||||
-- Make the optionFrame clickable (so clicking on the label checks/unchecks the box)
|
||||
optionFrame:EnableMouse(true)
|
||||
optionFrame:SetScript("OnMouseDown", function()
|
||||
checkbox:Click()
|
||||
end)
|
||||
end
|
||||
|
||||
-- Adjust the scroll child height
|
||||
scrollChild.contentHeight = startYOffset + index * 20
|
||||
scrollChild:SetHeight(scrollChild.contentHeight)
|
||||
|
||||
-- Scroll Bar
|
||||
local scrollBar = CreateFrame("Slider", "ConsumeTracker_CharactersScrollBar", parentFrame)
|
||||
scrollBar:SetPoint("TOPRIGHT", parentFrame, "TOPRIGHT", -2, -16)
|
||||
scrollBar:SetPoint("BOTTOMRIGHT", parentFrame, "BOTTOMRIGHT", -2, 16)
|
||||
scrollBar:SetWidth(16)
|
||||
scrollBar:SetOrientation('VERTICAL')
|
||||
scrollBar:SetThumbTexture("Interface\\Buttons\\UI-ScrollBar-Knob")
|
||||
scrollBar:SetBackdrop({
|
||||
bgFile = "Interface\\Buttons\\UI-SliderBar-Background",
|
||||
edgeFile = "Interface\\Buttons\\UI-SliderBar-Border",
|
||||
tile = true, tileSize = 8, edgeSize = 8,
|
||||
insets = { left = 3, right = 3, top = 3, bottom = 3 }
|
||||
})
|
||||
scrollBar:SetScript("OnValueChanged", function()
|
||||
local value = scrollBar:GetValue()
|
||||
scrollFrame:SetVerticalScroll(value)
|
||||
end)
|
||||
parentFrame.scrollBar = scrollBar
|
||||
parentFrame.scrollFrame = scrollFrame
|
||||
parentFrame.scrollChild = scrollChild
|
||||
|
||||
-- Update the scrollbar
|
||||
ConsumeTracker_UpdateCharactersScrollBar()
|
||||
end
|
||||
|
||||
|
||||
function ConsumeTracker_UpdateTrackerContent()
|
||||
if not ConsumeTracker_MainFrame or not ConsumeTracker_MainFrame.tabs or not ConsumeTracker_MainFrame.tabs[1] then
|
||||
return
|
||||
@@ -671,6 +847,9 @@ function ConsumeTracker_UpdateTrackerContent()
|
||||
categoryLabel:Hide()
|
||||
end
|
||||
|
||||
-- Ensure character settings exist
|
||||
ConsumeTracker_Settings["Characters"] = ConsumeTracker_Settings["Characters"] or {}
|
||||
|
||||
-- Iterate over categories
|
||||
for _, categoryName in ipairs(sortedCategories) do
|
||||
local consumables = consumablesCategories[categoryName]
|
||||
@@ -700,13 +879,15 @@ function ConsumeTracker_UpdateTrackerContent()
|
||||
hasAnyVisibleItems = true -- Set to true when an item is displayed
|
||||
totalCounts[itemID] = 0 -- Initialize count
|
||||
|
||||
-- Sum counts across all characters
|
||||
-- Sum counts across all selected characters
|
||||
for character, charData in pairs(data) do
|
||||
-- Ensure charData["inventory"], ["bank"], ["mail"] are initialized
|
||||
local inventory = charData["inventory"] and charData["inventory"][itemID] or 0
|
||||
local bank = charData["bank"] and charData["bank"][itemID] or 0
|
||||
local mail = charData["mail"] and charData["mail"][itemID] or 0
|
||||
totalCounts[itemID] = totalCounts[itemID] + inventory + bank + mail
|
||||
if ConsumeTracker_Settings["Characters"][character] == true then
|
||||
-- Proceed with counting
|
||||
local inventory = charData["inventory"] and charData["inventory"][itemID] or 0
|
||||
local bank = charData["bank"] and charData["bank"][itemID] or 0
|
||||
local mail = charData["mail"] and charData["mail"][itemID] or 0
|
||||
totalCounts[itemID] = totalCounts[itemID] + inventory + bank + mail
|
||||
end
|
||||
end
|
||||
|
||||
-- Show and position item label
|
||||
@@ -787,7 +968,6 @@ end
|
||||
|
||||
|
||||
|
||||
|
||||
function ConsumeTracker_UpdateTrackerScrollBar()
|
||||
local trackerFrame = ConsumeTracker_MainFrame.tabs[1]
|
||||
local scrollBar = trackerFrame.scrollBar
|
||||
@@ -813,7 +993,6 @@ end
|
||||
|
||||
|
||||
|
||||
-- Function to update the options scrollbar
|
||||
function ConsumeTracker_UpdateOptionsScrollBar()
|
||||
local optionsFrame = ConsumeTracker_MainFrame.tabs[2]
|
||||
local scrollBar = optionsFrame.scrollBar
|
||||
@@ -837,6 +1016,31 @@ function ConsumeTracker_UpdateOptionsScrollBar()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function ConsumeTracker_UpdateCharactersScrollBar()
|
||||
local charactersFrame = ConsumeTracker_MainFrame.tabs[3]
|
||||
local scrollBar = charactersFrame.scrollBar
|
||||
local scrollFrame = charactersFrame.scrollFrame
|
||||
local scrollChild = charactersFrame.scrollChild
|
||||
|
||||
local totalHeight = scrollChild.contentHeight
|
||||
local shownHeight = 320 -- Adjust based on your UI
|
||||
|
||||
local maxScroll = math.max(0, totalHeight - shownHeight)
|
||||
scrollFrame.maxScroll = maxScroll
|
||||
|
||||
if totalHeight > shownHeight then
|
||||
scrollBar:SetMinMaxValues(0, maxScroll)
|
||||
scrollBar:SetValue(math.min(scrollBar:GetValue(), maxScroll))
|
||||
scrollBar:Show()
|
||||
else
|
||||
scrollBar:SetMinMaxValues(0, 0)
|
||||
scrollBar:SetValue(0)
|
||||
scrollBar:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function ConsumeTracker_ShowConsumableTooltip(itemID)
|
||||
-- Ensure item is enabled in settings
|
||||
if not ConsumeTracker_Settings[itemID] then
|
||||
@@ -869,8 +1073,16 @@ function ConsumeTracker_ShowConsumableTooltip(itemID)
|
||||
title:SetPoint("TOPLEFT", icon, "TOPRIGHT", 10, -2)
|
||||
title:SetPoint("RIGHT", tooltipFrame, "RIGHT", -10, 0)
|
||||
title:SetJustifyH("LEFT")
|
||||
title:SetTextColor(1,1,1)
|
||||
tooltipFrame.title = title
|
||||
|
||||
-- Item Total
|
||||
local total = tooltipFrame:CreateFontString(nil, "OVERLAY", "GameFontNormalLarge")
|
||||
total:SetPoint("TOPLEFT", icon, "TOPRIGHT", 10, -20)
|
||||
total:SetPoint("RIGHT", tooltipFrame, "RIGHT", -10, 0)
|
||||
total:SetJustifyH("LEFT")
|
||||
tooltipFrame.total = total
|
||||
|
||||
-- Content text
|
||||
local content = tooltipFrame:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
|
||||
content:SetPoint("TOPLEFT", icon, "BOTTOMLEFT", 0, -10)
|
||||
@@ -885,8 +1097,8 @@ function ConsumeTracker_ShowConsumableTooltip(itemID)
|
||||
|
||||
-- Get item info
|
||||
local itemName = consumablesList[itemID] or "Unknown Item"
|
||||
local itemTexture = consumablesTextures[itemID] or "Interface\\Icons\\INV_Misc_QuestionMark"
|
||||
|
||||
local itemTexture = consumablesTexture[itemID] or "Interface\\Icons\\INV_Misc_QuestionMark"
|
||||
|
||||
-- Set icon and title
|
||||
tooltipFrame.icon:SetTexture(itemTexture)
|
||||
tooltipFrame.title:SetText(itemName)
|
||||
@@ -909,45 +1121,61 @@ function ConsumeTracker_ShowConsumableTooltip(itemID)
|
||||
local hasItems = false
|
||||
local characterList = {}
|
||||
|
||||
-- Ensure character settings exist
|
||||
ConsumeTracker_Settings["Characters"] = ConsumeTracker_Settings["Characters"] or {}
|
||||
|
||||
-- Collect data for each character
|
||||
for character, charData in pairs(data) do
|
||||
local inventory = charData["inventory"] and charData["inventory"][itemID] or 0
|
||||
local bank = charData["bank"] and charData["bank"][itemID] or 0
|
||||
local mail = charData["mail"] and charData["mail"][itemID] or 0
|
||||
local total = inventory + bank + mail
|
||||
if ConsumeTracker_Settings["Characters"][character] == true then
|
||||
local inventory = charData["inventory"] and charData["inventory"][itemID] or 0
|
||||
local bank = charData["bank"] and charData["bank"][itemID] or 0
|
||||
local mail = charData["mail"] and charData["mail"][itemID] or 0
|
||||
local total = inventory + bank + mail
|
||||
|
||||
if total > 0 then
|
||||
hasItems = true
|
||||
totalInventory = totalInventory + inventory
|
||||
totalBank = totalBank + bank
|
||||
totalMail = totalMail + mail
|
||||
if total > 0 then
|
||||
hasItems = true
|
||||
totalInventory = totalInventory + inventory
|
||||
totalBank = totalBank + bank
|
||||
totalMail = totalMail + mail
|
||||
|
||||
table.insert(characterList, {
|
||||
name = character,
|
||||
inventory = inventory,
|
||||
bank = bank,
|
||||
mail = mail,
|
||||
total = total,
|
||||
isPlayer = (character == playerName)
|
||||
})
|
||||
table.insert(characterList, {
|
||||
name = character,
|
||||
inventory = inventory,
|
||||
bank = bank,
|
||||
mail = mail,
|
||||
total = total,
|
||||
isPlayer = (character == playerName)
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local totalItems = totalInventory + totalBank + totalMail
|
||||
-- Adjust label color based on count
|
||||
if totalItems == 0 then
|
||||
tooltipFrame.total:SetTextColor(1, 0, 0) -- Red
|
||||
elseif totalItems < 10 then
|
||||
tooltipFrame.total:SetTextColor(1, 0.4, 0) -- Orange
|
||||
elseif totalItems <= 20 then
|
||||
tooltipFrame.total:SetTextColor(1, 0.85, 0) -- Yellow
|
||||
else
|
||||
tooltipFrame.total:SetTextColor(0, 1, 0) -- Green
|
||||
end
|
||||
|
||||
tooltipFrame.total:SetText("Total: " .. totalItems)
|
||||
|
||||
if not hasItems then
|
||||
contentText = contentText .. "|cffff0000No items found for this consumable.|r"
|
||||
else
|
||||
-- Display total counts at the top
|
||||
contentText = contentText .. "|cffffff00Total:|r " .. totalItems .. "\n\n"
|
||||
|
||||
-- Sort characters alphabetically (optional)
|
||||
table.sort(characterList, function(a, b) return a.name < b.name end)
|
||||
|
||||
-- Display data for each character
|
||||
for _, charInfo in ipairs(characterList) do
|
||||
local nameColor = charInfo.isPlayer and "|cff00ff00" or "|cffcccccc" -- Green for player, grey for others
|
||||
contentText = contentText .. nameColor .. charInfo.name .. ": " .. charInfo.total .. "|r\n"
|
||||
|
||||
local nameColor = charInfo.isPlayer and "|cff00ff00" or "|cffffffff" -- Green for player, grey for others
|
||||
contentText = contentText .. nameColor .. charInfo.name .. " (" .. charInfo.total .. ")|r\n"
|
||||
|
||||
local detailText = ""
|
||||
if charInfo.inventory > 0 then
|
||||
@@ -959,6 +1187,7 @@ function ConsumeTracker_ShowConsumableTooltip(itemID)
|
||||
if charInfo.mail > 0 then
|
||||
detailText = detailText .. "|cffffffffMail:|r " .. charInfo.mail .. " "
|
||||
end
|
||||
|
||||
contentText = contentText .. " " .. detailText .. "\n\n"
|
||||
end
|
||||
end
|
||||
@@ -987,7 +1216,112 @@ function ConsumeTracker_ShowConsumableTooltip(itemID)
|
||||
end
|
||||
|
||||
|
||||
function ConsumeTracker_ShowOptionsTooltip(itemID)
|
||||
-- Set the maximum width for the description text
|
||||
local maxDescriptionWidth = 160
|
||||
|
||||
-- Create or reuse the tooltip frame
|
||||
if not ConsumeTracker_OptionsTooltip then
|
||||
-- Create the frame
|
||||
local tooltipFrame = CreateFrame("Frame", "ConsumeTracker_OptionsTooltip", UIParent)
|
||||
tooltipFrame:SetFrameStrata("TOOLTIP")
|
||||
tooltipFrame:SetBackdrop({
|
||||
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
||||
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
|
||||
tile = true, tileSize = 16, edgeSize = 16,
|
||||
insets = { left = 4, right = 4, top = 4, bottom = 4 }
|
||||
})
|
||||
tooltipFrame:SetBackdropColor(0, 0, 0, 1)
|
||||
|
||||
-- Item icon
|
||||
local icon = tooltipFrame:CreateTexture(nil, "ARTWORK")
|
||||
icon:SetWidth(32)
|
||||
icon:SetHeight(32)
|
||||
icon:SetPoint("TOPLEFT", tooltipFrame, "TOPLEFT", 10, -10)
|
||||
tooltipFrame.icon = icon
|
||||
|
||||
-- Item name
|
||||
local title = tooltipFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
title:SetPoint("TOPLEFT", icon, "TOPRIGHT", 10, -2)
|
||||
title:SetJustifyH("LEFT")
|
||||
tooltipFrame.title = title
|
||||
|
||||
-- Item description
|
||||
local description = tooltipFrame:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
|
||||
description:SetPoint("TOPLEFT", icon, "TOPRIGHT", 10, -16)
|
||||
description:SetWidth(maxDescriptionWidth)
|
||||
description:SetJustifyH("LEFT")
|
||||
description:SetTextColor(1, 1, 1)
|
||||
tooltipFrame.description = description
|
||||
|
||||
ConsumeTracker_OptionsTooltip = tooltipFrame
|
||||
end
|
||||
|
||||
local tooltipFrame = ConsumeTracker_OptionsTooltip
|
||||
|
||||
-- Get item info
|
||||
local itemName = consumablesList[itemID] or "Unknown Item"
|
||||
local itemTexture = consumablesTexture[itemID] or "Interface\\Icons\\INV_Misc_QuestionMark"
|
||||
local itemDescription = consumablesDescription[itemID] or ""
|
||||
|
||||
-- Function to add line breaks manually
|
||||
local function WrapText(text, maxWidth, fontObject)
|
||||
local wrappedText = ""
|
||||
local currentLine = ""
|
||||
local space = " "
|
||||
local testString = tooltipFrame:CreateFontString(nil, "OVERLAY", fontObject)
|
||||
testString:SetWidth(0)
|
||||
testString:SetHeight(0)
|
||||
testString:Hide() -- We don't need to display this
|
||||
|
||||
-- Replace \n with spaces to avoid unintended line breaks
|
||||
text = string.gsub(text, "\n", " ")
|
||||
|
||||
-- Split the text into words
|
||||
for word in string.gfind(text, "%S+") do
|
||||
local testLine = currentLine == "" and word or (currentLine .. space .. word)
|
||||
testString:SetText(testLine)
|
||||
if testString:GetStringWidth() > maxWidth then
|
||||
wrappedText = wrappedText == "" and currentLine or (wrappedText .. "\n" .. currentLine)
|
||||
currentLine = word
|
||||
else
|
||||
currentLine = testLine
|
||||
end
|
||||
end
|
||||
wrappedText = wrappedText == "" and currentLine or (wrappedText .. "\n" .. currentLine)
|
||||
return wrappedText
|
||||
end
|
||||
|
||||
-- Wrap the description text
|
||||
local wrappedDescription = WrapText(itemDescription, maxDescriptionWidth, "GameFontNormalSmall")
|
||||
|
||||
-- Set icon, title, and description
|
||||
tooltipFrame.icon:SetTexture(itemTexture)
|
||||
tooltipFrame.title:SetText(itemName)
|
||||
tooltipFrame.description:SetText(wrappedDescription)
|
||||
|
||||
-- Calculate the number of lines in the wrapped description
|
||||
local _, lineCount = string.gsub(wrappedDescription, "\n", "")
|
||||
lineCount = lineCount + 1 -- Add 1 for the last line
|
||||
|
||||
-- Set the heights for the description and the tooltip frame
|
||||
local lineHeight = 12
|
||||
tooltipFrame.description:SetHeight(lineCount * lineHeight)
|
||||
|
||||
local totalHeight = 50 + (lineCount * lineHeight)
|
||||
tooltipFrame:SetHeight(totalHeight)
|
||||
|
||||
-- Set the width of the tooltip
|
||||
local maxWidth = math.max(tooltipFrame.title:GetStringWidth() + 70, tooltipFrame.description:GetStringWidth() + 70)
|
||||
tooltipFrame:SetWidth(maxWidth)
|
||||
|
||||
-- Position the tooltip near the cursor
|
||||
local x, y = GetCursorPosition()
|
||||
local scale = UIParent:GetEffectiveScale()
|
||||
tooltipFrame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", x / scale + 10, y / scale - 10)
|
||||
|
||||
tooltipFrame:Show()
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
## Title: |cff00ff00Consumes Tracker|r |cff808080[Horyoshi]|r
|
||||
## Notes: Tracks your inventory, bank and mail for consumables. Works through multiple characters on the same account.
|
||||
## Author: Horyoshi
|
||||
## Version: 1.2
|
||||
## Version: 1.3
|
||||
## SavedVariables: ConsumeTracker_Settings, ConsumeTracker_Data
|
||||
|
||||
ConsumesTracker.lua
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Reference in New Issue
Block a user