In AbilitySystemComponent_Abilities.cpp, the check for the client being on a different section on line 3059 checks that the RepNextSectionID is not the current section. One would assume this is because if the client has simply progressed to the next section, there is no requirement to update the montage; however, it also prevents the new section being played when the new section also loops back to the prior section.
The subsequent position update checks that the current section is the correct section (AbilitySystemComponent_Abilities.cpp:3074), which it is not, since the section was not updated on line 3063.
This results in the non-authoritative clients “ignoring” the montage section change. Adding a blank section to the end of the montage on the final frame and having the second stage route through that works around the issue.
1. Setup a pawn with a Gameplay Ability Component.
2. Create triggers that will function for networked play
3. Create a montage with 2 animations
a. For both animations create an anim section
b. Have the first loop on itself
c. Have the second set such that the first is the next section after it
4. Create an ability with two PlayMontageAndWaits
a. On execute, play the first section.
b. After a delay – to simulate the event occurring – play the second
5. Set PIE to 3 players
6. Set Play Net Mode to Play as Listen Server
7. Unset Launch Separate Server
8. Set Run Under One Process
If the ability comes from a client in a separate window, the PIE session will see the montage, as will the authoritative client. The other non-PIE client will not.
If the ability comes from the PIE client, neither separate window clients will see it.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-201802 in the post.