Update 22 API Patch Notes & Change Log (PTS)

ZOS_GinaBruno
ZOS_GinaBruno
Community Manager
ESO UI API Patch Highlights (V100027)
A summary of important changes to the ESO UI API in this package.

Artifact Weapons
A new objective type, OBJECTIVE_DAEDRIC_WEAPON, has been added. It behaves similarly to a capture-the-flag flag in terms of pick up, carrying, and dropping. However, it also differs in a few ways:
  • The daedric weapon has its own power pool (POWERTYPE_DAEDRIC). Information about the power level can be queried using the same functions for other power types like stamina and magicka.
  • Daedric weapon objectives start out in an unknown objective control state where there is no information available about them and will stay that way until a fixed time after they spawned, or the daedric weapon is picked up.
  • There is an objective for each possible daedric weapon spawn location but most of them will be inactive.
Use EVENT_ACTIVE_DAEDRIC_ARTIFACT_CHANGED and GetActiveDaedricArtifactId to check the active daedric weapon.

Add-On Library Flag
A new directive has been added to the manifest file:
  • ## IsLibrary: true
Add-ons marked as libraries will appear at the bottom of the addon list in their own section. GetAddOnInfo now also returns isLibrary at the end of its returns.

Lua Profiler
The Lua profiler API now records C functions, garbage collection, and user events generated through RecordScriptProfilerUserEvent("text").
  • GetScriptProfilerNumCFunctions
  • GetScriptProfilerCFunctionInfo
  • GetScriptProfilerNumGarbageCollectionTypes
  • GetScriptProfilerGarbageCollectionInfo
  • RecordScriptProfilerUserEvent
  • GetScriptProfilerNumUserEvents
  • GetScriptProfilerUserEventInfo

Guild Finder
The guild finder system adds a large number of new APIs for creating guild applications, applying to guilds, and reviewing applications. It also adds APIs for querying some information (name, languages, alliance, etc.) about any guild in the game as long as they are openly recruiting. These APIs require first pulling the guild information from the server using RequestGuildFinderAttributesForGuild(guildId). This API will be rate limited so please use it with care. When information is available, EVENT_GUILD_INFO_REQUEST_COMPLETE will be sent with the matching guild id.

To make these new APIs possible guild ids in all APIs have been switched from fake, non-persistent IDs to the actual persistent guild IDs. Additionally, a new link type has been added for guilds (LINK_TYPE_GUILD), which lets you link guild recruitment in chat (GetGuildRecruitmentLink).

Encounter Log
An out of game log file has been added to record combat information. It can be enabled and disabled with the “/encounterlog” command. For information about the types of data that can appear in the log use the “/encounterlog format” command. By default, the encounter log is output in a compact format to minimize file size. However, it can be output in a more human readable format using the “/encounterlog verbose” and “/encounterlog inline” options. The encounter log includes information on all combat events, not just ones involving the player. However, players may choose to prevent their name from appearing in the log using an anonymity setting in the combat options.

Combat Event
EVENT_COMBAT_EVENT now splits damage and healing values into effective and overflow. The overflow amount is a new field that appears after the existing combat event fields.

World Events (Dragons)
Dragons make use of the new world event system. It provides information about the active locations and boss units that are participating in the world event.

Events:
  • EVENT_WORLD_EVENTS_INITIALIZED
  • EVENT_WORLD_EVENT_ACTIVATED - worldEventInstanceId.
  • EVENT_WORLD_EVENT_ACTIVE_LOCATION_CHANGED - worldEventInstanceId, oldWorldEventLocationId, newWorldEventLocationId.
  • EVENT_WORLD_EVENT_DEACTIVATED – worldEventInstanceId.
  • EVENT_WORLD_EVENT_UNIT_CHANGED_PIN_TYPE - worldEventInstanceId, unitTag, oldPinType, newPinType.
  • EVENT_WORLD_EVENT_UNIT_CREATED - worldEventInstanceId, unitTag.
  • EVENT_WORLD_EVENT_UNIT_DESTROYED.

Functions:
  • GetNextWorldEventInstanceId(lastWorldEventInstanceId) – nextWorldEventInstanceId.
  • GetWorldEventId(worldEventInstanceId) – worldEventId.
  • GetWorldEventType(worldEventId) – worldEventType.
  • GetNumWorldEventInstanceUnits(worldEventInstanceId) – numUnits.
  • GetWorldEventInstanceUnitTag(worldEventInstanceId, unitIndex) – unitTag.
  • GetWorldEventInstanceUnitPinType(worldEventInstanceId, unitTag) – pinType.

Compass Pins
The way the alpha and scale values of compass pins are specified has changed to make it easier to understand. The new method involves setting close and far distances for each attribute and interpolating between them. For example, setting closeAlphaDistanceM to “1” and farAlphaDistanceM to “100” with closeAlpha set to “1” and farAlpha set to “0.4” will cause the alpha to be 1 from 0-1m, scale down to 0.4 from 1-100m, and be 0.4 from 100m on. Additionally, you can set the max distance the pin exists at using maxDistanceM, which can be a distance in meters or the sentinel value COMPASS_PIN_NO_MAX_DISTANCE.
  • maxDistanceM
  • closeScale
  • farScale
  • closeScaleDistanceM
  • farScaleDistanceM
  • closeAlpha
  • farAlpha
  • closeAlphaDistanceM
  • farAlphaDistanceM

Miscellaneous
The boolean escapeMarkup attribute on edit boxes has been replaced with allowMarkupType which has three values:
  • ALLOW_MARKUP_TYPE_ALL
  • ALLOW_MARKUP_TYPE_COLOR_ONLY
  • ALLOW_MARKUP_TYPE_NONE
PreviewTradingHouseSearchResultItemLinkAsFurniture(itemLink, variation) has also been added to allow previewing any item link seen in trading house search results this session.
Gina Bruno
ESO Community Manager
Dev Tracker | Service Alerts | ESO Twitter | My Twitter
Staff Post
  • Reorx_Holybeard
    Reorx_Holybeard
    ✭✭✭✭✭
    Is there any function that gives you if the ability is considered "Criminal" act (i.e., some of the new Necromantic skills)? Took a quick look and didn't see anything that might be relevant.
    Reorx Holybeard -- NA/PC
    Founder/Admin of www.uesp.net -- UESP ESO Guilds
    Creator of the "Best" ESO Build Editor
    I'm on a quest to build the world's toughest USB drive!
  • Reorx_Holybeard
    Reorx_Holybeard
    ✭✭✭✭✭
    Is there any function that gives you if the ability is considered "Criminal" act (i.e., some of the new Necromantic skills)? Took a quick look and didn't see anything that might be relevant.

    To partially answer my own question, you can get this indirectly by calling the GetAbilityDescriptionHeader(id) API function and checking if the text "CRIMINAL ACT" appears in the returned text.

    As an aside, the text is double-formatted:
    |cffffff|ce60000CRIMIMAL ACT|r|r
    
    Reorx Holybeard -- NA/PC
    Founder/Admin of www.uesp.net -- UESP ESO Guilds
    Creator of the "Best" ESO Build Editor
    I'm on a quest to build the world's toughest USB drive!
  • Baertram
    Baertram
    ✭✭✭
    Hm, having to check texts on multilanguage games is kind of Bad Imo.
    @Zos,could you please add an API function for this? Would be very nice!

    And thank you for the natch potes!
    Edited by Baertram on April 16, 2019 8:04PM
  • Enodoc
    Enodoc
    ✭✭✭✭✭
    ✭✭✭✭✭
    Anyone know what the returns to EVENT_ACTIVE_DAEDRIC_ARTIFACT_CHANGED are?

    Edit: Also, does anyone know whether there are new OBJECTIVE_CONTROL_EVENTs for this weapon (picking up, dropping, etc), and whether they are tied to the above event, or EVENT_ARTIFACT_CONTROL_STATE like Elder Scrolls, or EVENT_OBJECTIVE_CONTROL_STATE like keep flags?
    Edited by Enodoc on April 18, 2019 9:51PM
    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
  • VaranisArano
    VaranisArano
    ✭✭✭✭✭
    ✭✭✭✭✭
    Would the API have to change significantly if Anonymity were made the default in game option for the encounter log?
  • Enodoc
    Enodoc
    ✭✭✭✭✭
    ✭✭✭✭✭
    The four player name strings returned by EVENT_DAEDRIC_ARTIFACT_OBJECTIVE_STATE_CHANGED (holderRawCharacterName, holderDisplayName, lastHolderRawCharacterName, lastHolderDisplayName) don't appear to be working - as far as I can see, they are coming out blank. The returns seem to be similar to EVENT_ARTIFACT_CONTROL_STATE, and I've never had problems with the playerName in that one, so I'm not sure what the problem is.

    The Event also does not return objectiveName, so it is not possible to attach a "<Player> has picked up <Objective>" message to this event. Without player names or objective names, this event is not very useful right now, and it is easier to use EVENT_OBJECTIVE_CONTROL_STATE with OBJECTIVE_DAEDRIC_WEAPON instead (since that event returns objectiveName, I can at least create half of the message). Daedric artifacts also don't fire EVENT_ARTIFACT_CONTROL_STATE, so it is currently not possible to add a player name to the message that way either.
    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
  • GandalfTheGuardian
    GandalfTheGuardian
    Soul Shriven
    Enodoc wrote: »
    The four player name strings returned by EVENT_DAEDRIC_ARTIFACT_OBJECTIVE_STATE_CHANGED (holderRawCharacterName, holderDisplayName, lastHolderRawCharacterName, lastHolderDisplayName) don't appear to be working - as far as I can see, they are coming out blank. The returns seem to be similar to EVENT_ARTIFACT_CONTROL_STATE, and I've never had problems with the playerName in that one, so I'm not sure what the problem is.
    The names are working but a very odd way. The event is giving you the names only when you (as player) are taking/dropping the weapon. If an other player is doing this, the names are "" and only the alliance code is provided.
    Hope this a bug (pts5.0.2)
    Enodoc wrote: »
    The Event also does not return objectiveName, so it is not possible to attach a "<Player> has picked up <Objective>" message to this event. Without player names or objective names, this event is not very useful right now, and it is easier to use EVENT_OBJECTIVE_CONTROL_STATE with OBJECTIVE_DAEDRIC_WEAPON instead (since that event returns objectiveName, I can at least create half of the message). Daedric artifacts also don't fire EVENT_ARTIFACT_CONTROL_STATE, so it is currently not possible to add a player name to the message that way either.
    You get all the params to get the objectiveName:
    local objectiveName = GetObjectiveInfo(objectiveKeepId, objectiveObjectiveId, battlegroundContext)

    However, the holder names must be filled in for the objectiveControlEvent OBJECTIVE_CONTROL_EVENT_FLAG_TAKEN and
    OBJECTIVE_CONTROL_EVENT_FLAG_DROPPED to make this event useful

    BTW: There is an undocumented objectiveControlEvent with value 16 that comes when weapon returns to Oblivion aka despawns -> SI_DAEDRIC_ARTIFACT_DESPAWNED
  • InvitationNotFound
    InvitationNotFound
    ✭✭✭✭✭
    Enodoc wrote: »
    The four player name strings returned by EVENT_DAEDRIC_ARTIFACT_OBJECTIVE_STATE_CHANGED (holderRawCharacterName, holderDisplayName, lastHolderRawCharacterName, lastHolderDisplayName) don't appear to be working - as far as I can see, they are coming out blank. The returns seem to be similar to EVENT_ARTIFACT_CONTROL_STATE, and I've never had problems with the playerName in that one, so I'm not sure what the problem is.

    The Event also does not return objectiveName, so it is not possible to attach a "<Player> has picked up <Objective>" message to this event. Without player names or objective names, this event is not very useful right now, and it is easier to use EVENT_OBJECTIVE_CONTROL_STATE with OBJECTIVE_DAEDRIC_WEAPON instead (since that event returns objectiveName, I can at least create half of the message). Daedric artifacts also don't fire EVENT_ARTIFACT_CONTROL_STATE, so it is currently not possible to add a player name to the message that way either.

    Anything new on this one?

    Either i wrote some really strange code or I just get some numbers as player names o_O
    We want firing off Dark Exchange in the middle of combat to feel awesome... - The Wrobler
    You know you don't have to be here right? - Rich Lambert
    Verrätst du mir deinen Beruf? Ich würde auch gerne mal Annahmen dazu schreiben, wie simple die Aufgaben anderer sind. - Kai Schober

    Addons:
    RdK Group Tool: esoui DE EN FR
    Port to Friend's House: esoui DE EN FR
    Yet another Compass: esoui DE EN FR
    Group Buffs: esoui DE EN FR
  • Enodoc
    Enodoc
    ✭✭✭✭✭
    ✭✭✭✭✭
    Enodoc wrote: »
    The four player name strings returned by EVENT_DAEDRIC_ARTIFACT_OBJECTIVE_STATE_CHANGED (holderRawCharacterName, holderDisplayName, lastHolderRawCharacterName, lastHolderDisplayName) don't appear to be working - as far as I can see, they are coming out blank. The returns seem to be similar to EVENT_ARTIFACT_CONTROL_STATE, and I've never had problems with the playerName in that one, so I'm not sure what the problem is.

    The Event also does not return objectiveName, so it is not possible to attach a "<Player> has picked up <Objective>" message to this event. Without player names or objective names, this event is not very useful right now, and it is easier to use EVENT_OBJECTIVE_CONTROL_STATE with OBJECTIVE_DAEDRIC_WEAPON instead (since that event returns objectiveName, I can at least create half of the message). Daedric artifacts also don't fire EVENT_ARTIFACT_CONTROL_STATE, so it is currently not possible to add a player name to the message that way either.
    Anything new on this one?

    Either i wrote some really strange code or I just get some numbers as player names o_O
    Yeah it's not coming out blank any more, but as you say, it's now just coming out as numbers.
    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
  • InvitationNotFound
    InvitationNotFound
    ✭✭✭✭✭
    Enodoc wrote: »
    Enodoc wrote: »
    The four player name strings returned by EVENT_DAEDRIC_ARTIFACT_OBJECTIVE_STATE_CHANGED (holderRawCharacterName, holderDisplayName, lastHolderRawCharacterName, lastHolderDisplayName) don't appear to be working - as far as I can see, they are coming out blank. The returns seem to be similar to EVENT_ARTIFACT_CONTROL_STATE, and I've never had problems with the playerName in that one, so I'm not sure what the problem is.

    The Event also does not return objectiveName, so it is not possible to attach a "<Player> has picked up <Objective>" message to this event. Without player names or objective names, this event is not very useful right now, and it is easier to use EVENT_OBJECTIVE_CONTROL_STATE with OBJECTIVE_DAEDRIC_WEAPON instead (since that event returns objectiveName, I can at least create half of the message). Daedric artifacts also don't fire EVENT_ARTIFACT_CONTROL_STATE, so it is currently not possible to add a player name to the message that way either.
    Anything new on this one?

    Either i wrote some really strange code or I just get some numbers as player names o_O
    Yeah it's not coming out blank any more, but as you say, it's now just coming out as numbers.

    Hey @Enodoc
    I was playing around with it lately and this whole things looks bugged as hell.

    I do not get a spawned messaged or a revealed message.

    There is some event type 15 where the objective goes white on the map instead of an alliance color (without being dropped or taken). No idea what the hell this is.

    Were you able to figure out anything of the above?

    Edit:
    Just found the following:
    * EVENT_DAEDRIC_ARTIFACT_OBJECTIVE_SPAWNED_BUT_NOT_REVEALED (*integer* _daedricArtifactId_)
    * EVENT_DAEDRIC_ARTIFACT_OBJECTIVE_STATE_CHANGED (*integer* _objectiveKeepId_, *integer* _objectiveObjectiveId_, *[BattlegroundQueryContextType|#BattlegroundQueryContextType]* _battlegroundContext_, *[ObjectiveControlEvent|#ObjectiveControlEvent]* _objectiveControlEvent_, *[ObjectiveControlState|#ObjectiveControlState]* _objectiveControlState_, *[Alliance|#Alliance]* _holderAlliance_, *[Alliance|#Alliance]* _lastHolderAlliance_, *[MapDisplayPinType|#MapDisplayPinType]* _pinType_, *integer* _daedricArtifactId_, *[ObjectiveControlState|#ObjectiveControlState]* _lastObjectiveControlState_)
    * EVENT_ACTIVE_DAEDRIC_ARTIFACT_CHANGED (*integer:nilable* _artifactId_)
    

    Source esoui https://www.esoui.com/forums/showthread.php?t=8465&highlight=DAEDRIC -> ESOUIDocumentationP22-3.txt

    I guess i'll have to check this later, but it might explain a few things.

    Edit #2:
    And i think
    EVENT_ACTIVE_DAEDRIC_ARTIFACT_CHANGED (*integer:nilable* _artifactId_)
    
    is still completely useless, but i'll see...
    Edited by InvitationNotFound on June 27, 2019 10:37AM
    We want firing off Dark Exchange in the middle of combat to feel awesome... - The Wrobler
    You know you don't have to be here right? - Rich Lambert
    Verrätst du mir deinen Beruf? Ich würde auch gerne mal Annahmen dazu schreiben, wie simple die Aufgaben anderer sind. - Kai Schober

    Addons:
    RdK Group Tool: esoui DE EN FR
    Port to Friend's House: esoui DE EN FR
    Yet another Compass: esoui DE EN FR
    Group Buffs: esoui DE EN FR
  • InvitationNotFound
    InvitationNotFound
    ✭✭✭✭✭
    Okay, I was able to test a few things now.
    EVENT_ACTIVE_DAEDRIC_ARTIFACT_CHANGED (*integer:nilable* _artifactId_)
    
    This event seems to be useless



    EVENT_DAEDRIC_ARTIFACT_OBJECTIVE_STATE_CHANGED (*integer* _objectiveKeepId_, *integer* _objectiveObjectiveId_, *[BattlegroundQueryContextType|#BattlegroundQueryContextType]* _battlegroundContext_, *[ObjectiveControlEvent|#ObjectiveControlEvent]* _objectiveControlEvent_, *[ObjectiveControlState|#ObjectiveControlState]* _objectiveControlState_, *[Alliance|#Alliance]* _holderAlliance_, *[Alliance|#Alliance]* _lastHolderAlliance_, *[MapDisplayPinType|#MapDisplayPinType]* _pinType_, *integer* _daedricArtifactId_, *[ObjectiveControlState|#ObjectiveControlState]* _lastObjectiveControlState_)
    
    This event will give you info about the following states respectively objectiveControlEvent:
    OBJECTIVE_CONTROL_EVENT_FLAG_SPAWNED
    
    Revealed (but not taken) message
    OBJECTIVE_CONTROL_EVENT_FLAG_DROPPED
    
    Artifact dropped.
    OBJECTIVE_CONTROL_EVENT_FLAG_TAKEN
    
    Artifact taken.
    16 
    
    No idea what event this actually is, but it means that the artifact has disappeared (returned to oblivion).
    15
    
    Appears sometimes and seems to be some sort of bug where the artifact has no color on the minimap



    EVENT_DAEDRIC_ARTIFACT_OBJECTIVE_SPAWNED_BUT_NOT_REVEALED (*integer* _daedricArtifactId_)
    
    Spawn message.


    Furthermore, the following function will give you the artifact name from the daedricArtifactId:
    GetDaedricArtifactDisplayName(daedricArtifactId)
    
    Note that I do not see where this function has been documented.

    The function in the initial thread doesn't exist:
    GetActiveDaedricArtifactId 
    

    Anyway, I think with all of this you can get everything you need except the player name holding the artifact.
    We want firing off Dark Exchange in the middle of combat to feel awesome... - The Wrobler
    You know you don't have to be here right? - Rich Lambert
    Verrätst du mir deinen Beruf? Ich würde auch gerne mal Annahmen dazu schreiben, wie simple die Aufgaben anderer sind. - Kai Schober

    Addons:
    RdK Group Tool: esoui DE EN FR
    Port to Friend's House: esoui DE EN FR
    Yet another Compass: esoui DE EN FR
    Group Buffs: esoui DE EN FR
Sign In or Register to comment.