Tool animations don't replicate from client to server

Hello all, I have run into an issue with animation replication from client to server.

For some reason for other players the animation only replicates for character body parts, and not the tool itself.

How the animation is supposed to look like


How it looks like for other players

When the players get very close, the problem seems to be fixed

Animations are loaded from the client while the tool is connected to the player’s right arm with a Motor6D created on the server when the tool is equipped.

I’ve tried looking on the devforum but didn’t find a satisfiable solution

  • Creating an Animator object on the server and loading the animations into that instead of the humanoid didn’t work
  • Loading the animations on the server and playing them on the server didn’t change anything
  • Firing remote events to all clients seems not only like a very network intensive solution (Considering ~20 players actively fighting eachother) but I also feel like it would make the animation look “laggy” for others

I would be very grateful if somebody knew how to solve this

The reason the part doesn’t move is because I assume it is a part of the animation and since the part isn’t technically the players due to network ownership, it won’t be seen by other clients as expected. This may sound, confusing, but let me just go over a few examples of what network ownership is.

In short, network ownership is when the client is responsible for something, for example the players character. This can be very useful for us, however there are a few setbacks.
1 - When you give network ownership to someone, if they have a bad connection, are laggy, etc, the part will also become laggy.
2 - Giving the player too many parts connected to them can cause them performance issues.

The way you can give the player the network ownership of the sword is by simply doing sword:SetNetworkOwner(player)

Hmm, I haven’t considered part network ownership, I’ll try it and reply back in a moment.

You can also animate the tool with Motor6D’s I will edit in the link in a sec lemme get it

EDIT: How to animate Tool Parts (Guns, Knifes etc.)

Yeah I’m already doing pretty much the same except parenting the Motor6D to the right arm instead of the RootPart/Torso

Tried it, didn’t seem to work sadly.

i would use the torso, you can animate it more freely and without any problems

I used to anime it with the torso before, it also didn’t work.
Strangely it seemed to work fine until sometime in this years summer.

It works fine with me can you show my why it wont work with the torso because my bat in my Transfur game works with this. Also show me what it looks like in the RightArm and scripts

Server Script parts that affect the grip

local cloneGrip

tool.Equipped:Connect(function()
    cloneGrip = grip:Clone() -- grip is the original Motor6D
    cloneGrip.Part0 = RightArm
    cloneGrip.Part1 = Handle
    cloneGrip.Parent = RightArm
end

tool.Unequipped:Connect(function()
    if cloneGrip then
        cloneGrip:Destroy()
    end
end

How it looks like in the explorer

I would do this

--Client
local WeaponTool = script.Parent

WeaponTool.Equipped:Connect(function()
    game.ReplicatedStorage:WaitForChild("ConnectM6D"):FireServer(WeaponTool.greatHandle)
    local char = game.Players:GetPlayerFromCharacter(WeaponTool.Parent).Character
    char:WaitForChild("Right Arm").greatHandle.Part0 = WeaponTool.greatHandle
    char:WaitForChild("Right Arm").greatHandle.Part1 = char["Right Arm"]
end)

WeaponTool.Unequipped:Connect(function()
    game.ReplicatedStorage:WaitForChild("DisconnectM6D"):FireServer()
end)

--Server
--do your other code

If this doesn’t work change it to Torso and make a new serverscript in serverscriptservice and do this if you already didn’t

--serverNEW
game.Players.PlayerAdded:Connect(function(plr)
    plr.CharacterAdded:Connect(function(char)
        local m = Instance.new("Motor6D")
        m.Parent = char["Right Arm"]
        m.Name = "greatHandle"
    end)
end)

game.ReplicatedStorage.ConnectM6D.OnServerEvent:Connect(function(plr,handlePart)
    local char = plr.Character
    char["Right Arm"].greatHandle.Part0 = handlePart
    char["Right Arm"].greatHandle.Part1 = char["Right Arm"]
end)

game.ReplicatedStorage.DisconnectM6D.OnServerEvent:Connect(function(plr)
    plr.Character["Right Arm"].greatHandle.Part0 = nil
end)

I’m sorry but… Just by looking at it your code does the exact same thing just with a more complicated process.

Then make it the torso and animate it again it would work, it does for me

Tried just setting Part0 to torso and also setting both Part0 and parent to torso, both outcomes result in this, and the sword still doesn’t move
thing2

Apparently creating an Animator object on the server and then loading the animations into it works but only partially.
When a new player joins the server the animations replicate correctly from old players to the new player, but the animations do not replicate correctly from the new player to old players.