Sure.
Pretty much everything would be localscripted tho, the only server logic you would need is to actually notify the clients in some way who they are hooked to.
If a constraint connects two parts with different owners then their owners change.
How do we get around this?
One way is to make the parts being conjoined by constraint not be owned by anyone, or more specifically… create new parts that aren’t affected by network ownership.
The way I would opt to do this is by instancing an invisible, anchored, “RopePart” into each character on the client. (aka using a localscript) Then every frame, CFrame the RopePart onto their respective character. Instead of connecting the HRPs together, connect the invisible, clientside RopeParts together via a script!
However, since we are CFraming the rope parts every frame and not actually connecting the RopeParts with the client’s character the rope constraint will only be visual
Then you still need to figure out how to constrict the players with an actual rope. You could do this with a script simulating a rope
or you could probably get away with connecting an actual rope from the static RopePart of your client’s partner to your HRP.
I still have no idea if it would actually work well, since its completely untested but its an idea