Mercurial > wow > wowdb-profiler
comparison Main.lua @ 464:6e78d7849ea3
Rewrote TradeSkill handling for new Legion APIs.
| author | Caleb Atherton <catherton@curse.com> | 
|---|---|
| date | Sat, 07 May 2016 21:07:38 -0400 | 
| parents | 1136b1bc88a1 | 
| children | efdbef365ec0 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 463:1136b1bc88a1 | 464:6e78d7849ea3 | 
|---|---|
| 249 | 249 | 
| 250 function TradeSkillExecutePer(iter_func) | 250 function TradeSkillExecutePer(iter_func) | 
| 251 if not _G.TradeSkillFrame or not _G.TradeSkillFrame:IsVisible() then | 251 if not _G.TradeSkillFrame or not _G.TradeSkillFrame:IsVisible() then | 
| 252 return | 252 return | 
| 253 end | 253 end | 
| 254 -- Clear the search box focus so the scan will have correct results. | 254 | 
| 255 local search_box = _G.TradeSkillFrameSearchBox | 255 if (private.isLegion) then | 
| 256 search_box:SetText("") | 256 local recipes = _G.C_TradeSkillUI.GetAllRecipeIDs() | 
| 257 | 257 | 
| 258 _G.TradeSkillSearch_OnTextChanged(search_box) | 258 if recipes and (#recipes > 0) then | 
| 259 search_box:ClearFocus() | 259 for i = 1, #recipes do | 
| 260 search_box:GetScript("OnEditFocusLost")(search_box) | 260 if iter_func(_G.C_TradeSkillUI.GetRecipeInfo(recipes[i]).name, recipes[i]) then | 
| 261 | 261 break | 
| 262 table.wipe(header_list) | 262 end | 
| 263 | 263 end | 
| 264 -- Save the current state of the TradeSkillFrame so it can be restored after we muck with it. | 264 end | 
| 265 local have_materials = _G.TradeSkillFrame.filterTbl.hasMaterials | 265 else | 
| 266 local have_skillup = _G.TradeSkillFrame.filterTbl.hasSkillUp | 266 -- Clear the search box focus so the scan will have correct results. | 
| 267 | 267 local search_box = _G.TradeSkillFrameSearchBox | 
| 268 if have_materials then | 268 search_box:SetText("") | 
| 269 _G.TradeSkillFrame.filterTbl.hasMaterials = false | 269 | 
| 270 _G.TradeSkillOnlyShowMakeable(false) | 270 _G.TradeSkillSearch_OnTextChanged(search_box) | 
| 271 end | 271 search_box:ClearFocus() | 
| 272 | 272 search_box:GetScript("OnEditFocusLost")(search_box) | 
| 273 if have_skillup then | 273 | 
| 274 _G.TradeSkillFrame.filterTbl.hasSkillUp = false | 274 table.wipe(header_list) | 
| 275 _G.TradeSkillOnlyShowSkillUps(false) | 275 | 
| 276 end | 276 -- Save the current state of the TradeSkillFrame so it can be restored after we muck with it. | 
| 277 _G.SetTradeSkillInvSlotFilter(0, true, true) | 277 local have_materials = _G.TradeSkillFrame.filterTbl.hasMaterials | 
| 278 _G.TradeSkillUpdateFilterBar() | 278 local have_skillup = _G.TradeSkillFrame.filterTbl.hasSkillUp | 
| 279 _G.TradeSkillFrame_Update() | 279 | 
| 280 | 280 if have_materials then | 
| 281 -- Expand all headers so we can see all the recipes there are | 281 _G.TradeSkillFrame.filterTbl.hasMaterials = false | 
| 282 for tradeskill_index = 1, _G.GetNumTradeSkills() do | 282 _G.TradeSkillOnlyShowMakeable(false) | 
| 283 local name, tradeskill_type, _, is_expanded = _G.GetTradeSkillInfo(tradeskill_index) | 283 end | 
| 284 | 284 | 
| 285 if tradeskill_type == "header" or tradeskill_type == "subheader" then | 285 if have_skillup then | 
| 286 if not is_expanded then | 286 _G.TradeSkillFrame.filterTbl.hasSkillUp = false | 
| 287 header_list[name] = true | 287 _G.TradeSkillOnlyShowSkillUps(false) | 
| 288 _G.ExpandTradeSkillSubClass(tradeskill_index) | 288 end | 
| 289 end | 289 _G.SetTradeSkillInvSlotFilter(0, true, true) | 
| 290 elseif iter_func(name, tradeskill_index) then | 290 _G.TradeSkillUpdateFilterBar() | 
| 291 break | 291 _G.TradeSkillFrame_Update() | 
| 292 end | 292 | 
| 293 end | 293 -- Expand all headers so we can see all the recipes there are | 
| 294 | 294 for tradeskill_index = 1, _G.GetNumTradeSkills() do | 
| 295 -- Restore the state of the things we changed. | 295 local name, tradeskill_type, _, is_expanded = _G.GetTradeSkillInfo(tradeskill_index) | 
| 296 for tradeskill_index = 1, _G.GetNumTradeSkills() do | 296 | 
| 297 local name, tradeskill_type, _, is_expanded = _G.GetTradeSkillInfo(tradeskill_index) | 297 if tradeskill_type == "header" or tradeskill_type == "subheader" then | 
| 298 | 298 if not is_expanded then | 
| 299 if header_list[name] then | 299 header_list[name] = true | 
| 300 _G.CollapseTradeSkillSubClass(tradeskill_index) | 300 _G.ExpandTradeSkillSubClass(tradeskill_index) | 
| 301 end | 301 end | 
| 302 end | 302 elseif iter_func(name, tradeskill_index) then | 
| 303 _G.TradeSkillFrame.filterTbl.hasMaterials = have_materials | 303 break | 
| 304 _G.TradeSkillOnlyShowMakeable(have_materials) | 304 end | 
| 305 _G.TradeSkillFrame.filterTbl.hasSkillUp = have_skillup | 305 end | 
| 306 _G.TradeSkillOnlyShowSkillUps(have_skillup) | 306 | 
| 307 | 307 -- Restore the state of the things we changed. | 
| 308 _G.TradeSkillUpdateFilterBar() | 308 for tradeskill_index = 1, _G.GetNumTradeSkills() do | 
| 309 _G.TradeSkillFrame_Update() | 309 local name, tradeskill_type, _, is_expanded = _G.GetTradeSkillInfo(tradeskill_index) | 
| 310 | |
| 311 if header_list[name] then | |
| 312 _G.CollapseTradeSkillSubClass(tradeskill_index) | |
| 313 end | |
| 314 end | |
| 315 _G.TradeSkillFrame.filterTbl.hasMaterials = have_materials | |
| 316 _G.TradeSkillOnlyShowMakeable(have_materials) | |
| 317 _G.TradeSkillFrame.filterTbl.hasSkillUp = have_skillup | |
| 318 _G.TradeSkillOnlyShowSkillUps(have_skillup) | |
| 319 | |
| 320 _G.TradeSkillUpdateFilterBar() | |
| 321 _G.TradeSkillFrame_Update() | |
| 322 end | |
| 310 end | 323 end | 
| 311 end -- do-block | 324 end -- do-block | 
| 312 | 325 | 
| 313 | 326 | 
| 314 local ActualCopperCost | 327 local ActualCopperCost | 
| 1652 local RECIPE_MATCH = _G.ERR_LEARN_RECIPE_S:gsub("%%s", "(.*)") | 1665 local RECIPE_MATCH = _G.ERR_LEARN_RECIPE_S:gsub("%%s", "(.*)") | 
| 1653 | 1666 | 
| 1654 | 1667 | 
| 1655 local function RecordDiscovery(tradeskill_name, tradeskill_index) | 1668 local function RecordDiscovery(tradeskill_name, tradeskill_index) | 
| 1656 if tradeskill_name == private.discovered_recipe_name then | 1669 if tradeskill_name == private.discovered_recipe_name then | 
| 1657 DBEntry("spells", tonumber(_G.GetTradeSkillRecipeLink(tradeskill_index):match("^|c%x%x%x%x%x%x%x%x|H%w+:(%d+)"))).discovery = ("%d:%d"):format(private.previous_spell_id, private.profession_level) | 1670 if (private.isLegion) then | 
| 1671 DBEntry("spells", tonumber(_G.C_TradeSkillUI.GetRecipeLink(tradeskill_index):match("^|c%x%x%x%x%x%x%x%x|H%w+:(%d+)"))).discovery = ("%d:%d"):format(private.previous_spell_id, private.profession_level) | |
| 1672 else | |
| 1673 DBEntry("spells", tonumber(_G.GetTradeSkillRecipeLink(tradeskill_index):match("^|c%x%x%x%x%x%x%x%x|H%w+:(%d+)"))).discovery = ("%d:%d"):format(private.previous_spell_id, private.profession_level) | |
| 1674 end | |
| 1658 | 1675 | 
| 1659 private.discovered_recipe_name = nil | 1676 private.discovered_recipe_name = nil | 
| 1660 private.profession_level = nil | 1677 private.profession_level = nil | 
| 1661 private.previous_spell_id = nil | 1678 private.previous_spell_id = nil | 
| 1662 | 1679 | 
| 1681 if not item_id then | 1698 if not item_id then | 
| 1682 if not private.trainer_shown then | 1699 if not private.trainer_shown then | 
| 1683 local recipe_name = message:match(RECIPE_MATCH) | 1700 local recipe_name = message:match(RECIPE_MATCH) | 
| 1684 | 1701 | 
| 1685 if recipe_name and private.previous_spell_id then | 1702 if recipe_name and private.previous_spell_id then | 
| 1686 local profession_name, prof_level = _G.GetTradeSkillLine() | 1703 local profession_name, prof_level | 
| 1704 if private.isLegion then | |
| 1705 profession_name, prof_level= _G.C_TradeSkillUI.GetTradeSkillLine() | |
| 1706 else | |
| 1707 profession_name, prof_level= _G.GetTradeSkillLine() | |
| 1708 end | |
| 1687 | 1709 | 
| 1688 if profession_name == _G.UNKNOWN then | 1710 if profession_name == _G.UNKNOWN then | 
| 1689 return | 1711 return | 
| 1690 end | 1712 end | 
| 1691 private.discovered_recipe_name = recipe_name | 1713 private.discovered_recipe_name = recipe_name | 
| 2228 | 2250 | 
| 2229 for loot_slot = 1, _G.GetNumLootItems() do | 2251 for loot_slot = 1, _G.GetNumLootItems() do | 
| 2230 local texturefiledataID, item_text, slot_quantity, quality, locked = _G.GetLootSlotInfo(loot_slot) | 2252 local texturefiledataID, item_text, slot_quantity, quality, locked = _G.GetLootSlotInfo(loot_slot) | 
| 2231 local slot_type = _G.GetLootSlotType(loot_slot) | 2253 local slot_type = _G.GetLootSlotType(loot_slot) | 
| 2232 local loot_info = { _G.GetLootSourceInfo(loot_slot) } | 2254 local loot_info = { _G.GetLootSourceInfo(loot_slot) } | 
| 2233 local loot_link = _G.GetLootSlotLink(loot_slot) | 2255 local loot_link = _G.GetLootSlotLink(loot_slot) | 
| 2234 | 2256 | 
| 2235 -- Odd index is GUID, even is count. | 2257 -- Odd index is GUID, even is count. | 
| 2236 for loot_index = 1, #loot_info, 2 do | 2258 for loot_index = 1, #loot_info, 2 do | 
| 2237 local source_guid = loot_info[loot_index] | 2259 local source_guid = loot_info[loot_index] | 
| 2238 | 2260 | 
| 2246 end | 2268 end | 
| 2247 local source_type, source_id = ParseGUID(source_guid) | 2269 local source_type, source_id = ParseGUID(source_guid) | 
| 2248 local source_key = ("%s:%d"):format(source_type, source_id) | 2270 local source_key = ("%s:%d"):format(source_type, source_id) | 
| 2249 | 2271 | 
| 2250 if slot_type == LOOT_SLOT_ITEM then | 2272 if slot_type == LOOT_SLOT_ITEM then | 
| 2251 if loot_link then | 2273 if loot_link then | 
| 2252 local item_id = ItemLinkToID(loot_link) | 2274 local item_id = ItemLinkToID(loot_link) | 
| 2253 Debug("GUID: %s - Type:ID: %s - ItemID: %d - Amount: %d (%d)", loot_info[loot_index], source_key, item_id, loot_info[loot_index + 1], slot_quantity) | 2275 Debug("GUID: %s - Type:ID: %s - ItemID: %d - Amount: %d (%d)", loot_info[loot_index], source_key, item_id, loot_info[loot_index + 1], slot_quantity) | 
| 2254 current_loot.sources[source_guid] = current_loot.sources[source_guid] or {} | 2276 current_loot.sources[source_guid] = current_loot.sources[source_guid] or {} | 
| 2255 current_loot.sources[source_guid][item_id] = (current_loot.sources[source_guid][item_id] or 0) + loot_quantity | 2277 current_loot.sources[source_guid][item_id] = (current_loot.sources[source_guid][item_id] or 0) + loot_quantity | 
| 2256 guids_used[source_guid] = true | 2278 guids_used[source_guid] = true | 
| 2257 else | 2279 else | 
| 2258 Debug("%s: Loot link is nil for loot slot %d of the entity with GUID %s and Type:ID: %s.", event_name, loot_slot, loot_info[loot_index], source_key) | 2280 Debug("%s: Loot link is nil for loot slot %d of the entity with GUID %s and Type:ID: %s.", event_name, loot_slot, loot_info[loot_index], source_key) | 
| 2259 end | 2281 end | 
| 2260 elseif slot_type == LOOT_SLOT_MONEY then | 2282 elseif slot_type == LOOT_SLOT_MONEY then | 
| 2261 Debug("GUID: %s - Type:ID: %s - Money - Amount: %d (%d)", loot_info[loot_index], source_key, loot_info[loot_index + 1], slot_quantity) | 2283 Debug("GUID: %s - Type:ID: %s - Money - Amount: %d (%d)", loot_info[loot_index], source_key, loot_info[loot_index + 1], slot_quantity) | 
| 2267 guids_used[source_guid] = true | 2289 guids_used[source_guid] = true | 
| 2268 end | 2290 end | 
| 2269 elseif slot_type == LOOT_SLOT_CURRENCY then | 2291 elseif slot_type == LOOT_SLOT_CURRENCY then | 
| 2270 -- Same bug with GetLootSlotInfo() will screw up currency when it happens, so we won't process this slot's loot. | 2292 -- Same bug with GetLootSlotInfo() will screw up currency when it happens, so we won't process this slot's loot. | 
| 2271 if loot_link then | 2293 if loot_link then | 
| 2272 local icon_texture = CurrencyLinkToTexture(loot_link) | 2294 local icon_texture = CurrencyLinkToTexture(loot_link) | 
| 2273 Debug("GUID: %s - Type:ID: %s - Currency: %s - Amount: %d (%d)", loot_info[loot_index], source_key, icon_texture, loot_info[loot_index + 1], slot_quantity) | 2295 Debug("GUID: %s - Type:ID: %s - Currency: %s - Amount: %d (%d)", loot_info[loot_index], source_key, icon_texture, loot_info[loot_index + 1], slot_quantity) | 
| 2274 if current_loot.target_type == AF.ZONE then | 2296 if current_loot.target_type == AF.ZONE then | 
| 2275 table.insert(current_loot.list, ("currency:%d:%s"):format(loot_quantity, icon_texture)) | 2297 table.insert(current_loot.list, ("currency:%d:%s"):format(loot_quantity, icon_texture)) | 
| 2276 else | 2298 else | 
| 2277 local currency_token = ("currency:%s"):format(icon_texture) | 2299 local currency_token = ("currency:%s"):format(icon_texture) | 
| 2629 Forge = forge_spell_ids, | 2651 Forge = forge_spell_ids, | 
| 2630 } | 2652 } | 
| 2631 | 2653 | 
| 2632 | 2654 | 
| 2633 local function RegisterTools(tradeskill_name, tradeskill_index) | 2655 local function RegisterTools(tradeskill_name, tradeskill_index) | 
| 2634 local link = _G.GetTradeSkillRecipeLink(tradeskill_index) | 2656 local link | 
| 2657 if (private.isLegion) then | |
| 2658 link = _G.C_TradeSkillUI.GetRecipeLink(tradeskill_index) | |
| 2659 else | |
| 2660 link = _G.GetTradeSkillRecipeLink(tradeskill_index) | |
| 2661 end | |
| 2662 | |
| 2635 if link then | 2663 if link then | 
| 2636 local spell_id = tonumber(link:match("^|c%x%x%x%x%x%x%x%x|H%w+:(%d+)")) | 2664 local spell_id = tonumber(link:match("^|c%x%x%x%x%x%x%x%x|H%w+:(%d+)")) | 
| 2637 local required_tool = _G.GetTradeSkillTools(tradeskill_index) | 2665 local required_tool | 
| 2666 if (private.isLegion) then | |
| 2667 required_tool = _G.C_TradeSkillUI.GetRecipeTools(tradeskill_index) | |
| 2668 else | |
| 2669 required_tool = _G.GetTradeSkillTools(tradeskill_index) | |
| 2670 end | |
| 2638 | 2671 | 
| 2639 if required_tool then | 2672 if required_tool then | 
| 2640 for tool_name, registry in pairs(TRADESKILL_TOOLS) do | 2673 for tool_name, registry in pairs(TRADESKILL_TOOLS) do | 
| 2641 if required_tool:find(tool_name) then | 2674 if required_tool:find(tool_name) then | 
| 2642 registry[spell_id] = true | 2675 registry[spell_id] = true | 
| 2646 end | 2679 end | 
| 2647 end | 2680 end | 
| 2648 | 2681 | 
| 2649 | 2682 | 
| 2650 function WDP:TRADE_SKILL_SHOW(event_name) | 2683 function WDP:TRADE_SKILL_SHOW(event_name) | 
| 2651 local profession_name, prof_level = _G.GetTradeSkillLine() | 2684 local profession_name, prof_level | 
| 2685 if private.isLegion then | |
| 2686 profession_name, prof_level= _G.C_TradeSkillUI.GetTradeSkillLine() | |
| 2687 else | |
| 2688 profession_name, prof_level= _G.GetTradeSkillLine() | |
| 2689 end | |
| 2652 | 2690 | 
| 2653 if profession_name == _G.UNKNOWN then | 2691 if profession_name == _G.UNKNOWN then | 
| 2654 return | 2692 return | 
| 2655 end | 2693 end | 
| 2656 TradeSkillExecutePer(RegisterTools) | 2694 TradeSkillExecutePer(RegisterTools) | 
