Update 20 API Patch Notes & Change Log (PTS)

Community Manager
ESO UI API Patch Highlights (V100025)
A summary of important changes to the ESO UI API in this package.

Addon Auto Saving
Addons will now auto-save their saved variables periodically while the game is running. If the addon's saved variables are too large (more than 50kb in size or more than 4ms to write) it will instead wait until the next load screen to do the work. An addon can request to be prioritized for saving, which is useful if you know that a change happened:
  • RequestAddOnSavedVariablesPrioritySave(addonName)
This function prioritizes the addon to be saved before non-prioritized addons. After a save, it will no longer be marked as a priority.

You may also disable auto saving for your addon by putting the following line at the top of your addon manifest file:
  • ## DisableSavedVariablesAutoSaving 1

Bridges and Milegates
Destructible bridges and milegates have been added to Cyrodiil. They now have their own Keep types:
Bridges can be either be passable or impassable, while milegates have those states plus the additional state of only being passable from one side.
These states can be queried using these new APIs:
  • IsKeepPassable(keepId, BGQUERY) – isPassable.
  • GetKeepDirectionalAccess(keepId, BGQUERY) - KEEP_PIECE_DIRECTIONAL_ACCESS.
  • IsKeepTypeCapturable(KEEPTYPE) – isCapturable.
  • IsKeepTypePassable(KEEPTYPE) – isPassable.
And you can stay up to date with these events:

Furniture Grouping
Pieces of furniture can now be grouped into hierarchies and be moved together. This can either be done by entering linking mode:
  • HousingEditorBeginLinkingTargettedFurniture() - HOUSING_REQUEST_RESULT.
  • HousingEditorGetPendingBadLinkResult() - HOUSING_REQUEST_RESULT.
  • HousingEditorPerformPendingLinkOperation() - HOUSING_REQUEST_RESULT.
  • HousingEditorCanRemoveParentFromPendingFurniture() - HOUSING_REQUEST_RESULT.
  • HousingEditorRemoveParentFromPendingFurniture() - HOUSING_REQUEST_RESULT.
  • HousingEditorCanRemoveAllChildrenFromPendingFurniture() - HOUSING_REQUEST_RESULT.
  • HousingEditorRemoveAllChildrenFromPendingFurniture() - HOUSING_REQUEST_RESULT.
  • HousingEditorGetLinkRelationshipFromSelectedChildToPendingFurniture() - HOUSING_EDITOR_PENDING_LINK_RELATIONSHIP .
Or by direct API calls:
  • HousingEditorRequestSetFurnitureParent(childFurnitureId, parentFurnitureId) - HOUSING_REQUEST_RESULT.
  • HousingEditorRequestClearFurnitureParent(furnitureId) - HOUSING_REQUEST_RESULT.
Grouping is controlled by the HOUSE_PERMISSION_SETTING_LINK_FURNITURE permission. There is a max of HOUSING_MAX_FURNITURE_CHILDREN (50) children per parent.

Furniture Undo
An undo/redo stack has been added for housing operations. Each operation is now represented by a command type:
These are the new functions:
  • UndoLastHousingEditorCommand()
  • RedoLastHousingEditorCommand()
  • CanUndoLastHousingEditorCommand() – canUndo.
  • CanRedoLastHousingEditorCommand() – canRedo.
  • GetNumHousingEditorHistoryCommands() – numCommands.
  • GetCurrentHousingEditorHistoryCommandIndex() – index.
  • GetHousingEditorHistoryCommandInfo(index) - HOUSING_EDITOR_COMMAND_TYPE, itemName, textureName.
There is a maximum of HOUSING_MAX_UNDO_REDO_COMMANDS (200) commands stored. Undo history persists until you leave the house or log out.

Guild Store
SetTradingHouseFilter now takes a variable argument list instead of a fixed number of params. It will return false if any of the supplied terms could not be added. The limit on the number of exact terms that a filter can take can be queried with GetMaxTradingHouseFilterExactTerms(TRADING_HOUSE_FILTER_TYPE) – maxTerms.

Quest Item Quick Slotting
Quest items can now be placed in quick slots. SelectSlotCollectible, SelectSlotEmote, SelectSlotQuickChat and quest item quick slotting are now handled by SelectSlotSimpleAction(ACTION_TYPE, actionId, actionSlotIndex).
  • IsValidQuestItemForSlot(questItemId, actionSlotIndex) – valid.
  • CanQuickslotQuestItemById(questItemId) – canQuickslot.

Animation timelines can now pause and resume with the aptly named Pause and Resume functions. IsPaused has also been added.

  • Added GetClassIndexById(classId) – index.
  • Added GetAbilityBuffType(abilityId) – BUFF_TYPE.
  • DoesItemLinkFulfillJournalQuestCondition now also takes isSelfCrafted as an argument.
  • Added DoesItemFulfillJournalQuestCondition(BAG, slotIndex, journalQuestIndex, stepIndex, conditionIndex) – fulfillsCondition.
  • GetPOIMapInfo now also returns if the POI is discovered and if it is nearby.
  • Added DidDeathCauseDurabilityDamage().
  • Added GetFurnitureIdFromCollectibleId(collectibleId) – furnitureId.
  • Added GetCollectibleIdFromFurnitureId(furnitureId) – collectibleId.
  • Added GetZoneId(zoneIndex) – zoneId.
  • Added GetParentZoneId(zoneId) – parentZoneId.
  • Added GetZoneNameById(zoneId) – name.
Gina Bruno
Senior Community Manager
Dev Tracker | Service Alerts | ESO Twitter | My Twitter
Staff Post
  • Enodoc
    What does the DIRECTIONAL_ACCESS state "IGNORE" correspond to?
    UESP: The Unofficial Elder Scrolls Pages - A collaborative source for all knowledge on the Elder Scrolls series since 1995
    Join us on Discord - discord.gg/uesp
  • sirinsidiator
    Thanks for posting them so fast this time! ;)
    https://www.imperialtradingcompany.eu/ - My Addons - The Vault (Early updates and experimental projects) - My patreon - My blog
  • Solinur
    One thing that wasn't mentioned: There is a profiling tool that allows you to check how much processing time was spent per function.
    to start collecting data:
    to stop:
    To print a report out to chat:

    The Print Function is just a coarse example how to process the data from the profiler.
    One can look up esoui/esoui/libraries/zo_scriptprofiler/zo_scriptprofiler.lua in the extracted source for how it works.

    I'm pretty sure someone will cook up some tools from that.
    @Solinur Pact EU - PC (Solinur: Templar - Magicka DD, Moves-like-Günther: Sorcerer - Stamina DD, Kinara Sol: Templar - Stamina DD, )
    Addon Author
  • qbit
    the variable auto save is a pretty big deal. Won’t have to reloadui every time I list something in guild store.
  • Woeler
    I have added ## DisableSavedVariablesAutoSaving 1 to my manifest, it does not disable auto saving.
  • Philgo68
    @Woeler Could it be...

    ## DisableSavedVariablesAutoSaving: 1

    with a colon in it like the other settings?
Sign In or Register to comment.