Maintenance for the week of April 15:
• PC/Mac: No maintenance – April 15
• ESO Store and Account System for maintenance – April 16, 8:00AM EDT (12:00 UTC) - 12:00PM EDT (16:00 UTC)
The issue is resolved, and the North American PC/Mac megaserver is now available. Thank you for your patience!

Update 16 API Patch Notes & Change Log (PTS)

ZOS_GinaBruno
ZOS_GinaBruno
Community Manager
ESO UI API Patch Highlights (V100021)

AddOn Loading
The addon system will now only process manifest files that have the same name as the folder they are in. If your addon is in a folder name MyFolder, then the addon will only load MyFolder.txt as a manifest. It will no longer try to load files like ReadMe.txt. Additionally, all paths in the manifest file will now be relative to the location the manifest file is in, not AddOns/<AddOnName>. This should be more intuitive and also supports moving addons into subfolders. This is important because the addon system will now scan two levels deep into the folders in the AddOns directory looking for manifest files. This means you can put addons within folders or folders of folders and they will still load. In the future, look for more changes that build on these to allow better handling of libraries.

Currency
The currency API changes are complete. Existing API functionality should be unchanged with the compatibility aliases, but the official APIs have been significantly reduced as they are now parameterized by currency type and currency location instead of having a different function for each combination. The currency locations are: CURRENCY_LOCATION_CHARACTER, CURRENCY_LOCATION_BANK, CURRENCY_LOCATION_GUILD_BANK, and CURRENCY_LOCATION_ACCOUNT. The concept of currency caps has been implemented. You can call IsCurrencyCapped(currencyType, currencyLocation) to see if a currency is capped and use GetMaxPossibleCurrency(currencyType, currencyLocation) to get the cap amount.

API:
  • GetCurrencyAmount(currencyType, currencyLocation) – amount.
  • GetMaxPossibleCurrency(currencyType, currencyLocation) – max.
  • GetMaxCurrencyTransfer(currencyType, fromLocation, toLocation) – maxTransfer.
  • TransferCurrency(currencyType, amount, fromLocation, toLocation).
  • CanCurrencyBeStoredInLocation(currencyType, currencyLocation) – canBeStored.
  • GetCurrencyPlayerStoredLocation(currencyType) – currencyLocation.
  • IsCurrencyValid(currencyType) – isValid.
  • GetCurrencyName(currencyType, isSingular, isLower) – name.
  • GetCurrencyKeyboardColor(currencyType) – r, g, b.
  • GetCurrencyKeyboardIcon(currencyType) – iconPath, percentOfLineSize (for embedding in texture markup).
  • GetCurrencyLootKeyboardIcon(currencyType) – iconPath.
  • GetCurrencyGamepadColor(currencyType) – r, g, b.
  • GetCurrencyGamepadIcon(currencyType) – iconPath, percentOfLineSize.
  • IsCurrencyDefaultNameLowercase(currencyType) – defaultIsLowercase.
  • ShouldShowCurrencyInLootHistory(currencyType) – shouldShowInLootHistory.
  • IsCurrencyCapped(currencyType, currencyLocation) – isCapped.
Also check out EsoUI/PublicAllIngames/Currency/Currency.lua for more currency functionality.

Retraiting
A new system has been added for replacing the traits on items. It is an interaction similar to other crafting systems. Its cost is paid using CURT_CHAOTIC_CREATIA which is stored in CURRENCY_LOCATION_ACCOUNT. RequestItemTraitChange(bagId, slotIndex, itemTrait) is the main API and results in a RETRAIT_RESPONSE being sent through EVENT_RETRAIT_RESPONSE when called:
  • RETRAIT_RESPONSE_BAD_INTERACT_MODE
  • RETRAIT_RESPONSE_BAD_TRAIT_FOR_ITEM
  • RETRAIT_RESPONSE_HAVENT_RESEARCHED_TRAIT_FOR_ITEM
  • RETRAIT_RESPONSE_INSUFFICIENT_FUNDS
  • RETRAIT_RESPONSE_INVALID_ITEM_FOR_RETRAIT
  • RETRAIT_RESPONSE_ITEM_ALREADY_HAS_TRAIT
  • RETRAIT_RESPONSE_ITEM_NOT_FOUND
  • RETRAIT_RESPONSE_SUCCESS
API Functions:
  • CanItemBeRetraited(bag, slotIndex) – canBeRetraited.
  • RequestItemTraitChange(bagId, slotIndex, ItemTraitType).
  • GetItemRetraitCost() - retraitCost, currencyType, currencyLocation.
  • GetResultingItemLinkAfterRetrait(bagId, slotIndex, pendingTrait, linkStyle) – link.
  • IsItemTraitKnownForRetraitResult(bagId, slotIndex, pendingTrait) – isKnown.
  • GetRearchLineInfoFromRetraitItem(bagId, slotIndex) - craftingType, researchLineName.
  • GetItemTraitTypeCategory(itemTraitType) – itemTraitTypeCategory.

Documentation
Events that have enumeration fields now note which enumerations they are in the documentation.

Dyeing
The dyeing API has been repurposed into a more generic restyling system. The old structure used a hand-curated enum called DYEABLE_SLOT that was a composite of mode and contextual slot (e.g.: equipment mode and equip slot.) The new API splits this into a RESTYLE_MODE enum and a second enum parameter that is based on the restyle mode. For example, equipment uses equip slot while collectibles use collective category type. The dyeing functions are now accessed with those parameters.

Crazy King
The Crazy King battleground game type has been added. In support of this mode, objectives can now activate and deactivate. Some new APIs and events were added to handle this:

Control Events:
  • OBJECTIVE_CONTROL_EVENT_DEACTIVATED
  • OBJECTIVE_CONTROL_EVENT_DEACTIVATE_PENDING

Control States:
  • OBJECTIVE_CONTROL_STATE_AREA_INACTIVE

Events
  • EVENT_CAPTURE_AREA_SPAWNED

APIs
  • GetObjectiveVirtualId(keepId, objectiveId, battlegroundContext) – virtualId.
    • In Crazy King as an objective “moves” it actually deactivate its current objective and activates a new objective. Virtual id allows you to track the king of the kill area by id as it moves between objectives.
Gina Bruno
Senior Community Manager
Dev Tracker | Service Alerts | ESO Twitter | My Twitter
Staff Post
  • DDuke
    DDuke
    ✭✭✭✭✭
    ✭✭✭✭
    API still permits addons that allow people to see stealthed/invisible opponents' cast timers (this was supposedly fixed half a year ago):

    https://youtu.be/zaB-sXFKHdE
  • Morgul667
    Morgul667
    ✭✭✭✭✭
    ✭✭✭✭✭
    I wish API used for PVP addons like miat or others similar (maybe worse) would be deactivated
Sign In or Register to comment.