07/24/19, 04:17 AM | #1 |
Have Problems with Setting an Itemfilter
Hey Folks,
Im very new with the lua language and especially with the ESO API, but Im experienced in C languages. At the moment I write a small Loot Manager which have a few kind of options for itemfiltering purpose. My problem is this small function which filters out the unwished items. I wrote for debugging purposes a small ItemIdentifier which have similiar functions. This Code:
function LootManager.ItemFilter(itemnumber,bagID,slotID) ... if Config.MaterialFilterSettings.LootAlchemy == true then if itemtype == ITEMTYPE_POISON_BASE then return true end if itemtype == ITEMTYPE_POTION_BASE then return true end if itemtype == ITEMTYPE_REAGENT then return true end end if Config.MaterialFilterSettings.LootCooking == true then if itemtype == ITEMTYPE_FLAVORING then return true end if itemtype == ITEMTYPE_INGREDIENT then return true end if itemtype == ITEMTYPE_FISH then return true end if itemtype == ITEMTYPE_LURE then return true end if itemtype == ITEMTYPE_SPICE then return true end end return false end Here is a part of my ItemIdentifier which works perfectly Code:
function LootManager.LootItemIdentifier(itemnumber) ...... if itemtype == ITEMTYPE_FLAVORING then itemtype = "Flavoring" end if itemtype == ITEMTYPE_INGREDIENT then itemtype = "Ingredient" end if itemtype == ITEMTYPE_FISH then itemtype = "Fish" end if itemtype == ITEMTYPE_LURE then itemtype = "Lure" end if itemtype == ITEMTYPE_SPICE then itemtype = "Spice" end return itemtype end |
|
07/24/19, 06:06 AM | #2 |
try to add a debug message to figure out first, if your config is defined or not:
Lua Code:
second thing is, you check for Code:
itemType == |
|
07/24/19, 06:51 AM | #3 |
Code:
function LootManager.ItemFilter(itemnumber,bagID,slotID) if bagID == nil or slotID == nil then local itemID,name,icon,amount,quality,value,isQuest,stolen = GetLootItemInfo(itemnumber) local itemlink = GetLootItemLink(itemID) local itemtype = GetItemLinkItemType(itemlink) local itemtrait = GetItemLinkTraitType(itemlink) end if itemnumber == nil then local itemlink = GetItemLink(bagID,slotID) local itemtype = GetItemType(bagID,slotID) local itemtrait = GetItemTrait(bagID,slotID) local value = GetItemLinkValue(itemlink) local itemfiltertype = GetItemLinkFilterTypeInfo(itemLink) end local notdestroyable = IsItemLinkForcedNotDeconstructable(itemlink) if itemtype == ITEMTYPE_WEAPON then if bagID == nil or slotID == nil then local itemtype2 = GetItemLinkWeaponType(itemlink) end if itemnumber == nil then local itemtype2 = GetItemWeaponType(bagID,slotID) end --- User Weapon Filter --- if itemtype2 == WEAPONTYPE_DAGGER and Config.WeaponFilterSettings.Dagger >= 1 then return true end if itemtype2 == WEAPONTYPE_SWORD and Config.WeaponFilterSettings.OHSword >= 1 then return true end if itemtype2 == WEAPONTYPE_HAMMER and Config.WeaponFilterSettings.OHHammer >= 1 then return true end if itemtype2 == WEAPONTYPE_AXE and Config.WeaponFilterSettings.OHAxe >= 1 then return true end if itemtype2 == WEAPONTYPE_SHIELD and Config.WeaponFilterSettings.Shield >= 1 then return true end if itemtype2 == WEAPONTYPE_TWO_HANDED_SWORD and Config.WeaponFilterSettings.THSword >= 1 then return true end if itemtype2 == WEAPONTYPE_TWO_HANDED_HAMMER and Config.WeaponFilterSettings.THHammer >= 1 then return true end if itemtype2 == WEAPONTYPE_TWO_HANDED_AXE and Config.WeaponFilterSettings.THAxe >= 1 then return true end if itemtype2 == WEAPONTYPE_BOW and Config.WeaponFilterSettings.Bow >= 1 then return true end if itemtype2 == WEAPONTYPE_FIRE_STAFF and Config.WeaponFilterSettings.FireStaff >= 1 then return true end if itemtype2 == WEAPONTYPE_FROST_STAFF and Config.WeaponFilterSettings.FrostStaff >= 1 then return true end if itemtype2 == WEAPONTYPE_LIGHTNING_STAFF and Config.WeaponFilterSettings.LightningStaff >= 1 then return true end if itemtype2 == WEAPONTYPE_HEALING_STAFF and Config.WeaponFilterSettings.HealingStaff >= 1 then return true end --- User Loot Ornate & Intricate Weapons --- if itemtrait == ITEM_TRAIT_TYPE_WEAPON_ORNATE and Config.GeneralFilterSettings.LootOrnate == true then return true end if itemtrait == ITEM_TRAIT_TYPE_WEAPON_INTRICATE then if Config.WeaponFilterSettings.MetalWeaponIntricate == true then if itemtype2 == WEAPONTYPE_DAGGER then return true end if itemtype2 == WEAPONTYPE_SWORD then return true end if itemtype2 == WEAPONTYPE_HAMMER then return true end if itemtype2 == WEAPONTYPE_AXE then return true end if itemtype2 == WEAPONTYPE_TWO_HANDED_SWORD then return true end if itemtype2 == WEAPONTYPE_TWO_HANDED_AXE then return true end if itemtype2 == WEAPONTYPE_TWO_HANDED_HAMMER then return true end end if Config.WeaponFilterSettings.WoodenWeaponIntricate == true then if itemtype2 == WEAPONTYPE_SHIELD then return true end if itemtype2 == WEAPONTYPE_BOW then return true end if itemtype2 == WEAPONTYPE_FIRE_STAFF then return true end if itemtype2 == WEAPONTYPE_FROST_STAFF then return true end if itemtype2 == WEAPONTYPE_LIGHTNING_STAFF then return true end if itemtype2 == WEAPONTYPE_HEALING_STAFF then return true end end end end --- User Armor Filter --- if itemtype == ITEMTYPE_ARMOR then if bagID == nil or slotID == nil then local itemtype2 = GetItemLinkArmorType(itemlink) end if itemnumber == nil then local itemtype2 = GetItemArmorType(bagID,slotID) end if itemtype2 == ARMORTYPE_LIGHT and Config.ArmorFilterSettings.LightArmor >= 1 then return true end if itemtype2 == ARMORTYPE_MEDIUM and Config.ArmorFilterSettings.MediumArmor >= 1 then return true end if itemtype2 == ARMORTYPE_HEAVY and Config.ArmorFilterSettings.HeavyArmor >= 1 then return true end --- User Loot Ornate & Intricate Weapons --- if itemtrait == ITEM_TRAIT_TYPE_ARMOR_ORNATE and Config.GeneralFilterSettings.LootOrnate == true then return true end if itemtrait == ITEM_TRAIT_TYPE_ARMOR_INTRICATE then if Config.ArmorFilterSettings.SmithArmorIntricate == true then if itemtype2 == ARMORTYPE_HEAVY then return true end end if Config.ArmorFilterSettings.ClothArmorIntricate == true then if itemtype2 == ARMORTYPE_LIGHT then return true end if itemtype2 == ARMORTYPE_MEDIUM then return true end end end end if Config.MaterialFilterSettings.LootCooking == true then if itemtype == ITEMTYPE_FLAVORING then return true end if itemtype == ITEMTYPE_INGREDIENT then return true end if itemtype == ITEMTYPE_FISH then return true end if itemtype == ITEMTYPE_LURE then return true end if itemtype == ITEMTYPE_SPICE then return true end end if Config.MaterialFilterSettings.LootAlchemy == true then if itemtype == ITEMTYPE_POISON_BASE then return true end if itemtype == ITEMTYPE_POTION_BASE then return true end if itemtype == ITEMTYPE_REAGENT then return true end end if Config.MaterialFilterSettings.LootClothing == true then if itemtype == ITEMTYPE_CLOTHIER_RAW_MATERIAL then return true end if itemtype == ITEMTYPE_CLOTHIER_MATERIAL then return true end if itemtype == ITEMTYPE_CLOTHIER_BOOSTER then return true end if itemtype == ITEMTYPE_ARMOR_TRAIT then return true end if itemtype == ITEMTYPE_WEAPON_TRAIT then return true end end if Config.MaterialFilterSettings.LootSmithing == true then if itemtype == ITEMTYPE_BLACKSMITHING_RAW_MATERIAL then return true end if itemtype == ITEMTYPE_BLACKSMITHING_MATERIAL then return true end if itemtype == ITEMTYPE_BLACKSMITHING_BOOSTER then return true end if itemtype == ITEMTYPE_ARMOR_TRAIT then return true end if itemtype == ITEMTYPE_WEAPON_TRAIT then return true end end if Config.MaterialFilterSettings.LootWood == true then if itemtype == ITEMTYPE_WOODWORKING_RAW_MATERIAL then return true end if itemtype == ITEMTYPE_WOODWORKING_MATERIAL then return true end if itemtype == ITEMTYPE_WOODWORKING_BOOSTER then return true end end if Config.MaterialFilterSettings.LootRunes == true then if itemtype == ITEMTYPE_ENCHANTING_RUNE_ASPECT then return true end if itemtype == ITEMTYPE_ENCHANTING_RUNE_ESSENCE then return true end if itemtype == ITEMTYPE_ENCHANTING_RUNE_POTENCY then return true end if itemtype == ITEMTYPE_ENCHANTING_BOOSTER then return true end end if Config.MaterialFilterSettings.LootFurnish == true then if itemtype == ITEMTYPE_FURNISHING_MATERIAL then return true end end if Config.GeneralFilterSettings.LootSoulGems == true then return true end -- CanBeResearched = CanItemLinkBeTraitResearched(itemlink) -- if CanBeResearched == true then -- d(LootManager.ManagerDebugMark.."Item can be researched!") -- return true -- end if value >= Config.GeneralFilterSettings.LootValue then if itemtype == ITEMTYPE_TRASH then return true end if itemtype == ITEMTYPE_TREASURE then return true end if itemtype == ITEMTYPE_TROPHY then return true end if itemtype == ITEMTYPE_FOOD then return true end if itemtype == ITEMTYPE_DRINK then return true end if itemtype == ITEMTYPE_TOOL then return true end if itemtype == ITEMTYPE_DYE_STAMP then return true end if itemtype == ITEMTYPE_DISGUISE then return true end if itemtype == ITEMTYPE_COSTUME then return true end if itemtype == ITEMTYPE_DEPRECATED then return true end if itemtype == ITEMTYPE_NONE then return true end if itemtype == ITEMTYPE_PLUG then return true end if itemtype == ITEMTYPE_SIEGE then return true end if itemtype == ITEMTYPE_SPELLCRAFTING_TABLET then return true end if itemtype == ITEMTYPE_MOUNT then return true end if itemtype == ITEMTYPE_CONTAINER then return true end if itemtype == ITEMTYPE_CONTAINER_CURRENCY then return true end if itemtype == ITEMTYPE_AVA_REPAIR then return true end end return false end Code:
function LootManager.LootItemIdentifier(itemnumber) local itemID,name,icon,amount,quality,value,isQuest,stolen = GetLootItemInfo(itemnumber) local itemlink = GetLootItemLink(itemID) local itemtype = GetItemLinkItemType(itemlink) local itemtrait = GetItemLinkTraitType(itemlink) if itemtype == ITEMTYPE_WEAPON then local itemtype = "Weapon" local itemtype2 = GetItemLinkWeaponType(itemlink) if itemtype2 == WEAPONTYPE_DAGGER then local itemtype2 ="Dagger" end if itemtype2 == WEAPONTYPE_SWORD then local itemtype2 ="One-Hand Sword" end if itemtype2 == WEAPONTYPE_HAMMER then local itemtype2 ="One-Hand Hammer" end if itemtype2 == WEAPONTYPE_AXE then local itemtype2 ="One-Hand Axe" end if itemtype2 == WEAPONTYPE_SHIELD then local itemtype2 ="Shield" end if itemtype2 == WEAPONTYPE_TWO_HANDED_SWORD then local itemtype2 ="Two-Hand Sword" end if itemtype2 == WEAPONTYPE_TWO_HANDED_HAMMER then local itemtype2 ="Two-Hand Hammer" end if itemtype2 == WEAPONTYPE_TWO_HANDED_AXE then local itemtype2 ="Two-Hand Axe" end if itemtype2 == WEAPONTYPE_BOW then local itemtype2 ="Bow" end if itemtype2 == WEAPONTYPE_FIRE_STAFF then local itemtype2 ="Firestaff" end if itemtype2 == WEAPONTYPE_FROST_STAFF then local itemtype2 ="Froststaff" end if itemtype2 == WEAPONTYPE_LIGHTNING_STAFF then local itemtype2 ="Lightningstaff" end if itemtype2 == WEAPONTYPE_HEALING_STAFF then local itemtype2 ="Healingstaff" end if itemtrait == ITEM_TRAIT_TYPE_WEAPON_CHARGED then local itemtrait = "Charged" end if itemtrait == ITEM_TRAIT_TYPE_WEAPON_DECISIVE then local itemtrait = "Decisive" end if itemtrait == ITEM_TRAIT_TYPE_WEAPON_DEFENDING then local itemtrait = "Defending" end if itemtrait == ITEM_TRAIT_TYPE_WEAPON_INFUSED then local itemtrait = "Infused" end if itemtrait == ITEM_TRAIT_TYPE_WEAPON_NIRNHORNED then local itemtrait = "Nirnhorned" end if itemtrait == ITEM_TRAIT_TYPE_WEAPON_POWERED then local itemtrait = "Powered" end if itemtrait == ITEM_TRAIT_TYPE_WEAPON_PRECISE then local itemtrait = "Precise" end if itemtrait == ITEM_TRAIT_TYPE_WEAPON_SHARPENED then local itemtrait = "Sharpened" end if itemtrait == ITEM_TRAIT_TYPE_WEAPON_INTRICATE then local itemtrait = "Intricate" end if itemtrait == ITEM_TRAIT_TYPE_WEAPON_ORNATE then local itemtrait = "Ornate" end end if itemtype == ITEMTYPE_ARMOR then local itemtype = "Armor" local itemtype2 = GetItemLinkArmorType(itemlink) if itemtype2 == ARMORTYPE_LIGHT then local itemtype2 ="Light" end if itemtype2 == ARMORTYPE_MEDIUM then local itemtype2 ="Medium" end if itemtype2 == ARMORTYPE_HEAVY then local itemtype2 ="Heavy" end if itemtrait == ITEM_TRAIT_TYPE_ARMOR_DIVINES then local itemtrait = "Divine" end if itemtrait == ITEM_TRAIT_TYPE_ARMOR_REINFORCED then local itemtrait = "Reinforced" end if itemtrait == ITEM_TRAIT_TYPE_ARMOR_IMPENETRABLE then local itemtrait = "Impenetrable" end if itemtrait == ITEM_TRAIT_TYPE_ARMOR_INFUSED then local itemtrait = "Infused" end if itemtrait == ITEM_TRAIT_TYPE_ARMOR_NIRNHONED then local itemtrait = "Nirnhorned" end if itemtrait == ITEM_TRAIT_TYPE_ARMOR_PROSPEROUS then local itemtrait = "Prosperous" end if itemtrait == ITEM_TRAIT_TYPE_ARMOR_TRAINING then local itemtrait = "Training" end if itemtrait == ITEM_TRAIT_TYPE_ARMOR_STURDY then local itemtrait = "Sturdy" end if itemtrait == ITEM_TRAIT_TYPE_ARMOR_WELL_FITTED then local itemtrait = "Well Fitted" end if itemtrait == ITEM_TRAIT_TYPE_ARMOR_INTRICATE then local itemtrait = "Cloth Intricate" end if itemtrait == ITEM_TRAIT_TYPE_ARMOR_INTRICATE then local itemtrait = "Smith Intricate" end if itemtrait == ITEM_TRAIT_TYPE_ARMOR_ORNATE then local itemtrait = "Ornate" end end if itemtype == ITEMTYPE_FLAVORING then local itemtype = "Flavoring" end if itemtype == ITEMTYPE_INGREDIENT then local itemtype = "Ingredient" end if itemtype == ITEMTYPE_FISH then local itemtype = "Fish" end if itemtype == ITEMTYPE_LURE then local itemtype = "Lure" end if itemtype == ITEMTYPE_SPICE then local itemtype = "Spice" end if itemtype == ITEMTYPE_TRASH then local itemtype = "Trash" end if itemtype == ITEMTYPE_TREASURE then local itemtype = "Treasure" end if itemtype == ITEMTYPE_TROPHY then local itemtype = "Trophy" end if itemtype == ITEMTYPE_FOOD then local itemtype = "Food" end if itemtype == ITEMTYPE_DRINK then local itemtype = "Drink" end if itemtype == ITEMTYPE_TOOL then local itemtype = "Tool"end if itemtype == ITEMTYPE_DYE_STAMP then local itemtype = "Dye Stamp" end if itemtype == ITEMTYPE_DISGUISE then local itemtype = "Disguise" end if itemtype == ITEMTYPE_COSTUME then local itemtype = "Costume" end if itemtype == ITEMTYPE_DEPRECATED then local itemtype = "Deprecated" end if itemtype == ITEMTYPE_NONE then local itemtype = "None" end if itemtype == ITEMTYPE_PLUG then local itemtype = "Plug" end if itemtype == ITEMTYPE_SIEGE then local itemtype = "Siege"end if itemtype == ITEMTYPE_SPELLCRAFTING_TABLET then local itemtype = "Spellcrafting Table" end if itemtype == ITEMTYPE_MOUNT then local itemtype = "Mount" end if itemtype == ITEMTYPE_CONTAINER then local itemtype = "Container" end if itemtype == ITEMTYPE_CONTAINER_CURRENCY then local itemtype = "Container Currency" end if itemtype == ITEMTYPE_AVA_REPAIR then local itemtype = "Ava Repair"end if itemtype == ITEMTYPE_BLACKSMITHING_RAW_MATERIAL then local itemtype = "Blacksmith Raw Material" end if itemtype == ITEMTYPE_BLACKSMITHING_MATERIAL then local itemtype = "Blacksmith Material" end if itemtype == ITEMTYPE_BLACKSMITHING_BOOSTER then local itemtype = "Blacksmith Booster" end if itemtype == ITEMTYPE_ARMOR_TRAIT then local itemtype = "Armor Trait" end if itemtype == ITEMTYPE_WEAPON_TRAIT then local itemtype = "Weapon Trait" end if itemtype == ITEMTYPE_ENCHANTING_RUNE_ASPECT then local itemtype = "Aspect Rune" end if itemtype == ITEMTYPE_ENCHANTING_RUNE_ESSENCE then local itemtype = "Essence Rune" end if itemtype == ITEMTYPE_ENCHANTING_RUNE_POTENCY then local itemtype = "Potency Rune" end if itemtype == ITEMTYPE_ENCHANTING_BOOSTER then local itemtype = "Enchanting Booster" end if itemtype == ITEMTYPE_CLOTHIER_RAW_MATERIAL then local itemtype = "Clothier Raw Material" end if itemtype == ITEMTYPE_CLOTHIER_MATERIAL then local itemtype = "Clothier Material" end if itemtype == ITEMTYPE_CLOTHIER_BOOSTER then local itemtype = "Clothier Booster" end if itemtype == ITEMTYPE_FURNISHING_MATERIAL then local itemtype = "Furnishing Material" end return itemID,name,icon,amount,quality,value,isQuest,stolen,itemtype,itemtype2,itemtrait end Code:
function LootManager.Debugger(funcID,num,itemnumber,lootitem) itemID,name,icon,amount,quality,value,isQuest,stolen,itemtype,itemtype2,itemtrait = LootManager.LootItemIdentifier(itemnumber) if funcID == 1 and Config.GeneralSettings.Debug == "Virtual" then d(LootManager.ManagerDebugMark.."Items Found "..num.." —") d("——————————————————————————") end if funcID == 2 and Config.GeneralSettings.Debug == "Virtual" then d(LootManager.ManagerDebugMark.."ID: "..itemID) d(LootManager.ManagerDebugMark.."Name: "..name) d(LootManager.ManagerDebugMark.."Amount: "..amount) d(LootManager.ManagerDebugMark.."Quality: "..quality) d(LootManager.ManagerDebugMark.."Gold: "..value) d(LootManager.ManagerDebugMark.."Quest: "..tostring(isQuest)) d(LootManager.ManagerDebugMark.."Stolen: "..tostring(stolen)) d(LootManager.ManagerDebugMark.."ItemType: "..itemtype) if itemtype == "Armor" then d(LootManager.ManagerDebugMark.."ArmorType: "..itemtype2) end if itemtype == "Weapon" then d(LootManager.ManagerDebugMark.."WeaponType: "..itemtype2) end d(LootManager.ManagerDebugMark.."Trait: "..itemtrait) if lootitem == true then d(LootManager.ManagerDebugMark.."Loot this: |c33ff00"..tostring(lootitem)) else d(LootManager.ManagerDebugMark.."Loot this: |cdc1f1f"..tostring(lootitem)) end d("——————————————————————————") end if funcID == 3 and Config.GeneralSettings.Debug ~= "Virtual" then d("GarbageHandler registered") end if funcID == 4 and Config.GeneralSettings.Debug ~= "Virtual" then d("GarbageHandler unregistered") end end Last edited by cOOLsp0T : 07/24/19 at 06:56 AM. Reason: Forgot something |
|
07/24/19, 07:52 AM | #4 |
I solved it by myself. Its a damn scoping, problem. thx anyway.
|
|
07/24/19, 08:08 AM | #5 |
If you define a local inside an if end it's ONLY known inside this block.
So if you check the itemtype outside the if end it will be alwas NIL. About improvements: Instead of reusing the same if end code several times you can use a table like this: Lua Code:
This will give you a boolean answer true/fals if the itemtype is allowed for your alchemy filter. Apply the same for others and you can even use your own table with String values as key for your itemInformation function / debug output. P.S. If the itemtype2 is the weapontype you should really name your variables like weapontype then instead or you'll confuse yoursef after a few weeks if you read your own code :-p Last edited by Baertram : 07/24/19 at 08:12 AM. |
|
07/24/19, 09:29 AM | #6 |
thx Baertram for your quick answer.
The itemtype2 var is, because I wouldnt make 2 seperate vars for armors and weapons, so I tried to merge. Last edited by cOOLsp0T : 07/24/19 at 09:30 AM. Reason: typo |
|
ESOUI » AddOns » AddOn Help/Support » Have Problems with Setting an Itemfilter |
«
Previous Thread
|
Next Thread
»
|
Display Modes |
Linear Mode |
Switch to Hybrid Mode |
Switch to Threaded Mode |
|
|