SetReplicates does not send prior RPC's or that frame's property changes

Steps to Reproduce

  1. Change the play in editor setting’s net mode to be Client.
  2. Create an Blueprint Actor class(lets name it BP_Chest) and open it.
  3. Enable Replicates for the actor.
  4. Open the level Blueprint in the current level and from BeginPlay node add an Switch Has Authority node connected to BeginPlay.
  5. Add a Spawn Actor of Class node, specify its class as BP_Chest and connect it to the Authority pin on Switch Has Authority.
  6. Back in BP_Chest, add a boolean named bChestIsOpen and set its Replication to be RepNotify.
  7. Inside the OnRep_bChestIsOpen function, add a print string node and connect it for seeing that the function was called.
  8. In the event graph add two custom events:
    1. Multicast_Test: Set this event to be a Multicast event that is NOT reliable.
    2. Multicast_Test_Reliable: Set this event to be a Multicast event that IS reliable.
  9. From the BeginPlay path add a Switch Has Authority node and connect them, and then connect a Delay node to the Authority pin and set its duration to 5 seconds.
  10. Connecting to the Delay node; set the bChestIsOpen boolean to the opposite of bChestIsOpen using a NOT node.
  11. After the set bChestIsOpen node connect a call to Multicast_Test or Multicast_Test_Reliable(doesn’t really matter because the result is the same). Connect the other multicast function to it as well both should be connected in a chain to the boolean setter we connected.
  12. At the very end of the chain, call SetReplicates by adding that node to the very end and make sure its InReplicates flag is set to false.
  13. Select Play in Editor and it after 5 seconds observe.
    1. You can shorten the seconds for testing but this was to confirm that nothing is waiting for more time to connect across the network in this scenario.

Observe that the only print string on the client is the reliable RPC, while the unreliable RPC doesn’t get sent(when its expected to be sent) and the OnRep doesn’t get called either on the client. Everything still executes on the server as expected.