--[[
NOTE: due to a recent roblox change this script will most likely wont work,
More info: https://[Log in to view URL]
]]
--made by rouxhaver
--Network Library by 4eyes

--Fixed Collision bug thingy

--Required Hats:
--https://[Log in to view URL]
--https://[Log in to view URL]
--https://[Log in to view URL]
--https://[Log in to view URL]

--Some Ids:
--12548488061 - default dance
--12548495363 - take the L
--12548510251 - i don't know
--12548549243 - whip
--12548572014 - orange justice
--12548588316 - recover

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer

if not getgenv().Network then
	getgenv().Network = {
		BaseParts = {};
		FakeConnections = {};
		Connections = {};
		Output = {
			Enabled = true;
			Prefix = "[NETWORK] ";
			Send = function(Type,Output,BypassOutput)
				if typeof(Type) == "function" and (Type == print or Type == warn or Type == error) and typeof(Output) == "string" and (typeof(BypassOutput) == "nil" or typeof(BypassOutput) == "boolean") then
					if Network["Output"].Enabled == true or BypassOutput == true then
						Type(Network["Output"].Prefix..Output);
					end;
				elseif Network["Output"].Enabled == true then
					error(Network["Output"].Prefix.."Output Send Error : Invalid syntax.");
				end;
			end;
		};
		CharacterRelative = false;
	}

	Network["Output"].Send(print,": Loading.")
	Network["Velocity"] = Vector3.new(14.46262424,14.46262424,14.46262424); --exactly 25.1 magnitude
	Network["RetainPart"] = function(Part,ReturnFakePart) --function for retaining ownership of unanchored parts
		assert(typeof(Part) == "Instance" and Part:IsA("BasePart") and Part:IsDescendantOf(workspace),Network["Output"].Prefix.."RetainPart Error : Invalid syntax: Arg1 (Part) must be a BasePart which is a descendant of workspace.")
		assert(typeof(ReturnFakePart) == "boolean" or typeof(ReturnFakePart) == "nil",Network["Output"].Prefix.."RetainPart Error : Invalid syntax: Arg2 (ReturnFakePart) must be a boolean or nil.")
		if not table.find(Network["BaseParts"],Part) then
			if Network.CharacterRelative == true then
				local Character = LocalPlayer.Character
				if Character and Character.PrimaryPart then
					local Distance = (Character.PrimaryPart.Position-Part.Position).Magnitude
					if Distance > 1000 then
						Network["Output"].Send(warn,"RetainPart Warning : PartOwnership not applied to BasePart "..Part:GetFullName()..", as it is more than "..gethiddenproperty(LocalPlayer,"MaximumSimulationRadius").." studs away.")
						return false
					end
				else
					Network["Output"].Send(warn,"RetainPart Warning : PartOwnership not applied to BasePart "..Part:GetFullName()..", as the LocalPlayer Character's PrimaryPart does not exist.")
					return false
				end
			end
			table.insert(Network["BaseParts"],Part)
			Part.CustomPhysicalProperties = PhysicalProperties.new(0,0,0,0,0)
			Network["Output"].Send(print,"PartOwnership Output : PartOwnership applied to BasePart "..Part:GetFullName()..".")
			if ReturnFakePart == true then
				return FakePart
			end
		else
			Network["Output"].Send(warn,"RetainPart Warning : PartOwnership not applied to BasePart "..Part:GetFullName()..", as it already active.")
			return false
		end
	end

	Network["RemovePart"] = function(Part) --function for removing ownership of unanchored part
		assert(typeof(Part) == "Instance" and Part:IsA("BasePart"),Network["Output"].Prefix.."RemovePart Error : Invalid syntax: Arg1 (Part) must be a BasePart.")
		local Index = table.find(Network["BaseParts"],Part)
		if Index then
			table.remove(Network["BaseParts"],Index)
			Network["Output"].Send(print,"RemovePart Output: PartOwnership removed from BasePart "..Part:GetFullName()..".")
		else
			Network["Output"].Send(warn,"RemovePart Warning : BasePart "..Part:GetFullName().." not found in BaseParts table.")
		end
	end

	Network["SuperStepper"] = Instance.new("BindableEvent") --make super fast event to connect to
	for _,Event in pairs({RunService.Stepped,RunService.Heartbeat}) do
		Event:Connect(function()
			return Network["SuperStepper"]:Fire(Network["SuperStepper"],tick())
		end)
	end

	Network["PartOwnership"] = {};
	Network["PartOwnership"]["PreMethodSettings"] = {};
	Network["PartOwnership"]["Enabled"] = false;
	Network["PartOwnership"]["Enable"] = coroutine.create(function() --creating a thread for network stuff
		if Network["PartOwnership"]["Enabled"] == false then
			Network["PartOwnership"]["Enabled"] = true --do cool network stuff before doing more cool network stuff
			Network["PartOwnership"]["PreMethodSettings"].ReplicationFocus = LocalPlayer.ReplicationFocus
			LocalPlayer.ReplicationFocus = workspace
			Network["PartOwnership"]["PreMethodSettings"].SimulationRadius = gethiddenproperty(LocalPlayer,"SimulationRadius")
			Network["PartOwnership"]["Connection"] = Network["SuperStepper"].Event:Connect(function() --super fast asynchronous loop
				sethiddenproperty(LocalPlayer,"SimulationRadius",1/0)
				for _,Part in pairs(Network["BaseParts"]) do --loop through parts and do network stuff
					coroutine.wrap(function()
						if Part:IsDescendantOf(workspace) then
							if Network.CharacterRelative == true then
								local Character = LocalPlayer.Character;
								if Character and Character.PrimaryPart then
									local Distance = (Character.PrimaryPart.Position - Part.Position).Magnitude
									if Distance > 1000 then
										Network["Output"].Send(warn,"PartOwnership Warning : PartOwnership not applied to BasePart "..Part:GetFullName()..", as it is more than "..gethiddenproperty(LocalPlayer,"MaximumSimulationRadius").." studs away.")
										Lost = true;
										Network["RemovePart"](Part)
									end
								else
									Network["Output"].Send(warn,"PartOwnership Warning : PartOwnership not applied to BasePart "..Part:GetFullName()..", as the LocalPlayer Character's PrimaryPart does not exist.")
								end
							end
							Part.Velocity = Network["Velocity"]+Vector3.new(0,math.cos(tick()*10)/100,0) --keep network by sending physics packets of 30 magnitude + an everchanging addition in the y level so roblox doesnt get triggered and fuck your ownership
						else
							Network["RemovePart"](Part)
						end
					end)()
				end
			end)
			Network["Output"].Send(print,"PartOwnership Output : PartOwnership enabled.")
		else
			Network["Output"].Send(warn,"PartOwnership Output : PartOwnership already enabled.")
		end
	end)
	Network["PartOwnership"]["Disable"] = coroutine.create(function()
		if Network["PartOwnership"]["Connection"] then
			Network["PartOwnership"]["Connection"]:Disconnect()
			LocalPlayer.ReplicationFocus = Network["PartOwnership"]["PreMethodSettings"].ReplicationFocus
			sethiddenproperty(LocalPlayer,"SimulationRadius",Network["PartOwnership"]["PreMethodSettings"].SimulationRadius)
			Network["PartOwnership"]["PreMethodSettings"] = {}
			for _,Part in pairs(Network["BaseParts"]) do
				Network["RemovePart"](Part)
			end
			Network["PartOwnership"]["Enabled"] = false
			Network["Output"].Send(print,"PartOwnership Output : PartOwnership disabled.")
		else
			Network["Output"].Send(warn,"PartOwnership Output : PartOwnership already disabled.")
		end
	end)
	Network["Output"].Send(print,": Loaded.")
end

coroutine.resume(Network["PartOwnership"]["Enable"])
Network.CharacterRelative = false

Player = game.Players.LocalPlayer
OldChar = Player.Character

for i,v in pairs(OldChar.Humanoid:GetPlayingAnimationTracks()) do
	v:Stop()
end

OldChar.Archivable = true

NewChar = OldChar:Clone()
NewChar.Parent = workspace

NewChar.Name = "New"

NewChar.Head.face:Destroy()

for i,v in pairs(NewChar:GetDescendants()) do
	if v:IsA("Part") then
		v.Transparency = 1
	end
end

vbreak = false


OldChar.Torso["Left Shoulder"]:Destroy()
OldChar.Torso["Right Shoulder"]:Destroy()
OldChar.Torso["Left Hip"]:Destroy()
OldChar.Torso["Right Hip"]:Destroy()


function rotate(X,Y,Z)
	return CFrame.Angles(math.rad(X),math.rad(Y),math.rad(Z))
end

function Join(Hat,Part,Offset,Rotation,Mesh)
	if Mesh == false then Hat.Handle:FindFirstChildWhichIsA("SpecialMesh"):Destroy() end
	Hat.Handle.AccessoryWeld:Destroy()
	local method = Instance.new("RopeConstraint",OldChar)
	method.Length = math.huge
	method.Attachment0 = Instance.new("Attachment",OldChar.Head)
	method.Attachment1 = Instance.new("Attachment",Hat.Handle)
	coroutine.wrap(function()
		while task.wait() do
			Hat.Handle.CFrame = (Part.CFrame + Part.CFrame.LookVector * Offset.Z + Part.CFrame.RightVector * Offset.X + Part.CFrame.UpVector * Offset.Y) * Rotation
			if vbreak == true then break end
		end
	end)()
end

Join(
	OldChar["Pal Hair"], -- the Accessory
	NewChar["Left Arm"], -- Part to attach to
	Vector3.new(0,0,0), -- offset
	rotate(90,0,0), -- Rotation
	false -- Keep mesh
)

Join(
	OldChar["Hat1"], -- the Accessory
	NewChar["Right Arm"], -- Part to attach to
	Vector3.new(0,0,0), -- offset
	rotate(90,0,0), -- Rotation
	false -- Keep mesh
)

Join(
	OldChar["Kate Hair"], -- the Accessory
	NewChar["Right Leg"], -- Part to attach to
	Vector3.new(0,0,0), -- offset
	rotate(90,0,0), -- Rotation
	false -- Keep mesh
)

Join(
	OldChar["LavanderHair"], -- the Accessory
	NewChar["Left Leg"], -- Part to attach to
	Vector3.new(0,0,0), -- offset
	rotate(90,0,0), -- Rotation
	false -- Keep mesh
)

Player.Character = NewChar

NewChar.Animate.Disabled = true
NewChar.Animate.Disabled = false
OldChar.Animate.Disabled = true


for i,v in next, OldChar:GetDescendants() do
	if v:IsA("BasePart") and v.Name ~="HumanoidRootPart" then 
		Network.RetainPart(v)
	end
end

game:GetService("RunService").Stepped:Connect(function()
	if vbreak == true then return end
	if OldChar:FindFirstChild("Torso") == nil then return end
	OldChar.Torso.CanCollide = false
	OldChar.Head.CanCollide = false
end)


coroutine.wrap(function()
	while task.wait() do
		OldChar.HumanoidRootPart.CFrame = NewChar.Torso.CFrame

		if NewChar.Humanoid.Health == 0 then
			Player.Character = OldChar
			OldChar.Head:Destroy()
			vbreak = true
			break
		end

	end
end)()


local ScreenGui = Instance.new("ScreenGui")
local Frame = Instance.new("Frame")
local aniid = Instance.new("TextBox")
local Looped = Instance.new("TextButton")
local Play = Instance.new("TextButton")
local TextLabel = Instance.new("TextLabel")


ScreenGui.Parent = game.Players.LocalPlayer:WaitForChild("PlayerGui")
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling

Frame.Parent = ScreenGui
Frame.BackgroundColor3 = Color3.fromRGB(25, 25, 26)
Frame.BorderColor3 = Color3.fromRGB(0, 0, 0)
Frame.BorderSizePixel = 5
Frame.Position = UDim2.new(0.322779924, 0, 0.720987678, 0)
Frame.Size = UDim2.new(0.353667945, 0, 0.177777782, 0)
Frame.Draggable = true
Frame.Active = true

aniid.Name = "aniid"
aniid.Parent = Frame
aniid.BackgroundColor3 = Color3.fromRGB(21, 21, 21)
aniid.BorderColor3 = Color3.fromRGB(0, 0, 0)
aniid.BorderSizePixel = 2
aniid.Position = UDim2.new(0.0393013097, 0, 0.465277791, 0)
aniid.Size = UDim2.new(0.624454141, 0, 0.451388896, 0)
aniid.Font = Enum.Font.SourceSans
aniid.PlaceholderColor3 = Color3.fromRGB(0, 0, 0)
aniid.PlaceholderText = "Animation Id"
aniid.Text = ""
aniid.TextColor3 = Color3.fromRGB(0, 0, 0)
aniid.TextScaled = true
aniid.TextSize = 14.000
aniid.TextWrapped = true

Looped.Name = "Looped"
Looped.Parent = Frame
Looped.BackgroundColor3 = Color3.fromRGB(29, 29, 29)
Looped.BorderColor3 = Color3.fromRGB(0, 0, 0)
Looped.BorderSizePixel = 2
Looped.Position = UDim2.new(0.698689938, 0, 0.0972222164, 0)
Looped.Size = UDim2.new(0.281659395, 0, 0.319444448, 0)
Looped.Font = Enum.Font.SourceSans
Looped.Text = "Loop"
Looped.TextColor3 = Color3.fromRGB(0, 0, 0)
Looped.TextScaled = true
Looped.TextSize = 14.000
Looped.TextWrapped = true

Play.Name = "Play"
Play.Parent = Frame
Play.BackgroundColor3 = Color3.fromRGB(29, 29, 29)
Play.BorderColor3 = Color3.fromRGB(0, 0, 0)
Play.BorderSizePixel = 2
Play.Position = UDim2.new(0.698689938, 0, 0.597222209, 0)
Play.Size = UDim2.new(0.281659395, 0, 0.319444448, 0)
Play.Font = Enum.Font.SourceSans
Play.Text = "Play"
Play.TextColor3 = Color3.fromRGB(0, 0, 0)
Play.TextScaled = true
Play.TextSize = 14.000
Play.TextWrapped = true

TextLabel.Parent = Frame
TextLabel.BackgroundColor3 = Color3.fromRGB(29, 29, 29)
TextLabel.BackgroundTransparency = 1.000
TextLabel.Position = UDim2.new(0.0240174681, 0, 0.0625, 0)
TextLabel.Size = UDim2.new(0.639737964, 0, 0.354166657, 0)
TextLabel.Font = Enum.Font.SourceSans
TextLabel.Text = "X animation player"
TextLabel.TextColor3 = Color3.fromRGB(197, 197, 197)
TextLabel.TextScaled = true
TextLabel.TextSize = 14.000
TextLabel.TextWrapped = true

Islooping = false

Looped.MouseButton1Up:Connect(function()
	if Islooping == false then do
			Islooping = true
			Looped.BackgroundColor3 = Color3.fromRGB(0,255,0)
		end else
		Islooping = false
		Looped.BackgroundColor3 = Color3.fromRGB(255,0,0)
	end
end)


local TweenService = game:GetService("TweenService")

function tween(Part, Target, Time)
	local tweenInfo = TweenInfo.new(Time,Enum.EasingStyle.Linear)
	local Tween = TweenService:Create(Part, tweenInfo, {
		Transform = Target,
	})
	Tween:Play()
end






Playing = false

Play.MouseButton1Up:Connect(function()
	if Playing == false then
		Play.BackgroundColor3 = Color3.fromRGB(0,255,0)
		Playing = true
		--NewChar.HumanoidRootPart.Anchored = true

		local Frames = nil

		local obj1 = game:GetObjects("rbxassetid://"..aniid.Text)
		for i,v in pairs(obj1) do
			Frames = v:GetChildren()
		end

		table.sort(Frames, function(a,b)
			return a.Time < b.Time
		end)

		NewChar.Animate.Disabled = true

		for i,v in pairs(NewChar.Humanoid:GetPlayingAnimationTracks()) do
			v:Stop()
		end

		while true do
			local Last_time = 0

			for i,Frame in pairs(Frames) do

				local TS = Frame:FindFirstChild("Torso", true)
				if TS and TS.Weight == 1 then
					tween(NewChar.HumanoidRootPart["RootJoint"], TS.CFrame, Frame.Time - Last_time)
				end

				local LA = Frame:FindFirstChild("Left Arm", true)
				if LA and LA.Weight == 1 then
					tween(NewChar.Torso["Left Shoulder"], LA.CFrame, Frame.Time - Last_time)
				end

				local RA = Frame:FindFirstChild("Right Arm", true)
				if RA and RA.Weight == 1 then
					tween(NewChar.Torso["Right Shoulder"], RA.CFrame, Frame.Time - Last_time)
				end

				local RL = Frame:FindFirstChild("Right Leg", true)
				if RL and RL.Weight == 1 then
					tween(NewChar.Torso["Right Hip"], RL.CFrame, Frame.Time - Last_time)
				end

				local LL = Frame:FindFirstChild("Left Leg", true)
				if LL and LL.Weight == 1 then
					tween(NewChar.Torso["Left Hip"], LL.CFrame, Frame.Time - Last_time)
				end

				wait(Frame.Time - Last_time)
				Last_time = Frame.Time
			end
			if Islooping == false then
				break
			end
		end

		NewChar.Animate.Disabled = false
		Playing = false
		Play.BackgroundColor3 = Color3.fromRGB(255,0,0)
	end
end)

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: