Mercurial > wow > itemauditor
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 |
