Maintenance for the week of May 20:
• [COMPLETE] Xbox One: NA and EU megaservers for maintenance – May 22, 6:00AM EDT (10:00 UTC) – 9:00AM EDT (13:00 UTC)
• [COMPLETE] PlayStation®4: NA and EU megaservers for maintenance – May 22, 6:00AM EDT (10:00 UTC) – 9:00AM EDT (13:00 UTC)

Update 20 API Patch Notes & Change Log (PTS)

ZOS_GinaBruno
ZOS_GinaBruno
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:
  • KEEPTYPE_BRIDGE
  • KEEPTYPE_MILEGATE
Bridges can be either be passable or impassable, while milegates have those states plus the additional state of only being passable from one side.
  • KEEP_PIECE_DIRECTIONAL_ACCESS_BIDIRECTIONAL
  • KEEP_PIECE_DIRECTIONAL_ACCESS_BLOCKED
  • KEEP_PIECE_DIRECTIONAL_ACCESS_IGNORE
  • KEEP_PIECE_DIRECTIONAL_ACCESS_UNIDIRECTIONAL
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:
  • EVENT_KEEP_IS_PASSABLE_CHANGED (keepId, BGQUERY, isPassable)
  • EVENT_KEEP_PIECE_DIRECTIONAL_ACCESS_CHANGED

Furniture Grouping
Pieces of furniture can now be grouped into hierarchies and be moved together. This can either be done by entering linking mode:
  • HOUSING_EDITOR_MODE_LINK
  • 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:
  • HOUSING_EDITOR_COMMAND_TYPE_LINK
  • HOUSING_EDITOR_COMMAND_TYPE_MOVE
  • HOUSING_EDITOR_COMMAND_TYPE_NONE
  • HOUSING_EDITOR_COMMAND_TYPE_PLACE
  • HOUSING_EDITOR_COMMAND_TYPE_REMOVE
  • HOUSING_EDITOR_COMMAND_TYPE_UNLINK
  • HOUSING_EDITOR_COMMAND_TYPE_UNLINK_ALL
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).
  • ACTION_TYPE_QUEST_ITEM
  • IsValidQuestItemForSlot(questItemId, actionSlotIndex) – valid.
  • CanQuickslotQuestItemById(questItemId) – canQuickslot.

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

Miscellaneous
  • 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
Community Manager - The Elder Scrolls Online
Dev Tracker | Service Alerts | Facebook | Twitter
Staff Post
  • Enodoc
    Enodoc
    Community Ambassador
    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
  • sirinsidiator
    sirinsidiator
    ✭✭✭✭
    Thanks for posting them so fast this time! ;)
  • Solinur
    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.
    Usage:
    to start collecting data:
    StartScriptProfiler()
    to stop:
    StopScriptProfiler()
    To print a report out to chat:
    ZO_ScriptProfiler_GenerateReport()

    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
    qbit
    ✭✭✭✭✭
    the variable auto save is a pretty big deal. Won’t have to reloadui every time I list something in guild store.
    PC-NA: @q.bit
  • Woeler
    Woeler
    ✭✭✭✭✭
    ✭✭✭
    I have added ## DisableSavedVariablesAutoSaving 1 to my manifest, it does not disable auto saving.
    Author of the esoleaderboards.com project | Maintainer of the ESO-Database.com project
    | World First Veteran Maw of Lorkhaj Hard Mode clear |
    | Mod on the official ESO Subreddit |
    Youtube link | Twitter link | Website link
  • Philgo68
    Philgo68
    ✭✭
    @Woeler Could it be...

    ## DisableSavedVariablesAutoSaving: 1

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