[FE]thug shaker

Description

Required Hats: https://www.roblox.com/catalog/62724852/Chestnut-Bun https://www.roblox.com/catalog/451220849/Lavender-Updo https://www.roblox.com/catalog/63690008/Pal-Hair https://www.roblox.com/catalog/62234425/Brown-Hair


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;
				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
						return false
					end
				else
					return false
				end
			end
			table.insert(Network["BaseParts"],Part)
			Part.CustomPhysicalProperties = PhysicalProperties.new(0,0,0,0,0)
			if ReturnFakePart == true then
				return FakePart
			end
			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)
		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)
		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
		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 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

local Frames = nil

local obj1 = game:GetObjects("rbxassetid://13624303693")
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 wait() 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
end

⚠️ Warning: Do not download any extensions or anything other than .txt/.lua file, because script will download only in .txt/.lua format or It will redirect you to a pastebin link.

📋 Notice: If you find any of the scripts patched or not working, please report it to Forever4D through Discord. The script will be removed or marked as patched!