ESO UI API Patch Highlights (V100024)
A summary of important changes to the ESO UI API in this package.
Significant changes have been made to the skills-related Lua objects to allow for point-by-point respecing. The biggest of these changes is the creation of a Lua manager to collect all of the skills data into easy to use objects. This manager is referenced by the global SKILLS_DATA_MANAGER. Within the manager you will find objects for skill types, skill lines, skills, and skill progressions (each specific version of a skill, ranks for passives and base vs. morphs for actives). These objects are automatically updated and encompass every version of every skill and also every skill line. This manager is now the easiest source of skills information. Here are some sample APIs from each class:
- GetName() – name.
- GetKeyboardIcons() – normal, pressed mouseOver.
- GetSkillLineDataByIndex(index) – ZO_SkillLineData.
- GetNumSkills() – numSkills.
- GetCurrentRank() – currentRank.
- GetCurrentRankXP() – xp.
- GetSkillDataByIndex(index) – ZO_SkillData.
- GetNumPointsAllocated() – number of committed points in the skill.
- GetCurrentProgressionData() – ZO_SkillProgressionData representing the committed points.
- GetPointAllocatorProgressionData() – ZO_SkillProgressionData representing the pending allocated points.
ZO_ActiveSkillData (subclasses ZO_SkillData)
- IsPassive() – isPassive.
- IsAtMorph() – has enough XP to be morphed.
ZO_PassiveSkillData (subclasses ZO_SkillData)
- GetNumRanks() – numRanks.
- GetCurrentRank() – currentRank.
- GetAbilityId() – abilityId.
- GetIcon() – icon.
ZO_ActiveSkillProgressionData (subclasses ZO_SkillProgressionData)
- GetMorphSlot() – morphSlot.
ZO_PassiveSkillProgressionData (subclasses ZO_SkillProgressionData)
- GetLineRankNeededToUnlock() – skillLineRank.
We have also exposed an enumeration to refer to the morph state of an active skill:
Skills respec has been changed to behave more like Champion Point spending where partial changes can be made without resetting all points. To support this, we have changed skill point spending to be mode driven.
“Purchase Only” mode encapsulates the behavior of the current point spending APIs. You may only spend points (not remove) and any spent points are committed immediately. “Full” and “Morph Only” are the new respec modes. “Full” lets you add or remove points from any skill while “Morph Only” lets you change the morph state of active skills only. Both of these modes commit changes only when explicitly saved. To check how many points are allocated in each skill in these modes use the SKILL_POINT_ALLOCATION_MANAGER.
Skill respec mode can be entered in two ways. The first is by using the existing shrines located in major cities. This will put you in INTERACTION_SKILL_RESPEC where you can spend gold to pay for the respec. The other is to use a respec scroll which does not put you into an interaction and can be used anywhere. When you complete the respect, the scroll is consumed.
- GetSkillRespecCost(SkillPointAllocationMode) – cost.
- GetPendingSkillRespecScrollItemLink() – itemLink.
As a result of the respec changes, the hotbar displayed in the skills screens has been generalized to support showing information on all hotbar categories instead of just the currently selected category. This is managed by the ACTION_BAR_ASSIGNMENT_MANAGER global. This object holds all of the hotbars and allows querying their slots and updating them. Here are all of the hotbar categories:
Primary and Backup are the familiar weapon swap skill bars. Overload is a special skill bar that is active when using the Sorceror Overload ultimate. Werewolf is active when in werewolf form. Finally, there is Temporary which is a bar that is controlled by quests to provide a specific set of abilities. Temporary cannot be modified.
The hotbar layout now persists at the same time as the skill point allocation state to properly validate the hotbar slots against the purchased skill info. EVENT_ACTION_SLOTS_FULL_UPDATE has been replaced with EVENT_ACTION_SLOTS_ACTIVE_HOTBAR_UPDATED and EVENT_ACTION_SLOTS_ALL_HOTBARS_UPDATED for a more nuanced approach.
The housing permission for using crafting stations has been replaced with a permission for using objects that have permanent state (like lights). There is also a new permission preset named limited visitor that disables this permission.
Some new APIs were added to query and modify the state of a piece of furniture (such as on and off for lights).
- HousingEditorRequestChangeState(furnitureId, objectStateIndex) – result.
- If objectStateIndex is nil it will advance to the next state.
- GetPlacedHousingFurnitureNumObjectStates(furnitureId) – numStates.
- GetPlacedHousingFurnitureCurrentObjectStateIndex(furnitureId) – currentObjectStateIndex.
We have also added an API to get the display name of the current house owner, GetCurrentHouseOwner(), and an event that is sent when a piece of furniture is moved, EVENT_HOUSING_FURNITURE_MOVED (furnitureId).
The quest tracker changes of last update have been applied to the map. Now, untracked quests properly return untracked pin types which look the same as the tracked pin types.
RequestJournalQuestConditionAssistance, which does pathfinding from the current map to a quest condition, no longer takes assisted as a boolean and instead always returns an untracked pin type. To get the proper pin, use GetQuestPinTypeForTrackingLevel(pinType, trackingLevel).
A number of changes have been made to Cyrodiil AvA. Primary among them is the introduction of the Keep Recall Stone which lets you return to a Keep owned by your alliance in Cyrodiil.
- GetKeepRecallAvailable(keepId, battlegroundContext) – canRecall.
- CanUseKeepRecallStone() – useResult.
We have added new APIs that let you query if a Keep’s outer or inner walls have been breached:
- GetKeepInnerWallBreached(keepId, battlegroundContext) – innerWallBreached.
- GetKeepOuterWallBreached(keepId, battlegroundContext) – outerWallBreached.
We have also made the currency reason for gaining AP from keep capture more specific. CURRENCY_CHANGE_REASON_KEEP_REWARD has been replaced with CURRENCY_CHANGE_REASON_DEFENSIVE_KEEP_REWARD and CURRENCY_CHANGE_REASON_OFFENSIVE_KEEP_REWARD.
- SetPendingItemPurchaseByItemUniqueId(itemUniqueId, purchasePrice)
- Allows purchasing item on pages other than the current guild trade page.
- EditBox::SetEscapeMarkup(escapeMarkup) / <EditBox escapeMarkup=”true/false”/>
- Allows markup in edit control text (colors, texture, etc).
- The OnClicked handler on Buttons now also includes ctrl, alt, shift, and command values.