Mercurial > wow > ouroloot
comparison core.lua @ 97:ba5ff82dcf19
(First breaking change for MoP/3.0, incomplete transition.) Move generic user options to acedb. Remove older savedvar-upgrade code for a clean break. Add a profiles tab since it will be expected; changing profiles not yet implemented.
| author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
|---|---|
| date | Fri, 27 Jul 2012 10:23:12 +0000 |
| parents | 780b7e0eeeeb |
| children | b5a55c69ef67 |
comparison
equal
deleted
inserted
replaced
| 96:780b7e0eeeeb | 97:ba5ff82dcf19 |
|---|---|
| 100 ------ Saved variables | 100 ------ Saved variables |
| 101 OuroLootSV = nil -- possible copy of g_loot | 101 OuroLootSV = nil -- possible copy of g_loot |
| 102 OuroLootSV_saved = nil -- table of copies of saved texts, default nil; keys | 102 OuroLootSV_saved = nil -- table of copies of saved texts, default nil; keys |
| 103 -- are numeric indices of tables, subkeys of those | 103 -- are numeric indices of tables, subkeys of those |
| 104 -- are name/forum/attend/date | 104 -- are name/forum/attend/date |
| 105 OuroLootSV_opts = nil -- same as option_defaults until changed | |
| 106 -- autoshard: optional name of disenchanting player, default nil | |
| 107 -- threshold: optional loot threshold, default nil | |
| 108 OuroLootSV_hist = nil | 105 OuroLootSV_hist = nil |
| 109 OuroLootSV_log = {} | 106 OuroLootSV_log = {} |
| 110 | 107 |
| 111 | 108 |
| 112 ------ Constants | 109 ------ Constants |
| 136 ['display_disabled_LODs'] = false, | 133 ['display_disabled_LODs'] = false, |
| 137 ['display_bcast_from'] = true, | 134 ['display_bcast_from'] = true, |
| 138 ['precache_history_uniques'] = false, | 135 ['precache_history_uniques'] = false, |
| 139 ['chatty_on_remote_changes'] = false, | 136 ['chatty_on_remote_changes'] = false, |
| 140 ['chatty_on_remote_changes_frame'] = 1, | 137 ['chatty_on_remote_changes_frame'] = 1, |
| 138 ['itemfilter'] = {}, | |
| 139 ['itemvault'] = {}, | |
| 141 } | 140 } |
| 142 local virgin = "First time loaded? Hi! Use the /ouroloot command" | 141 local virgin = "First time loaded? Hi! Use the /ouroloot command" |
| 143 .." to show the main display. You should probably browse the instructions" | 142 .." to show the main display. You should probably browse the instructions" |
| 144 .." if you've never used this before; %s to display the help window. This" | 143 .." if you've never used this before; %s to display the help window. This" |
| 145 .." welcome message will not intrude again." | 144 .." welcome message will not intrude again." |
| 710 -- relogging during a raid and already have collected loot data | 709 -- relogging during a raid and already have collected loot data |
| 711 local OuroLootSV = _G.OuroLootSV | 710 local OuroLootSV = _G.OuroLootSV |
| 712 g_restore_p = OuroLootSV ~= nil | 711 g_restore_p = OuroLootSV ~= nil |
| 713 self.dprint('flow', "oninit sets restore as", g_restore_p) | 712 self.dprint('flow', "oninit sets restore as", g_restore_p) |
| 714 | 713 |
| 715 if _G.OuroLootSV_opts == nil then | 714 if _G.OuroLootOptsDB == nil then |
| 716 _G.OuroLootSV_opts = {} | |
| 717 local vclick = self.format_hypertext ([[click here]], ITEM_QUALITY_UNCOMMON, 'help') | 715 local vclick = self.format_hypertext ([[click here]], ITEM_QUALITY_UNCOMMON, 'help') |
| 718 self:ScheduleTimer(function(s) | 716 self:ScheduleTimer(function(s) |
| 717 for id in pairs(self.default_itemfilter) do | |
| 718 opts.itemfilter[id] = true | |
| 719 end | |
| 720 for id in pairs(self.default_itemvault) do | |
| 721 opts.itemvault[id] = true | |
| 722 end | |
| 719 s:Print(virgin, tostring(vclick)) | 723 s:Print(virgin, tostring(vclick)) |
| 720 virgin = nil | 724 virgin = nil |
| 721 end,10,self) | 725 end,10,self) |
| 722 else | 726 else |
| 723 virgin = nil | 727 virgin = nil |
| 724 end | 728 end |
| 725 opts = _G.OuroLootSV_opts | 729 self.db = _G.LibStub("AceDB-3.0"):New("OuroLootOptsDB", |
| 730 { profile = option_defaults } , --[[Default=]]true) | |
| 731 opts = self.db.profile | |
| 732 | |
| 733 --[[ | |
| 726 local stored_datarev = opts.datarev or 14 | 734 local stored_datarev = opts.datarev or 14 |
| 727 for opt,default in pairs(option_defaults) do | 735 for opt,default in pairs(option_defaults) do |
| 728 if opts[opt] == nil then | 736 if opts[opt] == nil then |
| 729 opts[opt] = default | 737 opts[opt] = default |
| 730 end | 738 end |
| 731 end | 739 end |
| 732 opts.datarev = option_defaults.datarev | 740 opts.datarev = option_defaults.datarev]] |
| 733 | |
| 734 -- transition&remove old options | |
| 735 opts['forum_use_itemid'] = nil | |
| 736 if opts['forum_format'] then | |
| 737 opts.forum['Custom...'] = opts['forum_format'] | |
| 738 opts['forum_format'] = nil | |
| 739 end | |
| 740 if opts.forum['[url]'] then | |
| 741 opts.forum['[url] Wowhead'] = opts.forum['[url]'] | |
| 742 opts.forum['[url]'] = nil | |
| 743 opts.forum['[url] MMO/Wowstead'] = option_defaults.forum['[url] MMO/Wowstead'] | |
| 744 if opts['forum_current'] == '[url]' then | |
| 745 opts['forum_current'] = '[url] Wowhead' | |
| 746 end | |
| 747 end | |
| 748 if opts['register_slashloot'] then | |
| 749 self:Print[[The "/loot" command is no longer available, because it is used by Blizzard in MoP. You can toggle on other synonyms for "/ouroloot" in the Options tab.]] | |
| 750 end | |
| 751 opts['register_slashloot'] = nil | |
| 752 option_defaults = nil | |
| 753 if OuroLootSV then -- may not be the same as testing g_restore_p soon | |
| 754 if OuroLootSV.saved then | |
| 755 OuroLootSV_saved = OuroLootSV.saved; OuroLootSV.saved = nil | |
| 756 end | |
| 757 if OuroLootSV.threshold then | |
| 758 opts.threshold = OuroLootSV.threshold; OuroLootSV.threshold = nil | |
| 759 end | |
| 760 if OuroLootSV.autoshard then | |
| 761 opts.autoshard = OuroLootSV.autoshard; OuroLootSV.autoshard = nil | |
| 762 end | |
| 763 end | |
| 764 | |
| 765 -- get item filter table if needed | |
| 766 if opts.itemfilter == nil then | |
| 767 opts.itemfilter = self.default_itemfilter | |
| 768 else | |
| 769 -- remove old stuff that doesn't "drop" anymore | |
| 770 -- find some way of only doing this once | |
| 771 opts.itemfilter[29434] = nil -- Badge of Justice | |
| 772 opts.itemfilter[40752] = nil -- Emblem of Heroism | |
| 773 opts.itemfilter[40753] = nil -- Emblem of Valor | |
| 774 opts.itemfilter[45624] = nil -- Emblem of Conquest | |
| 775 opts.itemfilter[43228] = nil -- Stone Keeper's Shard | |
| 776 opts.itemfilter[47241] = nil -- Emblem of Triumph | |
| 777 opts.itemfilter[49426] = nil -- Emblem of Frost | |
| 778 end | |
| 779 self.default_itemfilter = nil | |
| 780 if opts.itemvault == nil then | |
| 781 opts.itemvault = self.default_itemvault | |
| 782 end | |
| 783 self.default_itemvault = nil | |
| 784 | 741 |
| 785 self:RegisterChatCommand("ouroloot", "OnSlash") | 742 self:RegisterChatCommand("ouroloot", "OnSlash") |
| 786 if opts.register_slash_synonyms then | 743 if opts.register_slash_synonyms then |
| 787 -- Maybe use %w here for non-English locales? | 744 -- Maybe use %w here for non-English locales? |
| 788 local n = 2 | 745 local n = 2 |
| 823 --OuroLootSV_hist = nil | 780 --OuroLootSV_hist = nil |
| 824 | 781 |
| 825 -- Handle changes to the stored data format in stages from oldest to newest. | 782 -- Handle changes to the stored data format in stages from oldest to newest. |
| 826 -- bumpers[X] is responsible for updating from X to X+1. | 783 -- bumpers[X] is responsible for updating from X to X+1. |
| 827 -- (This is turning into a lot of loops over the same table. Consolidate?) | 784 -- (This is turning into a lot of loops over the same table. Consolidate?) |
| 828 if OuroLootSV then | 785 if false and OuroLootSV then |
| 829 local dirty = false | 786 local dirty = false |
| 830 local bumpers = {} | 787 local bumpers = {} |
| 831 bumpers[14] = function() | 788 --bumpers[14] = function() start |
| 832 for i,e in ipairs(OuroLootSV) do | 789 --bumpers[19] = function() latest |
| 833 if e.bosskill then | |
| 834 e.bossname, e.bosskill = e.bosskill, nil | |
| 835 end | |
| 836 end | |
| 837 end | |
| 838 | |
| 839 bumpers[15] = function() | |
| 840 for i,e in ipairs(OuroLootSV) do | |
| 841 if e.kind == 'boss' then | |
| 842 e.maxsize, e.raiderlist, e.raidersnap = 0, nil, {} | |
| 843 end | |
| 844 end | |
| 845 OuroLootSV.raiders = OuroLootSV.raiders or {} | |
| 846 for name,r in pairs(OuroLootSV.raiders) do | |
| 847 r.subgroup = 0 | |
| 848 end | |
| 849 end | |
| 850 | |
| 851 bumpers[16] = function() | |
| 852 for i,e in ipairs(OuroLootSV) do | |
| 853 if e.kind == 'boss' then -- brown paper bag bugs | |
| 854 e.raidersnap = e.raidersnap or {} | |
| 855 e.maxsize = e.maxsize or 0 | |
| 856 end | |
| 857 end | |
| 858 end | |
| 859 | |
| 860 bumpers[17] = function() | |
| 861 for i,e in ipairs(OuroLootSV) do | |
| 862 if e.kind == 'loot' and e.is_heroic then | |
| 863 e.variant, e.is_heroic = 1, nil | |
| 864 -- Could try detecting any previous LFR loot here, but... gah | |
| 865 end | |
| 866 end | |
| 867 end | |
| 868 | |
| 869 bumpers[18] = bumpers[16] | |
| 870 -- In the not-very-many days between 16 and 19, I managed to break | |
| 871 -- the exact same data in the exact same way. At least they're | |
| 872 -- not actually running the same loop twice... probably... sigh. | |
| 873 | |
| 874 bumpers[19] = function() | |
| 875 local date = _G.date | |
| 876 for i,e in ipairs(OuroLootSV) do | |
| 877 if e.kind == 'loot' then | |
| 878 if e.history_unique then | |
| 879 e.unique, e.history_unique = e.history_unique, nil | |
| 880 end | |
| 881 if e.unique == nil or #e.unique == 0 then | |
| 882 e.unique = e.id .. e.person .. date("%Y/%m/%d %H:%M",e.stamp) | |
| 883 end | |
| 884 end | |
| 885 end | |
| 886 end | |
| 887 | 790 |
| 888 --[===[ | 791 --[===[ |
| 889 local real = bumpers | 792 local real = bumpers |
| 890 bumpers = newproxy(true) | 793 bumpers = newproxy(true) |
| 891 local mt = getmetatable(bumpers) | 794 local mt = getmetatable(bumpers) |
| 1118 ------ Event handlers | 1021 ------ Event handlers |
| 1119 function addon:_clear_SVs() | 1022 function addon:_clear_SVs() |
| 1120 g_loot = {} -- not saved, just fooling PLAYER_LOGOUT tests | 1023 g_loot = {} -- not saved, just fooling PLAYER_LOGOUT tests |
| 1121 _G.OuroLootSV = nil | 1024 _G.OuroLootSV = nil |
| 1122 _G.OuroLootSV_saved = nil | 1025 _G.OuroLootSV_saved = nil |
| 1123 _G.OuroLootSV_opts = nil | 1026 _G.OuroLootOptsDB = nil |
| 1124 _G.OuroLootSV_hist = nil | 1027 _G.OuroLootSV_hist = nil |
| 1125 _G.OuroLootSV_log = nil | 1028 _G.OuroLootSV_log = nil |
| 1126 _G.ReloadUI() | 1029 _G.ReloadUI() |
| 1127 end | 1030 end |
| 1128 function addon:PLAYER_LOGOUT() | 1031 function addon:PLAYER_LOGOUT() |
