From 457c95e3d367fc7555919c26e51355a8e874b184 Mon Sep 17 00:00:00 2001 From: Road-block Date: Fri, 11 Aug 2017 03:10:26 +0300 Subject: [PATCH] Fixes for outlier GP prices across all items, emphasis on T1 and Dragons, fixes to GP scaling. Standings list (for members) and other lists (for admins) can now be dismissed with Esc. Add log window for admins. Better permission checking, confirmation dialog for some important actions. Fix Bid detection regex false positives eg.[Elixir of Mongoose]. Remove a bunch of menus and windows for members that they never use. --- bids.lua | 18 ++ logs.lua | 107 ++++++ prices.lua | 863 ++++++++++++++++++++++--------------------------- reserves.lua | 18 ++ shootyepgp.lua | 141 ++++++-- shootyepgp.toc | 10 +- standings.lua | 36 ++- 7 files changed, 673 insertions(+), 520 deletions(-) create mode 100644 logs.lua diff --git a/bids.lua b/bids.lua index af708c6..8bff708 100644 --- a/bids.lua +++ b/bids.lua @@ -40,12 +40,30 @@ function sepgp_bids:Refresh() T:Refresh("sepgp_bids") end +function sepgp_bids:setHideScript() + local detachedFrame, tablet + for i=1,4 do + tablet = getglobal(string.format("Tablet20DetachedFrame%d",1)) + if tablet and tablet.owner ~= nil and tablet.owner == "sepgp_bids" then + if not (tablet:GetScript("OnHide")) then + tablet:SetScript("OnHide",function() + if not T:IsAttached("sepgp_bids") then + T:Attach("sepgp_bids") + this:SetScript("OnHide",nil) + end + end) + end + end + end +end + function sepgp_bids:Toggle(forceShow) if T:IsAttached("sepgp_bids") then T:Detach("sepgp_bids") if (T:IsLocked("sepgp_bids")) then T:ToggleLocked("sepgp_bids") end + self:setHideScript() --[[if not (sepgp:IsEventScheduled("shootyepgpBidRefresh")) then sepgp:ScheduleRepeatingEvent("shootyepgpBidRefresh", self.Refresh, 5, self) end]] diff --git a/logs.lua b/logs.lua new file mode 100644 index 0000000..b7c6866 --- /dev/null +++ b/logs.lua @@ -0,0 +1,107 @@ +local T = AceLibrary("Tablet-2.0") +local D = AceLibrary("Dewdrop-2.0") +local C = AceLibrary("Crayon-2.0") +local CP = AceLibrary("Compost-2.0") + +sepgp_logs = sepgp:NewModule("sepgp_logs", "AceDB-2.0") +sepgp_logs.tmp = CP:Acquire() + +function sepgp_logs:OnEnable() + if not T:IsRegistered("sepgp_logs") then + T:Register("sepgp_logs", + "children", function() + T:SetTitle("shootyepgp logs") + self:OnTooltipUpdate() + end, + "showTitleWhenDetached", true, + "showHintWhenDetached", true, + "cantAttach", true, + "menu", function() + D:AddLine( + "text", "Refresh", + "tooltipText", "Refresh window", + "func", function() sepgp_logs:Refresh() end + ) + end + ) + end + if not T:IsAttached("sepgp_logs") then + T:Open("sepgp_logs") + end +end + +function sepgp_logs:OnDisable() + T:Close("sepgp_logs") +end + +function sepgp_logs:Refresh() + T:Refresh("sepgp_logs") +end + +function sepgp_logs:setHideScript() + local detachedFrame, tablet + for i=1,4 do + tablet = getglobal(string.format("Tablet20DetachedFrame%d",1)) + if tablet and tablet.owner ~= nil and tablet.owner == "sepgp_logs" then + if not (tablet:GetScript("OnHide")) then + tablet:SetScript("OnHide",function() + if not T:IsAttached("sepgp_logs") then + T:Attach("sepgp_logs") + this:SetScript("OnHide",nil) + end + end) + end + end + end +end + +function sepgp_logs:Toggle(forceShow) + if T:IsAttached("sepgp_logs") then + T:Detach("sepgp_logs") + if (T:IsLocked("sepgp_logs")) then + T:ToggleLocked("sepgp_logs") + end + self:setHideScript() + elseif (forceShow) then + else + T:Attach("sepgp_logs") + if GameTooltip:IsOwned(self.tipOwner) and GameTooltip:IsShown() then + GameTooltip:Hide() + end + end +end + +function sepgp_logs:reverse(arr) + CP:Recycle(sepgp_logs.tmp) + for _,val in ipairs(arr) do + table.insert(sepgp_logs.tmp,val) + end + local i, j = 1, table.getn(sepgp_logs.tmp) + while i < j do + sepgp_logs.tmp[i], sepgp_logs.tmp[j] = sepgp_logs.tmp[j], sepgp_logs.tmp[i] + i = i + 1 + j = j - 1 + end + return sepgp_logs.tmp +end + +function sepgp_logs:BuildLogsTable() + -- {timestamp,line} + return self:reverse(sepgp_log) +end + +function sepgp_logs:OnTooltipUpdate() + local cat = T:AddCategory( + "columns", 2, + "text", C:Orange("Time"), "child_textR", 1, "child_textG", 1, "child_textB", 1, "child_justify", "LEFT", + "text2", C:Orange("Action"), "child_text2R", 1, "child_text2G", 1, "child_text2B", 1, "child_justify2", "RIGHT" + ) + local t = sepgp_logs:BuildLogsTable() + for i = 1, table.getn(t) do + local timestamp, line = unpack(t[i]) + cat:AddLine( + "text", C:Silver(timestamp), + "text2", line + ) + end +end \ No newline at end of file diff --git a/prices.lua b/prices.lua index 6a687c4..157665b 100644 --- a/prices.lua +++ b/prices.lua @@ -11,7 +11,6 @@ local prices = { [23664] = {48,"T3"}; --Pauldrons of Elemental Fury [23237] = {60,"T3"}; --Ring of Eternal Flame [23238] = {40,"T3"}; --Stygian Buckler - [22939] = {72,"T3"}; --Band of Unanswered Prayers [22938] = {96,"T3"}; --Cryptfiend Silk Cloak [22937] = {48,"T3"}; --Gem of Nerubis @@ -20,13 +19,11 @@ local prices = { [22369] = {84,"T3"}; --T3 Wrist Token [22362] = {84,"T3"}; --T3 Wrist Token [22355] = {84,"T3"}; --T3 Wrist Token - [22940] = {4,"T3"}; --Icebane Pauldrons [22943] = {60,"T3"}; --Malice Stone Pendant [22941] = {4,"T3"}; --Polar Shoulderpads [22942] = {116,"T3"}; --The Widow's Embrace [22806] = {116,"T3"}; --Widow's Remorse - [23220] = {132,"T3"}; --Crystal Webbed Robe [22954] = {116,"T3"}; --Kiss of the Spider [22804] = {116,"T3"}; --Maexxna's Fang @@ -35,7 +32,6 @@ local prices = { [22371] = {96,"T3"}; --T3 Gloves Token [22364] = {96,"T3"}; --T3 Gloves Token [22357] = {96,"T3"}; --T3 Gloves Token - [22961] = {80,"T3"}; --Band of Reanimation [22960] = {96,"T3"}; --Cloak of Suturing [22815] = {88,"T3"}; --Severance @@ -44,19 +40,16 @@ local prices = { [22368] = {100,"T3"}; --T3 Shoulder Token [22361] = {100,"T3"}; --T3 Shoulder Token [22354] = {100,"T3"}; --T3 Shoulder Token - [22968] = {4,"T3"}; --Glacial Mantle [22967] = {4,"T3"}; --Icy Scale Spaulders [22803] = {80,"T3"}; --Midnight Haze [22988] = {152,"T3"}; --The End of Dreams [22810] = {44,"T3"}; --Toxin Injector - [22813] = {72,"T3"}; --Claymore of Unholy Might [23075] = {80,"T3"}; --Death's Bargain [22994] = {24,"T3"}; --Digested Hand of Power [22981] = {52,"T3"}; --Gluth's Missing Collar [22983] = {112,"T3"}; --Rime Covered Mantle - [23001] = {96,"T3"}; --Eye of Diminution [23070] = {136,"T3"}; --Leggings of Polarity [23000] = {136,"T3"}; --Plated Abomination Ribcage @@ -65,7 +58,6 @@ local prices = { [22367] = {120,"T3"}; --T3 Helm Token [22360] = {120,"T3"}; --T3 Helm Token [22353] = {120,"T3"}; --T3 Helm Token - [23031] = {76,"T3"}; --Band of the Inevitable [23030] = {68,"T3"}; --Cloak of the Scourge [23028] = {16,"T3"}; --Hailstone Band @@ -75,13 +67,11 @@ local prices = { [22370] = {92,"T3"}; --T3 Belt Token [22363] = {92,"T3"}; --T3 Belt Token [22356] = {92,"T3"}; --T3 Belt Token - [23019] = {4,"T3"}; --Icebane Helmet [23033] = {4,"T3"}; --Icy Scale Coif [23068] = {124,"T3"}; --Legplates of Carnage [23036] = {72,"T3"}; --Necklace of Necropsy [23035] = {112,"T3"}; --Preceptor's Hat - [23038] = {88,"T3"}; --Band of Unnatural Forces [22800] = {160,"T3"}; --Brimstone Staff [23042] = {12,"T3"}; --Loatheb's Reflection @@ -90,23 +80,20 @@ local prices = { [22366] = {136,"T3"}; --T3 Pants Token [22359] = {136,"T3"}; --T3 Pants Token [22352] = {136,"T3"}; --T3 Pants Token - [23017] = {48,"T3"}; --Veil of Eclipse [23219] = {124,"T3"}; --Girdle of the Mentor - [23014] = {120,"T3"}; --Iblis, Blade of the Fallen Seraph + [23014] = {120,"T3"}; --"Iblis, Blade of the Fallen Seraph" [23009] = {72,"T3"}; --Wand of the Whispering Dead [23018] = {84,"T3"}; --Signets of the Fallen Defender [23004] = {48,"T3"}; --Idol of Longevity [22372] = {92,"T3"}; --T3 Boots Token [22365] = {92,"T3"}; --T3 Boots Token [22358] = {92,"T3"}; --T3 Boots Token - [23073] = {32,"T3"}; --Boots of Displacement [23032] = {4,"T3"}; --Glacial Headdress [23020] = {4,"T3"}; --Polar Helmet [23021] = {96,"T3"}; --The Soul Harvester's Bindings [23023] = {48,"T3"}; --Sadist's Collar - [22691] = {200,"T3"}; --Corrupted Ashbringer [22811] = {172,"T3"}; --Soulstring [22809] = {60,"T3"}; --Maul of the Redeemed Crusader @@ -116,7 +103,6 @@ local prices = { [22351] = {148,"T3"}; --T3 Chest Token [22350] = {148,"T3"}; --T3 Chest Token [22349] = {148,"T3"}; --T3 Chest Token - [23050] = {160,"T3"}; --Cloak of the Necropolis [23045] = {160,"T3"}; --Shroud of Dominion [23043] = {150,"T3"}; --The Face of Death @@ -131,9 +117,8 @@ local prices = { [23545] = {80,"T3"}; --Power of the Scourge [23547] = {80,"T3"}; --Resilience of the Scourge [23549] = {120,"T3"}; --Fortitude of the Scourge - [22802] = {200,"T3"}; --Kingsfall - [23054] = {200,"T3"}; --Gressil, Dawn of Ruin + [23054] = {200,"T3"}; --"Gressil, Dawn of Ruin" [23577] = {200,"T3"}; --The Hungering Cold [23056] = {240,"T3"}; --Hammer of the Twisting Nether [22798] = {300,"T3"}; --Might of Menethil @@ -144,8 +129,7 @@ local prices = { [23057] = {140,"T3"}; --Gem of Trapped Innocents [23053] = {140,"T3"}; --Stormrage's Talisman of Seething [22520] = {0,"T3"}; --The Phylactery of Kel'Thuzad - [22733] = {400,"T3"}; --Staff Head of Atiesh - + [22733] = {0,"T3"}; --Staff Head of Atiesh [22490] = {120,"T3"}; --Dreamwalker Raiment [22491] = {100,"T3"}; --Dreamwalker Raiment [22488] = {148,"T3"}; --Dreamwalker Raiment @@ -155,7 +139,6 @@ local prices = { [22489] = {136,"T3"}; --Dreamwalker Raiment [22492] = {92,"T3"}; --Dreamwalker Raiment [23064] = {500,"T3"}; --Dreamwalker Raiment - [22438] = {120,"T3"}; --Cryptstalker Armor [22439] = {100,"T3"}; --Cryptstalker Armor [22436] = {148,"T3"}; --Cryptstalker Armor @@ -165,7 +148,6 @@ local prices = { [22437] = {136,"T3"}; --Cryptstalker Armor [22440] = {92,"T3"}; --Cryptstalker Armor [23067] = {500,"T3"}; --Cryptstalker Armor - [22498] = {120,"T3"}; --Frostfire Regalia [22499] = {100,"T3"}; --Frostfire Regalia [22496] = {148,"T3"}; --Frostfire Regalia @@ -175,7 +157,6 @@ local prices = { [22497] = {136,"T3"}; --Frostfire Regalia [22500] = {92,"T3"}; --Frostfire Regalia [23062] = {500,"T3"}; --Frostfire Regalia - [22514] = {120,"T3"}; --Vestments of Faith [22515] = {100,"T3"}; --Vestments of Faith [22512] = {148,"T3"}; --Vestments of Faith @@ -185,7 +166,6 @@ local prices = { [22513] = {136,"T3"}; --Vestments of Faith [22516] = {92,"T3"}; --Vestments of Faith [23061] = {500,"T3"}; --Vestments of Faith - [22478] = {120,"T3"}; --Bonescythe Armor [22479] = {100,"T3"}; --Bonescythe Armor [22476] = {148,"T3"}; --Bonescythe Armor @@ -195,7 +175,6 @@ local prices = { [22477] = {136,"T3"}; --Bonescythe Armor [22480] = {92,"T3"}; --Bonescythe Armor [23060] = {500,"T3"}; --Bonescythe Armor - [22466] = {120,"T3"}; --The Earthshatterer [22467] = {100,"T3"}; --The Earthshatterer [22464] = {148,"T3"}; --The Earthshatterer @@ -205,7 +184,6 @@ local prices = { [22465] = {136,"T3"}; --The Earthshatterer [22468] = {92,"T3"}; --The Earthshatterer [23065] = {500,"T3"}; --The Earthshatterer - [22506] = {120,"T3"}; --Plaguehart Raiment [22507] = {100,"T3"}; --Plaguehart Raiment [22504] = {148,"T3"}; --Plaguehart Raiment @@ -215,7 +193,6 @@ local prices = { [22505] = {136,"T3"}; --Plaguehart Raiment [22508] = {92,"T3"}; --Plaguehart Raiment [23063] = {500,"T3"}; --Plaguehart Raiment - [22418] = {120,"T3"}; --Dreadnaught's Battlegear [22419] = {100,"T3"}; --Dreadnaught's Battlegear [22416] = {148,"T3"}; --Dreadnaught's Battlegear @@ -229,602 +206,534 @@ local prices = { --------------------------- --- Temple of Ahn'Qiraj --- --------------------------- - - [21837] = {40,"T2.5"}; --Anubisath Warhammer + [21889] = {12,"T2.5"}; --Gloves of the Redeemed Prophet + [21683] = {12,"T2.5"}; --Mantle of the Desert Crusade + [21667] = {16,"T2.5"}; --Legplates of Blazing Light + [22402] = {0,"T2.5"}; --Libram of Grace + [21623] = {4,"T2.5"}; --Gauntlets of the Right. Champ + [21606] = {12,"T2.5"}; --Belt of the Fallen Emperor [21838] = {4,"T2.5"}; --Garb of Royal Ascension - [21888] = {8,"T2.5"}; --Gloves of the Immortal - [21889] = {0,"T2.5"}; --Gloves of the Redeemed Prophet - [21856] = {16,"T2.5"}; --Neretzek, The Blood Drinker - [21836] = {44,"T2.5"}; --Ritssyn's Ring of Chaos - [21891] = {64,"T2.5"}; --Shard of the Fallen Star - [21702] = {4,"T2.5"}; --Amulet of Foul Warding - [21699] = {36,"T2.5"}; --Barrage Shoulders [21708] = {4,"T2.5"}; --Beetle Scaled Wristguards + [21697] = {4,"T2.5"}; --Cape of the Trinity + [21696] = {4,"T2.5"}; --Robes of the Triumvirate + [21691] = {4,"T2.5"}; --Ooze-ridden Gauntlets + [21685] = {4,"T2.5"}; --Petrified Scarab + [21682] = {4,"T2.5"}; --Bile-Covered Gauntlets + [21684] = {4,"T2.5"}; --Mantle of the Desert's Fury + [21687] = {4,"T2.5"}; --Ukko's Ring of Darkness + [21678] = {4,"T2.5"}; --Necklace of Purity + [21648] = {4,"T2.5"}; --Recomposed Boots + [21627] = {4,"T2.5"}; --Cloak of Untold Secrets + [21652] = {4,"T2.5"}; --Silithid Carapace Chestguard + [22396] = {4,"T2.5"}; --Totem of Life + [21626] = {4,"T2.5"}; --Slime-coated Leggings + [21888] = {8,"T2.5"}; --Gloves of the Immortal [21705] = {12,"T2.5"}; --Boots of the Fallen Prophet - [21706] = {28,"T2.5"}; --Boots of the Unwavering Will - [21814] = {92,"T2.5"}; --Breastplate of Annihilation - [21701] = {88,"T2.5"}; --Cloak of the Concentrated Hatred + [21856] = {16,"T2.5"}; --"Neretzek, The Blood Drinker" + [21668] = {20,"T2.5"}; --Scaled Leggings of Qiraji Fury + [21607] = {20,"T2.5"}; --Grasp of the Fallen Emperor [21703] = {24,"T2.5"}; --Hammer of Ji'zhi - [21698] = {40,"T2.5"}; --Leggings of Immersion [21700] = {24,"T2.5"}; --Pendant of the Qiraji Guardian + [21618] = {24,"T2.5"}; --Hive Defiler Wristguards + [23558] = {24,"T2.5"}; --The Burrower's Shell + [21706] = {28,"T2.5"}; --Boots of the Unwavering Will + [21647] = {28,"T2.5"}; --Fetish of the Sand Reaver + [21692] = {32,"T2.5"}; --Triad Girdle + [21676] = {32,"T2.5"}; --Leggings of the Festering Swa.. + [21673] = {32,"T2.5"}; --Silithid Claw + [21699] = {36,"T2.5"}; --Barrage Shoulders + [21837] = {40,"T2.5"}; --Anubisath Warhammer + [21698] = {40,"T2.5"}; --Leggings of Immersion + [21686] = {40,"T2.5"}; --Mantle of Phrenic Power + [21621] = {40,"T2.5"}; --Cloak of the Golden Hive + [21836] = {44,"T2.5"}; --Ritssyn's Ring of Chaos + [21670] = {44,"T2.5"}; --Badge of the Swarmguard + [21619] = {44,"T2.5"}; --Gloves of the Messiah + [21579] = {44,"T2.5"}; --Vanquished Tentacle of C'thun [21707] = {48,"T2.5"}; --Ring of Swarming Thought + [21690] = {48,"T2.5"}; --Angelista's Charm + [21669] = {48,"T2.5"}; --Creeping Vine Helm + [21671] = {48,"T2.5"}; --Robes of the Battleguard + [21624] = {48,"T2.5"}; --Gauntlets of Kalimdor + [21625] = {48,"T2.5"}; --Scarab Brooch + [21679] = {48,"T2.5"}; --Kalimdor's Revenge + [21611] = {48,"T2.5"}; --Burrower Bracers [21128] = {52,"T2.5"}; --Staff of the Qiraji Prophets + [21651] = {52,"T2.5"}; --Scaled Sand Reaver Leggings + [21616] = {52,"T2.5"}; --Huhuran's Stinger + [21609] = {52,"T2.5"}; --Regenerating Belt of Vek'nilash + [21680] = {56,"T2.5"}; --Vest of Swift Execution + [21603] = {56,"T2.5"}; --Wand of the Qiraji Nobility + [21677] = {56,"T2.5"}; --Ring of the Qiraji Fury + [21693] = {60,"T2.5"}; --Guise of the Devourer + [21694] = {60,"T2.5"}; --Ternary Mantle + [21689] = {60,"T2.5"}; --Gloves of Ebru + [21675] = {60,"T2.5"}; --Thick Qirajihide Belt + [21645] = {60,"T2.5"}; --Hive Tunneler's Boots + [21605] = {60,"T2.5"}; --Gloves of the Hidden Temple + [21891] = {64,"T2.5"}; --Shard of the Fallen Star + [21681] = {64,"T2.5"}; --Ring of the Devoured + [21674] = {64,"T2.5"}; --Gauntlets of Steadfast Determ.. + [21672] = {64,"T2.5"}; --Gloves of Enforcement + [21617] = {64,"T2.5"}; --Wasphide Gauntlets + [21688] = {68,"T2.5"}; --Boots of the Fallen Hero + [22399] = {68,"T2.5"}; --Idol of Health + [20928] = {68,"T2.5"}; --Qiraji Bindings of Command + [20932] = {68,"T2.5"}; --Qiraji Bindings of Dominance + [21599] = {68,"T2.5"}; --Vek'lor's Gloves of Devastation + [21354] = {68,"T2.5"}; --Genesis Raiment + [21355] = {68,"T2.5"}; --Genesis Raiment + [21367] = {68,"T2.5"}; --Striker's Garb + [21365] = {68,"T2.5"}; --Striker's Garb + [21345] = {68,"T2.5"}; --Enigma Vestments + [21344] = {68,"T2.5"}; --Enigma Vestments + [21350] = {68,"T2.5"}; --Garments of the Oracle + [21349] = {68,"T2.5"}; --Garments of the Oracle + [21361] = {68,"T2.5"}; --Deathdealer's Embrace + [21359] = {68,"T2.5"}; --Deathdealer's Embrace + [21376] = {68,"T2.5"}; --Stormcaller's Garb + [21373] = {68,"T2.5"}; --Stormcaller's Garb + [21335] = {68,"T2.5"}; --Doomcaller's Attire + [21338] = {68,"T2.5"}; --Doomcaller's Attire + [21330] = {68,"T2.5"}; --Conqueror's Battlegear + [21333] = {68,"T2.5"}; --Conqueror's Battlegear + [21665] = {72,"T2.5"}; --Mantle of Wicked Revenge + [20926] = {72,"T2.5"}; --Vek'nilash's Circlet + [20930] = {72,"T2.5"}; --Vek'lor's Diadem + [21353] = {72,"T2.5"}; --Genesis Raiment + [21366] = {72,"T2.5"}; --Striker's Garb + [21347] = {72,"T2.5"}; --Enigma Vestments + [21348] = {72,"T2.5"}; --Garments of the Oracle + [21360] = {72,"T2.5"}; --Deathdealer's Embrace + [21372] = {72,"T2.5"}; --Stormcaller's Garb + [21337] = {72,"T2.5"}; --Doomcaller's Attire + [21329] = {72,"T2.5"}; --Conqueror's Battlegear + [21639] = {76,"T2.5"}; --Pauldrons of the Unrelenting + [20927] = {76,"T2.5"}; --Ouro's Intact Hide + [20931] = {76,"T2.5"}; --Skin of the Great Sandworm + [21356] = {76,"T2.5"}; --Genesis Raiment + [21368] = {76,"T2.5"}; --Striker's Garb + [21346] = {76,"T2.5"}; --Enigma Vestments + [21352] = {76,"T2.5"}; --Garments of the Oracle + [21362] = {76,"T2.5"}; --Deathdealer's Embrace + [21375] = {76,"T2.5"}; --Stormcaller's Garb + [21336] = {76,"T2.5"}; --Doomcaller's Attire + [21332] = {76,"T2.5"}; --Conqueror's Battlegear + [21695] = {80,"T2.5"}; --Angelista's Touch + [21664] = {80,"T2.5"}; --Barbed Choker + [21620] = {80,"T2.5"}; --Ring of the Martyr + [21608] = {80,"T2.5"}; --Amulet of Vek'nilash + [21604] = {80,"T2.5"}; --Bracelets of Royal Redemption + [21601] = {80,"T2.5"}; --Ring of Emperor Vek'lor + [23570] = {80,"T2.5"}; --Jom Gabbar + [21237] = {84,"T2.5"}; --Imperial Qiraji Regalia + [21273] = {84,"T2.5"}; --Imperial Qiraji Regalia + [21275] = {84,"T2.5"}; --Imperial Qiraji Regalia + [21268] = {84,"T2.5"}; --Imperial Qiraji Regalia + [21598] = {84,"T2.5"}; --Royal Qiraji Belt + [21701] = {88,"T2.5"}; --Cloak of the Concentrated Hatred + [21666] = {88,"T2.5"}; --Sartura's Might + [21600] = {88,"T2.5"}; --Boots of Epiphany + [21597] = {88,"T2.5"}; --Royal Scepter of Vek'lor + [21602] = {88,"T2.5"}; --Qiraji Execution Bracers + [21615] = {88,"T2.5"}; --Don Rigoberto's Lost Hat + [21610] = {88,"T2.5"}; --Wormscale Blocker + [21814] = {92,"T2.5"}; --Breastplate of Annihilation + [21221] = {96,"T2.5"}; --Eye of C'thun + [21712] = {96,"T2.5"}; --Eye of C'thun + [21710] = {96,"T2.5"}; --Eye of C'thun + [21709] = {96,"T2.5"}; --Eye of C'thun + [21622] = {100,"T2.5"}; --Sharpened Silithid Femur + [21635] = {104,"T2.5"}; --Barb of the Sand Reaver + [21596] = {104,"T2.5"}; --Ring of the Godslayer + [21650] = {112,"T2.5"}; --Ancient Qiraji Ripper [21232] = {116,"T2.5"}; --Imperial Qiraji Armaments [21242] = {116,"T2.5"}; --Imperial Qiraji Armaments [21272] = {116,"T2.5"}; --Imperial Qiraji Armaments [21244] = {116,"T2.5"}; --Imperial Qiraji Armaments [21269] = {116,"T2.5"}; --Imperial Qiraji Armaments - [21237] = {84,"T2.5"}; --Imperial Qiraji Regalia - [21273] = {84,"T2.5"}; --Imperial Qiraji Regalia - [21275] = {84,"T2.5"}; --Imperial Qiraji Regalia - [21268] = {84,"T2.5"}; --Imperial Qiraji Regalia - - [21695] = {80,"T2.5"}; --Angelista's Touch - [21697] = {4,"T2.5"}; --Cape of the Trinity - [21693] = {60,"T2.5"}; --Guise of the Devourer - [21696] = {4,"T2.5"}; --Robes of the Triumvirate - [21694] = {60,"T2.5"}; --Ternary Mantle - [21692] = {32,"T2.5"}; --Triad Girdle - - [21690] = {48,"T2.5"}; --Angelista's Charm - [21688] = {68,"T2.5"}; --Boots of the Fallen Hero - [21689] = {60,"T2.5"}; --Gloves of Ebru - [21691] = {4,"T2.5"}; --Ooze-ridden Gauntlets - - [21685] = {4,"T2.5"}; --Petrified Scarab - [21681] = {64,"T2.5"}; --Ring of the Devoured - [21680] = {56,"T2.5"}; --Vest of Swift Execution - [21603] = {56,"T2.5"}; --Wand of the Qiraji Nobility - - [21682] = {4,"T2.5"}; --Bile-Covered Gauntlets - [21686] = {40,"T2.5"}; --Mantle of Phrenic Power - [21683] = {0,"T2.5"}; --Mantle of the Desert Crusade - [21684] = {4,"T2.5"}; --Mantle of the Desert's Fury - [21687] = {4,"T2.5"}; --Ukko's Ring of Darkness - - [21670] = {44,"T2.5"}; --Badge of the Swarmguard - [21669] = {48,"T2.5"}; --Creeping Vine Helm - [21674] = {64,"T2.5"}; --Gauntlets of Steadfast Determ.. - [21672] = {64,"T2.5"}; --Gloves of Enforcement - [21667] = {0,"T2.5"}; --Legplates of Blazing Light - [21676] = {32,"T2.5"}; --Leggings of the Festering Swa.. - [21678] = {4,"T2.5"}; --Necklace of Purity - [21648] = {4,"T2.5"}; --Recomposed Boots - [21671] = {48,"T2.5"}; --Robes of the Battleguard - [21666] = {88,"T2.5"}; --Sartura's Might - [21668] = {20,"T2.5"}; --Scaled Leggings of Qiraji Fury - [21673] = {32,"T2.5"}; --Silithid Claw - [21675] = {60,"T2.5"}; --Thick Qirajihide Belt - - [21650] = {112,"T2.5"}; --Ancient Qiraji Ripper - [21664] = {80,"T2.5"}; --Barbed Choker - [21635] = {104,"T2.5"}; --Barb of the Sand Reaver - [21627] = {4,"T2.5"}; --Cloak of Untold Secrets - [21647] = {28,"T2.5"}; --Fetish of the Sand Reaver - [21645] = {60,"T2.5"}; --Hive Tunneler's Boots - [22402] = {0,"T2.5"}; --Libram of Grace - [21665] = {72,"T2.5"}; --Mantle of Wicked Revenge - [21639] = {76,"T2.5"}; --Pauldrons of the Unrelenting - [21663] = {136,"T2.5"}; --Robes of the Guardian Saint - [21651] = {52,"T2.5"}; --Scaled Sand Reaver Leggings - [21652] = {4,"T2.5"}; --Silithid Carapace Chestguard - [22396] = {4,"T2.5"}; --Totem of Life - - [21623] = {0,"T2.5"}; --Gauntlets of the Right. Champ - [21624] = {48,"T2.5"}; --Gauntlets of Kalimdor - [22399] = {68,"T2.5"}; --Idol of Health - [21677] = {56,"T2.5"}; --Ring of the Qiraji Fury - [21625] = {48,"T2.5"}; --Scarab Brooch - [21622] = {100,"T2.5"}; --Sharpened Silithid Femur - [21626] = {4,"T2.5"}; --Slime-coated Leggings - - [20928] = {68,"T2.5"}; --Qiraji Bindings of Command - [20932] = {68,"T2.5"}; --Qiraji Bindings of Dominance - - [21621] = {40,"T2.5"}; --Cloak of the Golden Hive - [21619] = {44,"T2.5"}; --Gloves of the Messiah - [21618] = {24,"T2.5"}; --Hive Defiler Wristguards - [21616] = {52,"T2.5"}; --Huhuran's Stinger - [21620] = {80,"T2.5"}; --Ring of the Martyr - [21617] = {64,"T2.5"}; --Wasphide Gauntlets - - [21608] = {80,"T2.5"}; --Amulet of Vek'nilash - [21606] = {0,"T2.5"}; --Belt of the Fallen Emperor - [21600] = {88,"T2.5"}; --Boots of Epiphany - [21604] = {80,"T2.5"}; --Bracelets of Royal Redemption - [21605] = {60,"T2.5"}; --Gloves of the Hidden Temple - [21607] = {20,"T2.5"}; --Grasp of the Fallen Emperor - [21679] = {48,"T2.5"}; --Kalimdor's Revenge - [21609] = {52,"T2.5"}; --Regenerating Belt of Vek'nilash - [21601] = {80,"T2.5"}; --Ring of Emperor Vek'lor - [21597] = {88,"T2.5"}; --Royal Scepter of Vek'lor - [21598] = {84,"T2.5"}; --Royal Qiraji Belt - [21599] = {68,"T2.5"}; --Vek'lor's Gloves of Devastation - [21602] = {88,"T2.5"}; --Qiraji Execution Bracers - - [20926] = {72,"T2.5"}; --Vek'nilash's Circlet - [20930] = {72,"T2.5"}; --Vek'lor's Diadem - - [21611] = {48,"T2.5"}; --Burrower Bracers - [21615] = {88,"T2.5"}; --Don Rigoberto's Lost Hat - [23570] = {80,"T2.5"}; --Jom Gabbar - [23557] = {128,"T2.5"}; --Larvae of the Great Worm - [23558] = {24,"T2.5"}; --The Burrower's Shell - [21610] = {88,"T2.5"}; --Wormscale Blocker - - [20927] = {76,"T2.5"}; --Ouro's Intact Hide - [20931] = {76,"T2.5"}; --Skin of the Great Sandworm - - [21586] = {124,"T2.5"}; --Belt of Never-ending Agony [21583] = {116,"T2.5"}; --Cloak of Clarity [22731] = {116,"T2.5"}; --Cloak of the Devoured - [21134] = {172,"T2.5"}; --Dark Edge of Insanity - [21585] = {132,"T2.5"}; --Dark Storm Gauntlets - [21126] = {152,"T2.5"}; --Death's Sting - [22730] = {124,"T2.5"}; --Eyestalk Waist Cord [21581] = {116,"T2.5"}; --Gauntlets of Annihilation - [21582] = {124,"T2.5"}; --Grasp of the Old God [22732] = {116,"T2.5"}; --Mark of C'thun - [21596] = {104,"T2.5"}; --Ring of the Godslayer - [21839] = {180,"T2.5"}; --Scepter of the False Prophet - [21579] = {44,"T2.5"}; --Vanquished Tentacle of C'thun - - [21221] = {96,"T2.5"}; --Eye of C'thun - [21712] = {96,"T2.5"}; --Eye of C'thun - [21710] = {96,"T2.5"}; --Eye of C'thun - [21709] = {96,"T2.5"}; --Eye of C'thun + [21586] = {124,"T2.5"}; --Belt of Never-ending Agony + [22730] = {124,"T2.5"}; --Eyestalk Waist Cord + [21582] = {124,"T2.5"}; --Grasp of the Old God + [23557] = {128,"T2.5"}; --Larvae of the Great Worm [20929] = {128,"T2.5"}; --Carapace of the Old God [20933] = {128,"T2.5"}; --Husk of the Old God - [21357] = {128,"T2.5"}; --Genesis Raiment - [21353] = {72,"T2.5"}; --Genesis Raiment - [21356] = {76,"T2.5"}; --Genesis Raiment - [21354] = {68,"T2.5"}; --Genesis Raiment - [21355] = {68,"T2.5"}; --Genesis Raiment - [21370] = {128,"T2.5"}; --Striker's Garb - [21366] = {72,"T2.5"}; --Striker's Garb - [21368] = {76,"T2.5"}; --Striker's Garb - [21367] = {68,"T2.5"}; --Striker's Garb - [21365] = {68,"T2.5"}; --Striker's Garb - [21343] = {128,"T2.5"}; --Enigma Vestments - [21347] = {72,"T2.5"}; --Enigma Vestments - [21346] = {76,"T2.5"}; --Enigma Vestments - [21345] = {68,"T2.5"}; --Enigma Vestments - [21344] = {68,"T2.5"}; --Enigma Vestments - [21351] = {128,"T2.5"}; --Garments of the Oracle - [21348] = {72,"T2.5"}; --Garments of the Oracle - [21352] = {76,"T2.5"}; --Garments of the Oracle - [21350] = {68,"T2.5"}; --Garments of the Oracle - [21349] = {68,"T2.5"}; --Garments of the Oracle - [21364] = {128,"T2.5"}; --Deathdealer's Embrace - [21360] = {72,"T2.5"}; --Deathdealer's Embrace - [21362] = {76,"T2.5"}; --Deathdealer's Embrace - [21361] = {68,"T2.5"}; --Deathdealer's Embrace - [21359] = {68,"T2.5"}; --Deathdealer's Embrace - [21374] = {128,"T2.5"}; --Stormcaller's Garb - [21372] = {72,"T2.5"}; --Stormcaller's Garb - [21375] = {76,"T2.5"}; --Stormcaller's Garb - [21376] = {68,"T2.5"}; --Stormcaller's Garb - [21373] = {68,"T2.5"}; --Stormcaller's Garb - [21334] = {128,"T2.5"}; --Doomcaller's Attire - [21337] = {72,"T2.5"}; --Doomcaller's Attire - [21336] = {76,"T2.5"}; --Doomcaller's Attire - [21335] = {68,"T2.5"}; --Doomcaller's Attire - [21338] = {68,"T2.5"}; --Doomcaller's Attire - [21331] = {128,"T2.5"}; --Conqueror's Battlegear - [21329] = {72,"T2.5"}; --Conqueror's Battlegear - [21332] = {76,"T2.5"}; --Conqueror's Battlegear - [21330] = {68,"T2.5"}; --Conqueror's Battlegear - [21333] = {68,"T2.5"}; --Conqueror's Battlegear + [21585] = {132,"T2.5"}; --Dark Storm Gauntlets + [21663] = {136,"T2.5"}; --Robes of the Guardian Saint + [21126] = {152,"T2.5"}; --Death's Sting + [21134] = {172,"T2.5"}; --Dark Edge of Insanity + [21839] = {180,"T2.5"}; --Scepter of the False Prophet ---------------------- --- Blackwing Lair --- ---------------------- - - [19434] = {40,"T2"}; --Band of Dark Dominion - [19437] = {48,"T2"}; --Boots of Pure Thought - [19436] = {16,"T2"}; --Cloak of Draconic Might - [19362] = {32,"T2"}; --Doom's Edge - [19354] = {16,"T2"}; --Draconic Avenger - [19358] = {12,"T2"}; --Draconic Maul - [19435] = {8,"T2"}; --Essence Gatherer + [19402] = {4,"T2"}; --Legguards of the Fallen Crusader + [19392] = {4,"T2"}; --Girdle of the Fallen Crusader [19439] = {4,"T2"}; --Interlaced Shadow Jerkin - [19438] = {48,"T2"}; --Ringo's Blizzard Boots - + [19435] = {8,"T2"}; --Essence Gatherer + [19358] = {12,"T2"}; --Draconic Maul + [19399] = {12,"T2"}; --Black Ash Robe + [19433] = {12,"T2"}; --Emberweave Leggings + [19436] = {16,"T2"}; --Cloak of Draconic Might + [19354] = {16,"T2"}; --Draconic Avenger [19336] = {16,"T2"}; --Arcane Infused Gem [19369] = {16,"T2"}; --Gloves of Rapid Evolution - [19370] = {72,"T2"}; --Mantle of the Blackwing Cabal - [19335] = {20,"T2"}; --Spineshatter [19337] = {16,"T2"}; --The Black Book - [19334] = {32,"T2"}; --The Untamed Blade - - [19346] = {48,"T2"}; --Dragonfang Blade - [19372] = {44,"T2"}; --Helm of Endless Rage - [19339] = {40,"T2"}; --Mind Quickening Gem - [19371] = {28,"T2"}; --Pendant of the Fallen Dragon - [19348] = {28,"T2"}; --Red Dragonscale Protector [19340] = {16,"T2"}; --Rune of Metamorphosis - - [19373] = {40,"T2"}; --Black Brood Pauldrons - [19374] = {72,"T2"}; --Bracers of Arcane Accuracy - [19350] = {40,"T2"}; --Heartstriker - [19341] = {68,"T2"}; --Lifegiving Gem - [19351] = {92,"T2"}; --Maladath, Runed Blade of the.. [19342] = {16,"T2"}; --Venomous Totem - [20383] = {40,"T2"}; --Head of Broodlord Lashlayer - - [19399] = {12,"T2"}; --Black Ash Robe - [19365] = {52,"T2"}; --Claw of the Black Drake - [19398] = {32,"T2"}; --Cloak of Firemaw - [19353] = {32,"T2"}; --Drake Talon Cleaver - [19394] = {52,"T2"}; --Drake Talon Pauldrons - [19400] = {44,"T2"}; --Firemaw's Clutch - [19402] = {0,"T2"}; --Legguards of the Fallen Crusader + [19393] = {16,"T2"}; --Primalist's Linked Waistguard + [19335] = {20,"T2"}; --Spineshatter [19344] = {20,"T2"}; --Natural Alignment Crystal [19401] = {20,"T2"}; --Primalist's Linked Legguards - [19395] = {116,"T2"}; --Rejuvenating Gem - [19397] = {52,"T2"}; --Ring of Blackrock - [19355] = {48,"T2"}; --Shadow Wing Focus Staff - [19396] = {36,"T2"}; --Taut Dragonhide Belt - [19345] = {20,"T2"}; --Aegis of Preservation - [19403] = {52,"T2"}; --Band of Forced Concentration - [19368] = {52,"T2"}; --Dragonbreath Hand Cannon - [19406] = {116,"T2"}; --Drake Fang Talisman - [19407] = {40,"T2"}; --Ebony Flame Gloves - [19405] = {60,"T2"}; --Malfurion's Blessed Bulwark - + [19376] = {20,"T2"}; --Archimtiros' Ring of Reckoning + [19378] = {20,"T2"}; --Cloak of the Brood Lord + [19390] = {24,"T2"}; --Taut Dragonhide Gloves + [19371] = {28,"T2"}; --Pendant of the Fallen Dragon + [19348] = {28,"T2"}; --Red Dragonscale Protector + [16904] = {28,"T2"}; --Stormrage Raiment + [16935] = {28,"T2"}; --Dragonstalker Armor + [16918] = {28,"T2"}; --Netherwind Regalia + [16926] = {28,"T2"}; --Vestments of Transcendence + [16911] = {28,"T2"}; --Bloodfang Armor + [16943] = {28,"T2"}; --The Ten Storms + [16934] = {28,"T2"}; --Nemesis Raiment + [16959] = {28,"T2"}; --Battlegear of Wrath + [19362] = {32,"T2"}; --Doom's Edge + [19334] = {32,"T2"}; --The Untamed Blade + [19398] = {32,"T2"}; --Cloak of Firemaw + [19353] = {32,"T2"}; --Drake Talon Cleaver [19432] = {32,"T2"}; --Circle of Applied Force [19367] = {32,"T2"}; --Dragon's Touch - [19433] = {12,"T2"}; --Emberweave Leggings [19357] = {32,"T2"}; --Herald of Woe - [19430] = {64,"T2"}; --Shroud of Pure Thought - [19431] = {116,"T2"}; --Styleen's Impeding Scarab - - [19388] = {36,"T2"}; --Angelista's Grasp - [19361] = {124,"T2"}; --Ashjre'thul, Crossbow of Smiting - [19352] = {76,"T2"}; --Chromatically Tempered Sword - [19387] = {84,"T2"}; --Chromatic Boots - [19347] = {72,"T2"}; --Claw of Chromaggus - [19349] = {76,"T2"}; --Elementium Reinforced Bulwark [19386] = {32,"T2"}; --Elementium Threaded Cloak - [19385] = {100,"T2"}; --Empowered Leggings - [19392] = {0,"T2"}; --Girdle of the Fallen Crusader - [19393] = {16,"T2"}; --Primalist's Linked Waistguard - [19391] = {40,"T2"}; --Shimmering Geta - [19390] = {24,"T2"}; --Taut Dragonhide Gloves - [19389] = {44,"T2"}; --Taut Dragonhide Shoulderpads - - [19376] = {20,"T2"}; --Archimtiros' Ring of Reckoning - [19364] = {64,"T2"}; --Ashkandi, Greatsword of the Bro.. - [19381] = {84,"T2"}; --Boots of the Shadow Flame - [19378] = {20,"T2"}; --Cloak of the Brood Lord - [19363] = {100,"T2"}; --Crul'shoruk, Edge of Chaos - [19360] = {60,"T2"}; --Lok'amir il Romathis - [19375] = {96,"T2"}; --Mish'undare, Circlet of the Mind… - [19379] = {116,"T2"}; --Neltharion's Tear - [19377] = {76,"T2"}; --Prestor's Talisman of Connivery - [19382] = {76,"T2"}; --Pure Elementium Band - [19356] = {80,"T2"}; --Staff of the Shadow Flame - [19380] = {36,"T2"}; --Therazane's Link - - [19003] = {52,"T2"}; --Head of Nefarian - [19383] = {52,"T2"}; --Head of Nefarian - [19366] = {52,"T2"}; --Head of Nefarian - [19384] = {52,"T2"}; --Head of Nefarian - - [16900] = {40,"T2"}; --Stormrage Raiment - [16902] = {40,"T2"}; --Stormrage Raiment - [16897] = {48,"T2"}; --Stormrage Raiment - [16904] = {28,"T2"}; --Stormrage Raiment [16899] = {32,"T2"}; --Stormrage Raiment [16903] = {32,"T2"}; --Stormrage Raiment [16901] = {32,"T2"}; --Stormrage Raiment [16898] = {32,"T2"}; --Stormrage Raiment - - [16939] = {40,"T2"}; --Dragonstalker Armor - [16937] = {40,"T2"}; --Dragonstalker Armor - [16942] = {48,"T2"}; --Dragonstalker Armor - [16935] = {28,"T2"}; --Dragonstalker Armor [16940] = {32,"T2"}; --Dragonstalker Armor [16936] = {32,"T2"}; --Dragonstalker Armor [16938] = {32,"T2"}; --Dragonstalker Armor [16941] = {32,"T2"}; --Dragonstalker Armor - - [16914] = {40,"T2"}; --Netherwind Regalia - [16917] = {40,"T2"}; --Netherwind Regalia - [16916] = {48,"T2"}; --Netherwind Regalia - [16918] = {28,"T2"}; --Netherwind Regalia [16913] = {32,"T2"}; --Netherwind Regalia [16818] = {32,"T2"}; --Netherwind Regalia [16915] = {32,"T2"}; --Netherwind Regalia [16912] = {32,"T2"}; --Netherwind Regalia - - [16921] = {40,"T2"}; --Vestments of Transcendence - [16924] = {40,"T2"}; --Vestments of Transcendence - [16923] = {48,"T2"}; --Vestments of Transcendence - [16926] = {28,"T2"}; --Vestments of Transcendence [16920] = {32,"T2"}; --Vestments of Transcendence [16925] = {32,"T2"}; --Vestments of Transcendence [16922] = {32,"T2"}; --Vestments of Transcendence [16919] = {32,"T2"}; --Vestments of Transcendence - - [16908] = {40,"T2"}; --Bloodfang Armor - [16832] = {40,"T2"}; --Bloodfang Armor - [16905] = {48,"T2"}; --Bloodfang Armor - [16911] = {28,"T2"}; --Bloodfang Armor [16907] = {32,"T2"}; --Bloodfang Armor [16910] = {32,"T2"}; --Bloodfang Armor [16909] = {32,"T2"}; --Bloodfang Armor [16906] = {32,"T2"}; --Bloodfang Armor - - [16947] = {40,"T2"}; --The Ten Storms - [16945] = {40,"T2"}; --The Ten Storms - [16950] = {48,"T2"}; --The Ten Storms - [16943] = {28,"T2"}; --The Ten Storms [16948] = {32,"T2"}; --The Ten Storms [16944] = {32,"T2"}; --The Ten Storms [16946] = {32,"T2"}; --The Ten Storms [16949] = {32,"T2"}; --The Ten Storms - - [16929] = {40,"T2"}; --Nemesis Raiment - [16932] = {40,"T2"}; --Nemesis Raiment - [16931] = {48,"T2"}; --Nemesis Raiment - [16934] = {28,"T2"}; --Nemesis Raiment [16928] = {32,"T2"}; --Nemesis Raiment [16933] = {32,"T2"}; --Nemesis Raiment [16930] = {32,"T2"}; --Nemesis Raiment [16927] = {32,"T2"}; --Nemesis Raiment - - [16963] = {40,"T2"}; --Battlegear of Wrath - [16961] = {40,"T2"}; --Battlegear of Wrath - [16966] = {48,"T2"}; --Battlegear of Wrath - [16959] = {28,"T2"}; --Battlegear of Wrath [16964] = {32,"T2"}; --Battlegear of Wrath [16960] = {32,"T2"}; --Battlegear of Wrath [16962] = {32,"T2"}; --Battlegear of Wrath [16965] = {32,"T2"}; --Battlegear of Wrath + [19396] = {36,"T2"}; --Taut Dragonhide Belt + [19388] = {36,"T2"}; --Angelista's Grasp + [19380] = {36,"T2"}; --Therazane's Link + [19434] = {40,"T2"}; --Band of Dark Dominion + [19339] = {40,"T2"}; --Mind Quickening Gem + [19373] = {40,"T2"}; --Black Brood Pauldrons + [19350] = {40,"T2"}; --Heartstriker + [20383] = {40,"T2"}; --Head of Broodlord Lashlayer + [19407] = {40,"T2"}; --Ebony Flame Gloves + [19391] = {40,"T2"}; --Shimmering Geta + [16900] = {40,"T2"}; --Stormrage Raiment + [16902] = {40,"T2"}; --Stormrage Raiment + [16939] = {40,"T2"}; --Dragonstalker Armor + [16937] = {40,"T2"}; --Dragonstalker Armor + [16914] = {40,"T2"}; --Netherwind Regalia + [16917] = {40,"T2"}; --Netherwind Regalia + [16921] = {40,"T2"}; --Vestments of Transcendence + [16924] = {40,"T2"}; --Vestments of Transcendence + [16908] = {40,"T2"}; --Bloodfang Armor + [16832] = {40,"T2"}; --Bloodfang Armor + [16947] = {40,"T2"}; --The Ten Storms + [16945] = {40,"T2"}; --The Ten Storms + [16929] = {40,"T2"}; --Nemesis Raiment + [16932] = {40,"T2"}; --Nemesis Raiment + [16963] = {40,"T2"}; --Battlegear of Wrath + [16961] = {40,"T2"}; --Battlegear of Wrath + [19372] = {44,"T2"}; --Helm of Endless Rage + [19400] = {44,"T2"}; --Firemaw's Clutch + [19389] = {44,"T2"}; --Taut Dragonhide Shoulderpads + [19437] = {48,"T2"}; --Boots of Pure Thought + [19438] = {48,"T2"}; --Ringo's Blizzard Boots + [19346] = {48,"T2"}; --Dragonfang Blade + [19355] = {48,"T2"}; --Shadow Wing Focus Staff + [16897] = {48,"T2"}; --Stormrage Raiment + [16942] = {48,"T2"}; --Dragonstalker Armor + [16916] = {48,"T2"}; --Netherwind Regalia + [16923] = {48,"T2"}; --Vestments of Transcendence + [16905] = {48,"T2"}; --Bloodfang Armor + [16950] = {48,"T2"}; --The Ten Storms + [16931] = {48,"T2"}; --Nemesis Raiment + [16966] = {48,"T2"}; --Battlegear of Wrath + [19365] = {52,"T2"}; --Claw of the Black Drake + [19394] = {52,"T2"}; --Drake Talon Pauldrons + [19397] = {52,"T2"}; --Ring of Blackrock + [19403] = {52,"T2"}; --Band of Forced Concentration + [19368] = {52,"T2"}; --Dragonbreath Hand Cannon + [19003] = {52,"T2"}; --Head of Nefarian + [19383] = {52,"T2"}; --Head of Nefarian + [19366] = {52,"T2"}; --Head of Nefarian + [19384] = {52,"T2"}; --Head of Nefarian + [19405] = {60,"T2"}; --Malfurion's Blessed Bulwark + [19360] = {60,"T2"}; --Lok'amir il Romathis + [19430] = {64,"T2"}; --Shroud of Pure Thought + [19364] = {64,"T2"}; --"Ashkandi, Greatsword of the Bro.." + [19341] = {68,"T2"}; --Lifegiving Gem + [19370] = {72,"T2"}; --Mantle of the Blackwing Cabal + [19374] = {72,"T2"}; --Bracers of Arcane Accuracy + [19347] = {72,"T2"}; --Claw of Chromaggus + [19352] = {76,"T2"}; --Chromatically Tempered Sword + [19349] = {76,"T2"}; --Elementium Reinforced Bulwark + [19377] = {76,"T2"}; --Prestor's Talisman of Connivery + [19382] = {76,"T2"}; --Pure Elementium Band + [19356] = {80,"T2"}; --Staff of the Shadow Flame + [19387] = {84,"T2"}; --Chromatic Boots + [19381] = {84,"T2"}; --Boots of the Shadow Flame + [19351] = {92,"T2"}; --"Maladath, Runed Blade of the.." + [19375] = {96,"T2"}; --"Mish'undare, Circlet of the Mind…" + [19385] = {100,"T2"}; --Empowered Leggings + [19363] = {100,"T2"}; --"Crul'shoruk, Edge of Chaos" + [19395] = {116,"T2"}; --Rejuvenating Gem + [19406] = {116,"T2"}; --Drake Fang Talisman + [19431] = {116,"T2"}; --Styleen's Impeding Scarab + [19379] = {116,"T2"}; --Neltharion's Tear + [19361] = {124,"T2"}; --"Ashjre'thul, Crossbow of Smiting" ------------------- --- Molten Core --- ------------------- - [17109] = {8,"T1"}; --Choker of Enlightenment + [16665] = {0,"T1"}; --Tome of Tranquilizing Shot + [18824] = {0,"T1"}; --Magma Tempered Boots + [18564] = {0,"T1"}; --Bindings of the Windseeker + [18563] = {0,"T1"}; --Bindings of the Windseeker + [18703] = {0,"T1"}; --Ancient Petrified Leaf + [18646] = {0,"T1"}; --The Eye of Divinity + [17204] = {0,"T1"}; --Eye of Sulfuras [17077] = {4,"T1"}; --Crimson Shocker [18861] = {4,"T1"}; --Flamewalker Legplates - [18879] = {40,"T1"}; --Heavy Dark Iron Ring + [18861] = {4,"T1"}; --Flamewalker Legplates + [17074] = {4,"T1"}; --Shadowstrike + [18806] = {4,"T1"}; --Core Forged Greaves + [19139] = {4,"T1"}; --Fireguard Shoulders + [18811] = {4,"T1"}; --Fireproof Cloak + [17109] = {8,"T1"}; --Choker of Enlightenment [18870] = {8,"T1"}; --Helm of the Lifegiver [18872] = {8,"T1"}; --Manastorm Leggings [19147] = {8,"T1"}; --Ring of Spell Power - [19145] = {60,"T1"}; --Robe of Volatile Power - [18875] = {60,"T1"}; --Salamander Scale Pants - [18878] = {16,"T1"}; --Sorcerous Dagger [19146] = {8,"T1"}; --Wristguards of Stability - [16665] = {0,"T1"}; --Tome of Tranquilizing Shot - - [18823] = {12,"T1"}; --Aged Core Leather Gloves - [18829] = {20,"T1"}; --Deep Earth Spaulders - [17073] = {12,"T1"}; --Earthshaker - [18203] = {16,"T1"}; --Eskhandar's Right Claw - [19142] = {12,"T1"}; --Fire Runed Grimoire - [19143] = {14,"T1"}; --Flameguard Gauntlets - [18861] = {4,"T1"}; --Flamewalker Legplates - [18824] = {0,"T1"}; --Magma Tempered Boots - [19136] = {36,"T1"}; --Mana Igniting Cord - [17065] = {48,"T1"}; --Medallion of Steadfast Might - [18822] = {12,"T1"}; --Obsidian Edged Blade - [18821] = {48,"T1"}; --Quick Strike Ring - [19144] = {12,"T1"}; --Sabatons of the Flamewalker - [17069] = {56,"T1"}; --Striker's Mark - [18820] = {48,"T1"}; --Talisman of Ephemeral Power - - [17105] = {24,"T1"}; --Aurastone Hammer - [18832] = {28,"T1"}; --Brutality Blade - [17066] = {28,"T1"}; --Drillborer Disk - [17071] = {12,"T1"}; --Gutgore Ripper - [18564] = {150,"T1"}; --Bindings of the Windseeker - [17110] = {8,"T1"}; --Seal of the Archmagus - - [18563] = {150,"T1"}; --Bindings of the Windseeker - - [17074] = {4,"T1"}; --Shadowstrike - - [17103] = {36,"T1"}; --Azuresong Mageblade - [17072] = {24,"T1"}; --Blastershot Launcher - [18842] = {28,"T1"}; --Staff of Dominance - - [18703] = {48,"T1"}; --Ancient Petrified Leaf - [19140] = {36,"T1"}; --Cauterizing Band - [18806] = {4,"T1"}; --Core Forged Greaves - [18805] = {44,"T1"}; --Core Hound Tooth + [16830] = {8,"T1"}; --Cenarion Raiment + [16828] = {8,"T1"}; --Cenarion Raiment + [16850] = {8,"T1"}; --Giantstalker Armor + [16851] = {8,"T1"}; --Giantstalker Armor + [16799] = {8,"T1"}; --Arcanist Regalia + [16802] = {8,"T1"}; --Arcanist Regalia + [16819] = {8,"T1"}; --Vestments of Prophecy + [16817] = {8,"T1"}; --Vestments of Prophecy + [16825] = {8,"T1"}; --Nightslayer Armor + [16827] = {8,"T1"}; --Nightslayer Armor + [16840] = {8,"T1"}; --The Earthfury + [16838] = {8,"T1"}; --The Earthfury + [16804] = {8,"T1"}; --Felheart Raiment + [16806] = {8,"T1"}; --Felheart Raiment + [16861] = {8,"T1"}; --Battlegear of Might + [16864] = {8,"T1"}; --Battlegear of Might + [18823] = {12,"T1"}; --Aged Core Leather Gloves + [17073] = {12,"T1"}; --Earthshaker + [19142] = {12,"T1"}; --Fire Runed Grimoire + [18822] = {12,"T1"}; --Obsidian Edged Blade + [19144] = {12,"T1"}; --Sabatons of the Flamewalker + [17071] = {12,"T1"}; --Gutgore Ripper [18803] = {12,"T1"}; --Finkle's Lava Dredger - [19139] = {4,"T1"}; --Fireguard Shoulders - [18811] = {4,"T1"}; --Fireproof Cloak - [18808] = {16,"T1"}; --Gloves of the Hypnotic Flame - [18809] = {16,"T1"}; --Sash of Whispered Secrets - [18646] = {36,"T1"}; --The Eye of Divinity - [18810] = {48,"T1"}; --Wild Growth Spaulders - [18812] = {36,"T1"}; --Wristguards of True Flight - - [17063] = {80,"T1"}; --Band of Accuria - [19138] = {28,"T1"}; --Band of Sulfuras - [17076] = {24,"T1"}; --Bonereaver's Edge - [18814] = {60,"T1"}; --Choker of the Firelord - [17102] = {20,"T1"}; --Cloak of the Shrouded Mists - [18817] = {56,"T1"}; --Crown of Destruction - [17107] = {16,"T1"}; --Dragon's Blood Cape [18815] = {12,"T1"}; --Essence of the Pure Flame - [17106] = {16,"T1"}; --Malistar's Defender - [19137] = {80,"T1"}; --Onslaught Girdle - [18816] = {56,"T1"}; --Perdition's Blade [17082] = {12,"T1"}; --Shard of the Flame - [17104] = {20,"T1"}; --Spinal Reaper - - [17204] = {150,"T1"}; --Eye of Sulfuras - [16834] = {12,"T1"}; --Cenarion Raiment [16836] = {12,"T1"}; --Cenarion Raiment - [16833] = {16,"T1"}; --Cenarion Raiment - [16830] = {8,"T1"}; --Cenarion Raiment [16831] = {12,"T1"}; --Cenarion Raiment - [16828] = {8,"T1"}; --Cenarion Raiment [16835] = {12,"T1"}; --Cenarion Raiment [16829] = {12,"T1"}; --Cenarion Raiment - [16846] = {12,"T1"}; --Giantstalker Armor [16848] = {12,"T1"}; --Giantstalker Armor - [16845] = {16,"T1"}; --Giantstalker Armor - [16850] = {8,"T1"}; --Giantstalker Armor [16852] = {12,"T1"}; --Giantstalker Armor - [16851] = {8,"T1"}; --Giantstalker Armor [16847] = {12,"T1"}; --Giantstalker Armor [16849] = {12,"T1"}; --Giantstalker Armor - [16795] = {12,"T1"}; --Arcanist Regalia [16797] = {12,"T1"}; --Arcanist Regalia - [16798] = {16,"T1"}; --Arcanist Regalia - [16799] = {8,"T1"}; --Arcanist Regalia [16801] = {12,"T1"}; --Arcanist Regalia - [16802] = {8,"T1"}; --Arcanist Regalia [16796] = {12,"T1"}; --Arcanist Regalia [16800] = {12,"T1"}; --Arcanist Regalia - [16813] = {12,"T1"}; --Vestments of Prophecy [16816] = {12,"T1"}; --Vestments of Prophecy - [16815] = {16,"T1"}; --Vestments of Prophecy - [16819] = {8,"T1"}; --Vestments of Prophecy [16812] = {12,"T1"}; --Vestments of Prophecy - [16817] = {8,"T1"}; --Vestments of Prophecy [16814] = {12,"T1"}; --Vestments of Prophecy [16811] = {12,"T1"}; --Vestments of Prophecy - [16821] = {12,"T1"}; --Nightslayer Armor [16823] = {12,"T1"}; --Nightslayer Armor - [16820] = {16,"T1"}; --Nightslayer Armor - [16825] = {8,"T1"}; --Nightslayer Armor [16826] = {12,"T1"}; --Nightslayer Armor - [16827] = {8,"T1"}; --Nightslayer Armor [16822] = {12,"T1"}; --Nightslayer Armor [16824] = {12,"T1"}; --Nightslayer Armor - [16842] = {12,"T1"}; --The Earthfury [16844] = {12,"T1"}; --The Earthfury - [16841] = {16,"T1"}; --The Earthfury - [16840] = {8,"T1"}; --The Earthfury [16839] = {12,"T1"}; --The Earthfury - [16838] = {8,"T1"}; --The Earthfury [16843] = {12,"T1"}; --The Earthfury [16837] = {12,"T1"}; --The Earthfury - [16808] = {12,"T1"}; --Felheart Raiment [16807] = {12,"T1"}; --Felheart Raiment - [16809] = {16,"T1"}; --Felheart Raiment - [16804] = {8,"T1"}; --Felheart Raiment [16805] = {12,"T1"}; --Felheart Raiment - [16806] = {8,"T1"}; --Felheart Raiment [16810] = {12,"T1"}; --Felheart Raiment [16803] = {12,"T1"}; --Felheart Raiment - [16866] = {12,"T1"}; --Battlegear of Might [16868] = {12,"T1"}; --Battlegear of Might - [16865] = {16,"T1"}; --Battlegear of Might - [16861] = {8,"T1"}; --Battlegear of Might [16863] = {12,"T1"}; --Battlegear of Might - [16864] = {8,"T1"}; --Battlegear of Might [16867] = {12,"T1"}; --Battlegear of Might [16862] = {12,"T1"}; --Battlegear of Might + [19143] = {14,"T1"}; --Flameguard Gauntlets + [18878] = {16,"T1"}; --Sorcerous Dagger + [18203] = {16,"T1"}; --Eskhandar's Right Claw + [18808] = {16,"T1"}; --Gloves of the Hypnotic Flame + [18809] = {16,"T1"}; --Sash of Whispered Secrets + [17107] = {16,"T1"}; --Dragon's Blood Cape + [17106] = {16,"T1"}; --Malistar's Defender + [16833] = {16,"T1"}; --Cenarion Raiment + [16845] = {16,"T1"}; --Giantstalker Armor + [16798] = {16,"T1"}; --Arcanist Regalia + [16815] = {16,"T1"}; --Vestments of Prophecy + [16820] = {16,"T1"}; --Nightslayer Armor + [16841] = {16,"T1"}; --The Earthfury + [16809] = {16,"T1"}; --Felheart Raiment + [16865] = {16,"T1"}; --Battlegear of Might + [18829] = {20,"T1"}; --Deep Earth Spaulders + [17102] = {20,"T1"}; --Cloak of the Shrouded Mists + [17104] = {20,"T1"}; --Spinal Reaper + [17105] = {22,"T1"}; --Aurastone Hammer + [17072] = {22,"T1"}; --Blastershot Launcher + [17076] = {22,"T1"}; --Bonereaver's Edge + [18832] = {24,"T1"}; --Brutality Blade + [17066] = {24,"T1"}; --Drillborer Disk + [18842] = {24,"T1"}; --Staff of Dominance + [19138] = {24,"T1"}; --Band of Sulfuras + [19136] = {28,"T1"}; --Mana Igniting Cord + [17103] = {28,"T1"}; --Azuresong Mageblade + [19140] = {28,"T1"}; --Cauterizing Band + [18812] = {28,"T1"}; --Wristguards of True Flight + [18879] = {30,"T1"}; --Heavy Dark Iron Ring + [18805] = {32,"T1"}; --Core Hound Tooth + [17065] = {36,"T1"}; --Medallion of Steadfast Might + [18821] = {36,"T1"}; --Quick Strike Ring + [18820] = {36,"T1"}; --Talisman of Ephemeral Power + [18810] = {36,"T1"}; --Wild Growth Spaulders + [17069] = {40,"T1"}; --Striker's Mark + [18817] = {40,"T1"}; --Crown of Destruction + [18816] = {40,"T1"}; --Perdition's Blade + [19145] = {42,"T1"}; --Robe of Volatile Power + [18875] = {42,"T1"}; --Salamander Scale Pants + [18814] = {42,"T1"}; --Choker of the Firelord + [17063] = {48,"T1"}; --Band of Accuria + [19137] = {48,"T1"}; --Onslaught Girdle --------------------- --- Single Bosses --- --------------------- - [17067] = {12,"T1.5"}; --Ancient Cornerstone Grimoire - [17068] = {32,"T1.5"}; --Deathbringer - [18205] = {16,"T1.5"}; --Eskhandar's Collar [18705] = {0,"T1.5"}; --Mature Black Dragon Sinew + [18704] = {0,"T1.5"}; --Mature Black Dragon Sinew + [18665] = {0,"T1.5"}; --The Eye of Shadow [18813] = {4,"T1.5"}; --Ring of Binding + [18545] = {4,"T1.5"}; --Leggings of Arcane Supremacy + [18547] = {4,"T1.5"}; --Unmelting Ice Girdle + [20625] = {4,"T1.5"}; --Belt of the Dark Bog + [20619] = {4,"T1.5"}; --Acid Inscribed Greaves + [20579] = {4,"T1.5"}; --Green Dragonskin Cloak + [20644] = {4,"T1.5"}; --Nightmare Engulfed Object + [20600] = {4,"T1.5"}; --Nightmare Engulfed Object + [20633] = {4,"T1.5"}; --Unnatural Leather Spaulders + [20637] = {4,"T1.5"}; --Acid Inscribed Pauldrons + [20630] = {10,"T1.5"}; --Gauntlets of the Shining Light + [20639] = {12,"T1.5"}; --Strangely Glyphed Legplates + [17067] = {12,"T1.5"}; --Ancient Cornerstone Grimoire + [18208] = {12,"T1.5"}; --Drape of Benediction + [18542] = {12,"T1.5"}; --Typhoon + [20629] = {12,"T1.5"}; --Malignant Footguards + [19135] = {12,"T1.5"}; --Blacklight Bracer + [18204] = {12,"T1.5"}; --Eskhandar's Pelt + [18543] = {12,"T1.5"}; --Ring of Entropy + [18205] = {16,"T1.5"}; --Eskhandar's Collar + [20616] = {16,"T1.5"}; --Dragonbone Wristguards + [20615] = {16,"T1.5"}; --Dragonspur Wraps + [17111] = {16,"T1.5"}; --Blazefury Medallion + [19134] = {16,"T1.5"}; --Flayed Doomguard Belt [17078] = {20,"T1.5"}; --Sapphiron Drape - [17064] = {68,"T1.5"}; --Shard of the Scale + [18202] = {20,"T1.5"}; --Eskhandar's Left Claw + [20626] = {20,"T1.5"}; --Black Bark Wristbands + [20582] = {20,"T1.5"}; --Trance Stone + [20622] = {20,"T1.5"}; --Dragonheart Necklace + [20632] = {20,"T1.5"}; --Mindtear Band + [18544] = {20,"T1.5"}; --Doomhide Gauntlets + [17112] = {20,"T1.5"}; --Empyrean Demolisher [17075] = {24,"T1.5"}; --Vis'kag the Bloodletter - + [20621] = {24,"T1.5"}; --Boots of the Endless Moor + [20624] = {24,"T1.5"}; --Ring of the Unliving + [20634] = {24,"T1.5"}; --Boots of Fright + [17113] = {24,"T1.5"}; --Amberseal Keeper + [18546] = {24,"T1.5"}; --Infernal Headcage + [20617] = {28,"T1.5"}; --Ancient Corroded Leggings + [20599] = {28,"T1.5"}; --Polished Ironwood Crossbow + [17068] = {32,"T1.5"}; --Deathbringer + [20580] = {32,"T1.5"}; --Hammer of Bestial Fury + [20623] = {32,"T1.5"}; --Circlet of Restless Dreams + [20638] = {32,"T1.5"}; --Leggings of the Demented Mind + [17070] = {36,"T1.5"}; --Fang of the Mystics + [20577] = {36,"T1.5"}; --Nightmare Blade + [20578] = {36,"T1.5"}; --Emerald Dragonfang + [20635] = {36,"T1.5"}; --Jade Inlaid Vestments + [20618] = {40,"T1.5"}; --Gloves of Delusional Power + [20581] = {40,"T1.5"}; --Staff of Rampant Growth + [20631] = {40,"T1.5"}; --Mendicant's Slippers [18423] = {48,"T1.5"}; --Head of Onyxia [18403] = {48,"T1.5"}; --Head of Onyxia [18404] = {48,"T1.5"}; --Head of Onyxia [18406] = {48,"T1.5"}; --Head of Onyxia - - [19130] = {52,"T1.5"}; --Cold Snap - [19132] = {92,"T1.5"}; --Crystal Adorned Crown - [18208] = {12,"T1.5"}; --Drape of Benediction - [18202] = {20,"T1.5"}; --Eskhandar's Left Claw - [17070] = {36,"T1.5"}; --Fang of the Mystics - [18545] = {4,"T1.5"}; --Leggings of Arcane Supremacy - [18704] = {0,"T1.5"}; --Mature Black Dragon Sinew - [18541] = {68,"T1.5"}; --Puissant Cape - [19131] = {80,"T1.5"}; --Snowblind Shoes - [18542] = {12,"T1.5"}; --Typhoon - [18547] = {4,"T1.5"}; --Unmelting Ice Girdle - - [20625] = {4,"T1.5"}; --Belt of the Dark Bog - [20626] = {20,"T1.5"}; --Black Bark Wristbands - [20627] = {64,"T1.5"}; --Dark Heart Pants - [20628] = {72,"T1.5"}; --Deviate Growth Cap - [20630] = {0,"T1.5"}; --Gauntlets of the Shining Light - [20629] = {12,"T1.5"}; --Malignant Footguards - - [20619] = {4,"T1.5"}; --Acid Inscribed Greaves - [20617] = {28,"T1.5"}; --Ancient Corroded Leggings - [20616] = {16,"T1.5"}; --Dragonbone Wristguards - [20615] = {16,"T1.5"}; --Dragonspur Wraps - [20579] = {4,"T1.5"}; --Green Dragonskin Cloak - [20618] = {40,"T1.5"}; --Gloves of Delusional Power - [20580] = {32,"T1.5"}; --Hammer of Bestial Fury - [20581] = {40,"T1.5"}; --Staff of Rampant Growth - [20582] = {20,"T1.5"}; --Trance Stone - [20644] = {4,"T1.5"}; --Nightmare Engulfed Object - [20600] = {4,"T1.5"}; --Nightmare Engulfed Object - - [20621] = {24,"T1.5"}; --Boots of the Endless Moor - [20623] = {32,"T1.5"}; --Circlet of Restless Dreams - [20622] = {20,"T1.5"}; --Dragonheart Necklace - [20599] = {28,"T1.5"}; --Polished Ironwood Crossbow - [20624] = {24,"T1.5"}; --Ring of the Unliving - - [20634] = {24,"T1.5"}; --Boots of Fright - [20631] = {40,"T1.5"}; --Mendicant's Slippers - [20632] = {20,"T1.5"}; --Mindtear Band - [20577] = {36,"T1.5"}; --Nightmare Blade - [20633] = {4,"T1.5"}; --Unnatural Leather Spaulders - - [20637] = {4,"T1.5"}; --Acid Inscribed Pauldrons - [20578] = {36,"T1.5"}; --Emerald Dragonfang - [20636] = {68,"T1.5"}; --Hibernating Crystal - [20635] = {36,"T1.5"}; --Jade Inlaid Vestments - [20638] = {32,"T1.5"}; --Leggings of the Demented Mind - [20639] = {0,"T1.5"}; --Strangely Glyphed Legplates - - [17113] = {24,"T1.5"}; --Amberseal Keeper - [19135] = {12,"T1.5"}; --Blacklight Bracer - [17111] = {16,"T1.5"}; --Blazefury Medallion - [18544] = {20,"T1.5"}; --Doomhide Gauntlets - [17112] = {20,"T1.5"}; --Empyrean Demolisher - [18204] = {12,"T1.5"}; --Eskhandar's Pelt - [19133] = {72,"T1.5"}; --Fel Infused Leggings - [19134] = {16,"T1.5"}; --Flayed Doomguard Belt - [18546] = {24,"T1.5"}; --Infernal Headcage - [18543] = {12,"T1.5"}; --Ring of Entropy - [18665] = {0,"T1.5"}; --The Eye of Shadow + [19130] = {46,"T1.5"}; --Cold Snap + [20627] = {50,"T1.5"}; --Dark Heart Pants + [17064] = {52,"T1.5"}; --Shard of the Scale + [18541] = {52,"T1.5"}; --Puissant Cape + [20636] = {52,"T1.5"}; --Hibernating Crystal + [20628] = {54,"T1.5"}; --Deviate Growth Cap + [19133] = {54,"T1.5"}; --Fel Infused Leggings + [19131] = {56,"T1.5"}; --Snowblind Shoes + [19132] = {60,"T1.5"}; --Crystal Adorned Crown } sepgp.gp_prices = prices --[[local price_scaling = { ["T1"] = 1, - ["T1.5"] = 1, + ["T1.5"] = 1.5, ["T2"] = 3, ["T2.5"] = 6, ["T3"] = 9 @@ -833,7 +742,7 @@ local progress_scaling = { ["T3"] = {["T3"]=1,["T2.5"]=1,["T2"]=1,["T1.5"]=1,["T1"]=1}, ["T2.5"] = {["T3"]=1.5,["T2.5"]=1.5,["T2"]=2,["T1.5"]=2,["T1"]=2}, ["T2"] = {["T3"]=1.5,["T2.5"]=1.5,["T2"]=3,["T1.5"]=3,["T1"]=3}, - ["T1"] = {["T3"]=4.5,["T2.5"]=4.5,["T2"]=4.5,["T1.5"]=9,["T1"]=9} + ["T1"] = {["T3"]=4.5,["T2.5"]=4.5,["T2"]=4.5,["T1.5"]=6,["T1"]=9} } local function get_adjusted_price(price,tier,progress) if not progress_scaling[progress] then return price end diff --git a/reserves.lua b/reserves.lua index 462e838..02c6242 100644 --- a/reserves.lua +++ b/reserves.lua @@ -38,12 +38,30 @@ function sepgp_reserves:Refresh() T:Refresh("sepgp_reserves") end +function sepgp_reserves:setHideScript() + local detachedFrame, tablet + for i=1,4 do + tablet = getglobal(string.format("Tablet20DetachedFrame%d",1)) + if tablet and tablet.owner ~= nil and tablet.owner == "sepgp_reserves" then + if not (tablet:GetScript("OnHide")) then + tablet:SetScript("OnHide",function() + if not T:IsAttached("sepgp_reserves") then + T:Attach("sepgp_reserves") + this:SetScript("OnHide",nil) + end + end) + end + end + end +end + function sepgp_reserves:Toggle(forceShow) if T:IsAttached("sepgp_reserves") then T:Detach("sepgp_reserves") if (T:IsLocked("sepgp_reserves")) then T:ToggleLocked("sepgp_reserves") end + self:setHideScript() elseif (forceShow) then else T:Attach("sepgp_reserves") diff --git a/shootyepgp.lua b/shootyepgp.lua index d00a8b5..8a2813d 100644 --- a/shootyepgp.lua +++ b/shootyepgp.lua @@ -7,14 +7,16 @@ local playerName = (UnitName("player")) local shooty_basegp = 135 local shooty_baseaward_ep = 100 local shooty_decay = 0.85 -local shooty_max = 10000 +local shooty_max = 5000 local shooty_timeout = 45 +local shooty_maxloglines = 300 local shooty_reservechan = "Reserves" local shooty_reservecall = string.format("{shootyepgp}Type \"+\" in this channel if on main, or \"+\" if on alt within %dsec.",shooty_timeout) local shooty_reserveanswer = "^(%+)(%a*)$" local out = "|cff9664c8shootyepgp:|r %s" local lastUpdate = 0 local needInit = true +local admin local shooty_debugchat local running_check,running_bid local partyUnit,raidUnit = {},{} @@ -41,6 +43,7 @@ function sepgp:OnInitialize() -- ADDON_LOADED (1) unless LoD if sepgp_decay == nil then sepgp_decay = shooty_decay end if sepgp_progress == nil then sepgp_progress = "T1" end if sepgp_discount == nil then sepgp_discount = 0.25 end + if sepgp_log == nil then sepgp_log = {} end sepgp.extratip = CreateFrame("GameTooltip","shootyepgp_tooltip",UIParent,"GameTooltipTemplate") end @@ -71,6 +74,11 @@ function sepgp:AceEvent_FullyInitialized() -- SYNTHETIC EVENT, later than PLAYER end -- hook tooltip to add our GP values sepgp:TipHook() + + -- make tablets closable with ESC + for i=1,4 do + table.insert(UISpecialFrames,string.format("Tablet20DetachedFrame%d",i)) + end end function sepgp:OnEnable() -- PLAYER_LOGIN (2) @@ -300,6 +308,7 @@ end function sepgp:award_raid_ep(ep) -- awards ep to raid members in zone if GetNumRaidMembers()>0 then sepgp:simpleSay(string.format("Giving %d ep to all raidmembers",ep)) + self:addToLog(string.format("Giving %d ep to all raidmembers",ep)) for i = 1, GetNumRaidMembers(true) do local name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(i) sepgp:givename_ep(name,ep) @@ -310,6 +319,7 @@ end function sepgp:award_reserve_ep(ep) -- awards ep to reserve list if table.getn(sepgp.shooty_reserves) > 0 then sepgp:simpleSay(string.format("Giving %d ep to active reserves",ep)) + self:addToLog(string.format("Giving %d ep to active reserves",ep)) for i, name in ipairs(sepgp.shooty_reserves) do sepgp:givename_ep(name,ep) end @@ -319,20 +329,24 @@ function sepgp:award_reserve_ep(ep) -- awards ep to reserve list end function sepgp:givename_ep(getname,ep) -- awards ep to a single character + if not (admin()) then return end sepgp:debugPrint(string.format("Giving %d ep to %s",ep,getname)) ep = ep + sepgp:get_ep(getname) sepgp:update_ep(getname,ep) end function sepgp:givename_gp(getname,gp) -- assigns gp to a single character + if not (admin()) then return end sepgp:debugPrint(string.format("Giving %d gp to %s",gp,getname)) local oldgp = sepgp:get_gp(getname) local newgp = gp + oldgp sepgp:adminSay(string.format("Awarding %d GP to %s. (Previous: %d, New: %d)",gp,getname,oldgp,newgp)) + self:addToLog(string.format("Awarding %d GP to %s. (Previous: %d, New: %d)",gp,getname,oldgp,newgp)) sepgp:update_gp(getname,newgp) end function sepgp:decay_epgp() -- decays entire roster's ep and gp + if not (admin()) then return end for i = 1, GetNumGuildMembers(1) do local name,_,_,_,class,_,ep,gp,_,_ = GetGuildRosterInfo(i) ep = tonumber(ep) @@ -345,15 +359,21 @@ function sepgp:decay_epgp() -- decays entire roster's ep and gp GuildRosterSetOfficerNote(i,gp) end end - local msg = string.format("all ep and gp decayed by %d%%",(1-sepgp_decay)*100) + local msg = string.format("All EP and GP decayed by %d%%",(1-sepgp_decay)*100) sepgp:simpleSay(msg) + if not (sepgp_saychannel=="OFFICER") then sepgp:adminSay(msg) end + self:addToLog(msg) end function sepgp:gp_reset() - for i = 1, GetNumGuildMembers(1) do - GuildRosterSetOfficerNote(i, shooty_basegp) - end - sepgp:debugPrint(string.format("All GP has been reset to %d.",shooty_basegp)) + if (IsGuildLeader()) then + for i = 1, GetNumGuildMembers(1) do + GuildRosterSetOfficerNote(i, shooty_basegp) + end + sepgp:debugPrint(string.format("All GP has been reset to %d.",shooty_basegp)) + self:adminSay(string.format("All GP has been reset to %d.",shooty_basegp)) + self:addToLog(string.format("All GP has been reset to %d.",shooty_basegp)) + end end --------- @@ -367,14 +387,23 @@ sepgp.tooltipHidderWhenEmpty = false sepgp.hasIcon = "Interface\\Icons\\INV_Misc_Orb_04" function sepgp:OnTooltipUpdate() - T:SetHint("|cffffff00Click|r to toggle Standings. \n|cffffff00Ctrl+Click|r to toggle Reserves. \n|cffffff00Alt+Click|r to toggle Bids. \n|cffffff00Right-Click|r for Options.") + local hint = "|cffffff00Click|r to toggle Standings.%s \n|cffffff00Right-Click|r for Options." + if (admin()) then + hint = string.format(hint," \n|cffffff00Ctrl+Click|r to toggle Reserves. \n|cffffff00Alt+Click|r to toggle Bids. \n|cffffff00Shift+Click|r to toggle Logs.") + else + hint = string.format(hint,"") + end + T:SetHint(hint) end function sepgp:OnClick() - if (IsControlKeyDown()) then + local is_admin = admin() + if (IsControlKeyDown() and is_admin) then sepgp_reserves:Toggle() - elseif (IsAltKeyDown()) then + elseif (IsAltKeyDown() and is_admin) then sepgp_bids:Toggle() + elseif (IsShiftKeyDown() and is_admin) then + sepgp_logs:Toggle() else sepgp_standings:Toggle() end @@ -426,7 +455,7 @@ function sepgp:buildClassMemberTable(roster,epgp) c[class].type = "group" c[class].name = class c[class].desc = class .. " members" - c[class].hidden = function() return not (CanEditOfficerNote() and CanEditPublicNote()) end + c[class].hidden = function() return not (admin()) end c[class].args = { } end if c[class].args[name] == nil then @@ -462,7 +491,7 @@ function sepgp:buildMenu() name = "+EPs to Member", desc = "Account EPs for member.", order = 10, - hidden = function() return not (CanEditOfficerNote() and CanEditPublicNote()) end, + hidden = function() return not (admin()) end, } options.args["ep_raid"] = { type = "text", @@ -472,7 +501,7 @@ function sepgp:buildMenu() get = "suggestedAwardEP", set = function(v) sepgp:award_raid_ep(tonumber(v)) end, usage = "", - hidden = function() return not (CanEditOfficerNote() and CanEditPublicNote()) end, + hidden = function() return not (admin()) end, validate = function(v) local n = tonumber(v) return n and n >= 0 and n < shooty_max @@ -483,7 +512,7 @@ function sepgp:buildMenu() name = "+GPs to Member", desc = "Account GPs for member.", order = 30, - hidden = function() return not (CanEditOfficerNote() and CanEditPublicNote()) end, + hidden = function() return not (admin()) end, } options.args["ep_reserves"] = { type = "text", @@ -493,7 +522,7 @@ function sepgp:buildMenu() get = "suggestedAwardEP", set = function(v) sepgp:award_reserve_ep(tonumber(v)) end, usage = "", - hidden = function() return not (CanEditOfficerNote() and CanEditPublicNote()) end, + hidden = function() return not (admin()) end, validate = function(v) local n = tonumber(v) return n and n >= 0 and n < shooty_max @@ -513,7 +542,7 @@ function sepgp:buildMenu() name = "AFK Check Reserves", desc = "AFK Check Reserves List", order = 60, - hidden = function() return not (CanEditOfficerNote() and CanEditPublicNote()) end, + hidden = function() return not (admin()) end, func = function() sepgp:afkcheck_reserves() end } options.args["set_main"] = { @@ -536,30 +565,31 @@ function sepgp:buildMenu() sepgp:SetRefresh(true) end, } - options.args["report_channel"] = { - type = "text", - name = "Reporting channel", - desc = "Channel used by reporting functions.", - order = 90, - get = function() return sepgp_saychannel end, - set = function(v) sepgp_saychannel = v end, - validate = { "PARTY", "RAID", "GUILD", "OFFICER" }, - } options.args["progress_tier"] = { type = "text", name = "Raid Progress", desc = "Highest Tier the Guild is raiding.\nUsed to adjust GP Prices.", - order = 95, + order = 90, get = function() return sepgp_progress end, set = function(v) sepgp_progress = v sepgp_bids:Refresh() end, validate = { ["T3"]="4.Naxxramas", ["T2.5"]="3.Temple of Ahn\'Qiraj", ["T2"]="2.Blackwing Lair", ["T1"]="1.Molten Core"}, } + options.args["report_channel"] = { + type = "text", + name = "Reporting channel", + desc = "Channel used by reporting functions.", + order = 95, + hidden = function() return not (admin()) end, + get = function() return sepgp_saychannel end, + set = function(v) sepgp_saychannel = v end, + validate = { "PARTY", "RAID", "GUILD", "OFFICER" }, + } options.args["decay"] = { type = "execute", name = "Decay EPGP", desc = string.format("Decays all EPGP by %d%%",(1-(sepgp_decay or shooty_decay))*100), order = 100, - hidden = function() return not (CanEditOfficerNote() and CanEditPublicNote()) end, + hidden = function() return not (admin()) end, func = function() sepgp:decay_epgp() end } options.args["set_decay"] = { @@ -575,7 +605,7 @@ function sepgp:buildMenu() step = 0.01, bigStep = 0.05, isPercent = true, - hidden = function() return not (CanEditOfficerNote() and CanEditPublicNote()) end, + hidden = function() return not (admin()) end, } options.args["set_discount"] = { type = "range", @@ -595,7 +625,7 @@ function sepgp:buildMenu() desc = string.format("gives everybody %d basic GP (Admin only).",shooty_basegp), order = 120, hidden = function() return not (IsGuildLeader()) end, - func = function() sepgp:gp_reset() end + func = function() StaticPopup_Show("SHOOTY_EPGP_CONFIRM_RESET_GP") end } end if (needInit) or (needRefresh) then @@ -737,13 +767,23 @@ lootCall.whisp = { "^(whisper)[%s%p%c]+.+",".+[%s%p%c]+(whisper)$",".+[%s%p%c]+(whisper)[%s%p%c]+.*",".*[%s%p%c]+(whisper)[%s%p%c]+.+", ".+[%s%p%c]+(bid)[%s%p%c]*.*",".*[%s%p%c]*(bid)[%s%p%c]+.+" } -lootCall.ms = {".+(%+).*",".*(%+).+", ".+(ms).*",".*(ms).+", ".+(mainspec).*",".*(mainspec).+"} -lootCall.os = {".+(%-).*",".*(%-).+", ".+(os).*",".*(os).+", ".+(offspec).*",".*(offspec).+"} +lootCall.ms = { + ".+(%+).*",".*(%+).+", + "^(ms)[%s%p%c]+.+",".+[%s%p%c]+(ms)$",".+[%s%p%c]+(ms)[%s%p%c]+.*",".*[%s%p%c]+(ms)[%s%p%c]+.+", + ".+(mainspec).*",".*(mainspec).+" +} +lootCall.os = { + ".+(%-).*",".*(%-).+", + "^(os)[%s%p%c]+.+",".+[%s%p%c]+(os)$",".+[%s%p%c]+(os)[%s%p%c]+.*",".*[%s%p%c]+(os)[%s%p%c]+.+", + ".+(offspec).*",".*(offspec).+" +} function sepgp:captureLootCall(text, sender) if not (IsRaidLeader() or self:lootMaster()) then return end if not sender == playerName then return end if not (string.find(text, "|Hitem:", 1, true)) then return end - local lowtext = string.lower(text) + local linkstriptext, count = string.gsub(text,"|c%x+|H[eimt:%d]+|h%[[%w%s'%-]+%]|h|r"," ; ") + if count > 1 then return end + local lowtext = string.lower(linkstriptext) local whisperkw_found, mskw_found, oskw_found, link_found local _, itemLink, itemColor, itemString, itemName for _,f in ipairs(lootCall.whisp) do @@ -759,7 +799,7 @@ function sepgp:captureLootCall(text, sender) if (oskw_found) then break end end if (whisperkw_found) or (mskw_found) or (oskw_found) then - _,_,itemLink = string.find(text,"(|c%x+|H.+|h%[.+%]|h|r)") + _,_,itemLink = string.find(text,"(|c%x+|H[eimt:%d]+|h%[[%w%s'%-]+%]|h|r)") if (itemLink) and (itemLink ~= "") then link_found, _, itemColor, itemString, itemName = string.find(itemLink, "^(|c%x+)|H(.+)|h(%[.+%])") end @@ -831,6 +871,26 @@ function sepgp:clearBids() sepgp_bids:Refresh() end +------------ +-- Logging +------------ + +function sepgp:addToLog(line,skipTime) + local over = table.getn(sepgp_log)-shooty_maxloglines+1 + if over > 0 then + for i=1,over do + table.remove(sepgp_log,1) + end + end + local timestamp + if (skipTime) then + timestamp = "" + else + timestamp = date("%b/%d %H:%M:%S") + end + table.insert(sepgp_log,{timestamp,line}) +end + ------------ -- Utility ------------ @@ -904,6 +964,10 @@ function sepgp:suggestedAwardEP() end end +admin = function() + return (CanEditOfficerNote() and CanEditPublicNote()) +end + ------------- -- Dialogs ------------- @@ -953,3 +1017,16 @@ StaticPopupDialogs["SHOOTY_EPGP_RESERVE_AFKCHECK_RESPONCE"] = { whileDead = 1, hideOnEscape = 1 } +StaticPopupDialogs["SHOOTY_EPGP_CONFIRM_RESET_GP"] = { + text = "Are you sure you want to Reset ALL GP?", + button1 = "|cffff0000"..TEXT(OKAY).."|r", + button2 = TEXT(CANCEL), + OnAccept = function() + sepgp:gp_reset() + end, + timeout = 0, + whileDead = 1, + exclusive = 1, + showAlert = 1, + hideOnEscape = 1 +}; diff --git a/shootyepgp.toc b/shootyepgp.toc index a5f4134..08c36e1 100644 --- a/shootyepgp.toc +++ b/shootyepgp.toc @@ -1,11 +1,12 @@ ## Interface: 11200 ## Title: shootyepgp ## Notes: Effort Points/Gear Points Loot System -## Author: shooty, Roadblock -## Version: 2.11 +## Author: Roadblock +## X-Credits: shooty for original version +## Version: 2.2 ## OptionalDeps: Ace2 ## SavedVariables: sepgp_saychannel,sepgp_groupbyclass,sepgp_raidonly,sepgp_decay,sepgp_reservechannel,sepgp_main,sepgp_progress,sepgp_discount -## SavedVariablesPerCharacter: +## SavedVariablesPerCharacter: sepgp_log Libs\AceLibrary\AceLibrary.lua Libs\AceOO-2.0\AceOO-2.0.lua @@ -30,4 +31,5 @@ shootyepgp.lua standings.lua reserves.lua bids.lua -prices.lua \ No newline at end of file +prices.lua +logs.lua \ No newline at end of file diff --git a/standings.lua b/standings.lua index 68831ef..a85dccf 100644 --- a/standings.lua +++ b/standings.lua @@ -12,18 +12,22 @@ shooty_export:SetPoint('TOP', UIParent, 'TOP', 0,-80) shooty_export:SetFrameStrata('DIALOG') shooty_export:Hide() shooty_export:SetBackdrop({ - bgFile = [[Interface\Buttons\WHITE8x8]], - insets = {left = 3, right = 3, top = 4, bottom = 3 -}}) -shooty_export:SetBackdropColor(0, 0, 0, 0.7) + bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], + edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]], + tile = true, + tileSize = 16, + edgeSize = 16, + insets = {left = 5, right = 5, top = 5, bottom = 5} + }) +shooty_export:SetBackdropBorderColor(TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b) +shooty_export:SetBackdropColor(TOOLTIP_DEFAULT_BACKGROUND_COLOR.r, TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, TOOLTIP_DEFAULT_BACKGROUND_COLOR.b) shooty_export.title = shooty_export:CreateFontString(nil,"OVERLAY") -shooty_export.title:SetPoint("TOP",0,0) +shooty_export.title:SetPoint("TOP",0,-5) shooty_export.title:SetFont("Fonts\\FRIZQT__.TTF", 12) shooty_export.title:SetWidth(200) shooty_export.title:SetJustifyH("LEFT") shooty_export.title:SetJustifyV("CENTER") -shooty_export.title:SetText("Ctrl-C to copy. Esc to close.") -shooty_export.title:SetTextColor(204/255,204/255,0) +shooty_export.title:SetText(C:Gold("Ctrl-C to copy. Esc to close.")) shooty_export.title:SetShadowOffset(1, -1) shooty_export.edit = CreateFrame("EditBox", "shooty_exportedit", shooty_export) shooty_export.edit:SetMultiLine(true) @@ -118,12 +122,30 @@ function sepgp_standings:Export() shooty_export.AddSelectText(txt) end +function sepgp_standings:setHideScript() + local detachedFrame, tablet + for i=1,4 do + tablet = getglobal(string.format("Tablet20DetachedFrame%d",1)) + if tablet and tablet.owner ~= nil and tablet.owner == "sepgp_standings" then + if not (tablet:GetScript("OnHide")) then + tablet:SetScript("OnHide",function() + if not T:IsAttached("sepgp_standings") then + T:Attach("sepgp_standings") + this:SetScript("OnHide",nil) + end + end) + end + end + end +end + function sepgp_standings:Toggle() if T:IsAttached("sepgp_standings") then T:Detach("sepgp_standings") if (T:IsLocked("sepgp_standings")) then T:ToggleLocked("sepgp_standings") end + self:setHideScript() else T:Attach("sepgp_standings") end