Making "Zelda Pick-Up/Throw" Multiplayer

Another update (Still not got this working):

Found this really old post: Why are Client character animations not running on the server?

Have you looked into your character’s mesh MeshComponentUpdateFlag? By default it is set to EMeshComponentUpdateFlag::AlwaysTickPose which means tick, but don’t update bones. You would want to set it to AlwaysTickPoseAndRefreshBones.

This doesn’t even look like it’s still there any more? At least, I can’t find the option from the character mesh as suggested.

image

The only other response that seemed to harbour a result was this:

However, I’m not even using custom skeleal meshes at this point, and certainly not more than one within the actors Blueprint, as you can see here:

image

This lead me to wonder if attaching the actor to the component somehow counted as an additional skeletal mesh, as far as the logic is concerned, but that event is only called partway through the animation, so if that was the case surely it should play the first part of the animation before it goes wrong?

As you will see, I started spamming the blueprints with print strings to try and figure out what might be going wrong, and that lead me to find that when the highlighted node was set to “Multicast” & “Reliable” it was only being called on the client, and not on the server.

As such I’ve now set it to “Run on owning client” and the first thing the event does is call the “Input Action Pick Up on server” event, which runs the same logic as itself.

The following snippet is from the AnimGraph of my character, it calls an event which attachs the actor I want to “Pick Up”. I can’t find anything that tells me whether this even is replicated or not, and no option to adjust it. I assume that it is only run on the client, as an AnimNotify is most likely going to be used for local stuff anyway, instead of stuff crucial to being run on the server. As such it calls a custom event on the character.

As you can see, I’ve set this event to “Multicast” & “Reliable” so that it runs on the server and on all clients, as the result of the event needs to happen for all players.

When executed as the server: It attaches to the player for the server and the client.

When executed as the client: It attaches to the player as the client, but does not attach on the server. A print string at the end has proven that the event is still being called for both the server and the client, no matter which executes it.

This is about the most simple set-up in the game and it still doesn’t work as it looks like it should? If anyone could steer me towards what I’m missing with this, it would really help me out, as on the surface it looks like the result should be the same on both, as both.