Quantcast AddOn Notes 2.3 - ESOUI
Thread Tools Display Modes
02/03/16, 05:24 PM   #1
ZOS_ChipHilseberg
ZOS Staff!
Premium Member
Yes this person is from ZeniMax!
Join Date: Oct 2014
Posts: 551
AddOn Notes 2.3

While the official notes are still being posted, here's a rough copy. The new documentation .txt will be with those but you folks seem to make better docs anyway, heh.

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)
o 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)
o The text type is main text or extra text (the two labels in an SCT event).
o 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)
o 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)
o 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)
o 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)
o 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)
o 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)
o Sets the scale of crit and non-crit events.
• SetSCTSlotEventVisualInfo(slotIndex, eventType, SCTEventVisualInfoId)
o 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)
o Ordering is the order in which the slots are filled from 1 – N.
• ClearSCTCloudOffsets(SCTCloudId)
• SetSCTCloudAnimationOverlapPercent(SCTCloudId, animationOverlapPercent)
o 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()
o 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)
o 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()
o Returns false when the player is using a special override action bar.
• GetNextBackpackUpgradePrice()
• DoesCurrentMapMatchMapForPlayerLocation()
• GetZoneId(zoneIndex) and GetZoneIndex(zoneId)
• CanLeaveCurrentLocationViaTeleport()

Last edited by ZOS_ChipHilseberg : 02/03/16 at 05:26 PM.
  Reply With Quote
02/03/16, 05:36 PM   #2
sirinsidiator
 
sirinsidiator's Avatar
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 1,343
Thanks for posting them here. We were eagerly awaiting them.
__________________
Like what I do? Support me on Patreon!
>siri.exe MyAddon
Does your addon work? [y/n] n
There is a typo in there.
  Reply With Quote
02/03/16, 06:12 PM   #3
sirinsidiator
 
sirinsidiator's Avatar
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 1,343
Question Time!

Combat Text
  • From the description it sounds like they are in 3D space, or are they just scaling relative to the unit they are attached to?
  • I assume they do not have a Lua object that can be looked at with Zgoo or Torchbug?
  • Do we get errors if we set invalid parameters (e.g. fontStyle)?
  • Any ways we can debug them in case they do not show up because of our configuration? Some getter functions might be nice.

Looking For Group
  • Are Daily/Standard rewards just random dungeons or specific to the Undaunted dailies?

Miscellaneous
  • Did the EVENT_PLAYER_ACTIVATED isFirstLoad boolean not make it in?

P.S. All these changes are awesome.
__________________
Like what I do? Support me on Patreon!
>siri.exe MyAddon
Does your addon work? [y/n] n
There is a typo in there.
  Reply With Quote
02/04/16, 04:44 AM   #4
Ayantir
 
Ayantir's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2014
Posts: 1,022
Many thanks, greatly appreciated to post them here even it was still a bit raw
__________________
Obsessive Compulsive Coder

My little french Guild: Cercle de l'Eveil
  Reply With Quote
02/04/16, 05:37 AM   #5
Harven
 
Harven's Avatar
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 137
Hey Chip, guys
Seems like there are some leaked variables (here they are with values):

["level"] = "true",
["rank"] = "true",
["showOption"] = "2",
["title"] = "Mournhold"

I'm almost sure I had all addons disabled during _G dump.
  Reply With Quote
02/04/16, 06:41 AM   #6
coolmodi
AddOn Author - Click to view addons
Join Date: Mar 2015
Posts: 47
Originally Posted by sirinsidiator View Post
Question Time!
Combat Text
  • From the description it sounds like they are in 3D space, or are they just scaling relative to the unit they are attached to?
It's not in 3d, a bit like WoW and other games do it but still on the ui pane, at least it lookst like it.
Warning: Spoiler


Edit: Aaaand I broke it, wanted to use SetSCTKeyboardFont(fontName, fontStyle) and figure out whatever the fontstyle is supposed to be, now the SCT doesn't work anymore.
Originally Posted by sirinsidiator View Post
  • Do we get errors if we set invalid parameters (e.g. fontStyle)?
No, it just doesn't work anymore... and UI reload doesn't fix it.

Last edited by coolmodi : 02/04/16 at 07:46 AM.
  Reply With Quote
02/04/16, 08:49 AM   #7
ZOS_ChipHilseberg
ZOS Staff!
Premium Member
Yes this person is from ZeniMax!
Join Date: Oct 2014
Posts: 551
Originally Posted by sirinsidiator View Post
Question Time!

Combat Text
  • From the description it sounds like they are in 3D space, or are they just scaling relative to the unit they are attached to?
  • I assume they do not have a Lua object that can be looked at with Zgoo or Torchbug?
  • Do we get errors if we set invalid parameters (e.g. fontStyle)?
  • Any ways we can debug them in case they do not show up because of our configuration? Some getter functions might be nice.

Looking For Group
  • Are Daily/Standard rewards just random dungeons or specific to the Undaunted dailies?

Miscellaneous
  • Did the EVENT_PLAYER_ACTIVATED isFirstLoad boolean not make it in?

P.S. All these changes are awesome.

They are just labels that are anchored around the players, though their position is defined with both UI and in world offsets. I can look into adding some getters and maybe a total reset function if things get too messed up. Restarting the client is the only way to clear it all out right now.

I believe the daily reward that was added was for random.

It was requested after code was locked for PTS. I can see about maybe getting it into a later PTS update.
  Reply With Quote
02/05/16, 05:19 AM   #8
sirinsidiator
 
sirinsidiator's Avatar
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 1,343
Is there any reason why zo_iconFormat now uses string instead of integer format for the height and width?
http://esoui.github.io/esoui/esoui-l...alapi-lua.html
__________________
Like what I do? Support me on Patreon!
>siri.exe MyAddon
Does your addon work? [y/n] n
There is a typo in there.
  Reply With Quote
02/05/16, 08:40 AM   #9
ZOS_ChipHilseberg
ZOS Staff!
Premium Member
Yes this person is from ZeniMax!
Join Date: Oct 2014
Posts: 551
Originally Posted by sirinsidiator View Post
Is there any reason why zo_iconFormat now uses string instead of integer format for the height and width?
http://esoui.github.io/esoui/esoui-l...alapi-lua.html
The icon markup also supports percentage sizes (percentage of the font height). This change was to allow passing in "100%" in addition to the absolute sizes it could previously (and still does) take.
  Reply With Quote
02/05/16, 08:59 AM   #10
haggen
 
haggen's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2015
Posts: 137
Originally Posted by ZOS_ChipHilseberg View Post
The icon markup also supports percentage sizes (percentage of the font height). This change was to allow passing in "100%" in addition to the absolute sizes it could previously (and still does) take.
Nice, didn't know about this feature, thanks Chip!
  Reply With Quote
02/05/16, 09:16 AM   #11
sirinsidiator
 
sirinsidiator's Avatar
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 1,343
Originally Posted by ZOS_ChipHilseberg View Post
The icon markup also supports percentage sizes (percentage of the font height). This change was to allow passing in "100%" in addition to the absolute sizes it could previously (and still does) take.
Wow. That's awesome to know. I was always wondering how I am supposed to match configurable font sizes with the icons. Gotta change some code.
__________________
Like what I do? Support me on Patreon!
>siri.exe MyAddon
Does your addon work? [y/n] n
There is a typo in there.
  Reply With Quote
02/25/16, 10:28 AM   #12
sirinsidiator
 
sirinsidiator's Avatar
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 1,343
I was trying out the Label Line Markup on PTS, but I can't get it to work. Is it not in the game yet, or am I just doing it wrong?

I tried the following combinations following the description in the update notes:
Code:
|L0:0:0:0:0:2:0:0:000000|lsome test text|l
|L0:0:0:0:0:2:0:1:ffffff|lsome test text|l
|L0:0:0:0:0:100:1:0:000000|lsome test text|l
|L0:0:0:0:0:100:1:1:ffffff|lsome test text|l
|L1:1:1:0:0:2:0:1:ffffff|lsome test text|l
But none of these show any lines.
__________________
Like what I do? Support me on Patreon!
>siri.exe MyAddon
Does your addon work? [y/n] n
There is a typo in there.
  Reply With Quote
03/01/16, 02:45 PM   #13
prasoc
 
prasoc's Avatar
AddOn Author - Click to view addons
Join Date: Jan 2016
Posts: 24
Great write up on the new update, thanks! With the new SCT system, is the functionality there to allow us to manually add in game custom "tags"? If so, that would open up a whole new level of interaction between the UI and game! Very promising
__________________
LUA programmer and ESO addict

[v50 CP267] Redguard Dragonknight

Author of the Gamepad Interface Improvement add-on, BetterUI!
  Reply With Quote

ESOUI » Developer Discussions » General Authoring Discussion » AddOn Notes 2.3

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off