# HG changeset patch # User Farmbuyer of US-Kilrogg # Date 1335521516 0 # Node ID 43913e02a1efd0603ab70815656afd25bd8fb91e # Parent 69fd720f853e078132ab2ca4a492099dfdd35c06 Detect LFR loot as best we can, and bundle it into the same warning given for heroic loot formatted by name only. Less tedious method of bumping data revisions. diff -r 69fd720f853e -r 43913e02a1ef core.lua --- a/core.lua Fri Apr 27 09:12:45 2012 +0000 +++ b/core.lua Fri Apr 27 10:11:56 2012 +0000 @@ -56,7 +56,7 @@ - count e.g., "x3"; missing otherwise; can be set/removed from extratext; triggers only for a stack of items, not "the boss dropped double axes today" -- is_heroic true if item is heroic; missing otherwise +- variant 1 = heroic item, 2 = LFR item; missing otherwise - cache_miss if GetItemInfo failed; SHOULD be missing (changes other fields) - bcast_from player's name if received rebroadcast from that player; missing otherwise; can be deleted as a result of in-game @@ -107,7 +107,7 @@ ------ Constants local option_defaults = { - ['datarev'] = 17, -- cheating, this isn't actually an option + ['datarev'] = 18, -- cheating, this isn't actually an option ['popup_on_join'] = true, ['register_slashloot'] = true, ['scroll_to_bottom'] = true, @@ -470,7 +470,7 @@ virgin = nil end opts = OuroLootSV_opts - local stored_datarev = opts.datarev + local stored_datarev = opts.datarev or 14 for opt,default in pairs(option_defaults) do if opts[opt] == nil then opts[opt] = default @@ -542,17 +542,16 @@ -- Handle changes to the stored data format in stages from oldest to newest. if OuroLootSV then local dirty = false - if stored_datarev == nil then - self:Print("Transitioning saved data format to 15..."); dirty = true + local bumpers = {} + bumpers[14] = function() for i,e in ipairs(OuroLootSV) do if e.bosskill then e.bossname, e.bosskill = e.bosskill, nil end end - stored_datarev = 15 end - if stored_datarev == 15 then - self:Print("Transitioning saved data format to 16..."); dirty = true + + bumpers[15] = function() for i,e in ipairs(OuroLootSV) do if e.kind == 'boss' then e.maxsize, e.raiderlist, e.raidersnap = 0, nil, {} @@ -562,25 +561,45 @@ for name,r in pairs(OuroLootSV.raiders) do r.subgroup = 0 end - stored_datarev = 16 end - if stored_datarev == 16 then - self:Print("Transitioning saved data format to 17..."); dirty = true + + bumpers[16] = function() for i,e in ipairs(OuroLootSV) do if e.kind == 'boss' then -- brown paper bag bugs e.raidersnap = e.raidersnap or {} e.maxsize = e.maxsize or 0 end end - stored_datarev = 17 + end + + bumpers[17] = function() + for i,e in ipairs(OuroLootSV) do + if e.kind == 'loot' and e.is_heroic then + e.variant, e.is_heroic = 1, nil + -- Could try detecting any previous LFR loot here, but... gah + end + end + end + + --[===[ + local real = bumpers + bumpers = newproxy(true) + local mt = getmetatable(bumpers) + mt.__index = real + mt.__gc = function() print"whadda ya know, garbage collection works" end ]===] + + while stored_datarev < opts.datarev do + self:Printf("Transitioning saved data format to %d...", stored_datarev+1) + dirty = true + bumpers[stored_datarev]() + stored_datarev = stored_datarev + 1 end if dirty then self:Print("Saved data has been massaged into shape.") end - assert(stored_datarev==opts.datarev) end _init(self) self.dprint('flow', "version strings:", revision_large, self.status_text) - self.OnInitialize = nil + self.OnInitialize = nil -- free up ALL the things! end function addon:OnEnable() @@ -1028,7 +1047,7 @@ count = (count and count ~= "") and count or nil, bcast_from = from, extratext = extratext, - is_heroic = self:is_heroic_item(ilink), + variant = self:is_variant_item(ilink), } if local_override then -- player is adding loot by hand, don't wait for network cache timeouts @@ -1432,14 +1451,16 @@ tip.lefts = lefts return tip end - function addon:is_heroic_item(item) -- returns true or *nil* + function addon:is_variant_item(item) -- returns number or *nil* itt = itt or create() itt:SetOwner(UIParent,"ANCHOR_NONE") itt:ClearLines() itt:SetHyperlink(item) local t = itt.lefts[2]:GetText() itt:Hide() - return (t == ITEM_HEROIC) or nil + return (t == ITEM_HEROIC and 1) + or (t == RAID_FINDER and 2) -- no ITEM_ for this, apparently + or nil end end diff -r 69fd720f853e -r 43913e02a1ef text_tabs.lua --- a/text_tabs.lua Fri Apr 27 09:12:45 2012 +0000 +++ b/text_tabs.lua Fri Apr 27 10:11:56 2012 +0000 @@ -48,7 +48,7 @@ do local red = '|cffff0505' local green = ITEM_QUALITY_COLORS[ITEM_QUALITY_UNCOMMON].hex - warning_text = ([[%sWARNING:|r Heroic items sharing the same name as normal items often display incorrectly on forums that use the item name as the identifier. Recommend you change the %sItem markup|r dropdown in the right-hand side to %s"[item] by ID"|r and regenerate this loot.]]):format(red, green, green) + warning_text = ([[%sWARNING:|r Heroic (and Raid Finder) items sharing the same name as normal items often display incorrectly on forums that use the item name as the identifier. Recommend you change the %sItem markup|r dropdown in the right-hand side to %s"[item] by ID"|r (or some other format that uses $I) and regenerate this loot.]]):format(red, green, green) end local function forum (_, loot, last_printed, generated, cache) @@ -72,7 +72,7 @@ if e.extratext_byhand then disp = disp .. " -- " .. e.extratext end - if e.is_heroic and not forum_warned_heroic then + if e.variant and not forum_warned_heroic then forum_warned_heroic = true addon:Print(warning_text) end