Mercurial > wow > ouroloot
comparison core.lua @ 99:966d06c8d9c9
- Brought plugin handling code up to date. SVs are kept in DB namespaces
like they should have been.
- Removed/commented all datarev code, until it becomes necessary after MoP.
- Textgen special blocks for plugins do not automatically get a "reset&reload"
button anymore.
- New method to register option pages on the main tab. No sub-entry pages
supported yet. Titles and reset&reload added here instead.
author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
---|---|
date | Sun, 29 Jul 2012 23:12:18 +0000 |
parents | b5a55c69ef67 |
children | a57133ee3c9b |
comparison
equal
deleted
inserted
replaced
98:b5a55c69ef67 | 99:966d06c8d9c9 |
---|---|
107 | 107 |
108 | 108 |
109 ------ Constants | 109 ------ Constants |
110 local RAID_ROSTER_UPDATE_EVENT = | 110 local RAID_ROSTER_UPDATE_EVENT = |
111 (select(4,GetBuildInfo()) >= 50000) and 'GROUP_ROSTER_UPDATE' or 'RAID_ROSTER_UPDATE' | 111 (select(4,GetBuildInfo()) >= 50000) and 'GROUP_ROSTER_UPDATE' or 'RAID_ROSTER_UPDATE' |
112 local option_defaults = { | 112 local option_defaults = { profile = { |
113 ['datarev'] = 20, -- cheating, this isn't actually an option | 113 --['datarev'] = 20, -- cheating, this isn't actually an option |
114 ['popup_on_join'] = true, | 114 ['popup_on_join'] = true, |
115 ['register_slash_synonyms'] = false, | 115 ['register_slash_synonyms'] = false, |
116 ['slash_synonyms'] = '/ol,/oloot', | 116 ['slash_synonyms'] = '/ol,/oloot', |
117 ['scroll_to_bottom'] = true, | 117 ['scroll_to_bottom'] = true, |
118 ['gui_noob'] = true, | 118 ['gui_noob'] = true, |
135 ['precache_history_uniques'] = false, | 135 ['precache_history_uniques'] = false, |
136 ['chatty_on_remote_changes'] = false, | 136 ['chatty_on_remote_changes'] = false, |
137 ['chatty_on_remote_changes_frame'] = 1, | 137 ['chatty_on_remote_changes_frame'] = 1, |
138 ['itemfilter'] = {}, | 138 ['itemfilter'] = {}, |
139 ['itemvault'] = {}, | 139 ['itemvault'] = {}, |
140 } | 140 } } |
141 local virgin = "First time loaded? Hi! Use the /ouroloot command" | 141 local virgin = "First time loaded? Hi! Use the /ouroloot command" |
142 .." to show the main display. You should probably browse the instructions" | 142 .." to show the main display. You should probably browse the instructions" |
143 .." 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" |
144 .." welcome message will not intrude again." | 144 .." welcome message will not intrude again." |
145 local newer_warning = "A newer version has been released. You can %s to display" | 145 local newer_warning = "A newer version has been released. You can %s to display" |
152 ..[[ will not display a window until this situation is corrected. ]] | 152 ..[[ will not display a window until this situation is corrected. ]] |
153 ..[[ You can try typing|n|cff00ff40/ouroloot fix ?|n]] | 153 ..[[ You can try typing|n|cff00ff40/ouroloot fix ?|n]] |
154 ..[[|cffffff00to see what can be done by software alone. You may still]] | 154 ..[[|cffffff00to see what can be done by software alone. You may still]] |
155 ..[[ need to do a "/reload" afterwards, or even restart the game client.]] | 155 ..[[ need to do a "/reload" afterwards, or even restart the game client.]] |
156 local unique_collision = "Item '%s' was carrying unique tag <%s>, but that was already in use; tried to generate a new tag and failed!|n|nRemote sender was '%s', previous cache entry was <%s/%s>.|n|nThis may require a live human to figure out; the loot in question has not been stored." | 156 local unique_collision = "Item '%s' was carrying unique tag <%s>, but that was already in use; tried to generate a new tag and failed!|n|nRemote sender was '%s', previous cache entry was <%s/%s>.|n|nThis may require a live human to figure out; the loot in question has not been stored." |
157 local new_profile_warning = [[Be aware that profiles only store addon & plugin settings from the <Options> tab; loot and generated text is account-wide data, unrelated to your current profile.]] | |
157 local remote_chatty = "|cff00ff00%s|r changed %d/%s from %s to %s" | 158 local remote_chatty = "|cff00ff00%s|r changed %d/%s from %s to %s" |
158 local qualnames = { | 159 local qualnames = { |
159 ['gray'] = 0, ['grey'] = 0, ['poor'] = 0, ['trash'] = 0, | 160 ['gray'] = 0, ['grey'] = 0, ['poor'] = 0, ['trash'] = 0, |
160 ['white'] = 1, ['common'] = 1, | 161 ['white'] = 1, ['common'] = 1, |
161 ['green'] = 2, ['uncommon'] = 2, | 162 ['green'] = 2, ['uncommon'] = 2, |
728 virgin = nil | 729 virgin = nil |
729 end,10,self) | 730 end,10,self) |
730 else | 731 else |
731 virgin = nil | 732 virgin = nil |
732 end | 733 end |
733 self.db = _G.LibStub("AceDB-3.0"):New("OuroLootOptsDB", | 734 self.db = _G.LibStub("AceDB-3.0"):New("OuroLootOptsDB", option_defaults , --[[Default=]]true) |
734 { profile = option_defaults } , --[[Default=]]true) | 735 self.db.RegisterCallback (self, "OnNewProfile", function() |
736 self:Print(new_profile_warning) | |
737 end) | |
735 self.db.RegisterCallback (self, "OnProfileChanged", "DBProfileRefresh") | 738 self.db.RegisterCallback (self, "OnProfileChanged", "DBProfileRefresh") |
736 self.db.RegisterCallback (self, "OnProfileCopied", "DBProfileRefresh") | 739 self.db.RegisterCallback (self, "OnProfileCopied", "DBProfileRefresh") |
737 self.db.RegisterCallback (self, "OnProfileReset", "DBProfileRefresh") | 740 self.db.RegisterCallback (self, "OnProfileReset", "DBProfileRefresh") |
738 self:DBProfileRefresh() | 741 self:DBProfileRefresh() |
739 | 742 |
952 if self.debug.flow then self:Print"is in control-flow debug mode." end | 955 if self.debug.flow then self:Print"is in control-flow debug mode." end |
953 end | 956 end |
954 --function addon:OnDisable() end | 957 --function addon:OnDisable() end |
955 | 958 |
956 do | 959 do |
960 --[[ | |
961 Module support (aka plugins). Field names with special meanings: | |
962 - option_defaults: (IN) Standard AceDB-style table. Use a profiles key! | |
963 - db: (OUT) AceDB object, set during init. | |
964 - opts: (OUT) Pointer to plugin's "db.profile" subtable. | |
965 | |
966 OnInitialize, [default_]OnEnable, register_text_generator, register_tab_control | |
967 are all inherited. | |
968 ]] | |
957 local prototype = {} | 969 local prototype = {} |
958 local registry | 970 local registry |
959 | 971 |
960 -- By default, no plugins. First one in sets up code for any after. | 972 -- By default, no plugins. First one in sets up code for any after. |
961 addon.get_plugin = flib.nullfunc | 973 addon.get_plugin = flib.nullfunc |
974 return addon:register_tab_control(t,...) | 986 return addon:register_tab_control(t,...) |
975 end | 987 end |
976 end | 988 end |
977 end | 989 end |
978 | 990 |
991 local function module_OnInit (plugin) | |
992 if plugin.option_defaults then | |
993 plugin.db = addon.db:RegisterNamespace (plugin.moduleName, plugin.option_defaults) | |
994 plugin.opts = plugin.db.profile | |
995 --plugin:SetEnabledState(plugin.db.profile.enabled) if that flag is needed later | |
996 end | |
997 end | |
998 | |
979 local function module_OnEnable (plugin) | 999 local function module_OnEnable (plugin) |
980 if plugin.option_defaults then | 1000 end |
981 local SVname = 'OuroLoot'..plugin:GetName()..'_opts' | 1001 |
982 if not _G[SVname] then | 1002 local function module_GetOption (plugin, info) |
983 _G[SVname] = {} | 1003 local name = info[#info] |
984 if type(plugin.OnFirstTime) == 'function' then | 1004 return plugin.db.profile[name] |
985 plugin:OnFirstTime() | 1005 end |
986 end | 1006 local function module_SetOption (plugin, info, value) |
987 end | 1007 local name = info[#info] |
988 plugin.opts = _G[SVname] | 1008 plugin.db.profile[name] = value |
989 for option,default in pairs(plugin.option_defaults) do | 1009 local arg = info.arg |
990 if plugin.opts[option] == nil then | 1010 if type(arg) == 'function' then |
991 plugin.opts[option] = default | 1011 plugin[arg](plugin,info) |
992 end | 1012 end |
993 end | 1013 end |
994 plugin.option_defaults = nil | 1014 |
995 end | 1015 prototype.OnInitialize = module_OnInit |
996 end | |
997 | |
998 prototype.OnEnable = module_OnEnable | 1016 prototype.OnEnable = module_OnEnable |
999 prototype.default_OnEnable = module_OnEnable | 1017 prototype.default_OnEnable = module_OnEnable |
1018 prototype.GetOption = module_GetOption | |
1019 prototype.SetOption = module_SetOption | |
1000 | 1020 |
1001 addon:SetDefaultModuleLibraries("AceConsole-3.0") | 1021 addon:SetDefaultModuleLibraries("AceConsole-3.0") |
1002 addon:SetDefaultModulePrototype(prototype) | 1022 addon:SetDefaultModulePrototype(prototype) |
1003 | 1023 |
1004 local err = [[Module '%s' cannot register itself because it failed a required condition: '%s']] | 1024 local err = [[Module '%s' cannot register itself because it failed a required condition: '%s']] |
1012 if mincomm and tonumber(mincomm) > tonumber(self.commrev) then | 1032 if mincomm and tonumber(mincomm) > tonumber(self.commrev) then |
1013 self:Print(err,modname, | 1033 self:Print(err,modname, |
1014 "commrev "..self.commrev.." older than minimum "..mincomm) | 1034 "commrev "..self.commrev.." older than minimum "..mincomm) |
1015 return false | 1035 return false |
1016 end | 1036 end |
1017 if mindata and tonumber(mindata) > opts.datarev then | 1037 --[[if mindata and tonumber(mindata) > opts.datarev then |
1018 self:Print(err,modname, | 1038 self:Print(err,modname, |
1019 "datarev "..opts.datarev.." older than minimum "..mindata) | 1039 "datarev "..opts.datarev.." older than minimum "..mindata) |
1020 return false | 1040 return false |
1021 end | 1041 end]] |
1022 end | 1042 end |
1023 return self:NewModule(modname) | 1043 return self:NewModule(modname) |
1024 end | 1044 end |
1025 end | 1045 end |
1026 | 1046 |