View Single Post
11/19/14, 04:09 PM   #4
Garkin
 
Garkin's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2014
Posts: 832
Local function "junkJunk" must be defined before line where it is called. Fixed code:

lua Code:
  1. local junker = {
  2.     name = "junker"
  3. }
  4.  
  5. local junk_types = {
  6.     "ITEMTYPE_ADDITIVE",
  7.     "ITEMTYPE_ALCHEMY_BASE",
  8.     "ITEMTYPE_AVA_REPAIR",
  9.     "ITEMTYPE_CLOTHIER_BOOSTER",
  10.     "ITEMTYPE_CLOTHIER_MATERIAL",
  11.     "ITEMTYPE_CLOTHIER_RAW_MATERIAL",
  12.     "ITEMTYPE_COLLECTIBLE",
  13.     "ITEMTYPE_CONTAINER",
  14.     "ITEMTYPE_DISGUISE",
  15.     "ITEMTYPE_ENCHANTING_RUNE",
  16.     "ITEMTYPE_ENCHANTMENT_BOOSTER",
  17.     "ITEMTYPE_FLAVORING",
  18.     "ITEMTYPE_FOOD",
  19.     "ITEMTYPE_GLYPH_ARMOR",
  20.     "ITEMTYPE_GLYPH_JEWELRY",
  21.     "ITEMTYPE_GLYPH_WEAPON",
  22.     "ITEMTYPE_INGREDIENT",
  23.     "ITEMTYPE_LURE",
  24.     "ITEMTYPE_NONE",
  25.     "ITEMTYPE_PLUG",
  26.     "ITEMTYPE_RAW_MATERIAL",
  27.     "ITEMTYPE_STYLE_MATERIAL",
  28.     "ITEMTYPE_TRASH"
  29. }
  30.  
  31.  
  32. local junkarmor_types ={
  33.     "ARMORTYPE_LIGHT",
  34.     "ARMORTYPE_MEDIUM",
  35.     "ARMORTYPE_NONE"
  36. }
  37.  
  38. local function contains(junk_types, element)
  39.     for _, value in pairs(junk_types) do
  40.         if value == element then
  41.             return true
  42.         end
  43.     end
  44.     return false
  45. end
  46.  
  47. local function junkJunk(eventCode,bagId,slotId,isNewItem,itemSoundCategory, updateReason)
  48.     local armor_type = nil
  49.     local item_type = GetItemType(bagId,slotId)
  50.     local item_link = GetItemLink(bagId,slotId)
  51.  
  52.     if item_type == "ITEMTYPE_ARMOR" then
  53.         armor_type= GetItemLinkArmorType(item_link)
  54.     end
  55.  
  56.     if contains(junk_types,item_type) or contains(junkarmor_types,armor_type) then
  57.         SetItemIsJunk(bagId,slotId)
  58.         d("junked")
  59.     end
  60. end
  61.  
  62. local function Initialize()
  63.     EVENT_MANAGER:RegisterForEvent(junker.name, EVENT_INVENTORY_SINGLE_SLOT_UPDATE, junkJunk)
  64. end
  65.  
  66.  
  67. local function  OnAddOnLoaded(event,addonName)
  68.     if addonName == "junker" then
  69.         Initialize()
  70.     end
  71. end
  72.  
  73. EVENT_MANAGER:RegisterForEvent(junker.name, EVENT_ADD_ON_LOADED, OnAddOnLoaded)
I have just changed order when functions are defined.

If you want also make this code a bit faster, do not use function "contains", but define your tables as follows and just check if table keys exists:
Lua Code:
  1. local junk_types = {
  2.     "ITEMTYPE_ADDITIVE" = true,
  3.     "ITEMTYPE_ALCHEMY_BASE" = true,
  4.     "ITEMTYPE_AVA_REPAIR" = true,
  5.     "ITEMTYPE_CLOTHIER_BOOSTER" = true,
  6.     "ITEMTYPE_CLOTHIER_MATERIAL" = true,
  7.     "ITEMTYPE_CLOTHIER_RAW_MATERIAL" = true,
  8.     "ITEMTYPE_COLLECTIBLE" = true,
  9.     "ITEMTYPE_CONTAINER" = true,
  10.     "ITEMTYPE_DISGUISE" = true,
  11.     "ITEMTYPE_ENCHANTING_RUNE" = true,
  12.     "ITEMTYPE_ENCHANTMENT_BOOSTER" = true,
  13.     "ITEMTYPE_FLAVORING" = true,
  14.     "ITEMTYPE_FOOD" = true,
  15.     "ITEMTYPE_GLYPH_ARMOR" = true,
  16.     "ITEMTYPE_GLYPH_JEWELRY" = true,
  17.     "ITEMTYPE_GLYPH_WEAPON" = true,
  18.     "ITEMTYPE_INGREDIENT" = true,
  19.     "ITEMTYPE_LURE" = true,
  20.     "ITEMTYPE_NONE" = true,
  21.     "ITEMTYPE_PLUG" = true,
  22.     "ITEMTYPE_RAW_MATERIAL" = true,
  23.     "ITEMTYPE_STYLE_MATERIAL" = true,
  24.     "ITEMTYPE_TRASH" = true
  25. }
  26.  
  27.  
  28. local junkarmor_types ={
  29.     "ARMORTYPE_LIGHT" = true,
  30.     "ARMORTYPE_MEDIUM" = true,
  31.     "ARMORTYPE_NONE" = true
  32. }
  33.  
  34. --modified function without "contains"
  35. local function junkJunk(eventCode,bagId,slotId,isNewItem,itemSoundCategory, updateReason)
  36.     local armor_type = nil
  37.     local item_type = GetItemType(bagId,slotId)
  38.     local item_link = GetItemLink(bagId,slotId)
  39.  
  40.     if item_type == "ITEMTYPE_ARMOR" then
  41.         armor_type= GetItemLinkArmorType(item_link)
  42.     end
  43.  
  44.     if junk_types[item_type] or (armor_type and junkarmor_types[armor_type]) then --make sure that armor_type is not nil before you use it as an index of the table
  45.         SetItemIsJunk(bagId,slotId)
  46.         d("junked")
  47.     end
  48. end
  49.  
  50. local function Initialize()
  51.     EVENT_MANAGER:RegisterForEvent("junker", EVENT_INVENTORY_SINGLE_SLOT_UPDATE, junkJunk)
  52. end
  53.  
  54.  
  55. local function  OnAddOnLoaded(event,addonName)
  56.     if addonName == "junker" then
  57.         Initialize()
  58.     end
  59. end
  60.  
  61. EVENT_MANAGER:RegisterForEvent(junker.name, EVENT_ADD_ON_LOADED, OnAddOnLoaded)

Last edited by Garkin : 11/19/14 at 04:15 PM.
  Reply With Quote