game:GetService("StarterGui"):SetCoreGuiEnabled(Enum.CoreGuiType.Health, false) local Fluent = loadstring(game:HttpGet("https://github.com/dawid-scripts/Fluent/releases/latest/download/main.lua"))() local SaveManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/SaveManager.lua"))() local InterfaceManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/InterfaceManager.lua"))() _G.targetUser = true _G.onoff = false _G.speed = 4 -- Changed to _G.speed _G.offset = 5 -- Changed to _G.offset _G.mode = 2 local target = nil local plr, rotx, rotz, height, heighti, angular, l = game.Players.LocalPlayer, 0, math.pi / 2, 0, 1, Vector3.new(0, 0, 0), 1 coroutine.resume(coroutine.create(function() settings().Physics.AllowSleep = false if _G.loop2 then _G.loop2:Disconnect() end _G.loop2 = game:GetService("RunService").RenderStepped:Connect(function() if target and not game.Players:FindFirstChild(target.Name) then target = nil end if #game.Players:GetPlayers() < 2 then Fluent:Notify({Title = "There needs to be 1 other player or more", Content = "Please wait for someone to join", Duration = 10}) return end if _G.mode ~= 7 and _G.mode ~= 6 then local plr = game.Players:FindFirstChild(_G.textBox.Value) if plr then target = plr.Character end if _G.targetUser == true then workspace.CurrentCamera.CameraSubject = target end elseif ((_G.targetUser == true and target ~= nil) or _G.mode == 7 or _G.mode == 6) then if _G.mode == 7 or _G.mode == 6 then target = game.Players:GetPlayers()[2].Character end workspace.CurrentCamera.CameraSubject = target else if game.Players.LocalPlayer.Character then workspace.CurrentCamera.CameraSubject = game.Players.LocalPlayer.Character end end for i, v in pairs(game.Players:GetPlayers()) do if v ~= plr then v.MaximumSimulationRadius = 0.1 v.SimulationRadius = 0 else v.MaximumSimulationRadius = math.pow(math.huge, math.huge) v.SimulationRadius = math.pow(math.huge, 2) end end end) end)) function ftp(str) local pt = {} if str ~= 'me' and str ~= 'random' then for i, v in pairs(game.Players:GetPlayers()) do if v.Name:lower():find(str:lower()) then table.insert(pt, v) end end elseif str == 'me' then table.insert(pt, plr) elseif str == 'random' then table.insert(pt, game.Players:GetPlayers()[math.random(1, #game.Players:GetPlayers())]) end return pt end local function runMainScript() local mov = {} local mov2 = {} local chr = plr.Character or plr.CharacterAdded:Wait() local hum = chr:FindFirstChildWhichIsA("Humanoid", true) or chr:WaitForChild("Humanoid") -- Set health to 0 task.wait(1 / 2 + game.Players.LocalPlayer:GetNetworkPing()) hum.Health = 0 task.wait(1 / 3 + game.Players.LocalPlayer:GetNetworkPing()) if _G.cameraCframe then workspace.CurrentCamera.CFrame = _G.cameraCframe end task.delay(game.Players.RespawnTime * 0.9, function() _G.cameraCframe = workspace.CurrentCamera.CFrame end) --[[Network]] for _, v in pairs(hum:GetAccessories()) do local b = v:FindFirstChildOfClass("Part") if b and target then b.CustomPhysicalProperties = PhysicalProperties.new(0, 0, 0, 0., 0) b.Massless = true b.CanCollide = false b:BreakJoints() for _, k in pairs(v:GetChildren()) do if not k:IsA('SpecialMesh') and not k:IsA('Part') then k:Destroy() end end local still = Instance.new('BodyAngularVelocity', b) still.MaxTorque = Vector3.new(math.huge, math.huge, math.huge) still.AngularVelocity = Vector3.new(0, 0, 0) local align = Instance.new('AlignPosition', b) align.MaxForce = 1000000 align.MaxVelocity = math.huge align.RigidityEnabled = false align.ApplyAtCenterOfMass = true align.Responsiveness = 200 local a0 = Instance.new('Attachment', b) local a1 = Instance.new('Attachment', target.HumanoidRootPart) align.Attachment0 = a0 align.Attachment1 = a1 table.insert(mov, a1) table.insert(mov2, still) end end local par = {} for _, v in pairs(mov) do local parr = Instance.new('Part', workspace) parr.Anchored = true parr.Size = Vector3.new(1, 1, 1) parr.Transparency = 1 parr.CanCollide = false table.insert(par, parr) end if _G.loop then _G.loop:Disconnect() end _G.loop = game:GetService("RunService").RenderStepped:Connect(function() if not target then target = game.Players:GetPlayers()[2].Character end if not target then return end rotx = rotx + _G.speed / 100 -- Changed to _G.speed rotz = rotz + _G.speed / 100 -- Changed to _G.speed l = (l >= 360 and 1 or l + _G.speed) -- Changed to _G.speed for i, v in pairs(par) do v.CFrame = CFrame.new(target.HumanoidRootPart.Position) * CFrame.fromEulerAnglesXYZ(0, math.rad(l + (360 / #par) * i + _G.speed), 0) * CFrame.new(_G.offset, 0, 0) -- Changed to _G.offset end if heighti == 1 then height = height + _G.speed / 100 -- Changed to _G.speed elseif heighti == 2 then height = height - _G.speed / 100 -- Changed to _G.speed end if height > 2 then heighti = 2 end if height < -1 then heighti = 1 end if _G.mode == 1 then for i, v in pairs(mov) do v.WorldPosition = Vector3.new(target.Head.Position.X, target.Head.Position.Y + (i / 2) + 0.35, target.Head.Position.Z) -- Changed to _G.offset end elseif _G.mode == 2 then for i, v in pairs(mov) do v.Position = Vector3.new(target.HumanoidRootPart.CFrame:ToObjectSpace(CFrame.new(par[i].Position)).X, target.HumanoidRootPart.CFrame:ToObjectSpace(CFrame.new(par[i].Position)).Y, target.HumanoidRootPart.CFrame:ToObjectSpace(CFrame.new(par[i].Position)).Z ) end elseif _G.mode == 3 then for i, v in pairs(mov) do v.Position = Vector3.new(math.cos(rotx * i) * _G.offset, 0, math.cos(rotz * i) * _G.offset) -- Changed to _G.offset end elseif _G.mode == 4 then for i, v in pairs(mov) do v.Position = Vector3.new(math.sin(rotx) * i * _G.offset, 0, math.sin(rotz) * i * _G.offset) -- Changed to _G.offset end elseif _G.mode == 5 then _G.offset = height * 15 -- Changed to _G.offset for i, v in pairs(mov) do v.Position = Vector3.new(target.HumanoidRootPart.CFrame:ToObjectSpace(CFrame.new(par[i].Position)).X, target.HumanoidRootPart.CFrame:ToObjectSpace(CFrame.new(par[i].Position)).Y, target.HumanoidRootPart.CFrame:ToObjectSpace(CFrame.new(par[i].Position)).Z) end elseif _G.mode == 6 then for i, v in pairs(mov) do local targetPlayer = game.Players:GetPlayers()[i] if targetPlayer then if targetPlayer.Character then v.Parent = targetPlayer.Character:FindFirstChild("Head") v.Position = Vector3.new(0, 0.9, 0) end end end elseif _G.mode == 7 then for i, v in pairs(mov) do local targetPlayer = game.Players:GetPlayers()[i] if targetPlayer then if targetPlayer.Character then v.Parent = targetPlayer.Character:FindFirstChild("Head") v.Position = Vector3.new(target.HumanoidRootPart.CFrame:ToObjectSpace(CFrame.new(par[i].Position)).X, target.HumanoidRootPart.CFrame:ToObjectSpace(CFrame.new(par[i].Position)).Y, target.HumanoidRootPart.CFrame:ToObjectSpace(CFrame.new(par[i].Position)).Z ) end end end end for _, v in pairs(mov2) do v.AngularVelocity = angular end end) for i, v in next, game:GetService("Players").LocalPlayer.Character:GetDescendants() do if v:IsA("BasePart") and v.Name ~="HumanoidRootPart" and v.Parent ~= chr then game:GetService("RunService").Heartbeat:connect(function() v.Velocity = Vector3.new(-30, 0, 0) end) end end end -- Initialize Fluent UI Window local Window = Fluent:CreateWindow({ Title = "Hat Script", SubTitle = "by turdle", TabWidth = 160, Size = UDim2.fromOffset(800, 360), Theme = "Dark", MinimizeKey = Enum.KeyCode.LeftControl }) local Tabs = { Main = Window:AddTab({ Title = "Main", Icon = "folder" }), Players = Window:AddTab({ Title = "Players", Icon = "user" }), Credits = Window:AddTab({ Title = "Credits", Icon = "info" }), Settings = Window:AddTab({ Title = "Settings", Icon = "settings" }) } Tabs.Credits:AddButton({ Title = "Join the Discord", Description = "Support the creator", Callback = function() Window:Dialog({ Title = "Copy join to clipboard?", Content = "You can join via Discord", Buttons = { { Title = "Copy", Callback = function() setclipboard("https://discord.gg/JefASdZgEF") Fluent:Notify({Title = "Copied to clipboard!", Content = "Enjoy the Server!", Duration = 4}) end}, {Title = "Cancel",} } }) end }) Tabs.Credits:AddParagraph({ Title = "Info on the script", Content = "This is an FE hat script that me (turdle) spent a while making. It includes a lot of stuff like modes and configurations but it originally started with a script with no gui, and a few modes that I thought were a not useful enough, so I kept adding to it and I'm quite proud of it now. Join the discord if you want to say hello since I'm usually online. Enjoy the script!" }) Tabs.Credits:AddParagraph({ Title = "Who made this script", Content = "My discord is its_turdle if you want to add me. The discord server is https://discord.gg/JefASdZgEF" }) local Options = Fluent.Options -- Target Selector (Text Box) _G.textBox = Tabs.Main:AddInput("TargetInput", { Title = "Target Selector", Placeholder = "Enter target name", Default = game.Players.LocalPlayer.Name, Callback = function(value) local plr = game.Players:FindFirstChild(value) if plr then target = plr.Character end print(target) end }) Tabs.Main:AddSlider("OffsetSlider", { Title = "Offset/Distance", Min = 0, Max = 100, Default = 10, Rounding = 1, Callback = function(value) _G.offset = value -- Ensure this is set to _G.offset end }) Tabs.Main:AddSlider("SpeedSlider", { Title = "Speed", Min = -10, Max = 20, Default = 2, Rounding = 2, Callback = function(value) _G.speed = value -- Ensure this is set to _G.speed end }) Tabs.Main:AddSlider("ModeSlider", { Title = "Mode", Min = 1, Max = 7, Default = 1, Rounding = 0, Callback = function(value) _G.mode = value end }) -- On/Off Toggle Tabs.Main:AddToggle("OnOffToggle", { Title = "Enable/Disable", Default = false, Callback = function(state) _G.onoff = state if game.Players.LocalPlayer.Character and state == true and target ~= nil then local humanoid = game.Players.LocalPlayer.Character:FindFirstChildWhichIsA("Humanoid", true) if humanoid then humanoid.Health = 0 end runMainScript() if game.Players.LocalPlayer.Character then if game.Players.LocalPlayer.Character:FindFirstChildWhichIsA("Humanoid", true) then if game.Players.LocalPlayer.Character:FindFirstChildWhichIsA("Humanoid", true).RigType == Enum.HumanoidRigType.R15 then Fluent:Notify({ Title = "Try switching to R6", Content = "This script most likely doesn't work with r15", Duration = 6 }) end end end elseif _G.loop then _G.loop:Disconnect() end end }) game.Players.LocalPlayer.CharacterAdded:Connect(function() if _G.onoff == true and target ~= nil then runMainScript() end end) Tabs.Players:AddToggle("Spectate", { Title = "Spectate Target", Default = _G.targetUser, Callback = function(state) _G.targetUser = state end }) -- Initialize Save and Interface Managers SaveManager:SetLibrary(Fluent) InterfaceManager:SetLibrary(Fluent) SaveManager:IgnoreThemeSettings() SaveManager:SetFolder("turdlesUniversals") InterfaceManager:BuildInterfaceSection(Tabs.Settings) SaveManager:BuildConfigSection(Tabs.Settings) -- Finish setting up window and auto-load Window:SelectTab(1) SaveManager:LoadAutoloadConfig() print("Hat script by its_turdle loaded!")