3416 lines
130 KiB
Lua
3416 lines
130 KiB
Lua
--[[
|
|
Atlasloot Enhanced
|
|
Author Daviesh
|
|
Loot browser associating loot with instance bosses
|
|
Can be integrated with Atlas (http://www.atlasmod.com)
|
|
]]
|
|
|
|
local _G = _G or getfenv(0)
|
|
local refreshTimeout = 2
|
|
|
|
-- Bindings
|
|
BINDING_HEADER_ATLASLOOT_TITLE = "AtlasLoot Bindings"
|
|
BINDING_NAME_ATLASLOOT_TOGGLE = "Toggle AtlasLoot"
|
|
BINDING_NAME_ATLASLOOT_OPTIONS = "Toggle Options"
|
|
BINDING_NAME_ATLASLOOT_QL1 = "QuickLook 1"
|
|
BINDING_NAME_ATLASLOOT_QL2 = "QuickLook 2"
|
|
BINDING_NAME_ATLASLOOT_QL3 = "QuickLook 3"
|
|
BINDING_NAME_ATLASLOOT_QL4 = "QuickLook 4"
|
|
BINDING_NAME_ATLASLOOT_WISHLIST = "WishList"
|
|
|
|
AtlasLoot = AceLibrary("AceAddon-2.0"):new("AceDB-2.0")
|
|
|
|
-- Instance required libraries
|
|
local AL = AceLibrary("AceLocale-2.2"):new("AtlasLoot");
|
|
|
|
-- Establish version number and compatible version of Atlas
|
|
local ver = string.gsub(GetAddOnMetadata("AtlasLoot", "Version"), "%.", "0")
|
|
_,_, ver = string.find(ver, "(%d+)")
|
|
local version = tonumber(ver)
|
|
ATLASLOOT_VERSION = "|cffFF8400AtlasLoot TW Edition v"..GetAddOnMetadata("AtlasLoot", "Version").."|r";
|
|
|
|
-- Compatibility with old EquipCompare/EQCompare
|
|
ATLASLOOT_OPTIONS_EQUIPCOMPARE = AL["Use EquipCompare"];
|
|
ATLASLOOT_OPTIONS_EQUIPCOMPARE_DISABLED = AL["|cff9d9d9dUse EquipCompare|r"];
|
|
|
|
-- Make the Hewdrop menu in the standalone loot browser accessible here
|
|
AtlasLoot_Hewdrop = AceLibrary("Hewdrop-2.0");
|
|
AtlasLoot_HewdropSubMenu = AceLibrary("Hewdrop-2.0");
|
|
|
|
-- Colours stored for code readability
|
|
local GREY = "|cff999999";
|
|
local RED = "|cffff0000";
|
|
local WHITE = "|cffFFFFFF";
|
|
local GREEN = "|cff1eff00";
|
|
local PURPLE = "|cff9F3FFF";
|
|
local BLUE = "|cff0070dd";
|
|
local ORANGE = "|cffFF8400";
|
|
local DEFAULT = "|cffFFd200";
|
|
|
|
-- Establish number of boss lines in the Atlas frame for scrolling
|
|
local ATLAS_LOOT_BOSS_LINES = 24;
|
|
|
|
local Anchor_Atlas = { "TOPLEFT", "AtlasFrame", "TOPLEFT", 18, -84 }
|
|
local Anchor_AlphaMap = { "TOPLEFT", "AlphaMapAlphaMapFrame", "TOPLEFT", 0, 0 }
|
|
local Anchor_Default = { "TOPLEFT", "AtlasLootDefaultFrame", "TOPLEFT", 45, -85 }
|
|
|
|
-- Variables to hold hooked Atlas functions
|
|
local Original_Atlas_Refresh;
|
|
local Original_Atlas_OnShow;
|
|
local Original_AtlasScrollBar_Update;
|
|
|
|
AtlasLootCharDB = {};
|
|
|
|
AtlasLoot:RegisterDB("AtlasLootDB");
|
|
|
|
-- Popup Box for first time users
|
|
StaticPopupDialogs["ATLASLOOT_SETUP"] = {
|
|
text = AL["Welcome to Atlasloot Enhanced. Please take a moment to set your preferences."],
|
|
button1 = AL["Setup"],
|
|
OnAccept = function()
|
|
AtlasLootOptions_Toggle();
|
|
end,
|
|
timeout = 0,
|
|
whileDead = 1,
|
|
hideOnEscape = 1
|
|
};
|
|
|
|
AtlasLoot_Data["AtlasLootFallback"] = {
|
|
EmptyInstance = {};
|
|
};
|
|
|
|
AtlasLoot_MenuList = {
|
|
["DUNGEONSMENU1"] = "AtlasLoot_DungeonsMenu1",
|
|
["DUNGEONSMENU2"] = "AtlasLoot_DungeonsMenu2",
|
|
["PVPMENU"] = "AtlasLootPvPMenu",
|
|
["ABRepMenu"] = "AtlasLootABRepMenu",
|
|
["AVRepMenu"] = "AtlasLootAVRepMenu",
|
|
["WSGRepMenu"] = "AtlasLootWSGRepMenu",
|
|
["BRRepMenu"] = "AtlasLootBRRepMenu",
|
|
["PVPSET"] = "AtlasLootPVPSetMenu",
|
|
["SETMENU"] = "AtlasLootSetMenu",
|
|
["AQ20SET"] = "AtlasLootAQ20SetMenu",
|
|
["AQ40SET"] = "AtlasLootAQ40SetMenu",
|
|
["KARASET"] = "AtlasLoot_Kara40SetMenu",
|
|
["PRE60SET"] = "AtlasLootPRE60SetMenu",
|
|
["ZGSET"] = "AtlasLootZGSetMenu",
|
|
["T3SET"] = "AtlasLootT3SetMenu",
|
|
["T2SET"] = "AtlasLootT2SetMenu",
|
|
["T1SET"] = "AtlasLootT1SetMenu",
|
|
["T0SET"] = "AtlasLootT0SetMenu",
|
|
["REPMENU"] = "AtlasLootRepMenu",
|
|
["WORLDEVENTMENU"] = "AtlasLootWorldEventMenu",
|
|
["ALCHEMYMENU"] = "AtlasLoot_AlchemyMenu",
|
|
["CRAFTINGMENU"] = "AtlasLoot_CraftingMenu",
|
|
["SMITHINGMENU"] = "AtlasLoot_SmithingMenu",
|
|
["ENCHANTINGMENU"] = "AtlasLoot_EnchantingMenu",
|
|
["ENGINEERINGMENU"] = "AtlasLoot_EngineeringMenu",
|
|
["LEATHERWORKINGMENU"] = "AtlasLoot_LeatherworkingMenu",
|
|
["TAILORINGMENU"] = "AtlasLoot_TailoringMenu",
|
|
["JEWELCRAFTMENU"] = "AtlasLoot_JewelcraftingMenu",
|
|
["CRAFTSET"] = "AtlasLootCraftedSetMenu",
|
|
["WORLDBOSSMENU"] = "AtlasLoot_WorldBossMenu",
|
|
};
|
|
|
|
-- This is a multi-layer table defining the main loot listing.
|
|
-- Entries have the text to display, loot table or sub table to link to and if the link is to a loot table or sub table
|
|
AtlasLoot_HewdropDown = {
|
|
{[AL["Dungeons & Raids"]] = {
|
|
{{ AL["[13-18] Ragefire Chasm"], "RagefireChasm", "Submenu" },},
|
|
{{ AL["[17-24] Wailing Caverns"], "WailingCaverns", "Submenu" },},
|
|
{{ AL["[17-24] The Deadmines"], "Deadmines", "Submenu" },},
|
|
{{ AL["[22-30] Shadowfang Keep"], "ShadowfangKeep", "Submenu" },},
|
|
{{ AL["[23-32] Blackfathom Deeps"], "BlackfathomDeeps", "Submenu" },},
|
|
{{ AL["[22-30] The Stockade"], "TheStockade", "Submenu" },},
|
|
{{ AL["[26-35] Dragonmaw Retreat"], "DragonmawRetreat", "Submenu" },},
|
|
{{ AL["[29-38] Gnomeregan"], "Gnomeregan", "Submenu" },},
|
|
{{ AL["[29-38] Razorfen Kraul"], "RazorfenKraul", "Submenu" },},
|
|
{{ AL["[32-38] The Crescent Grove"], "TheCrescentGrove", "Submenu" },},
|
|
{[ AL["[27-45] Scarlet Monastery"]] = {
|
|
{ AL["[27-36] Scarlet Monastery (Graveyard)"], "SMGraveyard", "Submenu" },
|
|
{ AL["[28-39] Scarlet Monastery (Library)"], "SMLibrary", "Submenu" },
|
|
{ AL["[32-41] Scarlet Monastery (Armory)"], "SMArmory", "Submenu" },
|
|
{ AL["[35-45] Scarlet Monastery (Cathedral)"], "SMCathedral", "Submenu" },
|
|
},},
|
|
{{ AL["[32-44] Stormwrought Ruins"], "StormwroughtRuins", "Submenu" },},
|
|
{{ AL["[36-46] Razorfen Downs"], "RazorfenDowns", "Submenu" },},
|
|
{{ AL["[40-51] Uldaman"], "Uldaman", "Submenu" },},
|
|
{{ AL["[42-50] Gilneas City"], "GilneasCity", "Submenu" },},
|
|
{{ AL["[45-55] Maraudon"], "Maraudon", "Submenu" },},
|
|
{{ AL["[44-54] Zul'Farrak"], "ZulFarrak", "Submenu" },},
|
|
{{ AL["[50-60] The Sunken Temple"], "SunkenTemple", "Submenu" },},
|
|
{{ AL["[50-60] Hateforge Quarry"], "HateforgeQuarry", "Submenu" },},
|
|
{{ AL["[52-60] Blackrock Depths"], "BlackrockDepths", "Submenu" },},
|
|
{[AL["[55-60] Dire Maul"]] = {
|
|
{ AL["[55-60] Dire Maul (East)"], "DireMaulEast", "Submenu" },
|
|
{ AL["[57-60] Dire Maul (West)"], "DireMaulWest", "Submenu" },
|
|
{ AL["[57-60] Dire Maul (North)"], "DireMaulNorth", "Submenu" },
|
|
},},
|
|
{{ AL["[58-60] Scholomance"], "Scholomance", "Submenu" },},
|
|
{{ AL["[58-60] Stratholme"], "Stratholme", "Submenu" },},
|
|
{{ AL["[55-60] Lower Blackrock Spire"], "LowerBlackrock", "Submenu" },},
|
|
{{ AL["[58-60] Upper Blackrock Spire"], "UpperBlackrock", "Submenu" },},
|
|
{{ AL["[58-60] Karazhan Crypt"], "KarazhanCrypt", "Submenu" },},
|
|
{{ AL["[60] Caverns of Time: Black Morass"], "CavernsOfTimeBlackMorass", "Submenu" },},
|
|
{{ AL["[60] Stormwind Vault"], "StormwindVault", "Submenu" },},
|
|
{{ AL["[RAID] Zul'Gurub"], "ZulGurub", "Submenu" },},
|
|
{{ AL["[RAID] Ruins of Ahn'Qiraj"], "RuinsofAQ", "Submenu" },},
|
|
{{ AL["[RAID] Molten Core"], "MoltenCore", "Submenu" },},
|
|
{{ AL["[RAID] Onyxia's Lair"], "Onyxia", "Submenu" },},
|
|
{{ AL["[RAID] Lower Karazhan Halls"], "LowerKara", "Submenu" },},
|
|
{{ AL["[RAID] Blackwing Lair"], "BlackwingLair", "Submenu" },},
|
|
{{ AL["[RAID] Emerald Sanctum"], "EmeraldSanctum", "Submenu" },},
|
|
{{ AL["[RAID] Temple of Ahn'Qiraj"], "TempleofAQ", "Submenu" },},
|
|
{{ AL["[RAID] Naxxramas"], "Naxxramas", "Submenu" },},
|
|
{{ AL["[RAID] Upper Karazhan Halls"], "UpperKara", "Submenu" },},
|
|
},
|
|
},
|
|
{[AL["World Bosses"]] = {
|
|
{{AL["Azuregos"], "AAzuregos", "Table" },},
|
|
{{AL["Emeriss"], "DEmeriss", "Table" },},
|
|
{{AL["Lethon"], "DLethon", "Table" },},
|
|
{{AL["Taerar"], "DTaerar", "Table" },},
|
|
{{AL["Ysondre"], "DYsondre", "Table" },},
|
|
{{AL["Lord Kazzak"], "KKazzak", "Table" },},
|
|
{{AL["Nerubian Overseer"], "Nerubian", "Table" },},
|
|
{{AL["Dark Reaver of Karazhan"], "Reaver", "Table" },},
|
|
{{AL["Ostarius"], "Ostarius", "Table" },},
|
|
{{AL["Concavius"], "Concavius", "Table" },},
|
|
{{AL["Moo"], "CowKing", "Table" },},
|
|
{{AL["Cla'ckora"], "Clackora", "Table"},},
|
|
},
|
|
},
|
|
{[AL["PvP Rewards"]] = {
|
|
{{ AL["PvP Armor Sets"], "PVPSET", "Table" },},
|
|
{{ AL["PvP Accessories"], "PvP60Accessories1", "Table" },},
|
|
{{ AL["Rank 14 Weapons"], "PVPWeapons1", "Table" },},
|
|
{{ AL["PvP Mounts"], "PvPMountsPvP", "Table" },},
|
|
{{ AL["Blood Ring"], "BRRepMenu", "Table" },},
|
|
{{ AL["Alterac Valley"], "AVRepMenu", "Table" },},
|
|
{{ AL["Arathi Basin"], "ABRepMenu", "Table" },},
|
|
{{ AL["Warsong Gulch"], "WSGRepMenu", "Table" },},
|
|
},
|
|
},
|
|
{[AL["Collections"]] = {
|
|
{{ AL["Sets"], "PRE60SET", "Table" },},
|
|
{{ AL["Zul'Gurub Sets"], "ZGSET", "Table" },},
|
|
{{ AL["Ruins of Ahn'Qiraj Sets"], "AQ20SET", "Table" },},
|
|
{{ AL["Temple of Ahn'Qiraj Sets"], "AQ40SET", "Table" },},
|
|
{{ AL["Karazhan Sets"], "KARASET", "Table" },},
|
|
{{ AL["Dungeon 1/2 Sets"], "T0SET", "Table" },},
|
|
{{ AL["Tier 1 Sets"], "T1SET", "Table" },},
|
|
{{ AL["Tier 2 Sets"], "T2SET", "Table" },},
|
|
{{ AL["Tier 3 Sets"], "T3SET", "Table" },},
|
|
{{ AL["Legendary Items"], "Legendaries", "Table" },},
|
|
{{ AL["World Epics"], "WorldEpics1", "Table" },},
|
|
{{ AL["Rare Pets"], "RarePets1", "Table" },},
|
|
{{ AL["Rare Mounts"], "RareMounts", "Table" },},
|
|
{{ AL["Tabards"], "Tabards", "Table" },},
|
|
},
|
|
},
|
|
{[AL["Factions"]] = {
|
|
{{ AL["Argent Dawn"], "Argent1" , "Table" },},
|
|
{{ AL["Bloodsail Buccaneers"], "Bloodsail1", "Table" },},
|
|
{{ AL["Brood of Nozdormu"], "AQBroodRings", "Table" },},
|
|
{{ AL["Cenarion Circle"], "Cenarion1", "Table" }},
|
|
{{ AL["Dalaran"], "Dalaran", "Table" },},
|
|
{{ AL["Darkmoon Faire"], "Darkmoon", "Table" },},
|
|
{{ AL["Darkspear Trolls"], "DarkspearTrolls", "Table" },},
|
|
{{ AL["Darnassus"], "Darnassus", "Table" },},
|
|
{{ AL["Durotar Labor Union"], "DurotarLaborUnion", "Table" },},
|
|
{{ AL["Frostwolf Clan"], "Frostwolf1", "Table" },},
|
|
{{ AL["Gelkis Clan Centaur"], "GelkisClan1", "Table" },},
|
|
{{ AL["Gnomeregan Exiles"], "GnomereganExiles", "Table" },},
|
|
{{ AL["Hydraxian Waterlords"], "WaterLords1", "Table" },},
|
|
{{ AL["Ironforge"], "Ironforge", "Table" },},
|
|
{{ AL["Magram Clan Centaur"], "MagramClan1", "Table" },},
|
|
{{ AL["Orgrimmar"], "Orgrimmar", "Table" },},
|
|
{{ AL["Revantusk Trolls"], "Revantusk", "Table" },},
|
|
{{ AL["Silvermoon Remnant"], "Helf", "Table" },},
|
|
{{ AL["Stormpike Guard"], "Stormpike1", "Table" },},
|
|
{{ AL["Stormwind"], "Stormwind", "Table" },},
|
|
{{ AL["Shen'dralar"], "Shendralar", "Table" },},
|
|
{{ AL["Thorium Brotherhood"], "Thorium1", "Table" },},
|
|
{{ AL["Thunder Bluff"], "ThunderBluff", "Table" },},
|
|
{{ AL["Timbermaw Hold"], "Timbermaw", "Table" },},
|
|
{{ AL["Undercity"], "Undercity", "Table" },},
|
|
{{ AL["Wardens of Time"], "Wardens1", "Table" },},
|
|
{{ AL["Wildhammer Clan"], "Wildhammer", "Table" },},
|
|
{{ AL["Wintersaber Trainers"], "Wintersaber1", "Table" },},
|
|
{{ AL["Zandalar Tribe"], "Zandalar1", "Table" },},
|
|
},
|
|
},
|
|
{[AL["World Events"]] = {
|
|
{{ AL["Abyssal Council"], "AbyssalTemplars", "Table" },},
|
|
{{ AL["Children's Week"], "ChildrensWeek", "Table" },},
|
|
{{ AL["Elemental Invasion"], "ElementalInvasion", "Table" },},
|
|
{{ AL["Feast of Winter Veil"], "Winterviel1", "Table" },},
|
|
{{ AL["Gurubashi Arena"], "GurubashiArena", "Table" },},
|
|
{{ AL["Hallow's End"], "Halloween1", "Table" },},
|
|
{{ AL["Harvest Festival"], "HarvestFestival", "Table" },},
|
|
{{ AL["Love is in the Air"], "Valentineday", "Table" },},
|
|
{{ AL["Lunar Festival"], "LunarFestival1", "Table" },},
|
|
{{ AL["Midsummer Fire Festival"], "MidsummerFestival", "Table" },},
|
|
{{ AL["Noblegarden"], "Noblegarden", "Table" },},
|
|
{{ AL["Scourge Invasion"], "ScourgeInvasionEvent1", "Table" },},
|
|
{{ AL["Stranglethorn Fishing Extravaganza"], "FishingExtravaganza", "Table" },},
|
|
},
|
|
},
|
|
{[AL["Crafting"]] = {
|
|
{ { AL["Alchemy"], "ALCHEMYMENU", "Table" }, },
|
|
{ { AL["Blacksmithing"], "SMITHINGMENU", "Table" }, },
|
|
{ { AL["Enchanting"], "ENCHANTINGMENU", "Table" }, },
|
|
{ { AL["Engineering"], "ENGINEERINGMENU", "Table" }, },
|
|
{ { AL["Herbalism"], "Herbalism1", "Table" }, },
|
|
{ { AL["Leatherworking"], "LEATHERWORKINGMENU", "Table" }, },
|
|
{ { AL["Jewelcrafting"], "JEWELCRAFTMENU", "Table" }, },
|
|
{ { AL["Mining"], "Mining1", "Table" }, },
|
|
{ { AL["Tailoring"], "TAILORINGMENU", "Table" }, },
|
|
{ { AL["Cooking"], "CookingApprentice1", "Table" }, },
|
|
{ { AL["First Aid"], "FirstAid1", "Table" }, },
|
|
{ { AL["Survival"], "Survival1", "Table" }, },
|
|
{ { AL["Gardening"], "Survival2", "Table" }, },
|
|
{ { AL["Poisons"], "Poisons1", "Table" }, },
|
|
{ { AL["Crafted Sets"], "CRAFTSET", "Table" },},
|
|
{ { AL["Crafted Epic Weapons"], "CraftedWeapons1", "Table" }, },
|
|
},
|
|
},
|
|
{{ "Rare Spawns", "RareSpawns", "Submenu" },},
|
|
};
|
|
|
|
-- This table defines all the subtables needed for the full menu
|
|
-- Each sub table entry contains the text entry and the loot table that goes wih it
|
|
AtlasLoot_HewdropDown_SubTables = {
|
|
["HateforgeQuarry"] = {
|
|
{ AL["High Foreman Bargul Blackhammer"], "HQHighForemanBargulBlackhammer" },
|
|
{ AL["Engineer Figgles"], "HQEngineerFiggles" },
|
|
{ AL["Corrosis"], "HQCorrosis" },
|
|
{ AL["Hatereaver Annihilator"], "HQHatereaverAnnihilator" },
|
|
{ AL["Har'gesh Doomcaller"], "HQHargeshDoomcaller" },
|
|
{ AL["Trash Mobs"], "HQTrash" },
|
|
},
|
|
["BlackrockDepths"] = {
|
|
{ AL["Lord Roccor"], "BRDLordRoccor" },
|
|
{ AL["High Interrogator Gerstahn"], "BRDHighInterrogatorGerstahn" },
|
|
{ AL["Anub'shiah"], "BRDAnubshiah" },
|
|
{ AL["Eviscerator"], "BRDEviscerator" },
|
|
{ AL["Gorosh the Dervish"], "BRDGorosh" },
|
|
{ AL["Grizzle"], "BRDGrizzle" },
|
|
{ AL["Hedrum the Creeper"], "BRDHedrum" },
|
|
{ AL["Ok'thor the Breaker"], "BRDOkthor" },
|
|
{ AL["Theldren"], "BRDTheldren" },
|
|
{ AL["Houndmaster Grebmar"], "BRDHoundmaster" },
|
|
{ AL["Pyromancer Loregrain"].." ("..AL["Rare"]..")", "BRDPyromancerLoregrain" },
|
|
{ AL["The Vault"], "BRDTheVault" },
|
|
{ AL["Warder Stilgiss"].." ("..AL["Rare"]..")", "BRDWarderStilgiss" },
|
|
{ AL["Verek"].." ("..AL["Rare"]..")", "BRDVerek" },
|
|
{ AL["Fineous Darkvire"], "BRDFineousDarkvire" },
|
|
{ AL["Lord Incendius"], "BRDLordIncendius" },
|
|
{ AL["Bael'Gar"], "BRDBaelGar" },
|
|
{ AL["General Angerforge"], "BRDGeneralAngerforge" },
|
|
{ AL["Golem Lord Argelmach"], "BRDGolemLordArgelmach" },
|
|
{ AL["The Grim Guzzler"], "BRDGuzzler" },
|
|
{ AL["Ambassador Flamelash"], "BRDFlamelash" },
|
|
{ AL["Panzor the Invincible"].." ("..AL["Rare"]..")", "BRDPanzor" },
|
|
{ AL["Summoner's Tomb"], "BRDTomb" },
|
|
{ AL["Magmus"], "BRDMagmus" },
|
|
{ AL["Princess Moira Bronzebeard"], "BRDPrincess" },
|
|
{ AL["Emperor Dagran Thaurissan"], "BRDEmperorDagranThaurissan" },
|
|
{ AL["Trash Mobs"], "BRDTrash" },
|
|
},
|
|
["LowerBlackrock"] = {
|
|
{ AL["Spirestone Butcher"].." ("..AL["Rare"]..")", "LBRSSpirestoneButcher" },
|
|
{ AL["Spirestone Battle Lord"].." ("..AL["Rare"]..")", "LBRSSpirestoneBattleLord" },
|
|
{ AL["Spirestone Lord Magus"].." ("..AL["Rare"]..")", "LBRSSpirestoneLordMagus" },
|
|
{ AL["Highlord Omokk"], "LBRSOmokk" },
|
|
{ AL["Shadow Hunter Vosh'gajin"], "LBRSVosh" },
|
|
{ AL["War Master Voone"], "LBRSVoone" },
|
|
{ AL["Burning Felguard"].." ("..AL["Rare"]..")", "LBRSFelguard" },
|
|
{ AL["Mor Grayhoof"], "LBRSGrayhoof" },
|
|
{ AL["Bannok Grimaxe"].." ("..AL["Rare"]..")", "LBRSGrimaxe" },
|
|
{ AL["Mother Smolderweb"], "LBRSSmolderweb" },
|
|
{ AL["Crystal Fang"].." ("..AL["Rare"]..")", "LBRSCrystalFang" },
|
|
{ AL["Urok Doomhowl"], "LBRSDoomhowl" },
|
|
{ AL["Quartermaster Zigris"], "LBRSZigris" },
|
|
{ AL["Halycon"], "LBRSHalycon" },
|
|
{ AL["Gizrul the Slavener"], "LBRSSlavener" },
|
|
{ AL["Ghok Bashguud"].." ("..AL["Rare"]..")", "LBRSBashguud" },
|
|
{ AL["Overlord Wyrmthalak"], "LBRSWyrmthalak" },
|
|
{ AL["Trash Mobs"], "LBRSTrash" },
|
|
},
|
|
["UpperBlackrock"] = {
|
|
{ AL["Pyroguard Emberseer"], "UBRSEmberseer" },
|
|
{ AL["Solakar Flamewreath"], "UBRSSolakar" },
|
|
{ AL["Father Flame"], "UBRSFlame" },
|
|
{ AL["Jed Runewatcher"].." ("..AL["Rare"]..")", "UBRSRunewatcher" },
|
|
{ AL["Goraluk Anvilcrack"].." ("..AL["Rare"]..")", "UBRSAnvilcrack" },
|
|
{ AL["Warchief Rend Blackhand"], "UBRSRend" },
|
|
{ AL["Gyth"], "UBRSGyth" },
|
|
{ AL["The Beast"], "UBRSBeast" },
|
|
{ AL["Lord Valthalak"], "UBRSValthalak" },
|
|
{ AL["General Drakkisath"], "UBRSDrakkisath" },
|
|
{ AL["Trash Mobs"], "UBRSTrash" },
|
|
},
|
|
["KarazhanCrypt"] = {
|
|
{ AL["Marrowspike"], "KCMarrowspike" },
|
|
{ AL["Hivaxxis"], "KCHivaxxis" },
|
|
{ AL["Corpsemuncher"], "KCCorpsemuncher" },
|
|
{ AL["Guard Captain Gort"], "KCGuardCaptainGort" },
|
|
{ AL["Archlich Enkhraz"], "KCArchlichEnkhraz" },
|
|
{ AL["Commander Andreon"], "KCCommanderAndreon" },
|
|
{ AL["Alarus"], "KCAlarus" },
|
|
{ AL["Half-Buried Treasure Chest"], "KCTreasure" },
|
|
{ AL["Trash Mobs"], "KCTrash" },
|
|
},
|
|
["CavernsOfTimeBlackMorass"] = {
|
|
{ AL["Chronar"], "COTBMChronar" },
|
|
{ AL["Epidamu"], "COTBMEpidamu" },
|
|
{ AL["Drifting Avatar of Sand"], "COTBMDriftingAvatar" },
|
|
{ AL["Time-Lord Epochronos"], "COTBMTimeLordEpochronos" },
|
|
{ AL["Mossheart"], "COTBMMossheart" },
|
|
{ AL["Rotmaw"], "COTBMRotmaw" },
|
|
{ AL["Antnormi"], "COTBMAntnormi" },
|
|
{ AL["Trash Mobs"], "COTTrash" },
|
|
-- { AL["Infinite Chromie"], "COTBMInfiniteChromie" },
|
|
},
|
|
["StormwindVault"] = {
|
|
{ AL["Aszosh Grimflame"], "SWVAszoshGrimflame" },
|
|
{ AL["Tham'Grarr"], "SWVThamGrarr" },
|
|
{ AL["Black Bride"], "SWVBlackBride" },
|
|
{ AL["Damian"], "SWVDamian" },
|
|
{ AL["Volkan Cruelblade"], "SWVVolkanCruelblade" },
|
|
{ AL["Arc'tiras"], "SWVVaultArmoryEquipment" },
|
|
{ AL["Trash Mobs"], "SWVTrash" },
|
|
},
|
|
["BlackwingLair"] = {
|
|
{ AL["Razorgore the Untamed"], "BWLRazorgore" },
|
|
{ AL["Vaelastrasz the Corrupt"], "BWLVaelastrasz" },
|
|
{ AL["Broodlord Lashlayer"], "BWLLashlayer" },
|
|
{ AL["Firemaw"], "BWLFiremaw" },
|
|
{ AL["Ebonroc"], "BWLEbonroc" },
|
|
{ AL["Flamegor"], "BWLFlamegor" },
|
|
{ AL["Chromaggus"], "BWLChromaggus" },
|
|
{ AL["Nefarian"], "BWLNefarian" },
|
|
{ AL["Trash Mobs"], "BWLTrashMobs" },
|
|
},
|
|
["Deadmines"] = {
|
|
{ AL["Jared Voss"], "DMJaredVoss" },
|
|
{ AL["Rhahk'Zor"], "DMRhahkZor" },
|
|
{ AL["Miner Johnson"].." ("..AL["Rare"]..")", "DMMinerJohnson" },
|
|
{ AL["Sneed"], "DMSneed" },
|
|
{ AL["Sneed's Shredder"], "DMSneedsShredder" },
|
|
{ AL["Gilnid"], "DMGilnid" },
|
|
{ AL["Masterpiece Harvester"], "DMHarvester" },
|
|
{ AL["Mr. Smite"], "DMMrSmite" },
|
|
{ AL["Cookie"], "DMCookie" },
|
|
{ AL["Captain Greenskin"], "DMCaptainGreenskin" },
|
|
{ AL["Edwin VanCleef"], "DMVanCleef" },
|
|
{ AL["Trash Mobs"], "DMTrash" },
|
|
},
|
|
["TheCrescentGrove"] = {
|
|
{ AL["Grovetender Engryss"], "TCGGrovetenderEngryss" },
|
|
{ AL["Keeper Ranathos"], "TCGKeeperRanathos" },
|
|
{ AL["High Priestess A'lathea"], "TCGHighPriestessAlathea" },
|
|
{ AL["Fenektis the Deceiver"], "TCGFenektistheDeceiver" },
|
|
{ AL["Master Raxxieth"], "TCGMasterRaxxieth" },
|
|
{ AL["Trash Mobs"], "TCGTrash" },
|
|
},
|
|
["Gnomeregan"] = {
|
|
{ AL["Grubbis"], "GnGrubbis" },
|
|
{ AL["Viscous Fallout"], "GnViscousFallout" },
|
|
{ AL["Electrocutioner 6000"], "GnElectrocutioner6000" },
|
|
{ AL["Crowd Pummeler 9-60"], "GnCrowdPummeler960" },
|
|
{ AL["Dark Iron Ambassador"], "GnDIAmbassador" },
|
|
{ AL["Mekgineer Thermaplugg"], "GnMekgineerThermaplugg" },
|
|
{ AL["Trash Mobs"], "GnTrash" },
|
|
},
|
|
["MoltenCore"] = {
|
|
{ AL["Incindis"], "MCIncindis" },
|
|
{ AL["Lucifron"], "MCLucifron" },
|
|
{ AL["Magmadar"], "MCMagmadar" },
|
|
-- { AL["Gehennas"], "MCGehennas" },
|
|
{ AL["Garr"], "MCGarr" },
|
|
{ AL["Shazzrah"], "MCShazzrah" },
|
|
{ AL["Baron Geddon"], "MCGeddon" },
|
|
{ AL["Golemagg the Incinerator"], "MCGolemagg" },
|
|
{ AL["Basalthar & Smoldaris"], "MCTwins" },
|
|
{ AL["Sorcerer-Thane Thaurissan"], "MCThaurissan" },
|
|
{ AL["Sulfuron Harbinger"], "MCSulfuron" },
|
|
{ AL["Majordomo Executus"], "MCMajordomo" },
|
|
{ AL["Ragnaros"], "MCRagnaros" },
|
|
{ AL["Trash Mobs"], "MCTrashMobs" },
|
|
{ AL["Random Boss Loot"], "MCRANDOMBOSSDROPS" },
|
|
},
|
|
["Naxxramas"] = {
|
|
{ AL["Patchwerk"], "NAXPatchwerk" },
|
|
{ AL["Grobbulus"], "NAXGrobbulus" },
|
|
{ AL["Gluth"], "NAXGluth" },
|
|
{ AL["Thaddius"], "NAXThaddius" },
|
|
{ AL["Anub'Rekhan"], "NAXAnubRekhan" },
|
|
{ AL["Grand Widow Faerlina"], "NAXGrandWidowFaerlina" },
|
|
{ AL["Maexxna"], "NAXMaexxna" },
|
|
{ AL["Noth the Plaguebringer"], "NAXNoththePlaguebringer" },
|
|
{ AL["Heigan the Unclean"], "NAXHeigantheUnclean" },
|
|
{ AL["Loatheb"], "NAXLoatheb" },
|
|
{ AL["Instructor Razuvious"], "NAXInstructorRazuvious" },
|
|
{ AL["Gothik the Harvester"], "NAXGothiktheHarvester" },
|
|
{ AL["The Four Horsemen"], "NAXTheFourHorsemen" },
|
|
{ AL["Sapphiron"], "NAXSapphiron" },
|
|
{ AL["Kel'Thuzad"], "NAXKelThuzard" },
|
|
{ AL["Trash Mobs"], "NAXTrash" },
|
|
},
|
|
["SMGraveyard"] = {
|
|
{ AL["Interrogator Vishas"], "SMVishas" },
|
|
{ AL["Duke Dreadmoore"], "SMDukeDreadmoore" },
|
|
{ AL["Scorn"].." ("..AL["Scourge Invasion"]..")", "SMScorn" },
|
|
{ AL["Ironspine"].." ("..AL["Rare"]..")", "SMIronspine" },
|
|
{ AL["Azshir the Sleepless"].." ("..AL["Rare"]..")", "SMAzshir" },
|
|
{ AL["Fallen Champion"].." ("..AL["Rare"]..")", "SMFallenChampion" },
|
|
{ AL["Bloodmage Thalnos"], "SMBloodmageThalnos" },
|
|
{ AL["Trash Mobs"], "SMGTrash" },
|
|
},
|
|
["SMLibrary"] = {
|
|
{ AL["Houndmaster Loksey"], "SMHoundmasterLoksey" },
|
|
{ AL["Brother Wystan"], "SMBrotherWystan" },
|
|
{ AL["Arcanist Doan"], "SMDoan" },
|
|
{ AL["Trash Mobs"], "SMLTrash" },
|
|
},
|
|
["SMArmory"] = {
|
|
{ AL["Herod"], "SMHerod" },
|
|
{ AL["Armory Quartermaster Daghelm"], "SMQuartermaster" },
|
|
{ AL["Trash Mobs"], "SMATrash" },
|
|
},
|
|
["SMCathedral"] = {
|
|
{ AL["High Inquisitor Fairbanks"], "SMFairbanks" },
|
|
{ AL["Scarlet Commander Mograine"], "SMMograine" },
|
|
{ AL["High Inquisitor Whitemane"], "SMWhitemane" },
|
|
{ AL["Trash Mobs"], "SMCTrash" },
|
|
},
|
|
["Scholomance"] = {
|
|
-- { AL["Blood Steward of Kirtonos"], "SCHOLOBlood" },
|
|
{ AL["Kirtonos the Herald"], "SCHOLOKirtonostheHerald" },
|
|
{ AL["Jandice Barov"], "SCHOLOJandiceBarov" },
|
|
{ AL["Lord Blackwood"].." ("..AL["Scourge Invasion"]..")", "SCHOLOLordBlackwood" },
|
|
{ AL["Rattlegore"], "SCHOLORattlegore" },
|
|
{ AL["Death Knight Darkreaver"], "SCHOLODeathKnight" },
|
|
{ AL["Marduk Blackpool"], "SCHOLOMarduk" },
|
|
{ AL["Vectus"], "SCHOLOVectus" },
|
|
{ AL["Ras Frostwhisper"], "SCHOLORasFrostwhisper" },
|
|
{ AL["Kormok"], "SCHOLOKormok" },
|
|
{ AL["Instructor Malicia"], "SCHOLOInstructorMalicia" },
|
|
{ AL["Doctor Theolen Krastinov"], "SCHOLODoctorTheolenKrastinov" },
|
|
{ AL["Lorekeeper Polkelt"], "SCHOLOLorekeeperPolkelt" },
|
|
{ AL["The Ravenian"], "SCHOLOTheRavenian" },
|
|
{ AL["Lord Alexei Barov"], "SCHOLOLordAlexeiBarov" },
|
|
{ AL["Lady Illucia Barov"], "SCHOLOLadyIlluciaBarov" },
|
|
{ AL["Darkmaster Gandling"], "SCHOLODarkmasterGandling" },
|
|
{ AL["Trash Mobs"], "SCHOLOTrash" },
|
|
},
|
|
["ShadowfangKeep"] = {
|
|
{ AL["Rethilgore"], "SFKRethilgore" },
|
|
{ AL["Fel Steed"], "SFKFelSteed" },
|
|
{ AL["Razorclaw the Butcher"], "SFKRazorclawtheButcher" },
|
|
{ AL["Baron Silverlaine"], "SFKSilverlaine" },
|
|
{ AL["Commander Springvale"], "SFKSpringvale" },
|
|
{ AL["Sever"].." ("..AL["Scourge Invasion"]..")", "SFKSever" },
|
|
{ AL["Odo the Blindwatcher"], "SFKOdotheBlindwatcher" },
|
|
{ AL["Deathsworn Captain"].." ("..AL["Rare"]..")", "SFKDeathswornCaptain" },
|
|
{ AL["Fenrus the Devourer"], "SFKFenrustheDevourer" },
|
|
{ AL["Arugal's Voidwalker"], "SFKArugalsVoidwalker" },
|
|
{ AL["Wolf Master Nandos"], "SFKWolfMasterNandos" },
|
|
{ AL["Archmage Arugal"], "SFKArchmageArugal" },
|
|
{ AL["Prelate Ironmane"], "SFKPrelate"},
|
|
{ AL["Trash Mobs"], "SFKTrash" },
|
|
},
|
|
["TheStockade"] = {
|
|
{ AL["Targorr the Dread"], "SWStTargorr" },
|
|
{ AL["Kam Deepfury"], "SWStKamDeepfury" },
|
|
{ AL["Hamhock"], "SWStHamhock" },
|
|
{ AL["Dextren Ward"], "SWStDextren" },
|
|
{ AL["Bazil Thredd"], "SWStBazil" },
|
|
{ AL["Bruegal Ironknuckle"].." ("..AL["Rare"]..")", "SWStBruegalIronknuckle" },
|
|
{ AL["Trash Mobs"], "SWStTrash" },
|
|
},
|
|
["Stratholme"] = {
|
|
{ AL["Skul"].." ("..AL["Rare"]..")", "STRATSkull" },
|
|
{ AL["Stratholme Courier"], "STRATStratholmeCourier" },
|
|
{ AL["Postmaster Malown"], "STRATPostmaster" },
|
|
{ AL["Fras Siabi"], "STRATFrasSiabi" },
|
|
{ AL["Atiesh"], "STRATAtiesh" },
|
|
{ AL["Balzaphon"].." ("..AL["Scourge Invasion"]..")", "STRATBalzaphon" },
|
|
{ AL["Hearthsinger Forresten"].." ("..AL["Rare"]..")", "STRATHearthsingerForresten" },
|
|
{ AL["The Unforgiven"], "STRATTheUnforgiven" },
|
|
{ AL["Timmy the Cruel"], "STRATTimmytheCruel" },
|
|
{ AL["Malor the Zealous"], "STRATMalor" },
|
|
{ AL["Malor's Strongbox"], "STRATMalorsStrongbox" },
|
|
{ AL["Crimson Hammersmith"], "STRATCrimsonHammersmith" },
|
|
{ AL["Cannon Master Willey"], "STRATCannonMasterWilley" },
|
|
{ AL["Archivist Galford"], "STRATArchivistGalford" },
|
|
{ AL["Balnazzar"], "STRATBalnazzar" },
|
|
{ AL["Sothos"].." & "..AL["Jarien"], "STRATSothosJarien" },
|
|
{ AL["Stonespine"].." ("..AL["Rare"]..")", "STRATStonespine" },
|
|
{ AL["Baroness Anastari"], "STRATBaronessAnastari" },
|
|
{ AL["Black Guard Swordsmith"], "STRATBlackGuardSwordsmith" },
|
|
{ AL["Nerub'enkan"], "STRATNerubenkan" },
|
|
{ AL["Maleki the Pallid"], "STRATMalekithePallid" },
|
|
{ AL["Magistrate Barthilas"], "STRATMagistrateBarthilas" },
|
|
{ AL["Ramstein the Gorger"], "STRATRamsteintheGorger" },
|
|
{ AL["Baron Rivendare"], "STRATBaronRivendare" },
|
|
{ AL["Trash Mobs"], "STRATTrash" },
|
|
},
|
|
["SunkenTemple"] = {
|
|
{ AL["Balcony Minibosses"], "STBalconyMinibosses" },
|
|
{ AL["Atal'alarion"], "STAtalalarion" },
|
|
{ AL["Spawn of Hakkar"], "STSpawnOfHakkar" },
|
|
{ AL["Avatar of Hakkar"], "STAvatarofHakkar" },
|
|
{ AL["Jammal'an the Prophet"], "STJammalan" },
|
|
{ AL["Ogom the Wretched"], "STOgom" },
|
|
{ AL["Dreamscythe"], "STDreamscythe" },
|
|
{ AL["Weaver"], "STWeaver"},
|
|
{ AL["Morphaz"], "STMorphaz" },
|
|
{ AL["Hazzas"], "STHazzas" },
|
|
{ AL["Shade of Eranikus"], "STEranikus" },
|
|
{ AL["Trash Mobs"], "STTrash" },
|
|
},
|
|
["Uldaman"] = {
|
|
{ AL["Baelog"], "UldBaelog" },
|
|
{ AL["Olaf"], "UldOlaf" },
|
|
{ AL["Eric 'The Swift'"], "UldEric" },
|
|
{ AL["Revelosh"], "UldRevelosh" },
|
|
{ AL["Ironaya"], "UldIronaya" },
|
|
{ AL["Ancient Stone Keeper"], "UldAncientStoneKeeper" },
|
|
{ AL["Galgann Firehammer"], "UldGalgannFirehammer" },
|
|
{ AL["Grimlok"], "UldGrimlok" },
|
|
{ AL["Archaedas"], "UldArchaedas" },
|
|
{ AL["Trash Mobs"], "UldTrash" },
|
|
},
|
|
["GilneasCity"] = {
|
|
{ AL["Matthias Holtz"], "GCMatthiasHoltz" },
|
|
{ AL["Packmaster Ragetooth"], "GCPackmasterRagetooth" },
|
|
{ AL["Judge Sutherland"], "GCJudgeSutherland" },
|
|
{ AL["Dustivan Blackcowl"], "GCDustivanBlackcowl" },
|
|
{ AL["Marshal Magnus Greystone"], "GCMarshalMagnusGreystone" },
|
|
{ AL["Horsemaster Levvin"], "GCHorsemasterLevvin" },
|
|
{ AL["Harlow Family Chest"], "GCHarlowFamilyChest" },
|
|
{ AL["Genn Greymane"], "GCGennGreymane" },
|
|
{ AL["Trash Mobs"], "GCTrash" },
|
|
},
|
|
["ZulGurub"] = {
|
|
{ AL["High Priestess Jeklik"], "ZGJeklik" },
|
|
{ AL["High Priest Venoxis"], "ZGVenoxis" },
|
|
{ AL["High Priestess Mar'li"], "ZGMarli" },
|
|
{ AL["Bloodlord Mandokir"], "ZGMandokir" },
|
|
{ AL["Gri'lek"], "ZGGrilek" },
|
|
{ AL["Hazza'rah"], "ZGHazzarah" },
|
|
{ AL["Renataki"], "ZGRenataki" },
|
|
{ AL["Wushoolay"], "ZGWushoolay" },
|
|
{ AL["Gahz'ranka"], "ZGGahzranka" },
|
|
{ AL["High Priest Thekal"], "ZGThekal" },
|
|
{ AL["High Priestess Arlokk"], "ZGArlokk" },
|
|
{ AL["Jin'do the Hexxer"], "ZGJindo" },
|
|
{ AL["Hakkar"], "ZGHakkar" },
|
|
{ AL["Random Boss Loot"], "ZGShared" },
|
|
{ AL["Trash Mobs"], "ZGTrash1" },
|
|
{ AL["ZG Enchants"], "ZGEnchants" },
|
|
},
|
|
["BlackfathomDeeps"] = {
|
|
{ AL["Ghamoo-ra"], "BFDGhamoora" },
|
|
{ AL["Lady Sarevess"], "BFDLadySarevess" },
|
|
{ AL["Gelihast"], "BFDGelihast" },
|
|
{ AL["Baron Aquanis"], "BFDBaronAquanis" },
|
|
{ AL["Velthelaxx the Defiler"], "BFDVelthelaxx"},
|
|
{ AL["Twilight Lord Kelris"], "BFDTwilightLordKelris" },
|
|
{ AL["Old Serra'kis"], "BFDOldSerrakis" },
|
|
{ AL["Aku'mai"], "BFDAkumai" },
|
|
{ AL["Trash Mobs"], "BFDTrash" },
|
|
},
|
|
["DireMaulEast"] = {
|
|
{ AL["Pusillin"], "DMEPusillin" },
|
|
{ AL["Zevrim Thornhoof"], "DMEZevrimThornhoof" },
|
|
{ AL["Hydrospawn"], "DMEHydro" },
|
|
{ AL["Lethtendris"], "DMELethtendris" },
|
|
{ AL["Pimgib"], "DMEPimgib" },
|
|
{ AL["Isalien"], "DMEIsalien" },
|
|
{ AL["Alzzin the Wildshaper"], "DMEAlzzin" },
|
|
{ AL["Trash Mobs"], "DMETrash" },
|
|
{ AL["Dire Maul Books"], "DMEBooks" },
|
|
},
|
|
["DireMaulWest"] = {
|
|
{ AL["Tendris Warpwood"], "DMWTendrisWarpwood" },
|
|
{ AL["Illyanna Ravenoak"], "DMWIllyannaRavenoak" },
|
|
{ AL["Magister Kalendris"], "DMWMagisterKalendris" },
|
|
{ AL["Tsu'zee"].." ("..AL["Rare"]..")", "DMWTsuzee" },
|
|
{ AL["Revanchion"].." ("..AL["Scourge Invasion"]..")", "DMWRevanchion" },
|
|
{ AL["Immol'thar"], "DMWImmolthar" },
|
|
{ AL["Lord Hel'nurath"].." ("..AL["Rare"]..")", "DMWHelnurath" },
|
|
{ AL["Prince Tortheldrin"], "DMWPrinceTortheldrin" },
|
|
{ AL["Trash Mobs"], "DMWTrash" },
|
|
{ AL["Dire Maul Books"], "DMWBooks" },
|
|
},
|
|
["DireMaulNorth"] = {
|
|
{ AL["Guard Mol'dar"], "DMNGuardMoldar" },
|
|
{ AL["Stomper Kreeg"], "DMNStomperKreeg" },
|
|
{ AL["Guard Fengus"], "DMNGuardFengus" },
|
|
{ AL["Knot Thimblejack"], "DMNThimblejack" },
|
|
{ AL["Guard Slip'kik"], "DMNGuardSlipkik" },
|
|
{ AL["Captain Kromcrush"], "DMNCaptainKromcrush" },
|
|
{ AL["Cho'Rush the Observer"], "DMNChoRush" },
|
|
{ AL["King Gordok"], "DMNKingGordok" },
|
|
{ AL["Tribute Run"], "DMNTRIBUTERUN" },
|
|
{ AL["Trash Mobs"], "DMNTrash" },
|
|
{ AL["Dire Maul Books"], "DMNBooks" },
|
|
},
|
|
["Maraudon"] = {
|
|
{ AL["Noxxion"], "MaraNoxxion" },
|
|
{ AL["Razorlash"], "MaraRazorlash" },
|
|
{ AL["Lord Vyletongue"], "MaraLordVyletongue" },
|
|
{ AL["Meshlok the Harvester"].." ("..AL["Rare"]..")", "MaraMeshlok" },
|
|
{ AL["Celebras the Cursed"], "MaraCelebras" },
|
|
{ AL["Landslide"], "MaraLandslide" },
|
|
{ AL["Tinkerer Gizlock"], "MaraTinkererGizlock" },
|
|
{ AL["Rotgrip"], "MaraRotgrip" },
|
|
{ AL["Princess Theradras"], "MaraPrincessTheradras" },
|
|
{ AL["Trash Mobs"], "MaraTrash" },
|
|
},
|
|
["Onyxia"] = {
|
|
{ AL["Onyxia"], "Onyxia" },
|
|
},
|
|
["RagefireChasm"] = {
|
|
{ AL["Taragaman the Hungerer"], "RFCTaragaman" },
|
|
{ AL["Oggleflint"], "RFCOggleflint" },
|
|
{ AL["Jergosh the Invoker"], "RFCJergosh" },
|
|
{ AL["Bazzalan"], "RFCBazzalan" },
|
|
},
|
|
["RazorfenDowns"] = {
|
|
{ AL["Tuten'kash"], "RFDTutenkash" },
|
|
{ AL["Lady Falther'ess"].." ("..AL["Scourge Invasion"]..")", "RFDLadyF" },
|
|
{ AL["Plaguemaw the Rotting"], "RFDPlaguemaw" },
|
|
{ AL["Mordresh Fire Eye"], "RFDMordreshFireEye" },
|
|
{ AL["Glutton"], "RFDGlutton" },
|
|
{ AL["Death Prophet Rakameg"], "RFDDeathProphet" },
|
|
{ AL["Ragglesnout"].." ("..AL["Rare"]..")", "RFDRagglesnout" },
|
|
{ AL["Amnennar the Coldbringer"], "RFDAmnennar" },
|
|
{ AL["Trash Mobs"], "RFDTrash" },
|
|
},
|
|
["RazorfenKraul"] = {
|
|
{ AL["Aggem Thorncurse"], "RFKAggem" },
|
|
{ AL["Death Speaker Jargba"], "RFKDeathSpeakerJargba" },
|
|
{ AL["Overlord Ramtusk"], "RFKOverlordRamtusk" },
|
|
{ AL["Razorfen Spearhide"].." ("..AL["Rare"]..")", "RFKRazorfenSpearhide" },
|
|
{ AL["Agathelos the Raging"], "RFKAgathelos" },
|
|
{ AL["Blind Hunter"].." ("..AL["Rare"]..")", "RFKBlindHunter" },
|
|
{ AL["Charlga Razorflank"], "RFKCharlgaRazorflank" },
|
|
{ AL["Earthcaller Halmgar"].." ("..AL["Rare"]..")", "RFKEarthcallerHalmgar" },
|
|
{ AL["Rotthorn"], "RFKRotthorn" },
|
|
{ AL["Trash Mobs"], "RFKTrash" },
|
|
},
|
|
["RuinsofAQ"] = {
|
|
{ AL["Kurinnaxx"], "AQ20Kurinnaxx" },
|
|
{ AL["Lieutenant General Andorov"], "AQ20Andorov" },
|
|
{ AL["Rajaxx's Captains"], "AQ20CAPTAIN" },
|
|
{ AL["General Rajaxx"], "AQ20Rajaxx" },
|
|
{ AL["Moam"], "AQ20Moam" },
|
|
{ AL["Buru the Gorger"], "AQ20Buru" },
|
|
{ AL["Ayamiss the Hunter"], "AQ20Ayamiss" },
|
|
{ AL["Ossirian the Unscarred"], "AQ20Ossirian" },
|
|
{ AL["Trash Mobs"], "AQ20Trash" },
|
|
{ AL["Class Books"], "AQ20ClassBooks" },
|
|
{ AL["AQ Enchants"], "AQ20Enchants" },
|
|
},
|
|
["TempleofAQ"] = {
|
|
{ AL["The Prophet Skeram"], "AQ40Skeram" },
|
|
{ AL["The Bug Family"], "AQ40Trio" },
|
|
{ AL["Battleguard Sartura"], "AQ40Sartura" },
|
|
{ AL["Fankriss the Unyielding"], "AQ40Fankriss" },
|
|
{ AL["Viscidus"], "AQ40Viscidus" },
|
|
{ AL["Princess Huhuran"], "AQ40Huhuran" },
|
|
{ AL["The Twin Emperors"], "AQ40Emperors" },
|
|
{ AL["Ouro"], "AQ40Ouro" },
|
|
{ AL["C'Thun"], "AQ40CThun" },
|
|
{ AL["Trash Mobs"], "AQ40Trash1" },
|
|
{ AL["Trash Mobs"], "AQ40Trash2" },
|
|
{ AL["AQ Enchants"], "AQEnchants" },
|
|
{ AL["AQ Opening Quest Chain"], "AQOpening" },
|
|
},
|
|
["WailingCaverns"] = {
|
|
{ AL["Lord Cobrahn"], "WCLordCobrahn" },
|
|
{ AL["Lady Anacondra"], "WCLadyAnacondra" },
|
|
{ AL["Kresh"], "WCKresh" },
|
|
{ AL["Deviate Faerie Dragon"].." ("..AL["Rare"]..")", "WCDeviateFaerieDragon" },
|
|
{ AL["Zandara Windhoof"], "WCZandara" },
|
|
{ AL["Lord Pythas"], "WCLordPythas" },
|
|
{ AL["Skum"], "WCSkum" },
|
|
{ AL["Vangros"], "WCVangros" },
|
|
{ AL["Lord Serpentis"], "WCLordSerpentis" },
|
|
{ AL["Verdan the Everliving"], "WCVerdan" },
|
|
{ AL["Mutanus the Devourer"], "WCMutanus" },
|
|
{ AL["Trash Mobs"], "WCTrash" },
|
|
},
|
|
["ZulFarrak"] = {
|
|
{ AL["Antu'sul"], "ZFAntusul" },
|
|
{ AL["Witch Doctor Zum'rah"], "ZFWitchDoctorZumrah" },
|
|
{ AL["Shadowpriest Sezz'ziz"], "ZFSezzziz" },
|
|
{ AL["Dustwraith"].." ("..AL["Rare"]..")", "ZFDustwraith" },
|
|
{ AL["Zerillis"].." ("..AL["Rare"]..")", "ZFZerillis" },
|
|
{ AL["Gahz'rilla"], "ZFGahzrilla" },
|
|
{ AL["Chief Ukorz Sandscalp"], "ZFChiefUkorzSandscalp" },
|
|
{ AL["Zel'jeb the Ancient"], "ZFZeljeb" },
|
|
{ AL["Champion Razjal the Quick"], "ZFChampion" },
|
|
{ AL["Trash Mobs"], "ZFTrash" },
|
|
},
|
|
["EmeraldSanctum"] = {
|
|
{ AL["Erennius"], "ESErennius" },
|
|
{ AL["Solnius the Awakener"], "ESSolnius1" },
|
|
{ AL["Favor of Erennius (ES Hard Mode)"], "ESHardMode" },
|
|
{ AL["Trash Mobs"], "ESTrash" },
|
|
},
|
|
["LowerKara"] = {
|
|
{ AL["Master Blacksmith Rolfen"], "LKHRolfen" },
|
|
{ AL["Brood Queen Araxxna"], "LKHBroodQueenAraxxna" },
|
|
{ AL["Grizikil"], "LKHGrizikil" },
|
|
{ AL["Clawlord Howlfang"], "LKHClawlordHowlfang" },
|
|
{ AL["Lord Blackwald II"], "LKHLordBlackwaldII" },
|
|
{ AL["Moroes"], "LKHMoroes" },
|
|
{ AL["Trash Mobs"], "LKHTrash" },
|
|
{ AL["LKH Enchants"], "LKHEnchants" },
|
|
},
|
|
["UpperKara"] = {
|
|
{ AL["Keeper Gnarlmoon"], "UKHGnarlmoon" },
|
|
{ AL["Ley-Watcher Incantagos"], "UKHIncantagos" },
|
|
{ AL["Anomalus"], "UKHAnomalus" },
|
|
{ AL["Echo of Medivh"], "UKHEcho" },
|
|
{ AL["King (Chess fight)"], "UKHKing" },
|
|
{ AL["Sanv Tas'dal"], "UKHSanvTasdal" },
|
|
{ AL["Kruul"], "UKHKruul" },
|
|
{ AL["Rupturan the Broken"], "UKHRupturan" },
|
|
{ AL["Mephistroth"], "UKHMephistroth" },
|
|
{ AL["Trash Mobs"], "UKHTrash" },
|
|
},
|
|
["WorldBosses"] = {
|
|
{ AL["Azuregos"], "AAzuregos" },
|
|
{ AL["Emeriss"], "DEmeriss" },
|
|
{ AL["Lethon"], "DLethon"},
|
|
{ AL["Taerar"], "DTaerar" },
|
|
{ AL["Ysondre"], "DYsondre" },
|
|
{ AL["Lord Kazzak"], "KKazzak"},
|
|
{ AL["Nerubian Overseer"], "Nerubian" },
|
|
{ AL["Dark Reaver of Karazhan"], "Reaver" },
|
|
{ AL["Ostarius"], "Ostarius" },
|
|
{ AL["Concavius"], "Concavius" },
|
|
{ AL["Moo"], "CowKing" },
|
|
{ AL["Cla'ckora"], "Clackora" },
|
|
},
|
|
["RareSpawns"] = {
|
|
{ WHITE.."[17]"..DEFAULT.." "..AL["Earthcaller Rezengal"] .." "..WHITE.."("..AL["Stonetalon Mountains"]..")", "EarthcallerRezengal" },
|
|
{ WHITE.."[17]"..DEFAULT.." "..AL["Shade Mage"] .." "..WHITE.."("..AL["Tirisfal Glades"] ..")", "ShadeMage" },
|
|
{ WHITE.."[18]"..DEFAULT.." "..AL["Graypaw Alpha"] .." "..WHITE.."("..AL["Tirisfal Glades"] ..")", "GraypawAlpha" },
|
|
{ WHITE.."[24]"..DEFAULT.." "..AL["Blazespark"] .." "..WHITE.."("..AL["Stonetalon Mountains"]..")", "Blazespark" },
|
|
{ WHITE.."[35]"..DEFAULT.." "..AL["Witch Doctor Tan'zo"] .." "..WHITE.."("..AL["Arathi Highlands"] ..")", "WitchDoctorTanzo" },
|
|
{ WHITE.."[40]"..DEFAULT.." "..AL["Widow of the Woods"] .." "..WHITE.."("..AL["Gilneas"] ..")", "WidowoftheWoods" },
|
|
{ WHITE.."[40]"..DEFAULT.." "..AL["Dawnhowl"] .." "..WHITE.."("..AL["Gilneas"] ..")", "Dawnhowl" },
|
|
{ WHITE.."[43]"..DEFAULT.." "..AL["Maltimor's Prototype"] .." "..WHITE.."("..AL["Gilneas"] ..")", "MaltimorsPrototype" },
|
|
{ WHITE.."[44]"..DEFAULT.." "..AL["Bonecruncher"] .." "..WHITE.."("..AL["Gilneas"] ..")", "Bonecruncher" },
|
|
{ WHITE.."[44]"..DEFAULT.." "..AL["Duskskitter"] .." "..WHITE.."("..AL["Gilneas"] ..")", "Duskskitter" },
|
|
{ WHITE.."[45]"..DEFAULT.." "..AL["Baron Perenolde"] .." "..WHITE.."("..AL["Gilneas"] ..")", "BaronPerenolde" },
|
|
{ WHITE.."[45]"..DEFAULT.." "..AL["Kin'Tozo"] .." "..WHITE.."("..AL["Stranglethorn Vale"] ..")", "KinTozo" },
|
|
{ WHITE.."[47]"..DEFAULT.." "..AL["Grug'thok the Seer"] .." "..WHITE.."("..AL["Feralas"] ..")", "Grugthok" },
|
|
{ WHITE.."[47]"..DEFAULT.." "..AL["M-0L1Y"] .." "..WHITE.."("..AL["Dun Morogh"] ..")", "M0L1Y" },
|
|
{ WHITE.."[49]"..DEFAULT.." "..AL["Explorer Ashbeard"] .." "..WHITE.."("..AL["Searing Gorge"] ..")", "Ashbeard" },
|
|
{ WHITE.."[50]"..DEFAULT.." "..AL["Jal'akar"] .." "..WHITE.."("..AL["Hinterlands"] ..")", "Jalakar" },
|
|
{ WHITE.."[51]"..DEFAULT.." "..AL["Embereye"] .." "..WHITE.."("..AL["Gilijim Isle"] ..")", "Embereye" },
|
|
{ WHITE.."[51]"..DEFAULT.." "..AL["Ruk'thok the Pyromancer"].." "..WHITE.."("..AL["Lapidis Isle"] ..")", "Rukthok" },
|
|
{ WHITE.."[51]"..DEFAULT.." "..AL["Tarangos"] .." "..WHITE.."("..AL["Azshara"] ..")", "Tarangos" },
|
|
{ WHITE.."[51]"..DEFAULT.." "..AL["Ripjaw"] .." "..WHITE.."("..AL["Lapidis Isle"] ..")", "Ripjaw" },
|
|
{ WHITE.."[53]"..DEFAULT.." "..AL["Xalvic Blackclaw"] .." "..WHITE.."("..AL["Felwood"] ..")", "Xalvic" },
|
|
{ WHITE.."[54]"..DEFAULT.." "..AL["Aquitus"] .." "..WHITE.."("..AL["Gilijim Isle"] ..")", "Aquitus" },
|
|
{ WHITE.."[55]"..DEFAULT.." "..AL["Firstborn of Arugal"] .." "..WHITE.."("..AL["Gilneas"] ..")", "FirstbornofArugal" },
|
|
{ WHITE.."[55]"..DEFAULT.." "..AL["Letashaz"] .." "..WHITE.."("..AL["Gilijim Isle"] ..")", "Letashaz" },
|
|
{ WHITE.."[55]"..DEFAULT.." "..AL["Margon the Mighty"] .." "..WHITE.."("..AL["Lapidis Isle"] ..")", "MargontheMighty" },
|
|
{ WHITE.."[55]"..DEFAULT.." "..AL["The Wandering Knight"] .." "..WHITE.."("..AL["Western Plaguelands"] ..")", "WanderingKnight" },
|
|
{ WHITE.."[56]"..DEFAULT.." "..AL["Stoneshell"] .." "..WHITE.."("..AL["Tel'abim"] ..")", "Stoneshell" },
|
|
{ WHITE.."[57]"..DEFAULT.." "..AL["Zareth Terrorblade"] .." "..WHITE.."("..AL["Blasted Lands"] ..")", "Zareth" },
|
|
{ WHITE.."[58]"..DEFAULT.." "..AL["Highvale Silverback"] .." "..WHITE.."("..AL["Tel'abim"] ..")", "HighvaleSilverback" },
|
|
{ WHITE.."[58]"..DEFAULT.." "..AL["Mallon The Moontouched"] .." "..WHITE.."("..AL["Winterspring"] ..")", "Mallon" },
|
|
{ WHITE.."[59]"..DEFAULT.." "..AL["Blademaster Kargron"] .." "..WHITE.."("..AL["Burning Steppes"] ..")", "Kargron" },
|
|
{ WHITE.."[59]"..DEFAULT.." "..AL["Professor Lysander"] .." "..WHITE.."("..AL["Eastern Plaguelands"] ..")", "ProfessorLysander" },
|
|
{ WHITE.."[60]"..DEFAULT.." "..AL["Admiral Barean Westwind"].." "..WHITE.."("..AL["Scarlet Enclave"] ..")", "AdmiralBareanWestwind" },
|
|
{ WHITE.."[60]"..DEFAULT.." "..AL["Azurebeak"] .." "..WHITE.."("..AL["Hyjal"] ..")", "Azurebeak" },
|
|
{ WHITE.."[60]"..DEFAULT.." "..AL["Barkskin Fisher"] .." "..WHITE.."("..AL["Hyjal"] ..")", "BarkskinFisher" },
|
|
{ WHITE.."[61]"..DEFAULT.." "..AL["Crusader Larsarius"] .." "..WHITE.."("..AL["Eastern Plaguelands"] ..")", "CrusaderLarsarius" },
|
|
{ WHITE.."[61]"..DEFAULT.." "..AL["Shadeflayer Goliath"] .." "..WHITE.."("..AL["Hyjal"] ..")", "ShadeflayerGoliath" },
|
|
},
|
|
["DragonmawRetreat"] = {
|
|
{ AL["Gowlfang"], "DMRGowlfang" },
|
|
{ AL["Cavernweb Broodmother"], "DMRBroodmother" },
|
|
{ AL["Web Master Torkon"], "DMRWebMaster" },
|
|
{ AL["Garlok Flamekeeper"], "DMRGarlok" },
|
|
{ AL["Halgan Redbrand"], "DMRHalgan" },
|
|
{ AL["Slagfist Destroyer"],"DMRSlagfist" },
|
|
{ AL["Overlord Blackheart"], "DMROverlord" },
|
|
{ AL["Elder Hollowblood"], "DMRElderHollowblood" },
|
|
{ AL["Searistrasz"], "DMRSearistrasz" },
|
|
{ AL["Zuluhed the Whacked"], "DMRZuluhed" },
|
|
{ AL["Trash Mobs"], "DMRTrash" },
|
|
},
|
|
["StormwroughtRuins"] = {
|
|
{ AL["Oronok Torn-Heart"], "SWROronok" },
|
|
{ AL["Dagar the Glutton"], "SWRDagar" },
|
|
{ AL["Duke Balor the IV"], "SWRDukeBalor" },
|
|
{ AL["Librarian Theodorus"], "SWRLibrarian" },
|
|
{ AL["Chieftain Stormsong"], "SWRChieftain" },
|
|
{ AL["Deathlord Tidebane"], "SWRDeathlord" },
|
|
{ AL["Subjugator Halthas Shadecrest"], "SWRSubjugator" },
|
|
{ AL["Mycellakos"], "SWRMycellakos" },
|
|
{ AL["Eldermaw the Primordial"], "SWREldermaw" },
|
|
{ AL["Lady Drazare"], "SWRLadyDrazare" },
|
|
{ AL["Remains of the Innocent"], "SWRRemains" },
|
|
{ AL["Mergothid"], "SWRMergothid" },
|
|
{ AL["Trash Mobs"], "SWRTrash" },
|
|
},
|
|
};
|
|
|
|
--[[
|
|
AtlasLootDefaultFrame_OnShow:
|
|
Called whenever the loot browser is shown and sets up buttons and loot tables
|
|
]]
|
|
function AtlasLootDefaultFrame_OnShow()
|
|
-- Definition of where I want the loot table to be shown
|
|
AtlasLoot_AnchorPoint = Anchor_Default;
|
|
-- Having the Atlas and loot browser frames shown at the same time would
|
|
-- cause conflicts, so I hide the Atlas frame when the loot browser appears
|
|
if ( AtlasFrame ) then
|
|
AtlasFrame:Hide();
|
|
end
|
|
-- Remove the selection of a loot table in Atlas
|
|
AtlasLootItemsFrame.activeBoss = nil;
|
|
-- Set the item table to the loot table
|
|
-- AtlasLoot_SetItemInfoFrame(AtlasLoot_AnchorPoint);
|
|
-- Show the last displayed loot table
|
|
if ( AtlasLootCharDB.LastBoss == "WishList" ) then
|
|
AtlasLoot_ShowWishList()
|
|
return
|
|
elseif ( AtlasLootCharDB.LastBoss == "SearchResult" ) then
|
|
AtlasLoot:ShowSearchResult()
|
|
return
|
|
end
|
|
if ( AtlasLootItemsFrame.refresh ) then
|
|
AtlasLoot_ShowBossLoot(AtlasLootItemsFrame.refresh[1], AtlasLootItemsFrame.refresh[3])
|
|
else
|
|
AtlasLoot_ShowBossLoot(AtlasLootCharDB.LastBoss, AtlasLootCharDB.LastBossText);
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_OnEvent(event):
|
|
event - Name of the event, passed from the API
|
|
Invoked whenever a relevant event is detected by the engine. The function then
|
|
decides what action to take depending on the event.
|
|
]]
|
|
function AtlasLoot_OnEvent()
|
|
-- Addons all loaded
|
|
if ( event == "ADDON_LOADED" and arg1 == "AtlasLoot" ) then
|
|
this:UnregisterEvent("ADDON_LOADED")
|
|
AtlasLoot_OnVariablesLoaded();
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_OnVariablesLoaded:
|
|
Invoked by the VARIABLES_LOADED event. Now that we are sure all the assets
|
|
the addon needs are in place, we can properly set up the mod
|
|
]]
|
|
function AtlasLoot_OnVariablesLoaded()
|
|
if ( not AtlasLootCharDB ) then AtlasLootCharDB = {} end
|
|
if ( not AtlasLootCharDB["WishList"] ) then AtlasLootCharDB["WishList"] = {} end
|
|
if ( not AtlasLootCharDB["QuickLooks"] ) then AtlasLootCharDB["QuickLooks"] = {} end
|
|
if ( not AtlasLootCharDB["SearchResult"] ) then AtlasLootCharDB["SearchResult"] = {} end
|
|
-- Add the loot browser to the special frames tables to enable closing wih the ESC key
|
|
tinsert(UISpecialFrames, "AtlasLootDefaultFrame");
|
|
tinsert(UISpecialFrames, "AtlasLootOptionsFrame")
|
|
-- Set up options frame
|
|
AtlasLootOptions_OnLoad();
|
|
-- Legacy code for those using the ultimately failed attempt at making Atlas load on demand
|
|
if ( AtlasButton_LoadAtlas ) then
|
|
AtlasButton_LoadAtlas();
|
|
end
|
|
-- Hook the necessary Atlas functions
|
|
Original_Atlas_Refresh = Atlas_Refresh;
|
|
Atlas_Refresh = AtlasLoot_Refresh;
|
|
Original_Atlas_OnShow = Atlas_OnShow;
|
|
Atlas_OnShow = AtlasLoot_Atlas_OnShow;
|
|
-- Instead of hooking, replace the scrollbar driver function
|
|
Original_AtlasScrollBar_Update = AtlasScrollBar_Update;
|
|
AtlasScrollBar_Update = AtlasLoot_AtlasScrollBar_Update;
|
|
-- Disable options that don't have the supporting mods
|
|
if ( not LootLink_SetTooltip and (AtlasLootCharDB.LootlinkTT == true ) ) then
|
|
AtlasLootCharDB.LootlinkTT = false;
|
|
AtlasLootCharDB.DefaultTT = true;
|
|
end
|
|
if ( not ItemSync and (AtlasLootCharDB.ItemSyncTT == true) ) then
|
|
AtlasLootCharDB.ItemSyncTT = false;
|
|
AtlasLootCharDB.DefaultTT = true;
|
|
end
|
|
if ( (not IsAddOnLoaded("EQCompare") and not IsAddOnLoaded("EquipCompare")) and (AtlasLootCharDB.EquipCompare == true) ) then
|
|
AtlasLootCharDB.EquipCompare = false;
|
|
end
|
|
-- If using an opaque items frame, change the alpha value of the backing texture
|
|
if ( AtlasLootCharDB.Opaque ) then
|
|
AtlasLootItemsFrame_Back:SetTexture(0, 0, 0, 1);
|
|
else
|
|
AtlasLootItemsFrame_Back:SetTexture(0, 0, 0, 0.65);
|
|
end
|
|
-- If Atlas is installed, set up for Atlas
|
|
if ( Original_Atlas_Refresh ) then
|
|
AtlasLoot_SetupForAtlas();
|
|
-- If a first time user, set up options
|
|
if ( AtlasLootCharDB.FirstTime == nil or AtlasLootCharDB.FirstTime == true ) then
|
|
StaticPopup_Show ("ATLASLOOT_SETUP");
|
|
AtlasLootCharDB.FirstTime = false;
|
|
end
|
|
-- If an older version
|
|
if ( AtlasLootCharDB.FirstTime == nil and version < 40500 ) then
|
|
-- AtlasLootCharDB.SafeLinks = true;
|
|
-- AtlasLootCharDB.AllLinks = false;
|
|
StaticPopup_Show ("ATLASLOOT_SETUP");
|
|
AtlasLootCharDB.FirstTime = false;
|
|
end
|
|
Original_Atlas_Refresh();
|
|
else
|
|
-- If we are not using Atlas, keep the items frame out of the way
|
|
AtlasLootItemsFrame:Hide();
|
|
end
|
|
|
|
for k, v in pairs(AtlasLootCharDB["WishList"]) do
|
|
if ( type(v[2]) == "table" ) then
|
|
v[2] = v[2][3] or "INV_Misc_QuestionMark"
|
|
break
|
|
end
|
|
end
|
|
-- Adds an AtlasLoot button to the Feature Frame in Cosmos
|
|
if ( EarthFeature_AddButton ) then
|
|
EarthFeature_AddButton(
|
|
{
|
|
id = string.sub(ATLASLOOT_VERSION, 11, 28);
|
|
name = string.sub(ATLASLOOT_VERSION, 11, 28);
|
|
subtext = string.sub(ATLASLOOT_VERSION, 30, 39);
|
|
tooltip = "";
|
|
icon = "Interface\\Icons\\INV_Box_01";
|
|
callback = AtlasLoot_ShowMenu;
|
|
test = nil;
|
|
}
|
|
);
|
|
-- Adds AtlasLoot to old style Cosmos installations
|
|
elseif ( Cosmos_RegisterButton ) then
|
|
Cosmos_RegisterButton(
|
|
string.sub(ATLASLOOT_VERSION, 11, 28),
|
|
string.sub(ATLASLOOT_VERSION, 11, 28),
|
|
"",
|
|
"Interface\\Icons\\INV_Box_01",
|
|
AtlasLoot_ShowMenu
|
|
);
|
|
end
|
|
-- Set up the menu in the loot browser
|
|
AtlasLoot_HewdropRegister();
|
|
-- Enable or disable AtlasLootFu based on seleced options
|
|
-- If EquipCompare is available, use it
|
|
if ( IsAddOnLoaded("EquipCompare") and AtlasLootCharDB.EquipCompare == true ) then
|
|
EquipCompare_RegisterTooltip(AtlasLootTooltip);
|
|
EquipCompare_RegisterTooltip(AtlasLootTooltip2);
|
|
end
|
|
if ( IsAddOnLoaded("EQCompare") and (AtlasLootCharDB.EquipCompare == true) ) then
|
|
EQCompare:RegisterTooltip(AtlasLootTooltip);
|
|
EQCompare:RegisterTooltip(AtlasLootTooltip2);
|
|
end
|
|
-- Position relevant UI objects for loot browser and set up menu
|
|
AtlasLootDefaultFrame_SelectedCategory:SetPoint("TOP", "AtlasLootDefaultFrame_Menu", "BOTTOM", 0, -4);
|
|
AtlasLootDefaultFrame_SelectedTable:SetPoint("TOP", "AtlasLootDefaultFrame_SubMenu", "BOTTOM", 0, -4);
|
|
AtlasLootDefaultFrame_SelectedCategory:SetText(AtlasLootCharDB.LastBossText);
|
|
AtlasLootDefaultFrame_SelectedTable:SetText("");
|
|
AtlasLootDefaultFrame_SelectedCategory:Show();
|
|
AtlasLootDefaultFrame_SelectedTable:Show();
|
|
AtlasLootDefaultFrame_SubMenu:Disable();
|
|
end
|
|
|
|
--[[
|
|
AtlasLootOptions_OnLoad:
|
|
Function is loaded when the addon is loaded
|
|
]]
|
|
function AtlasLootOptions_OnLoad()
|
|
-- Disable checkboxes of missing addons
|
|
if ( not LootLink_SetTooltip ) then
|
|
AtlasLootOptionsFrameLootlinkTT:Disable();
|
|
AtlasLootOptionsFrameLootlinkTTText:SetText(AL["|cff9d9d9dLootlink Tooltips|r"]);
|
|
end
|
|
if ( not ItemSync ) then
|
|
AtlasLootOptionsFrameItemSyncTT:Disable();
|
|
AtlasLootOptionsFrameItemSyncTTText:SetText(AL["|cff9d9d9dItemSync Tooltips|r"]);
|
|
end
|
|
if ( not IsAddOnLoaded("EQCompare") and not IsAddOnLoaded("EquipCompare") ) then
|
|
AtlasLootOptionsFrameEquipCompare:Disable();
|
|
AtlasLootOptionsFrameEquipCompareText:SetText(AL["|cff9d9d9dUse EquipCompare|r"]);
|
|
end
|
|
AtlasLootOptions_Init();
|
|
UIPanelWindows['AtlasLootOptionsFrame'] = {area = 'center', pushable = 0};
|
|
end
|
|
|
|
--[[
|
|
AtlasLootOptions_Init:
|
|
Initiates the options.
|
|
]]
|
|
function AtlasLootOptions_Init()
|
|
-- clear saved vars for a new version (or a new install!)
|
|
if ( AtlasLootCharDB.FirstTime == nil ) then
|
|
AtlasLootOptions_Fresh();
|
|
end
|
|
-- Initialise all the check boxes on the options frame
|
|
-- AtlasLootOptionsFrameSafeLinks:SetChecked(AtlasLootCharDB.SafeLinks);
|
|
-- AtlasLootOptionsFrameAllLinks:SetChecked(AtlasLootCharDB.AllLinks);
|
|
AtlasLootOptionsFrameDefaultTT:SetChecked(AtlasLootCharDB.DefaultTT);
|
|
AtlasLootOptionsFrameLootlinkTT:SetChecked(AtlasLootCharDB.LootlinkTT);
|
|
AtlasLootOptionsFrameItemSyncTT:SetChecked(AtlasLootCharDB.ItemSyncTT);
|
|
AtlasLootOptionsFrameShowSource:SetChecked(AtlasLootCharDB.ShowSource);
|
|
AtlasLootOptionsFrameWishlistGroupedByDungeon:SetChecked(AtlasLootCharDB.WishlistGroupedByDungeon);
|
|
AtlasLootOptionsFrameEquipCompare:SetChecked(AtlasLootCharDB.EquipCompare);
|
|
AtlasLootOptionsFrameOpaque:SetChecked(AtlasLootCharDB.Opaque);
|
|
AtlasLootOptionsFrameItemID:SetChecked(AtlasLootCharDB.ItemIDs);
|
|
-- AtlasLootOptionsFrameItemSpam:SetChecked(AtlasLootCharDB.ItemSpam);
|
|
AtlasLootOptionsFrameHidePanel:SetChecked(AtlasLootCharDB.HidePanel);
|
|
AtlasLootOptionsFrameMinimap:SetChecked(AtlasLootCharDB.MinimapButton);
|
|
AtlasLootOptionsFrameSliderButtonPos:SetValue(AtlasLootCharDB.MinimapButtonPosition);
|
|
AtlasLootOptionsFrameSliderButtonRad:SetValue(AtlasLootCharDB.MinimapButtonRadius);
|
|
AtlasLootMinimapButtonFrame:SetPoint(
|
|
"TOPLEFT",
|
|
"Minimap",
|
|
"TOPLEFT",
|
|
54 - (AtlasLootCharDB.MinimapButtonRadius * cos(AtlasLootCharDB.MinimapButtonPosition)),
|
|
(AtlasLootCharDB.MinimapButtonRadius * sin(AtlasLootCharDB.MinimapButtonPosition)) - 55
|
|
);
|
|
end
|
|
|
|
--[[
|
|
Atlas_FreshOptions:
|
|
Sets default options on a fresh start.
|
|
]]
|
|
function AtlasLootOptions_Fresh()
|
|
-- AtlasLootCharDB.SafeLinks = false;
|
|
-- AtlasLootCharDB.AllLinks = true;
|
|
AtlasLootCharDB.DefaultTT = true;
|
|
AtlasLootCharDB.LootlinkTT = false;
|
|
AtlasLootCharDB.ItemSyncTT = false;
|
|
AtlasLootCharDB.ShowSource = true;
|
|
AtlasLootCharDB.WishlistGroupedByDungeon = true;
|
|
AtlasLootCharDB.EquipCompare = false;
|
|
AtlasLootCharDB.Opaque = false;
|
|
AtlasLootCharDB.ItemIDs = false;
|
|
AtlasLootCharDB.FirstTime = true;
|
|
-- AtlasLootCharDB.ItemSpam = true;
|
|
AtlasLootCharDB.MinimapButton = true;
|
|
AtlasLootCharDB.MinimapButtonPosition = 315;
|
|
AtlasLootCharDB.MinimapButtonRadius = 78;
|
|
AtlasLootCharDB.HidePanel = false;
|
|
AtlasLootCharDB.LastBoss = "DUNGEONSMENU1";
|
|
AtlasLootCharDB.LastBossText = AL["Dungeons & Raids"];
|
|
-- AtlasLootCharDB.AutoQuery = false;
|
|
AtlasLootCharDB.PartialMatching = true;
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_OnLoad:
|
|
Performs inital setup of the mod and registers it for further setup when
|
|
the required resources are in place
|
|
]]
|
|
function AtlasLoot_OnLoad()
|
|
this:RegisterEvent("ADDON_LOADED");
|
|
-- Enable the use of /al or /atlasloot to open the loot browser
|
|
SLASH_ATLASLOOT1 = "/atlasloot";
|
|
SLASH_ATLASLOOT2 = "/al";
|
|
SlashCmdList["ATLASLOOT"] = function(msg)
|
|
AtlasLoot_SlashCommand(msg);
|
|
end
|
|
AtlasLootItemsFrame.queue = {}
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_SlashCommand(msg):
|
|
msg - takes the argument for the /atlasloot command so that the appropriate action can be performed
|
|
If someone types /atlasloot, bring up the options box
|
|
]]
|
|
function AtlasLoot_SlashCommand(msg)
|
|
if ( msg == AL["reset"] ) then
|
|
AtlasLootOptions_ResetPosition();
|
|
elseif ( msg == AL["default"] ) then
|
|
AtlasLootOptions_DefaultSettings();
|
|
elseif ( msg == AL["options"] ) then
|
|
AtlasLootOptions_Toggle();
|
|
else
|
|
AtlasLootDefaultFrame:Show();
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLootDefaultFrame_OnHide:
|
|
When we close the loot browser, re-bind the item table to Atlas
|
|
and close all Hewdrop menus
|
|
]]
|
|
function AtlasLootDefaultFrame_OnHide()
|
|
if ( AtlasFrame ) then
|
|
AtlasLoot_SetupForAtlas();
|
|
end
|
|
AtlasLoot_Hewdrop:Close(1);
|
|
AtlasLoot_HewdropSubMenu:Close(1);
|
|
if ( AtlasLootItemsFrame.refresh ) then
|
|
AtlasLootCharDB.LastBoss = AtlasLootItemsFrame.refresh[1]
|
|
AtlasLootCharDB.LastBossText = AtlasLootItemsFrame.refresh[3]
|
|
end
|
|
end
|
|
--[[
|
|
AtlasLoot_SetupForAtlas:
|
|
This function sets up the Atlas specific XML objects
|
|
]]
|
|
function AtlasLoot_SetupForAtlas()
|
|
-- Poisition the frame with the AtlasLoot version details in the Atlas frame
|
|
AtlasLootInfo:ClearAllPoints();
|
|
AtlasLootInfo:SetParent(AtlasFrame);
|
|
AtlasLootInfo:SetPoint("TOPLEFT", "AtlasFrame", "TOPLEFT", 546, -3);
|
|
AtlasLootInfo:SetFrameLevel(AtlasFrame:GetFrameLevel() + 1)
|
|
AtlasLootInfo:Show()
|
|
-- Anchor the bottom panel to the Atlas frame
|
|
AtlasLootPanel:ClearAllPoints();
|
|
AtlasLootPanel:SetParent(AtlasFrame);
|
|
AtlasLootPanel:SetPoint("TOP", "AtlasFrame", "BOTTOM", 0, 9);
|
|
AtlasLootPanel:SetFrameLevel(AtlasFrame:GetFrameLevel() + 1)
|
|
AtlasLootPanel:Show()
|
|
AtlasLoot_AnchorPoint = Anchor_Atlas
|
|
AtlasLootItemsFrame:Hide();
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_AtlasScrollBar_Update:
|
|
Hooks the Atlas scroll frame.
|
|
Required as the Atlas function cannot deal with the AtlasLoot button template or the added Atlasloot entries
|
|
]]
|
|
function AtlasLoot_AtlasScrollBar_Update()
|
|
Original_AtlasScrollBar_Update()
|
|
local zoneID = ATLAS_DROPDOWNS[AtlasOptions.AtlasType][AtlasOptions.AtlasZone];
|
|
-- Make note of how far in the scroll frame we are
|
|
for line = 1, ATLAS_NUM_LINES do
|
|
local lineplusoffset = line + FauxScrollFrame_GetOffset(AtlasScrollBar);
|
|
local entry = _G["AtlasEntry" .. line]
|
|
local loot = _G["AtlasEntry" .. line .. "_Loot"]
|
|
local selected = _G["AtlasEntry" .. line .. "_Selected"]
|
|
if ( loot and lineplusoffset <= ATLAS_CUR_LINES ) then
|
|
_G["AtlasEntry" .. line .. "_Text"]:SetText(ATLAS_SCROLL_LIST[lineplusoffset]);
|
|
local showIcon = (AtlasLootBossButtons[zoneID] and AtlasLootBossButtons[zoneID][lineplusoffset] and AtlasLootBossButtons[zoneID][lineplusoffset] ~= "") or
|
|
(AtlasLootWBBossButtons[zoneID] and AtlasLootWBBossButtons[zoneID][lineplusoffset] and AtlasLootWBBossButtons[zoneID][lineplusoffset] ~= "") or
|
|
(AtlasLootBattlegrounds[zoneID] and AtlasLootBattlegrounds[zoneID][lineplusoffset] and AtlasLootBattlegrounds[zoneID][lineplusoffset] ~= "")
|
|
if ( AtlasLootItemsFrame.activeBoss == lineplusoffset ) then
|
|
entry:Enable();
|
|
loot:Hide();
|
|
selected:Show();
|
|
elseif ( showIcon ) then
|
|
entry:Enable();
|
|
loot:Show();
|
|
selected:Hide();
|
|
else
|
|
entry:Disable();
|
|
loot:Hide();
|
|
selected:Hide();
|
|
end
|
|
entry.idnum = lineplusoffset;
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_Refresh:
|
|
Replacement for Atlas_Refresh, required as the template for the boss buttons in Atlas is insufficient
|
|
Called whenever the state of Atlas changes
|
|
]]
|
|
function AtlasLoot_Refresh(keepSelection)
|
|
-- Reset which loot page is 'current'
|
|
if ( not keepSelection ) then
|
|
AtlasLootItemsFrame.activeBoss = nil
|
|
end
|
|
if ( AtlasLootItemsFrame.activeBoss ) then
|
|
AtlasLootItemsFrame:Show()
|
|
else
|
|
AtlasLootItemsFrame:Hide()
|
|
end
|
|
-- Call original function
|
|
Original_Atlas_Refresh()
|
|
|
|
for i = 1, ATLAS_NUM_LINES do
|
|
local entry = _G["AtlasEntry" .. i]
|
|
if ( entry and not _G["AtlasEntry"..i.."_Loot"] ) then
|
|
-- Add deselected icon
|
|
local loot = entry:CreateTexture("$parent_Loot", "OVERLAY");
|
|
loot:SetWidth(16)
|
|
loot:SetHeight(16)
|
|
loot:SetPoint("RIGHT", entry, 0, 0)
|
|
loot:SetTexture("Interface\\AddOns\\AtlasLoot\\Images\\looticon")
|
|
loot:Show()
|
|
-- Add selected icon
|
|
local selected = entry:CreateTexture("$parent_Selected", "OVERLAY")
|
|
selected:SetWidth(16)
|
|
selected:SetHeight(16)
|
|
selected:SetPoint("RIGHT", entry, 0, 0)
|
|
selected:SetTexture("Interface\\AddOns\\AtlasLoot\\Images\\gold")
|
|
selected:Hide()
|
|
-- Add OnClick function
|
|
entry:SetScript("OnClick", AtlasLootBoss_OnClick)
|
|
entry:SetHighlightTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_Atlas_OnShow:
|
|
Hooks Atlas_OnShow() to add extra setup routines that AtlasLoot needs for
|
|
integration purposes.
|
|
]]
|
|
function AtlasLoot_Atlas_OnShow()
|
|
AtlasLoot_Refresh(true);
|
|
-- We don't want Atlas and the Loot Browser open at the same time, so the Loot Browser is close
|
|
if ( AtlasLootDefaultFrame ) then
|
|
AtlasLootDefaultFrame:Hide();
|
|
AtlasLoot_SetupForAtlas();
|
|
end
|
|
-- Call the Atlas function
|
|
Original_Atlas_OnShow();
|
|
-- If we were looking at a loot table earlier in the session, it is still
|
|
-- saved on the item frame, so restore it in Atlas
|
|
if ( AtlasLootItemsFrame.activeBoss ) then
|
|
AtlasLootItemsFrame:Show()
|
|
else
|
|
AtlasLootItemsFrame:Hide()
|
|
end
|
|
-- Consult the saved variable table to see whether to show the bottom panel
|
|
if ( AtlasLootCharDB.HidePanel == true ) then
|
|
AtlasLootPanel:Hide();
|
|
else
|
|
AtlasLootPanel:Show();
|
|
end
|
|
AtlasLoot_AtlasScrollBar_Update()
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_Toggle:
|
|
Simple function to toggle the visibility of the AtlasLoot frame.
|
|
]]
|
|
function AtlasLoot_Toggle()
|
|
if ( AtlasLootDefaultFrame:IsVisible() ) then
|
|
HideUIPanel(AtlasLootDefaultFrame);
|
|
else
|
|
ShowUIPanel(AtlasLootDefaultFrame);
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLootBoss_OnClick:
|
|
Invoked whenever a boss line in Atlas is clicked
|
|
Shows a loot page if one is associated with the button
|
|
]]
|
|
function AtlasLootBoss_OnClick()
|
|
local name = this:GetName()
|
|
local zoneID = ATLAS_DROPDOWNS[AtlasOptions.AtlasType][AtlasOptions.AtlasZone];
|
|
local id = this.idnum;
|
|
-- If the loot table was already shown and boss clicked again, hide the loot table and fix boss list icons
|
|
if ( _G[name.."_Selected"]:IsVisible() ) then
|
|
_G[name.."_Selected"]:Hide();
|
|
_G[name.."_Loot"]:Show();
|
|
AtlasLootItemsFrame:Hide();
|
|
AtlasLootItemsFrame.activeBoss = nil;
|
|
else
|
|
-- If an loot table is associated with the button, show it. Note multiple tables need to be checked due to the database structure
|
|
if ( AtlasLootBossButtons[zoneID] and AtlasLootBossButtons[zoneID][id] and AtlasLootBossButtons[zoneID][id] ~= "" ) then
|
|
if ( AtlasLoot_IsLootTableAvailable(AtlasLootBossButtons[zoneID][id]) ) then
|
|
_G[name.."_Selected"]:Show();
|
|
_G[name.."_Loot"]:Hide();
|
|
local _,_,boss = string.find(_G[name.."_Text"]:GetText(), "|c%x%x%x%x%x%x%x%x%s*[%dX']*[%) ]*(.*[^%,])[%,]?$");
|
|
AtlasLoot_ShowBossLoot(AtlasLootBossButtons[zoneID][id], boss);
|
|
AtlasLootItemsFrame.activeBoss = id;
|
|
AtlasLoot_AtlasScrollBar_Update();
|
|
AtlasLootCharDB.LastBoss = AtlasLootBossButtons[zoneID][id]
|
|
-- dont show navigation buttons if its not rep or set
|
|
local match = string.find(boss, AL["Reputation"]) or string.find(boss, AL["Set"])
|
|
if ( not match ) then
|
|
AtlasLootItemsFrame_BACK:Hide();
|
|
AtlasLootItemsFrame_NEXT:Hide();
|
|
AtlasLootItemsFrame_PREV:Hide();
|
|
end
|
|
end
|
|
elseif ( AtlasLootWBBossButtons[zoneID] and AtlasLootWBBossButtons[zoneID][id] and AtlasLootWBBossButtons[zoneID][id] ~= "" ) then
|
|
if ( AtlasLoot_IsLootTableAvailable(AtlasLootWBBossButtons[zoneID][id]) ) then
|
|
_G[name.."_Selected"]:Show();
|
|
_G[name.."_Loot"]:Hide();
|
|
local _,_,boss = string.find(_G[name.."_Text"]:GetText(), "|c%x%x%x%x%x%x%x%x%s*[%dX]*[%) ]*(.*[^%,])[%,]?$");
|
|
AtlasLoot_ShowBossLoot(AtlasLootWBBossButtons[zoneID][id], boss);
|
|
AtlasLootItemsFrame.activeBoss = id;
|
|
AtlasLoot_AtlasScrollBar_Update();
|
|
AtlasLootCharDB.LastBoss = AtlasLootWBBossButtons[zoneID][id]
|
|
-- dont show navigation buttons
|
|
AtlasLootItemsFrame_BACK:Hide();
|
|
AtlasLootItemsFrame_NEXT:Hide();
|
|
AtlasLootItemsFrame_PREV:Hide();
|
|
end
|
|
elseif ( AtlasLootBattlegrounds[zoneID] and AtlasLootBattlegrounds[zoneID][id] and AtlasLootBattlegrounds[zoneID][id] ~= "" ) then
|
|
if ( AtlasLoot_IsLootTableAvailable(AtlasLootBattlegrounds[zoneID][id]) ) then
|
|
_G[name.."_Selected"]:Show();
|
|
_G[name.."_Loot"]:Hide();
|
|
local _,_,boss = string.find(_G[name.."_Text"]:GetText(), "|c%x%x%x%x%x%x%x%x%s*[%wX]*[%) ]*(.*[^%,])[%,]?$");
|
|
AtlasLoot_ShowBossLoot(AtlasLootBattlegrounds[zoneID][id], boss);
|
|
AtlasLootItemsFrame.activeBoss = id;
|
|
AtlasLoot_AtlasScrollBar_Update();
|
|
AtlasLootCharDB.LastBoss = AtlasLootBattlegrounds[zoneID][id]
|
|
end
|
|
end
|
|
end
|
|
-- This has been invoked from Atlas, so we remove any claim external mods have on the loot table
|
|
AtlasLootItemsFrame.externalBoss = nil;
|
|
-- Hide the AtlasQuest frame if present so that the AtlasLoot items frame is not stuck under it
|
|
if ( AtlasQuestInsideFrame ) then
|
|
AtlasQuestInsideFrame:Hide();
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_ShowMenu:
|
|
Legacy function used in Cosmos integration to open the loot browser
|
|
]]
|
|
function AtlasLoot_ShowMenu()
|
|
AtlasLootDefaultFrame:Show();
|
|
end
|
|
|
|
--[[
|
|
AtlasLootOptions_SafeLinksToggle:
|
|
Toggles SafeLinks. Items uncached will be linked as their names.
|
|
]]
|
|
-- function AtlasLootOptions_SafeLinksToggle()
|
|
-- if ( AtlasLootCharDB.SafeLinks ) then
|
|
-- AtlasLootCharDB.SafeLinks = false;
|
|
-- else
|
|
-- AtlasLootCharDB.SafeLinks = true;
|
|
-- AtlasLootCharDB.AllLinks = false;
|
|
-- end
|
|
-- AtlasLootOptions_Init();
|
|
-- end
|
|
|
|
--[[
|
|
AtlasLootOptions_AllLinksToggle:
|
|
Toggles AllLinks. All items will be linked.
|
|
]]
|
|
-- function AtlasLootOptions_AllLinksToggle()
|
|
-- if ( AtlasLootCharDB.AllLinks ) then
|
|
-- AtlasLootCharDB.AllLinks = false;
|
|
-- else
|
|
-- AtlasLootCharDB.AllLinks = true;
|
|
-- AtlasLootCharDB.SafeLinks = false;
|
|
-- end
|
|
-- AtlasLootOptions_Init();
|
|
-- end
|
|
|
|
--[[
|
|
AtlasLootOptions_DefaultTTToggle:
|
|
Toggles DefaultTooltips. Uses default tooltips.
|
|
]]
|
|
function AtlasLootOptions_DefaultTTToggle()
|
|
AtlasLootCharDB.DefaultTT = true;
|
|
AtlasLootCharDB.LootlinkTT = false;
|
|
AtlasLootCharDB.ItemSyncTT = false;
|
|
AtlasLootOptions_Init();
|
|
end
|
|
|
|
--[[
|
|
AtlasLootOptions_LootlinkTTToggle:
|
|
Toggles Lootlink tooltips instead of the default ones.
|
|
]]
|
|
function AtlasLootOptions_LootlinkTTToggle()
|
|
AtlasLootCharDB.DefaultTT = false;
|
|
AtlasLootCharDB.LootlinkTT = true;
|
|
AtlasLootCharDB.ItemSyncTT = false;
|
|
AtlasLootOptions_Init();
|
|
end
|
|
|
|
--[[
|
|
AtlasLootOptions_ItemSyncTTToggle:
|
|
Toggles ItemSync tooltips instead of the default ones.
|
|
]]
|
|
function AtlasLootOptions_ItemSyncTTToggle()
|
|
AtlasLootCharDB.DefaultTT = false;
|
|
AtlasLootCharDB.LootlinkTT = false;
|
|
AtlasLootCharDB.ItemSyncTT = true;
|
|
AtlasLootOptions_Init();
|
|
end
|
|
|
|
function AtlasLootOptions_ShowSourceToggle()
|
|
if ( AtlasLootCharDB.ShowSource ) then
|
|
AtlasLootCharDB.ShowSource = false;
|
|
else
|
|
AtlasLootCharDB.ShowSource = true;
|
|
end
|
|
AtlasLootOptions_Init();
|
|
end
|
|
|
|
function AtlasLootOptions_WishlistGroupedByDungeonToggle()
|
|
if ( AtlasLootCharDB.WishlistGroupedByDungeon ) then
|
|
AtlasLootCharDB.WishlistGroupedByDungeon = false;
|
|
else
|
|
AtlasLootCharDB.WishlistGroupedByDungeon = true;
|
|
end
|
|
AtlasLootOptions_Init();
|
|
AtlasLoot_WishList = AtlasLoot_CategorizeWishList(AtlasLootCharDB["WishList"]);
|
|
local dataID = AtlasLootItemsFrame.refresh[1];
|
|
|
|
if ( dataID == 'WishList' ) then
|
|
AtlasLoot_ShowWishList();
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLootOptions_EquipCompareToggle:
|
|
Toggles EquipCompare. Adds a tooltip with the equipped item (if it's the case) next to the default one.
|
|
]]
|
|
function AtlasLootOptions_EquipCompareToggle()
|
|
if ( AtlasLootCharDB.EquipCompare ) then
|
|
AtlasLootCharDB.EquipCompare = false;
|
|
if ( IsAddOnLoaded("EquipCompare") ) then
|
|
EquipCompare_UnregisterTooltip(AtlasLootTooltip);
|
|
EquipCompare_UnregisterTooltip(AtlasLootTooltip2);
|
|
end
|
|
if ( IsAddOnLoaded("EQCompare") ) then
|
|
EQCompare:UnRegisterTooltip(AtlasLootTooltip);
|
|
EQCompare:UnRegisterTooltip(AtlasLootTooltip2);
|
|
end
|
|
else
|
|
AtlasLootCharDB.EquipCompare = true;
|
|
if ( IsAddOnLoaded("EquipCompare") ) then
|
|
EquipCompare_RegisterTooltip(AtlasLootTooltip);
|
|
EquipCompare_RegisterTooltip(AtlasLootTooltip2);
|
|
end
|
|
if ( IsAddOnLoaded("EQCompare") ) then
|
|
EQCompare:RegisterTooltip(AtlasLootTooltip);
|
|
EQCompare:RegisterTooltip(AtlasLootTooltip2);
|
|
end
|
|
end
|
|
AtlasLootOptions_Init();
|
|
end
|
|
|
|
--[[
|
|
AtlasLootOptions_OpaqueToggle:
|
|
Toggles opacity of the items frame.
|
|
]]
|
|
function AtlasLootOptions_OpaqueToggle()
|
|
AtlasLootCharDB.Opaque = AtlasLootOptionsFrameOpaque:GetChecked();
|
|
if ( AtlasLootCharDB.Opaque ) then
|
|
AtlasLootItemsFrame_Back:SetTexture(0, 0, 0, 1);
|
|
else
|
|
AtlasLootItemsFrame_Back:SetTexture(0, 0, 0, 0.65);
|
|
end
|
|
AtlasLootOptions_Init();
|
|
end
|
|
|
|
--[[
|
|
AtlasLootOptions_ItemIDToggle:
|
|
Toggles items ID.
|
|
]]
|
|
function AtlasLootOptions_ItemIDToggle()
|
|
if ( AtlasLootCharDB.ItemIDs ) then
|
|
AtlasLootCharDB.ItemIDs = false;
|
|
else
|
|
AtlasLootCharDB.ItemIDs = true;
|
|
end
|
|
AtlasLootOptions_Init();
|
|
end
|
|
|
|
--[[
|
|
AtlasLootOptions_ItemSpam:
|
|
Toggles item query spam.
|
|
]]
|
|
-- function AtlasLootOptions_ItemSpam()
|
|
-- if ( AtlasLootCharDB.ItemSpam ) then
|
|
-- AtlasLootCharDB.ItemSpam = false;
|
|
-- else
|
|
-- AtlasLootCharDB.ItemSpam = true;
|
|
-- end
|
|
-- AtlasLootOptions_Init();
|
|
-- end
|
|
|
|
--[[
|
|
AtlasLootOptions_Toggle:
|
|
Toggle on/off the options window
|
|
]]
|
|
function AtlasLootOptions_Toggle()
|
|
if ( AtlasLootOptionsFrame:IsVisible() ) then
|
|
-- Hide the options frame if already shown
|
|
AtlasLootOptionsFrame:Hide();
|
|
else
|
|
AtlasLootOptionsFrame:Show();
|
|
-- Workaround for a weird quirk where tooltip settings so not immediately take effect
|
|
if ( AtlasLootCharDB.DefaultTT == true ) then
|
|
AtlasLootOptions_DefaultTTToggle();
|
|
elseif ( AtlasLootCharDB.LootlinkTT == true ) then
|
|
AtlasLootOptions_LootlinkTTToggle();
|
|
elseif ( AtlasLootCharDB.ItemSyncTT == true ) then
|
|
AtlasLootOptions_ItemSyncTTToggle();
|
|
end
|
|
end
|
|
end
|
|
|
|
function AtlasLootItemsFrame_OnUpdate()
|
|
if ( not this.refreshTime ) then
|
|
return
|
|
end
|
|
this.refreshTime = (this.refreshTime or refreshTimeout) - arg1
|
|
local done = true
|
|
for item in pairs(this.queue) do
|
|
if not GetItemInfo(item) then
|
|
done = false
|
|
end
|
|
end
|
|
if ( done or this.refreshTime <= 0 ) then
|
|
this.refreshTime = nil
|
|
for k in pairs(this.queue) do
|
|
this.queue[k] = nil
|
|
end
|
|
if ( this.refresh and this.refresh[1] and this.refresh[2] and this.refresh[3] ) then
|
|
AtlasLoot_ShowItemsFrame(this.refresh[1], this.refresh[2], this.refresh[3])
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_ShowItemsFrame(dataID, dataSource, boss, pFrame):
|
|
dataID - Name of the loot table
|
|
dataSource - Table in the database where the loot table is stored
|
|
boss - Text string to use as a title for the loot page
|
|
pFrame - Data structure describing how and where to anchor the item frame (more details, see the function AtlasLoot_SetItemInfoFrame)
|
|
This fuction is not normally called directly, it is usually invoked by AtlasLoot_ShowBossLoot.
|
|
It is the workhorse of the mod and allows the loot tables to be displayed any way anywhere in any mod.
|
|
]]
|
|
function AtlasLoot_ShowItemsFrame(dataID, dataSource, boss)
|
|
AtlasLootItemsFrame.refreshTime = nil
|
|
if ( AtlasLootItemsFrameContainer:IsShown() and AtlasLootItemsFrame.refresh and dataID ~= AtlasLootItemsFrame.refresh[1] ) then
|
|
AtlasLootItemsFrameContainer:Hide()
|
|
end
|
|
-- Set up local variables needed for GetItemInfo, etc
|
|
local iconFrame, nameFrame, extraFrame, itemButton;
|
|
local text, extra;
|
|
local wlPage, wlPageMax = 1, 1;
|
|
local isItem, isEnchant, isSpell;
|
|
local spellName, spellIcon;
|
|
if ( dataID == "SearchResult" and dataID == "WishList" ) then
|
|
AtlasLoot_IsLootTableAvailable(dataID);
|
|
end
|
|
-- If the data source has not been passed, throw up a debugging statement
|
|
if ( dataSource == nil ) then
|
|
DEFAULT_CHAT_FRAME:AddMessage("No dataSource!");
|
|
end
|
|
-- If the loot table name has not been passed, throw up a debugging statement
|
|
if ( dataID == nil ) then
|
|
DEFAULT_CHAT_FRAME:AddMessage("No dataID!");
|
|
end
|
|
local dataSource_backup = dataSource;
|
|
if ( dataSource ~= "dummy" ) then
|
|
if ( dataID == "SearchResult" or dataID == "WishList" ) then
|
|
dataSource = {};
|
|
-- Match the page number to display
|
|
wlPage = tonumber(string.sub(dataSource_backup, string.find(dataSource_backup, "%d"), string.len(dataSource_backup)));
|
|
-- Aquiring items of the page
|
|
if ( dataID == "SearchResult" ) then
|
|
dataSource[dataID], wlPageMax = AtlasLoot:GetSearchResultPage(wlPage);
|
|
elseif ( dataID == "WishList" ) then
|
|
dataSource[dataID], wlPageMax = AtlasLoot_GetWishListPage(wlPage);
|
|
end
|
|
-- Make page number reasonable
|
|
if ( wlPage < 1 ) then wlPage = 1 end
|
|
if ( wlPage > wlPageMax ) then wlPage = wlPageMax end
|
|
else
|
|
dataSource = AtlasLoot_Data[dataSource_backup];
|
|
end
|
|
end
|
|
-- Get AtlasQuest out of the way
|
|
if ( AtlasQuestInsideFrame ) then
|
|
AtlasQuestInsideFrame:Hide();
|
|
end
|
|
-- Store data about the state of the items frame to allow minor tweaks or a recall of the current loot page
|
|
AtlasLootItemsFrame.refresh = { dataID, dataSource_backup, boss, AtlasLoot_AnchorPoint };
|
|
-- Escape out of this function if creating a menu, this function only handles loot tables.
|
|
-- Inserting escapes in this way allows consistant calling of data whether it is a loot table or a menu.
|
|
if ( AtlasLoot_MenuList[dataID] ) then
|
|
-- Ditch the Quicklook selector
|
|
AtlasLoot_QuickLooks:Hide();
|
|
AtlasLootQuickLooksButton:Hide();
|
|
_G[AtlasLoot_MenuList[dataID]]()
|
|
else
|
|
-- This is a valid QuickLook, so show the UI objects
|
|
if ( dataID ~= "SearchResult" and dataID ~= "WishList" ) then
|
|
AtlasLoot_QuickLooks:Show();
|
|
AtlasLootQuickLooksButton:Show();
|
|
end
|
|
-- Iterate through each item object and set its properties
|
|
for i = 1, 30, 1 do
|
|
-- Hide the menu objects. These are not required for a loot table
|
|
_G["AtlasLootMenuItem_"..i]:Hide();
|
|
-- Check for a valid object (that it exists, and that it has a name)
|
|
if ( dataSource[dataID][i] and dataSource[dataID][i][3] ~= "" ) then
|
|
-- Use shortcuts for easier reference to parts of the item button
|
|
itemButton = _G["AtlasLootItem_"..i];
|
|
iconFrame = _G["AtlasLootItem_"..i.."_Icon"];
|
|
nameFrame = _G["AtlasLootItem_"..i.."_Name"];
|
|
extraFrame = _G["AtlasLootItem_"..i.."_Extra"];
|
|
local quantity = _G["AtlasLootItem_"..i.."_Quantity"]
|
|
local iconBorder = _G["AtlasLootItem_"..i.."_IconBorder"]
|
|
iconBorder:SetVertexColor(1, 1, 1)
|
|
if ( string.sub(dataSource[dataID][i][1], 1, 1) == "s" ) then
|
|
isItem = false;
|
|
isEnchant = false;
|
|
isSpell = true;
|
|
elseif ( string.sub(dataSource[dataID][i][1], 1, 1) == "e" ) then
|
|
isItem = false;
|
|
isEnchant = true;
|
|
isSpell = false;
|
|
else
|
|
isItem = true;
|
|
isEnchant = false;
|
|
isSpell = false;
|
|
end
|
|
if ( isItem ) then
|
|
local itemID = tonumber(dataSource[dataID][i][1])
|
|
local itemName, _, itemQuality = GetItemInfo(itemID);
|
|
-- If the client has the name of the item in cache, use that instead.
|
|
-- This is poor man's localisation, English is replaced be whatever is needed
|
|
if ( itemName ) then
|
|
local r, g, b, itemColor = GetItemQualityColor(itemQuality);
|
|
text = itemColor..itemName;
|
|
iconBorder:SetVertexColor(r, g, b)
|
|
else
|
|
if ( itemID and itemID ~= 0 ) then
|
|
AtlasLootCacheTooltip:SetHyperlink("item:"..itemID)
|
|
AtlasLootItemsFrame.refreshTime = refreshTimeout
|
|
AtlasLootItemsFrame.queue[itemID] = true
|
|
iconBorder:SetVertexColor(1, 0, 0)
|
|
end
|
|
text = AtlasLoot_FixText(dataSource[dataID][i][3]);
|
|
end
|
|
quantity:SetText("")
|
|
itemButton.dressingroomID = dataSource[dataID][i][1];
|
|
elseif ( isEnchant ) then
|
|
local spellID = tonumber(string.sub(dataSource[dataID][i][1], 2))
|
|
local craftItem = tonumber(GetSpellInfoAtlasLootDB["enchants"][spellID]["item"])
|
|
if ( SpellInfo ) then
|
|
spellName = SpellInfo(spellID)
|
|
else
|
|
if ( spellID and spellID ~= 0 ) then
|
|
AtlasLootCacheTooltip:SetHyperlink("enchant:"..spellID)
|
|
spellName = AtlasLootCacheTooltipTextLeft1:GetText()
|
|
end
|
|
if ( not (spellName and spellName ~= "") ) then
|
|
spellName = GetSpellInfoAtlasLootDB["enchants"][spellID]["name"]
|
|
end
|
|
end
|
|
spellIcon = dataSource[dataID][i][2]
|
|
if ( craftItem ) then
|
|
local r, g, b, color, quality
|
|
text, _, quality = GetItemInfo(craftItem)
|
|
if ( not text ) then
|
|
if ( craftItem and craftItem ~= 0 ) then
|
|
AtlasLootCacheTooltip:SetHyperlink("item:"..craftItem)
|
|
AtlasLootItemsFrame.refreshTime = refreshTimeout
|
|
AtlasLootItemsFrame.queue[craftItem] = true
|
|
end
|
|
text = AtlasLoot_FixText(spellName);
|
|
end
|
|
if ( quality ) then
|
|
r, g, b, color = GetItemQualityColor(quality)
|
|
text = color..(text or "")
|
|
iconBorder:SetVertexColor(r, g, b)
|
|
end
|
|
itemButton.dressingroomID = craftItem;
|
|
else
|
|
text = spellName
|
|
itemButton.dressingroomID = nil;
|
|
end
|
|
quantity:SetText("")
|
|
elseif ( isSpell ) then
|
|
local spellID = tonumber(string.sub(dataSource[dataID][i][1], 2))
|
|
local craftItem = tonumber(GetSpellInfoAtlasLootDB["craftspells"][spellID]["craftItem"])
|
|
local reagents = GetSpellInfoAtlasLootDB["craftspells"][spellID]["reagents"]
|
|
if ( type(reagents) == "table" ) then
|
|
for j = 1, table.getn(reagents) do
|
|
local reagent = GetSpellInfoAtlasLootDB["craftspells"][spellID]["reagents"][j]
|
|
if ( not GetItemInfo(reagent[1]) ) then
|
|
AtlasLootCacheTooltip:SetHyperlink("item:"..reagent[1]);
|
|
end
|
|
end
|
|
end
|
|
if ( SpellInfo ) then
|
|
spellName = SpellInfo(spellID)
|
|
else
|
|
spellName = GetSpellInfoAtlasLootDB["craftspells"][spellID]["name"]
|
|
end
|
|
spellIcon = dataSource[dataID][i][2]
|
|
if ( craftItem ) then
|
|
local r, g, b, color, quality
|
|
text, _, quality = GetItemInfo(craftItem)
|
|
if ( not text ) then
|
|
if ( craftItem ~= 0 ) then
|
|
AtlasLootCacheTooltip:SetHyperlink("item:"..craftItem)
|
|
text = AtlasLoot_FixText(spellName);
|
|
AtlasLootItemsFrame.refreshTime = refreshTimeout
|
|
AtlasLootItemsFrame.queue[craftItem] = true
|
|
end
|
|
end
|
|
if ( quality ) then
|
|
r, g, b, color = GetItemQualityColor(quality)
|
|
text = color..(text or "")
|
|
iconBorder:SetVertexColor(r, g, b)
|
|
end
|
|
itemButton.dressingroomID = craftItem;
|
|
else
|
|
text = spellName
|
|
itemButton.dressingroomID = nil
|
|
end
|
|
local qtyMin = GetSpellInfoAtlasLootDB["craftspells"][spellID]["craftQuantityMin"];
|
|
local qtyMax = GetSpellInfoAtlasLootDB["craftspells"][spellID]["craftQuantityMax"];
|
|
if ( qtyMin ) then
|
|
if ( qtyMax ) then
|
|
quantity:SetText(qtyMin.. "-"..qtyMax)
|
|
else
|
|
quantity:SetText(qtyMin)
|
|
end
|
|
else
|
|
quantity:SetText("")
|
|
end
|
|
end
|
|
-- Insert the item description
|
|
extra = AtlasLoot_FixText(dataSource[dataID][i][4]);
|
|
local iconData = dataSource[dataID][i][2]
|
|
-- If there is no data on the texture an item should have, show a big red question mark
|
|
if ( strsub(iconData, 1, 5) == "CLASS" ) then
|
|
iconFrame:SetTexture("Interface\\AddOns\\AtlasLoot\\Images\\"..strsub(iconData, 6))
|
|
elseif ( isItem and type(dataSource[dataID][i][1]) == "number" ) then
|
|
local _, _, _, _, _, _, _, _, texture = GetItemInfo(dataSource[dataID][i][1])
|
|
if ( not texture and type(iconData) == "string" ) then
|
|
texture = "Interface\\Icons\\"..iconData
|
|
end
|
|
iconFrame:SetTexture(texture);
|
|
elseif ( not isItem and spellIcon ) then
|
|
if ( type(iconData) == "number" ) then
|
|
local _, _, _, _, _, _, _, _, texture = GetItemInfo(iconData)
|
|
iconFrame:SetTexture(texture);
|
|
elseif ( type(iconData) == "string" ) then
|
|
iconFrame:SetTexture("Interface\\Icons\\"..iconData);
|
|
else
|
|
iconFrame:SetTexture(spellIcon);
|
|
end
|
|
else
|
|
iconFrame:SetTexture("Interface\\Icons\\"..iconData);
|
|
end
|
|
if ( iconFrame:GetTexture() == nil ) then
|
|
iconFrame:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark");
|
|
end
|
|
-- Set the name and description of the item
|
|
nameFrame:SetText(text);
|
|
extraFrame:SetText(extra);
|
|
extraFrame:Show();
|
|
-- Set prices for items, up to 5 different currencies can be used in combination
|
|
for j = 1, 5 do
|
|
_G["AtlasLootItem_"..i.."_PriceText"..j]:Hide();
|
|
_G["AtlasLootItem_"..i.."_PriceIcon"..j]:Hide();
|
|
end
|
|
local index = 1
|
|
for j = 6, 14, 2 do
|
|
local pricetext = _G["AtlasLootItem_"..i.."_PriceText"..index]
|
|
local priceicon = _G["AtlasLootItem_"..i.."_PriceIcon"..index]
|
|
if ( dataSource[dataID][i][j] and dataSource[dataID][i][j] ~= "" ) then
|
|
pricetext:SetText(dataSource[dataID][i][j])
|
|
priceicon:SetTexture(AtlasLoot_FixText(dataSource[dataID][i][j + 1]))
|
|
pricetext:Show()
|
|
priceicon:Show()
|
|
end
|
|
index = index + 1
|
|
end
|
|
if ( (dataID == "SearchResult" or dataID == "WishList") and dataSource[dataID][i][5] ) then
|
|
local _, _, wishDataID, wishDataSource = strfind(dataSource[dataID][i][5], "(.+)|(.+)")
|
|
if ( wishDataSource == "AtlasLootRepItems" ) then
|
|
if ( wishDataID and AtlasLoot_IsLootTableAvailable(wishDataID) ) then
|
|
for _, v in ipairs(AtlasLoot_Data[wishDataSource][wishDataID]) do
|
|
if ( dataSource[dataID][i][1] == v[1] ) then
|
|
index = 1
|
|
for j = 6, 14, 2 do
|
|
local pricetext = _G["AtlasLootItem_"..i.."_PriceText"..index]
|
|
local priceicon = _G["AtlasLootItem_"..i.."_PriceIcon"..index]
|
|
if ( v[j] and v[j] ~= "" ) then
|
|
pricetext:SetText(v[j])
|
|
priceicon:SetTexture(AtlasLoot_FixText(v[j + 1]))
|
|
pricetext:Show()
|
|
priceicon:Show()
|
|
end
|
|
index = index + 1
|
|
end
|
|
break;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ( wishDataSource == "AtlasLootItems" and AtlasLootCharDB.WishlistGroupedByDungeon ) then
|
|
-- Set boss
|
|
if ( wishDataID and AtlasLoot_IsLootTableAvailable(wishDataID) ) then
|
|
for _, v in ipairs(AtlasLoot_Data[wishDataSource][wishDataID]) do
|
|
if ( dataSource[dataID][i][1] == v[1] ) then
|
|
local boss = AtlasLoot_GetWishListSubheadingBoss(wishDataID)
|
|
if ( boss ) then
|
|
extraFrame:SetText(extra .. " - "..boss)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
-- For convenience, we store information about the objects in the objects so that it can be easily accessed later
|
|
itemButton.itemID = dataSource[dataID][i][1];
|
|
itemButton.itemIDName = dataSource[dataID][i][3];
|
|
itemButton.itemIDExtra = dataSource[dataID][i][4];
|
|
itemButton.container = dataSource[dataID][i][16]
|
|
if ( type(itemButton.container) == "table" ) then
|
|
iconBorder:SetVertexColor(1, 0.82, 0)
|
|
for row = 1, getn(itemButton.container) do
|
|
for item = 1, getn(itemButton.container[row]) do
|
|
AtlasLoot_CacheItem(itemButton.container[row][item][1])
|
|
end
|
|
end
|
|
end
|
|
itemButton.droprate = nil;
|
|
if ( dataID == "SearchResult" or dataID == "WishList" ) then
|
|
itemButton.sourcePage = dataSource[dataID][i][5];
|
|
else
|
|
local droprate = dataSource[dataID][i][5];
|
|
if ( droprate and string.find(droprate, "%%") ) then
|
|
itemButton.droprate = droprate
|
|
end
|
|
end
|
|
itemButton:Show();
|
|
if ( GetMouseFocus() == itemButton ) then
|
|
itemButton:Hide()
|
|
itemButton:Show()
|
|
end
|
|
else
|
|
_G["AtlasLootItem_"..i]:Hide();
|
|
end
|
|
end
|
|
-- Hide navigation buttons by default, only show what we need
|
|
AtlasLootItemsFrame_BACK:Hide();
|
|
AtlasLootItemsFrame_NEXT:Hide();
|
|
AtlasLootItemsFrame_PREV:Hide();
|
|
AtlasLoot_BossName:SetText(boss);
|
|
-- Consult the button registry to determine what nav buttons are required
|
|
if ( dataID == "SearchResult" or dataID == "WishList" ) then
|
|
if ( wlPage < wlPageMax ) then
|
|
AtlasLootItemsFrame_NEXT:Show();
|
|
AtlasLootItemsFrame_NEXT.lootpage = dataID.."Page"..(wlPage + 1);
|
|
end
|
|
if ( wlPage > 1 ) then
|
|
AtlasLootItemsFrame_PREV:Show();
|
|
AtlasLootItemsFrame_PREV.lootpage = dataID.."Page"..(wlPage - 1);
|
|
end
|
|
elseif ( AtlasLoot_ButtonRegistry[dataID] ) then
|
|
local tablebase = AtlasLoot_ButtonRegistry[dataID];
|
|
AtlasLoot_BossName:SetText(tablebase.Title);
|
|
if ( tablebase.Next_Page ) then
|
|
AtlasLootItemsFrame_NEXT:Show();
|
|
AtlasLootItemsFrame_NEXT.lootpage = tablebase.Next_Page;
|
|
if ( AtlasLoot_ButtonRegistry[tablebase.Next_Page] ) then
|
|
AtlasLootItemsFrame_NEXT.title = AtlasLoot_ButtonRegistry[tablebase.Next_Page].Title;
|
|
end
|
|
end
|
|
if ( tablebase.Prev_Page ) then
|
|
AtlasLootItemsFrame_PREV:Show();
|
|
AtlasLootItemsFrame_PREV.lootpage = tablebase.Prev_Page;
|
|
if ( AtlasLoot_ButtonRegistry[tablebase.Prev_Page] ) then
|
|
AtlasLootItemsFrame_PREV.title = AtlasLoot_ButtonRegistry[tablebase.Prev_Page].Title;
|
|
end
|
|
end
|
|
if ( tablebase.Back_Page ) then
|
|
AtlasLootItemsFrame_BACK:Show();
|
|
AtlasLootItemsFrame_BACK.lootpage = tablebase.Back_Page;
|
|
if ( AtlasLoot_ButtonRegistry[tablebase.Back_Page] ) then
|
|
AtlasLootItemsFrame_BACK.title = AtlasLoot_ButtonRegistry[tablebase.Back_Page].Title;
|
|
end
|
|
if ( AtlasFrame and AtlasFrame:IsVisible() ) then
|
|
local sourceKey
|
|
for k, v in pairs(AtlasLoot_Data) do
|
|
if ( v == dataSource ) then
|
|
sourceKey = k
|
|
end
|
|
end
|
|
-- Hide navigation buttons if we click on boss loot in Atlas
|
|
if ( sourceKey == "AtlasLootItems" or sourceKey == "AtlasLootWBItems" ) then
|
|
AtlasLootItemsFrame_BACK:Hide()
|
|
AtlasLootItemsFrame_NEXT:Hide()
|
|
AtlasLootItemsFrame_PREV:Hide()
|
|
end
|
|
-- Hide navigation buttons if we click Quicklooks in Atlas
|
|
for i = 1, 4 do
|
|
if ( AtlasLootCharDB["QuickLooks"][i] and dataID == AtlasLootCharDB["QuickLooks"][i][1] ) then
|
|
AtlasLootItemsFrame_BACK:Hide();
|
|
AtlasLootItemsFrame_NEXT:Hide();
|
|
AtlasLootItemsFrame_PREV:Hide();
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
-- For Alphamap and Atlas integration, show a 'close' button to hide the loot table and restore the map view
|
|
AtlasLootItemsFrame_CloseButton:Hide();
|
|
if ( AtlasFrame and AtlasFrame:IsShown() or AlphaMapAlphaMapFrame and AlphaMapAlphaMapFrame:IsShown() ) then
|
|
AtlasLootItemsFrame_CloseButton:Show();
|
|
end
|
|
local subMenu = nil
|
|
local bossName = ""
|
|
for k in pairs(AtlasLoot_HewdropDown_SubTables) do
|
|
if ( subMenu ) then
|
|
break
|
|
end
|
|
for _, n in pairs(AtlasLoot_HewdropDown_SubTables[k]) do
|
|
if ( n[2] == dataID ) then
|
|
subMenu = AtlasLoot_HewdropDown_SubTables[k]
|
|
bossName = n[1]
|
|
break
|
|
end
|
|
end
|
|
end
|
|
if ( subMenu ) then
|
|
AtlasLoot_HewdropSubMenuRegister(subMenu)
|
|
AtlasLootDefaultFrame_SubMenu:Enable()
|
|
AtlasLootDefaultFrame_SelectedTable:SetText(bossName)
|
|
AtlasLootDefaultFrame_SelectedTable:Show()
|
|
else
|
|
AtlasLootDefaultFrame_SubMenu:Disable()
|
|
AtlasLootDefaultFrame_SelectedTable:Hide()
|
|
end
|
|
-- Anchor the item frame where it is supposed to be
|
|
AtlasLootItemsFrame:SetParent(_G[AtlasLoot_AnchorPoint[2]]);
|
|
AtlasLootItemsFrame:ClearAllPoints();
|
|
AtlasLootItemsFrame:SetPoint(AtlasLoot_AnchorPoint[1], AtlasLoot_AnchorPoint[2], AtlasLoot_AnchorPoint[3], AtlasLoot_AnchorPoint[4], AtlasLoot_AnchorPoint[5]);
|
|
AtlasLootItemsFrame:Show();
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_HewdropClick(tablename, text, tabletype):
|
|
tablename - Name of the loot table in the database
|
|
text - Heading for the loot table
|
|
tabletype - Whether the tablename indexes an actual table or needs to generate a submenu
|
|
Called when a button in AtlasLoot_Hewdrop is clicked
|
|
]]
|
|
function AtlasLoot_HewdropClick(tablename, text, tabletype)
|
|
-- AtlasLootCharDB.LastMenu = { tablename, text, tabletype }
|
|
-- Definition of where I want the loot table to be shown
|
|
AtlasLoot_AnchorPoint = Anchor_Default
|
|
|
|
-- If the button clicked was linked to a loot table
|
|
if ( tabletype == "Table" ) then
|
|
-- Show the loot table
|
|
AtlasLoot_ShowBossLoot(tablename, text);
|
|
-- Save needed info for fuure re-display of the table
|
|
AtlasLootCharDB.LastBoss = tablename;
|
|
AtlasLootCharDB.LastBossText = text;
|
|
-- Purge the text label for the submenu and disable the submenu
|
|
AtlasLootDefaultFrame_SubMenu:Disable();
|
|
AtlasLootDefaultFrame_SelectedTable:SetText("");
|
|
AtlasLootDefaultFrame_SelectedTable:Show();
|
|
-- If the button links to a sub menu definition
|
|
else
|
|
-- Enable the submenu button
|
|
AtlasLootDefaultFrame_SubMenu:Enable();
|
|
-- Show the first loot table associated with the submenu
|
|
AtlasLoot_ShowBossLoot(AtlasLoot_HewdropDown_SubTables[tablename][1][2], AtlasLoot_HewdropDown_SubTables[tablename][1][1]);
|
|
-- Save needed info for fuure re-display of the table
|
|
AtlasLootCharDB.LastBoss = AtlasLoot_HewdropDown_SubTables[tablename][1][2];
|
|
AtlasLootCharDB.LastBossText = AtlasLoot_HewdropDown_SubTables[tablename][1][1];
|
|
-- Load the correct submenu and associated with the button
|
|
AtlasLoot_HewdropSubMenu:Unregister(AtlasLootDefaultFrame_SubMenu);
|
|
AtlasLoot_HewdropSubMenuRegister(AtlasLoot_HewdropDown_SubTables[tablename]);
|
|
-- Show a text label of what has been selected
|
|
AtlasLootDefaultFrame_SelectedTable:SetText(AtlasLoot_HewdropDown_SubTables[tablename][1][1]);
|
|
AtlasLootDefaultFrame_SelectedTable:Show();
|
|
end
|
|
-- Show the category that has been selected
|
|
AtlasLootDefaultFrame_SelectedCategory:SetText(text);
|
|
AtlasLootDefaultFrame_SelectedCategory:Show();
|
|
AtlasLoot_Hewdrop:Close(1);
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_HewdropSubMenuClick(tablename, text):
|
|
tablename - Name of the loot table in the database
|
|
text - Heading for the loot table
|
|
Called when a button in AtlasLoot_HewdropSubMenu is clicked
|
|
]]
|
|
function AtlasLoot_HewdropSubMenuClick(tablename, text)
|
|
-- Definition of where I want the loot table to be shown
|
|
AtlasLoot_AnchorPoint = Anchor_Default
|
|
-- Show the select loot table
|
|
AtlasLoot_ShowBossLoot(tablename, text);
|
|
-- Save needed info for fuure re-display of the table
|
|
AtlasLootCharDB.LastBoss = tablename;
|
|
AtlasLootCharDB.LastBossText = text;
|
|
-- Show the table that has been selected
|
|
AtlasLootDefaultFrame_SelectedTable:SetText(text);
|
|
AtlasLootDefaultFrame_SelectedTable:Show();
|
|
AtlasLoot_HewdropSubMenu:Close(1);
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_HewdropSubMenuRegister(loottable):
|
|
loottable - Table defining the sub menu
|
|
Generates the sub menu needed by passing a table of loot tables and titles
|
|
]]
|
|
function AtlasLoot_HewdropSubMenuRegister(loottable)
|
|
AtlasLoot_HewdropSubMenu:Register(AtlasLootDefaultFrame_SubMenu,
|
|
'point', function(parent)
|
|
return "TOP", "BOTTOM"
|
|
end,
|
|
'children', function(level, value)
|
|
if ( level == 1 ) then
|
|
for k,v in pairs(loottable) do
|
|
AtlasLoot_HewdropSubMenu:AddLine(
|
|
'text', v[1],
|
|
'func', AtlasLoot_HewdropSubMenuClick,
|
|
'arg1', v[2],
|
|
'arg2', v[1],
|
|
'notCheckable', true
|
|
)
|
|
end
|
|
end
|
|
end,
|
|
'dontHook', true
|
|
)
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_HewdropRegister:
|
|
Constructs the main category menu from a tiered table
|
|
]]
|
|
function AtlasLoot_HewdropRegister()
|
|
AtlasLoot_Hewdrop:Register(AtlasLootDefaultFrame_Menu,
|
|
'point', function(parent)
|
|
return "TOP", "BOTTOM"
|
|
end,
|
|
'children', function(level, value)
|
|
if ( level == 1 ) then
|
|
if ( AtlasLoot_HewdropDown ) then
|
|
for k,v in ipairs(AtlasLoot_HewdropDown) do
|
|
-- If a link to show a submenu
|
|
if ( type(v[1]) == "table" and type(v[1][1]) == "string" ) then
|
|
if ( v[1][3] == "Submenu" ) then
|
|
AtlasLoot_Hewdrop:AddLine(
|
|
'text', v[1][1],
|
|
'textR', 1,
|
|
'textG', 0.82,
|
|
'textB', 0,
|
|
'func', AtlasLoot_HewdropClick,
|
|
'arg1', v[1][2],
|
|
'arg2', v[1][1],
|
|
'arg3', v[1][3],
|
|
'notCheckable', true
|
|
)
|
|
end
|
|
else
|
|
local lock = 0;
|
|
-- If an entry linked to a subtable
|
|
for i,j in pairs(v) do
|
|
if ( lock == 0 ) then
|
|
AtlasLoot_Hewdrop:AddLine(
|
|
'text', i,
|
|
'textR', 1,
|
|
'textG', 0.82,
|
|
'textB', 0,
|
|
'hasArrow', true,
|
|
'value', j,
|
|
'func', AtlasLoot_OpenMenu,
|
|
'arg1', i,
|
|
'notCheckable', true
|
|
)
|
|
lock = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
elseif ( level == 2 ) then
|
|
if ( value ) then
|
|
for k,v in ipairs(value) do
|
|
if ( type(v) == "table" ) then
|
|
if ( type(v[1]) == "table" and type(v[1][1]) == "string" ) then
|
|
-- If an entry to show a submenu
|
|
if ( v[1][3] == "Submenu" ) then
|
|
AtlasLoot_Hewdrop:AddLine(
|
|
'text', v[1][1],
|
|
'textR', 1,
|
|
'textG', 0.82,
|
|
'textB', 0,
|
|
'func', AtlasLoot_HewdropClick,
|
|
'arg1', v[1][2],
|
|
'arg2', v[1][1],
|
|
'arg3', v[1][3],
|
|
'notCheckable', true
|
|
)
|
|
-- An entry to show a specific loot page
|
|
else
|
|
AtlasLoot_Hewdrop:AddLine(
|
|
'text', v[1][1],
|
|
'textR', 1,
|
|
'textG', 0.82,
|
|
'textB', 0,
|
|
'func', AtlasLoot_HewdropClick,
|
|
'arg1', v[1][2],
|
|
'arg2', v[1][1],
|
|
'arg3', v[1][3],
|
|
'notCheckable', true
|
|
)
|
|
end
|
|
else
|
|
local lock = 0;
|
|
-- Entry to link to a sub table
|
|
for i,j in pairs(v) do
|
|
if ( lock == 0 ) then
|
|
AtlasLoot_Hewdrop:AddLine(
|
|
'text', i,
|
|
'textR', 1,
|
|
'textG', 0.82,
|
|
'textB', 0,
|
|
'hasArrow', true,
|
|
'value', j,
|
|
'notCheckable', true
|
|
)
|
|
lock = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
elseif ( level == 3 ) then
|
|
-- Essentially the same as level == 2
|
|
if ( value ) then
|
|
for k,v in pairs(value) do
|
|
if ( type(v[1]) == "string" ) then
|
|
if ( v[3] == "Submenu" ) then
|
|
AtlasLoot_Hewdrop:AddLine(
|
|
'text', v[1],
|
|
'textR', 1,
|
|
'textG', 0.82,
|
|
'textB', 0,
|
|
'func', AtlasLoot_HewdropClick,
|
|
'arg1', v[2],
|
|
'arg2', v[1],
|
|
'arg3', v[3],
|
|
'notCheckable', true
|
|
)
|
|
else
|
|
AtlasLoot_Hewdrop:AddLine(
|
|
'text', v[1],
|
|
'textR', 1,
|
|
'textG', 0.82,
|
|
'textB', 0,
|
|
'func', AtlasLoot_HewdropClick,
|
|
'arg1', v[2],
|
|
'arg2', v[1],
|
|
'arg3', v[3],
|
|
'notCheckable', true
|
|
)
|
|
end
|
|
elseif ( type(v) == "table" ) then
|
|
AtlasLoot_Hewdrop:AddLine(
|
|
'text', k,
|
|
'textR', 1,
|
|
'textG', 0.82,
|
|
'textB', 0,
|
|
'hasArrow', true,
|
|
'value', v,
|
|
'notCheckable', true
|
|
)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end,
|
|
'dontHook', true
|
|
)
|
|
end
|
|
|
|
function AtlasLoot_OpenMenu(menuName)
|
|
AtlasLoot_QuickLooks:Hide();
|
|
AtlasLootQuickLooksButton:Hide();
|
|
AtlasLootDefaultFrame_SelectedCategory:SetText(menuName)
|
|
AtlasLootDefaultFrame_SubMenu:Disable();
|
|
AtlasLootDefaultFrame_SelectedTable:SetText("");
|
|
AtlasLootDefaultFrame_SelectedTable:Show();
|
|
AtlasLootCharDB.LastBoss = this.lootpage;
|
|
AtlasLootCharDB.LastBossText = menuName;
|
|
if ( menuName == AL["Crafting"] ) then
|
|
AtlasLoot_ShowItemsFrame("CRAFTINGMENU", "dummy", "dummy")
|
|
elseif ( menuName == AL["PvP Rewards"] ) then
|
|
AtlasLoot_ShowItemsFrame("PVPMENU", "dummy", "dummy")
|
|
elseif ( menuName == AL["World Events"] ) then
|
|
AtlasLoot_ShowItemsFrame("WORLDEVENTMENU", "dummy", "dummy")
|
|
elseif ( menuName == AL["Collections"] ) then
|
|
AtlasLoot_ShowItemsFrame("SETMENU", "dummy", "dummy")
|
|
elseif ( menuName == AL["Factions"] ) then
|
|
AtlasLoot_ShowItemsFrame("REPMENU", "dummy", "dummy")
|
|
elseif ( menuName == AL["World Bosses"] ) then
|
|
AtlasLoot_ShowItemsFrame("WORLDBOSSMENU", "dummy", "dummy")
|
|
elseif ( menuName == AL["Dungeons & Raids"] ) then
|
|
AtlasLoot_ShowItemsFrame("DUNGEONSMENU1", "dummy", "dummy")
|
|
end
|
|
CloseDropDownMenus()
|
|
end
|
|
|
|
--[[
|
|
AtlasLootItemsFrame_OnCloseButton:
|
|
Called when the close button on the item frame is clicked
|
|
]]
|
|
function AtlasLootItemsFrame_OnCloseButton()
|
|
-- Set no loot table as currently selected
|
|
AtlasLootItemsFrame.activeBoss = nil;
|
|
-- Fix the boss buttons so the correct icons are displayed
|
|
if ( AtlasFrame and AtlasFrame:IsVisible() ) then
|
|
for i = 1, ATLAS_NUM_LINES do
|
|
if ( _G["AtlasEntry"..i.."_Selected"] and _G["AtlasEntry"..i.."_Selected"]:IsShown() ) then
|
|
_G["AtlasEntry"..i.."_Selected"]:Hide();
|
|
_G["AtlasEntry"..i.."_Loot"]:Show();
|
|
end
|
|
end
|
|
end
|
|
-- Hide the item frame
|
|
AtlasLootItemsFrame:Hide();
|
|
end
|
|
|
|
--[[
|
|
AtlasLootMenuItem_OnClick:
|
|
Requests the relevant loot page from a menu screen
|
|
]]
|
|
function AtlasLootMenuItem_OnClick()
|
|
if ( this.container ) then
|
|
AtlasLoot_ShowContainerFrame()
|
|
return
|
|
end
|
|
if ( this.isheader == nil or this.isheader == false ) then
|
|
local pagename = _G[this:GetName().."_Name"]:GetText()
|
|
for k,v in ipairs(AtlasLoot_HewdropDown) do
|
|
if ( not (type(v[1]) == "table") ) then
|
|
for k2, v2 in pairs(v) do
|
|
for k3, v3 in pairs(v2) do
|
|
for k4, v4 in pairs(v3) do
|
|
if ( not (type(v4[1]) == "table") ) then
|
|
if ( v4[1] == pagename and v4[3] ~= "Table" ) then
|
|
AtlasLoot_HewdropClick(v4[2],v4[1],v4[3])
|
|
end
|
|
else
|
|
for k5,v5 in pairs(v4) do
|
|
if ( v5[1] == pagename ) then
|
|
AtlasLoot_HewdropClick(v5[2],v5[1],v5[3])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
CloseDropDownMenus()
|
|
AtlasLootCharDB.LastBoss = this.lootpage;
|
|
AtlasLootCharDB.LastBossText = pagename;
|
|
AtlasLoot_ShowBossLoot(this.lootpage, pagename);
|
|
AtlasLootDefaultFrame_SelectedCategory:SetText(pagename);
|
|
AtlasLootDefaultFrame_SelectedCategory:Show();
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_NavButton_OnClick:
|
|
Called when <-, -> or 'Back' are pressed and calls up the appropriate loot page
|
|
]]
|
|
function AtlasLoot_NavButton_OnClick()
|
|
if ( AtlasLootItemsFrame.refresh and AtlasLootItemsFrame.refresh[1] and AtlasLootItemsFrame.refresh[2]) then
|
|
if ( AtlasLootItemsFrame.refresh[1] == "DUNGEONSMENU1" ) then
|
|
AtlasLootItemsFrame.refresh[1] = "DUNGEONSMENU2"
|
|
AtlasLoot_DungeonsMenu2()
|
|
AtlasLootDefaultFrame_SubMenu:Disable();
|
|
return
|
|
elseif ( AtlasLootItemsFrame.refresh[1] == "DUNGEONSMENU2" ) then
|
|
AtlasLootItemsFrame.refresh[1] = "DUNGEONSMENU1"
|
|
AtlasLoot_DungeonsMenu1()
|
|
AtlasLootDefaultFrame_SubMenu:Disable();
|
|
return
|
|
end
|
|
if ( string.sub(this.lootpage, 1, 16) == "SearchResultPage" ) then
|
|
AtlasLoot_ShowItemsFrame("SearchResult", this.lootpage, string.format((AL["Search Result: %s"]), AtlasLootCharDB.LastSearchedText or ""));
|
|
elseif ( string.sub(this.lootpage, 1, 12) == "WishListPage" ) then
|
|
AtlasLoot_ShowItemsFrame("WishList", this.lootpage, AL["WishList"]);
|
|
else
|
|
AtlasLootCharDB.LastBoss = this.lootpage;
|
|
AtlasLootCharDB.LastBossText = this.title;
|
|
AtlasLoot_ShowItemsFrame(this.lootpage, AtlasLootItemsFrame.refresh[2], this.title);
|
|
if ( AtlasLootDefaultFrame_SelectedTable:GetText() ) then
|
|
AtlasLootDefaultFrame_SelectedTable:SetText(AtlasLoot_BossName:GetText())
|
|
else
|
|
AtlasLootDefaultFrame_SelectedCategory:SetText(AtlasLoot_BossName:GetText())
|
|
end
|
|
end
|
|
elseif ( AtlasLootItemsFrame.refresh and AtlasLootItemsFrame.refresh[2] ) then
|
|
AtlasLoot_ShowItemsFrame(this.lootpage, AtlasLootItemsFrame.refresh[2], this.title);
|
|
else
|
|
-- Fallback for if the requested loot page is a menu and does not have a .refresh instance
|
|
AtlasLoot_ShowItemsFrame(this.lootpage, "dummy", this.title);
|
|
end
|
|
for k in pairs(AtlasLoot_MenuList) do
|
|
if ( this.lootpage == k ) then
|
|
AtlasLootDefaultFrame_SubMenu:Disable();
|
|
AtlasLootDefaultFrame_SelectedCategory:SetText(AtlasLootCharDB.LastBossText)
|
|
AtlasLootDefaultFrame_SelectedTable:SetText("")
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_IsLootTableAvailable(dataID):
|
|
Checks if a loot table is in memory and attempts to load the correct LoD module if it isn't
|
|
dataID: Loot table dataID
|
|
]]
|
|
function AtlasLoot_IsLootTableAvailable(dataID)
|
|
if ( not dataID ) then return false end
|
|
|
|
local menu_check = false;
|
|
|
|
for k in pairs(AtlasLoot_MenuList) do
|
|
if ( k == dataID ) then
|
|
menu_check = true;
|
|
end
|
|
end
|
|
|
|
if ( menu_check ) then
|
|
return true;
|
|
else
|
|
if ( not AtlasLoot_TableNames[dataID] ) then
|
|
DEFAULT_CHAT_FRAME:AddMessage(RED..AL["AtlasLoot Error!"].." "..WHITE..dataID..AL[" not listed in loot table registry, please report this message to the AtlasLoot forums at http://www.atlasloot.net"]);
|
|
return false;
|
|
end
|
|
|
|
local dataSource = AtlasLoot_TableNames[dataID][2];
|
|
|
|
if ( AtlasLoot_Data[dataSource] ) then
|
|
if ( AtlasLoot_Data[dataSource][dataID] ) then
|
|
return true;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_ShowQuickLooks(button)
|
|
button: Identity of the button pressed to trigger the function
|
|
Shows the GUI for setting Quicklooks
|
|
]]
|
|
function AtlasLoot_ShowQuickLooks(button)
|
|
local Hewdrop = AceLibrary("Hewdrop-2.0");
|
|
if ( Hewdrop:IsOpen(button) ) then
|
|
Hewdrop:Close(1);
|
|
else
|
|
local setOptions = function()
|
|
Hewdrop:AddLine(
|
|
"text", AL["QuickLook"].." 1",
|
|
"tooltipTitle", AL["QuickLook"].." 1",
|
|
"tooltipText", AL["Assign this loot table\n to QuickLook"].." 1",
|
|
"func", function()
|
|
AtlasLootCharDB["QuickLooks"][1] = {AtlasLootItemsFrame.refresh[1], AtlasLootItemsFrame.refresh[2], AtlasLootItemsFrame.refresh[3]};
|
|
AtlasLoot_RefreshQuickLookButtons();
|
|
Hewdrop:Close(1);
|
|
end
|
|
);
|
|
Hewdrop:AddLine(
|
|
"text", AL["QuickLook"].." 2",
|
|
"tooltipTitle", AL["QuickLook"].." 2",
|
|
"tooltipText", AL["Assign this loot table\n to QuickLook"].." 2",
|
|
"func", function()
|
|
AtlasLootCharDB["QuickLooks"][2] = {AtlasLootItemsFrame.refresh[1], AtlasLootItemsFrame.refresh[2], AtlasLootItemsFrame.refresh[3]};
|
|
AtlasLoot_RefreshQuickLookButtons();
|
|
Hewdrop:Close(1);
|
|
end
|
|
);
|
|
Hewdrop:AddLine(
|
|
"text", AL["QuickLook"].." 3",
|
|
"tooltipTitle", AL["QuickLook"].." 3",
|
|
"tooltipText", AL["Assign this loot table\n to QuickLook"].." 3",
|
|
"func", function()
|
|
AtlasLootCharDB["QuickLooks"][3] = {AtlasLootItemsFrame.refresh[1], AtlasLootItemsFrame.refresh[2], AtlasLootItemsFrame.refresh[3]};
|
|
AtlasLoot_RefreshQuickLookButtons();
|
|
Hewdrop:Close(1);
|
|
end
|
|
);
|
|
Hewdrop:AddLine(
|
|
"text", AL["QuickLook"].." 4",
|
|
"tooltipTitle", AL["QuickLook"].." 4",
|
|
"tooltipText", AL["Assign this loot table\n to QuickLook"].." 4",
|
|
"func", function()
|
|
AtlasLootCharDB["QuickLooks"][4] = {AtlasLootItemsFrame.refresh[1], AtlasLootItemsFrame.refresh[2], AtlasLootItemsFrame.refresh[3]};
|
|
AtlasLoot_RefreshQuickLookButtons();
|
|
Hewdrop:Close(1);
|
|
end
|
|
);
|
|
end;
|
|
Hewdrop:Open(button,
|
|
'point', function(parent)
|
|
return "BOTTOMLEFT", "BOTTOMRIGHT";
|
|
end,
|
|
"children", setOptions
|
|
);
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_RefreshQuickLookButtons()
|
|
Enables/disables the quicklook buttons depending on what is assigned
|
|
]]
|
|
function AtlasLoot_RefreshQuickLookButtons()
|
|
for i = 1, 4 do
|
|
if ( not AtlasLootCharDB["QuickLooks"][i] or not AtlasLootCharDB["QuickLooks"][i][1] ) then
|
|
_G["AtlasLootPanel_Preset"..i]:Disable();
|
|
_G["AtlasLootDefaultFrame_Preset"..i]:Disable();
|
|
else
|
|
_G["AtlasLootPanel_Preset"..i]:Enable();
|
|
_G["AtlasLootDefaultFrame_Preset"..i]:Enable();
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_ClearQuickLookButton()
|
|
Clears a quicklook button.
|
|
]]
|
|
function AtlasLoot_ClearQuickLookButton(button)
|
|
if ( not button ) then return end
|
|
AtlasLootCharDB["QuickLooks"][button] = nil
|
|
AtlasLoot_RefreshQuickLookButtons()
|
|
DEFAULT_CHAT_FRAME:AddMessage(BLUE..AL["AtlasLoot"]..": "..WHITE..AL["QuickLook"].." "..button.." "..AL["has been reset!"]);
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_ShowBossLoot(dataID, boss, pFrame):
|
|
dataID - Name of the loot table
|
|
boss - Text string to be used as the title for the loot page
|
|
pFrame - Data structure describing how and where to anchor the item frame (more details, see the function AtlasLoot_SetItemInfoFrame)
|
|
This is the intended API for external mods to use for displaying loot pages.
|
|
This function figures out where the loot table is stored, then sends the relevant info to AtlasLoot_ShowItemsFrame
|
|
]]
|
|
function AtlasLoot_ShowBossLoot(dataID, boss)
|
|
local tableavailable = AtlasLoot_IsLootTableAvailable(dataID);
|
|
if ( tableavailable ) then
|
|
AtlasLootItemsFrame:Hide();
|
|
-- If the loot table is already being displayed, it is hidden and the current table selection cancelled
|
|
if ( dataID == AtlasLootItemsFrame.externalBoss and AtlasLootItemsFrame:GetParent() ~= AtlasFrame and AtlasLootItemsFrame:GetParent() ~= AtlasLootDefaultFrame ) then
|
|
AtlasLootItemsFrame.externalBoss = nil;
|
|
else
|
|
-- Use the original WoW instance data by default
|
|
local dataSource = AtlasLoot_TableNames[dataID][2];
|
|
-- Set selected table and call AtlasLoot_ShowItemsFrame
|
|
AtlasLootItemsFrame.externalBoss = dataID;
|
|
AtlasLoot_ShowItemsFrame(dataID, dataSource, boss);
|
|
end
|
|
end
|
|
end
|
|
|
|
function AtlasLootOptions_SetupSlider(text, mymin, mymax, step)
|
|
_G[this:GetName().."Text"]:SetText(text.." ("..this:GetValue()..")");
|
|
this:SetMinMaxValues(mymin, mymax);
|
|
_G[this:GetName().."Low"]:SetText(mymin);
|
|
_G[this:GetName().."High"]:SetText(mymax);
|
|
this:SetValueStep(step);
|
|
end
|
|
|
|
--[[
|
|
AtlasLootMinimapButton_OnClick:
|
|
Function to show/hide AtlasLoot when click on minimap button.
|
|
]]
|
|
function AtlasLootMinimapButton_OnClick(arg1)
|
|
if ( arg1 == "LeftButton" ) then
|
|
AtlasLoot_Toggle();
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLootMinimapButton_Init:
|
|
Show/hide minimap button.
|
|
]]
|
|
function AtlasLootMinimapButton_Init()
|
|
if ( AtlasLootCharDB.MinimapButton == true ) then
|
|
AtlasLootMinimapButtonFrame:Show();
|
|
else
|
|
AtlasLootMinimapButtonFrame:Hide();
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLootMinimapButton_OnEnter:
|
|
Show tooltip when mouse is over minimap button.
|
|
]]
|
|
function AtlasLootMinimapButton_OnEnter()
|
|
GameTooltip:SetOwner(this, "ANCHOR_LEFT");
|
|
GameTooltip:SetText(AL["AtlasLoot Enhanced"]);
|
|
GameTooltipTextLeft1:SetTextColor(1, 1, 1);
|
|
GameTooltip:AddLine(AL["Left-click to open AtlasLoot.\nMiddle-click for AtlasLoot options.\nRight-click and drag to move this button."]);
|
|
GameTooltip:Show();
|
|
end
|
|
|
|
--[[
|
|
AtlasLootButton_UpdatePosition:
|
|
Function to move the minimap button around the minimap.
|
|
]]
|
|
function AtlasLootMinimapButton_UpdatePosition()
|
|
AtlasLootMinimapButtonFrame:SetPoint(
|
|
"TOPLEFT",
|
|
"Minimap",
|
|
"TOPLEFT",
|
|
54 - (AtlasLootCharDB.MinimapButtonRadius * cos(AtlasLootCharDB.MinimapButtonPosition)),
|
|
(AtlasLootCharDB.MinimapButtonRadius * sin(AtlasLootCharDB.MinimapButtonPosition)) - 55
|
|
);
|
|
AtlasLootOptions_Init()
|
|
end
|
|
|
|
local function around(num, idp)
|
|
local mult = 10 ^ (idp or 0);
|
|
return math.floor(num * mult + 0.5) / mult;
|
|
end
|
|
|
|
function AtlasLootOptions_UpdateSlider(text)
|
|
_G[this:GetName().."Text"]:SetText(text.." ("..around(this:GetValue(),2)..")");
|
|
end
|
|
|
|
function AtlasLootOptions_ResetPosition()
|
|
AtlasLootCharDB.MinimapButtonPosition = 315;
|
|
AtlasLootCharDB.MinimapButtonRadius = 78;
|
|
AtlasLootMinimapButton_UpdatePosition();
|
|
DEFAULT_CHAT_FRAME:AddMessage(BLUE..AL["AtlasLoot"]..": "..RED..AL["Minimap button has been reset!"]);
|
|
end
|
|
|
|
function AtlasLootOptions_DefaultSettings()
|
|
-- AtlasLootCharDB.SafeLinks = false;
|
|
-- AtlasLootCharDB.AllLinks = true;
|
|
AtlasLootCharDB.DefaultTT = true;
|
|
AtlasLootCharDB.LootlinkTT = false;
|
|
AtlasLootCharDB.ItemSyncTT = false;
|
|
AtlasLootCharDB.ShowSource = true;
|
|
AtlasLootCharDB.EquipCompare = false;
|
|
AtlasLootCharDB.Opaque = false;
|
|
AtlasLootCharDB.ItemIDs = false;
|
|
-- AtlasLootCharDB.ItemSpam = true;
|
|
AtlasLootCharDB.MinimapButton = true;
|
|
AtlasLootCharDB.HidePanel = false;
|
|
-- AtlasLootCharDB.AutoQuery = false;
|
|
AtlasLootCharDB.PartialMatching = true;
|
|
AtlasLootCharDB.LastBoss = "DUNGEONSMENU1";
|
|
AtlasLootCharDB.LastBossText = AL["Dungeons & Raids"];
|
|
AtlasLootDefaultFrame:ClearAllPoints();
|
|
AtlasLootDefaultFrame:SetPoint("TOP", "UIParent", "TOP", 0, -30);
|
|
AtlasLootOptionsFrame:ClearAllPoints();
|
|
AtlasLootOptionsFrame:SetPoint("CENTER", "UIParent", "CENTER", 0, 100);
|
|
AtlasLootCharDB["QuickLooks"] = {};
|
|
AtlasLootCharDB["WishList"] = {};
|
|
AtlasLoot_RefreshQuickLookButtons();
|
|
AtlasLootOptions_Init();
|
|
DEFAULT_CHAT_FRAME:AddMessage(BLUE..AL["AtlasLoot"]..": "..RED..AL["Default settings applied!"]);
|
|
end
|
|
|
|
--[[
|
|
AtlasLootButton_BeingDragged:
|
|
Function to move the minimap button around the minimap.
|
|
]]
|
|
function AtlasLootMinimapButton_BeingDragged()
|
|
local xpos,ypos = GetCursorPosition()
|
|
local xmin,ymin = Minimap:GetLeft(), Minimap:GetBottom()
|
|
xpos = xmin-xpos/UIParent:GetScale()+70
|
|
ypos = ypos/UIParent:GetScale()-ymin-70
|
|
AtlasLootMinimapButton_SetPosition(math.deg(math.atan2(ypos,xpos)));
|
|
end
|
|
|
|
--[[
|
|
AtlasLootButton_SetPosition:
|
|
Function to save the position of the minimap button.
|
|
]]
|
|
function AtlasLootMinimapButton_SetPosition(v)
|
|
if ( v < 0 ) then
|
|
v = v + 360;
|
|
end
|
|
AtlasLootCharDB.MinimapButtonPosition = v;
|
|
AtlasLootMinimapButton_UpdatePosition();
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Item OnEnter
|
|
-- Called when a loot item is moused over
|
|
--------------------------------------------------------------------------------
|
|
local stringArgs = {}
|
|
local messageShown = false
|
|
function AtlasLootItem_OnEnter()
|
|
local isItem, isEnchant, isSpell;
|
|
local buttonID = this:GetID()
|
|
AtlasLootTooltip:ClearLines();
|
|
for i = 1, 30, 1 do
|
|
if ( _G["AtlasLootTooltipTextRight"..i] ) then
|
|
_G["AtlasLootTooltipTextRight"..i]:SetText("");
|
|
end
|
|
end
|
|
if ( not ( this.itemID and this.itemID ~= 0 ) ) then
|
|
return
|
|
end
|
|
if ( string.sub(this.itemID, 1, 1) == "s" ) then
|
|
isItem = false;
|
|
isEnchant = false;
|
|
isSpell = true;
|
|
elseif ( string.sub(this.itemID, 1, 1) == "e" ) then
|
|
isItem = false;
|
|
isEnchant = true;
|
|
isSpell = false;
|
|
else
|
|
isItem = true;
|
|
isEnchant = false;
|
|
isSpell = false;
|
|
end
|
|
if ( isItem ) then
|
|
local name, link, quality = GetItemInfo(this.itemID)
|
|
local _, _, _, color = GetItemQualityColor(quality or 1)
|
|
-- local color = strsub(_G["AtlasLootItem_"..buttonID.."_Name"]:GetText(), 3, 10);
|
|
-- local name = strsub(_G["AtlasLootItem_"..buttonID.."_Name"]:GetText(), 11);
|
|
-- Lootlink tooltips
|
|
if ( AtlasLootCharDB.LootlinkTT ) then
|
|
-- If we have seen the item, use the game tooltip to minimise same name item problems
|
|
if ( name ) then
|
|
AtlasLootTooltip:SetOwner(this, "ANCHOR_RIGHT", -(this:GetWidth() / 2), 24);
|
|
AtlasLootTooltip:SetHyperlink("item:"..this.itemID..":0:0:0");
|
|
if ( AtlasLootCharDB.ItemIDs ) then
|
|
AtlasLootTooltip:AddLine(AL["ItemID:"].." "..this.itemID);
|
|
end
|
|
if ( this.droprate ) then
|
|
AtlasLootTooltip:AddLine(AL["Drop Rate: "]..this.droprate, 1, 1, 0);
|
|
end
|
|
AtlasLootTooltip:Show();
|
|
if ( LootLink_AddItem ) then
|
|
LootLink_AddItem(name, this.itemID..":0:0:0", color);
|
|
end
|
|
else
|
|
AtlasLootTooltip:SetOwner(this, "ANCHOR_RIGHT", -(this:GetWidth() / 2), 24);
|
|
if ( LootLink_Database and LootLink_Database[this.itemID] ) then
|
|
LootLink_SetTooltip(AtlasLootTooltip, LootLink_Database[this.itemID][1], 1);
|
|
else
|
|
LootLink_SetTooltip(AtlasLootTooltip, name, 1);
|
|
end
|
|
if ( AtlasLootCharDB.ItemIDs ) then
|
|
AtlasLootTooltip:AddLine(AL["ItemID:"].." "..this.itemID);
|
|
end
|
|
if ( this.droprate ) then
|
|
AtlasLootTooltip:AddLine(AL["Drop Rate: "]..this.droprate, 1, 1, 0, 1);
|
|
end
|
|
AtlasLootTooltip:Show();
|
|
end
|
|
-- Item Sync tooltips
|
|
elseif ( AtlasLootCharDB.ItemSyncTT ) then
|
|
ItemSync:ButtonEnter();
|
|
if ( AtlasLootCharDB.ItemIDs ) then
|
|
GameTooltip:AddLine(AL["ItemID:"].." "..this.itemID);
|
|
end
|
|
if ( this.droprate ) then
|
|
GameTooltip:AddLine(AL["Drop Rate: "]..this.droprate, 1, 1, 0);
|
|
end
|
|
GameTooltip:Show();
|
|
-- Default game tooltips
|
|
else
|
|
AtlasLootTooltip:SetOwner(this, "ANCHOR_RIGHT", -(this:GetWidth() / 2), 24);
|
|
if ( GetItemInfo(this.itemID) ) then
|
|
AtlasLootTooltip:SetHyperlink("item:"..this.itemID..":0:0:0");
|
|
else
|
|
AtlasLootTooltip:SetText(AL["Retrieving item information"], RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b)
|
|
end
|
|
if ( AtlasLootCharDB.ItemIDs ) then
|
|
AtlasLootTooltip:AddLine(AL["ItemID:"].." "..this.itemID);
|
|
end
|
|
if ( this.droprate ) then
|
|
AtlasLootTooltip:AddLine(AL["Drop Rate: "]..this.droprate, 1, 1, 0);
|
|
end
|
|
AtlasLootTooltip:Show();
|
|
end
|
|
elseif ( isEnchant ) then
|
|
local spellID = tonumber(string.sub(this.itemID, 2));
|
|
AtlasLootTooltip:SetOwner(this, "ANCHOR_NONE");
|
|
AtlasLootTooltip:SetPoint("BOTTOMLEFT", this, "TOPRIGHT", -(this:GetWidth() / 2), 24)
|
|
AtlasLootTooltip:ClearLines();
|
|
if ( SetAutoloot == nil or (SUPERWOW_VERSION and (tonumber(SUPERWOW_VERSION)) >= 1.2) ) then
|
|
AtlasLootTooltip:SetHyperlink("enchant:"..spellID)
|
|
else
|
|
AtlasLootTooltip:SetHyperlink("spell:"..spellID);
|
|
if ( not messageShown ) then
|
|
DEFAULT_CHAT_FRAME:AddMessage(BLUE..AL["AtlasLoot"]..": "..WHITE.."Old version of SuperWoW detected, please download the latest version from https://github.com/balakethelock/SuperWoW/releases/tag/Release")
|
|
messageShown = true
|
|
end
|
|
end
|
|
local _, _, longCooldown = strfind(AtlasLootTooltipTextRight2:GetText() or "", gsub(SPELL_RECAST_TIME_MIN, "%%%.3g", "(.+)"))
|
|
if ( longCooldown and strfind(longCooldown, "e%+") ) then
|
|
longCooldown = tonumber(longCooldown) / 60 / 24
|
|
if ( longCooldown > 1 ) then
|
|
longCooldown = format(AL.DAYS_COOLDOWN, longCooldown)
|
|
else
|
|
longCooldown = format(AL.DAYS_COOLDOWN_1, longCooldown)
|
|
end
|
|
AtlasLootTooltipTextRight2:SetText(longCooldown)
|
|
end
|
|
if ( AtlasLootCharDB.ItemIDs ) then
|
|
AtlasLootTooltip:AddLine(AL["SpellID:"].." "..spellID);
|
|
end
|
|
AtlasLootTooltip:Show();
|
|
local item = tonumber(GetSpellInfoAtlasLootDB["enchants"][spellID]["item"])
|
|
local extra = GetSpellInfoAtlasLootDB["enchants"][spellID]["extra"]
|
|
if ( not ( item and item ~= 0 ) ) then
|
|
return
|
|
end
|
|
AtlasLootTooltip2:SetOwner(this, "ANCHOR_NONE");
|
|
AtlasLootTooltip2:SetPoint("TOPLEFT", AtlasLootTooltip, "BOTTOMLEFT", 0, 0)
|
|
AtlasLootTooltip2:ClearLines();
|
|
if ( not GetItemInfo(item) ) then
|
|
AtlasLootTooltip2:SetText(AL["Retrieving item information"], RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b)
|
|
else
|
|
AtlasLootTooltip2:SetHyperlink("item:"..item);
|
|
if ( extra ) then
|
|
AtlasLootTooltip2:AddLine(extra, 1, 1, 1, 1);
|
|
end
|
|
end
|
|
if ( AtlasLootCharDB.ItemIDs ) then
|
|
AtlasLootTooltip2:AddLine(AL["ItemID:"].." "..item);
|
|
end
|
|
AtlasLootTooltip2:Show();
|
|
-- Reposition if tooltips overlap
|
|
local bottom = AtlasLootTooltip:GetBottom()
|
|
local top = AtlasLootTooltip2:GetTop()
|
|
if ( top and bottom and bottom < top ) then
|
|
AtlasLootTooltip2:ClearAllPoints()
|
|
AtlasLootTooltip2:SetPoint("TOPLEFT", this, "TOPRIGHT", -(this:GetWidth() / 2), 24)
|
|
AtlasLootTooltip:ClearAllPoints()
|
|
AtlasLootTooltip:SetPoint("BOTTOMLEFT", AtlasLootTooltip2, "TOPLEFT", 0, 0)
|
|
end
|
|
elseif ( isSpell ) then
|
|
local spellID = tonumber(string.sub(this.itemID, 2));
|
|
AtlasLootTooltip:SetOwner(this, "ANCHOR_NONE");
|
|
AtlasLootTooltip:SetPoint("BOTTOMLEFT", this, "TOPRIGHT", -(this:GetWidth() / 2), 24)
|
|
AtlasLootTooltip:ClearLines();
|
|
if ( SpellInfo ) then
|
|
AtlasLootTooltip:SetHyperlink("enchant:"..spellID)
|
|
local _, _, longCooldown = strfind(AtlasLootTooltipTextRight2:GetText() or "", gsub(SPELL_RECAST_TIME_MIN, "%%%.3g", "(.+)"))
|
|
if ( longCooldown and strfind(longCooldown, "e%+") ) then
|
|
longCooldown = tonumber(longCooldown) / 60 / 24
|
|
if ( longCooldown > 1 ) then
|
|
longCooldown = format(AL.DAYS_COOLDOWN, longCooldown)
|
|
else
|
|
longCooldown = format(AL.DAYS_COOLDOWN_1, longCooldown)
|
|
end
|
|
AtlasLootTooltipTextRight2:SetText(longCooldown)
|
|
end
|
|
else
|
|
local name = GetSpellInfoAtlasLootDB["craftspells"][spellID]["name"]
|
|
local castTime = GetSpellInfoAtlasLootDB["craftspells"][spellID]["castTime"]
|
|
local cooldown = GetSpellInfoAtlasLootDB["craftspells"][spellID]["cooldown"]
|
|
local tools = GetSpellInfoAtlasLootDB["craftspells"][spellID]["tools"]
|
|
local reagents = GetSpellInfoAtlasLootDB["craftspells"][spellID]["reagents"]
|
|
local text = GetSpellInfoAtlasLootDB["craftspells"][spellID]["text"]
|
|
AtlasLootTooltip:SetText(name, 1, 1, 1, 1, false)
|
|
if ( castTime < 60 ) then
|
|
castTime = format(SPELL_CAST_TIME_SEC, castTime)
|
|
else
|
|
castTime = format(SPELL_CAST_TIME_MIN, castTime / 60)
|
|
end
|
|
if ( cooldown ) then
|
|
if ( cooldown < 86400 ) then
|
|
if ( cooldown < 60 ) then
|
|
cooldown = format(SPELL_RECAST_TIME_SEC, cooldown)
|
|
else
|
|
cooldown = format(SPELL_RECAST_TIME_MIN, cooldown / 60)
|
|
end
|
|
elseif ( cooldown / 60 / 60 / 24 == 1 ) then
|
|
cooldown = format(AL.DAYS_COOLDOWN_1, cooldown / 60 / 60 / 24)
|
|
else
|
|
cooldown = format(AL.DAYS_COOLDOWN, cooldown / 60 / 60 / 24)
|
|
end
|
|
AtlasLootTooltip:AddDoubleLine(castTime, cooldown, 1, 1, 1, 1, 1, 1)
|
|
else
|
|
AtlasLootTooltip:AddLine(castTime, 1, 1, 1)
|
|
end
|
|
if ( type(tools) == "table" ) then
|
|
for i = getn(stringArgs), 1, -1 do
|
|
tremove(stringArgs, i)
|
|
end
|
|
for j = 1, getn(tools) do
|
|
if ( AtlasLoot_CacheItem(tools[j]) == false ) then
|
|
AtlasLootItemsFrame.refreshTime = refreshTimeout
|
|
AtlasLootItemsFrame.queue[tools[j]] = true
|
|
end
|
|
tinsert(stringArgs, (GetItemInfo(tools[j]) or ""))
|
|
tinsert(stringArgs, AtlasLoot_CheckBagsForItems(tools[j]))
|
|
end
|
|
AtlasLootTooltip:AddLine(SPELL_TOTEMS..BuildColoredListString(unpack(stringArgs)), 1, 1, 1, false)
|
|
end
|
|
if ( type(reagents) == "table" ) then
|
|
for i = getn(stringArgs), 1, -1 do
|
|
tremove(stringArgs, i)
|
|
end
|
|
for j = 1, getn(reagents) do
|
|
if ( reagents[j][2] and reagents[j][2] > 1 ) then
|
|
if ( AtlasLoot_CacheItem(reagents[j][1]) == false ) then
|
|
AtlasLootItemsFrame.refreshTime = refreshTimeout
|
|
AtlasLootItemsFrame.queue[reagents[j][1]] = true
|
|
end
|
|
tinsert(stringArgs, ((GetItemInfo(reagents[j][1])) or "").." ("..reagents[j][2]..")")
|
|
else
|
|
tinsert(stringArgs, ((GetItemInfo(reagents[j][1])) or ""))
|
|
end
|
|
tinsert(stringArgs, AtlasLoot_CheckBagsForItems(reagents[j][1], reagents[j][2]))
|
|
end
|
|
AtlasLootTooltip:AddLine(SPELL_REAGENTS..BuildColoredListString(unpack(stringArgs)), 1, 1, 1, true)
|
|
end
|
|
if ( text ) then
|
|
AtlasLootTooltip:AddLine(text, 1, 0.82, 0, true)
|
|
end
|
|
end
|
|
if ( AtlasLootCharDB.ItemIDs ) then
|
|
AtlasLootTooltip:AddLine(AL["SpellID:"].." "..spellID);
|
|
end
|
|
AtlasLootTooltip:Show();
|
|
local craftItem = tonumber(GetSpellInfoAtlasLootDB["craftspells"][spellID]["craftItem"])
|
|
local extra = GetSpellInfoAtlasLootDB["craftspells"][spellID]["extra"]
|
|
if ( not ( craftItem and craftItem ~= 0 ) ) then
|
|
return
|
|
end
|
|
AtlasLootTooltip2:SetOwner(this, "ANCHOR_NONE");
|
|
AtlasLootTooltip2:SetPoint("TOPLEFT", AtlasLootTooltip, "BOTTOMLEFT", 0, 0)
|
|
AtlasLootTooltip2:ClearLines();
|
|
if ( not GetItemInfo(craftItem) ) then
|
|
AtlasLootTooltip2:SetText(AL["Retrieving item information"], RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b)
|
|
else
|
|
AtlasLootTooltip2:SetHyperlink("item:"..craftItem);
|
|
if ( extra ) then
|
|
AtlasLootTooltip2:AddLine(extra, 1, 1, 1, 1);
|
|
end
|
|
end
|
|
if ( AtlasLootCharDB.ItemIDs ) then
|
|
AtlasLootTooltip2:AddLine(AL["ItemID:"].." "..craftItem);
|
|
end
|
|
AtlasLootTooltip2:Show();
|
|
-- Reposition if tooltips overlap
|
|
local bottom = AtlasLootTooltip:GetBottom()
|
|
local top = AtlasLootTooltip2:GetTop()
|
|
if ( bottom and top and bottom < top ) then
|
|
AtlasLootTooltip2:ClearAllPoints()
|
|
AtlasLootTooltip2:SetPoint("TOPLEFT", this, "TOPRIGHT", -(this:GetWidth() / 2), 24)
|
|
AtlasLootTooltip:ClearAllPoints()
|
|
AtlasLootTooltip:SetPoint("BOTTOMLEFT", AtlasLootTooltip2, "TOPLEFT", 0, 0)
|
|
end
|
|
end
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Item OnLeave
|
|
-- Called when the mouse cursor leaves a loot item
|
|
--------------------------------------------------------------------------------
|
|
function AtlasLootItem_OnLeave()
|
|
AtlasLootTooltip:Hide();
|
|
AtlasLootTooltip2:Hide();
|
|
GameTooltip:Hide();
|
|
ShoppingTooltip1:Hide();
|
|
ShoppingTooltip2:Hide();
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Item OnClick
|
|
-- Called when a loot item is clicked on
|
|
--------------------------------------------------------------------------------
|
|
function AtlasLootItem_OnClick()
|
|
local isItem, isEnchant, isSpell;
|
|
local name = _G["AtlasLootItem_"..this:GetID().."_Name"]:GetText();
|
|
local _, _, color = strfind(name, "(|cff%x%x%x%x%x%x)");
|
|
color = color or NORMAL_FONT_COLOR_CODE
|
|
name = gsub(name, "|cff%x%x%x%x%x%x", "")
|
|
name = gsub(name, "|r", "")
|
|
local id = this:GetID();
|
|
local _, _, texture = strfind(_G["AtlasLootItem_"..this:GetID().."_Icon"]:GetTexture() or "", ".+\\(.+)$")
|
|
texture = texture or "INV_Misc_QuestionMark"
|
|
local dataID = AtlasLootItemsFrame.refresh[1]
|
|
local dataSource = AtlasLootItemsFrame.refresh[2]
|
|
local bossName = AtlasLootItemsFrame.refresh[3]
|
|
if ( string.sub(this.itemID, 1, 1) == "s" ) then
|
|
isItem = false;
|
|
isEnchant = false;
|
|
isSpell = true;
|
|
elseif ( string.sub(this.itemID, 1, 1) == "e" ) then
|
|
isItem = false;
|
|
isEnchant = true;
|
|
isSpell = false;
|
|
else
|
|
isItem = true;
|
|
isEnchant = false;
|
|
isSpell = false;
|
|
end
|
|
if ( isItem ) then
|
|
local itemName, itemLink = GetItemInfo(this.itemID);
|
|
-- If shift-clicked, link in the chat window
|
|
if ( itemName and IsShiftKeyDown() and this.itemID ~= 0 ) then
|
|
if ( WIM_EditBoxInFocus ) then
|
|
WIM_EditBoxInFocus:Insert(color.."|Hitem:"..this.itemID..":0:0:0|h["..itemName.."]|h|r");
|
|
elseif ( ChatFrameEditBox:IsVisible() ) then
|
|
ChatFrameEditBox:Insert(color.."|Hitem:"..this.itemID..":0:0:0|h["..itemName.."]|h|r");
|
|
else
|
|
AtlasLoot_SayItemReagents(this.itemID, color, itemName);
|
|
end
|
|
-- If control-clicked, use the dressing room
|
|
elseif ( IsControlKeyDown() and itemLink ) then
|
|
DressUpItemLink(itemLink);
|
|
elseif ( IsAltKeyDown() and this.itemID ~= 0 ) then
|
|
if ( dataID == "WishList" ) then
|
|
AtlasLoot_DeleteFromWishList(this.itemID);
|
|
elseif ( dataID == "SearchResult" ) then
|
|
AtlasLoot_AddToWishlist(AtlasLoot:GetOriginalDataFromSearchResult(this.itemID));
|
|
else
|
|
AtlasLoot_AddToWishlist(this.itemID, texture, this.itemIDName, this.itemIDExtra, dataID.."|"..dataSource);
|
|
end
|
|
elseif ( (dataID == "SearchResult" or dataID == "WishList") and this.sourcePage ) then
|
|
local _, _, dataID, dataSource = strfind(this.sourcePage, "(.+)|(.+)");
|
|
if ( dataID and dataSource and AtlasLoot_IsLootTableAvailable(dataID) ) then
|
|
AtlasLoot_ShowItemsFrame(dataID, dataSource, AtlasLoot_TableNames[dataID][1]);
|
|
end
|
|
elseif ( this.container ) then
|
|
AtlasLoot_ShowContainerFrame()
|
|
end
|
|
elseif ( isEnchant ) then
|
|
if ( IsShiftKeyDown() ) then
|
|
AtlasLoot_SayItemReagents(this.itemID, color, name)
|
|
elseif ( IsAltKeyDown() and this.itemID ~= 0 ) then
|
|
if ( dataID == "WishList" ) then
|
|
AtlasLoot_DeleteFromWishList(this.itemID);
|
|
elseif ( dataID == "SearchResult" ) then
|
|
AtlasLoot_AddToWishlist(AtlasLoot:GetOriginalDataFromSearchResult(this.itemID));
|
|
else
|
|
AtlasLoot_AddToWishlist(this.itemID, texture, this.itemIDName, this.itemIDExtra, dataID.."|"..dataSource);
|
|
end
|
|
elseif ( IsControlKeyDown() and this.dressingroomID ) then
|
|
DressUpItemLink("item:"..this.dressingroomID..":0:0:0");
|
|
elseif ( (dataID == "SearchResult" or dataID == "WishList") and this.sourcePage ) then
|
|
local _, _, dataID, dataSource = strfind(this.sourcePage, "(.+)|(.+)");
|
|
if ( dataID and dataSource and AtlasLoot_IsLootTableAvailable(dataID) ) then
|
|
AtlasLoot_ShowItemsFrame(dataID, dataSource, bossName);
|
|
end
|
|
end
|
|
elseif ( isSpell ) then
|
|
if ( IsShiftKeyDown() ) then
|
|
local spellID = tonumber(string.sub(this.itemID, 2))
|
|
local craftitem = tonumber(GetSpellInfoAtlasLootDB["craftspells"][spellID]["craftItem"])
|
|
local craftname = GetItemInfo(craftitem or 0)
|
|
if ( WIM_EditBoxInFocus ) then
|
|
if ( craftitem and craftitem ~= 0 and craftname ) then
|
|
WIM_EditBoxInFocus:Insert(color.."|Hitem:"..craftitem..":0:0:0|h["..craftname.."]|h|r");
|
|
else
|
|
WIM_EditBoxInFocus:Insert(color.."|Henchant:"..spellID.."|h["..name.."]|h|r");
|
|
end
|
|
elseif ( ChatFrameEditBox:IsVisible() ) then
|
|
if ( craftitem and craftitem ~= 0 and craftname ) then
|
|
ChatFrameEditBox:Insert(color.."|Hitem:"..craftitem..":0:0:0|h["..craftname.."]|h|r");
|
|
else
|
|
ChatFrameEditBox:Insert(color.."|Henchant:"..spellID.."|h["..name.."]|h|r");
|
|
end
|
|
else
|
|
AtlasLoot_SayItemReagents(this.itemID, color, name)
|
|
end
|
|
elseif ( IsAltKeyDown() and this.itemID ~= 0 ) then
|
|
if ( dataID == "WishList" ) then
|
|
AtlasLoot_DeleteFromWishList(this.itemID);
|
|
elseif ( dataID == "SearchResult" ) then
|
|
AtlasLoot_AddToWishlist(AtlasLoot:GetOriginalDataFromSearchResult(this.itemID));
|
|
else
|
|
AtlasLoot_AddToWishlist(this.itemID, texture, this.itemIDName, this.itemIDExtra, dataID.."|"..dataSource);
|
|
end
|
|
elseif ( IsControlKeyDown() and this.dressingroomID ) then
|
|
DressUpItemLink("item:"..this.dressingroomID..":0:0:0");
|
|
elseif ( (dataID == "SearchResult" or dataID == "WishList") and this.sourcePage ) then
|
|
local _, _, dataID, dataSource = strfind(this.sourcePage, "(.+)|(.+)");
|
|
if ( dataID and dataSource and AtlasLoot_IsLootTableAvailable(dataID) ) then
|
|
AtlasLoot_ShowItemsFrame(dataID, dataSource, bossName);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- retun true if item is cached, false if argument is a valid link or id, but its not cahced yet, nil otherwise
|
|
function AtlasLoot_CacheItem(linkOrID)
|
|
if ( not linkOrID or linkOrID == 0 ) then
|
|
return nil
|
|
end
|
|
if ( tonumber(linkOrID )) then
|
|
if GetItemInfo(linkOrID) then
|
|
return true
|
|
else
|
|
AtlasLootCacheTooltip:SetHyperlink("item:"..linkOrID)
|
|
return false
|
|
end
|
|
else
|
|
if ( type(linkOrID) ~= "string" ) then
|
|
return nil
|
|
end
|
|
local _, _, item = strfind(linkOrID, "(item:%d+:%d+:%d+:%d+)")
|
|
if ( item ) then
|
|
if ( GetItemInfo(item) ) then
|
|
return true
|
|
else
|
|
AtlasLootCacheTooltip:SetHyperlink(item)
|
|
return false
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local containerItemFrames = {}
|
|
local lastSelectedButton
|
|
function AtlasLoot_ShowContainerFrame()
|
|
local containerTable = this.container
|
|
if ( not containerTable ) then
|
|
return
|
|
end
|
|
if ( this ~= lastSelectedButton ) then
|
|
AtlasLootItemsFrameContainer:Show()
|
|
lastSelectedButton = this
|
|
elseif ( AtlasLootItemsFrameContainer:IsVisible() ) then
|
|
AtlasLootItemsFrameContainer:Hide()
|
|
lastSelectedButton = nil
|
|
return
|
|
end
|
|
if ( not AtlasLootItemsFrameContainer:IsVisible() and lastSelectedButton == this ) then
|
|
AtlasLootItemsFrameContainer:Show()
|
|
end
|
|
for i = 1, getn(containerItemFrames) do
|
|
_G["AtlasLootContainerItem"..i]:Hide()
|
|
end
|
|
local row = 0
|
|
local col = 0
|
|
local buttonIndex = 1
|
|
local maxCols = 1
|
|
|
|
for i = 1, getn(containerTable) do
|
|
col = 0
|
|
for j = 1, getn(containerTable[i]) do
|
|
if ( not containerItemFrames[buttonIndex] ) then
|
|
containerItemFrames[buttonIndex] = CreateFrame("Button", "AtlasLootContainerItem"..buttonIndex, AtlasLootItemsFrameContainer, "AtlasLootContainerItemTemplate")
|
|
end
|
|
local itemButton = _G["AtlasLootContainerItem"..buttonIndex]
|
|
local itemID = containerTable[i][j][1]
|
|
AtlasLoot_CacheItem(itemID)
|
|
itemButton.extraInfo = containerTable[i][j][2]
|
|
itemButton.dressingroomID = itemID
|
|
local _, _, quality, _, _, _, _, _, tex = GetItemInfo(itemID)
|
|
local icon = _G["AtlasLootContainerItem"..buttonIndex.."Icon"]
|
|
local r, g, b = 1, 1, 1
|
|
if ( quality ) then
|
|
r, g, b = GetItemQualityColor(quality)
|
|
end
|
|
if ( not tex ) then
|
|
tex = "Interface\\Icons\\INV_Misc_QuestionMark"
|
|
end
|
|
itemButton:SetPoint("TOPLEFT", AtlasLootItemsFrameContainer, (col * 35) + 5, -(row * 35) - 5)
|
|
itemButton:SetBackdropBorderColor(r, g, b)
|
|
itemButton:SetID(itemID)
|
|
itemButton:Show()
|
|
icon:SetTexture(tex)
|
|
col = col + 1
|
|
if ( col > maxCols ) then
|
|
maxCols = col
|
|
end
|
|
buttonIndex = buttonIndex + 1
|
|
end
|
|
row = row + 1
|
|
end
|
|
AtlasLootItemsFrameContainer:SetPoint("TOPLEFT", this , "BOTTOMLEFT", -2, 2)
|
|
AtlasLootItemsFrameContainer:SetWidth(16 + (maxCols * 35))
|
|
AtlasLootItemsFrameContainer:SetHeight(16 + (row * 35))
|
|
end
|
|
|
|
function AtlasLoot_ContainerItem_OnEnter()
|
|
local itemID = this:GetID()
|
|
if ( not itemID ) then
|
|
return
|
|
end
|
|
AtlasLootTooltip:SetOwner(this, "ANCHOR_RIGHT", -(this:GetWidth() / 4), -(this:GetHeight() / 4))
|
|
AtlasLootTooltip:SetHyperlink("item:"..tostring(itemID))
|
|
AtlasLootTooltip.itemID = itemID
|
|
local numLines = AtlasLootTooltip:NumLines()
|
|
if ( AtlasLootCharDB.ItemIDs ) then
|
|
if ( numLines and numLines > 0 ) then
|
|
local lastLine = _G["AtlasLootTooltipTextLeft"..numLines]
|
|
if ( lastLine:GetText() ) then
|
|
lastLine:SetText(lastLine:GetText().."\n\n"..DEFAULT..AL["ItemID:"].." "..itemID)
|
|
end
|
|
end
|
|
end
|
|
AtlasLootTooltip:Show()
|
|
local icon = _G[this:GetName().."Icon"]
|
|
if ( icon:GetTexture() == "Interface\\Icons\\INV_Misc_QuestionMark" ) then
|
|
local _, _, quality, _, _, _, _, _, tex = GetItemInfo(itemID)
|
|
if ( tex and quality ) then
|
|
local r, g, b = GetItemQualityColor(quality)
|
|
icon:SetTexture(tex)
|
|
this:SetBackdropBorderColor(r, g, b)
|
|
end
|
|
end
|
|
end
|
|
|
|
function AtlasLoot_ContainerItem_OnLeave()
|
|
AtlasLootTooltip:Hide()
|
|
AtlasLootTooltip.itemID = nil
|
|
end
|
|
|
|
function AtlasLoot_ContainerItem_OnClick(arg1)
|
|
local itemID = this:GetID()
|
|
local name, link, quality, _, _, _, _, _, tex = GetItemInfo(itemID or 0)
|
|
if ( not name ) then
|
|
return
|
|
end
|
|
local _, _, _, color = GetItemQualityColor(quality)
|
|
tex = string.gsub(tex, "Interface\\Icons\\", "")
|
|
local extra = this.extraInfo
|
|
local lootpage, dataSource
|
|
if ( lastSelectedButton ) then
|
|
lootpage = lastSelectedButton.lootpage
|
|
dataSource = lastSelectedButton.dataSource
|
|
end
|
|
if ( IsShiftKeyDown() and arg1 == "LeftButton" ) then
|
|
if ( WIM_EditBoxInFocus ) then
|
|
WIM_EditBoxInFocus:Insert(color.."|Hitem:"..itemID..":0:0:0|h["..name.."]|h|r");
|
|
elseif ( ChatFrameEditBox:IsVisible() ) then
|
|
ChatFrameEditBox:Insert(color.."|Hitem:"..itemID..":0:0:0|h["..name.."]|h|r");
|
|
end
|
|
elseif ( IsControlKeyDown() and link ) then
|
|
DressUpItemLink(link);
|
|
elseif ( IsAltKeyDown() and itemID ~= 0 ) then
|
|
if ( lootpage and dataSource ) then
|
|
AtlasLoot_AddToWishlist(itemID, tex, name, extra, lootpage.."|"..dataSource)
|
|
elseif ( AtlasLootItemsFrame.refresh ) then
|
|
local dataID = AtlasLootItemsFrame.refresh[1]
|
|
local dataSource = AtlasLootItemsFrame.refresh[2]
|
|
if ( dataID == "WishList" ) then
|
|
AtlasLoot_DeleteFromWishList(this.itemID);
|
|
elseif ( dataID == "SearchResult" ) then
|
|
AtlasLoot_AddToWishlist(AtlasLoot:GetOriginalDataFromSearchResult(itemID));
|
|
else
|
|
AtlasLoot_AddToWishlist(itemID, tex, name, extra, dataID.."|"..dataSource);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
AtlasLoot_QueryLootPage()
|
|
Querys all valid items on the current loot page.
|
|
]]
|
|
function AtlasLoot_QueryLootPage()
|
|
for i = 1, 30 do
|
|
local button = _G["AtlasLootItem_"..i];
|
|
local queryitem = button.itemID;
|
|
if ( (queryitem) and (queryitem ~= "") and (queryitem ~= 0) and
|
|
(string.sub(queryitem, 1, 1) ~= "s") and (string.sub(queryitem, 1, 1) ~= "e") ) then
|
|
if ( not GetItemInfo(queryitem) ) then
|
|
AtlasLootCacheTooltip:SetHyperlink("item:"..queryitem..":0:0:0");
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local function idFromLink(itemlink)
|
|
if ( itemlink ) then
|
|
local _,_,id = string.find(itemlink, "|Hitem:([^:]+)%:")
|
|
return tonumber(id)
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function AtlasLoot_CheckBagsForItems(id, qty)
|
|
if ( not id ) then DEFAULT_CHAT_FRAME:AddMessage("AtlasLoot_CheckBagsForItems: no ID specified!") return end
|
|
if ( not qty ) then qty = 1 end
|
|
local itemsfound = 0;
|
|
local itemName = GetItemInfo(id);
|
|
if ( not itemName ) then return nil end
|
|
for i = 0, NUM_BAG_FRAMES do
|
|
for j = 1, GetContainerNumSlots(i) do
|
|
local itemLink = GetContainerItemLink(i, j)
|
|
if ( itemLink and idFromLink(itemLink) == tonumber(id) ) then
|
|
local _, stackCount = GetContainerItemInfo(i, j)
|
|
itemsfound = itemsfound + stackCount
|
|
end
|
|
end
|
|
end
|
|
if ( itemsfound < qty ) then
|
|
return nil
|
|
else
|
|
return 1
|
|
end
|
|
end
|
|
|
|
function AtlasLoot_SayItemReagents(id, color, name, safe)
|
|
if ( not id ) then return end
|
|
local chatline = "";
|
|
local itemCount = 0;
|
|
name = gsub(name, "|cff%x%x%x%x%x%x", "")
|
|
name = gsub(name, "|r", "")
|
|
color = color or NORMAL_FONT_COLOR_CODE
|
|
local tListActivity = {}
|
|
local tCount = 0
|
|
|
|
if ( WIM_IconItems and WIM_Icon_SortByActivity ) then
|
|
for key in pairs(WIM_IconItems) do
|
|
table.insert(tListActivity, key)
|
|
tCount = tCount + 1
|
|
end
|
|
|
|
table.sort(tListActivity, WIM_Icon_SortByActivity)
|
|
end
|
|
local channel, chatnumber
|
|
if ( tListActivity[1] and WIM_Windows and WIM_Windows[tListActivity[1]].is_visible ) then
|
|
channel = "WHISPER";
|
|
chatnumber = tListActivity[1];
|
|
else
|
|
channel = ChatFrameEditBox.chatType;
|
|
if ( channel == "WHISPER" ) then
|
|
chatnumber = ChatFrameEditBox.tellTarget
|
|
elseif ( channel == "CHANNEL" ) then
|
|
chatnumber = ChatFrameEditBox.channelTarget
|
|
end
|
|
end
|
|
if ( string.sub(id, 1, 1) == "s" ) then
|
|
local spellID = tonumber(string.sub(id, 2))
|
|
local craftItem = tonumber(GetSpellInfoAtlasLootDB["craftspells"][spellID]["craftItem"])
|
|
if ( craftItem and craftItem ~= 0 ) then
|
|
local craftnumber = "";
|
|
local qtyMin = GetSpellInfoAtlasLootDB["craftspells"][spellID]["craftQuantityMin"];
|
|
local qtyMax = GetSpellInfoAtlasLootDB["craftspells"][spellID]["craftQuantityMax"];
|
|
if ( qtyMin ) then
|
|
if ( qtyMax ) then
|
|
craftnumber = craftnumber..qtyMin.. "-"..qtyMax.."x"
|
|
else
|
|
craftnumber = craftnumber..qtyMin.."x"
|
|
end
|
|
end
|
|
SendChatMessage(AL["To craft "]..craftnumber..AtlasLoot_GetChatLink(craftItem)..AL[" the following reagents are needed:"], channel, nil, chatnumber);
|
|
local reagents = GetSpellInfoAtlasLootDB["craftspells"][spellID]["reagents"]
|
|
if ( type(reagents) == "table" ) then
|
|
for j = 1, table.getn(reagents) do
|
|
local tempnumber = reagents[j][2]
|
|
if ( not tempnumber or tempnumber == nil or tempnumber == "" ) then
|
|
tempnumber = 1;
|
|
end
|
|
chatline = chatline..tempnumber.."x"..AtlasLoot_GetChatLink(reagents[j][1]).." ";
|
|
itemCount = itemCount + 1;
|
|
if ( itemCount == 4 ) then
|
|
SendChatMessage(chatline, channel, nil, chatnumber);
|
|
chatline = "";
|
|
itemCount = 0;
|
|
end
|
|
end
|
|
end
|
|
if ( itemCount > 0 ) then
|
|
SendChatMessage(chatline, channel, nil, chatnumber);
|
|
end
|
|
else
|
|
local reagents = GetSpellInfoAtlasLootDB["craftspells"][spellID]["reagents"]
|
|
SendChatMessage(AL["To cast "]..NORMAL_FONT_COLOR_CODE.."|Henchant:"..spellID.."|h["..name.."]|h|r"..AL[" the following items are needed:"], channel, nil, chatnumber);
|
|
if ( type(reagents) == "table" ) then
|
|
for j = 1, table.getn(reagents) do
|
|
local tempnumber = reagents[j][2]
|
|
if ( not tempnumber or tempnumber == nil or tempnumber == "" ) then
|
|
tempnumber = 1;
|
|
end
|
|
chatline = chatline..tempnumber.."x"..AtlasLoot_GetChatLink(reagents[j][1]).." ";
|
|
itemCount = itemCount + 1;
|
|
if ( itemCount == 4 ) then
|
|
SendChatMessage(chatline, channel, nil, chatnumber);
|
|
chatline = "";
|
|
itemCount = 0;
|
|
end
|
|
end
|
|
end
|
|
if ( itemCount > 0 ) then
|
|
SendChatMessage(chatline, channel, nil, chatnumber);
|
|
end
|
|
end
|
|
elseif ( string.sub(id, 1, 1) == "e" ) then
|
|
local spellID = tonumber(string.sub(id, 2))
|
|
local item = tonumber(GetSpellInfoAtlasLootDB["enchants"][spellID]["item"])
|
|
if ( tListActivity[1] and WIM_Windows[tListActivity[1]].is_visible ) then
|
|
if ( not item ) then
|
|
SendChatMessage(NORMAL_FONT_COLOR_CODE.."|Henchant:"..spellID.."|h["..name.."]|h|r", channel, nil, chatnumber);
|
|
else
|
|
SendChatMessage(AL["To craft "]..AtlasLoot_GetChatLink(item)..AL[" you need this: "]..NORMAL_FONT_COLOR_CODE.."|Henchant:"..spellID.."|h["..name.."]|h|r", channel, nil, chatnumber);
|
|
end
|
|
elseif ( ChatFrameEditBox:IsVisible() ) then
|
|
if ( not item ) then
|
|
ChatFrameEditBox:Insert(NORMAL_FONT_COLOR_CODE.."|Henchant:"..spellID.."|h["..name.."]|h|r", channel, nil, chatnumber);
|
|
else
|
|
ChatFrameEditBox:Insert(AL["To craft "]..AtlasLoot_GetChatLink(item)..AL[" you need this: "]..NORMAL_FONT_COLOR_CODE.."|Henchant:"..spellID.."|h["..name.."]|h|r", channel, nil, chatnumber);
|
|
end
|
|
else
|
|
if ( not item ) then
|
|
SendChatMessage(color.."|Henchant:"..spellID.."|h["..name.."]|h|r", channel, nil, chatnumber);
|
|
else
|
|
SendChatMessage(AL["To craft "]..AtlasLoot_GetChatLink(item)..AL[" you need this: "]..NORMAL_FONT_COLOR_CODE.."|Henchant:"..spellID.."|h["..name.."]|h|r", channel, nil, chatnumber);
|
|
end
|
|
end
|
|
else
|
|
if ( safe ) then
|
|
SendChatMessage("["..name.."]", channel, nil, chatnumber);
|
|
else
|
|
SendChatMessage(color.."|Hitem:"..id..":0:0:0|h["..name.."]|h|r", channel, nil, chatnumber);
|
|
end
|
|
end
|
|
end
|
|
|
|
function AtlasLoot_GetChatLink(id)
|
|
local itemName, itemLink, quality = GetItemInfo(tonumber(id))
|
|
local _, _, _, color = GetItemQualityColor(quality)
|
|
return color.."|H"..itemLink.."|h["..itemName.."]|h|r"
|
|
end
|
|
|
|
function AtlasLoot_QuickLook_OnClick(id)
|
|
if ( IsAltKeyDown() ) then
|
|
AtlasLoot_ClearQuickLookButton(id)
|
|
return
|
|
end
|
|
if ( this:GetParent() == AtlasLootPanel ) then
|
|
if ( AtlasLootPanel:GetParent() == AtlasFrame ) then
|
|
AtlasLoot_AnchorPoint = Anchor_Atlas
|
|
elseif ( AtlasLootPanel:GetParent() == AlphaMapAlphaMapFrame ) then
|
|
AtlasLoot_AnchorPoint = Anchor_AlphaMap
|
|
end
|
|
else
|
|
AtlasLoot_AnchorPoint = Anchor_Default
|
|
end
|
|
AtlasLoot_ShowItemsFrame(AtlasLootCharDB["QuickLooks"][id][1], AtlasLootCharDB["QuickLooks"][id][2], AtlasLootCharDB["QuickLooks"][id][3]);
|
|
end
|
|
|
|
function AtlasLoot_QuickLook_OnShow(id)
|
|
this:SetText(AL["QuickLook"].." "..id)
|
|
this:SetFrameLevel(this:GetParent():GetFrameLevel() + 1)
|
|
if ( not AtlasLootCharDB["QuickLooks"][id] or not AtlasLootCharDB["QuickLooks"][id][1] ) then
|
|
this:Disable()
|
|
end
|
|
end
|
|
|
|
function AtlasLoot_QuickLook_OnEnter(id)
|
|
if ( this:IsEnabled() ) then
|
|
GameTooltip:ClearLines()
|
|
GameTooltip:SetOwner(this, "ANCHOR_RIGHT", -(this:GetWidth() / 2), 5)
|
|
GameTooltip:AddLine(WHITE..AtlasLootCharDB["QuickLooks"][id][3].."|r")
|
|
GameTooltip:AddLine(AL["ALT+Click to clear"])
|
|
GameTooltip:Show()
|
|
end
|
|
end
|