comparison core.lua @ 129:2731702567c4

- Detect loot received in LFR when player isn't eligible (for the strange people out there who are tracking in LFR). - Followup for r116, make sure all entries in display table are properly updated. Add a force-refresh button to the Help tab for the worst case.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Mon, 27 Aug 2012 02:53:42 -0400
parents dc39ce56a62d
children 08d3d2b7c31d
comparison
equal deleted inserted replaced
128:dc39ce56a62d 129:2731702567c4
176 --['heirloom'] = 7, 176 --['heirloom'] = 7,
177 } 177 }
178 local my_name = UnitName('player') 178 local my_name = UnitName('player')
179 local comm_cleanup_ttl = 4 -- seconds in the communications cache 179 local comm_cleanup_ttl = 4 -- seconds in the communications cache
180 local version_large = nil -- defaults to 1, possibly changed by version 180 local version_large = nil -- defaults to 1, possibly changed by version
181 local g_LOOT_ITEM_ss, g_LOOT_ITEM_MULTIPLE_sss, g_LOOT_ITEM_SELF_s, g_LOOT_ITEM_SELF_MULTIPLE_ss 181 local g_LOOT_ITEM_ss, g_LOOT_ITEM_MULTIPLE_sss, g_LOOT_ITEM_SELF_s
182 local g_LOOT_ITEM_SELF_MULTIPLE_ss, g_LOOT_ITEM_WHILE_PLAYER_INELIGIBLE_ss
182 183
183 184
184 ------ Addon member data 185 ------ Addon member data
185 local flib = LibStub("LibFarmbuyer") 186 local flib = LibStub("LibFarmbuyer")
186 addon.author_debug = flib.author_debug 187 addon.author_debug = flib.author_debug
964 end 965 end
965 break 966 break
966 end 967 end
967 968
968 --[[ 969 --[[
969 The four loot format patterns of interest, changed into relatively tight 970 The five loot format patterns of interest, changed into relatively tight
970 string match patterns. Done at enable-time rather than load-time against 971 string match patterns. Done at enable-time rather than load-time against
971 the slim chance that one of the non-US "delocalizers" needs to mess with 972 the slim chance that one of the non-US "delocalizers" needs to mess with
972 the global patterns before we transform them. 973 the global patterns before we transform them.
973 974
974 The SELF variants can be replaced with LOOT_ITEM_PUSHED_SELF[_MULTIPLE] to 975 The SELF variants can be replaced with LOOT_ITEM_PUSHED_SELF[_MULTIPLE] to
975 trigger on 'receive item' instead, which would detect extracting stuff 976 trigger on 'receive item' instead, which would detect extracting stuff
976 from mail, or s/PUSHED/CREATED/ for things like healthstones and guild 977 from mail, or s/PUSHED/CREATED/ for things like healthstones and guild
977 cauldron flasks. 978 cauldron flasks.
978
979 ??? do something with LOOT_ITEM_WHILE_PLAYER_INELIGIBLE for locked LFRs?
980 ]] 979 ]]
981 980
982 -- LOOT_ITEM = "%s receives loot: %s." --> (.+) receives loot: (.+)%. 981 -- LOOT_ITEM = "%s receives loot: %s." --> (.+) receives loot: (.+)%.
983 g_LOOT_ITEM_ss = LOOT_ITEM:gsub('%.$','%%.'):gsub('%%s','(.+)') 982 g_LOOT_ITEM_ss = LOOT_ITEM:gsub('%.$','%%.'):gsub('%%s','(.+)')
984 983
988 -- LOOT_ITEM_SELF = "You receive loot: %s." --> You receive loot: (.+)%. 987 -- LOOT_ITEM_SELF = "You receive loot: %s." --> You receive loot: (.+)%.
989 g_LOOT_ITEM_SELF_s = LOOT_ITEM_SELF:gsub('%.$','%%.'):gsub('%%s','(.+)') 988 g_LOOT_ITEM_SELF_s = LOOT_ITEM_SELF:gsub('%.$','%%.'):gsub('%%s','(.+)')
990 989
991 -- LOOT_ITEM_SELF_MULTIPLE = "You receive loot: %sx%d." --> You receive loot: (.+)(x%d+)%. 990 -- LOOT_ITEM_SELF_MULTIPLE = "You receive loot: %sx%d." --> You receive loot: (.+)(x%d+)%.
992 g_LOOT_ITEM_SELF_MULTIPLE_ss = LOOT_ITEM_SELF_MULTIPLE:gsub('%.$','%%.'):gsub('%%s','(.+)'):gsub('x%%d','(x%%d+)') 991 g_LOOT_ITEM_SELF_MULTIPLE_ss = LOOT_ITEM_SELF_MULTIPLE:gsub('%.$','%%.'):gsub('%%s','(.+)'):gsub('x%%d','(x%%d+)')
992
993 -- LOOT_ITEM_WHILE_PLAYER_INELIGIBLE is mostly the same as LOOT_ITEM with
994 -- an inline texture and no full stop. The punctuation in the texture
995 -- path causes fits while matching, so just make that a wildcard rather
996 -- than trying to escape it all.
997 g_LOOT_ITEM_WHILE_PLAYER_INELIGIBLE_ss = LOOT_ITEM_WHILE_PLAYER_INELIGIBLE:
998 gsub('\124T%S*\124t','\124T%%S*\124t'):gsub('%%s','(.+)')
993 999
994 --[[ 1000 --[[
995 Throw in the default disposition types. This could be called during load 1001 Throw in the default disposition types. This could be called during load
996 were it not for the need to talk to the GUI data (not set up yet). 1002 were it not for the need to talk to the GUI data (not set up yet).
997 1003
1741 return ret1, ret2 1747 return ret1, ret2
1742 end 1748 end
1743 1749
1744 -- Returns the index of the resulting new loot entry, or nil after 1750 -- Returns the index of the resulting new loot entry, or nil after
1745 -- displaying any errors. 1751 -- displaying any errors.
1752 local match = string.match
1746 function addon:CHAT_MSG_LOOT (event, ...) 1753 function addon:CHAT_MSG_LOOT (event, ...)
1747 if (not self.rebroadcast) and (not self.enabled) and (event ~= "manual") then return end 1754 if (not self.rebroadcast) and (not self.enabled) and (event ~= "manual") then return end
1748 1755
1749 --[[ 1756 --[[
1750 iname: Hearthstone 1757 iname: Hearthstone
1758 local msg = ... 1765 local msg = ...
1759 local person, itemstring, count 1766 local person, itemstring, count
1760 --ChatFrame2:AddMessage("original string: >"..(msg:gsub("\124","\124\124")).."<") 1767 --ChatFrame2:AddMessage("original string: >"..(msg:gsub("\124","\124\124")).."<")
1761 1768
1762 -- test in most likely order: other people get more loot than "you" do 1769 -- test in most likely order: other people get more loot than "you" do
1763 person, itemstring, count = msg:match(g_LOOT_ITEM_MULTIPLE_sss) 1770 person, itemstring, count = match(msg,g_LOOT_ITEM_MULTIPLE_sss)
1764 if not person then 1771 if not person then
1765 person, itemstring = msg:match(g_LOOT_ITEM_ss) 1772 person, itemstring = match(msg,g_LOOT_ITEM_ss)
1766 end 1773 end
1767 if not person then 1774 if not person then
1768 itemstring, count = msg:match(g_LOOT_ITEM_SELF_MULTIPLE_ss) 1775 -- Could only do this text if in an LFR... but the restriction
1776 -- might apply elsewhere soon enough.
1777 person, itemstring = match(msg,g_LOOT_ITEM_WHILE_PLAYER_INELIGIBLE_ss)
1778 end
1779 if not person then
1780 itemstring, count = match(msg,g_LOOT_ITEM_SELF_MULTIPLE_ss)
1769 if not itemstring then 1781 if not itemstring then
1770 itemstring = msg:match(g_LOOT_ITEM_SELF_s) 1782 itemstring = match(msg,g_LOOT_ITEM_SELF_s)
1771 end 1783 end
1772 end 1784 end
1773 1785
1774 if not itemstring then return end -- "PlayerX selected Greed", etc, not looting 1786 if not itemstring then return end -- "PlayerX selected Greed", etc, not looting
1775 self.dprint('loot', "CHAT_MSG_LOOT, person is", person, 1787 self.dprint('loot', "CHAT_MSG_LOOT, person is", person,
1776 ", itemstring is", itemstring, ", count is", count) 1788 ", itemstring is", itemstring, ", count is", count)
1777 1789
1778 -- Name might be colorized, remove the highlighting 1790 -- Name might be colorized, remove the highlighting
1779 if person then 1791 if person then
1780 person = person:match("|c%x%x%x%x%x%x%x%x(%S+)") or person 1792 person = match(person,"|c%x%x%x%x%x%x%x%x(%S+)") or person
1781 else 1793 else
1782 person = my_name -- UNIT_YOU / You 1794 person = my_name -- UNIT_YOU / You
1783 end 1795 end
1784 1796
1785 --local id = tonumber(itemstring:match('|Hitem:(%d+):')) 1797 --local id = tonumber(itemstring:match('|Hitem:(%d+):'))
2325 if type(g_loot.printed) ~= 'table' then 2337 if type(g_loot.printed) ~= 'table' then
2326 g_loot.printed = {} 2338 g_loot.printed = {}
2327 end 2339 end
2328 2340
2329 self.threshold = opts.threshold or self.threshold -- in the case of restoring but not tracking 2341 self.threshold = opts.threshold or self.threshold -- in the case of restoring but not tracking
2330 local g_loot_wrapper = self:gui_init (g_loot, g_uniques) 2342 local g_loot_wrapper = self:gui_init (true, g_loot, g_uniques)
2331 opts.autoshard = nil 2343 opts.autoshard = nil
2332 opts.threshold = nil 2344 opts.threshold = nil
2333 2345
2334 if g_restore_p then 2346 if g_restore_p then
2335 self:zero_printed_fenceposts() -- g_loot.printed.* = previous/safe values 2347 self:zero_printed_fenceposts() -- g_loot.printed.* = previous/safe values
2489 d.instance == e.instance and 2501 d.instance == e.instance and
2490 d.reason == 'wipe' 2502 d.reason == 'wipe'
2491 then 2503 then
2492 first = first or i 2504 first = first or i
2493 attempts = attempts + 1 2505 attempts = attempts + 1
2494 assert(tremove(g_loot,i)==d,"_mark_boss_kill screwed up data badly") 2506 assert(g_gui.g_dloot:remove(i)==d,"_mark_boss_kill screwed up data badly")
2495 else 2507 else
2496 i = i + 1 2508 i = i + 1
2497 end 2509 end
2498 d = g_loot[i] 2510 d = g_loot[i]
2499 end 2511 end
2681 e.unique = e.id .. (e.disposition or e.person) .. date("%Y/%m/%d %H:%M",e.stamp) 2693 e.unique = e.id .. (e.disposition or e.person) .. date("%Y/%m/%d %H:%M",e.stamp)
2682 end 2694 end
2683 addon:Fire ('NewLootEntry', e, index) 2695 addon:Fire ('NewLootEntry', e, index)
2684 end 2696 end
2685 g_loot[index] = e 2697 g_loot[index] = e
2698 g_gui.g_dloot[index] = nil
2686 addon:Fire ('NewEOIEntry', e, index) 2699 addon:Fire ('NewEOIEntry', e, index)
2687 return index 2700 return index
2688 end 2701 end
2689 2702
2690 -- Safety/convenience wrapper only. 2703 -- Safety/convenience wrapper only.
2722 return 2735 return
2723 end 2736 end
2724 end 2737 end
2725 2738
2726 assert(g_loot[is].kind == 'boss') 2739 assert(g_loot[is].kind == 'boss')
2727 local boss = tremove (g_loot, is) 2740 local boss = g_gui.g_dloot:remove(is)
2728 tinsert (g_loot, should_be, boss) 2741 g_gui.g_dloot:insert (should_be, boss)
2729 return should_be 2742 return should_be
2730 end 2743 end
2731 end 2744 end
2732 2745
2733 -- Disposition control; more precisely, how various dispositions affect flow 2746 -- Disposition control; more precisely, how various dispositions affect flow