comparison Modules/CraftingRules.lua @ 107:f1a013c64270

Ticket 20 - Added a Skip Singles option to the Crafting Rules.
author Asa Ayers <Asa.Ayers@Gmail.com>
date Tue, 24 Aug 2010 22:34:23 -0700
parents e6292f1a0cf3
children 706b173b0fa1
comparison
equal deleted inserted replaced
106:13d63ca457f6 107:f1a013c64270
6 6
7 ItemAuditor.DB_defaults.char.rules_default_veto = false 7 ItemAuditor.DB_defaults.char.rules_default_veto = false
8 ItemAuditor.DB_defaults.char.rules = { 8 ItemAuditor.DB_defaults.char.rules = {
9 9
10 } 10 }
11
12 local function mergeDefaultValues(rule)
13 if nil == rule.search then
14 rule.search = ""
15 end
16 if nil == rule.target then
17 rule.target = 0
18 end
19 if nil == rule.skip_singles then
20 rule.skip_singles = false
21 end
22 return rule
23 end
11 24
12 local print = function(message, ...) 25 local print = function(message, ...)
13 ItemAuditor:Print(message, ...) 26 ItemAuditor:Print(message, ...)
14 end 27 end
15 28
82 ItemAuditor.db.char.rules[name].target = value 95 ItemAuditor.db.char.rules[name].target = value
83 end, 96 end,
84 disabled = function() return ItemAuditor.db.char.rules[name].target == -1 end, 97 disabled = function() return ItemAuditor.db.char.rules[name].target == -1 end,
85 order = 11, 98 order = 11,
86 }, 99 },
100 skip_singles = {
101 type = "toggle",
102 name = "Skip Singles",
103 desc = "If only one of the item will be crafted, skip it",
104 disabled = function() return ItemAuditor.db.char.rules[name].target <= 1 end,
105 get = function()
106 return ItemAuditor.db.char.rules[name].skip_singles and (ItemAuditor.db.char.rules[name].target > 1)
107 end,
108 set = function(info, value)
109 ItemAuditor.db.char.rules[name].skip_singles = value
110 end,
111 order = 12,
112 },
87 header_delete = { 113 header_delete = {
88 type = 'header', 114 type = 'header',
89 name = '', 115 name = '',
90 order = 19, 116 order = 19,
91 }, 117 },
140 target = 0, 166 target = 0,
141 }, 167 },
142 } 168 }
143 169
144 for name, rule in pairs(defaultGroups) do 170 for name, rule in pairs(defaultGroups) do
145 ItemAuditor.db.char.rules[name] = { 171 ItemAuditor.db.char.rules[name] = mergeDefaultValues({
146 search = rule.search, 172 search = rule.search,
147 target = rule.target, 173 target = rule.target,
148 } 174 })
149 Options['rule_'..name] = generateRuleOptions(name) 175 Options['rule_'..name] = generateRuleOptions(name)
150 end 176 end
151 end 177 end
152 178
153 local rules 179 local rules
154 function CraftingRules:OnInitialize() 180 function CraftingRules:OnInitialize()
155 rules = ItemAuditor.db.char.rules 181 rules = ItemAuditor.db.char.rules
156 local count = 0 182 local count = 0
157 for name, _ in pairs(rules) do 183 for name, rule in pairs(rules) do
184 mergeDefaultValues(rule)
158 Options['rule_'..name] = generateRuleOptions(name) 185 Options['rule_'..name] = generateRuleOptions(name)
159 count = count + 1 186 count = count + 1
160 end 187 end
161 188
162 if count == 0 then 189 if count == 0 then
163 generateDefaultGroups() 190 generateDefaultGroups()
164 end 191 end
165 end 192 end
166 193
167 local function runRule(rule, itemName, itemID) 194 local function runRule(rule, itemName, itemID, data)
168 local searches = {strsplit(',', rule.search:upper())} 195 local searches = {strsplit(',', rule.search:upper())}
169 196
170 for _, search in pairs(searches) do 197 for _, search in pairs(searches) do
171 search = search:trim() 198 search = search:trim()
172 199
173 if string.find(itemName, search) ~= nil or itemID == search then 200 if string.find(itemName, search) ~= nil or itemID == search then
201 if rule.skip_singles and data.count+1 == rule.target then
202 return data.count
203 end
174 return rule.target 204 return rule.target
175 end 205 end
176 end 206 end
177 return 0 207 return 0
178 end 208 end
183 local match_num = 0 213 local match_num = 0
184 214
185 local itemName = data.name:upper() 215 local itemName = data.name:upper()
186 local itemID = tostring(Utils.GetItemID(data.link)) 216 local itemID = tostring(Utils.GetItemID(data.link))
187 for name, rule in pairs(rules) do 217 for name, rule in pairs(rules) do
188 local result = runRule(rule, itemName, itemID) 218 local result = runRule(rule, itemName, itemID, data)
189 if result == -1 then 219 if result == -1 then
190 return result, name 220 return result, name
191 elseif result > match_num then 221 elseif result > match_num then
192 match_rule = name 222 match_rule = name
193 match_num = result 223 match_num = result