I made a script that attaches the backpack to the player, but it doesn't really work. I think I made a mistake with the CFrame. The backpack is rotated in the wrong direction and sometimes I cannot move. https://gyazo.com/38374d1a8c21f9f7b48226e6cf273a78 Here is the script:
local function AttachToBack(player, object)
object = object:Clone()
local char = player.Character
object.Parent = char
object:SetPrimaryPartCFrame(char.UpperTorso.CFrame * CFrame.Angles(0,math.pi/2, 0))
for _, v in pairs(object:GetChildren()) do
if v:IsA("BasePart") and v ~= object.PrimaryPart then
local weldPart = Instance.new("WeldConstraint")
weldPart.Parent = object.PrimaryPart
weldPart.Part0 = object.PrimaryPart
weldPart.Part1 = v
end
end
local weld = Instance.new("Motor6D")
weld.C0 = CFrame.new(char.HumanoidRootPart.CFrame.lookVector * -1.85)
weld.Parent = char.UpperTorso
weld.Part0 = char.UpperTorso
weld.Part1 = object.PrimaryPart
end
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
Players.PlayerAdded:Connect(function(player)
player.CharacterAppearanceLoaded:Connect(function(character)
AttachToBack(player, ReplicatedStorage:WaitForChild("Backpacks").Commons[game.Workspace.BackpackLocations[player:WaitForChild("EquippedBackpack").Value].Backpack.Value])
end)
end)
game:GetService("ReplicatedStorage"):WaitForChild("RemoteEvents").EquippBackpack.OnServerEvent:Connect(function(plr, backpackNum, backpackname)
for i,v in pairs(game.ReplicatedStorage:WaitForChild("Backpacks").Commons:GetChildren()) do
if plr.Character:FindFirstChild(v.Name) ~= nil then
plr.Character:FindFirstChild(v.Name):Destroy()
end
end
AttachToBack(plr, game.ReplicatedStorage:WaitForChild("Backpacks").Commons[backpackname])
end)
