Ok, so I’m making a detain tool, everything works fine expect when the player gets un-detained (netWorkOwnerShip set to the player getting detained, disconnecting all detain events, destroying welds etc.) and the player detaining the character spins around while un-detaining, then for the character getting un-detained there is no delay in position, but for the server there is a small delay between it. (I’m not best at explaining, so I will send a streamable video): https://streamable.com/dsl9s9
Here is the un-detain script:
function detainServerModule:UnDetainPlayer(playerDetaining, shouldRemoveDetainTable)
local foundPlayerDetainTable = self:FindDetainTable(playerDetaining)
if not foundPlayerDetainTable then return end
local playerGettingDetained = foundPlayerDetainTable.PlayerGettingDetained
local charOfPlayerGettingDetained = playerGettingDetained.Character or playerGettingDetained.CharacterAdded:Wait()
local HumanoidOfPlayerGettingDetained = charOfPlayerGettingDetained:FindFirstChild("Humanoid")
if not HumanoidOfPlayerGettingDetained or not charOfPlayerGettingDetained:FindFirstChild("HumanoidRootPart") then return end
self.MakeAllBodyPartsMassless(charOfPlayerGettingDetained, false)
self.SetCollisionGroupOfCharacter(charOfPlayerGettingDetained, "Default")
self.CleanAllConnections(foundPlayerDetainTable)
self.SetNetworkOwnerShipOfCharacter(nil, charOfPlayerGettingDetained, false)
self.DestroyAllWelds(foundPlayerDetainTable)
stopAnimationsRemote:FireClient(playerGettingDetained, false)
HumanoidOfPlayerGettingDetained.JumpPower = 50
HumanoidOfPlayerGettingDetained.WalkSpeed = 16
if shouldRemoveDetainTable then
for index, detainTable in pairs(self.detainDataBase) do
if detainTable == foundPlayerDetainTable then
table.remove(self.detainDataBase, index)
break
end
end
end
end```