ESO UI API Patch Notes (Version 100015)
These patch notes highlight the larger changes to the ESO API. For the full, updated API take a look at the newest version of the ESO UI documentation.
Craft (Virtual) Bags
This patch adds a new virtual bag for ESO Plus members. This bag can be accessed using the existing bag and slot based inventory APIs with the bag type, BAG_VIRTUAL, and a slotId obtained from GetNextVirtualBagSlotId.
- GetNextVirtualBagSlotId(lastSlotId) – nextSlotId or nil.
- CanItemBeVirtual(bagId, slotIndex)
- CanItemLinkBeVirtual(itemLink)
- HasCraftBagAccess()
- GetItemLinkStacks(itemLink) now also returns stackCountCraftBag
Specialized Item Type
Items now have a secondary, specialized item type that further identifies an item. GetItemType and GetItemLinkItemType now return the specialized item type as the second return after the existing item type. Some examples of the specialized item types are:
- SPECIALIZED_ITEMTYPE_COLLECTIBLE_MONSTER_TROPHY
- SPECIALIZED_ITEMTYPE_COLLECTIBLE_RARE_FISH
- SPECIALIZED_ITEMTYPE_DRINK_ALCOHOLIC
- SPECIALIZED_ITEMTYPE_DRINK_CORDIAL_TEA
- SPECIALIZED_ITEMTYPE_DRINK_DISTILLATE
- SPECIALIZED_ITEMTYPE_DRINK_LIQUEUR
- SPECIALIZED_ITEMTYPE_DRINK_TEA
- SPECIALIZED_ITEMTYPE_DRINK_TINCTURE
- SPECIALIZED_ITEMTYPE_DRINK_TONIC
- SPECIALIZED_ITEMTYPE_DRINK_UNIQUE
- SPECIALIZED_ITEMTYPE_FOOD_ENTREMET
- etc…
Anchor Constraints
Anchors can now constrain a single dimension. This can be used to anchor the X and Y values of a single control off of two different points or two different controls. For example, you could anchor the TOP of my control to the BOTTOM of control A and the LEFT of my control to the RIGHT of control B. This would anchor the TOPLEFT point of your control based off of two other controls.
- ANCHOR_CONSTRAINS_X
- ANCHOR_CONSTRAINS_XY
- ANCHOR_CONSTRAINS_Y
- GetAnchor now returns which dimension that anchor constrains as the last return.
- SetAnchor now accepts which dimension that anchor constrains as the last argument.
Player Item Locking
Added a server persisted item lock. When an item is locked it cannot be destroyed, sold, or traded.
- INVENTORY_UPDATE_REASON_PLAYER_LOCKED
- CanItemBePlayerLocked(bagId, slotIndex)
- IsItemPlayerLocked(bagId, slotIndex)
- SetItemIsPlayerLocked(bagId, slotIndex, playerLocked)
Veteran Rank Removal
All events, globals, and functions that have to do with Veteran Ranks have been removed. It most cases, there are Champion Point analogs. Functions that returned a player Veteran Rank now return their Champion Points.
- CAMPAIGN_LEVEL_REQ_TYPE_VETERAN_LEVEL => CAMPAIGN_LEVEL_REQ_TYPE_CHAMPION_RANK
- SCALE_LEVEL_CONSTRAINT_NORMAL_MIN_VETERAN_MAX => SCALE_LEVEL_CONSTRAINT_NORMAL_MIN_CHAMPION_RANK_MAX
- SCALE_LEVEL_CONSTRAINT_VETERAN_MIN_VETERAN_MAX => SCALE_LEVEL_CONSTRAINT_CHAMPION_RANK_MIN_CHAMPION_RANK_MAX
- MAXIMUM_VETERAN_RANK => MAXIMUM_CHAMPION_RANK
- TRADING_HOUSE_FILTER_TYPE_VETERAN_LEVEL => TRADING_HOUSE_FILTER_TYPE_CHAMPION_POINTS
Removed:
- GetUnitVeteranRank
- IsUnitVeteran
- GetUnitVeteranPoints
- GetUnitVeteranPointsMax
- IsUnitVetBattleLeveled
- GetUnitVetBattleLevel
- GetItemRequiredVeteranRank
- GetItemLinkRequiredVeteranRank
- GetNumVeteranPointsInRank
- GetChampionXPInRank
- GetMaxVeteranRank
- EVENT_VETERAN_POINTS_GAIN
- EVENT_VETERAN_POINTS_UPDATE
- EVENT_VETERAN_RANK_UPDATE
Added:
- GetUnitChampionPoints
- CanUnitGainChampionPoints
- IsUnitChampion
- IsUnitChampionBattleLeveled
- GetUnitChampionBattleLevel
- GetItemRequiredChampionPoints
- GetItemLinkRequiredChampionPoints
- GetNumChampionXPInChampionPoint
- GetChampionPointsPlayerProgressionCap
- EVENT_CHAMPION_LEVEL_ACHIEVED
- EVENT_CHAMPION_POINT_UPDATE
Unassign Campaign
Added the ability for players to unassign themselves from a campaign.
- CAMPAIGN_UNASSIGN_TYPE_GUEST
- CAMPAIGN_UNASSIGN_TYPE_HOME_USE_ALLIANCE_POINTS
- CAMPAIGN_UNASSIGN_TYPE_HOME_USE_GOLD
- GetCampaignUnassignCooldown()
- GetCampaignUnassignCost(CAMPAIGN_UNASSIGN_TYPE) - cost
- GetNumFreeAnytimeCampaignUnassigns() - count
- UnassignCampaignForPlayer(CAMPAIGN_UNASSIGN_TYPE)
Stats
Some minor changes have been made to player stats. Soft caps have been removed from the API and STAT_WEAPON_POWER has become STAT_WEAPON_AND_SPELL_DAMAGE.
Removed:
- GetStatSoftCap
- ApplySoftCapToStat
- Removed statSoftCapOption argument from GetPlayerStat
Nameplates
Nameplates have been added to the game. They can be controlled using the options in the Nameplates panel.
Dark Brotherhood
This patch introduces poisons and Poison-Making. Alchemy has been split into potions and poisons. We have removed ITEMTYPE_ALCHEMY_BASE and replaced with it with ITEMTYPE_POISON_BASE and ITEMTYPE_POTION_BASE. IsAlchemySolvent(ITEMTYPE) can be used to determine if it is a poison or potion.
We have also added new equip slots and a new equip type:
- EQUIP_SLOT_POISON
- EQUIP_SLOT_BACKUP_POISON
- EQUIP_TYPE_POISON
The following functions have been added to determine the poison that is applied to a weapon:
- IsItemAffectedByPairedPoison(EQUIP_SLOT)
- GetItemPairedPoisonInfo(EQUIP_SLOT)
Group Election
A system has been added for doing group votes. To start a vote, call BeginGroupElection(GROUP_ELECTION_TYPE, electionDescriptor, targetUnitTag).
- The election type determines which type of election you’re requesting.
- GROUP_ELECTION_TYPE_KICK_MEMBER and GROUP_ELECTION_TYPE_NEW_LEADER are, by default, supermajority votes (>= 60%)
- electionDescriptior is a 100 character (max) string used primarily with the GROUP_ELECTION_TYPE_GENERIC_* types to track what kind of system requested the vote, so they can listen for responses and tailor the UI accordingly (e.g.: Ready Check).
- targetUnitTag is the group member unit tag which this election is in regards to. Currently this only works with GROUP_ELECTION_TYPE_KICK_MEMBER and GROUP_ELECTION_TYPE _NEW_LEADER.
- HasPendingGroupElectionVote() returns true for any member who has not voted on an election they are participating in.
GetGroupElectionInfo() – returns GROUP_ELECTION_TYPE, timeRemainingSeconds, electionDescriptor, targetUnitTag.
CastGroupVote(GROUP_VOTE_CHOICE)
- The person who started the vote does not vote manually, they are an automatic “yes.”
- The target of the vote (if a target exists) does not vote, nor will they know a vote is occurring.
DoesGroupModificationRequireVote() returns true if an action that would change the group structure requires a vote to happen.
- Currently this is only true for LFG groups.
- This specifically gates the ability to disband the group and manually kick a member.
Item Traits
The item trait ITEM_TRAIT_TYPE_ARMOR_EXPLORATION has been replaced with ITEM_TRAIT_TYPE_ARMOR_PROSPEROUS, and the item trait ITEM_TRAIT_TYPE_WEAPON_WEIGHTED has been replaced with ITEM_TRAIT_TYPE_WEAPON_DECISIVE.
Miscellaneous
Added more nuanced item filter types:
- ITEMFILTERTYPE_ALCHEMY
- ITEMFILTERTYPE_BLACKSMITHING
- ITEMFILTERTYPE_CLOTHING
- ITEMFILTERTYPE_ENCHANTING
- ITEMFILTERTYPE_PROVISIONING
- ITEMFILTERTYPE_STYLE_MATERIALS
- ITEMFILTERTYPE_TRAIT_ITEMS
- ITEMFILTERTYPE_WOODWORKING
Added two new SCT event types for damage immunities:
- SCT_EVENT_TYPE_DAMAGE_IMMUNE
- SCT_EVENT_TYPE_DOT_IMMUNE
Replaced GetItemLinkGlyphMinMaxLevels with GetItemLinkGlyphMinLevels as glyphs no longer have max levels.
EVENT_INVENTORY_SINGLE_SLOT_UPDATE now includes the stack count delta.
Added:
- DoesCurrentZoneAllowBattleLevelScaling()
- GetPlayerActiveSubzoneName()
- GetPlayerActiveZoneName()
- GetDistrictOwnershipTelVarBonusPercent(keepId, BGQUERY) – bonusPercent