Maintenance for the week of December 23:
· [COMPLETE] NA megaservers for maintenance – December 23, 4:00AM EST (9:00 UTC) - 9:00AM EST (14:00 UTC)
· [COMPLETE] EU megaservers for maintenance – December 23, 9:00 UTC (4:00AM EST) - 14:00 UTC (9:00AM EST)

Thieves Guild API Patch Notes & Change Log (PTS)

ZOS_GinaBruno
ZOS_GinaBruno
Community Manager
ESO UI API Patch Notes (Version 100014)
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.

Combat Text
This patch adds a combat text system which displays damage numbers, healing numbers, and effects on units. The system comes will a default configuration, but can be modified using the SCT API functions:

Global System Functions:
  • SetSCTKeyboardFont(fontName, fontStyle)
  • SetSCTGamepadFont(fontName, fontStyle)

Event Functions:
Events are the individual pieces of text that show up when something that the SCT system is tracking happens. The event types are listed in the SCT_EVENT_TYPE enumeration. Use CreateNewSCTEventVisualInfo to make an object that describes how an event displays. This function returns an id which can be used with the other APIs to manipulate the object.
  • CreateNewSCTEventVisualInfo() – SCTEventVisualInfoId
  • SetSCTEventVisualInfo(eventType, SCTEventVisualInfoId)
    • Sets the global visual info for this event. It is inherited by all slots unless the slot has an overriding visual info set on this eventType.
  • SetSCTEventVisualInfoTextFormat(SCTEventVisualInfoId, textType, format)
    • The text type is main text or extra text (the two labels in an SCT event).
    • The format string uses standard printf style and accepts the SCT event value (damage or healing) as its only argument.
  • SetSCTEventVisualInfoTextFontSizes(SCTEventVisualInfoId, textType, keyboardFontSize, gamepadFontSize)
  • SetSCTEventVisualInfoTextColorSCTEventVisualInfoId, textType, r, g, b)
  • SetSCTEventVisualInfoHideWhenValueIsZero(SCTEventVisualInfoId, hideWhenValueIsZero)

Slot Functions:
Slots describe where SCT events appear. A slot has a location (relative to a unit or fixed on the screen), an animation style, and a set of filters which describe which SCT events are shown in the slot.
  • CreateNewSCTSlot() – slotIndex
  • SetSCTSlotPosition(slotIndex, SCTAnchorType, anchorPoint, UIOffsetX, UIOffsetY, cameraOffsetRight, cameraOffsetUp)
    • Camera offsets are in world space. They will get larger as the camera gets closer to the unit and smaller as it gets farther away.
  • SetSCTSlotZoomedInPosition(slotIndex, zoomedInCameraDistanceThreshold, zoomedInUIOffsetX, zoomedInUIOffsetY)
    • Allows you to set a distance where if the camera is closer to the player than that distance, the offsets specified will be used. This is used to constrain SCT events when zoomed in, especially in first person.
  • SetSCTSlotClamping(slotIndex, topEdgeUIOffsetBuffer, bottomEdgeUIOffsetBuffer)
    • Clamps the SCT events in this slot between the screen top plus top edge offset and screen bottom minus bottom edge offset.
  • SetSCTSlotAnimationTimeline(slotIndex, animationTimelineName)
  • SetSCTSlotAnimationMinimumSpacing(slotIndex, minSpacingMS)
    • Sets a duration such that no two SCT events will be closer than this duration in their animations. If many SCT events happen at one time it will advance the animations of events until they are all at least this duration apart.
  • SetSCTSlotEventTypeShown(slotIndex, eventType, isShown)
    • Sets whether this slot show the supplied event type.
  • AddSCTSlotAllowedTargetType(slotIndex, targetType)
  • AddSCTSlotExcludedTargetType(slotIndex, targetType)
  • AddSCTSlotAllowedSourceType(slotIndex, sourceType)
  • AddSCTSlotExcludedSourceType(slotIndex, sourceType)
  • SetSCTSlotTargetReputationTypes(slotIndex, showForFriendly, showForNeutral, showForEnemy)
  • SetSCTSlotSourceReputationTypes(slotIndex, showForFriendly, showForNeutral, showForEnemy)
  • SetSCTSlotEventControlScales(slotIndex, defaultScale, critScale)
    • Sets the scale of crit and non-crit events.
  • SetSCTSlotEventVisualInfo(slotIndex, eventType, SCTEventVisualInfoId)
    • Sets the override visual info for this event on this slot.

Cloud API:
A cloud is an arrangement of SCT events. It allows you to specify a set of positions for SCT events to occupy around the positive specified by the slot.
  • CreateNewSCTCloud() - SCTCloudId
  • SetSCTSlotKeyboardCloud(slotIndex, SCTCloudId)
  • SetSCTSlotGamepadCloud(slotIndex, SCTCloudId)
  • AddSCTCloudOffset(SCTCloudId, ordering, UIOffsetX, UIOffsetY)
    • Ordering is the order in which the slots are filled from 1 – N.
  • ClearSCTCloudOffsets(SCTCloudId)
  • SetSCTCloudAnimationOverlapPercent(SCTCloudId, animationOverlapPercent)
    • Sets an percentage from 0-1 such that if there is an event in the cloud that has less than that percentage of its animation remaining, it will terminate that event and put the new event in its place.

Custom Localization
A system has been added to the game to allow localizing in non-supported languages. Localizing the game engine strings will still be done through the .lang file. Interface strings, however, are now loaded for pregame and ingame from the files: EsoUI/lang/<langCode>_pregame.str and EsoUI/lang/<langCode>_client.str. They replace custom modification of the similarly named .lua files which were insecure. These .str files can contain string localizations and font settings. To localize a string use the following format:
[<numericStringId>] = “<localization>”

For example:
[SI_ABANDON_QUEST_CONFIRM] = “Abandon Quest”

To setup a font use this format:
[Font:<fontObjectName>] = “<fontDefinition>”

For example:
[Font:ZoGameFont] = “ EsoUI/Common/Fonts/Univers57.otf|25|sotf-shadow-thick"

These strings and fonts will be loaded before the stock UI is loaded so that the stock UI will make use of them. Any two letter language code can be chosen for a custom language (that isn’t already in use). The $(language) substitution will be replaced with that two letter code. The new substitution $(officialLanguage) will always be “en” for custom languages, and the language code for official languages.

Looking For Group
The looking for group systems have been significantly changed. The player can no longer choose a different role for each activity they queue for. The role state is global and it’s automatically used when adding all search entries. Players still have preferred roles, which they control, but now also have an assigned role, which the LFG system assigns when they player is placed in an LFG group.

The GetLFGOption function changed:
  • Old: returns name, minLevel, maxLevel, minRank, maxRank, groupTypeAllowed, passedRequirements, description, keyboardDescriptionTexture, gamepadDescriptionTexture
  • New: returns name, minLevel, maxLevel, minRank, maxRank, groupTypeAllowed, minNumMembers, description

The flow to queue for LFG is now AddGroupFinderSearchEntry (with as many entries as you want) followed StartGroupFinderSearch(). The old queueing functions have been removed completely:
  • PopulateLFGRequest
  • StartPendingLFGSearch
  • StartPendingLFMSearch

The “Any” option has been removed and has been replaced by “Random.” Random will search for every specific activity you’re eligible to take part in and put you in the first one that is available. Along with random comes a new incentive feature: Daily/Standard rewards. Once per day you’ll be eligible for the daily reward. Upon acquisition, for the next 24 hours you’ll get standard rewards in place of daily rewards.
  • GetLFGActivityRewardData(activity) – reward type, xpReward.
  • IsEligibleForDailyActivityReward()

LFM lets you find more members for the current activity your LFG group is already doing. Only an LFG group can LFM now.
  • CanSendLFMRequest()
  • SendLFMRequest()

Also, there has been some separation added between the player’s difficulty setting and the group’s difficulty setting. A player’s difficulty setting will only ever be changed by the player, with the exception of the case where they become leader of an existing group, where they will take on the group’s difficulty if possible. The player’s difficulty is applied to the group if they are the leader and also applied when they enter a dungeon solo. The group’s difficulty can come from many things including LFG, or the fact that there is only a normal or only a veteran mode for a dungeon. We have also added a difficulty enum to allow for future expansion of difficulty modes (should that become necessary).
  • ZO_GetPlayerDungeonDifficulty()
  • ZO_GetGroupDungeonDifficulty()
  • ZO_GetEffectiveDungeonDifficulty()
    • Choose between the former two based on if the player is in the group.
  • ZO_ConvertToDungeonDifficulty(isVeteranDifficulty)
  • ZO_ConvertToIsVeteranDifficulty(dungeonDifficulty)
  • IsGroupUsingVeteranDifficulty()

Item Tags
Items can have up to three tags that are relevant for certain thieves’ guild quest conditions.
  • GetItemLinkNumItemTags(link)
  • GetItemLinkItemTagDescription(link, index)

Raids
The soul reservoir system has been changed slightly to allow revives at 0 raid lives left. There were some minor API changes and additions to support the new messaging.

Changed
  • GetRaidReviveCounterInfo was renamed to GetRaidReviveCountersRemaining

Added
  • GetCurrentRaidStartingReviveCounters()
  • GetCurrentRaidLifeScoreBonus()
  • GetRaidBonusMultiplier()
  • GetRaidTargetTime()
  • GetRaidDuration()

Champion
Champion Points can now be disabled in certain campaigns. AreChampionPointsActive() returns if champion points are active and also the reason why if they are inactive.

Label Line Markup
We added the “|L” markup which allows lines to be placed on text. It is useful for underlines and strike through. Surround the text with you want to have the line on and it will word wrap the line properly with the text. The format is:
“|L<LABEL_LINE_STYLE>:<LABEL_LINE_ANCHOR>:<LABEL_LINE_ORDER>:<offsetY>:<offsetYIsPercent>:<thickness>:<thicknessIsPercent>:<hasColor>:<color>|l<text>|l”

Customer Service
Removed the in-game web browser and reimplemented the customer service windows using game UI and APIs.

Collectibles
Added some functions to inspect whether a collectible or category of collectibles can be used for some effect:
  • IsCollectibleCategoryUsable(collectibleCategoryType)
  • IsCollectibleCategoryBlocked(collectibleCategoryType)
  • IsCollectibleUsable(collectibleId)

Some collectibles can now grant quests (DLC unlocks right now):
  • GetCollectibleQuestPreviewInfo(collectibleId)

Some collectibles can have cooldowns:
  • GetCollectibleCooldownAndDuration(collectibleId)

Also added a way to get the active collectible in a category:
  • GetActiveCollectibleByType(categoryType)

Quests
GetJournalQuestConditionInfo() and GetJournalQuestConditionValues() now return isVisible which indicates if the condition should be shown to the player.

Added GetQuestItemCooldownInfo() to get the cooldown of quest items, in addition to the previously existing quest tool cooldown function.

Added two functions to help getting quest reward info for quests that end in different zones than they start.
  • GetJournalQuestRewardInfoInZone(zoneIndex, questIndex, rewardIndex)
  • Returns the reward that would be generated if the quest was completed in that zone.
  • GetJournalQuestStartingZone(questIndex) – zoneIndex.

Miscellaneous
Renamed RESURRECT_FAILURE_REASON to RESURRECT_RESULT and added a result for SUCCESS to note when your resurrection of another player succeeds.

Added new event registration filters:
  • REGISTER_FILTER_BAG_ID
  • REGISTER_FILTER_INVENTORY_UPDATE_REASON
  • REGISTER_FILTER_IS_NEW_ITEM.

Added GetGuildEventId(guildId, category, eventIndex) to uniquely identify guild events.

Added AreUnitsCurrentlyAllied(unitTag1, unitTag2). It is used to determine if two units are on the same effective alliance. It is useful when dealing with cross alliance activities.

Added some more functions to get names for links:
  • GetQuestItemNameFromLink(link)
  • GetAchievementNameFromLink(link)
  • GetLoreBookTitleFromLink(link)

EVENT_ZONE_CHANGED now also supplies the zoneId and subzoneId. EVENT_SCREEN_RESIZED is once again only sent once instead of once for each gui.
Added functions:
  • IsESOPlusSubscriber()
  • IsUnitInDungeon(unitTag)
  • IsActionBarSlottingAllowed()
    • Returns false when the player is using a special override action bar.
  • GetNextBackpackUpgradePrice()
  • DoesCurrentMapMatchMapForPlayerLocation()
  • GetZoneId(zoneIndex) and GetZoneIndex(zoneId)
  • CanLeaveCurrentLocationViaTeleport()
Gina Bruno
Senior Creator Engagement Manager
Dev Tracker | Service Alerts | ESO Twitter | My Twitter
Staff Post
  • Darlgon
    Darlgon
    ✭✭✭✭✭
    Now .. UI makers.. start WORKING.

    professions-oarsmen-slave-slavery-slave_drivers-government_employees-wmi110420_low.jpg
    Power level to CP160 in a week:
    Where is the end game? You just played it.
    Why don't I have 300+ skill points? Because you skipped content along the way.
    Where is new content? Sigh.
  • JohnnyKing94
    685711ac142665562492156065_700wa_0.gif
    Admin of italian commmunity of The Elder Scrolls Online - ITALIA
  • sirinsidiator
    sirinsidiator
    ✭✭✭✭
    Thanks for posting them, but aren't you forgetting something critical here? (ESOUIDocumentationP9.txt) ;)
    https://www.imperialtradingcompany.eu/ - My Addons - The Vault (Early updates and experimental projects) - My patreon - My blog
  • Enodoc
    Enodoc
    ✭✭✭✭✭
    ✭✭✭✭✭
    I wish I understood more of this :D

    This sounds like it would be useful stuff for my Scaling Alert but I'm not sure what info it is returning :sweat_smile:
    Also, there has been some separation added between the player’s difficulty setting and the group’s difficulty setting. A player’s difficulty setting will only ever be changed by the player, with the exception of the case where they become leader of an existing group, where they will take on the group’s difficulty if possible. The player’s difficulty is applied to the group if they are the leader and also applied when they enter a dungeon solo. The group’s difficulty can come from many things including LFG, or the fact that there is only a normal or only a veteran mode for a dungeon. We have also added a difficulty enum to allow for future expansion of difficulty modes (should that become necessary).
    • ZO_GetPlayerDungeonDifficulty()
    • ZO_GetGroupDungeonDifficulty()
    • ZO_GetEffectiveDungeonDifficulty()
      • Choose between the former two based on if the player is in the group.
    • ZO_ConvertToDungeonDifficulty(isVeteranDifficulty)
    • ZO_ConvertToIsVeteranDifficulty(dungeonDifficulty)
    • IsGroupUsingVeteranDifficulty()


    At least AreChampionPointsActive() is pretty self-explanatory and should be easily incorporated into Cyrodiil Alert 2.
    Edited by Enodoc on February 4, 2016 3:01PM
    UESP: The Unofficial Elder Scrolls Pages - A collaborative source for all knowledge on the Elder Scrolls series since 1995
    Join us on Discord - discord.gg/uesp
  • Keldor
    Keldor
    ✭✭✭✭
    ESO UI API Patch Notes (Version 100014)

    On PTS API version is still 100013, is this correct? :)
    Edited by Keldor on February 5, 2016 7:21PM
    ESO-Database.com (Steam Deck Client | System Status)
    - Character and Guild Database for ESO with data collection AddOn and Windows Client for automatically data transfers. (DE/EN)
    ESO-Skillfactory.com
    - Elder Scrolls Online skill calculator with Championsystem! (DE/EN/FR)
    ESO-Database Game Data API
    - API for AddOn developers to fetch game related data like Chest positions etc.

    More AddOns: ESO Farm-Buddy, ESO-Skillfactory.com Build Export, All AddOns by Keldor
  • silentgecko
    silentgecko
    ✭✭✭
    Bugreport on API @ZOS_GinaBruno :

    The Rearming Trap is listed as a own buff / debuff and would be shown on your own buff list, when it's casted by another player (and not you)
    Edited by silentgecko on February 14, 2016 12:11PM
    Guildmaster of Panic Mode! www.panic-mode.de
    Aetherian Archive Hardmode: Clear.
    Hel Ra Hardmode: Clear.
    Sanctum Ophidia Hardmode: Clear.
    Veteran Maelstrom Arena: Clear.

    VR 16 Sorcerer - V16 Nightblade
Sign In or Register to comment.