Issues connecting two players via a RopeConstraint

When connecting two players with a RopeConstraint, one player is completely fine while the other has their animations and movement glitch out.

Here is an example, where Player1 has glitched movement and animations, but Player2 moves normally. I have tried making the humanoid Sit or PlatformStand, to no effect.

The only thing I’ve found that could be used to predict which humanoid will glitch out is whichever humanoid spawned before the other.

This doesn’t happen for NPCs either, and happens regardless of R6 or R15.

The goal of this was to create a working lasso system where a player can grab another player and drag them around, which works aside from this issue.

Anybody have a solution for this?

4 Likes

The issue is happening because one of the characters gains network ownership of the other character, which is a side effect of how constraints work. Players are meant to have network ownership of their own characters, and awful things happen when that is not the case. Unfortunately, you can only set network ownership on the server (obviously), so no matter what you do, you will have one of the two involved players experiencing this movement latency and strange behavior.

Maybe you can use some kind of proxy to move the dragged player on his own client.
Ie, visual-only rope (beam?) and a BodyPosition on the dragged player’s client targeting an attachment on and some distance away from the dragging player. This idea has obvious problems with it though.

It’s not an easy problem. Maybe someone else has other ideas.

2 Likes

Thanks for the reply, good to know. I will have to try a few things out. I wonder if there’s another game on Roblox that uses a lasso.

1 Like

You could try talking to @OniiCh_n, they were working on something similar, maybe they found a solution and are willing to share.
https://devforum.roblox.com/t/do-constraints-block-animation-replication/105282


I was playing with this issue a little bit today and wrote something that almost managed this, but didn’t manage to get it working quite right before I had to move on to other things.

I created a clone of the dragged character with network ownership belonging to the player dragging it, set PlatformStand = true, set the dragged player’s real character’s parent to nil, and used a remote to set the dragged player’s camera subject to the clone. I also tried to use a proxy part that followed the player dragging the other player to connect the rope to so movement would be smoother, but it had some issues with latency. I believe it solved most of the gross network ownership issues. Don’t remember if it solved the animation problem.

After testing both those ideas, I couldn’t seem to get anything working… the game doesn’t even seem to let me :Clone() the character, it just defaults to nil when I try.

You need to set archivable on the character to true before you clone it.

Alright, I was able to create the clone like you said.

However I wasn’t able to get it work for me. The same thing happened with the clone as with a player controlled character, regardless of network ownership, how did you get that working? I’m wondering if it’s actually caused by something else.

After some testing (and a lot of selective deleting) I found out that disconnecting HumanoidRootPart from the model fixes the issue in both the lasso’d player’s character, and in the clone of it. Which of course causes some problems elsewhere… but I wonder if this could be finessed into a solution

Also, no idea why a cloned player character from a server still has the issue but not after being cloned into studio and then hitting play again.

If it helps, here’s the incomplete thing I was working on.
Just mind that I couldn’t get the remote that refocuses the player’s camera working for some reason.
LassoWIP.rbxl (14.7 KB)

Would it help to attach the lasso to a Transparent Part and weld that Part to the other player?
Just a guess, I’m not sure if Network Ownership would affect the other player then or just the Part.

Thanks for your help! I was able to fix it by using a Ragdoll script (connects the body parts with BallConstraint, then rebuilds the character with Motor6Ds after the grab ends) and it works great!

3 Likes