-
Bug
-
Resolution: Awaiting Response
-
None
-
1.21.0
-
None
-
Community Consensus
-
Windows
As of 1.21.0, it seems like we are unable to see other players emoting in-game in select scenarios. I only observe this behavior the other player uses an emote which I have not downloaded locally.
The bug was observed on a realm, and an online world (The client implementation of fetching emotes suggests that there is no discernable difference between these environments).
Steps to reproduce:
1) Person A restarts game, joins an online world (i.e. realm) with person B. It's important that person A doesn't attempt to open their emote menu or dressing room at any point in this process. More about why this is important below.
2) Person B plays an emote that person A doesn't own. For example, person B may use a paid emote that person A does not own.
3) Person A will never observe person B emoting in-game, even after waiting for several minutes
Implementation-level analysis:
Regarding reproduction step 3: based on my observations with caching via initially opening the emotes tab in the persona dressing room, all available emotes (hundreds) can be downloaded in a matter of seconds. Of course, I'd imagine a single emote can be downloaded and available in a fraction of that time, in the event someone else in a world uses an emote I don't have downloaded. This eliminates any possible internet connectivity issues.
When we enter the dressing room screen and navigate to the emotes tab, the client will fetch all available emotes from the Marketplace and download them if not already present locally (currently owned emotes are already downloaded upon client load). The new, unowned emotes get loaded into the client persona repository as expected, and for the rest of the client session, they are immediately available to play when someone else uses them in a game.
However, if we do not enter the emotes tab (all the emotes would correctly cache on the client this way), the client uses an alternative download mechanism to cache an emote to play immediately after downloading (see the ClientNetworkHandler::handle overloads for EmotePacket/EmoteListPacket). PersonaService::validatePersonaEmotes will correctly fetch the relevant product ID for a given emote, then the client attempts to download the product via PersonaRepository::downloadAndLoadPieces. The problem lies with the resultant PersonaRepository::PendingPieceDownloadBatch object, its DlcBatchModel will forever hang in an importing state and never actually downloads. To be specific, DlcBatchModel::isDownloadingOrImporting indefinitely returns true where it is queried in PersonaRepository::update. Over time, this will cause the import queue to build up.
I hope this issue can be prioritized because people who own paid emotes currently do not receive their product as promised. When marketplace-related bugs arise, it affects partners' bottom lines and is bad PR for the marketplace's economy.