Download
(109 Kb)
Download
Updated: 10/22/23 04:35 PM
Pictures
File Info
Compatibility:
Endless Archive (9.2.5)
base-game patch (9.1.5)
Necrom (9.0.0)
Scribes of Fate (8.3.5)
Firesong (8.2.5)
Lost Depths (8.1.5)
High Isle (8.0.0)
Updated:10/22/23 04:35 PM
Created:09/11/18 09:42 AM
Monthly downloads:151
Total downloads:26,511
Favorites:54
MD5:
Rulebased Inventory  Popular! (More than 5000 hits)
Version: 2.31
by: TaxTalis, demawi, otac0n

Automated item distribution/action management (Bag, Bank, Junk, Use, Deconstruct, Sell, Fence, Launder, Destroy, Notify, CraftBag, FcoisMarking), where YOU rule! (this means: YOU have to define the rules yourself) (>>Wiki<<)

What does it do?
After installing it, it does nothing. It’s simple as that.
You have to define rules for different tasks which then are executed automatically. Please see the Wiki for further documentation (after that you can ask your questions here in the comment section or at RbI-ESO Discord)

Automated Tasks are:
  • Bank-related (task starts when opening the Bank UI)
    • BagToBank moves items from Backpack to Bank (also with Homebank-Support)
    • BankToBag moves items from Bank to Backpack (also with Homebank-Support)
  • Itemupdate-related (checks the specific item, when it comes in changes its status, like 'junk'-flag)
    • Junk marks items as 'junk' (there also exists a consistency mode option for UnJunk)
    • Destroy destroys defined items
    • Use uses items (like type('fish'), type('container') or type('recipe'))
    • Notifiy notifies the user, when a defined item is looted
    • CraftToBag moves items from CraftBag to Backpack (also triggers after eso automatic to craft bag transfer)
    • FCOISMark marks items with FCO Item Saver markings (there also exists a consistency mode option for FCSOISUnmark)
  • Vendor-related (task starts when opening the Store or Fence UI)
    • Sell sells items
    • Fence fences items
    • Launder launders items
    • Buy buys items
  • CraftingStation-related (task starts when opening the crafting station UI or the respective tab)
    • Deconstruct deconstructs items
    • Extract extracts items
    • Refine refines items

Other automation gimmicks:
  • Auto open bank/shop/assistant
  • Auto close bank/shop/craft (at station and or assistant) after RbI work done
  • Auto despawn assistant

Needed libraries
Recommended libraries
Supported optional addons and libraries
  • FCOIS (check and set item-markers)
  • CraftStore (adds functions to check what your others characters need to learn or already learned)
  • LibPrice (adds given price informations)
  • AutoCategory (check the autoCategory-names)
  • LibSets (check types of the set)
  • WritWorthy (adds costpervoucher-function)
  • LibTextFilter (support for LibTextFilter's extensive syntax in addition for 'freetext'-parameters)
  • AlphaGear (adds alphagear-functions)
  • Dolgubons Lazy Writ Crafter (compatibility with working queue and station closing)

Special mentions/thx to the following addons for some functions:
Special Key Features
  • take actions on specific amounts of an item, not only on a whole stack (e.g. keep only 100 lockpicks in inventory)
  • check if your current character is the first one of a defined list in need of an item for research or a recipe to learn (so you can "hand down" a recipe if your main crafter doesn't need it to your secondary and further) (CraftStore needed)
  • save profiles and load them on multiple characters
  • a notification will include pricing (provided by LibPrice if installed), count of vouchers for masterwrits and the count you have in backpack, bank and craftbag
  • ...

YOU ARE USING THIS ADDON AT YOUR OWN RISK!
I will not be hold responsible for any damage or inconvenience this addon might cause for any reason.
This said, I have tested this addon on my main account for quite some time and try to do everything I can to make your experience with this addon as good and as safe as possible.
I admit, this is not an addon for everyone. There is no interface defining the rules for you by clicking buttons, you have to insert them by text. (See the mentioned Wiki for this.
A wrongly defined (but valid) rule may cause severe damage when fencing, destroying or deconstructing as the items will never return after such an action was taken.


Features and fixes in development (or at least considered)
  • ... see Wiki-Roadmap for further information. Currently it's a lot but we're always interested in your ideas.

Cumulative change log for version 2.31
  • added: AwesomeGuildStore integration. Recommended to use a rule reference, like `rule('Recipes for Main')`
  • re-fixed: text filter for `tag` function (sorry!)

Cumulative change log for version 2.30.2
  • references to the removed function IsInTutorialZone have themselves been removed.

Cumulative change log for version 2.30.1
  • bug fix for tag()

Cumulative change log for version 2.30.0
  • added characterLevel(), characterLevelMin(...), and characterLevelMax(...) functions.
  • added hasQuest() function, using quest name. ('Glitter and Gleam', etc.)
  • added characterName() function (similar to isCharacter(), but supports e.g. creator(characterName()))
  • added 'my_house' to ZoneTypes.

Cumulative change log for version 2.29.13
  • prevent unconstrained purchase by the Buy task.

Cumulative change log for version 2.29.12
  • removed references to FISHING_MANAGER for compatibility with upcoming releases
  • fixed: buy interaction now updates cache to prevent duplicate purchases

Cumulative change log for version 2.29.11
  • added buy interaction along with supporting functions: buyItemPrice, buyStackPrice
  • updated functions to support buy interaction: countStack, countStackMax
  • fixed: round displayed currencies to match guild store

Cumulative change log for version 2.29.10
  • fixed: countBag-function returned nil instead of 0 for items not present in bag

Cumulative change log for version 2.29.9
  • fixed: notify-task without LibPrice installed made problems

Cumulative change log for version 2.29.8
  • fixed: WritWorthy addon can return a nil matList, so canCraftMasterwrit had problems with some witches-recipes/writs

Cumulative change log for version 2.29.7
  • fixed: the new LibPrice dependency within the "price" function broke the safety function (thx@Sensei27)

Cumulative change log for version 2.29.4/2.29.5/2.29.6
  • fixed: under some circumstances zo_strformat(SI_UNIT_NAME, charName) does not uppercase the first character so for the mutichar-api we're now using zo_strformat("<<C:1>>", charName) (thx@punkfairie)
  • fixed: reconstructionCost wrongly returned a boolean for non reconstructable items, now it will return RbI.NaN (thx@Thiana)

Cumulative change log for version 2.29.3
  • added all currencies to loot informations
  • fixed targetBank with named chests

Cumulative change log for version 2.29.2
  • Fixed quest-cache error for masterwrit-handling, which occurs when LibCraftText isn't installed
  • Added default-argument for price-function. When there is no price. price will return NaN, while price(value()) will return the npcVendor price.
  • countBank can now also be used for homebanks
  • ItemInspector-Fix for inspecting an itemLink (there was a problem with autoCategory throwing a nil-error)

Cumulative change log for version 2.29.1
  • Fixed intern caching problem for bank2bag,deconstruction,sell tasks

Cumulative change log for version 2.29.0
  • Lightweight currency-transfer settings
  • Fixed craftingExtractBonus-function for enchanting (thx@altlavista)
  • New task/functionality for homebanks. This comes with 2 options
    • Target Mode: within BankToBag/BagToBank you can specify the target bank via targetBank-functionality
    • Task Mode: for every homebank (1-10) will be added a new task-pair HomebankXToBag/BagToHomebankX
  • New functions:
    • needForWrit() returns whether the item is needed for a crafting writ. This also includes masterwrits. (Addon-Dependency: LibCraftText)
    • needForWritCount() returns how much of the item is needed for a crafting writ. This also includes masterwrits. (Addon-Dependency: LibCraftText)
    • mountLevel(mountSkill) returns the current mount training level for stamina, capacity and speed
    • mountLevelMin(mountSkill, charNames) returns the minimum of the specified mount training level over all given chars
    • mountLevelMax(mountSkill, charNames) returns the minimum of the specified mount training level over all given chars
    • needMountLevel(mountSkill, charNames) returns if an of the given characters has not maxed the given mount training level
    • needMountLevelInOrder(mountSkill, charNames) returns true for the first character who hasn't maxed the given mount training level yet
    • task(taskName) if someone wants to unify some tasks in one rule
    • tradeableTemporarily() aka. tradeableTemp() returns true whether the item is temporarily tradeable
    • tradeableTemporarilyWithGroupMember() aka. tradeableGroup() returns true whether the item is temporarily tradeable with a member of the current group.

Cumulative change log for version 2.28.1
  • Fixed Quickslotted

Cumulative change log for version 2.28.0
  • Fixed autocategory function with casesensitivy=on
  • removed "OnQuest" as option for AutoOpenStore, as return-quest-dialog-options are indistinguishable from normal chatter for e.g. undaunted pledges
  • New functions:
    • zoneType(zoneTypeNames) returns true whether we're in a given zoneType (like "pve", "pvp", "dungeon"...)
    • groupSize() returns the current size of the group
    • groupRole(groupRoleNames) returns true whether we're in a given groupRole

Cumulative change log for version 2.27.2/2.27.3
  • fix for ItemInspector when CraftStore isn't installed

Cumulative change log for version 2.27.1
  • Fixed auto-close for controllerUI

Cumulative change log for version 2.27.0
  • Constant UI: As like rules now also constants can be defined. In rules they can be used via the new constant(constantName)-function. (This can be used e.g. to specify a specific character order.)
  • craftingType characteristic is now also determined for masterwrits
  • fixed function "craftingRank"s first argument: before it took an integer value, now it's corrected to crafttypeName
  • New functions:
    • All functions can now have an itemLink as first argument. When the first argument is identified as itemLink, it will be cut off and will be set as ctx.item.link (while ctx.item.bag and ctx.item.slot will be set to nil) for this function-call.
    • constant(constanName): use a predefined constant
    • needForDailyWrit(): returns true whether the item is needed for a crafting quest
    • needForDailyWritCount(): returns how much of the item is needed to fullfill a crafting quest. You could use: "needForWrit() and countBackpack('<', needForWritCount())" in Bank2Bag which ensures that you're pulling not more materials for writs than you need
    • inArmory(): return whether the item is part of an armory build
    • armorybuild(buildNames): return whether the item is part of one of the given buildNames
    • getRefined() which will return an itemLink, which can be used as parameter for other functions
    • reconstructionCost() will return the transmutation crystal costs for a reconstruction of the item
    • alphaGearBuild(buildNames) checks if the item is in the given alpha-gear-build referenced by build-name
    • alphaGearBuildNumber(buildIndex) checks if the item is in the given alpha-gear-build reference by index
  • New timesaver settings:
    • Auto open bank/shop/assistant with different options. Additionally with defining a prevent key.
    • Auto close bank/shop/craft with different options after RbI has finished. Additionally with defining a prevent key.
    • Auto despawn assistant: also despawn assistant after auto close.
  • Plugin system for other multi-character knowledge provider beside CraftStore.
  • RuleInspector now differs between Syntax and Unknown-term errors.
  • checked new version 8.0 "HighIsle" compability.

Cumulative change log for version 2.26.0/2.26.1
  • Fixed an error which occured with DLWC and/or long TaskDelay setting

Cumulative change log for version 2.26.0/2.26.1
  • Optimized loot-handling after container-use
  • Now all bags emitting an OnItemUpdate after specific status changes (also like FCOISMark or junk operations). Enhanced the performance for OnItemUpate.
  • Settings-Menu sightly changed in the task-section.
  • Compability with DolgobonLazyWritCrafter: waiting for DLWC to finish. RbI runs only when DLWC doesn't closes the station. So immediate DLWC and immediate RbI should be compatible now.
  • Auto-Data-Import for functions type and stype. Some keys have slightly changed.
    • type: armor_booster -> booster_armor
    • stype: removed "s_"-prefixes
    • stype: s_eventcontainer -> container_event
  • functions added:
    • needCraftingLevelInOrder: if the character you're logged in is the first one who has a craftingLevel (depending on the item) < 50 it will return true
    • craftingRankCount, which will counts how many characters have the same rank as the required rank for the item. With that we can determine if a ressource is need for daily quests or not. The first argument can be optional the craftingRank otherwise the requiredCraftingRank of the item will be used.
    • collectible: returns true when the item is a collectible item (like a set-item or a stylepage)
    • collected: returns true when an isCollectible already unlocked
    • tradeable: returns true when the item isn't bound in any way

Cumulative change log for version 2.25.0
  • Support for the new deconstruction assistant (thx @AndASM for code and testing)

Cumulative change log for version 2.24.9
  • Settings-Menu: Changed layout and added checkbox, when anyone don't want to use/see "ruleset"-template functionality.
  • Problem with FCOIS 2.2.5 fixed (thx @AndASM for a quickfix)
  • Refactoring: Eso event listening only after complete addon initialization.
  • Changed OnItemUpdate-task order. It's now FCOISMark, Junk, Use, Destroy. So Junk now can react on FCOISMarks.

Cumulative change log for version 2.24.8
  • under some circumstances (like using a container with a treasure map, while having the same treasure map already in the inventory) the UseTask took a long time (~80sec for the 5 retries) till it reports the failure, that the item can not be used. This should be registered much faster now (~5-6sec for the 5 retries).

Cumulative change log for version 2.24.7
  • for (custom-user) functions: enriched the ctx-object with ctx.task = {} and ctx.item = {bag = bag,slot = slot,link = itemLink} which will be completely reset accordingly to their lifecycle.

Cumulative change log for version 2.24.6
  • fixed filter comparison functionality for integer based functions like setId, id, instanceid..

Cumulative change log for version 2.24.5
  • fixed RbI.ConsistencyCheck at the beginning, when also FCOItemSaver is used (thx @AndyDrew for the hint)
  • removed itemLink from Iteminspector, istead the name will be shown

Cumulative change log for version 2.24.4
  • fixed incorrect profile initialization (which could occur under some circumstances)
  • fixed itemdata for the tag-function => cut of encoded language specific pronouns like "^f"

Cumulative change log for version 2.24.2+2.24.3
  • fixing colorized message output

Cumulative change log for version 2.24.1
  • fixed canCraftMasterwrit when no knowledge is needed. Added holidaywrit for stype function.

Cumulative change log for version 2.24.0
  • Selectable chat message color
  • Add task-option for Junk/FCOISMark tasks to also run their counterpart/reverse tasks (when checking an item, on manually task run/test and initial item-check) So we have two task types:
    • one-way marking: like Junk is/was initially designed. Additional manually markings won't be reverted.
    • two-way marking: implicit UnJunk/UnMark tasks will also be executed. Manually markings will be reverted.
  • rule-content limitation to 2000, because eso will not save greater content.

Cumulative change log for version 2.23.3
  • ItemInspector: corrected output for fcoisMarker
  • Fixed: after using and looting a container some consumables weren't checked for further tasks

Cumulative change log for version 2.23.2
  • When there are no rules specified, also the opposite task (UnJunk or FCOISUnmark) should not be called. Accidentally this was the case for new items and the item startup-check.

Cumulative change log for version 2.23.1
  • FCOISMark-tasks now using the constant icon name, so instead of fcoisMarker(1) we're using fcoismarker('lock') now. Just run a test with a wrong marker name and the RuleInspector will show you all static ids and language dependent names.
  • added scrollable for task-selection

Cumulative change log for version 2.23.0
  • added function cancraftmasterwrit, which determines if the current character has everything (knowledge and materials) for a masterwrit (needs addon WritWorthy)
  • support for anonym custom user functions...
    • added function call which will execute a lua-function and returns the return value of the function, like: call(function() d(ctx.itemLink) return false end) or call(function() return IsItemJunk(ctx.bag, ctx.slot) end)
    • populated the global to the ruleExecutionEnvironment. So global functions like IsItemJunk can be used.
    • populated a table-variable 'ctx' to the ruleExecutionEnvironment. So ctx.itemLink, ctx.bag, ctx.slot, ctx.station, ctx.taskName can be used.
    • added setting for activating case-sensitivity for rules. So we can reach all global-functions (and use variables like ctx.itemLink). Normally rules will be lowercased before execution. (After activating it, you have to use the lowercase or the official camel-case function names.)
    • refactored and generalized the multi-character functions (needTraitInOrder, needTrait, needLearnInOrder, needLearn, craftingLevelMin, craftingLevelMax, craftingRankMin, craftingRankMax). The refactoring will also reducing the introducing effort for other multi-character knowledge provider like CraftStore.
  • added task FCOISMark tasks, which automatically sets Fcois-Marker
  • functions id, instanceId, craftingrankRequired, glyphMinLevel and glyphMinCP can now used with arguments and works with arguments as a filter-function. So we can simplify something like id() == 2 or id() == 3 to id(2, 3)
  • added id print out for ItemInspector
  • change function fcoisMarker, when it's used without any argument it will not throw an error anymore. Instead it checks, whether if any marker exists. Additional now it also takes icon-ids (1-45) as argument, like fcoismarker(13) for the first dynamic icon-marker. Strings and iconIds can also be mixed.
  • optional item check after login (can be activated via settings), which checks the following tasks for the backpack: Junk (+Unjunk), Use, Destroy, FCOISMark (+Unmark). So it's the same as you would hit "Run" button for all of these tasks.
  • added "not companion()" as precondition for junk-task

Cumulative change log for version 2.22.4
  • deconstruction task: fixed test-run preview

Cumulative change log for version 2.22.3
  • fixed destroy task execution, when there are no junk or use-task rules defined

Cumulative change log for version 2.22.2
  • added loot-information, for use-task when the item is a container.

Cumulative change log for version 2.22.1
  • fixed: under certain conditions the use-action-output did not trigger

Cumulative change log for version 2.22.0
  • added 'use' task (will be released as 'beta')
    • currently I have tested following itemtypes: fish, container, currency_container, recipe, motif (are there more interesting use-types?)
    • usages will be delayed, when interacting elsewhere (like opened bank/mail/store, swimming, combat, looting)
    • fish-usage also will be delayed when running, because it needs an animation, that won't be executed when running
    • support for automated looting containers, with respecting transmutation crystal limit
  • new function 'usable()', which is used as precondition for the new 'use' task
  • added ItemInspector context menu for itemLinks (like chatLinks, guildtradinghouses, lootwindows, mailattachments)
  • added missing static key (SPECIALIZED_)ITEMTYPE_CONTAINER_CURRENCY for type and sType

Cumulative change log for version 2.21.0
  • added language independent shortnames for function trait. So trait-names like 'training', 'aggressive' can be used regardless of the language and regardless of whether it is armor, weapon or jewelry. Like trait('aggressive') or trait('training')
  • fixed data structure for data-types, especially language dependent for data-type 'trait'. Problem: Different traits (like armor_aggressive, jewelry_aggressive) that are mapping on the same key-name (like aggressive) currently will be overwritten
  • test method dumpWhen(<boolean>, ...) now returns the first argument instead of generally 'false'. For the generally 'false' return value it now gives dumpWhenF(<boolean>, ...)
  • ignoring 'do not translate' in given eso-translations. So they can not be found in dataTypes (like equipType) anymore.

Cumulative change log for version 2.20.0
  • optimized clipboard with title/footer and colorized content, which decides between language dependency and independency.
  • ItemInspector: grouped item charasteristics for gear and crafting-stuff.
  • ItemInspector: added function-listing at the end, which non-parameter functions will return true for an item
  • setId now also works as a filter so setId(1,2,3) will return true/false and setId() without argument will return the setId of the item as it was before.
  • on the other hand the following previous filter functions now return their value when using it without parameters: name(), setName(), creator()
  • workaround for a eso-bug at enchanting station, where a creation crafting-sound wants to be played, on extraction.

Cumulative change log for version 2.19.1
  • fixed ischaracter-function

Cumulative change log for version 2.19.0
  • fixed crowngems-soulgemtype for non-english-clients (they were processed as empty)
  • added filterType-function, which can itself have mutliple values for an item (like "armor" and "companion"), if only one argument matches one of the rule inputs the function will return true
  • added simplification function companion() for "filterType('companion')"
  • added companion trait types (aggressive...)

Cumulative change log for version 2.18.2
  • Fixed ItemInspector throwing error when not having CraftStore installed

Cumulative change log for version 2.18.1
  • Fixes the character-name validation
  • craftType(...) is not a simplifaction of "gearCraftingType(...) or recipeCraftingType(...)" anymore. It now works on craftingTypeGet()-function, which also delivers craftingType for raw jewelrytraits.

Cumulative change log for version 2.18.0
  • When running a rule test, the items from the craftbag also will be included now
  • changed gear() from "not equipType('none')" to "not equipType('none', 'poison', 'costume')"
  • added craftingTypeGet-Retrieval for "material_raw_jewelrytrait", because GetItemLinkCraftingSkillType returns 0 for them. Traits can not be assigned to craftingType in general, like armor-traits or weapon-traits.
  • New functions...
    • craftingTypeGet():string, Determines the craftingType of an item. Is used internally as default for the following crafting-functions.
    • craftingExtractBonus():int[0-3], which looks at the crafting skillline regarding extract/deconstruct skill
    • craftingRank():int[0-10], returns the rank of the craftingType
    • craftingRankMin(List<Charnames>):int[0-10], returns the minimum craftingRank over all given characters.
    • craftingRankMax(List<Charnames>):int[0-10], returns the maximum craftingRank over all given characters.
    • craftingRankRequired():int, which determines the required crafting rank for a material item
    • cSkillSpent(championStarName):int, returns the skill points spent on this star
    • cSkill(championStarName):int, return, if it is a slotable star it returns the skill points spent on this star, otherwise 0. So it returns only really used skill points.
    • cSkillSlotted(championStarName):bool, returns, whether the skill is currently slotted
    • cSkillSlotable(championStarName):bool, returns, whether the skill is 'TypeSlotable' and has enough points.
    • cSkillTypeSlotable(championStarName):bool, returns, whether the skill can be slotted in general
  • added more data for the ItemInspector including 'setId' and 'setName'
  • Hint: The refinement task with a rule with "cSkillSlotted('meticulousdisassembly') and craftingExtractBonus() == 3" ensures that you refine only with the best possible results. It works also with deconstruction/extraction, but of course for this tasks we have to define what gear/glyph should be deconstructed/extracted in the first place.

Cumulative change log for version 2.17.0
  • Optimized error handling and better feedback to the user due to Stacktracing!! for the rule/function environment (inclusive the list of used arguments), with hints what is wrong and which should be used instead. Just write and test a wrong rule stype("bla") or stttttype() or completely emtpy rule to see it :) Works also with new "rule"-function (see below) (btw.: Max-Stacktrace size is currently set to 30)
  • New functions...
    • gearCraftingType(<craftingTypes>). Select gear for a given crafting-type. (like gearCraftingType("woodworking"))
    • recipeCraftingType(<craftingTypes>). Select recipes for a given crafting-type. (like recipeCraftingType("blacksmithing"))
    • craftingType(<craftingTypes>), simplification function for "gearCraftingType(...) or recipeCraftingType(...)"
    • craftingLevel(optionalCraftingType):int[0-50] same as skilllinelevel (which is now marked as deprecated), but allow to leave out the argument. The "craftingType" (gear and recipes) will be automatically determined from the item.
    • craftinglevelmin(<charNames>):int[0-50], craftinglevelmax(charNames):int[0-50]. Returns the "craftinglevel" over all given characters (Requires CraftStore addon)
    • simplification function gear() for not equipType("none")
    • simplification function fragment() for sType("key_fragment", "recipe_fragment", "runebox_fragment", "collectible_fragment", "upgrade_fragment")
    • simplificationfunction glyph() for type("glyph_armor", "glyph_jewelry", "glyph_weapon")
    • rule("ruleName"):bool (an allias for rule is "_", so _("myRule") is also fine), which will call the given rule.
  • Test functions... (functions for testing purposes)
    • dump(output-expression) and dumpWhen(boolean-expression, output-expression), like dump(craftingType()) or dumpWhen(not craftingType("none"), craftinglevel()). When testing the rule, the outputs will written for each testing item.
    • ensure("rule-expression") like ensure("gear()"). Will throw an error when wrong items reach the ensurance function.
  • Renaming for rules. This will rename the rule itself and update the references in characters/profiles and rulesets. But it can not update the names when the rule is used from another rule via rule("myRule1")-function.

Cumulative change log for version 2.16.1
  • fixed an issue when laundering craftbag materials while having active esoplus

Cumulative change log for version 2.16.0
  • Trigger
    • Junk/Destroy-tasks are also triggered when an item state change (not only for new items). So now "junked()" can be used in a destroy rule and we can react on manually-junked items by the user.
    • CraftToBag-task now also triggers after the game had run his auto-transfer-to-craftbag-routine.
  • Character-related and CraftStore rules
    • Motif/style support for needlearn(...) and needlearninorder(...) including stylepages, -chapters, and -books
    • Introduced a inner-variable "defaultchars", which is automatically filled with all your characternames. So we can use 'needlearn(defaultchars)' (same for needlearninorder, needtraitinorder, needtrait) [The feature for self defining this variable is in the pipe.]
    • When using needlearninorder and needtraitinorder without an argument, the 'defaultchars'-list will be used (The default for needlearn and needtrait remains with the current logged in character).
    • A hint will be given, when using '...inorder'-functions with only one charname argument. Performance-wise it would be better to use the function without 'inorder'.
    • Character names will now ensure that all character data are correctly written and also available in craftstore. If you're getting an missingCraftStoreCharacter error, you have to relog into the specified character.
  • Item inspection via context menu
    • Fixed the output and inner-variable for style() combined with monstersets. Now it's really "undaunted".
    • Now all valid values will be shown (the fixed key-values and also the language dependent ones, which were introduced with version 2.15.1)
    • Errors now will be printed to clipboard
  • Clipboard-UI
    • Item inspector now prints the output to this separate "clipboard"-window (where you can scroll and strg+c).
    • Errors are also will be printed into this clipboard. Additionally argument-errors will also print all valid arguments.
  • Updated some tooltips in general settings (p.e. "Safety Rule" tooltip now shows directly the inner safety rule and to which tasks it will be applied)
  • Checked Blackwood API compatibility

Cumulative change log for version 2.15.3
  • fixed taskStartOutput setting not being used, thanks Friday_The13_rus!

Cumulative change log for version 2.15.2
  • fixed FCOIS issue when ControllerUI is enabled but FCOIS (which wouldn't work) isn't active or even installed

Cumulative change log for version 2.15.1
  • updated for Flames of Ambition API
  • added checking for ControllerUI which would make FCOIS functions unsound
  • new general setting: immediate execution at crafting stations. you now don't have to click on the deconstruction or refinement tab to start the task! just enable in menu
  • added function reconstructed() for getting items which where crafted via transmutation
  • added functions esoplus() and ischaracter() implemented by MegwynW
  • function inputs are now gathered from within the game where possible. Thus it is in your clients language and for now I won't provide a list of those. Please use the context menu to get the correct inputs. The previous data is left as legacy data and your rules will work normally. But new e.g. styles like "welkynar" (yes long time no update to the data) and sTypes like "toy" are added now, but exactly these will be in your clients language!

Cumulative change log for version 2.10.3
  • corrected unforeseen consequences of quickslotted function as the value needed to be stored in item lookup to be save to interleave tasks
  • excluded ingame-locked items from junking as it isn't possible anyway
  • excluded non-sellable items from selling

Cumulative change log for version 2.10.0
  • added function quickslotted (brilliant idea (and even implementation) by Random!)

Cumulative change log for version 2.9.2
  • for materials level function now returns highest craftable gear level
  • for materials cp function now returns highest craftable gear champion point level
  • for raw materials level and cp functions will refer to the materials refined form
  • added cp and level to context menu output

Cumulative change log for version 2.8.0
  • updated for Markarth API
  • added function freeSlots
  • added function setCollection
  • added function setItemCollected

Cumulative change log for version 2.7.0
Cumulative change log for version 2.6.0
  • needTrait and needLearn functions now support "no input" to check current character only

Cumulative change log for version 2.5.0
  • updated for Stonethorn API
  • added FCOIS marker to context menu output
  • corrected return of "locked"-function now correctly taking FCOIS "lock" into account

Cumulative change log for version 2.4.0
  • updated for Greymore API
  • updated usage of LibCustomMenu (thanks Baertram!)
  • fixed renamed function of LibSets
  • added function skillLineLevel
  • corrected typo in input data (corwnitem -> crownitem, corwnrepair -> crownrepair)
  • fixed file encoding in manifest
  • fixed error in FCOIS dependency

Cumulative change log for version 2.3.0
  • countbackpack/bank/craftbag will now return count when no input is given
  • replaced PreHookHandler with new SetHandler function (thanks sirinsidiator!)

Cumulative change log for version 2.2.1
  • fixed error on opening housebank

Cumulative change log for version 2.2.0
  • added function motifKnown
  • corrected testing of rule now also including items in subscriberbank

Cumulative change log for version 2.1.0
  • added Task CraftToBag which is executed on Bank visit and fetches items from craftbag to backpack
  • added simplification-functions "material" etc. (Wiki: Functions without input)
  • item-functions "name", "setName" and "creator" now support LibTextFilter (optional)
  • added context menu button in inventory to print most of the item's data for reference (requires LibCustomMenu) (optional)
  • fixed erroneous item-functions


Cumulative change log for version 2.0.0
  • Rules and Settings will be lost when updating to 2.0.0
  • Backup settings for reference by copying SavedVariables/RulebasedInventory.lua.
  • Be willing to rewrite your rules and recreate your profiles...
  • OR DO NOT UPDATE TO 2.0.0!
  • Complete rewrite
  • new rule syntax (sorry, for the now mandatory rewrite of rules)
  • added task for refinement
  • deconstruction now uses the game's multi-deconstruct feature
  • introduced RuleSets (two-leveled set of rules)
  • tasks can now have a RuleSet instead of a Rule (so, multiple rules per task instead of one!)
  • added support for LibSets and LibPrice
  • huge performance improvements (at least for me, tested on i7-7700k, GTX1080ti, 16gb DDR4)


Cumulative change log for version 1.6.2
  • Update 2.0.0 is right around the corner
  • Rules and Settings will be lost when updating to 2.0.0
  • Backup settings for reference by copying SavedVariables/RulebasedInventory.lua.
  • Be willing to rewrite your rules and recreate your profiles...
  • OR DO NOT UPDATE TO 2.0.0!


Cumulative change log for version 1.6.1
  • removed libstub (thank's Beartram!)

Cumulative change log for version 1.6.0
  • removed rulestring-colorization for output as it didn't work correctly anyway and furthermore could cause a game crash

Cumulative change log for version 1.5.2
  • Updated for API 100028
  • Source is now available at https://gitlab.com/taxtalis/rulebased-inventory, wiki there might be used in the future

Cumulative change log for version 1.5.1
  • Fixed an error with writworthy integration when ttc was not found

Cumulative change log for version 1.5.0
  • Updated for API 100027
  • renamed 'schematic' (derived from constant's name SPECIALIZED_ITEMTYPE_RECIPE_ENCHANTING_SCHEMATIC_FURNISHING) to 'praxis' (ingame name)
  • added writworthy integration with wwMatCost and wwMatCostPerVoucher (thx to ziggr)
  • added functions itemsetname and itemsetnamematch to filter for setnames

Cumulative change log for version 1.4.2
  • fixed usage of AutoCategory function

Cumulative change log for version 1.4.1
  • added general option for a message when starting a task
  • added support for AutoCategory
  • added function: autocategory("category1",...)
  • fixed multiple bugs which occurred on a full bag
  • fixed test of deconstruct
  • fixed test of notification not using an unsaved rule
  • fixed an issue where in bagCache the count of an item would not be updated

Cumulative change log for version 1.2.2
  • added filters for events to not listen to unnecessary ones
  • rewrite of action- and event-queue
  • rewrite of action execution
  • rewrite of bagCache and generation of actions from task
  • rewrites for integration of LibAsync to reduce runtime per frame for less lag
  • API bump for Murkmire

Cumulative change log for version 0.10.1
  • dropped library because of instability: LibLoadedAddons
  • functions fcoismarker and fcoismarkermatch now support the custom names for fcois markers
  • safe rule switch for deconstruct now has the tooltip it deserves
  • events (junk/notification/destroy) now only are accepted when items were added to the bag to reduce lag
  • fixed notification to try to notify about already again empty slots (like loot containers directly extracted by other addons)
  • optimized events (junk/notification/destroy) to only create a cache of the whole bag if necessary to further reduce lag

Cumulative change log for version 0.8.0
  • tasks are only executed if a rule was defined
  • output now shows intricate and ornate symbols
  • added itemdata: fcoisismarked (replaces fcoislocked)
  • added itemdata: fcoismarker
  • added function: fcoismarker
  • added function: fcoismarkermatch

Cumulative change log for version 0.6.1
  • fixed variables leaking into global namespace (thanks Votan!)
  • added German translation
  • added itemdata: tags
  • added function: itemtag
  • added function: itemtagmatch
  • added itemdata: reagenttraits
  • added function: reagenttrait
  • added function: reagenttraitmatch
  • minimum delay and timeout lowered

-Version 0.4.2 was initial release-
Archived Files (84)
File Name
Version
Size
Uploader
Date
2.30.2
105kB
otac0n
08/24/23 01:04 PM
2.30.1
105kB
otac0n
06/19/23 05:03 PM
2.30.0
105kB
otac0n
06/18/23 09:04 PM
2.29.13
110kB
otac0n
05/07/23 09:49 AM
2.29.12
110kB
otac0n
05/02/23 08:45 PM
2.29.11
104kB
otac0n
03/19/23 05:26 PM
2.29.10
102kB
TaxTalis
02/05/23 07:07 AM
2.29.9
103kB
demawi
11/06/22 10:23 AM
2.29.8
102kB
demawi
11/02/22 04:15 PM
2.29.7
102kB
demawi
08/29/22 06:13 PM
2.29.6
102kB
demawi
07/19/22 01:40 PM
2.29.5
102kB
demawi
07/17/22 05:10 AM
2.29.4
102kB
demawi
07/16/22 04:34 AM
2.29.3
102kB
demawi
07/14/22 05:11 AM
2.29.2
102kB
demawi
07/07/22 04:22 AM
2.29.1
102kB
demawi
07/01/22 04:30 PM
2.29.0
103kB
demawi
06/23/22 02:29 PM
2.28.1
96kB
demawi
06/06/22 01:11 PM
2.28.0
96kB
demawi
05/22/22 09:44 AM
2.27.3
92kB
demawi
05/16/22 02:31 AM
2.27.2
92kB
demawi
05/15/22 01:37 PM
2.27.1
92kB
demawi
05/11/22 02:14 PM
2.27.0
92kB
demawi
05/10/22 02:16 PM
2.26.2
76kB
TaxTalis
04/24/22 02:06 PM
2.26.1
75kB
demawi
04/23/22 11:55 AM
2.26.0
75kB
demawi
04/23/22 11:20 AM
2.25.0
71kB
demawi
04/10/22 11:51 AM
2.24.9
71kB
demawi
04/06/22 02:50 PM
2.24.8
70kB
demawi
02/02/22 11:07 AM
2.24.7
70kB
demawi
01/26/22 07:21 PM
2.24.6
70kB
demawi
01/19/22 03:20 PM
2.24.5
70kB
demawi
12/04/21 05:47 AM
2.24.4
70kB
demawi
09/06/21 05:43 AM
2.24.3
70kB
demawi
08/12/21 02:49 AM
2.24.2
70kB
demawi
08/10/21 10:36 AM
2.24.1
70kB
demawi
07/31/21 09:04 AM
2.24.0
70kB
demawi
07/30/21 04:02 PM
2.23.3
69kB
demawi
07/17/21 08:23 AM
2.23.2
69kB
demawi
07/15/21 05:07 PM
2.23.1
69kB
demawi
07/15/21 04:45 PM
2.23.0
69kB
demawi
07/15/21 07:38 AM
2.22.4
65kB
demawi
07/01/21 10:46 AM
2.22.3
65kB
demawi
06/28/21 04:29 AM
2.22.2
65kB
demawi
06/26/21 12:33 PM
2.22.1
65kB
demawi
06/26/21 09:06 AM
2.22.0
65kB
demawi
06/24/21 04:01 AM
2.21.0
62kB
demawi
06/09/21 12:27 PM
2.20.0
61kB
demawi
06/07/21 10:11 AM
2.19.1
59kB
demawi
06/02/21 01:33 PM
2.18.2
58kB
demawi
05/30/21 07:31 AM
2.18.1
58kB
demawi
05/28/21 08:40 AM
2.18.0
58kB
demawi
05/28/21 03:08 AM
2.17.0
54kB
demawi
05/22/21 06:46 AM
2.16.1
46kB
demawi
05/14/21 03:00 PM
2.16.0
46kB
demawi
05/13/21 09:25 AM
2.15.3
42kB
demawi
02/23/21 01:36 AM
2.15.2
42kB
TaxTalis
02/22/21 09:42 AM
2.15.1
42kB
TaxTalis
02/21/21 03:30 PM
2.10.3
39kB
TaxTalis
11/25/20 11:12 AM
2.10.0
38kB
TaxTalis
11/18/20 04:18 PM
2.9.2
38kB
TaxTalis
11/15/20 06:25 AM
2.8.0
38kB
TaxTalis
11/08/20 07:46 AM
2.7.0
38kB
TaxTalis
10/11/20 11:54 AM
2.6.0
38kB
TaxTalis
09/09/20 06:01 AM
2.5.0
38kB
TaxTalis
08/11/20 10:59 AM
2.4.0
38kB
TaxTalis
05/25/20 02:34 AM
2.3.0
37kB
TaxTalis
02/26/20 12:20 PM
2.2.1
37kB
TaxTalis
01/07/20 01:05 PM
2.2.0
37kB
TaxTalis
12/30/19 02:22 AM
2.1.0
37kB
TaxTalis
12/25/19 12:17 PM
2.0.0
35kB
TaxTalis
12/18/19 05:03 AM
1.6.2
920kB
TaxTalis
11/27/19 01:48 PM
1.6.1
920kB
TaxTalis
09/06/19 08:47 AM
1.6.0
920kB
TaxTalis
08/31/19 04:02 PM
1.5.2
922kB
TaxTalis
08/14/19 09:25 AM
1.5.1
920kB
TaxTalis
05/25/19 02:57 AM
1.5.0
920kB
TaxTalis
05/24/19 10:07 AM
1.4.2
914kB
TaxTalis
10/27/18 09:00 AM
1.4.1
914kB
TaxTalis
10/26/18 02:36 PM
1.2.2
911kB
TaxTalis
10/12/18 01:27 PM
0.10.1
910kB
TaxTalis
09/26/18 12:27 PM
0.8.0
911kB
TaxTalis
09/16/18 01:58 PM
0.6.1
909kB
TaxTalis
09/15/18 07:08 AM
0.4.2
903kB
TaxTalis
09/11/18 10:06 AM


Post A Reply Comment Options
Unread 07/13/21, 04:56 AM  
demawi

Forum posts: 2
File comments: 105
Uploads: 0
Re: Junk does not work as expected for Companion Gear

Originally Posted by AlbertVonMoosseedorf
I implemented new rules for Companion gear, because it stacks faster than it is sellable.
I use a pricemarker of 5000G in the rule, because the price() is much higher as the real market value.
The rule seems to work, but there are no junked items after.

Yeah, sadly currently companion gear can't be junked generally. If you try it manually, you won't find the standard "Mark as junk" in the context menu.
So RbI tries the to mark such items, but eso prevents it. I can add 'not companion()' to the task-preconditions, so RbI won't even try and print it.
Report comment to moderator  
Reply With Quote
Unread 07/13/21, 02:54 AM  
AlbertVonMoosseedorf

Forum posts: 3
File comments: 172
Uploads: 0
Junk does not work as expected for Companion Gear

I implemented new rules for Companion gear, because it stacks faster than it is sellable.
I use a pricemarker of 5000G in the rule, because the price() is much higher as the real market value.
The rule seems to work, but there are no junked items after.

companion()
and not fcoismarker("verkauf im gildenladen")
and (
(
type("armor")
and not equipType("neck", "ring")
and quality("normal", "fine") and price() < 5000
and not trait("aggressive", "bolstered", "vigorous", "quickened")
) OR (
type("weapon") and weaponType("healingstaff")
and quality("normal", "fine") and price() < 5000
and not trait("quickened")
)
)
Last edited by AlbertVonMoosseedorf : 07/13/21 at 02:54 AM.
Report comment to moderator  
Reply With Quote
Unread 07/08/21, 11:31 AM  
ExVault

Forum posts: 0
File comments: 22
Uploads: 0
Originally Posted by demawi
id() == 46786
I see, thx.
Report comment to moderator  
Reply With Quote
Unread 07/08/21, 08:23 AM  
demawi

Forum posts: 2
File comments: 105
Uploads: 0
Originally Posted by ExVault
Is function id() even working? Whatever id I pass in, it just returns true for all items I have.
Currently id() will not take any arguments it only returns the value itself. With returning a number for every item and numbers are 'true'. Every item will be returned.
So you have to use:
id() == 46786
But this is a good hint. For the next version 2.23 I will change the function that it can be used in both ways, with or without arguments. Like I already did with the function 'setId'.
And I will also add id print out for the ItemInspector.

in the meantime you can use the following rule to see item ids
dump(id())
Last edited by demawi : 07/08/21 at 08:32 AM.
Report comment to moderator  
Reply With Quote
Unread 07/08/21, 06:06 AM  
ExVault

Forum posts: 0
File comments: 22
Uploads: 0
Is function id() even working? Whatever id I pass in, it just returns true for all items I have.
Report comment to moderator  
Reply With Quote
Unread 07/07/21, 01:13 PM  
ggurman
 
ggurman's Avatar

Forum posts: 0
File comments: 19
Uploads: 0
Originally Posted by Random
Originally Posted by ggurman
Originally Posted by demawi
Originally Posted by ggurman
I just installed RBI and I'm not sure what to do. I've looked in Settings and the only things that aren't greyed out are the the drop-down list under Tasks (if I select Junk (and only Junk), "Run" lights up) and General Settings. I have the required and recommended libraries. Is something wrong or is there something I need to do to get things started?

Thanks!
hi!

The first thing would be adding (set a name and hit 'add') and defining a rule. Within the content of the rule you have to define the item-selection using the functions shown in the wiki. In the wiki are also some starter examples. A good start for the junk rule would be: type('trash')
After that, you have to assign this rule to the junk task (normally as "fit any") which will activating the task. And the task will be running from now on the items, you have defined with your rule.
Thanks for replying but I definitely think the addon isn't working properly because there is no Add button on the Rules page. There's a gray rectangle that could be where the text of the rule is supposed to go, but nothing happens when I click on it. As I said in my original post, almost everything is grayed out. I took a screenshot but it's not showing up here. You can see it at https://photos.app.goo.gl/mKD1qjhtwg7PuFtbA

See the smaller grey box below it? Try typing a rule name in there, and hitting New, then typing in your rule.
Well, that worked and I feel a little foolish, but I'm glad it's working. Thanks very much for your help!
Report comment to moderator  
Reply With Quote
Unread 07/07/21, 05:28 AM  
Random

Forum posts: 0
File comments: 46
Uploads: 0
Originally Posted by ggurman
Originally Posted by demawi
Originally Posted by ggurman
I just installed RBI and I'm not sure what to do. I've looked in Settings and the only things that aren't greyed out are the the drop-down list under Tasks (if I select Junk (and only Junk), "Run" lights up) and General Settings. I have the required and recommended libraries. Is something wrong or is there something I need to do to get things started?

Thanks!
hi!

The first thing would be adding (set a name and hit 'add') and defining a rule. Within the content of the rule you have to define the item-selection using the functions shown in the wiki. In the wiki are also some starter examples. A good start for the junk rule would be: type('trash')
After that, you have to assign this rule to the junk task (normally as "fit any") which will activating the task. And the task will be running from now on the items, you have defined with your rule.
Thanks for replying but I definitely think the addon isn't working properly because there is no Add button on the Rules page. There's a gray rectangle that could be where the text of the rule is supposed to go, but nothing happens when I click on it. As I said in my original post, almost everything is grayed out. I took a screenshot but it's not showing up here. You can see it at https://photos.app.goo.gl/mKD1qjhtwg7PuFtbA

See the smaller grey box below it? Try typing a rule name in there, and hitting New, then typing in your rule.
Report comment to moderator  
Reply With Quote
Unread 07/07/21, 12:54 AM  
ggurman
 
ggurman's Avatar

Forum posts: 0
File comments: 19
Uploads: 0
Originally Posted by demawi
Originally Posted by ggurman
I just installed RBI and I'm not sure what to do. I've looked in Settings and the only things that aren't greyed out are the the drop-down list under Tasks (if I select Junk (and only Junk), "Run" lights up) and General Settings. I have the required and recommended libraries. Is something wrong or is there something I need to do to get things started?

Thanks!
hi!

The first thing would be adding (set a name and hit 'add') and defining a rule. Within the content of the rule you have to define the item-selection using the functions shown in the wiki. In the wiki are also some starter examples. A good start for the junk rule would be: type('trash')
After that, you have to assign this rule to the junk task (normally as "fit any") which will activating the task. And the task will be running from now on the items, you have defined with your rule.
Thanks for replying but I definitely think the addon isn't working properly because there is no Add button on the Rules page. There's a gray rectangle that could be where the text of the rule is supposed to go, but nothing happens when I click on it. As I said in my original post, almost everything is grayed out. I took a screenshot but it's not showing up here. You can see it at https://photos.app.goo.gl/mKD1qjhtwg7PuFtbA

Report comment to moderator  
Reply With Quote
Unread 07/06/21, 08:10 PM  
Random

Forum posts: 0
File comments: 46
Uploads: 0
BTW, to comment on the "sort by" discussion, it would be part of the solution of what I wanted to accomplish with stolen goods, but I don't think it would be the complete amount.

Basically, I want to auto-destroy any stolen white treasures... but only if I have more total stolen treasures than my remaining fence limit. So if I had a fence limit of 30 left, and had 5 blue, 20 green, and 10 whites, I'd want 5 whites to be destroyed. And then if I grabbed another blue, it would destroy another white.

The problem this is solving is that when I go out on the town, I can run out of inventory space before I collect a full load of "good" loot.

I understand how this is not remotely easy to do with how RBI is currently designed But it doesn't hurt to mention the ideas, in case there's some future change it could inspire, while making some other changes.
Report comment to moderator  
Reply With Quote
Unread 07/06/21, 10:07 AM  
czer323

Forum posts: 0
File comments: 6
Uploads: 0
Re: Re: Sort Order and By Function

Originally Posted by demawi
Hi! there was already a discussion about ordering items for autoresearch or fencing most valueable items between Random and the previous developer TaxTalis. The original statement was
Researching would kind-of be possible with RbI but not very good. The problem here lies in RbI's rule-system which is inventory-slot-based. RbI just loops over ever item in the bags and checks the task's rules. If it fits, the action is taken otherwise not. Now having to go over items in a specific order or having rules themselves look through the pile of items is a functionality currently not provided by RbI's core and could have immense implications for performance.
I appreciate you sharing this with me and thank you for taking the time to thoroughly review my suggestion. I was able to go back and find this entry to review for context. I suspect with the ordered approach, iteration towards solving the fencing question could be answered. I think you'd have to get the number of fences left, then indicate the number of desired matches in that ordered list. Ideally, the items to be fenced would be set prior to the fencing operation. It seems problematic to iterate through the list for the top item after each sell operation.

Originally Posted by demawi
Currently a rule will be executed directly as lua-code for each item, so your code will not be working in that way. So something like trait('bolstered') or quality('legendary') will only return a boolean, which we can not be sorted and the sort-function also have to return a boolean.
Your sort-functions have to be more like sort(trait, 'bolstered', 'vigorous', ['quickened', 'augmented']). The first argument would define the concrete function to use and after that, we define the order.
The by-function has to be called before the sort (to set an variable in the rule execution context) or perhaps directly as additional definition in the sort-function.
So I would suggest following calls: (I would like to take 'order' as name, because it is also a part of SQL)
Code:
order(trait, 'bolstered', 'vigorous', ['quickened', 'augmented'])

order(trait, equipType, 'bolstered', 'vigorous', ['quickened', 'augmented'])
the second function reference (here: equipType) could be optional.
My original formatting was inspired by SQL, so I like the name suggestion.

I defer to your thoughts on the formatting for implementation. I can agree if it's a technical limitation of how it has to be parsed, but from a readability perspective - it could become pretty complex. I don't see any other alternatives based on the technical requirements. It seems as if it might scale well though. Thinking of future possibilities, one was to setup a rules to identify specific types of sets (StamDPS, MagDPS, Tank, Healer) and create different weapon profiles by rule.

Originally Posted by demawi
Currently this approach can only select all items with the best priority. I would also like to find a way to select the items more specifically (so perhaps selecting the best x-items), but this will make it more difficult, so I think in the first step we should stay with the first approach
I agree, it's definitely some additional complexity that should come after the first implementations. And I think this directly influences the example about fencing I listed above.
Report comment to moderator  
Reply With Quote
Unread 07/06/21, 08:03 AM  
Random

Forum posts: 0
File comments: 46
Uploads: 0
Re: Re: Wow

Originally Posted by demawi

Hi!
welcome back Export would definitely be easy. But the import would be difficult. So how will the import work? Erase all existing rules, update only existing, add only...!? So perhaps with some optional choices.
The references from Task, RuleSet, Profile have to be checked. So renaming of rules only can be functional, when Task, RuleSet, Profiles are included.
For importing, rules only, I would see the default being to merge them in. If importing a rule with existing name, overwrite, else build a new one. That would be where I would start, and then see what options people scream for.

How best to handle Tasks, Rulesets, and Profiles... would likely depend heavily on the internal structure of how they are tied together.
Report comment to moderator  
Reply With Quote
Unread 07/06/21, 05:56 AM  
demawi

Forum posts: 2
File comments: 105
Uploads: 0
Re: Sort Order and By Function

Originally Posted by czer323
I want to say, I love your addon and I appreciate all the hard work you've put into it. It is a cornerstone in improving my efficiency while playing the game - and it's saved me a LOT of time. Also, sorry if this has been asked before - I tried looking through a few of the previous comments, but there's a lot to cover.

Can you imagine a function - that would help with identifying items using a priority list? For example, I have companion equipment, and I would like to setup a filter to prioritize specific pieces to fit various roles I might use.

With a function like this, I believe it would be easier to manage sets of gear. As an MVP, if a sort function is introduced - it would allow for identifying lesser gear and allowing a rule to manage it (Sell or Deconstruct).

For example, as a tanking companion, I would like to identify pieces that are:
Code:
filterType('companion')
AND armorType('heavy')
AND trait('Bolstered')
AND quality('superior')
Now, even if it doesn't meet this criteria, I'd like to keep at least one piece so I have a set. But I'd like to do that using a priority system. For example:
Code:
filterType('companion')
AND armorType('heavy')
AND sort(trait('Bolstered') > trait('Vigorous') > trait('Quickened', 'Augmented') > trait('Focused', 'Shattering', 'Aggressive') > trait('Soothing'))
AND sort(quality('legendary') >  quality('superior') > quality('fine') > quality('normal') > quality('trash'))
AND equipType('legs')
After the sort function is created, I think the next thing is creating a rule to distinguish different equipTypes as their own entity. This would be to allow a rule - to manage multiple equipment types and find the best item - or all lesser items to be disposed.

Code:
filterType('companion')
AND armorType('heavy')
AND sort(trait('Bolstered') > trait('Vigorous') > trait('Quickened', 'Augmented') > trait('Focused', 'Shattering', 'Aggressive') > trait('Soothing'))
AND sort(quality('legendary') >  quality('superior') > quality('fine') > quality('normal') > quality('trash'))
AND by(equipType)
If you're able to develop a 'By' function, you could even potentially identify the items by setIds or SetNames.

I'm unsure if I'm explaining this well, but I'm very willing to continue discussing it to help refine the development requirements. Ultimately, I imagine that RuleBased Inventory can serve as a replacement for 'Set Junker' and be much more flexible in how it identifies gear to keep.


Hi! there was already a discussion about ordering items for autoresearch or fencing most valueable items between Random and the previous developer TaxTalis. The original statement was
Researching would kind-of be possible with RbI but not very good. The problem here lies in RbI's rule-system which is inventory-slot-based. RbI just loops over ever item in the bags and checks the task's rules. If it fits, the action is taken otherwise not. Now having to go over items in a specific order or having rules themselves look through the pile of items is a functionality currently not provided by RbI's core and could have immense implications for performance.
Of course we already have projection-methods like 'countcraftbag' which look over all items. So perhaps
with one/some generous projection methods, we could reach such sort/order goal, but we have to look at the performance then. So far I haven't worked on projection functions. I have to look at the implementation.

Currently a rule will be executed directly as lua-code for each item, so your code will not be working in that way. So something like trait('bolstered') or quality('legendary') will only return a boolean, which we can not be sorted and the sort-function also have to return a boolean.
Your sort-functions have to be more like sort(trait, 'bolstered', 'vigorous', ['quickened', 'augmented']). The first argument would define the concrete function to use and after that, we define the order.
The by-function has to be called before the sort (to set an variable in the rule execution context) or perhaps directly as additional definition in the sort-function.
So I would suggest following calls: (I would like to take 'order' as name, because it is also a part of SQL)
order(trait, 'bolstered', 'vigorous', ['quickened', 'augmented'])

order(trait, equipType, 'bolstered', 'vigorous', ['quickened', 'augmented'])
the second function reference (here: equipType) could be optional.

Currently this approach can only select all items with the best priority. I would also like to find a way to select the items more specifically (so perhaps selecting the best x-items), but this will make it more difficult, so I think in the first step we should stay with the first approach
Report comment to moderator  
Reply With Quote
Unread 07/05/21, 03:29 PM  
demawi

Forum posts: 2
File comments: 105
Uploads: 0
Originally Posted by Random
BTW, how is the "default character order" for NeedLearnInOrder determined? Is it the order of chars on my login screen, top to bottom?
sadly it is not the char order of the login screen. It's the character creation time order. You can check your order, when creating a syntax error like testing "asdf()" rule. It's the order in the 'defaultchars'-constant. Or testig NeedLearnInOrder('') the characters will be printed also in the RuleInspector-Clipboard.
Report comment to moderator  
Reply With Quote
Unread 07/05/21, 03:23 PM  
demawi

Forum posts: 2
File comments: 105
Uploads: 0
Re: Wow

Originally Posted by Random
I've still been running with my rules for a while, but hadn't checked the update notes in a while. And now I look and see:

Character Name tests
Calling rules within rules
Motif Knowledge
Using of items
... more



With these changes, as well as some of the game changes, I'm in a mood to go and rework a bunch of my rules. Which got me thinking.

What hopefully shouldn't be too hard to build, and would be really helpful is the ability to Export all of the current rules to a box I can copy to clipboard, drop in a real text editor, mess around, then copy it all to the clipboard, hit an Import button in RBI, past the rules in, and have RBI mass update all my rules at once.

The buffer format could be something simple like:
Code:
#Rule Needed Motif
type("motif") and not motifknown()

#Rule Stolen
stolen()

#Rule Decon Fodder
FCOISMarker("deconstruction")  or
not crafted() and
( type("weapon","armor") and
    ( level()<50 or cp()<160 or not set() or quality("trash","normal","fine")
    ) 
  or item_enchanting()
)
Could possibly also add #Task and #RuleSet items, and be able to import an entire profile at once. Likely best to have Rules as one import/export pairs, and then profiles as another. Not sure how that part would work, but just the ability to edit all the rules at once would be a major help.

This would also make it a lot easier to distribute the greatness of RBI to those less inclined at building their own rules. Might let you include a couple default templates people can load to get started.
Hi!
welcome back Export would definitely be easy. But the import would be difficult. So how will the import work? Erase all existing rules, update only existing, add only...!? So perhaps with some optional choices.
The references from Task, RuleSet, Profile have to be checked. So renaming of rules only can be functional, when Task, RuleSet, Profiles are included.
Report comment to moderator  
Reply With Quote
Unread 07/05/21, 03:11 PM  
czer323

Forum posts: 0
File comments: 6
Uploads: 0
Sort Order and By Function

I want to say, I love your addon and I appreciate all the hard work you've put into it. It is a cornerstone in improving my efficiency while playing the game - and it's saved me a LOT of time. Also, sorry if this has been asked before - I tried looking through a few of the previous comments, but there's a lot to cover.

Can you imagine a function - that would help with identifying items using a priority list? For example, I have companion equipment, and I would like to setup a filter to prioritize specific pieces to fit various roles I might use.

With a function like this, I believe it would be easier to manage sets of gear. As an MVP, if a sort function is introduced - it would allow for identifying lesser gear and allowing a rule to manage it (Sell or Deconstruct).

For example, as a tanking companion, I would like to identify pieces that are:
Code:
filterType('companion')
AND armorType('heavy')
AND trait('Bolstered')
AND quality('superior')
Now, even if it doesn't meet this criteria, I'd like to keep at least one piece so I have a set. But I'd like to do that using a priority system. For example:
Code:
filterType('companion')
AND armorType('heavy')
AND sort(trait('Bolstered') > trait('Vigorous') > trait('Quickened', 'Augmented') > trait('Focused', 'Shattering', 'Aggressive') > trait('Soothing'))
AND sort(quality('legendary') >  quality('superior') > quality('fine') > quality('normal') > quality('trash'))
AND equipType('legs')
After the sort function is created, I think the next thing is creating a rule to distinguish different equipTypes as their own entity. This would be to allow a rule - to manage multiple equipment types and find the best item - or all lesser items to be disposed.

Code:
filterType('companion')
AND armorType('heavy')
AND sort(trait('Bolstered') > trait('Vigorous') > trait('Quickened', 'Augmented') > trait('Focused', 'Shattering', 'Aggressive') > trait('Soothing'))
AND sort(quality('legendary') >  quality('superior') > quality('fine') > quality('normal') > quality('trash'))
AND by(equipType)
If you're able to develop a 'By' function, you could even potentially identify the items by setIds or SetNames.

I'm unsure if I'm explaining this well, but I'm very willing to continue discussing it to help refine the development requirements. Ultimately, I imagine that RuleBased Inventory can serve as a replacement for 'Set Junker' and be much more flexible in how it identifies gear to keep.
Last edited by czer323 : 07/05/21 at 03:12 PM.
Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump: