Mercurial > wow > itemauditor
comparison Modules/CraftingRules.lua @ 100:e6292f1a0cf3
Added a new Crafting Rules module to allow the user to set up custom rules based on item names.
| author | Asa Ayers <Asa.Ayers@Gmail.com> |
|---|---|
| date | Thu, 19 Aug 2010 23:22:53 -0700 |
| parents | |
| children | f1a013c64270 |
comparison
equal
deleted
inserted
replaced
| 99:e9b903cf9b33 | 100:e6292f1a0cf3 |
|---|---|
| 1 local ItemAuditor = select(2, ...) | |
| 2 local CraftingRules = ItemAuditor:NewModule("CraftingRules") | |
| 3 print('CraftingRules') | |
| 4 local Crafting = ItemAuditor:GetModule("Crafting") | |
| 5 local Utils = ItemAuditor:GetModule("Utils") | |
| 6 | |
| 7 ItemAuditor.DB_defaults.char.rules_default_veto = false | |
| 8 ItemAuditor.DB_defaults.char.rules = { | |
| 9 | |
| 10 } | |
| 11 | |
| 12 local print = function(message, ...) | |
| 13 ItemAuditor:Print(message, ...) | |
| 14 end | |
| 15 | |
| 16 local Options = { | |
| 17 header_result = { | |
| 18 type = 'header', | |
| 19 name = 'Default Result', | |
| 20 order = 9, | |
| 21 }, | |
| 22 veto = { | |
| 23 type = "toggle", | |
| 24 name = "Veto unknown", | |
| 25 desc = "Vetos any items you don't have a rule for", | |
| 26 get = function() return ItemAuditor.db.char.rules_default_veto end, | |
| 27 set = function(info, value) ItemAuditor.db.char.rules_default_veto = value end, | |
| 28 order = 10, | |
| 29 }, | |
| 30 } | |
| 31 | |
| 32 local function generateRuleOptions(name) | |
| 33 local opt = { | |
| 34 name = name, | |
| 35 type = 'group', | |
| 36 args = { | |
| 37 items = { | |
| 38 type = "input", | |
| 39 name = "Item(s)", | |
| 40 desc = "Items this rule should match. Separate items with commas.", | |
| 41 multiline = true, | |
| 42 get = function() | |
| 43 return ItemAuditor.db.char.rules[name].search | |
| 44 end, | |
| 45 set = function(info, value) | |
| 46 ItemAuditor.db.char.rules[name].search = value | |
| 47 end, | |
| 48 order = 0, | |
| 49 }, | |
| 50 header_result = { | |
| 51 type = 'header', | |
| 52 name = 'Rule', | |
| 53 order = 9, | |
| 54 }, | |
| 55 veto = { | |
| 56 type = "toggle", | |
| 57 name = "Veto", | |
| 58 desc = "Veto any item that matches this rule", | |
| 59 get = function() | |
| 60 return (ItemAuditor.db.char.rules[name].target == -1) | |
| 61 end, | |
| 62 set = function(info, value) | |
| 63 if value then | |
| 64 value = -1 | |
| 65 else | |
| 66 value = 0 | |
| 67 end | |
| 68 ItemAuditor.db.char.rules[name].target = value | |
| 69 end, | |
| 70 order = 10, | |
| 71 }, | |
| 72 auction_threshold = { | |
| 73 type = "range", | |
| 74 name = "Number to craft", | |
| 75 desc = "", | |
| 76 min = 0, | |
| 77 max = 1000, | |
| 78 softMax = 50, | |
| 79 step = 1, | |
| 80 get = function() return max(0, ItemAuditor.db.char.rules[name].target) end, | |
| 81 set = function(info, value) | |
| 82 ItemAuditor.db.char.rules[name].target = value | |
| 83 end, | |
| 84 disabled = function() return ItemAuditor.db.char.rules[name].target == -1 end, | |
| 85 order = 11, | |
| 86 }, | |
| 87 header_delete = { | |
| 88 type = 'header', | |
| 89 name = '', | |
| 90 order = 19, | |
| 91 }, | |
| 92 header_delete = { | |
| 93 type = 'execute', | |
| 94 name = 'Delete Rule', | |
| 95 func = function() | |
| 96 ItemAuditor.db.char.rules[name] = nil | |
| 97 Options['rule_'..name] = nil | |
| 98 end, | |
| 99 order = 20, | |
| 100 }, | |
| 101 }, | |
| 102 } | |
| 103 | |
| 104 | |
| 105 return opt | |
| 106 end | |
| 107 | |
| 108 --[[ | |
| 109 This had to be separated because set refers to Options and generateRuleOptions | |
| 110 ]] | |
| 111 Options.new = { | |
| 112 type = "input", | |
| 113 name = "Create New Rule", | |
| 114 desc = "", | |
| 115 get = function() | |
| 116 return "" | |
| 117 end, | |
| 118 set = function(info, name) | |
| 119 ItemAuditor.db.char.rules[name] = { | |
| 120 search = name, | |
| 121 target = 0, | |
| 122 } | |
| 123 Options['rule_'..name] = generateRuleOptions(name) | |
| 124 end, | |
| 125 order = 0, | |
| 126 } | |
| 127 | |
| 128 local function generateDefaultGroups() | |
| 129 local defaultGroups = { | |
| 130 ['Glyphs'] = { | |
| 131 search = 'Glyph of', | |
| 132 target = 0, | |
| 133 }, | |
| 134 ['Epic Gems'] = { | |
| 135 search = "Cardinal Ruby, Ametrine, King's Amber, Eye of Zul, Majestic Zircon, Dreadstone", | |
| 136 target = 0, | |
| 137 }, | |
| 138 ['Rare Gems'] = { | |
| 139 search = "Scarlet Ruby, Monarch Topaz, Autumn's Glow, Forest Emerald, Sky Sapphire, Twilight Opal", | |
| 140 target = 0, | |
| 141 }, | |
| 142 } | |
| 143 | |
| 144 for name, rule in pairs(defaultGroups) do | |
| 145 ItemAuditor.db.char.rules[name] = { | |
| 146 search = rule.search, | |
| 147 target = rule.target, | |
| 148 } | |
| 149 Options['rule_'..name] = generateRuleOptions(name) | |
| 150 end | |
| 151 end | |
| 152 | |
| 153 local rules | |
| 154 function CraftingRules:OnInitialize() | |
| 155 rules = ItemAuditor.db.char.rules | |
| 156 local count = 0 | |
| 157 for name, _ in pairs(rules) do | |
| 158 Options['rule_'..name] = generateRuleOptions(name) | |
| 159 count = count + 1 | |
| 160 end | |
| 161 | |
| 162 if count == 0 then | |
| 163 generateDefaultGroups() | |
| 164 end | |
| 165 end | |
| 166 | |
| 167 local function runRule(rule, itemName, itemID) | |
| 168 local searches = {strsplit(',', rule.search:upper())} | |
| 169 | |
| 170 for _, search in pairs(searches) do | |
| 171 search = search:trim() | |
| 172 | |
| 173 if string.find(itemName, search) ~= nil or itemID == search then | |
| 174 return rule.target | |
| 175 end | |
| 176 end | |
| 177 return 0 | |
| 178 end | |
| 179 | |
| 180 local function Decide(data) | |
| 181 | |
| 182 local match_rule = nil | |
| 183 local match_num = 0 | |
| 184 | |
| 185 local itemName = data.name:upper() | |
| 186 local itemID = tostring(Utils.GetItemID(data.link)) | |
| 187 for name, rule in pairs(rules) do | |
| 188 local result = runRule(rule, itemName, itemID) | |
| 189 if result == -1 then | |
| 190 return result, name | |
| 191 elseif result > match_num then | |
| 192 match_rule = name | |
| 193 match_num = result | |
| 194 end | |
| 195 end | |
| 196 | |
| 197 if match_rule == nil and ItemAuditor.db.char.rules_default_veto then | |
| 198 return -1 | |
| 199 end | |
| 200 return match_num, match_rule | |
| 201 end | |
| 202 | |
| 203 Crafting.RegisterCraftingDecider('Crafting Rules', Decide, Options) |
