Skip to content

2.2.0 API Changes

Vendal Thornheart edited this page Aug 28, 2018 · 1 revision

I'll update this as I continue to add more info about upcoming API changes. Stay posted here for updates.

Potentially Breaking Changes

Changes to Actions related to Emotes

Emotes are being moved from being Items equipped on a character to Plugs that are inserted into Sockets on a specific, always-equipped item on a character (the "Emote Wheel" item, which will have hash identifier 3183180185 and will always be equipped on every character by default).

This means that you will no longer be able to use the EquipItem action to change a user's equipped emote! The Advanced Write Action "InsertPlug" will have to be used: though we don't provide official support for 3rd parties to perform this action yet, we hope to do so in the near future.

Note that, because Emotes are Plugs and no longer instanced items, there won't actually be any items left in your inventory to even attempt the EquipItem action on! The actions are, unfortunately, totally incompatible.

Changes in Contracts for Emote Wheel

This is an API change we had to take out of necessity, due to the large number of Emotes that exist and will exist over the lifetime of Destiny 2. The Socket Wheel is implemented as a simple set of 4 sockets, each with a reusable plug for every possible Emote that you can get in the game. The API's socket data was never built with the thought that any item would ever have that many reusable plugs, and returning Emote Wheel data in the existing manner was going to result in a significant increase in bandwidth costs/size as well as serialization/deserialization/compression.

As a result, with 2.2.0 there will be a new concept (the "Plug Set"), defined with a new Destiny Definition (DestinyPlugSetDefinition). These define a set of reusable plugs that can be shared across multiple sockets: in the case of the Emote Wheel, every socket on the wheel will be pointing to the same "Plug Set" to define its reusable plugs, instead of them being duplicated in each individual socket. Sockets will have a new, optional reusablePlugSetHash property that will define this relationship.

At runtime, two new components will be returned with GetProfile requests (one with GetCharacter requests) whenever you request that "ItemSockets" components be returned:

  • profilePlugSets
  • characterPlugSets

These will return, keyed by the DestinyPlugSetDefinition's hash, any reusable plugs in the set that can be applied either Profile-wide or Character-wide. (for instance, Emotes that you got through the Eververse are granted account-wide: and thus their status will be found in profilePlugSets. Emotes that you get by virtue of your character being a Hunter would be found in characterPlugSets). The information returned is in the form of a standard DestinyItemPlug - the same ones you find on the existing DestinyItemSocketsComponent.sockets[].reusablePlugs[]. You may still find reusable plugs for the socket on the item itself, in a theoretical world where reusable plug sets' statuses depend on item-specific data rather than character or profile-wide data.

Therefore, the proper way to know what reusable plugs are available for a socket would be to go through the following workflow:

  • Does the socket definition define a reusablePlugSetHash?
    • If no, just use the existing DestinyItemSocketsComponent.sockets[].reusablePlugs[] data.
    • If yes, check the new profilePlugSets and characterPlugSets components for reusable plugs under the defined reusablePlugSetHash, and then combine that reusable plug data with any DestinyItemSocketsComponent.sockets[].reusablePlugs[] that may exist. That is your full set of possible reusable plugs on the socket.

Without implementing this change, logic that uses Emote Wheels (or any theoretical future sockets that use this Plug Set concept) will still properly show whatever's currently plugged into that socket, but you won't be showing the full set of possible plugs that could be applied to the socket.

New Features

PVP Ranking

"Valor": Your non-competitive (Quickplay) PVP ranking. Implemented merely as a Progression, so you will get this data with Progression component requests. The hash identifier of the progression will be 3882308435.

"Glory": Your competitive PVP ranking. Also a progression, hash identifier 2679551909.

Note that, as of DLC 2, Progression "Steps" (the "steps" property in DestinyProgressionDefinition) will have an optional "icon" property. This was added so that you can show your current rank's icon for Valor and Glory, though theoretically it could be used for any progression now and in the future. Check whether the icon exists before you attempt to show it of course, as most progressions won't have it.

Vendor Seasonal Rankings

Some (but not all) vendors will now have a "seasonal rank" that you can increase which will gate access to special items.

DestinyVendorComponent will, as such, now have an optional "seasonalRank" property. If it is populated, that is the user's current seasonal rank with that vendor. For now, it appears that this is merely increased in the same manner that you "increase" ranks on Vendors normally - through increasing reputation with them. This seasonal rank will reset with every game "season" however.