Download
(253 Kb)
Download
Updated: 06/08/18 04:20 PM
Pictures
File Info
Compatibility:
Summerset (4.0)
Updated:06/08/18 04:20 PM
Created:04/14/14 11:49 PM
Monthly downloads:525
Total downloads:1,565,942
Favorites:1,907
MD5:
Advanced Filters  Popular! (More than 5000 hits)
Version: 1.5.0.4
by: Randactyl, ingeniousclown
Finally, Advanced Filters! The default inventory has type filters, but they're still WAY too broad. This add-on fixes that!

Features:
  • Subfilters to find exactly what you're looking for!
  • Main inventory, personal bank, guild bank, guild store, vendors, and craft bag support!
  • Custom icon work that makes the add-on feel like it came with the game!
  • Empty subfilters are greyed out and inaccessible to help save you time searching!
  • Shortens the time you need to find an item in your inventory!
  • German, French, Russian, and Spanish localization! (some are partial, PM me for corrections/additions)
  • Extensible filter system for authors to create additional dropdown filters! (See included documentation for details)

Special thanks to:
  • birdfear - original icon work
  • mescaline - German translations
  • kaats, Ykses - French translations
  • sh4d0ff - Russian translations
  • Kwisatz - Spanish translations
  • vixion - additional icon work
  • sirinsidiator - additional icon work, translations, testing
  • Ayantir - translations, testing
  • Baertram - translations, testing

If you would like to further filter your quickslot items, I wholly recommend installing Mer Quickslot Filters or Mer Quickslot Filters - Split up consumables (drink, food, potion)!

Fully compatible with AwesomeGuildStore. If you would like to use Advanced Filters instead of AGS filters on the guild store sell tab, disable AGS' filters in its settings menu.

---

If you like my work and feel the urge to contribute, I'm always willing to accept in-game gold sent to @Randactyl

If you REALLY like my work and want to help me out with ESO Plus, I won't say no to Paypal donations
v1.5.0.4 - Baertram
- added function AdvancedFilters_RemoveDuplicateAddonPlugin
- fixed nil errors at stable and guild store

v1.5.0.3 - Baertram
- added subfilters for jewelry crafting/raw materials.
- fixed subfilter bar overlay issue at crafting stations.

v1.5.0.2 - Baertram
- emergency release of Baertram's Summerset version. I'll port over the fixes and features to the main branch as I see how they fit into other changes.

v1.5.0.1 - Randactyl
- updated libCommonInventoryFilters to version 1.9 (thanks sirinsidiator)
- updated french strings (thanks lexo1000)
- updated minimum API version to 100021 (ESO 3.2.x, Clockwork City)

v1.5.0.0 - Randactyl
- added subfilters to Materials and relevant craft bag filters for furnishing materials
- disabled Junk subfilters

v1.4.3.0 - Randactyl
- fixed tracking of an inventory table
- updated LibCustomMenu to version 4.3
- updated minimum API version to 100020 (ESO 3.1.x, Horns of the Reach)
- note: motif/style related filters have not been updated yet

v1.4.2.0 - Randactyl
- fix subfilter bar refresh function to handle subscriber bank
- updated LibMotifCategories-1.0
- updated minimum API version to 100019 (ESO 3.x, Morrowind)

v1.4.1.0 - Randactyl
- fixed conflict with Awesome Guild Store on the guild store sell tab. If you use AGS and want to use Advanced Filters while selling in a guild store, you need to disable AGS' filters in its settings menu.

v1.4.0.0 - Randactyl
- added jp strings (thanks, BowmoreLover)
- enabled dropdown filter for bound but tradeable items
- increased the maximum number of subfilters per bar to 12
- added subfilter for Master Writs under Consumables
- added subfilter group and subfilters for furnishings (note: it seems that most if not all items show up under the same subfilter. It remains to be seen if that is intended or if I messed up somewhere.)
- added ability for ITEMFILTERTYPE_ALL to receive addon filters
- added ability for addon filters to be registered after EVENT_ADD_ON_LOADED
- added ability for addon filters to pass a callback/string generator function (see readme and comments in the extrafilters directory and AF - Item Saver Filters for details)
- added dropdown for ITEMFILTERTYPE_ALL
- added subfilter for rare ingredients under Provisioning (Craft Bag)
- fixed LibFilters initialization
- general code/whitespace/comment cleanup
- switched to better crown subfilter texture
- fixed subfilter bar not hiding on quest tab
- removed disabling of vendor subfilters due to unreliability
- removed highlight texture from selected subfilter button
- updated LibFilters to version 2.0r3.0
- updated LibMotifCategories for Homestead relevance
- updated LibCustomTitles to version 18
- updated LibCustomMenu to version 4.2
- updated minimum API version to 100018 (ESO 2.7.x, Homestead)

v1.3.3.0 - Randactyl
- fixed an issue with BoP tradeable filter. If you're feeling adventurous and helpful, open AdvancedFilters.txt and remove the "## " from the beginning of the last line. You will then have a dropdown filter for bind on pickup items which are in a tradeable state in both the Weapons and Armor main filters. Let me know if it works!
- updated API version

v1.3.2.1 - ForgottenLight, Randactyl
- updated Russian localization
- if you're feeling adventurous and helpful, open AdvancedFilters.txt and remove the "## " from the beginning of the last line. You will then have a dropdown filter for bind on pickup items which are in a tradeable state in both the Weapons and Armor main filters. Let me know if it works! I'm currently burnt out on most activities which drop these.

v1.3.2.0 - silvereyes
- fixed specific case where subfilters can go missing from the craft bag

v1.3.1.2 - Randactyl
- updated API version

v1.3.1.1 - Randactyl
- updated LibFilters to version 2.0r2

v1.3.1.0 - Randactyl
ESO 2.4
- switched to LibCustomMenu method of adding entries to dropdowns
- added subfilters to the Junk tab (note, they don't work yet)
- switched to state change callbacks from handler prehooks
- went on a crusade against anonymous functions
- general performance improvements

v1.3.0.0 - Randactyl
ESO 2.4
- added support for the Custom Titles initiative
- added "Bait" subfilter to the craft bag "Provisioning" filter

v1.2.0.0 - Randactyl
ESO 2.4
- added GetItemLink from slot util function
- removed legacy code/safeguards
- consolidated assets folder
- added "New Motif" dropdown filter
- added "Motif Knowledge" dropdown filters
- added "Equipment Motif Categories" dropdown filters
- fixed raw style materials missing from craft bag smithing raw materials subfilter, removed craft bag style raw materials subfilter
- updated some non-English strings

v1.1.2.0 - Randactyl
ESO 2.3.9/2.4.1
- fixed specific case where VENDOR_SELL subfilters would not refresh the inventory list

v1.1.1.0 - Randactyl
ESO 2.3.9/2.4.0
- move inventory search bars to top right of inventory screens
- update libFilters-2.0r1 to remove conflict with original libFilters

v1.1.0.0 - Randactyl
ESO 2.3.9/2.4.0
- added subfilters to vendor buy
- moved search bar positions to bottom right of inventory screens (updated libCommonInventoryFilters to 1.3)
- add poison subfilter and related data
- updated libFilters to version 2.0r1
- improved subfilter refresh a great deal
- updated dropdown level filters so the reflect the leveling system used
- updated existing textures for heavy, medium, and light armor
- added LibMotifCategories1.0r1
- added Normal (9 racial styles), Rare (Barbaric, Primal, Ancient Elf, Daedric, Soul-Shriven), Alliance (AD, DC, EP, Imperial), and Exotic (every other chaptered style) dropdown filters to Materials -> Style Material
- added New dropdown filter to Materials -> Style Material (new rotates per patch and consists of the craftable styles introduced that patch)
- fixed enchanting rune filters
ESO 2.4.0
- added search bar for craft bag
- updated existing textures for Materials subfilters
- added craft bag subfilters
- added new textures for craft bag subfilters
- added New dropdown filter to Style -> All subfilters (new rotates per patch and consists of the craftable styles introduced that patch)

v1.0.2.0 - Randactyl
- fixed typo in variable name (thanks uladz)

v1.0.1.0 - Randactyl
- improved subfilter active state updates

v1.0.0.0 - Randactyl
- updated API version
- removed drinks from trophy subfilters
- complete refactor/reorganization of main code
- prep work for subfilters in more places
- added a context menu to the dropdown filter box with "Reset to All" and "Invert Dropdown Filter" options
- added click sounds to the dropdown filter

v0.9.2.0 - Randactyl
- fixed incorrect label on dropdown when a submenu item was selected
- fixed selected dropdown filter not being restored if the selected item was a submenu entry.

v0.9.1.0 - Randactyl
- fixed error when opening a dropdown with submenus

v0.9.0.0 - Randactyl
- refresh subfilter state when changing subfilters
- added support for submenus in the dropdown filter
- placed the level dropdown filters into a submenu
- improved filtering of (non)stolen trophies
- updated documentation for dropdown filter plugins

v0.8.5.1 - Ayantir, Randactyl
- added the "treasure" item type to Miscellaneous -> Fence
- updated libFilters to version 1.0r16.1

v0.8.5.0 - Randactyl
- added the "treasure" item type to Consumables -> Trophy
- updated almost all strings to use game provided translations
- localized provisioning dropdown filter strings
- moved raw style materials to Materials -> Style Material
- added filter Consumable -> Crown Item
- updated libFilters to version 1.0r16
- updated libCommonInventoryFilters to version 1.2

v0.8.4.0 - Randactyl
- added provisioning ingredient type dropdown filters previously found in Advanced Filters - Sous Chef Filters (that addon has been shelved)
- updated LibStub to 1.0r4
- updated libFilters to 1.0r15.2
- updated libCIF to 1.1
- updated API version

v0.8.3.0 - Randactyl
- added Nirnroot Wine to Miscellaneous -> Trophy
- included libCommonInventoryFilters for bug fixes and compatibility
- removed potential libFilters error for nil filter type
- added new veteran ranks to level filters (for ESO 2.1)
- added level filters to relevant consumables subfilters

v0.8.2.0 - Randactyl
- added fish to Consumable -> Trophy
- fixed a bug where one item would be missing from view when a subfilter was clicked. (Thanks, circonian)

v0.8.1.2 - Randactyl (circonian)
- updated libFilters library to 1.0r15
- changed registration to new, less spammy method

v0.8.1.1 - Randactyl
- some code refactoring
- started using libFilters' GetCurrentLAF function rather than registering filters for every LAF all the time
- mitigated a peculiar behavior reported by Briegh through updating to libFilters 1.0r14.1
- added missing German strings from mescaline

v0.8.1.0 - Randactyl
- (re)enabled ZOS inventory search boxes w/ fix for guild bank search box

v0.8.0.0 - Randactyl
- subfilters now function "independently"
- moved control construction to XML
- created separate subfliter groups for bag (which includes sell, mail, trade, fence, launder), bank, and guild bank
- updated LibStub library to 1.0r3

v0.7.8.0 - Randactyl
- updated README.md
- fixed Spanish localization
- removed unused code
- fixed subfilter "ALL" label to obey localization

v0.7.7.0 - Randactyl
- added "Reagent" and "Solvent" to the alchemy dropdown, per request
- added Crown Repair Kits to Consumables -> Repair

v0.7.6.0 - Randactyl
- updated included libFilters library to version 1.0r14
- fixed filters not functioning correctly at Fence and Launder interactions

v0.7.5.0 - Randactyl
- updated API version
- added "Fence" category under Miscellaneous for the items that are only good for selling to fences
- updated textures for all armor subfilters
- added new subfilter textures courtesy of vixion!
- replaced Armor -> Miscellaneous with Armor -> Vanity
- added Armor -> Clothing
- enabled dropdown filter for Miscellaneous -> Fence

v0.7.4.0 - Randactyl
- added metatables for better language compatibility
- added Spanish strings for base addon (thanks, Kwisatz!)
- added ability to include Spanish strings in third party filter plugins. Just include a table called "esStrings".
- updated embedded libFilters library to 1.0r13

v0.7.3.3 - Randactyl
- fix subfilters not activating when reopening the guild bank

v0.7.3.2 - Randactyl
- finally fix sorting woes at screens that aren't the player's inventory. Now, the filtering function is applied to every filter type no matter the onscreen situation. If this leads to performance degradation, I will continue to explore the previous option.

v0.7.3.1 - Randacyl
- fix for improper behavior in banks

v0.7.3.0 - Randactyl
- update to libFilters v1.0r11
-> this should solve problems related to slowdowns when used in conjunction with FCO ItemSaver or maybe even when used alone.

v0.7.2.0 - Randactyl
- add Dwemer Scrap to Blacksmithing, Clothing, and Woodworking subfilters
- add more checks and descriptive error messages to filter registration function. The "patch" that was uploaded yesterday made these conditions fail silently. This "error" had no impact on the average user - only someone who was writing a plugin filter and not following instructions.

v0.7.1b - Randactyl
- update API version

v0.7.1 - Randactyl
- Simplify registration of external filters by changing registration function to AdvancedFilters_RegisterFilter(table filterInformation). See included documentation for details.
- Rewrite subfilter dropdown filter composition to be more modular.

v0.7.0 - Randactyl
- Add global function AdvancedFilters_RegisterFilter(table callbackTable, integer filterType, string subfilterString, table enStrings, table deStrings, table frStrings, table ruStrings) to enable new extensible dropdown filters (see extrafilters\README.txt for details)
- Rewrite filter callback structure
- Rework item level dropdown filters
- Reorder items on subfilter row
- Remove Item Saver support from base addon. Download Advanced Filters - Item Saver Filters from "Other Files"

v0.6.5 - Randactyl
- Add dropdown filter for V13-V14 items.
- Fix level filters broken by Item Saver integration on some occasions.

v0.6.4 - Randactyl
- Add support for filtering out items not saved with Item Saver - option only shows up if Item Saver is installed, Item Saver v1.1.1+ required.

v0.6.3 - Randactyl
- Add support for RuESO with translations from sh4d0ff

v0.6.2d - Randactyl
- Update API version to 100009

v0.6.2c - Randactyl
- added German translations for the filters added in 0.6.2. Forgot to include these in 0.6.2b :0

v0.6.2b - Randactyl
- fixed visible items not refreshing when moving from a subfilter to "All"

v0.6.2 - Randactyl
- Generous refactoring and cleanup from the always helpful merlight - Advanced Filters no longer hooks ZO_ScrollList_UpdateScroll. This should reduce any potential errors.
- German localization updates from mescaline.
- Combined all enchanting glyphs into one subfilter. This new subfilter has a dropdown menu to further filter by glyph type. This subfilter needs localization. The new glyphs icon is from sirinsidiator's AwesomeGuildStore, check it out!
- A new "Tool" subfilter under Miscellaneous to contain ITEMTYPE_TOOL (eg lockpicks). This subfilter needs localization.
Known Issue: The dropdown menus on the weapons and armor subfilters do not show up under certain conditions. If the dropdown is missing, try opening a different filter that has subfilters (so not All, Quest, or Junk) and then going back to the tab that previously had the missing dropdown.

v0.6.1 - Randactyl
- Cleaned up level filter code using unpack() (Thanks, merlight!)
- Fixed rare fish not showing up in Miscellaneous -> Trophy
- Added Trophy subfilter to Consumables for the new collectible achievement items that drop as of 1.3.3


v0.6 - Randactyl
- Moved API version to 100008
- Removed depreciated ItemLink function calls and replaced them with new, more specific functions introduced in 100008
- Added item level filters to dropdown menus


v0.5.5 - Randactyl
-Rearranged code in AdvancedFilters.lua to prevent libFilters from throwing an error in a specific scenario (Thanks to QuadroTony for the report)
- Known Issue: "Wet Gunny Sacks" do not show up in Consumables -> Containers. This is a filtering issue on ZOS's part. I've put in a bug report to get it fixed, but in the meantime you have to access your "Wet Gunny Sacks" from All Items or Miscellaneous -> All
(Thanks again to QuadroTony for the report!)

v0.5.4
-Fixed for Racial Motifs; they should now show under "Scrolls" again (special thanks to Randactyl for making my life really easy on this one!)


v0.5.3
-Updated to API 100007 and added requisite README
-Fixed enchanting rune filters. As far as I could tell, everything else worked fine.


v0.5.2b
-Thanks to ckaotik, the error message should finally be gone.
-Cleared up some translation issues with the SI_STRINGs
-Updated to libFilters1.0r7


v0.5.2
-The "Daggers" filter should now show up under 1-handers
-Attempting to use the SI_STRINGS for translation purposes, + some German translation changes.
-Updated to libFilters1.0r6


v0.5.1b
-Fixed the enchanting dropdown filters


v0.5.1
-Finished adding the custom icons for "Miscellaneous"
-Added a dropdown filter for Enchanting runes.
-Updated to libFilters1.0r5


v0.5.0
-Added some custom icons for the "Miscellaneous" tab from birdfear.
-Changed the filters for the new API functions for Weapon and Armor types. As a result, weapon and armor filtering should now be 100% reliable. As an added bonus, there is now a new filter to separate Healing and Destruction staves, and each applicable weapon filter has a dropdown box for further type filtering. These still need to be translated.
-Added a small buffer for one of the spammy events.


v0.4.1b
-Updated the manifest (because I didn't last time)
-Small fix for the "Style" icon under "Materials".


v0.4.1
-Added custom "Food" icon and icons for the whole "Materials" set from birdfear!
-Updated to libFilters 1.0r4


v0.4.0
-Updated to libFilters 1.0r3 (This may fix the error messages on reload)
-Disabled and greyed out the buttons for empty subfilters
-Item filtering for armor should perform better, but I doubt it's 100% accurate. If you want 100% accurate filtering, spam Zenimax and ask them for API calls for ArmorType and WeaponType. (No really, please do this! It will help Research Assistant too!)
-When changing guild banks, your subfilter is now reset to "ALL"
-Fixed a silly bug dealing with changing inventories. You probably never noticed it, because I didn't :)
-Cleaned up the code a bit.


v0.3.3b
-Fix for nil value error in libFilters.
-Fixed filters not showing up when changing inventories.


v0.3.3
-Added equip type dropdown to "All" under "Armor". Note that the dropdown still is linked to the button.
-Exported filtering logic to libFilter library.


v0.3.2
-Updated the manifest this time
-Cleaned up Consumable subfilter icons
-Fixed French translation thanks to Ykses


v0.3.1
-Fixed some translation errors
-Dropdown boxes are now translated with everything else
-"Scroll" subfilter is no longer white.


v0.3.0
-Added some custom art
-Added mouse-over and clicked functionality for icons that have it
-Fixed the quest inventory bug
-Added two new subfilters to "Miscellaneous": "Siege" and "Soul Gem"
-Added tooltip localization for both French and German
-Fixed the bug where the filters would sometimes not show up when switching between the bank and inventory.
-Added sub-filter specific dropdowns to most of the Armor subfilters
-Added a search filter to the top of the inventory. ...well, ZO added it, I just unhid it and moved it.


v0.2.1
-Fixed a bug that caused users who weren't using ItemSaver to see errors and breakage in the bank and guild bank.


v0.2.0
-Changed the Armor filters.
-Temporarily removed the dropdowns from the Armor tab until I change them for their new function.
-Added support for already-existing filters (only one I know of is the "IsItemBound" filter for trading and mailing)
-Added optional dependencies for Inventory Grid View and Item Saver to make sure they load first and hopefully get rid of any strange compatibility issues between them.


v0.1.2
-Added ArmorType dropdown
-ArmorType dropdown made me remove safety for existing additional filters... soulbound filter for the windows that use it will now be overwritten again
-Fixed Hands filter
-Added the first piece of art from a real artist!
-Reverted the "ALL" button change from previous patch.


v0.1.1
-Added Bow and Staff subfilters for Weapons
-Added Booster items to their respective crafting material subfilters
-Removed the "ALL" subfilter from each set. "ALL" is still the default. To switch from a subfilter back to "ALL", simply click the icon again.
-Attempted to take care of the case where an additional filter would exist. Untested, so this may break in a big way. This should only come into effect when you have a soulbound item and open up a trade window or mail window. If you test this, please let me know.


v0.1.0
-Initial release
Optional Files (0)


Archived Files (77)
File Name
Version
Size
Uploader
Date
1.5.0.3
252kB
Randactyl
05/23/18 06:25 PM
1.5.0.2
238kB
Randactyl
05/21/18 11:52 AM
1.5.0.1
229kB
Randactyl
11/13/17 07:01 PM
1.5.0.0
229kB
Randactyl
10/19/17 05:55 PM
1.4.3.0
229kB
Randactyl
08/14/17 10:05 AM
1.4.2.0
229kB
Randactyl
05/22/17 02:25 AM
1.4.1.0
230kB
Randactyl
02/21/17 04:45 PM
1.4.0.0
230kB
Randactyl
02/06/17 05:53 AM
1.3.3.0
221kB
Randactyl
10/04/16 05:23 PM
1.3.2.1
221kB
Randactyl
08/18/16 09:03 AM
1.3.2.0
220kB
Randactyl
08/05/16 12:30 PM
1.3.1.2
220kB
Randactyl
08/01/16 11:10 AM
1.3.1.1
220kB
Randactyl
07/28/16 05:58 PM
1.3.1.0
218kB
Randactyl
07/17/16 09:03 PM
1.3.0.0
217kB
Randactyl
06/08/16 10:25 AM
1.2.0.0
214kB
Randactyl
06/07/16 12:06 PM
1.1.2.0
268kB
Randactyl
05/02/16 02:43 PM
1.1.1.0
268kB
Randactyl
05/01/16 03:17 PM
1.1.0.0
268kB
Randactyl
04/29/16 09:51 PM
1.0.2.0
238kB
Randactyl
03/13/16 09:22 PM
1.0.1.0
238kB
Randactyl
03/13/16 08:57 PM
1.0.0.0
238kB
Randactyl
03/07/16 05:48 AM
0.9.2.0
237kB
Randactyl
02/28/16 04:53 PM
0.9.2.0
237kB
Randactyl
02/27/16 03:46 PM
0.9.0.0
237kB
Randactyl
02/22/16 09:11 PM
0.8.5.1
231kB
Randactyl
01/18/16 08:18 PM
0.8.5.0
231kB
Randactyl
11/02/15 03:20 PM
0.8.4.0
231kB
Randactyl
08/31/15 01:32 AM
0.8.3.0
229kB
Randactyl
08/11/15 04:03 PM
0.8.2.0
227kB
Randactyl
07/17/15 02:39 PM
0.8.1.2
227kB
Randactyl
07/16/15 06:27 PM
0.8.1.1
227kB
Randactyl
07/16/15 03:46 PM
0.8.1.0
227kB
Randactyl
07/09/15 12:23 PM
0.8.0.0
226kB
Randactyl
07/07/15 07:24 PM
0.8.0.0
226kB
Randactyl
04/07/15 01:53 AM
0.7.7.0
227kB
Randactyl
03/25/15 07:26 PM
0.7.6.0
227kB
Randactyl
03/09/15 02:51 PM
0.7.5.0
227kB
Randactyl
03/03/15 11:27 AM
0.7.4.0
177kB
Randactyl
01/22/15 11:30 PM
0.7.3.3
176kB
Randactyl
12/17/14 01:56 AM
0.7.3.2
175kB
Randactyl
12/03/14 05:30 PM
0.7.3.1
175kB
Randactyl
12/01/14 12:32 AM
0.7.3.0
175kB
Randactyl
11/30/14 12:26 AM
0.7.2.0
176kB
Randactyl
11/06/14 11:27 AM
0.7.1b
175kB
Randactyl
11/03/14 10:10 AM
0.7.1
176kB
Randactyl
10/11/14 01:21 AM
0.7.0
175kB
Randactyl
10/09/14 06:09 AM
0.6.5
172kB
Randactyl
10/05/14 04:45 PM
0.6.4
172kB
Randactyl
10/02/14 02:21 PM
0.6.3
172kB
Randactyl
09/29/14 08:07 PM
0.6.2d
171kB
Randactyl
09/20/14 11:34 AM
0.6.2c
171kB
Randactyl
08/26/14 06:54 PM
0.6.2b
171kB
Randactyl
08/26/14 06:47 PM
0.6.2
192kB
Randactyl
08/26/14 12:27 PM
0.6.1
192kB
Randactyl
08/12/14 05:08 PM
0.6
192kB
Randactyl
08/04/14 12:41 PM
0.5.5
192kB
Randactyl
07/27/14 03:30 PM
0.5.4
165kB
ingeniousclown
07/01/14 10:53 PM
0.5.3
165kB
ingeniousclown
06/26/14 09:10 PM
0.5.2b
156kB
ingeniousclown
06/07/14 11:28 AM
0.5.2
156kB
ingeniousclown
06/06/14 08:20 PM
0.5.1b
156kB
ingeniousclown
06/02/14 08:25 AM
0.5.1
156kB
ingeniousclown
06/01/14 03:16 PM
0.5.0
145kB
ingeniousclown
05/25/14 01:24 PM
0.4.1b
109kB
ingeniousclown
05/21/14 07:34 AM
0.4.1
109kB
ingeniousclown
05/20/14 10:39 PM
0.4.0
51kB
ingeniousclown
05/08/14 12:01 AM
0.3.3b
50kB
ingeniousclown
05/04/14 11:20 PM
0.3.3
50kB
ingeniousclown
05/04/14 09:43 PM
0.3.2
46kB
ingeniousclown
04/28/14 06:17 PM
0.3.1
56kB
ingeniousclown
04/27/14 01:01 PM
0.3.0
60kB
ingeniousclown
04/27/14 11:12 AM
0.2.1
9kB
ingeniousclown
04/23/14 07:24 AM
0.2.0
9kB
ingeniousclown
04/22/14 07:07 PM
0.1.2
8kB
ingeniousclown
04/18/14 08:23 PM
0.1.1
6kB
ingeniousclown
04/16/14 12:02 AM
0.1.0
5kB
ingeniousclown
04/14/14 11:49 PM


Post A Reply Comment Options
Unread 07/16/15, 02:38 PM  
circonian
AddOn Author - Click to view AddOns

Forum posts: 613
File comments: 804
Uploads: 27
Originally Posted by Randactyl
Do you think there is something better that can be done in libFilters? Or is this just something to live with (the ZOS hackery with faking things and whatnot)?
One other thing I noticed. This may just be something I'm misunderstanding about how AF works & I did not try to track down why, but:

When you click on a filter all of these filterTypes are registered 6 times EACH!!

Warning: Spoiler


Why is it that everytime this function is called:
Warning: Spoiler

It appears to be unregistering & registering everything. Every inventory has its own additional Filter (isn't that what libFilters uses), so why not pass in which inventory your trying to update & ONLY unregister/register filters for that inventory?
Last edited by circonian : 07/16/15 at 02:43 PM.
Report comment to moderator  
Reply With Quote
Unread 07/16/15, 02:11 PM  
Wandamey
Guest

Join Date: Not Yet
Forum posts: 0
File comments: 0
Uploads: 0
Originally Posted by Randactyl
okay, 0.8.1.1 is up. I updated libFilters with the reduced wait time for inventory refreshes, however it only mitigated the issue. That said, you either have to go pretty crazy fast to produce the error or be playing the game on an actual potato
Is it a contest or a challenge?
can I lower my resolution, and speed up my mouse or is it cheating?
Report comment to moderator  
Edit/Delete Message Reply With Quote
Unread 07/16/15, 02:05 PM  
circonian
AddOn Author - Click to view AddOns

Forum posts: 613
File comments: 804
Uploads: 27
Originally Posted by merlight
Originally Posted by circonian
Maybe when it attempts the "PickupInventoryItem" the
Lua Code:
  1. PLAYER_INVENTORY:UpdateList(INVENTORY_BACKPACK)
which was called by your code is still running and somehow triggers the error.
It can't "still be running", it all happens in one thread.
By that I meant his code is calling the update while the games separate code is calling the "E" Withdraw code, so they are not happening in the same thread are they? Or maybe, but that was what I meant.
Report comment to moderator  
Reply With Quote
Unread 07/16/15, 02:03 PM  
circonian
AddOn Author - Click to view AddOns

Forum posts: 613
File comments: 804
Uploads: 27
Originally Posted by Randactyl
Do you think there is something better that can be done in libFilters? Or is this just something to live with (the ZOS hackery with faking things and whatnot)?
I did not dig around anymore than locating that function & examining it, but I can tell you one other thing I noticed & a suggestion. I noticed that if you add a d(...) to check what updates are getting called:
Warning: Spoiler

When the user clicks one of the games inventory tab buttons you will notice the following updates getting processed:

There is no need for ANY of these. There is no reason to run a manual update in this situation for any inventory. Explained in more detail below.

When a user clicks one of your subfilters you will notice that:

There are a lot of unecessary updates running here as well. That was just switching the subFilter in the backpack. But it updates the bakcpack, the bank, guildbank, & the backpack again. I don't know why, I didn't try to track it down.

First the bank & guildbank updates are unecessary.
Second there is no reason to update the backpack twice. Although I do understand why its happening, it gets run when you unregister the old filter & then run again when you register the new filter...however there is no need for that. Off of the top of my head there is only 1 reason to manually run an updateList when you unregister a filter (listed below).
  • When you unregister a filter, if your not registering a new one, it is probably because the user pressed one of the Inventory tab (game) filter buttons and you are removing filters so all items are shown. In this case the game is already going to update the list because the games inventory tab filter was clicked so there is no need to run one yourself (as long as you run your unregister code before the inventoryTabBtns callback fires, example below).
  • If that happened because the user clicked your "All" subFilter, this would be the only time I can think of that you would need to manually update the inventory list yourself when you unregister a filter.
Otherwise everytime you unregister a filter you are registering a new one and therefore there is no need to update the list after the unregister. You don't need to update the list until the new filter is registered.


Also, what is the purpose of the delay anyhow?
Originally Posted by Randactyl
I was thinking along the lines of Circonian after I caught onto libFilters before I took lunch. But I think I will leave at least the 10ms delay in just incase redundant updates get scheduled too quickly.
I don't see delaying the updates as a fix...just fix the code so it only updates when it is necessary then there are no redundant updates.

As for needing to unregister the filters when an inventory tab button is pushed, just hook those buttons & run your unregister code before the buttons callback fires, then you don't need to update the list, the game will do it on its own, example:
Warning: Spoiler


As for needing to unregister the filters & update the list, like when the user clicks the "All" filter button, the easiest fix (with least amount of needed changes) I can recommend would be something like:
Lua Code:
  1. function libFilters:UnregisterFilter( filterTag, filterType, bool forceUpdate)
  2. function libFilters:RegisterFilter( filterTag, filterType, filterCallback, bool forceUpdate)
This way it will only force an update when you pass it forceUpdate == true
  • You would ONLY pass forceUpdate == true to your unregisterFilter function when the user clicks the "All" filter.
  • You would only need to pass forceUpdate == true to your register function when the user clicks one of your "other" subFilters.
  • You would never need to update the list yourself when the user clicks one of the "games" inventory tab buttons.

Every other time when the user clicks one of your subFilters, so you just need to change the filter, you could just make a call to unregister (with forceUpdate == false) then a call to register the new filter with forceUpdate == true. So it only updates once.

But all of those other extra updates that are running now (like the bank & guild bank examples i listed above) also need to be tracked down to figure out why they are running & eliminate them.
Last edited by circonian : 07/16/15 at 02:10 PM.
Report comment to moderator  
Reply With Quote
Unread 07/16/15, 01:56 PM  
Randactyl
 
Randactyl's Avatar
AddOn Author - Click to view AddOns

Forum posts: 251
File comments: 462
Uploads: 17
okay, 0.8.1.1 is up. I updated libFilters with the reduced wait time for inventory refreshes, however it only mitigated the issue. That said, you either have to go pretty crazy fast to produce the error or be playing the game on an actual potato

Whoever asked for that fishing subfilter I still need to investigate. Gotta motivate myself to go fishing first
Report comment to moderator  
Reply With Quote
Unread 07/16/15, 01:18 PM  
Wandamey
Guest

Join Date: Not Yet
Forum posts: 0
File comments: 0
Uploads: 0
Originally Posted by merlight
Originally Posted by Wandamey
Thats why i would expect zo_callLater (blablafunc, 0) and blablafunc() behave exactly the same but they don't.
blablafunc is actually delayed with a callLater of 0 ms. So i wonder if it's next frame + ms timer instead of just the ms timer or if it's something else (like waiting that all the other stuff running is over)
I wouldn't expect that, zo_callLater is a good name. It conveys what it does - calls stuff later. The delay means "not before N ms elapsed". Would you expect zo_callLater(func, -86.4e6) to call func yesterday? No
i wouldn't expect it from func() either
anyway i'm happy that it solved all of my problems, but i wish i knew why, so i can go faster to the point next time.
Report comment to moderator  
Edit/Delete Message Reply With Quote
Unread 07/16/15, 12:50 PM  
merlight
AddOn Author - Click to view AddOns

Forum posts: 671
File comments: 213
Uploads: 12
Originally Posted by Wandamey
Thats why i would expect zo_callLater (blablafunc, 0) and blablafunc() behave exactly the same but they don't.
blablafunc is actually delayed with a callLater of 0 ms. So i wonder if it's next frame + ms timer instead of just the ms timer or if it's something else (like waiting that all the other stuff running is over)
I wouldn't expect that, zo_callLater is a good name. It conveys what it does - calls stuff later. The delay means "not before N ms elapsed". Would you expect zo_callLater(func, -86.4e6) to call func yesterday? No
Report comment to moderator  
Reply With Quote
Unread 07/16/15, 11:51 AM  
Wandamey
Guest

Join Date: Not Yet
Forum posts: 0
File comments: 0
Uploads: 0
Originally Posted by Randactyl
What do you mean by "does something"? The second parameter is the time in ms to wait to do the stuff in the function passed in the first parameter. So a 0ms delay will end up with the passed function to running as soon as possible.
...
Thats why i would expect zo_callLater (blablafunc, 0) and blablafunc() behave exactly the same but they don't.
blablafunc is actually delayed with a callLater of 0 ms. So i wonder if it's next frame + ms timer instead of just the ms timer or if it's something else (like waiting that all the other stuff running is over)

the exemple i have is :
i hook a button that refreshes a panel. then i have to change the colors on the panel (colorfunction() ): if i just use colorfunction() after the refresh function, it's too soon and the panel is not recolored. if I use zo-calllater(colorfunction,10) i see the old color before the new one but with zo_calllater(colorfunction, 0) it's recolored and i dont see the old color at all.
Report comment to moderator  
Edit/Delete Message Reply With Quote
Unread 07/16/15, 11:25 AM  
Randactyl
 
Randactyl's Avatar
AddOn Author - Click to view AddOns

Forum posts: 251
File comments: 462
Uploads: 17
Originally Posted by Wandamey
Originally Posted by merlight
Originally Posted by Briegh
15ms is close enough and is a nice "divisible by 5" which gives me warmer fuzzies than 17ms, which is prime and... ick.
Whaaat?! Prime numbers are cooool! Except seventeen. I hate seventeen.

edit: I suggested 10ms because that's the default minimum frame time set in UserSettings.txt
does this explain why when i use a zo_callLater(blabla, 0 ) it actually does something?
What do you mean by "does something"? The second parameter is the time in ms to wait to do the stuff in the function passed in the first parameter. So a 0ms delay will end up with the passed function to running as soon as possible.

Further, if I'm not mistaken, zo_callLater is a simplified version of the RegisterForUpdate function from the event manager.

These would do the same thing:
Lua Code:
  1. zo_callLater(function() --[[stuff to do in 10ms]] end, 10)
  2.  
  3. EVENT_MANAGER:RegisterForUpdate("my_deferred_function", 10, function()
  4.         EVENT_MANAGER:UnregisterForUpdate("my_deferred_function")
  5.         --[[stuff to do in 10ms]]
  6.     end)

RegisterForUpdate is a little more involved, but you have more functionality if you need it. You could also not unregister your update and keep your code running every x ms.
Report comment to moderator  
Reply With Quote
Unread 07/16/15, 08:57 AM  
Wandamey
Guest

Join Date: Not Yet
Forum posts: 0
File comments: 0
Uploads: 0
Originally Posted by merlight
Originally Posted by Briegh
15ms is close enough and is a nice "divisible by 5" which gives me warmer fuzzies than 17ms, which is prime and... ick.
Whaaat?! Prime numbers are cooool! Except seventeen. I hate seventeen.

edit: I suggested 10ms because that's the default minimum frame time set in UserSettings.txt
does this explain why when i use a zo_callLater(blabla, 0 ) it actually does something?
Report comment to moderator  
Edit/Delete Message Reply With Quote
Unread 07/16/15, 07:43 AM  
merlight
AddOn Author - Click to view AddOns

Forum posts: 671
File comments: 213
Uploads: 12
Originally Posted by Briegh
15ms is close enough and is a nice "divisible by 5" which gives me warmer fuzzies than 17ms, which is prime and... ick.
Whaaat?! Prime numbers are cooool! Except seventeen. I hate seventeen.

edit: I suggested 10ms because that's the default minimum frame time set in UserSettings.txt
Last edited by merlight : 07/16/15 at 07:47 AM.
Report comment to moderator  
Reply With Quote
Unread 07/16/15, 06:15 AM  
Briegh

Forum posts: 0
File comments: 18
Uploads: 0
Originally Posted by Randactyl
Originally Posted by merlight
Originally Posted by circonian
Maybe when it attempts the "PickupInventoryItem" the
Lua Code:
  1. PLAYER_INVENTORY:UpdateList(INVENTORY_BACKPACK)
which was called by your code is still running and somehow triggers the error.
It can't "still be running", it all happens in one thread. But otherwise you're right. I tried increasing the delay to ridiculous 2000ms, and here's what I think is going on:

1. click subfilter, update is scheduled
2. move mouse over some item (while it's still showing the old list)
3. 2000ms elapsed -> UpdateList is called -> ZO_ScrollList_Commit -> and this one fakes CheckRunHandler(self, "OnMouseExit"), rebuilds the list and then fakes CheckRunHandler(self, "OnMouseEnter"). That OnMouseEnter probably sets up the keybind strip, but as it was called from libFilters' deferred ListUpdate, is deemed insecure
4. now you have a different item under mouse cursor
5. hit 'E' -> UI error guaranteed
6. move your mouse away from the item and back, the game with call OnMouseEnter from a secure context, and 'E' will work afterwards

Although lowering the delay doesn't seem like a proper solution, I'd say go for it. 10ms will basically mean "run it as soon as you can, i.e. in the next frame if you please". Hopefully nobody moves their mouse that fast... or have single-digit frame rate
I was thinking along the lines of Circonian after I caught onto libFilters before I took lunch. But I think I will leave at least the 10ms delay in just incase redundant updates get scheduled too quickly.

You have the best grasp of ZOS's code I know of. Do you think there is something better that can be done in libFilters? Or is this just something to live with (the ZOS hackery with faking things and whatnot)?
I've had to do things like this in other languages when doing graphics programming and, failing a "call me back as you draw the next frame" callback or hook, I typically set a roughly 1/60th second delay. 15ms is close enough and is a nice "divisible by 5" which gives me warmer fuzzies than 17ms, which is prime and... ick.
Report comment to moderator  
Reply With Quote
Unread 07/16/15, 05:15 AM  
merlight
AddOn Author - Click to view AddOns

Forum posts: 671
File comments: 213
Uploads: 12
Originally Posted by Randactyl
Do you think there is something better that can be done in libFilters? Or is this just something to live with (the ZOS hackery with faking things and whatnot)?
IIRC when I wrote that RequestInventoryUpdate function, I was pondering these options:
1) Anticipate that there might be more update requests in rapid succession, and simply defer them all. This is what it does now.
2) Add API to enable/disable automatic inventory updates. It could either be an optional parameter to libFilters:Register/UnregisterFilter, or a new function libFilters:SetInventoryAutoRefresh(enable). This would allow you to reg/unreg multiple filters and only trigger one update, but two add-ons would still cause two updates.
3) Check if an update happened recently, if not update right away, otherwise defer. Combined with 2) it might work pretty well, but it has one nasty drawback - you'd never know whether your call did an inventory update immediately, or just scheduled for later.
Last edited by merlight : 07/16/15 at 05:16 AM.
Report comment to moderator  
Reply With Quote
Unread 07/15/15, 07:26 PM  
Randactyl
 
Randactyl's Avatar
AddOn Author - Click to view AddOns

Forum posts: 251
File comments: 462
Uploads: 17
Originally Posted by merlight
Originally Posted by circonian
Maybe when it attempts the "PickupInventoryItem" the
Lua Code:
  1. PLAYER_INVENTORY:UpdateList(INVENTORY_BACKPACK)
which was called by your code is still running and somehow triggers the error.
It can't "still be running", it all happens in one thread. But otherwise you're right. I tried increasing the delay to ridiculous 2000ms, and here's what I think is going on:

1. click subfilter, update is scheduled
2. move mouse over some item (while it's still showing the old list)
3. 2000ms elapsed -> UpdateList is called -> ZO_ScrollList_Commit -> and this one fakes CheckRunHandler(self, "OnMouseExit"), rebuilds the list and then fakes CheckRunHandler(self, "OnMouseEnter"). That OnMouseEnter probably sets up the keybind strip, but as it was called from libFilters' deferred ListUpdate, is deemed insecure
4. now you have a different item under mouse cursor
5. hit 'E' -> UI error guaranteed
6. move your mouse away from the item and back, the game with call OnMouseEnter from a secure context, and 'E' will work afterwards

Although lowering the delay doesn't seem like a proper solution, I'd say go for it. 10ms will basically mean "run it as soon as you can, i.e. in the next frame if you please". Hopefully nobody moves their mouse that fast... or have single-digit frame rate
I was thinking along the lines of Circonian after I caught onto libFilters before I took lunch. But I think I will leave at least the 10ms delay in just incase redundant updates get scheduled too quickly.

You have the best grasp of ZOS's code I know of. Do you think there is something better that can be done in libFilters? Or is this just something to live with (the ZOS hackery with faking things and whatnot)?
Report comment to moderator  
Reply With Quote
Unread 07/15/15, 06:25 PM  
merlight
AddOn Author - Click to view AddOns

Forum posts: 671
File comments: 213
Uploads: 12
Originally Posted by circonian
Maybe when it attempts the "PickupInventoryItem" the
Lua Code:
  1. PLAYER_INVENTORY:UpdateList(INVENTORY_BACKPACK)
which was called by your code is still running and somehow triggers the error.
It can't "still be running", it all happens in one thread. But otherwise you're right. I tried increasing the delay to ridiculous 2000ms, and here's what I think is going on:

1. click subfilter, update is scheduled
2. move mouse over some item (while it's still showing the old list)
3. 2000ms elapsed -> UpdateList is called -> ZO_ScrollList_Commit -> and this one fakes CheckRunHandler(self, "OnMouseExit"), rebuilds the list and then fakes CheckRunHandler(self, "OnMouseEnter"). That OnMouseEnter probably sets up the keybind strip, but as it was called from libFilters' deferred ListUpdate, is deemed insecure
4. now you have a different item under mouse cursor
5. hit 'E' -> UI error guaranteed
6. move your mouse away from the item and back, the game with call OnMouseEnter from a secure context, and 'E' will work afterwards

Although lowering the delay doesn't seem like a proper solution, I'd say go for it. 10ms will basically mean "run it as soon as you can, i.e. in the next frame if you please". Hopefully nobody moves their mouse that fast... or have single-digit frame rate
Last edited by merlight : 07/15/15 at 06:26 PM.
Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump:

Support AddOn Development!

You have just downloaded by the author . If you like this AddOn why not consider supporting the author? This author has set up a donation account. Donations ensure that authors can continue to develop useful tools for everyone.