ESO UI API Patch Highlights (V100022)
A summary of important changes to the ESO UI API in this update.Outfits
The Outfit System is a new feature that allows players to change the appearance of Outfit slots using collectibles. Outfit slots are enumerated by the OUTFIT_SLOT_* enum values and they include equipment, costumes, mounts, etc. Equipment-based Outfit slots are changed using Outfit style collectibles. The other slots (e.g. MOUNT, POLYMORPH, etc.) use the corresponding collectible type. Outfit changes can be paid for using gold or a new currency type, CURT_STYLE_STONES. The gold cost is based on the types of styles being applied and how many dyes have been changed. The style stone cost is one flat cost for any change. The Outfit System is an extension of the restyle system (formerly dyes) and goes hand in hand with dyeing. Below are the new APIs for outfits:
- GetOutfitName(outfitIndex) – name.
- GetOutfitSlotInfo(outfitIndex, outfitSlot) – collectibleId, itemMaterialIndex, primaryDyeId, secondaryDyeId, accentDyeId.
- GetEquippedOutfitIndex() – outfitIndex.
- GetOutfitStyleFreeConversionCollectibleId(outfitStyleId) – freeConversionCollectibleId - Returns the collectible id that, if owned by the player, allows using this style in an outfit for free. Replaces "Convert to Imperial/Morag Tong".
- IsOutfitStyleWeapon(outfitStyleId) – isWeapon.
- IsOutfitStyleArmor(outfitStyleId) – isArmor.
- GetOutfitStyleWeaponModelType(outfitStyleId) – weaponModelType.
- GetOutfitStyleVisualArmorType(outfitStyleId) – visualArmorType.
- GetOutfitChangeFlatCost() – flatCostStyleStones – The cost if using the style stone currency. It is the same cost regardless of how many changes you make.
- SendOutfitChangeRequest(useFlatCurrency, outfitIndex, [outfitSlot, collectibleId, itemMaterialIndex, primaryDyeId, secondaryDyeId, accentDyeId]…) – Enacts an outfit change. After outfitIndex pass in groups of six arguments (outfitSlot, collectibleId, itemMaterialIndex, primaryDyeId, secondaryDyeId, accentDyeId) per slot change.
- GetOutfitSlotDataCollectibleCategoryId(outfitSlot) – collectibleCategoryId - This is the collectible category that has the outfit style collectibles that can be properly used to populate this outfit slot.
- GetOutfitSlotDataHiddenOutfitStyleCollectibleId(outfitSlot) – collectibleId – Returns the collectible id for the collectible that hides the equipment in that slot.
- RenameOutfit(outfitIndex, name).
- GetEquipSlotForOutfitSlot(outfitSlot) – equipSlot.
- GetEligibleOutfitSlotsForCollectible(collectibleId) – outfitSlot…
- CanEquippedItemBeShownInOutfitSlot(equipSlot, outfitSlot) – canShowItem.
- GetApplyCostForIndividualOutfitSlot(outfitIndex, outfitSlot, collectibleId, changedDyeCount) – applyCostGold. – Computes the cost in gold to make this change to the slot. Changed dye count is the number of dye channels that have changes to be applied in this slot.
- GetTotalApplyCostForOutfitSlots(outfitIndex, [outfitSlot, collectibleId, changedDyeCount]…) – totalCostGold - Specify the outfit you want to evaluate, then groups of 3 arguments (outfitSlot, collectibleId, changedDyeCount) per slot.
- GetOutfitSlotsForCurrentlyHeldWeapons() - mainHandOutfitSlot, offHandOutfitSlot.
- GetOutfitSlotsForEquippedWeapons() - mainHandOutfitSlot, offHandOutfitSlot, backupMainHandOutfitSlot, backupOffHandOutfitSlot.
- AreDyeChannelsDyeableForOutfitSlotData(outfitSlot, collectibleId) - primary, secondary, accent.
- BeginRestyling(restyleMode) – Used to let Lua begin restyling outside of a station.
- GetNumUnlockedOutfits() – numOutfits.
- IsCollectiblePresentInEffectivelyEquippedOutfit(collectibleId) – isPresent – We wait to equip an outfit for real until after the UI is closed to prevent forcing extensive rebuilding of player models. This function returns if the collectibleId is being shown to the player as a preview of changing to that outfit.
- GetNumOutfitStyleItemMaterials(outfitStyleId) – numItemMaterials. – For the time being, this is always going to return 1.
- GetOutfitStyleItemMaterialName(outfitStyleId, itemMaterialIndex) – materialName.
- GetOutfitStyleCost(outfitStyleId) - goldCost, isFree.
- WouldOutfitBeHidden(outfitIndex) – isHidden, highestPriorityVisualLayerThatIsShowing.
- EVENT_OUTFIT_CHANGE_RESPONSE - response, outfitIndex.
- EVENT_OUTFIT_EQUIP_RESPONSE - response.
- EVENT_OUTFIT_RENAME_RESPONSE - response, outfitIndex.
New collectibles have been added that allow placing storage chests in your house. Each chest is backed by a different bag of the form BAG_HOUSE_BANK_ONE through BAG_HOUSE_BANK_TEN. These chests are accessed using a standard banking interaction, which now provides which bag the bank interaction is servicing. It is returned by GetBankingBag() and also sent with EVENT_OPEN_BANK. GetBankingBag() returns BAG_BANK for the standard bank. However, the standard bank also services BAG_SUBSCRIBER_BANK as well.
- GetBankingBag() – bankingBag.
- IsHouseBankBag(bag) – isHouseBankBag.
- GetCollectibleForHouseBankBag(houseBankBag) – collectibleId.
- GetCollectibleBankAccessBag(collectibleId) – houseBankBag.
Skill information has been augmented on the client to support the Skills Advisor. The client now has all skill lines including inactive skill lines (Vampire or Werewolf if you are not a Vampire or Werewolf) and other class skill lines. Some new skill APIs have been added as well.
- GetSkillLineAbilityRank(skillType, skillIndex, abilityIndex) - rankIndex - Gets the rank index (1-4) of a progression ability (active ability). This only works for the version of the skill that you currently have purchased or the unmorphed version if you have not purchased the skill. This should be fixed in the future to include ranks of all versions.
- GetSkillHighestRankIndexAvailableAtSkillLineRank(skillType, skillIndex, abilityIndex, skillLineRank) - rankIndex. - Gets the highest rank index that an upgrade ability (passive ability) could be when its skill line has the passed in skillLineRank.
- GetProgressionSkillProgressionName(skillType, skillIndex, abilityIndex) - progressionName. The name of the progression for a progression ability (active ability). It is the same as the unmorphed ability name without the rank index.
- GetSpecificSkillAbilityInfo(skillType, skillIndex, abilityIndex, morphChoice, rankIndex) – abilityId, skillLineRankNeeded. Gets info for a specific morph and rank of a skill (passive or active ability). MorphChoice is 0-2. RankIndex is 1-4.
- GetSpecificSkillAbilityKeysByAbilityId(abilityId) - skillType, skillIndex, abilityIndex, morphChoice, rankIndex – The mirrored version of GetSpecificSkillAbilityInfo.
The Skills Advisor provides an ordered set of passive and active skills called a skill build. It is integrated with the skill windows to provide suggestions when purchasing skills.
Level Up Advisor
- SetAdviseSkillLine(skillType, skillIndex, advise) – Sets a skill line to be advised. Used when a skill build advises a skill in a skill line you have not discovered.
- GetSkillsAdvisorSuggestionLimit() – suggestionLimit.
- GetNumAvailableSkillBuilds() – numSkillBuilds.
- GetSkillBuildInfo(skillBuildId) - name, description, isTank, isHealer, isDPS.
- GetNumSkillBuildAbilities(skillBuildId) – numSkillBuilds.
- GetSkillBuildEntryInfo(skillBuildId, skillBuildAbilityIndex) - skillType, skillLineIndex, abilityIndex, isActiveAbility, morphChoice, rankIndex.
- GetAvailableSkillBuildIdByIndex(skillBuildIndex) – skillBuildId.
- SelectSkillBuild(skillBuildId, isAdvancedMode) – Advanced mode disables the skill advisor.
- GetSkillBuildId() – skillBuildId.
- IsSkillBuildAdvancedMode() – isSkillBuildAdvancedMode.
- GetDefaultSkillBuildId() – skillBuildId – A default basic build.
The Level Up Advisor has been added to the game. There are a number of APIs for getting information on the description, tips, and rewards for each level. There are also APIs for choosing and claiming rewards. See the API documentation for more information.Preview
In the new previewing API, Lua has substantially more control over what happens when. The main new concept is the Preview Collection, which is a grouping of any number of individual previews that are applied at the same time. Currently, the only use case for multiple previews is with the Outfit System, as each slot is its own preview element. Other preview types cannot be mixed.
- AddPreviewCollection() – previewCollectionId. – Creates a blank preview collection object to be populated with preview elements.
- RemovePreviewCollection(previewCollectionId) SetPreviewCollectionShown(previewCollectionId, show) – success. – Clear out whatever collection is currently shown (invalidating its id) and shows the specified collection instead.
- RefreshPreviewCollectionShown() – Run any of the character rebuilding logic necessary on the currently shown preview collection. Used to prevent excessive rebuilding on multiple changes at one time.
- GetPreviewModeEnabled() – previewModeEnabled.
- SetPreviewingOutfitIndexInPreviewCollection(previewCollectionId, outfitIndex)
- AddOutfitSlotPreviewElementToPreviewCollection(previewCollectionId, outfitSlot, collectibleDefId, itemMaterialIndex, primaryDyeDefId, secondaryDyeDefId, accentDyeDefId, refreshIfShowing)
- ClearOutfitSlotPreviewElementFromPreviewCollection(previewCollectionId, outfitSlot, refreshIfShowing)
- ClearAllOutfitSlotPreviewElementsFromPreviewCollection(previewCollectionId, refreshIfShowing)
- GetPreviewCollectionCurrentlyShown() – previewCollectionId.
- GetOutfitSlotInfoForOutfitSlotInPreviewCollection(previewCollectionId, outfitSlot) - collectibleDefId, itemMaterialIndex, primaryDyeDefId, secondaryDyeDefId, accentDyeDefId.
- SetFrameLocalPlayerLookAtDistanceFactor(lookAtDistanceFactor) – Allows moving the player framing camera closer or farther from the player.
- Add-ons will no longer receive BEGIN combat events in PvP areas if they target the player and come from a hostile source. Combat events will now only arrive when you’ve been damaged by the ability in these circumstances.
- GetSmithingPatternMaterialItemInfo() now also returns for a certain quantity of a certain material which level item it makes.
- Animation objects can now be enabled and disabled. When disabled they do not contribute to the timeline duration or act on their controls. Animation timelines can now set a minimum duration to allow looping timelines with the animations group toward the start.
- EVENT_BATTLEGROUND_KILL now includes the killing ability id.