local __ET_LOADSTRING_ARGS = { n = select("#", ...), ... } DontShowDuplicateUI = false if not game:IsLoaded() then game.Loaded:Wait() end -- Services UserInputService = game:GetService("UserInputService") TextChatService = game:GetService("TextChatService") TeleportService = game:GetService("TeleportService") PhysicsService = game:GetService("PhysicsService") TweenService = game:GetService("TweenService") HttpService = game:GetService("HttpService") RunService = game:GetService("RunService") Lighting = game:GetService("Lighting") Players = game:GetService("Players") COREGUI = game:GetService("CoreGui") queueTeleport = (syn and syn.queue_on_teleport) or queue_on_teleport or (fluxus and fluxus.queue_on_teleport) httpRequest = (syn and syn.request) or (http and http.request) or http_request or (fluxus and fluxus.request) or request -- Changelog local VersionString = "v1.3.8" local ChangeLog = "• Added 'Flip' command\n• Updated Ramp Command with 'Tool'\n• Added 'Generic' shading option\n• Added 'Isolate' mode to anchor command\n• Fixed various minor bugs" local Info = "Empty Tools is a free and open-source command menu designed to work in every experience. For more scripts and information, go to https://empty.tools and join our discord." -- Variables Player = Players.LocalPlayer Mouse = Player:GetMouse() Camera = workspace.CurrentCamera MainUI = nil MarkerUI = nil OuterFrame = nil Contents = nil ContentShrunken = nil InfoFrame = nil ToastFrame = nil ToastText = nil TextInc = 45 ToastQueue = {} IsShowing = false function GetFrameSize() if ToastText == nil then return end local b = ToastText.TextBounds return UDim2.new(0, b.X + TextInc, 0, b.Y + TextInc * 0.6) end function hasProperty(object, propertyName) local success, _ = pcall(function() object[propertyName] = object[propertyName] end) return success end local function ETLOG(Details) print("[EMPTY TOOLS ] " .. Details ) end CommandFrames = {} CommandRegistry = {} SettingsFrames = {} DefaultLighting = {} AttachmentLocations = {"Back","Head","Front","Left","Right"} local function NormalizeCommandName(Name) return tostring(Name or ""):lower():gsub("%s+", "") end local __ET_UNPACK = table.unpack or unpack local function ParseStartupCommands(Args) if not Args or Args.n == 0 then return nil end local function normalizeSingle(cmdName, ...) if cmdName == nil then return nil end if type(cmdName) == "table" then if cmdName.command or cmdName.cmd or cmdName.name then local name = cmdName.command or cmdName.cmd or cmdName.name local argList = {} if type(cmdName.args) == "table" then argList = cmdName.args elseif type(cmdName.arguments) == "table" then argList = cmdName.arguments else for i = 1, #cmdName do table.insert(argList, cmdName[i]) end end return { name = name, args = argList } end if type(cmdName[1]) == "string" then local name = cmdName[1] local argList = {} for i = 2, #cmdName do table.insert(argList, cmdName[i]) end return { name = name, args = argList } end return nil end if type(cmdName) == "string" then return { name = cmdName, args = { ... } } end return nil end if type(Args[1]) == "table" and Args.n == 1 then local t = Args[1] local maybeOne = normalizeSingle(t) if maybeOne then return { maybeOne } end local list = {} for i = 1, #t do local entry = t[i] if type(entry) == "string" then table.insert(list, { name = entry, args = {} }) elseif type(entry) == "table" then local normalized = normalizeSingle(entry) if normalized then table.insert(list, normalized) end end end if #list > 0 then return list end local mapList = {} for k, v in pairs(t) do if type(k) == "string" then if type(v) == "table" then table.insert(mapList, { name = k, args = v }) else table.insert(mapList, { name = k, args = { v } }) end end end if #mapList > 0 then return mapList end return nil end local one = normalizeSingle(Args[1], __ET_UNPACK(Args, 2, Args.n)) if one then return { one } end return nil end local __ET_STARTUP_COMMANDS = ParseStartupCommands(__ET_LOADSTRING_ARGS) local function RunRegisteredCommand(CommandName, ...) if not CommandName then return false end local key = NormalizeCommandName(CommandName) local entry = CommandRegistry[key] if not entry or type(entry.Run) ~= "function" then return false end local argc = select("#", ...) if argc > 0 then local a1 = select(1, ...) local a2 = select(2, ...) if entry.HasInput and entry.EnumTable then if type(entry.SetInput) == "function" then entry.SetInput(a1) end if type(entry.SetEnum) == "function" then entry.SetEnum(a2) end elseif entry.HasInput then if type(entry.SetInput) == "function" then entry.SetInput(a1) end elseif entry.EnumTable then if type(entry.SetEnum) == "function" then entry.SetEnum(a1) end end end entry.Run(...) return true end getgenv().EmptyToolsAPI = getgenv().EmptyToolsAPI or {} getgenv().EmptyToolsAPI.RunCommand = function(CommandName, ...) return RunRegisteredCommand(CommandName, ...) end CommandCategories = {"None"} CurrentCategory = "None" FadeTweenInfo = TweenInfo.new( 0.25, Enum.EasingStyle.Quint ) PlusEnabled = false KeySelected = false KeyButton = nil UIOpen = true MarkersActive = false PhaseEnabled = false PhaseObjects = {} TeleportIndicator = nil TeleportEnabled = false PointTeleportMode = "Interface" PointTeleportToolEnabled = false PointTeleportTool = nil PointTeleportToolConnections = {} PointTeleportToolCharacterConn = nil PointTeleportToolGiveLoopActive = false PointTeleportToolEquippedMouse = nil FlipMode = "Tool" FlipInterfaceEnabled = false FlipInterfaceConn = nil FlipToolEnabled = false FlipTool = nil FlipToolConnections = {} FlipToolMouseConns = {} FlipToolCharacterConn = nil FlipToolGiveLoopActive = false FlipInProgress = false RampToolEnabled = false RampTool = nil RampToolConnections = {} RampToolCharacterConn = nil RampToolGiveLoopActive = false RampToolEquipped = false RampToolUI = nil RampToolUITransparencyLabel = nil RampToolUIWidthLabel = nil AnchorEnabled = false AnchorMode = "Lock" AnchorAvailableModes = {"Lock", "Deflect", "Isolate (WIP)"} AnchorOriginalAnchored = {} AnchorCharacterConn = nil AnchorDescendantConn = nil AnchorHeartbeatConn = nil DeflectDisabledForces = {} ReturnOnFall = false ForceTimeEnabled = false ForceTimeTarget = nil ForceTimeConnections = {} local function StopForceTime() ForceTimeEnabled = false ForceTimeTarget = nil for _, conn in ipairs(ForceTimeConnections) do pcall(function() conn:Disconnect() end) end ForceTimeConnections = {} end local function StopPhaseMode() PhaseEnabled = false for _, PhaseObj in pairs(PhaseObjects) do if PhaseObj:FindFirstChild("PhaseHighlight") then PhaseObj.PhaseHighlight:Destroy() PhaseObj.CanCollide = true end end end local function StopPointTeleportInterface() TeleportEnabled = false if TeleportIndicator then pcall(function() TeleportIndicator:Destroy() end) TeleportIndicator = nil end pcall(function() Mouse.TargetFilter = nil end) end local function IsPointTeleportTool(obj) return obj and obj:IsA("Tool") and obj:GetAttribute("ET_PointTeleportTool") == true end local function FindPointTeleportToolInContainer(Container) if not Container then return nil end for _, child in ipairs(Container:GetChildren()) do if IsPointTeleportTool(child) then return child end end return nil end local function RemoveExtraPointTeleportTools(Container, KeepTool) if not Container then return end for _, child in ipairs(Container:GetChildren()) do if IsPointTeleportTool(child) and child ~= KeepTool then pcall(function() child:Destroy() end) end end end local function RemovePointTeleportToolInstances() local containers = {} local backpack = Player:FindFirstChild("Backpack") local character = Player.Character if backpack then table.insert(containers, backpack) end if character then table.insert(containers, character) end local starterGear = Player:FindFirstChild("StarterGear") if starterGear then table.insert(containers, starterGear) end for _, container in ipairs(containers) do for _, child in ipairs(container:GetChildren()) do if IsPointTeleportTool(child) then pcall(function() child:Destroy() end) end end end end local function DisconnectPointTeleportToolConnections() for _, conn in ipairs(PointTeleportToolConnections) do pcall(function() conn:Disconnect() end) end PointTeleportToolConnections = {} end local function GetPointTeleportClickTargetAndPosition() local function tryMouseHit(m) if not m then return nil end local okT, target = pcall(function() return m.Target end) if okT and target and target:IsA("BasePart") then local ok, hit = pcall(function() return m.Hit end) if ok and hit and typeof(hit) == "CFrame" then return target, hit.Position end end local ok, hit = pcall(function() return m.Hit end) if ok and hit and typeof(hit) == "CFrame" then return nil end return nil end local target, pos = tryMouseHit(PointTeleportToolEquippedMouse) if target and pos then return target, pos end target, pos = tryMouseHit(Mouse) if target and pos then return target, pos end local ok, screenPos = pcall(function() return UserInputService:GetMouseLocation() end) if not ok or not screenPos or not Camera then return nil end pcall(function() local topLeftInset = Vector2.zero local insetA = game:GetService("GuiService"):GetGuiInset() if typeof(insetA) == "Vector2" then topLeftInset = insetA else local a = select(1, game:GetService("GuiService"):GetGuiInset()) if typeof(a) == "Vector2" then topLeftInset = a end end screenPos = screenPos - topLeftInset end) local ray local okRay = pcall(function() ray = Camera:ViewportPointToRay(screenPos.X, screenPos.Y) end) if not okRay then pcall(function() ray = Camera:ScreenPointToRay(screenPos.X, screenPos.Y) end) end if not ray then return nil end local ignore = {} if Player.Character then table.insert(ignore, Player.Character) end local result if workspace.Raycast then local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Exclude params.FilterDescendantsInstances = ignore result = workspace:Raycast(ray.Origin, ray.Direction * 5000, params) if result and result.Instance and result.Instance:IsA("BasePart") then return result.Instance, result.Position end else local okOld, part, hit = pcall(function() return workspace:FindPartOnRayWithIgnoreList(Ray.new(ray.Origin, ray.Direction * 5000), ignore) end) if okOld and part and part:IsA("BasePart") and hit then return part, hit end end return nil end local EnsurePointTeleportTool local function EnsurePointTeleportToolInBackpack() if not PointTeleportToolEnabled then return end local backpack = Player:WaitForChild("Backpack") local tool = FindPointTeleportToolInContainer(backpack) if tool then return tool end local character = Player.Character tool = FindPointTeleportToolInContainer(character) if tool then return tool end pcall(EnsurePointTeleportTool) return FindPointTeleportToolInContainer(backpack) or FindPointTeleportToolInContainer(Player.Character) end EnsurePointTeleportTool = function() if not PointTeleportToolEnabled then return end local Backpack = Player:WaitForChild("Backpack") local Character = Player.Character local StarterGear = Player:FindFirstChild("StarterGear") DisconnectPointTeleportToolConnections() local Tool = FindPointTeleportToolInContainer(Backpack) if not Tool and Character then local Humanoid = Character:FindFirstChildOfClass("Humanoid") if Humanoid and Humanoid.Health > 0 then Tool = FindPointTeleportToolInContainer(Character) end end if not Tool then Tool = Instance.new("Tool") Tool.Name = "Point Teleport" Tool.RequiresHandle = false Tool.CanBeDropped = false Tool:SetAttribute("ET_PointTeleportTool", true) Tool.Parent = Backpack end PointTeleportTool = Tool RemoveExtraPointTeleportTools(Backpack, Tool) RemoveExtraPointTeleportTools(Character, Tool) if StarterGear then RemoveExtraPointTeleportTools(StarterGear, nil) end table.insert(PointTeleportToolConnections, Tool.Equipped:Connect(function(m) PointTeleportToolEquippedMouse = m end)) table.insert(PointTeleportToolConnections, Tool.Unequipped:Connect(function() PointTeleportToolEquippedMouse = nil end)) table.insert(PointTeleportToolConnections, Tool.Activated:Connect(function() local target, Location = GetPointTeleportClickTargetAndPosition() if not (target and Location) then return end local Root = GetRoot(Player) if Root then Root.Velocity = Vector3.zero end local Character = GetCharacter(Player) if Character then Character:MoveTo(Location) end end)) table.insert(PointTeleportToolConnections, Tool.AncestryChanged:Connect(function() if not PointTeleportToolEnabled then return end task.defer(function() if not PointTeleportToolEnabled then return end if not Tool or not Tool.Parent then task.wait(0.15) EnsurePointTeleportTool() end end) end)) end local function StartPointTeleportToolGiveLoop() if PointTeleportToolGiveLoopActive then return end PointTeleportToolGiveLoopActive = true task.spawn(function() while PointTeleportToolEnabled do local backpack = Player:FindFirstChild("Backpack") local character = Player.Character local hasToolInBackpack = FindPointTeleportToolInContainer(backpack) ~= nil local hasTool = hasToolInBackpack if not hasTool and character then local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid and humanoid.Health > 0 then hasTool = FindPointTeleportToolInContainer(character) ~= nil end end if not hasTool then pcall(EnsurePointTeleportTool) end task.wait(0.2) end PointTeleportToolGiveLoopActive = false end) end local function StartPointTeleportTool() if PointTeleportToolEnabled then EnsurePointTeleportTool() StartPointTeleportToolGiveLoop() return end PointTeleportToolEnabled = true EnsurePointTeleportTool() StartPointTeleportToolGiveLoop() if not PointTeleportToolCharacterConn then PointTeleportToolCharacterConn = Player.CharacterAdded:Connect(function() task.defer(function() while PointTeleportToolEnabled do local tool = EnsurePointTeleportToolInBackpack() if tool then break end task.wait(0.15) end end) end) end end local function StopPointTeleportTool() PointTeleportToolEnabled = false PointTeleportToolEquippedMouse = nil if PointTeleportToolCharacterConn then pcall(function() PointTeleportToolCharacterConn:Disconnect() end) PointTeleportToolCharacterConn = nil end DisconnectPointTeleportToolConnections() RemovePointTeleportToolInstances() PointTeleportTool = nil end local function PerformFlip(flipDirection) if FlipInProgress then return end FlipInProgress = true task.spawn(function() local character = Player and Player.Character if not character then FlipInProgress = false return end local humanoid = character:FindFirstChildOfClass("Humanoid") local rootpart = character:FindFirstChild("HumanoidRootPart") if not humanoid or not rootpart then FlipInProgress = false return end pcall(function() humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end) pcall(function() humanoid.Sit = true end) local lookvector = rootpart.CFrame.LookVector local spindirection = Vector3.new(-lookvector.Z, 0, lookvector.X) local torso = character:FindFirstChild("UpperTorso") or character:FindFirstChild("Torso") or rootpart local bodyvelocity if torso then bodyvelocity = Instance.new("BodyAngularVelocity") bodyvelocity.MaxTorque = Vector3.new(math.huge, math.huge, math.huge) bodyvelocity.AngularVelocity = spindirection * ((flipDirection or 1) * 10) bodyvelocity.P = 1000 bodyvelocity.Parent = torso task.wait(0.4) pcall(function() bodyvelocity:Destroy() end) end task.wait(0.2) pcall(function() humanoid.Sit = false end) FlipInProgress = false end) end local function StartFlipInterface() if FlipInterfaceEnabled then return end FlipInterfaceEnabled = true if FlipInterfaceConn then pcall(function() FlipInterfaceConn:Disconnect() end) FlipInterfaceConn = nil end FlipInterfaceConn = UserInputService.InputBegan:Connect(function(input, gameProcessed) if not FlipInterfaceEnabled then return end if gameProcessed then return end if UserInputService:GetFocusedTextBox() then return end if input.UserInputType == Enum.UserInputType.MouseButton1 then PerformFlip(-1) elseif input.UserInputType == Enum.UserInputType.MouseButton2 then PerformFlip(1) end end) end local function StopFlipInterface() FlipInterfaceEnabled = false if FlipInterfaceConn then pcall(function() FlipInterfaceConn:Disconnect() end) FlipInterfaceConn = nil end end local function IsFlipTool(obj) return obj and obj:IsA("Tool") and obj:GetAttribute("ET_FlipTool") == true end local function FindFlipToolInContainer(container) if not container then return nil end for _, child in ipairs(container:GetChildren()) do if IsFlipTool(child) then return child end end return nil end local function RemoveExtraFlipTools(container, keepTool) if not container then return end for _, child in ipairs(container:GetChildren()) do if IsFlipTool(child) and child ~= keepTool then pcall(function() child:Destroy() end) end end end local function RemoveFlipToolInstances() local containers = {} local backpack = Player:FindFirstChild("Backpack") local character = Player.Character if backpack then table.insert(containers, backpack) end if character then table.insert(containers, character) end local starterGear = Player:FindFirstChild("StarterGear") if starterGear then table.insert(containers, starterGear) end for _, container in ipairs(containers) do for _, child in ipairs(container:GetChildren()) do if IsFlipTool(child) then pcall(function() child:Destroy() end) end end end end local function DisconnectFlipToolConnections() for _, conn in ipairs(FlipToolConnections) do pcall(function() conn:Disconnect() end) end FlipToolConnections = {} end local function DisconnectFlipToolMouseConns() for _, conn in ipairs(FlipToolMouseConns) do pcall(function() conn:Disconnect() end) end FlipToolMouseConns = {} end local EnsureFlipTool local function EnsureFlipToolInBackpack() if not FlipToolEnabled then return end local backpack = Player:WaitForChild("Backpack") local tool = FindFlipToolInContainer(backpack) if tool then return tool end local character = Player.Character tool = FindFlipToolInContainer(character) if tool then return tool end pcall(EnsureFlipTool) return FindFlipToolInContainer(backpack) or FindFlipToolInContainer(Player.Character) end EnsureFlipTool = function() if not FlipToolEnabled then return end local backpack = Player:WaitForChild("Backpack") local character = Player.Character local starterGear = Player:FindFirstChild("StarterGear") DisconnectFlipToolMouseConns() DisconnectFlipToolConnections() local tool = FindFlipToolInContainer(backpack) if not tool and character then local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid and humanoid.Health > 0 then tool = FindFlipToolInContainer(character) end end if not tool then tool = Instance.new("Tool") tool.Name = "Flip" tool.RequiresHandle = false tool.CanBeDropped = false tool:SetAttribute("ET_FlipTool", true) tool.Parent = backpack end FlipTool = tool RemoveExtraFlipTools(backpack, tool) RemoveExtraFlipTools(character, tool) if starterGear then RemoveExtraFlipTools(starterGear, nil) end table.insert(FlipToolConnections, tool.Equipped:Connect(function(m) DisconnectFlipToolMouseConns() if not FlipToolEnabled then return end if not m then return end if typeof(m) ~= "Instance" then return end local function tryFlip(dir) if not FlipToolEnabled then return end if UserInputService:GetFocusedTextBox() then return end PerformFlip(dir) end pcall(function() table.insert(FlipToolMouseConns, m.Button1Down:Connect(function() tryFlip(-1) end)) end) pcall(function() table.insert(FlipToolMouseConns, m.Button2Down:Connect(function() tryFlip(1) end)) end) end)) table.insert(FlipToolConnections, tool.Unequipped:Connect(function() DisconnectFlipToolMouseConns() end)) table.insert(FlipToolConnections, tool.AncestryChanged:Connect(function() if not FlipToolEnabled then return end task.defer(function() if not FlipToolEnabled then return end if not tool or not tool.Parent then task.wait(0.15) EnsureFlipTool() end end) end)) end local function StartFlipToolGiveLoop() if FlipToolGiveLoopActive then return end FlipToolGiveLoopActive = true task.spawn(function() while FlipToolEnabled do local backpack = Player:FindFirstChild("Backpack") local character = Player.Character local hasToolInBackpack = FindFlipToolInContainer(backpack) ~= nil local hasTool = hasToolInBackpack if not hasTool and character then local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid and humanoid.Health > 0 then hasTool = FindFlipToolInContainer(character) ~= nil end end if not hasTool then pcall(EnsureFlipTool) end task.wait(0.2) end FlipToolGiveLoopActive = false end) end local function StartFlipTool() if FlipToolEnabled then EnsureFlipTool() StartFlipToolGiveLoop() return end FlipToolEnabled = true EnsureFlipTool() StartFlipToolGiveLoop() if not FlipToolCharacterConn then FlipToolCharacterConn = Player.CharacterAdded:Connect(function() task.defer(function() while FlipToolEnabled do local tool = EnsureFlipToolInBackpack() if tool then break end task.wait(0.15) end end) end) end end local function StopFlipTool() FlipToolEnabled = false if FlipToolCharacterConn then pcall(function() FlipToolCharacterConn:Disconnect() end) FlipToolCharacterConn = nil end DisconnectFlipToolMouseConns() DisconnectFlipToolConnections() RemoveFlipToolInstances() FlipTool = nil end local function StartFlip(mode) mode = tostring(mode or "Tool") if mode ~= "Tool" and mode ~= "Interface" then mode = "Tool" end FlipMode = mode if FlipMode == "Tool" then StopFlipInterface() StartFlipTool() else StopFlipTool() StartFlipInterface() end end local function StopFlip() StopFlipInterface() StopFlipTool() end local function ApplyAnchorToCharacter(Character, Enabled) if not Character then return end for _, obj in ipairs(Character:GetDescendants()) do if obj:IsA("BasePart") then if Enabled then if AnchorOriginalAnchored[obj] == nil then AnchorOriginalAnchored[obj] = obj.Anchored end obj.Anchored = true else local original = AnchorOriginalAnchored[obj] if original ~= nil then obj.Anchored = original end end end end end local function TryGetProp(obj, prop) local ok, val = pcall(function() return obj[prop] end) if ok then return val end return nil end local function TrySetProp(obj, prop, value) local ok = pcall(function() obj[prop] = value end) return ok end local function NormalizeAnchorMode(mode) local m = tostring(mode or ""):lower() if m == "" then return "Lock" end if m:find("isolate", 1, true) then return "Isolate (WIP)" end if m:find("deflect", 1, true) then return "Deflect" end return "Lock" end local function DisconnectConn(conn) if not conn then return nil end pcall(function() conn:Disconnect() end) return nil end local function IsDeflectForceObject(obj) if not obj then return false end return obj:IsA("BodyMover") or obj:IsA("LinearVelocity") or obj:IsA("AngularVelocity") or obj:IsA("VectorForce") or obj:IsA("AlignPosition") or obj:IsA("AlignOrientation") or obj:IsA("Torque") end local function DeflectNeutralizeForceObject(obj, trackOriginal) if not obj or not obj.Parent then return end if DeflectDisabledForces[obj] ~= nil then return end local original = {} local function captureAndSet(prop, value) local before = TryGetProp(obj, prop) if before == nil then return end local ok = TrySetProp(obj, prop, value) if ok and trackOriginal then original[prop] = before end end captureAndSet("Enabled", false) captureAndSet("MaxForce", Vector3.zero) captureAndSet("MaxTorque", Vector3.zero) captureAndSet("Force", Vector3.zero) captureAndSet("Torque", Vector3.zero) captureAndSet("Velocity", Vector3.zero) captureAndSet("AngularVelocity", Vector3.zero) captureAndSet("P", 0) captureAndSet("D", 0) captureAndSet("Responsiveness", 0) pcall(function() obj:SetAttribute("ET_DeflectSuppressed", true) end) if trackOriginal and next(original) ~= nil then DeflectDisabledForces[obj] = original end end local function DeflectRestoreTrackedForces() for obj, props in pairs(DeflectDisabledForces) do if obj and obj.Parent then for prop, value in pairs(props) do TrySetProp(obj, prop, value) end pcall(function() obj:SetAttribute("ET_DeflectSuppressed", nil) end) end end DeflectDisabledForces = {} end local function IsDeflectLikeAnchorMode(mode) return mode == "Deflect" or mode == "Isolate (WIP)" end local IsolateRagdollConns = {} local IsolateRagdollHumanoid = nil local IsolateRagdollOriginalStates = nil local IsolateRagdollMotors = nil local IsolateRagdollCharacter = nil local function IsRagdollConstraint(obj) return obj and (obj:IsA("BallSocketConstraint") or obj:IsA("HingeConstraint") or obj:IsA("NoCollisionConstraint") or obj:IsA("RopeConstraint") or obj:IsA("RodConstraint") or obj:IsA("SpringConstraint") or obj:IsA("PrismaticConstraint") or obj:IsA("CylindricalConstraint")) end local function ConstraintLooksLikeCharacterRagdoll(constraint, character) if not constraint or not character then return false end local a0 = TryGetProp(constraint, "Attachment0") local a1 = TryGetProp(constraint, "Attachment1") if not a0 or not a1 then return false end local p0 = TryGetProp(a0, "Parent") local p1 = TryGetProp(a1, "Parent") if not p0 or not p1 then return false end if not p0:IsA("BasePart") or not p1:IsA("BasePart") then return false end return p0:IsDescendantOf(character) and p1:IsDescendantOf(character) end local function SnapshotCharacterMotors(character) local motors = {} if not character then return motors end for _, obj in ipairs(character:GetDescendants()) do if obj:IsA("Motor6D") then table.insert(motors, { Name = obj.Name, Parent = obj.Parent, Part0 = TryGetProp(obj, "Part0"), Part1 = TryGetProp(obj, "Part1"), C0 = TryGetProp(obj, "C0"), C1 = TryGetProp(obj, "C1"), Motor = obj, }) end end return motors end local function RestoreCharacterMotors(character, motors) if not character or not motors then return end for _, info in ipairs(motors) do local motor = info.Motor if not motor or not TryGetProp(motor, "Parent") then local parent = info.Parent if typeof(parent) ~= "Instance" then parent = nil end if parent and not parent:IsDescendantOf(character) then parent = nil end local candidate if parent then candidate = parent:FindFirstChild(info.Name) if candidate and candidate:IsA("Motor6D") then motor = candidate end end if not motor then motor = Instance.new("Motor6D") motor.Name = info.Name motor.Parent = parent or info.Part0 or character end info.Motor = motor end pcall(function() if info.Part0 ~= nil then motor.Part0 = info.Part0 end end) pcall(function() if info.Part1 ~= nil then motor.Part1 = info.Part1 end end) pcall(function() if typeof(info.C0) == "CFrame" then motor.C0 = info.C0 end end) pcall(function() if typeof(info.C1) == "CFrame" then motor.C1 = info.C1 end end) pcall(function() if TryGetProp(motor, "Enabled") == false then motor.Enabled = true end end) end end local function RemoveCharacterRagdollConstraints(character) if not character then return false end local removedAny = false for _, obj in ipairs(character:GetDescendants()) do if IsRagdollConstraint(obj) and ConstraintLooksLikeCharacterRagdoll(obj, character) then removedAny = true pcall(function() obj:Destroy() end) end end return removedAny end local function ZeroCharacterVelocities(character) if not character then return end for _, obj in ipairs(character:GetDescendants()) do if obj:IsA("BasePart") then TrySetProp(obj, "AssemblyLinearVelocity", Vector3.zero) TrySetProp(obj, "AssemblyAngularVelocity", Vector3.zero) TrySetProp(obj, "Velocity", Vector3.zero) TrySetProp(obj, "RotVelocity", Vector3.zero) end end end local function StopIsolateRagdollProtection() IsolateRagdollConns.StateChanged = DisconnectConn(IsolateRagdollConns.StateChanged) IsolateRagdollConns.PlatformStand = DisconnectConn(IsolateRagdollConns.PlatformStand) IsolateRagdollConns.AncestryChanged = DisconnectConn(IsolateRagdollConns.AncestryChanged) IsolateRagdollConns.DescendantAdded = DisconnectConn(IsolateRagdollConns.DescendantAdded) IsolateRagdollConns.Heartbeat = DisconnectConn(IsolateRagdollConns.Heartbeat) if IsolateRagdollHumanoid and IsolateRagdollOriginalStates then for stateType, wasEnabled in pairs(IsolateRagdollOriginalStates) do pcall(function() IsolateRagdollHumanoid:SetStateEnabled(stateType, wasEnabled) end) end end IsolateRagdollHumanoid = nil IsolateRagdollOriginalStates = nil IsolateRagdollMotors = nil IsolateRagdollCharacter = nil end local function StartIsolateRagdollProtection(Character) StopIsolateRagdollProtection() if not Character then return end local humanoid = Character:FindFirstChildOfClass("Humanoid") if not humanoid then return end IsolateRagdollHumanoid = humanoid IsolateRagdollOriginalStates = {} IsolateRagdollCharacter = Character IsolateRagdollMotors = SnapshotCharacterMotors(Character) local blockedStates = { Enum.HumanoidStateType.Ragdoll, Enum.HumanoidStateType.Physics, Enum.HumanoidStateType.FallingDown, Enum.HumanoidStateType.PlatformStanding, } for _, stateType in ipairs(blockedStates) do pcall(function() IsolateRagdollOriginalStates[stateType] = humanoid:GetStateEnabled(stateType) end) pcall(function() humanoid:SetStateEnabled(stateType, false) end) end local function cancelRagdoll() if not AnchorEnabled or AnchorMode ~= "Isolate (WIP)" then return end local character = IsolateRagdollCharacter or Player.Character if character then RemoveCharacterRagdollConstraints(character) RestoreCharacterMotors(character, IsolateRagdollMotors) end pcall(function() if humanoid.PlatformStand then humanoid.PlatformStand = false end end) local state pcall(function() state = humanoid:GetState() end) if state == Enum.HumanoidStateType.Ragdoll or state == Enum.HumanoidStateType.Physics or state == Enum.HumanoidStateType.FallingDown or state == Enum.HumanoidStateType.PlatformStanding then pcall(function() humanoid:ChangeState(Enum.HumanoidStateType.GettingUp) end) pcall(function() humanoid:ChangeState(Enum.HumanoidStateType.Running) end) if character then ZeroCharacterVelocities(character) end end end IsolateRagdollConns.StateChanged = humanoid.StateChanged:Connect(function(_, new) if not AnchorEnabled or AnchorMode ~= "Isolate (WIP)" then return end if new == Enum.HumanoidStateType.Ragdoll or new == Enum.HumanoidStateType.Physics or new == Enum.HumanoidStateType.FallingDown or new == Enum.HumanoidStateType.PlatformStanding then cancelRagdoll() end end) IsolateRagdollConns.PlatformStand = humanoid:GetPropertyChangedSignal("PlatformStand"):Connect(function() if not AnchorEnabled or AnchorMode ~= "Isolate (WIP)" then return end if humanoid.PlatformStand then humanoid.PlatformStand = false end end) IsolateRagdollConns.AncestryChanged = humanoid.AncestryChanged:Connect(function(_, parent) if parent == nil then StopIsolateRagdollProtection() end end) IsolateRagdollConns.DescendantAdded = Character.DescendantAdded:Connect(function(obj) if not AnchorEnabled or AnchorMode ~= "Isolate (WIP)" then return end if IsRagdollConstraint(obj) and ConstraintLooksLikeCharacterRagdoll(obj, Character) then pcall(function() obj:Destroy() end) cancelRagdoll() return end if obj:IsA("Motor6D") then pcall(function() if TryGetProp(obj, "Enabled") == false then obj.Enabled = true end end) end end) local lastEnforce = 0 IsolateRagdollConns.Heartbeat = RunService.Heartbeat:Connect(function() if not AnchorEnabled or AnchorMode ~= "Isolate (WIP)" then return end if tick() - lastEnforce < 0.12 then return end lastEnforce = tick() local character = IsolateRagdollCharacter or Player.Character if not character then return end local removedAny = RemoveCharacterRagdollConstraints(character) RestoreCharacterMotors(character, IsolateRagdollMotors) if removedAny then ZeroCharacterVelocities(character) end end) cancelRagdoll() end local function ApplyDeflectToCharacter(Character, trackExisting) if not Character then return end for _, obj in ipairs(Character:GetDescendants()) do if IsDeflectForceObject(obj) then DeflectNeutralizeForceObject(obj, trackExisting) end end end local function StartAnchorLockForCharacter(Character) AnchorOriginalAnchored = {} ApplyAnchorToCharacter(Character, true) AnchorDescendantConn = DisconnectConn(AnchorDescendantConn) if Character then AnchorDescendantConn = Character.DescendantAdded:Connect(function(obj) if not AnchorEnabled or AnchorMode ~= "Lock" then return end if obj:IsA("BasePart") then AnchorOriginalAnchored[obj] = obj.Anchored obj.Anchored = true end end) end end local function StartAnchorDeflectForCharacter(Character) DeflectRestoreTrackedForces() ApplyDeflectToCharacter(Character, true) AnchorDescendantConn = DisconnectConn(AnchorDescendantConn) if Character then AnchorDescendantConn = Character.DescendantAdded:Connect(function(obj) if not AnchorEnabled or not IsDeflectLikeAnchorMode(AnchorMode) then return end if IsDeflectForceObject(obj) then DeflectNeutralizeForceObject(obj, false) end end) end AnchorHeartbeatConn = DisconnectConn(AnchorHeartbeatConn) AnchorHeartbeatConn = RunService.Heartbeat:Connect(function() if not AnchorEnabled or not IsDeflectLikeAnchorMode(AnchorMode) then return end local character = Player and Player.Character if not character then return end local humanoid = character:FindFirstChildOfClass("Humanoid") local root = character:FindFirstChild("HumanoidRootPart") if not humanoid or not root then return end local vel = TryGetProp(root, "AssemblyLinearVelocity") or TryGetProp(root, "Velocity") if typeof(vel) ~= "Vector3" then return end local moveDir = TryGetProp(humanoid, "MoveDirection") or Vector3.zero local walkSpeed = TryGetProp(humanoid, "WalkSpeed") or 16 local jumpPower = TryGetProp(humanoid, "JumpPower") or 50 local jumpCap = math.max(jumpPower * 1.1, 55) local floorMaterial = TryGetProp(humanoid, "FloorMaterial") local onGround = floorMaterial ~= nil and floorMaterial ~= Enum.Material.Air local horiz = Vector3.new(vel.X, 0, vel.Z) local horizMag = horiz.Magnitude local maxHoriz = math.max(walkSpeed * 1.6, 30) local idleMax = 2 local newHoriz = horiz local newY = vel.Y local shouldSet = false if newY > jumpCap then newY = jumpCap shouldSet = true end if onGround and moveDir.Magnitude < 0.05 and horizMag > idleMax then newHoriz = Vector3.zero shouldSet = true elseif horizMag > maxHoriz then if moveDir.Magnitude > 0.05 then newHoriz = moveDir.Unit * maxHoriz elseif horizMag > 0 then newHoriz = horiz.Unit * maxHoriz end shouldSet = true end if shouldSet then local newVel = Vector3.new(newHoriz.X, newY, newHoriz.Z) TrySetProp(root, "AssemblyLinearVelocity", newVel) TrySetProp(root, "Velocity", newVel) end local ang = TryGetProp(root, "AssemblyAngularVelocity") or TryGetProp(root, "RotVelocity") if typeof(ang) == "Vector3" and ang.Magnitude > 0.5 then TrySetProp(root, "AssemblyAngularVelocity", Vector3.zero) TrySetProp(root, "RotVelocity", Vector3.zero) end end) end local StopAnchor local function StartAnchor(mode) mode = NormalizeAnchorMode(mode) if AnchorEnabled then if AnchorMode == mode then return end StopAnchor() end AnchorEnabled = true AnchorMode = mode local Character = GetCharacter(Player) if AnchorMode == "Lock" then StartAnchorLockForCharacter(Character) else StartAnchorDeflectForCharacter(Character) if AnchorMode == "Isolate (WIP)" then StartIsolateRagdollProtection(Character) end end if not AnchorCharacterConn then AnchorCharacterConn = Player.CharacterAdded:Connect(function(NewCharacter) task.defer(function() if not AnchorEnabled then return end if AnchorMode == "Lock" then StartAnchorLockForCharacter(NewCharacter) else StartAnchorDeflectForCharacter(NewCharacter) if AnchorMode == "Isolate (WIP)" then StartIsolateRagdollProtection(NewCharacter) end end end) end) end end StopAnchor = function() if not AnchorEnabled then return end if AnchorMode == "Lock" then ApplyAnchorToCharacter(Player.Character, false) AnchorOriginalAnchored = {} else DeflectRestoreTrackedForces() end StopIsolateRagdollProtection() AnchorEnabled = false AnchorDescendantConn = DisconnectConn(AnchorDescendantConn) AnchorHeartbeatConn = DisconnectConn(AnchorHeartbeatConn) AnchorCharacterConn = DisconnectConn(AnchorCharacterConn) end local function EnforceForceTime() if not ForceTimeEnabled or ForceTimeTarget == nil then return end if math.abs(Lighting.ClockTime - ForceTimeTarget) > 0.001 then Lighting.ClockTime = ForceTimeTarget end end local function StartForceTime(timeNumber) ForceTimeTarget = timeNumber ForceTimeEnabled = true EnforceForceTime() if #ForceTimeConnections > 0 then return end table.insert(ForceTimeConnections, RunService.RenderStepped:Connect(EnforceForceTime)) table.insert(ForceTimeConnections, Lighting:GetPropertyChangedSignal("ClockTime"):Connect(EnforceForceTime)) table.insert(ForceTimeConnections, Lighting:GetPropertyChangedSignal("TimeOfDay"):Connect(EnforceForceTime)) pcall(function() table.insert(ForceTimeConnections, Lighting:GetPropertyChangedSignal("MinutesAfterMidnight"):Connect(EnforceForceTime)) end) end RampPlacing = false RampPlacingSource = nil RampGhostModel = nil RampIndicator = nil RampPreview = nil RampStartPosition = nil RampPreviousTargetFilter = nil RampPlacementType = "Translucent" RampWidth = 6 RampThickness = 1 RampHistory = {} DoubleJump = false JumpInstances = 1 FlySpeed = 30 DefaultWalkSpeed = 16 DefaultJumpPower = 50 DefaultGravity = 196.2 DefaultFOV = 70 DefaultDestroyHeight = nil DefaultMinZoomDistance = nil DefaultMaxZoomDistance = nil DefaultAnimations = { Idle1 = nil, Idle2 = nil, Walk = nil, Run = nil, Jump = nil, Climb = nil, Fall = nil, Swim = nil, SwimIdle = nil } LogsOpen = false Log = nil ThirdPartyCommands = {} -- Loadstring Variables ThirdPartyLoadstrings = { ["Infinite Yield"] = function() loadstring(game:HttpGet('https://raw.githubusercontent.com/EdgeIY/infiniteyield/master/source'))() end, ["CMD-X"] = function() loadstring(game:HttpGet("https://raw.githubusercontent.com/CMD-X/CMD-X/master/Source",true))() end, ["Sky Hub"] = function() loadstring(game:HttpGet("https://raw.githubusercontent.com/yofriendfromschool1/Sky-Hub/main/SkyHub.txt"))() end, ["Backflip Tool"] = function() loadstring(game:HttpGet("https://raw.githubusercontent.com/Boxten-Keyes/music/refs/heads/main/music%23%5Bscripts%5D/music%23%5Bmiscellaneous%5D/music%23%5Bfe%20flip%5D.lua"))() end, } EmptyToolsLoadstrings = { ["Default"] = [[ if not game:IsLoaded() then game.Loaded:Wait() end getgenv().EmptyTools = false game:GetService("Players").LocalPlayer:SetAttribute("NoChangeLogs", true) loadstring(game:HttpGet("https://raw.githubusercontent.com/likelysmith/EmptyTools/main/script"))() ]], ["Generic Shading"] = [[ if not game:IsLoaded() then game.Loaded:Wait() end getgenv().EmptyTools = false game:GetService("Players").LocalPlayer:SetAttribute("NoChangeLogs", true) loadstring(game:HttpGet("https://raw.githubusercontent.com/likelysmith/EmptyTools/main/script"))("Shading", "Generic") ]], ["Beta"] = [[ if not game:IsLoaded() then game.Loaded:Wait() end getgenv().EmptyTools = false game:GetService("Players").LocalPlayer:SetAttribute("NoChangeLogs", true) game:GetService("Players").LocalPlayer:SetAttribute("EmptyToolz", true) loadstring(game:HttpGet("https://raw.githubusercontent.com/likelysmith/EmptyTools/main/script"))() ]], ["Legacy"] = 'loadstring(game:HttpGet("https://raw.githubusercontent.com/likelysmith/EmptyTools/main/script"))()', ["UNC"] = function() loadstring(game:HttpGet("https://raw.githubusercontent.com/likelysmith/EmptyTools/main/unctest"))() end, ["VCBypass"] = function() loadstring(game:HttpGet("https://raw.githubusercontent.com/likelysmith/EmptyTools/main/vc"))() end, } BetaTPLoadstrings = { } -- Settings Control settingsFile = "ETCONFIG.json" defaultSettings = { TipsEnabled = true, AlertsEnabled = true, ThirdPartiesEnabled = false, PointTeleportIndicatorEnabled = true, MinimizeOnClose = true, Persist = true, ShowChangeLogs = true, changelogHiddenVersion = "", ToggleKey = "Equals", Topmost = true, AlertOfDuplicate = true, } function loadSettings() if not RunService:IsStudio() then if isfile(settingsFile) then local content = readfile(settingsFile) local success, data = pcall(function() return HttpService:JSONDecode(content) end) if success and data then return data end end end return defaultSettings end function saveSettings(settings) if not RunService:IsStudio() then local json = HttpService:JSONEncode(settings) writefile(settingsFile, json) end end userSettings = loadSettings() if userSettings.ToggleKey == nil then userSettings.ToggleKey = defaultSettings.ToggleKey saveSettings(userSettings) end TipsEnabled = userSettings.TipsEnabled AlertsEnabled = userSettings.AlertsEnabled ThirdPartiesEnabled = userSettings.ThirdPartiesEnabled PointTeleportIndicatorEnabled = userSettings.PointTeleportIndicatorEnabled MinimizeOnClose = userSettings.MinimizeOnClose Persist = userSettings.Persist ShowChangeLogs = userSettings.ShowChangeLogs ToggleKey = Enum.KeyCode[userSettings.ToggleKey] Topmost = userSettings.Topmost AlertOfDuplicate = userSettings.AlertOfDuplicate -- Protect UI function ProtectUI(UI) if syn and syn.protect_gui then syn.protect_gui(UI) end ETLOG("Gui Protected - " .. UI.Name) end -- Create UI Method function CreateUI() local EmptyTools = Instance.new("ScreenGui") local OuterFrame = Instance.new("Frame") local UICorner = Instance.new("UICorner") local Contents = Instance.new("Frame") local Title = Instance.new("TextLabel") local UICorner_2 = Instance.new("UICorner") local UIAspectRatioConstraint = Instance.new("UIAspectRatioConstraint") local Commands = Instance.new("ScrollingFrame") local UIListLayout = Instance.new("UIListLayout") local Search = Instance.new("TextBox") local UICorner_3 = Instance.new("UICorner") local UITextSizeConstraint = Instance.new("UITextSizeConstraint") local Category = Instance.new("TextButton") local UICorner_4 = Instance.new("UICorner") local UITextSizeConstraint_2 = Instance.new("UITextSizeConstraint") local Info = Instance.new("Frame") local UICorner_5 = Instance.new("UICorner") local Title_2 = Instance.new("TextLabel") local Info_2 = Instance.new("TextLabel") local UIAspectRatioConstraint_2 = Instance.new("UIAspectRatioConstraint") local Settings = Instance.new("TextButton") local UICorner_6 = Instance.new("UICorner") local UITextSizeConstraint_3 = Instance.new("UITextSizeConstraint") local Settings_2 = Instance.new("ScrollingFrame") local UIListLayout_2 = Instance.new("UIListLayout") local Info_3 = Instance.new("TextButton") local UICorner_7 = Instance.new("UICorner") local UIAspectRatioConstraint_3 = Instance.new("UIAspectRatioConstraint") local ContentShrunken = Instance.new("Frame") local UICorner_8 = Instance.new("UICorner") local UIAspectRatioConstraint_4 = Instance.new("UIAspectRatioConstraint") local Close = Instance.new("TextButton") local UICorner_9 = Instance.new("UICorner") local UIAspectRatioConstraint_5 = Instance.new("UIAspectRatioConstraint") local Toggle = Instance.new("TextButton") local UICorner_10 = Instance.new("UICorner") local UIAspectRatioConstraint_6 = Instance.new("UIAspectRatioConstraint") local ToastFrame = Instance.new("Frame") local UICorner_11 = Instance.new("UICorner") local Text = Instance.new("TextLabel") --Properties: EmptyTools.Name = "EmptyTools" EmptyTools.ZIndexBehavior = Enum.ZIndexBehavior.Sibling EmptyTools.ResetOnSpawn = false EmptyTools.IgnoreGuiInset = true OuterFrame.Name = "OuterFrame" OuterFrame.Parent = EmptyTools OuterFrame.BackgroundColor3 = Color3.fromRGB(36, 36, 36) OuterFrame.BorderColor3 = Color3.fromRGB(0, 0, 0) OuterFrame.BorderSizePixel = 0 OuterFrame.Position = UDim2.new(0.65821141, 0, 0.429824561, 0) OuterFrame.Size = UDim2.new(0.329648048, 0, 0.492894381, 0) if UserInputService.TouchEnabled then OuterFrame.Size = UDim2.new(0.514648048, 0, 0.551894381, 0) OuterFrame.Position = UDim2.new(0.588, 0, 0.429824561, 0) end UICorner.CornerRadius = UDim.new(0.0500000007, 0) UICorner.Parent = OuterFrame Contents.Name = "Contents" Contents.Parent = OuterFrame Contents.BackgroundColor3 = Color3.fromRGB(36, 36, 36) Contents.BackgroundTransparency = 1.000 Contents.BorderColor3 = Color3.fromRGB(0, 0, 0) Contents.BorderSizePixel = 0 Contents.Size = UDim2.new(1, 0, 1, 0) Title.Name = "Title" Title.Parent = Contents Title.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Title.BackgroundTransparency = 1.000 Title.BorderColor3 = Color3.fromRGB(0, 0, 0) Title.BorderSizePixel = 0 Title.Position = UDim2.new(0.064338237, 0, 0.034324944, 0) Title.Size = UDim2.new(0.63786763, 0, 0.125858128, 0) Title.Font = Enum.Font.Gotham Title.Text = "Empty Tools" Title.TextColor3 = Color3.fromRGB(255,255,255) Title.TextScaled = true Title.TextSize = 14.000 Title.TextWrapped = true Title.TextXAlignment = Enum.TextXAlignment.Left if PlusEnabled then Title.Size = UDim2.new(0.599,0,0.126,0) Title.RichText = true Title.Text = [[Empty Tools beta ]] end UICorner_2.CornerRadius = UDim.new(0.0500000007, 0) UICorner_2.Parent = Contents UIAspectRatioConstraint.Parent = Contents UIAspectRatioConstraint.AspectRatio = 1.245 Commands.Name = "Commands" Commands.Parent = Contents Commands.Active = true Commands.BackgroundColor3 = Color3.fromRGB(50, 50, 50) Commands.BorderColor3 = Color3.fromRGB(0, 0, 0) Commands.BorderSizePixel = 0 Commands.Position = UDim2.new(0.064338237, 0, 0.295194507, 0) Commands.Size = UDim2.new(0.880514681, 0, 0.645308912, 0) Commands.CanvasSize = UDim2.new(0, 0, 3.5, 0) Commands.ScrollBarThickness = 13 UIListLayout.Parent = Commands UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder UIListLayout.Padding = UDim.new(0.00249999994, 0) Search.Name = "Search" Search.Parent = Contents Search.BackgroundColor3 = Color3.fromRGB(65, 65, 65) Search.BorderColor3 = Color3.fromRGB(0, 0, 0) Search.BorderSizePixel = 0 Search.Position = UDim2.new(0.064338237, 0, 0.194508016, 0) Search.Size = UDim2.new(0.286764711, 0, 0.080091536, 0) Search.Font = Enum.Font.Gotham Search.PlaceholderColor3 = Color3.fromRGB(149, 149, 149) Search.PlaceholderText = "Search.." Search.Text = "" Search.TextColor3 = Color3.fromRGB(255, 255, 255) Search.TextScaled = true Search.TextSize = 25.000 Search.TextWrapped = true UICorner_3.CornerRadius = UDim.new(0.550000012, 0) UICorner_3.Parent = Search UITextSizeConstraint.Parent = Search UITextSizeConstraint.MaxTextSize = 23 Category.Name = "Category" Category.Parent = Contents Category.BackgroundColor3 = Color3.fromRGB(65, 65, 65) Category.BorderColor3 = Color3.fromRGB(0, 0, 0) Category.BorderSizePixel = 0 Category.Position = UDim2.new(0.370332718, 0, 0.192686558, 0) Category.Size = UDim2.new(0.274057955, 0, 0.0800000057, 0) Category.Font = Enum.Font.Gotham Category.Text = "Filter: None" Category.TextColor3 = Color3.fromRGB(255, 255, 255) Category.TextScaled = true Category.TextSize = 20.000 Category.TextWrapped = true UICorner_4.CornerRadius = UDim.new(0.550000012, 0) UICorner_4.Parent = Category UITextSizeConstraint_2.Parent = Category UITextSizeConstraint_2.MaxTextSize = 20 Info.Name = "Info" Info.Parent = Contents Info.BackgroundColor3 = Color3.fromRGB(36, 36, 36) Info.BorderColor3 = Color3.fromRGB(0, 0, 0) Info.BorderSizePixel = 0 Info.Position = UDim2.new(0.00554660289, 0, -0.230156511, 0) Info.Size = UDim2.new(0.985446513, 0, 0.214045554, 0) Info.Visible = false UICorner_5.CornerRadius = UDim.new(0.25, 0) UICorner_5.Parent = Info Title_2.Name = "Title" Title_2.Parent = Info Title_2.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Title_2.BackgroundTransparency = 1.000 Title_2.BorderColor3 = Color3.fromRGB(0, 0, 0) Title_2.BorderSizePixel = 0 Title_2.Position = UDim2.new(0.317073166, 0, 0.0645161271, 0) Title_2.Size = UDim2.new(0.375234514, 0, 0.290322572, 0) Title_2.Font = Enum.Font.GothamBold Title_2.Text = "Title" Title_2.TextColor3 = Color3.fromRGB(255, 255, 255) Title_2.TextScaled = true Title_2.TextSize = 14.000 Title_2.TextWrapped = true Info_2.Name = "Info" Info_2.Parent = Info Info_2.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Info_2.BackgroundTransparency = 1.000 Info_2.BorderColor3 = Color3.fromRGB(0, 0, 0) Info_2.BorderSizePixel = 0 Info_2.Position = UDim2.new(0.0450282581, 0, 0.354838699, 0) Info_2.Size = UDim2.new(0.915654898, 0, 0.54838711, 0) Info_2.Font = Enum.Font.Gotham Info_2.Text = "Info" Info_2.TextColor3 = Color3.fromRGB(255, 255, 255) Info_2.TextScaled = true Info_2.TextSize = 14.000 Info_2.TextWrapped = true UIAspectRatioConstraint_2.Parent = Info UIAspectRatioConstraint_2.AspectRatio = 5.731 Settings.Name = "Settings" Settings.Parent = Contents Settings.BackgroundColor3 = Color3.fromRGB(65, 65, 65) Settings.BorderColor3 = Color3.fromRGB(0, 0, 0) Settings.BorderSizePixel = 0 Settings.Position = UDim2.new(0.663670063, 0, 0.192686558, 0) Settings.Size = UDim2.new(0.244357735, 0, 0.0800000057, 0) Settings.Font = Enum.Font.Gotham Settings.Text = "Settings" Settings.TextColor3 = Color3.fromRGB(255, 255, 255) Settings.TextScaled = true Settings.TextSize = 20.000 Settings.TextWrapped = true UICorner_6.CornerRadius = UDim.new(0.550000012, 0) UICorner_6.Parent = Settings UITextSizeConstraint_3.Parent = Settings UITextSizeConstraint_3.MaxTextSize = 20 Settings_2.Name = "SettingsFrame" Settings_2.Parent = Contents Settings_2.Active = true Settings_2.BackgroundColor3 = Color3.fromRGB(50, 50, 50) Settings_2.BackgroundTransparency = 1 Settings_2.BorderColor3 = Color3.fromRGB(0, 0, 0) Settings_2.BorderSizePixel = 0 Settings_2.Position = UDim2.new(0.064338237, 0, 0.295194507, 0) Settings_2.Size = UDim2.new(0.880514681, 0, 0.645308912, 0) Settings_2.Visible = false Settings_2.CanvasSize = UDim2.new(0, 0, 3.5, 0) Settings_2.ScrollBarThickness = 13 UIListLayout_2.Parent = Settings_2 UIListLayout_2.SortOrder = Enum.SortOrder.LayoutOrder UIListLayout_2.Padding = UDim.new(0.00249999994, 0) Info_3.Name = "Info" Info_3.Parent = OuterFrame Info_3.BackgroundColor3 = Color3.fromRGB(65, 65, 65) Info_3.BorderColor3 = Color3.fromRGB(0, 0, 0) Info_3.BorderSizePixel = 0 Info_3.Position = UDim2.new(0.701061368, 0, 0.0343248919, 0) Info_3.Size = UDim2.new(0.0790441632, 0, 0.125858128, 0) Info_3.ZIndex = 4 Info_3.Font = Enum.Font.Roboto Info_3.Text = "i" Info_3.TextColor3 = Color3.fromRGB(255, 255, 255) Info_3.TextScaled = true Info_3.TextSize = 14.000 Info_3.TextWrapped = true UICorner_7.CornerRadius = UDim.new(0.0500000007, 0) UICorner_7.Parent = Info_3 UIAspectRatioConstraint_3.Parent = Info_3 UIAspectRatioConstraint_3.AspectRatio = 1.004 ContentShrunken.Name = "ContentShrunken" ContentShrunken.Parent = OuterFrame ContentShrunken.BackgroundColor3 = Color3.fromRGB(36, 36, 36) ContentShrunken.BorderColor3 = Color3.fromRGB(0, 0, 0) ContentShrunken.BorderSizePixel = 0 ContentShrunken.Position = UDim2.new(0.670155883, 0, 0.0024564031, 0) ContentShrunken.Size = UDim2.new(0.334465146, 0, 0.160182983, 0) ContentShrunken.Visible = false UICorner_8.CornerRadius = UDim.new(0.0500000007, 0) UICorner_8.Parent = ContentShrunken UIAspectRatioConstraint_4.Parent = OuterFrame UIAspectRatioConstraint_4.AspectRatio = 1.245 Close.Name = "Close" Close.Parent = OuterFrame Close.BackgroundColor3 = Color3.fromRGB(84, 34, 34) Close.BorderColor3 = Color3.fromRGB(0, 0, 0) Close.BorderSizePixel = 0 Close.Position = UDim2.new(0.893432915, 0, 0.0343249068, 0) Close.Size = UDim2.new(0.0790441632, 0, 0.125858128, 0) Close.ZIndex = 4 Close.Font = Enum.Font.Gotham Close.Text = "X" Close.TextColor3 = Color3.fromRGB(255, 255, 255) Close.TextScaled = true Close.TextSize = 14.000 Close.TextWrapped = true UICorner_9.CornerRadius = UDim.new(0.0500000007, 0) UICorner_9.Parent = Close UIAspectRatioConstraint_5.Parent = Close UIAspectRatioConstraint_5.AspectRatio = 1.004 Toggle.Name = "Toggle" Toggle.Parent = OuterFrame Toggle.BackgroundColor3 = Color3.fromRGB(65, 65, 65) Toggle.BorderColor3 = Color3.fromRGB(0, 0, 0) Toggle.BorderSizePixel = 0 Toggle.Position = UDim2.new(0.798575521, 0, 0.0343248919, 0) Toggle.Size = UDim2.new(0.0790441632, 0, 0.125858128, 0) Toggle.ZIndex = 4 Toggle.Font = Enum.Font.Roboto Toggle.Text = "-" Toggle.TextColor3 = Color3.fromRGB(255, 255, 255) Toggle.TextScaled = true Toggle.TextSize = 14.000 Toggle.TextWrapped = true UICorner_10.CornerRadius = UDim.new(0.0500000007, 0) UICorner_10.Parent = Toggle UIAspectRatioConstraint_6.Parent = Toggle UIAspectRatioConstraint_6.AspectRatio = 1.004 ToastFrame.Name = "ToastFrame" ToastFrame.Parent = EmptyTools ToastFrame.AnchorPoint = Vector2.new(0.5, 0.5) ToastFrame.BackgroundColor3 = Color3.fromRGB(36, 36, 36) ToastFrame.BorderColor3 = Color3.fromRGB(0, 0, 0) ToastFrame.BorderSizePixel = 0 ToastFrame.Position = UDim2.new(0.499656826, 0, 0.0427135676, 0) ToastFrame.Size = UDim2.new(0.427590936, 0, 0.0527638197, 0) ToastFrame.Visible = false ToastFrame.ZIndex = 99 UICorner_11.CornerRadius = UDim.new(0.400000006, 0) UICorner_11.Parent = ToastFrame Text.Name = "ToastText" Text.Parent = EmptyTools Text.AnchorPoint = Vector2.new(0.5, 0.5) Text.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Text.BackgroundTransparency = 1.000 Text.BorderColor3 = Color3.fromRGB(0, 0, 0) Text.BorderSizePixel = 0 Text.Position = UDim2.new(0.499313653, 0, 0.0427135676, 0) Text.Size = UDim2.new(0.0179999992, 0, 0.0529999994, 0) Text.Visible = false Text.Font = Enum.Font.Gotham Text.Text = "[nil]" Text.TextColor3 = Color3.fromRGB(255, 255, 255) Text.TextSize = 24.000 Text.ZIndex = 100 return EmptyTools end function CreateAlert(Title_Text, Body_Text, Image_ID, Button_Text, Sub_Button_Text, TextAlignment, Callback, SubCallback) local AlertScreen = Instance.new("ScreenGui") local Overlay = Instance.new("TextButton") local CallDialog = Instance.new("ImageButton") local AlertContents = Instance.new("ImageLabel") local Footer = Instance.new("ImageLabel") local layout = Instance.new("UIListLayout") local margin = Instance.new("UIPadding") local Buttons = Instance.new("ImageLabel") local _1 = Instance.new("ImageButton") local ButtonContent = Instance.new("Frame") local ButtonMiddleContent = Instance.new("Frame") local UIListLayout = Instance.new("UIListLayout") local Text = Instance.new("TextLabel") local layout_2 = Instance.new("UIListLayout") local margin_2 = Instance.new("UIPadding") local layout_3 = Instance.new("UIListLayout") local MiddleContent = Instance.new("ImageLabel") local layout_4 = Instance.new("UIListLayout") local Image = Instance.new("ImageLabel") local layout_5 = Instance.new("UIListLayout") local margin_3 = Instance.new("UIPadding") local Image_2 = Instance.new("ImageLabel") local margin_4 = Instance.new("UIPadding") local Content = Instance.new("ImageLabel") local BodyText = Instance.new("TextLabel") local layout_6 = Instance.new("UIListLayout") local margin_5 = Instance.new("UIPadding") local TitleContainer = Instance.new("ImageLabel") local TitleArea = Instance.new("ImageLabel") local layout_7 = Instance.new("UIListLayout") local Title = Instance.new("TextLabel") local Underline = Instance.new("Frame") local margin_6 = Instance.new("UIPadding") local layout_8 = Instance.new("UIListLayout") local margin_7 = Instance.new("UIPadding") local margin_8 = Instance.new("UIPadding") if not Button_Text then Button_Text = "Ok" end if not Title_Text then Title_Text = "Alert" end local Parent if RunService:IsStudio() then Parent = Player.PlayerGui else Parent = COREGUI.RobloxGui ProtectUI(AlertScreen) end AlertScreen.Name = "AlertScreen" AlertScreen.Parent = Parent AlertScreen.ZIndexBehavior = Enum.ZIndexBehavior.Sibling AlertScreen.IgnoreGuiInset = true AlertScreen.DisplayOrder = 150 Overlay.Name = "Overlay" Overlay.Parent = AlertScreen Overlay.BackgroundColor3 = Color3.fromRGB(0, 0, 0) Overlay.BackgroundTransparency = 0.500 Overlay.BorderSizePixel = 0 Overlay.Selectable = false Overlay.Size = UDim2.new(1, 0, 1, 0) Overlay.Visible = false Overlay.AutoButtonColor = false Overlay.Text = "" CallDialog.Name = "CallDialog" CallDialog.Parent = AlertScreen CallDialog.AnchorPoint = Vector2.new(0.5, 0.5) CallDialog.BackgroundColor3 = Color3.fromRGB(57, 59, 61) CallDialog.BackgroundTransparency = 1.000 CallDialog.BorderSizePixel = 0 CallDialog.ClipsDescendants = true CallDialog.Position = UDim2.new(0.5, 0, 0.5, 0) CallDialog.Selectable = false CallDialog.Size = UDim2.new(0, 400, 0, 182) CallDialog.AutoButtonColor = false CallDialog.Image = "rbxassetid://74861121457749" CallDialog.ImageColor3 = Color3.fromRGB(57, 59, 61) CallDialog.ImageRectOffset = Vector2.new(83, 494) CallDialog.ImageRectSize = Vector2.new(17, 17) CallDialog.ScaleType = Enum.ScaleType.Slice CallDialog.SliceCenter = Rect.new(8, 8, 9, 9) CallDialog.AutomaticSize = Enum.AutomaticSize.Y AlertContents.Name = "AlertContents" AlertContents.Parent = CallDialog AlertContents.BackgroundTransparency = 1.000 AlertContents.BorderSizePixel = 0 AlertContents.Size = UDim2.new(0, 400, 0, 182) Footer.Name = "Footer" Footer.Parent = AlertContents Footer.AutomaticSize = Enum.AutomaticSize.Y Footer.BackgroundTransparency = 1.000 Footer.LayoutOrder = 3 Footer.Size = UDim2.new(1, 0, 0, 36) layout.Name = "$layout" layout.Parent = Footer layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Padding = UDim.new(0, 12) margin.Name = "$margin" margin.Parent = Footer Buttons.Name = "Buttons" Buttons.Parent = Footer Buttons.AutomaticSize = Enum.AutomaticSize.Y Buttons.BackgroundTransparency = 1.000 Buttons.LayoutOrder = 3 Buttons.Size = UDim2.new(1, 0, 0, 36) _1.Name = "1" _1.Parent = Buttons _1.BackgroundTransparency = 1.000 _1.LayoutOrder = 1 _1.AutomaticSize = Enum.AutomaticSize.Y _1.Size = UDim2.new(0, 352, 0, 36) _1.AutoButtonColor = false _1.Image = "rbxassetid://74861121457749" _1.ImageRectOffset = Vector2.new(83, 494) _1.ImageRectSize = Vector2.new(17, 17) _1.ScaleType = Enum.ScaleType.Slice _1.SliceCenter = Rect.new(8, 8, 9, 9) ButtonContent.Name = "ButtonContent" ButtonContent.Parent = _1 ButtonContent.BackgroundTransparency = 1.000 ButtonContent.Size = UDim2.new(1, 0, 1, 0) ButtonMiddleContent.Name = "ButtonMiddleContent" ButtonMiddleContent.Parent = ButtonContent ButtonMiddleContent.BackgroundTransparency = 1.000 ButtonMiddleContent.Size = UDim2.new(1, 0, 1, 0) UIListLayout.Parent = ButtonMiddleContent UIListLayout.FillDirection = Enum.FillDirection.Horizontal UIListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder UIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center UIListLayout.Padding = UDim.new(0, 5) Text.Name = "Text" Text.Parent = ButtonMiddleContent Text.BackgroundTransparency = 1.000 Text.LayoutOrder = 2 Text.Size = UDim2.new(0, 23, 0, 22) Text.Font = Enum.Font.BuilderSansBold Text.Text = Button_Text Text.AutomaticSize = Enum.AutomaticSize.X Text.TextColor3 = Color3.fromRGB(57, 59, 61) Text.TextSize = 20.000 Text.TextWrapped = true layout_2.Name = "$layout" layout_2.Parent = Buttons layout_2.FillDirection = Enum.FillDirection.Horizontal layout_2.HorizontalAlignment = Enum.HorizontalAlignment.Center layout_2.SortOrder = Enum.SortOrder.LayoutOrder margin_2.Name = "$margin" margin_2.Parent = Buttons layout_3.Name = "$layout" layout_3.Parent = AlertContents layout_3.SortOrder = Enum.SortOrder.LayoutOrder layout_3.Padding = UDim.new(0, 24) MiddleContent.Name = "MiddleContent" MiddleContent.Parent = AlertContents MiddleContent.AutomaticSize = Enum.AutomaticSize.Y MiddleContent.BackgroundTransparency = 1.000 MiddleContent.LayoutOrder = 2 MiddleContent.Size = UDim2.new(1, 0, 0, 22) layout_4.Name = "$layout" layout_4.Parent = MiddleContent layout_4.SortOrder = Enum.SortOrder.LayoutOrder Image.Name = "Image" Image.Parent = MiddleContent Image.BackgroundTransparency = 1.000 Image.LayoutOrder = 2 Image.AutomaticSize = Enum.AutomaticSize.Y Image.Size = UDim2.new(1, 0, 0, 22) Image.Visible = false layout_5.Name = "$layout" layout_5.Parent = Image layout_5.SortOrder = Enum.SortOrder.LayoutOrder layout_5.Padding = UDim.new(0, 12) margin_3.Name = "$margin" margin_3.Parent = Image margin_3.PaddingBottom = UDim.new(0, 15) margin_3.PaddingLeft = UDim.new(0, 75) margin_4.Name = "$margin" margin_4.Parent = MiddleContent Content.Name = "Content" Content.Parent = MiddleContent Content.BackgroundTransparency = 1.000 Content.AutomaticSize = Enum.AutomaticSize.Y Content.LayoutOrder = 2 Content.Size = UDim2.new(1, 0, 0, 22) BodyText.Name = "BodyText" BodyText.Parent = Content BodyText.TextXAlignment = TextAlignment BodyText.BackgroundTransparency = 1.000 BodyText.LayoutOrder = 1 BodyText.Size = UDim2.new(1, 0, 0, 22) BodyText.AutomaticSize = Enum.AutomaticSize.Y BodyText.Font = Enum.Font.BuilderSans BodyText.Text = Body_Text BodyText.TextColor3 = Color3.fromRGB(189, 190, 190) BodyText.TextSize = 20.000 BodyText.TextWrapped = true layout_6.Name = "$layout" layout_6.Parent = Content layout_6.SortOrder = Enum.SortOrder.LayoutOrder layout_6.Padding = UDim.new(0, 12) margin_5.Name = "$margin" margin_5.Parent = Content TitleContainer.Name = "TitleContainer" TitleContainer.Parent = AlertContents TitleContainer.BackgroundTransparency = 1.000 TitleContainer.LayoutOrder = 1 TitleContainer.Size = UDim2.new(1, 0, 0, 52) TitleArea.Name = "TitleArea" TitleArea.Parent = TitleContainer TitleArea.BackgroundTransparency = 1.000 TitleArea.LayoutOrder = 1 TitleArea.Size = UDim2.new(1, 0, 0, 40) layout_7.Name = "$layout" layout_7.Parent = TitleArea layout_7.HorizontalAlignment = Enum.HorizontalAlignment.Center layout_7.SortOrder = Enum.SortOrder.LayoutOrder layout_7.Padding = UDim.new(0, 12) Title.Name = "Title" Title.Parent = TitleArea Title.BackgroundTransparency = 1.000 Title.LayoutOrder = 1 Title.AutomaticSize = Enum.AutomaticSize.X Title.Size = UDim2.new(0, 14, 0, 27) Title.Font = Enum.Font.BuilderSansBold Title.Text = Title_Text Title.TextColor3 = Color3.fromRGB(255, 255, 255) Title.TextSize = 25.000 Title.TextWrapped = true Underline.Name = "Underline" Underline.Parent = TitleArea Underline.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Underline.BackgroundTransparency = 0.800 Underline.BorderSizePixel = 0 Underline.LayoutOrder = 2 Underline.Size = UDim2.new(1, 0, 0, 1) margin_6.Name = "$margin" margin_6.Parent = TitleArea layout_8.Name = "$layout" layout_8.Parent = TitleContainer layout_8.HorizontalAlignment = Enum.HorizontalAlignment.Center layout_8.SortOrder = Enum.SortOrder.LayoutOrder layout_8.Padding = UDim.new(0, 8) margin_7.Name = "$margin" margin_7.Parent = TitleContainer margin_7.PaddingTop = UDim.new(0, 12) margin_8.Name = "$margin" margin_8.Parent = AlertContents margin_8.PaddingBottom = UDim.new(0, 24) margin_8.PaddingLeft = UDim.new(0, 24) margin_8.PaddingRight = UDim.new(0, 24) if Image_ID then Image.Visible = true Image_2.Name = "Image" Image_2.Parent = Image Image_2.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Image_2.BorderColor3 = Color3.fromRGB(0, 0, 0) Image_2.BorderSizePixel = 0 Image_2.BackgroundTransparency = 1 Image_2.Size = UDim2.new(0, 200, 0, 200) Image_2.Image = Image_ID Image_2.Visible = true end _1.MouseButton1Click:Connect(function() AlertScreen:Destroy() if Callback then Callback() end end) if Sub_Button_Text then local SubButton = Buttons:Clone() SubButton.Parent = Buttons.Parent local SubSubButton = SubButton:FindFirstChild("1") local SubSubBtnClone = SubSubButton:Clone() SubSubBtnClone:ClearAllChildren() SubSubBtnClone.Parent = SubSubButton local UICorner = Instance.new("UICorner", SubSubBtnClone) local Stroke = Instance.new("UIStroke", SubSubBtnClone) SubSubBtnClone.ImageTransparency = 1 Stroke.Color = Color3.fromRGB(139, 140, 143) Stroke.Thickness = 1.5 SubSubButton.ImageColor3 = Color3.fromRGB(57, 59, 61) SubSubButton.ButtonContent.ButtonMiddleContent.Text.Text = Sub_Button_Text SubSubButton.ButtonContent.ButtonMiddleContent.Text.TextColor3 = Color3.fromRGB(182, 182, 182) local function Hover() SubSubButton.MouseEnter:Connect(function() SubSubButton.ImageColor3 = Color3.fromRGB(43, 46, 47) end) SubSubButton.MouseLeave:Connect(function() SubSubButton.ImageColor3 = Color3.fromRGB(57, 59, 61) end) end coroutine.wrap(Hover)() SubSubBtnClone.MouseButton1Click:Connect(function() AlertScreen:Destroy() if SubCallback then SubCallback() end end) end local function Hover() _1.MouseEnter:Connect(function() _1.ImageColor3 = Color3.fromRGB(172, 172, 172) end) _1.MouseLeave:Connect(function() _1.ImageColor3 = Color3.fromRGB(255,255,255) end) end coroutine.wrap(Hover)() --for i,v in pairs(AlertScreen:GetDescendants()) do -- if hasProperty(v, "ZIndex") then -- v.ZIndex = 100 -- end --end return AlertScreen end local interruptCurrentToast = false local function ShowToast(msg, t) ToastText.Text = msg ToastText.Size = UDim2.new(0, ToastText.TextBounds.X, 0, ToastText.TextBounds.Y) local fs = GetFrameSize() local isize = UDim2.new(0, fs.X.Offset * 0.15, 0, fs.Y.Offset) ToastFrame.Size = isize ToastText.TextTransparency = 1 ToastFrame.BackgroundTransparency = 1 ToastText.Visible = true ToastFrame.Visible = true local sizeTween = TweenService:Create(ToastFrame, TweenInfo.new(0.5, Enum.EasingStyle.Back), {Size = fs}) local fadeInText = TweenService:Create(ToastText, TweenInfo.new(0.55), {TextTransparency = 0}) local fadeInFrame = TweenService:Create(ToastFrame, TweenInfo.new(0.5), {BackgroundTransparency = 0}) sizeTween:Play() fadeInFrame:Play() wait(0.1) fadeInText:Play() fadeInText.Completed:Wait() local elapsed = 0 local interval = 0.1 while elapsed < t do if interruptCurrentToast then break end wait(interval) elapsed = elapsed + interval end interruptCurrentToast = false local sizeTweenOut = TweenService:Create(ToastFrame, TweenInfo.new(0.6, Enum.EasingStyle.Back), {Size = isize}) local fadeOutText = TweenService:Create(ToastText, TweenInfo.new(0.5), {TextTransparency = 1}) local fadeOutFrame = TweenService:Create(ToastFrame, TweenInfo.new(0.5), {BackgroundTransparency = 1}) fadeOutText:Play() wait(0.15) fadeOutFrame:Play() wait(0.1) sizeTweenOut:Play() fadeOutText.Completed:Wait() ToastText.Visible = false ToastText.Text = "[nil]" ToastFrame.Visible = false end local function ToastQueueRunner() if IsShowing then return end IsShowing = true while #ToastQueue > 0 do local current = table.remove(ToastQueue, 1) ShowToast(current.msg, current.t) end IsShowing = false end local function Toast(msg, t) if not t then t = 2 end if not AlertsEnabled then return end if not MainUI or not ToastFrame or not ToastText then return end for i, toast in ipairs(ToastQueue) do if toast.msg == msg then return end end if ToastText.Text == msg then return end if IsShowing then interruptCurrentToast = true end table.insert(ToastQueue, {msg = msg, t = t}) ToastQueueRunner() end FadeOutTween = nil FadeOutTween2 = nil FadeOutTween3 = nil local function TipView(LabelObject, Title, Text) local function FadeIn() if not TipsEnabled then InfoFrame.Visible = false return end InfoFrame.Visible = true InfoFrame.BackgroundTransparency = 1 InfoFrame.Title.TextTransparency = 1 InfoFrame.Info.TextTransparency = 1 InfoFrame.Title.Text = Title InfoFrame.Info.Text = Text TweenService:Create(InfoFrame, FadeTweenInfo, {BackgroundTransparency = 0}):Play() for _, Label in pairs(InfoFrame:GetChildren()) do if Label:IsA("TextLabel") then TweenService:Create(Label, FadeTweenInfo, {TextTransparency = 0}):Play() end end end local function FadeOut() TweenService:Create(InfoFrame, FadeTweenInfo, {BackgroundTransparency = 1}):Play() TweenService:Create(InfoFrame.Title, FadeTweenInfo, {TextTransparency = 1}):Play() TweenService:Create(InfoFrame.Info, FadeTweenInfo, {TextTransparency = 1}):Play() end LabelObject.MouseEnter:Connect(FadeIn) LabelObject.MouseLeave:Connect(FadeOut) end function CreateCommand(TitleText, Info, InputText, EnumTable, FilterTag, CallbackRun, CallbackStop) local Command = Instance.new("Frame") local Title = Instance.new("TextLabel") local Input = Instance.new("TextBox") local UICorner = Instance.new("UICorner") local Run = Instance.new("ImageButton") local UICorner_2 = Instance.new("UICorner") local UIAspectRatioConstraint = Instance.new("UIAspectRatioConstraint") local Stop = Instance.new("ImageButton") local UICorner_3 = Instance.new("UICorner") local UIAspectRatioConstraint_2 = Instance.new("UIAspectRatioConstraint") local EnumButton = Instance.new("TextButton") local UITextSizeConstraint = Instance.new("UITextSizeConstraint") local UICorner_4 = Instance.new("UICorner") if not table.find(CommandCategories, FilterTag) then table.insert(CommandCategories, FilterTag) end Command:SetAttribute("Category", FilterTag) local isThirdParty = false if InputText == "THIRDPARTY" then isThirdParty = true InputText = nil end local SelectedEnum if EnumTable ~= nil then SelectedEnum = EnumTable[1] end local function SetSelectedEnum(NewValue) if EnumTable == nil then return end if NewValue == nil then SelectedEnum = EnumTable[1] EnumButton.Text = SelectedEnum return end local direct = table.find(EnumTable, NewValue) if direct then SelectedEnum = EnumTable[direct] EnumButton.Text = SelectedEnum return end local lowered = tostring(NewValue):lower() for _, v in ipairs(EnumTable) do if tostring(v):lower() == lowered then SelectedEnum = v EnumButton.Text = SelectedEnum return end end end Command.Name = TitleText Command.BackgroundColor3 = Color3.fromRGB(85, 85, 85) Command.BorderColor3 = Color3.fromRGB(0, 0, 0) Command.BorderSizePixel = 0 Command.Position = UDim2.new(0, 0, 1.09406805e-07, 0) Command.Size = UDim2.new(1, 0, 0.0219999999, 0) Title.Name = "Title" Title.Parent = Command Title.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Title.BackgroundTransparency = 1.000 Title.BorderColor3 = Color3.fromRGB(0, 0, 0) Title.BorderSizePixel = 0 Title.Position = UDim2.new(0.0238096155, 0, 0.0882355049, 0) Title.Size = UDim2.new(0.323765904, 0, 0.823529363, 0) Title.Font = Enum.Font.Gotham Title.Text = TitleText Title.TextColor3 = Color3.fromRGB(255, 255, 255) Title.TextScaled = true Title.TextSize = 14.000 Title.TextWrapped = true Title.TextXAlignment = Enum.TextXAlignment.Left TipView(Title, TitleText, Info) Input.Position = UDim2.new(0.549000025, 0, 0.074000001, 0) if InputText ~= nil then Input.Name = "Input" Input.Parent = Command Input.BackgroundColor3 = Color3.fromRGB(50, 50, 50) Input.BorderColor3 = Color3.fromRGB(0, 0, 0) Input.BorderSizePixel = 0 Input.Size = UDim2.new(0.263412803, 0, 0.805496335, 0) Input.ClearTextOnFocus = false Input.Font = Enum.Font.Gotham Input.PlaceholderColor3 = Color3.fromRGB(126, 126, 126) Input.PlaceholderText = InputText Input.Text = "" Input.TextColor3 = Color3.fromRGB(255, 255, 255) Input.TextScaled = true Input.TextSize = 25.000 Input.TextWrapped = true end UICorner.CornerRadius = UDim.new(0.25, 0) UICorner.Parent = Input Run.Name = "Run" Run.Parent = Command Run.BackgroundColor3 = Color3.fromRGB(50, 50, 50) Run.BorderColor3 = Color3.fromRGB(0, 0, 0) Run.BorderSizePixel = 0 Run.Position = UDim2.new(0.907579541, 0, 0.0597809143, 0) Run.Size = UDim2.new(0.0637670681, 0, 0.850548923, 0) Run.Image = "http://www.roblox.com/asset/?id=18912253064" Run.ImageColor3 = Color3.fromRGB(106, 189, 102) Run.MouseButton1Click:Connect(function() --PlaySoundFromID(ClickSoundID, {Volume = 0.4}) if InputText ~= nil then if SelectedEnum then CallbackRun(Input.Text, SelectedEnum) else CallbackRun(Input.Text) end elseif SelectedEnum then CallbackRun(SelectedEnum) else CallbackRun() end end) if isThirdParty or (EnumTable == nil and InputText == nil) then Title.Size = UDim2.new(0.623765904, 0, 0.823529363, 0) end if isThirdParty then Command.BackgroundColor3 = Color3.fromRGB(79, 55, 55) Run.ImageColor3 = Color3.fromRGB(255, 129, 129) Title.Text = Title.Text .. " [Third-Party]" end UICorner_2.CornerRadius = UDim.new(0.189999998, 0) UICorner_2.Parent = Run UIAspectRatioConstraint.Parent = Run if CallbackStop ~= nil then Stop.Name = "Stop" Stop.Parent = Command Stop.BackgroundColor3 = Color3.fromRGB(50, 50, 50) Stop.BorderColor3 = Color3.fromRGB(0, 0, 0) Stop.BorderSizePixel = 0 Stop.Position = UDim2.new(0.829146743, 0, 0.0597800016, 0) Stop.Size = UDim2.new(0.0637670681, 0, 0.880439401, 0) Stop.Image = "http://www.roblox.com/asset/?id=18912262996" Stop.ImageColor3 = Color3.fromRGB(180, 92, 92) Stop.MouseButton1Click:Connect(function() --PlaySoundFromID(ClickSoundID, {Volume = 0.4}) CallbackStop() end) end UICorner_3.CornerRadius = UDim.new(0.189999998, 0) UICorner_3.Parent = Stop UIAspectRatioConstraint_2.Parent = Stop if EnumTable ~= nil then EnumButton.Name = "Enum" EnumButton.Parent = Command EnumButton.BackgroundColor3 = Color3.fromRGB(50, 50, 50) EnumButton.BorderColor3 = Color3.fromRGB(0, 0, 0) EnumButton.BorderSizePixel = 0 EnumButton.Position = UDim2.new(0.271358907, 0, 0.0963262469, 0) EnumButton.Size = UDim2.new(0.263000011, 0, 0.805000007, 0) EnumButton.Font = Enum.Font.Gotham EnumButton.Text = EnumTable[1] EnumButton.TextColor3 = Color3.fromRGB(255, 255, 255) EnumButton.TextScaled = true EnumButton.TextSize = 25.000 EnumButton.TextWrapped = true if InputText == nil then EnumButton.Position = Input.Position end EnumButton.MouseButton1Click:Connect(function() local CurrentIndex = table.find(EnumTable, SelectedEnum) if CurrentIndex == #EnumTable then SetSelectedEnum(EnumTable[1]) else SetSelectedEnum(EnumTable[CurrentIndex + 1]) end end) EnumButton.MouseButton2Click:Connect(function() local CurrentIndex = table.find(EnumTable, SelectedEnum) if CurrentIndex == 1 then SetSelectedEnum(EnumTable[#EnumTable]) else SetSelectedEnum(EnumTable[CurrentIndex - 1]) end end) end UITextSizeConstraint.Parent = EnumButton UITextSizeConstraint.MaxTextSize = 25 UICorner_4.CornerRadius = UDim.new(0.189999998, 0) UICorner_4.Parent = EnumButton table.insert(CommandFrames, Command) CommandRegistry[NormalizeCommandName(TitleText)] = { Frame = Command, Title = TitleText, Category = FilterTag, HasInput = InputText ~= nil, EnumTable = EnumTable, EnumButton = EnumTable ~= nil and EnumButton or nil, SetEnum = EnumTable ~= nil and SetSelectedEnum or nil, InputBox = InputText ~= nil and Input or nil, SetInput = InputText ~= nil and function(Value) Input.Text = tostring(Value or "") end or nil, Run = CallbackRun, Stop = CallbackStop, } Command.Parent = Contents:WaitForChild("Commands") if isThirdParty then return Command end end function RemoveCommand(CommandFrame) table.remove(CommandFrames, table.find(CommandFrames, CommandFrame)) task.wait() CommandFrame:Destroy() end function SetOptionChecked(OptionButton, Value) OptionButton.Text = Value and "✓" or "" end function SetKeyMode(KeyButton, Value) if Value == "Enabled" then KeyButton.Text = "" KeyButton.BackgroundColor3 = Color3.fromRGB(117, 117, 117) else KeyButton.BackgroundColor3 = Color3.fromRGB(65, 65, 65) KeyButton.Text = UserInputService:GetStringForKeyCode(Value) end end function CreateSettingsOption(TitleText, Info, Type, Variable, CallbackClicked) local SettingsOption = Instance.new("Frame") local Title = Instance.new("TextLabel") local UICorner = Instance.new("UICorner") local Title_2 = Instance.new("TextLabel") local Check = Instance.new("TextButton") local UICorner_2 = Instance.new("UICorner") local UIAspectRatioConstraint = Instance.new("UIAspectRatioConstraint") --Properties: SettingsOption.Name = "SettingsOption" SettingsOption.BackgroundColor3 = Color3.fromRGB(4, 4, 4) SettingsOption.BorderColor3 = Color3.fromRGB(0, 0, 0) SettingsOption.BorderSizePixel = 0 SettingsOption.Position = UDim2.new(1.50091054e-07, 0, 2.54941881e-07, 0) SettingsOption.Size = UDim2.new(0.936999857, 0, 0.0461164564, 0) SettingsOption.Name = TitleText Title.Name = "Title" Title.Parent = SettingsOption Title.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Title.BackgroundTransparency = 1.000 Title.BorderColor3 = Color3.fromRGB(0, 0, 0) Title.BorderSizePixel = 0 Title.Position = UDim2.new(0.0238095392, 0, 0.0882362947, 0) Title.Size = UDim2.new(0.562692106, 0, 0.350000024, 0) Title.Font = Enum.Font.GothamBold Title.Text = TitleText Title.TextColor3 = Color3.fromRGB(255, 255, 255) Title.TextScaled = true Title.TextSize = 14.000 Title.TextWrapped = true Title.TextXAlignment = Enum.TextXAlignment.Left UICorner.Parent = SettingsOption Title_2.Name = "Info" Title_2.Parent = SettingsOption Title_2.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Title_2.BackgroundTransparency = 1.000 Title_2.BorderColor3 = Color3.fromRGB(0, 0, 0) Title_2.BorderSizePixel = 0 Title_2.Position = UDim2.new(0.0240000002, 0, 0.43599999, 0) Title_2.Size = UDim2.new(0.657068729, 0, 0.534385622, 0) Title_2.Font = Enum.Font.Gotham Title_2.Text = Info Title_2.TextColor3 = Color3.fromRGB(255, 255, 255) Title_2.TextScaled = true Title_2.TextSize = 14.000 Title_2.TextWrapped = true Title_2.TextXAlignment = Enum.TextXAlignment.Left Check.Name = "Check" Check.Parent = SettingsOption Check.BackgroundColor3 = Color3.fromRGB(65, 65, 65) Check.BorderColor3 = Color3.fromRGB(0, 0, 0) Check.BorderSizePixel = 0 Check.Position = UDim2.new(0.842000008, 0, 0.0930000022, 0) Check.Size = UDim2.new(0.123999998, 0, 0.806999981, 0) Check.Font = Enum.Font.SourceSans Check.TextColor3 = Color3.fromRGB(255, 255, 255) Check.TextScaled = true Check.Text = "" Check.TextSize = 14.000 Check.TextWrapped = true if Type == "Boolean" then if Variable == true then Check.Text = "✓" else Check.Text = "" end elseif Type == "Key" then Check.Text = UserInputService:GetStringForKeyCode(Variable) end Check.MouseButton1Click:Connect(function() CallbackClicked(Check) end) UICorner_2.CornerRadius = UDim.new(0.189999998, 0) UICorner_2.Parent = Check UIAspectRatioConstraint.Parent = Check table.insert(SettingsFrames, SettingsOption) SettingsOption.Parent = Contents:WaitForChild("SettingsFrame") end local currentlyFocusedMarker = nil local function tweenMarker(marker, targetOffset) --local tween = TweenService:Create(marker, TweenInfo.new(0.2, Enum.EasingStyle.Quad), {StudsOffset = targetOffset}) --tween:Play() end local function tweenStroke(stroke, targetThickness) if stroke then local tween = TweenService:Create(stroke, TweenInfo.new(0.2, Enum.EasingStyle.Quad), {Thickness = targetThickness}) tween:Play() end end local function isMouseOver(button) local mousePos = UserInputService:GetMouseLocation() local pos = button.AbsolutePosition local size = button.AbsoluteSize return mousePos.X >= pos.X and mousePos.X <= pos.X + size.X and mousePos.Y >= pos.Y and mousePos.Y <= pos.Y + size.Y end -- Freecam Setup (Long) local pi = math.pi local abs = math.abs local clamp = math.clamp local exp = math.exp local rad = math.rad local sign = math.sign local sqrt = math.sqrt local tan = math.tan local ContextActionService = game:GetService("ContextActionService") local RunService = game:GetService("RunService") local StarterGui = game:GetService("StarterGui") local UserInputService = game:GetService("UserInputService") local Workspace = game:GetService("Workspace") local Settings = UserSettings() local GameSettings = Settings.GameSettings local LocalPlayer = Players.LocalPlayer if not LocalPlayer then Players:GetPropertyChangedSignal("LocalPlayer"):Wait() LocalPlayer = Players.LocalPlayer end local Camera = Workspace.CurrentCamera Workspace:GetPropertyChangedSignal("CurrentCamera"):Connect(function() local newCamera = Workspace.CurrentCamera if newCamera then Camera = newCamera end end) local FFlagUserExitFreecamBreaksWithShiftlock do local success, result = pcall(function() return UserSettings():IsUserFeatureEnabled("UserExitFreecamBreaksWithShiftlock") end) FFlagUserExitFreecamBreaksWithShiftlock = success and result end ------------------------------------------------------------------------ local INPUT_PRIORITY = Enum.ContextActionPriority.High.Value local NAV_GAIN = Vector3.new(1, 1, 1)*64 local PAN_GAIN = Vector2.new(0.75, 1)*8 local FOV_GAIN = 300 local PITCH_LIMIT = rad(90) local VEL_STIFFNESS = 1.5 local PAN_STIFFNESS = 1.0 local FOV_STIFFNESS = 4.0 ------------------------------------------------------------------------ local Spring = {} do Spring.__index = Spring function Spring.new(freq, pos) local self = setmetatable({}, Spring) self.f = freq self.p = pos self.v = pos*0 return self end function Spring:Update(dt, goal) local f = self.f*2*pi local p0 = self.p local v0 = self.v local offset = goal - p0 local decay = exp(-f*dt) local p1 = goal + (v0*dt - offset*(f*dt + 1))*decay local v1 = (f*dt*(offset*f - v0) + v0)*decay self.p = p1 self.v = v1 return p1 end function Spring:Reset(pos) self.p = pos self.v = pos*0 end end ------------------------------------------------------------------------ cameraPos = Vector3.new() cameraRot = Vector2.new() cameraFov = 0 velSpring = Spring.new(VEL_STIFFNESS, Vector3.new()) panSpring = Spring.new(PAN_STIFFNESS, Vector2.new()) fovSpring = Spring.new(FOV_STIFFNESS, 0) ------------------------------------------------------------------------ local Input = {} do local thumbstickCurve do local K_CURVATURE = 2.0 local K_DEADZONE = 0.15 local function fCurve(x) return (exp(K_CURVATURE*x) - 1)/(exp(K_CURVATURE) - 1) end local function fDeadzone(x) return fCurve((x - K_DEADZONE)/(1 - K_DEADZONE)) end function thumbstickCurve(x) return sign(x)*clamp(fDeadzone(abs(x)), 0, 1) end end local gamepad = { ButtonX = 0, ButtonY = 0, DPadDown = 0, DPadUp = 0, ButtonL2 = 0, ButtonR2 = 0, Thumbstick1 = Vector2.new(), Thumbstick2 = Vector2.new(), } local keyboard = { W = 0, A = 0, S = 0, D = 0, E = 0, Q = 0, U = 0, H = 0, J = 0, K = 0, I = 0, Y = 0, Up = 0, Down = 0, LeftShift = 0, RightShift = 0, } local mouse = { Delta = Vector2.new(), MouseWheel = 0, } local NAV_GAMEPAD_SPEED = Vector3.new(1, 1, 1) local NAV_KEYBOARD_SPEED = Vector3.new(1, 1, 1) local PAN_MOUSE_SPEED = Vector2.new(1, 1)*(pi/64) local PAN_GAMEPAD_SPEED = Vector2.new(1, 1)*(pi/8) local FOV_WHEEL_SPEED = 1.0 local FOV_GAMEPAD_SPEED = 0.25 local NAV_ADJ_SPEED = 0.75 local NAV_SHIFT_MUL = 0.25 local navSpeed = 1 function Input.Vel(dt) navSpeed = clamp(navSpeed + dt*(keyboard.Up - keyboard.Down)*NAV_ADJ_SPEED, 0.01, 4) local kGamepad = Vector3.new( thumbstickCurve(gamepad.Thumbstick1.X), thumbstickCurve(gamepad.ButtonR2) - thumbstickCurve(gamepad.ButtonL2), thumbstickCurve(-gamepad.Thumbstick1.Y) )*NAV_GAMEPAD_SPEED local kKeyboard = Vector3.new( keyboard.D - keyboard.A + keyboard.K - keyboard.H, keyboard.E - keyboard.Q + keyboard.I - keyboard.Y, keyboard.S - keyboard.W + keyboard.J - keyboard.U )*NAV_KEYBOARD_SPEED local shift = UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) or UserInputService:IsKeyDown(Enum.KeyCode.RightShift) return (kGamepad + kKeyboard)*(navSpeed*(shift and NAV_SHIFT_MUL or 1)) end function Input.Pan(dt) local kGamepad = Vector2.new( thumbstickCurve(gamepad.Thumbstick2.Y), thumbstickCurve(-gamepad.Thumbstick2.X) )*PAN_GAMEPAD_SPEED local kMouse = mouse.Delta*PAN_MOUSE_SPEED mouse.Delta = Vector2.new() return kGamepad + kMouse end function Input.Fov(dt) local kGamepad = (gamepad.ButtonX - gamepad.ButtonY)*FOV_GAMEPAD_SPEED local kMouse = mouse.MouseWheel*FOV_WHEEL_SPEED mouse.MouseWheel = 0 return kGamepad + kMouse end do local function Keypress(action, state, input) keyboard[input.KeyCode.Name] = state == Enum.UserInputState.Begin and 1 or 0 return Enum.ContextActionResult.Sink end local function GpButton(action, state, input) gamepad[input.KeyCode.Name] = state == Enum.UserInputState.Begin and 1 or 0 return Enum.ContextActionResult.Sink end local function MousePan(action, state, input) local delta = input.Delta mouse.Delta = Vector2.new(-delta.y, -delta.x) return Enum.ContextActionResult.Sink end local function Thumb(action, state, input) gamepad[input.KeyCode.Name] = input.Position return Enum.ContextActionResult.Sink end local function Trigger(action, state, input) gamepad[input.KeyCode.Name] = input.Position.z return Enum.ContextActionResult.Sink end local function MouseWheel(action, state, input) mouse[input.UserInputType.Name] = -input.Position.z return Enum.ContextActionResult.Sink end local function Zero(t) for k, v in pairs(t) do t[k] = v*0 end end function Input.StartCapture() ContextActionService:BindActionAtPriority("FreecamKeyboard", Keypress, false, INPUT_PRIORITY, Enum.KeyCode.W, Enum.KeyCode.U, Enum.KeyCode.A, Enum.KeyCode.H, Enum.KeyCode.S, Enum.KeyCode.J, Enum.KeyCode.D, Enum.KeyCode.K, Enum.KeyCode.E, Enum.KeyCode.I, Enum.KeyCode.Q, Enum.KeyCode.Y, Enum.KeyCode.Up, Enum.KeyCode.Down ) ContextActionService:BindActionAtPriority("FreecamMousePan", MousePan, false, INPUT_PRIORITY, Enum.UserInputType.MouseMovement) ContextActionService:BindActionAtPriority("FreecamMouseWheel", MouseWheel, false, INPUT_PRIORITY, Enum.UserInputType.MouseWheel) ContextActionService:BindActionAtPriority("FreecamGamepadButton", GpButton, false, INPUT_PRIORITY, Enum.KeyCode.ButtonX, Enum.KeyCode.ButtonY, Enum.KeyCode.DPadDown, Enum.KeyCode.DPadUp) ContextActionService:BindActionAtPriority("FreecamGamepadTrigger", Trigger, false, INPUT_PRIORITY, Enum.KeyCode.ButtonR2, Enum.KeyCode.ButtonL2) ContextActionService:BindActionAtPriority("FreecamGamepadThumbstick", Thumb, false, INPUT_PRIORITY, Enum.KeyCode.Thumbstick1, Enum.KeyCode.Thumbstick2) end function Input.StopCapture() navSpeed = 1 Zero(gamepad) Zero(keyboard) Zero(mouse) ContextActionService:UnbindAction("FreecamKeyboard") ContextActionService:UnbindAction("FreecamMousePan") ContextActionService:UnbindAction("FreecamMouseWheel") ContextActionService:UnbindAction("FreecamGamepadButton") ContextActionService:UnbindAction("FreecamGamepadTrigger") ContextActionService:UnbindAction("FreecamGamepadThumbstick") end end end ------------------------------------------------------------------------ function GetFocusDistance(cameraFrame) local znear = 0.1 local viewport = Camera.ViewportSize local projy = 2*tan(cameraFov/2) local projx = viewport.x/viewport.y*projy local fx = cameraFrame.rightVector local fy = cameraFrame.upVector local fz = cameraFrame.lookVector local minVect = Vector3.new() local minDist = 512 for x = 0, 1, 0.5 do for y = 0, 1, 0.5 do local cx = (x - 0.5)*projx local cy = (y - 0.5)*projy local offset = fx*cx - fy*cy + fz local origin = cameraFrame.p + offset*znear local _, hit = Workspace:FindPartOnRay(Ray.new(origin, offset.unit*minDist)) local dist = (hit - origin).magnitude if minDist > dist then minDist = dist minVect = offset.unit end end end return fz:Dot(minVect)*minDist end function StepFreecam(dt) local vel = velSpring:Update(dt, Input.Vel(dt)) local pan = panSpring:Update(dt, Input.Pan(dt)) local fov = fovSpring:Update(dt, Input.Fov(dt)) local zoomFactor = sqrt(tan(rad(70/2))/tan(rad(cameraFov/2))) cameraFov = clamp(cameraFov + fov*FOV_GAIN*dt, 1, 120) cameraRot = cameraRot + pan*PAN_GAIN*(dt*zoomFactor) cameraRot = Vector2.new(clamp(cameraRot.x, -PITCH_LIMIT, PITCH_LIMIT), cameraRot.y) local cameraCFrame = CFrame.new(cameraPos)*CFrame.fromOrientation(cameraRot.x, cameraRot.y, 0)*CFrame.new(vel*NAV_GAIN*dt) cameraPos = cameraCFrame.p Camera.CFrame = cameraCFrame Camera.Focus = cameraCFrame*CFrame.new(0, 0, -GetFocusDistance(cameraCFrame)) Camera.FieldOfView = cameraFov end ------------------------------------------------------------------------ function StartFreecam() local cameraCFrame = Camera.CFrame local pitch, yaw, roll = cameraCFrame:ToEulerAnglesYXZ() cameraPos = cameraCFrame.p cameraRot = Vector2.new(pitch, yaw) cameraFov = Camera.FieldOfView velSpring:Reset(Vector3.new()) panSpring:Reset(Vector2.new()) fovSpring:Reset(0) Input.StartCapture() RunService:BindToRenderStep("Freecam", Enum.RenderPriority.Camera.Value, StepFreecam) end function StopFreecam() Input.StopCapture() RunService:UnbindFromRenderStep("Freecam") end -- Misc Methods function GetCharacter(Target) local Character = Target.Character if not Character then Target.CharacterAdded:Wait() Character = Target.Character return Character end return Character end function GetRoot(Target) local Character = GetCharacter(Target) if Character then local Root = Character:FindFirstChild("HumanoidRootPart") return Root end end function GetHumanoid(Target) local Character = GetCharacter(Target) if Character then local Humanoid = Character:FindFirstChildOfClass("Humanoid") return Humanoid end end function GetPlayerFromNameSnippet(Snippet) if Snippet == "" then return end Snippet = string.lower(Snippet) for _,User in pairs(Players:GetPlayers()) do if User == Player then continue end local LoweredName = string.lower(User.Name) local LoweredDisplay = string.lower(User.DisplayName) if string.sub(LoweredName, 1, #Snippet) == Snippet or string.sub(LoweredDisplay, 1, #Snippet) == Snippet then return User end end end function CreateTeleportIndicator() local Indicator = Instance.new("Part") Indicator.Shape = Enum.PartType.Cylinder Indicator.Anchored = true Indicator.CanCollide = true Indicator.Color = Color3.fromRGB(0,255,0) Indicator.Material = Enum.Material.Neon Indicator.Transparency = 0.8 Indicator.Size = Vector3.new(0.097, 4.413, 2.379) Indicator.Name = "TP_Indicator" Indicator.Orientation = Vector3.new(0,90,90) local Model = Instance.new("Model", workspace) Indicator.Position = Model.WorldPivot.Position Indicator.Parent = Model return Model end function CreateMarker(TargetPlayer, Type) local Marker = Instance.new("BillboardGui") local Frame = Instance.new("Frame") local User = Instance.new("TextLabel") local UICorner = Instance.new("UICorner") local Display = Instance.new("TextLabel") local Button = Instance.new("ImageButton") local Stroke = Instance.new("UIStroke") --Properties: Marker.Name = TargetPlayer.Name Marker.ZIndexBehavior = Enum.ZIndexBehavior.Sibling Marker.Active = true Marker.Adornee = GetRoot(TargetPlayer) Marker.AlwaysOnTop = true Marker.LightInfluence = 1.000 Marker.Size = UDim2.new(0, 150, 0, 60) Frame.Parent = Marker Frame.AnchorPoint = Vector2.new(0.5, 0.5) Frame.BackgroundColor3 = Color3.fromRGB(50, 50, 50) Frame.BackgroundTransparency = 0.2 Frame.BorderColor3 = Color3.fromRGB(0, 0, 0) Frame.BorderSizePixel = 0 Frame.Position = UDim2.new(0.5, 0, 0.5, 0) Frame.Size = UDim2.new(0.800000012, 0, 0.600000024, 0) User.Name = "User" User.Parent = Frame User.BackgroundColor3 = Color3.fromRGB(50, 50, 50) User.BackgroundTransparency = 1.000 User.BorderColor3 = Color3.fromRGB(0, 0, 0) User.BorderSizePixel = 0 User.Size = UDim2.new(1, 0, 0.5, 0) User.Font = Enum.Font.GothamBold User.Text = TargetPlayer.DisplayName User.TextColor3 = Color3.fromRGB(255, 255, 255) User.TextScaled = true User.TextSize = 14.000 User.TextWrapped = true UICorner.Parent = Frame Display.Name = "Display" Display.Parent = Frame Display.BackgroundColor3 = Color3.fromRGB(50, 50, 50) Display.BackgroundTransparency = 1.000 Display.BorderColor3 = Color3.fromRGB(0, 0, 0) Display.BorderSizePixel = 0 Display.Position = UDim2.new(0, 0, 0.5, 0) Display.Size = UDim2.new(1, 0, 0.449999988, 0) Display.Font = Enum.Font.Gotham Display.Text = "@" .. TargetPlayer.Name Display.TextColor3 = Color3.fromRGB(255, 255, 255) Display.TextScaled = true Display.TextSize = 14.000 Display.TextWrapped = true Button.Name = "Button" Button.Parent = Marker Button.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Button.BackgroundTransparency = 1.000 Button.BorderColor3 = Color3.fromRGB(0, 0, 0) Button.BorderSizePixel = 0 Button.Size = UDim2.new(1, 0, 1, 0) Button.ZIndex = 3 Button.Image = "http://www.roblox.com/asset/?id=1415236683" Stroke.Name = "Select" Stroke.Color = Color3.fromRGB(255,255,255) Stroke.Thickness = 0 Stroke.Parent = Frame if Player:IsFriendsWith(TargetPlayer.UserId) then Frame.BackgroundColor3 = Color3.fromRGB(71, 113, 177) end local defaultOffset = Marker.StudsOffset local hoverOffset = defaultOffset + Vector3.new(0, 5, 0) if Type == "Teleport" then Button.MouseEnter:Connect(function() Stroke.Thickness = 0 TweenService:Create(Stroke, FadeTweenInfo, {Thickness = 2}):Play() end) Button.MouseLeave:Connect(function() TweenService:Create(Stroke, FadeTweenInfo, {Thickness = 0}):Play() end) else Button.Visible = false end return Marker, Button end function TogglePlayerCharacter(Target, Value) local Character = GetCharacter(Target) if not Character then return end local function GetNeckMotor() local Head = Character:FindFirstChild("Head") if Head then local Neck = Head:FindFirstChild("Neck") if Neck and Neck:IsA("Motor6D") then return Neck end end local Torso = Character:FindFirstChild("UpperTorso") or Character:FindFirstChild("Torso") if Torso then local Neck = Torso:FindFirstChild("Neck") if Neck and Neck:IsA("Motor6D") then return Neck end end local Neck = Character:FindFirstChild("Neck", true) if Neck and Neck:IsA("Motor6D") then return Neck end end local NeckMotor = GetNeckMotor() if Value then for _,Object in pairs(Character:GetDescendants()) do if not Object then continue end if not Object:IsA("BasePart") and not Object:IsA("Decal") then continue end if Object:GetAttribute("OGTransparency") then Object.Transparency = Object:GetAttribute("OGTransparency") end end if NeckMotor then local OldPos = NeckMotor:FindFirstChild("OldPos") if OldPos and OldPos:IsA("CFrameValue") then NeckMotor.C1 = OldPos.Value OldPos:Destroy() end end else for _,Object in pairs(Character:GetDescendants()) do if not Object then continue end if not Object:IsA("BasePart") and not Object:IsA("Decal") then continue end if Object.Transparency ~= 1 then Object:SetAttribute("OGTransparency", Object.Transparency) Object.Transparency = 1 end end if NeckMotor then local OldPos = NeckMotor:FindFirstChild("OldPos") if not OldPos then OldPos = Instance.new("CFrameValue") OldPos.Name = "OldPos" OldPos.Value = NeckMotor.C1 OldPos.Parent = NeckMotor NeckMotor.C1 += Vector3.new(0, -1935, 0) end end end end function EnablePhaseForInvisibleParts() for _, obj in pairs(workspace:GetDescendants()) do if obj:IsA("BasePart") and obj.CanCollide and obj.Transparency >= 1 then if obj:GetAttribute("OriginalTransparency") == nil then obj:SetAttribute("OriginalTransparency", obj.Transparency) end obj.Transparency = 0.8 end end end function DisablePhaseForInvisibleParts() for _, obj in pairs(workspace:GetDescendants()) do if obj:IsA("BasePart") and obj:GetAttribute("OriginalTransparency") ~= nil then obj.Transparency = obj:GetAttribute("OriginalTransparency") obj:SetAttribute("OriginalTransparency", nil) end end end -- Selection Control modeEnabled = false originalTransparency = {} selectionBox = Instance.new("SelectionBox") selectionBox.Name = "HighlightSelectionBox" selectionBox.Color3 = Color3.new(0, 1, 0) selectionBox.Transparency = 0 selectionBox.Visible = false local currentSelection = nil reparent = false local reparentLocation local function updateSelection(newPart) if currentSelection == newPart then selectionBox.Adornee = nil selectionBox.Visible = false currentSelection = nil else currentSelection = newPart if newPart ~= nil then selectionBox.Parent = newPart end selectionBox.Adornee = newPart selectionBox.Visible = true end end local function toWholeNum(num) if num == 0 then return 1 end return math.sign(num) * math.ceil(math.abs(num) / 10) end local function toDecimalPoint(num, numDecimalPlaces) return math.floor(num * 10 ^ numDecimalPlaces) / 10 ^ numDecimalPlaces end local playerSpawnPoint = nil local function SetSpawnPoint() local root = GetRoot(Player) if not root then return end playerSpawnPoint = root.CFrame local pos = playerSpawnPoint.Position local x = toDecimalPoint(pos.X, 2) local y = toDecimalPoint(pos.Y, 2) local z = toDecimalPoint(pos.Z, 2) Toast("Spawnpoint set to (" .. x .. ", " .. y .. ", " .. z .. ")", 2) end local function EraseSpawnPoint() if playerSpawnPoint ~= nil then Toast("Spawnpoint removed", 1.5) end playerSpawnPoint = nil end carActive = false carInputBeganConn, carInputEndedConn, carHeartbeatConn = nil carCurrentVelocity = Vector3.new(0, 0, 0) carAcceleration = 50 carBrakeDeceleration = 150 carHorizontalVelocity = Vector3.new(0, 0, 0) carVerticalVelocity = 0 carKeysPressed = {} carLastHeading = nil carMaxSpeed = 100 carLockedY = nil driveAnimId = "http://www.roblox.com/asset/?id=17360699557" carAnimation = nil driveAnimDirection = 1 driveAnimTime = 3 animSpeed = 0.5 minAnimSpeed = 0.2 maxAnimSpeed = 0.8 sittingSet = false smoothFactor = 0.1 bodyVel, bodyGyro = nil mobileCarInput = Vector3.new(0, 0, 0) mobileCarBreak = false local carUI function createCarUI() carUI = Instance.new("ScreenGui") carUI.Parent = Players.LocalPlayer:WaitForChild("PlayerGui") local Frame = Instance.new("Frame") Frame.Parent = carUI Frame.BackgroundColor3 = Color3.fromRGB(50, 50, 50) Frame.BorderSizePixel = 0 Frame.Position = UDim2.new(0,20,1,-220) Frame.Size = UDim2.new(0,170,0,150) local Right = Instance.new("TextButton") Right.Name = "Right" Right.Parent = Frame Right.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Right.BorderSizePixel = 0 Right.Position = UDim2.new(0.60,0,0.4,0) Right.Size = UDim2.new(0,40,0,40) Right.Font = Enum.Font.SourceSans Right.Text = ">" Right.TextColor3 = Color3.fromRGB(0, 0, 0) Right.TextScaled = true local aspectRight = Instance.new("UIAspectRatioConstraint", Right) aspectRight.AspectRatio = 1 local uicornerRight = Instance.new("UICorner", Right) uicornerRight.CornerRadius = UDim.new(0.15,0) local Left = Instance.new("TextButton") Left.Name = "Left" Left.Parent = Frame Left.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Left.BorderSizePixel = 0 Left.Position = UDim2.new(0.1,0,0.4,0) Left.Size = UDim2.new(0,40,0,40) Left.Font = Enum.Font.SourceSans Left.Text = "<" Left.TextColor3 = Color3.fromRGB(0, 0, 0) Left.TextScaled = true local aspectLeft = Instance.new("UIAspectRatioConstraint", Left)aspectLeft = Instance.new("UIAspectRatioConstraint", Left) aspectLeft.AspectRatio = 1 local uicornerLeft = Instance.new("UICorner", Left) uicornerLeft.CornerRadius = UDim.new(0.15,0) local Fwd = Instance.new("TextButton") Fwd.Name = "Fwd" Fwd.Parent = Frame Fwd.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Fwd.BorderSizePixel = 0 Fwd.Position = UDim2.new(0.35,0,0.05,0) Fwd.Size = UDim2.new(0,40,0,40) Fwd.Font = Enum.Font.SourceSans Fwd.Text = "∧" Fwd.TextColor3 = Color3.fromRGB(0, 0, 0) Fwd.TextScaled = true local aspectFwd = Instance.new("UIAspectRatioConstraint", Fwd) aspectFwd.AspectRatio = 1 local uicornerFwd = Instance.new("UICorner", Fwd) uicornerFwd.CornerRadius = UDim.new(0.15,0) local Back = Instance.new("TextButton") Back.Name = "Back" Back.Parent = Frame Back.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Back.BorderSizePixel = 0 Back.Position = UDim2.new(0.35,0,0.65,0) Back.Size = UDim2.new(0,40,0,40) Back.Font = Enum.Font.SourceSans Back.Text = "∨" Back.TextColor3 = Color3.fromRGB(0, 0, 0) Back.TextScaled = true local aspectBack = Instance.new("UIAspectRatioConstraint", Back) aspectBack.AspectRatio = 1 local uicornerBack = Instance.new("UICorner", Back) uicornerBack.CornerRadius = UDim.new(0.15,0) local Up = Instance.new("TextButton") Up.Name = "Up" Up.Parent = Frame Up.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Up.BorderSizePixel = 0 Up.Position = UDim2.new(0.95,0,0.15,0) Up.Size = UDim2.new(0,40,0,60) Up.Font = Enum.Font.SourceSans Up.Text = "↑" Up.TextColor3 = Color3.fromRGB(0, 0, 0) Up.TextScaled = true local aspectUp = Instance.new("UIAspectRatioConstraint", Up) aspectUp.AspectRatio = 0.66 local uicornerUp = Instance.new("UICorner", Up) uicornerUp.CornerRadius = UDim.new(0.15,0) local Down = Instance.new("TextButton") Down.Name = "Down" Down.Parent = Frame Down.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Down.BorderSizePixel = 0 Down.Position = UDim2.new(0.95,0,0.55,0) Down.Size = UDim2.new(0,40,0,60) Down.Font = Enum.Font.SourceSans Down.Text = "↓" Down.TextColor3 = Color3.fromRGB(0, 0, 0) Down.TextScaled = true local aspectDown = Instance.new("UIAspectRatioConstraint", Down) aspectDown.AspectRatio = 0.66 local uicornerDown = Instance.new("UICorner", Down) uicornerDown.CornerRadius = UDim.new(0.15,0) local Break = Instance.new("TextButton") Break.Name = "Break" Break.Parent = Frame Break.BackgroundColor3 = Color3.fromRGB(255, 115, 115) Break.BorderSizePixel = 0 Break.Position = UDim2.new(0.75,0,0.05,0) Break.Size = UDim2.new(0,40,0,50) Break.Font = Enum.Font.SourceSans Break.Text = "B" Break.TextColor3 = Color3.fromRGB(0, 0, 0) Break.TextScaled = true local aspectB = Instance.new("UIAspectRatioConstraint", Break) aspectB.AspectRatio = 0.66 local uicornerB = Instance.new("UICorner", Break) uicornerB.CornerRadius = UDim.new(0.15,0) Fwd.MouseButton1Down:Connect(function() mobileCarInput = Vector3.new(mobileCarInput.X, mobileCarInput.Y, -1) end) Fwd.MouseButton1Up:Connect(function() mobileCarInput = Vector3.new(mobileCarInput.X, mobileCarInput.Y, 0) end) Back.MouseButton1Down:Connect(function() mobileCarInput = Vector3.new(mobileCarInput.X, mobileCarInput.Y, 1) end) Back.MouseButton1Up:Connect(function() mobileCarInput = Vector3.new(mobileCarInput.X, mobileCarInput.Y, 0) end) Left.MouseButton1Down:Connect(function() mobileCarInput = Vector3.new(-1, mobileCarInput.Y, mobileCarInput.Z) end) Left.MouseButton1Up:Connect(function() mobileCarInput = Vector3.new(0, mobileCarInput.Y, mobileCarInput.Z) end) Right.MouseButton1Down:Connect(function() mobileCarInput = Vector3.new(1, mobileCarInput.Y, mobileCarInput.Z) end) Right.MouseButton1Up:Connect(function() mobileCarInput = Vector3.new(0, mobileCarInput.Y, mobileCarInput.Z) end) Up.MouseButton1Down:Connect(function() mobileCarInput = Vector3.new(mobileCarInput.X, 1, mobileCarInput.Z) end) Up.MouseButton1Up:Connect(function() mobileCarInput = Vector3.new(mobileCarInput.X, 0, mobileCarInput.Z) end) Down.MouseButton1Down:Connect(function() mobileCarInput = Vector3.new(mobileCarInput.X, -1, mobileCarInput.Z) end) Down.MouseButton1Up:Connect(function() mobileCarInput = Vector3.new(mobileCarInput.X, 0, mobileCarInput.Z) end) Break.MouseButton1Down:Connect(function() mobileCarBreak = true end) Break.MouseButton1Up:Connect(function() mobileCarBreak = false end) end function destroyCarUI() if carUI then carUI:Destroy() carUI = nil mobileCarInput = Vector3.new(0,0,0) mobileCarBreak = false end end function StartCarMode(maxSpeedInput) carMaxSpeed = tonumber(maxSpeedInput) or 100 carActive = true if isMobile then createCarUI() end local player = Players.LocalPlayer local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local camera = workspace.CurrentCamera local character = player.Character local hrp = character:WaitForChild("HumanoidRootPart") local humanoid = character:WaitForChild("Humanoid") humanoid.Sit = true carLockedY = hrp.Position.Y carCurrentVelocity = Vector3.new(0, 0, 0) carHorizontalVelocity = Vector3.new(0, 0, 0) carVerticalVelocity = 0 carKeysPressed = {} carLastHeading = nil bodyVel = Instance.new("BodyVelocity") bodyVel.MaxForce = Vector3.new(1e5, 1e5, 1e5) bodyVel.Parent = hrp bodyVel.Velocity = Vector3.new(0, 0, 0) bodyGyro = Instance.new("BodyGyro") bodyGyro.MaxTorque = Vector3.new(1e5, 1e5, 1e5) bodyGyro.Parent = hrp bodyGyro.CFrame = hrp.CFrame -- Set up key connections. carInputBeganConn = UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if input.UserInputType == Enum.UserInputType.Keyboard then carKeysPressed[input.KeyCode] = true end end) carInputEndedConn = UserInputService.InputEnded:Connect(function(input, gameProcessed) if gameProcessed then return end if input.UserInputType == Enum.UserInputType.Keyboard then carKeysPressed[input.KeyCode] = false end end) local carAnimCycleActive = false carHeartbeatConn = RunService.Heartbeat:Connect(function(deltaTime) if not carActive then return end if not sittingSet then sittingSet = true end if not carAnimation then local animator = humanoid:FindFirstChildOfClass("Animator") if not animator then animator = Instance.new("Animator") animator.Parent = humanoid end local anim = Instance.new("Animation") anim.AnimationId = driveAnimId carAnimation = animator:LoadAnimation(anim) carAnimation:Play() carAnimation:AdjustSpeed(0) carAnimation.TimePosition = 3 if not carAnimCycleActive then carAnimCycleActive = true spawn(function() local startTime = 3 local endTime = 6 local playbackSpeed = 0.4 local cycleDuration = (endTime - startTime) / playbackSpeed while carActive and carAnimation do carAnimation:AdjustSpeed(playbackSpeed) wait(cycleDuration) carAnimation:AdjustSpeed(-playbackSpeed) wait(cycleDuration) carAnimation.TimePosition = startTime end carAnimCycleActive = false end) end end local horizontalInput = Vector3.new(0, 0, 0) local verticalInput = 0 if isMobile then horizontalInput = mobileCarInput if mobileCarBreak then if carHorizontalVelocity.Magnitude > 0 then local decelAmount = carBrakeDeceleration * deltaTime local newMag = carHorizontalVelocity.Magnitude - decelAmount if newMag < 0 then newMag = 0 end carHorizontalVelocity = carHorizontalVelocity.Unit * newMag end if math.abs(carVerticalVelocity) > 0 then local decelAmount = carBrakeDeceleration * deltaTime if math.abs(carVerticalVelocity) - decelAmount < 0 then carVerticalVelocity = 0 else carVerticalVelocity = carVerticalVelocity - (decelAmount * math.sign(carVerticalVelocity)) end end end verticalInput = mobileCarInput.Y else if carKeysPressed[Enum.KeyCode.W] then horizontalInput = horizontalInput + Vector3.new(0, 0, -1) end if carKeysPressed[Enum.KeyCode.S] then horizontalInput = horizontalInput + Vector3.new(0, 0, 1) end if carKeysPressed[Enum.KeyCode.A] then horizontalInput = horizontalInput + Vector3.new(-1, 0, 0) end if carKeysPressed[Enum.KeyCode.D] then horizontalInput = horizontalInput + Vector3.new(1, 0, 0) end if carKeysPressed[Enum.KeyCode.E] then verticalInput = verticalInput + 1 end if carKeysPressed[Enum.KeyCode.Q] then verticalInput = verticalInput - 1 end if carKeysPressed[Enum.KeyCode.B] then if carHorizontalVelocity.Magnitude > 0 then local decelAmount = carBrakeDeceleration * deltaTime local newMag = carHorizontalVelocity.Magnitude - decelAmount if newMag < 0 then newMag = 0 end carHorizontalVelocity = carHorizontalVelocity.Unit * newMag end if math.abs(carVerticalVelocity) > 0 then local decelAmount = carBrakeDeceleration * deltaTime if math.abs(carVerticalVelocity) - decelAmount < 0 then carVerticalVelocity = 0 else carVerticalVelocity = carVerticalVelocity - (decelAmount * math.sign(carVerticalVelocity)) end end end end if horizontalInput.Magnitude > 0 then horizontalInput = horizontalInput.Unit local camCFrame = camera.CFrame local camLook = Vector3.new(camCFrame.LookVector.X, 0, camCFrame.LookVector.Z).Unit local camRight = Vector3.new(camCFrame.RightVector.X, 0, camCFrame.RightVector.Z).Unit local forwardComponent = horizontalInput.Z local rightComponent = horizontalInput.X local worldHorizontal = (camLook * -forwardComponent) + (camRight * rightComponent) if worldHorizontal.Magnitude > 0 then worldHorizontal = worldHorizontal.Unit end carHorizontalVelocity = carHorizontalVelocity + (worldHorizontal * carAcceleration * deltaTime) if carHorizontalVelocity.Magnitude > carMaxSpeed then carHorizontalVelocity = carHorizontalVelocity.Unit * carMaxSpeed end end if verticalInput ~= 0 then carVerticalVelocity = carVerticalVelocity + (carAcceleration * verticalInput * deltaTime) else carVerticalVelocity = 0 end carCurrentVelocity = carHorizontalVelocity + Vector3.new(0, (verticalInput ~= 0 and carVerticalVelocity or 0), 0) bodyVel.Velocity = bodyVel.Velocity:Lerp(carCurrentVelocity, smoothFactor) local flatVel = Vector3.new(carHorizontalVelocity.X, 0, carHorizontalVelocity.Z) if flatVel.Magnitude > 0.1 then carLastHeading = flatVel.Unit end local currentPos = hrp.Position if verticalInput == 0 then currentPos = Vector3.new(currentPos.X, carLockedY, currentPos.Z) else carLockedY = hrp.Position.Y end local desiredCFrame if carLastHeading then desiredCFrame = CFrame.new(hrp.Position, hrp.Position + carLastHeading) else desiredCFrame = hrp.CFrame end bodyGyro.CFrame = bodyGyro.CFrame:Lerp(desiredCFrame, smoothFactor) end) end local function StopCarMode() carActive = false destroyCarUI() sittingSet = false if carInputBeganConn then carInputBeganConn:Disconnect() end if carInputEndedConn then carInputEndedConn:Disconnect() end if carHeartbeatConn then carHeartbeatConn:Disconnect() end if carAnimation then carAnimation:Stop() carAnimation = nil end if bodyVel then bodyVel:Destroy() bodyVel = nil end if bodyGyro then bodyGyro:Destroy() bodyGyro = nil end workspace.Gravity = 196.2 end local function TeleportToPlayer(PlayerTarget) local Root = GetRoot(Player) local TargetRoot = GetRoot(PlayerTarget) TargetRoot.Velocity = Vector3.zero if not TargetRoot then return end Root.CFrame = TargetRoot.CFrame end local function ShowChangeLogs(DSA, ClickCallback) if UserInputService.TouchEnabled then setclipboard("https://empty.tools") Toast("Website copied to clipboard!", 2) return end local SubText = "Don't show again" if not DSA then SubText = nil end return CreateAlert( "Empty Tools " .. VersionString .. " | What's New?", ChangeLog, "http://www.roblox.com/asset/?id=18941848597", "Ok", SubText, Enum.TextXAlignment.Left, ClickCallback, function() ClickCallback() Player:SetAttribute("NoChangeLogs", true) userSettings.changelogHiddenVersion = VersionString userSettings.ShowChangeLogs = false saveSettings(userSettings) end ) end local function ShowInfo(DSA, ClickCallback) if UserInputService.TouchEnabled then if UserInputService.TouchEnabled then setclipboard("https://empty.tools") Toast("Website copied to clipboard!", 2) return end return end local SubText = "Copy To Clipboard" return CreateAlert( "Empty Tools " .. VersionString .. " | Info", Info, "http://www.roblox.com/asset/?id=18941848597", "Ok", SubText, Enum.TextXAlignment.Left, ClickCallback, function() setclipboard("https://empty.tools") Toast("Website copied to clipboard!", 2) end ) end local function StopPlayerAnimation() local animator = GetCharacter(Player).Humanoid:FindFirstChildOfClass("Animator") if animator then for _, track in ipairs(animator:GetPlayingAnimationTracks()) do track:Stop() end end end local emoteTable = {} local equippedEmotes = {nil, nil, nil, nil, nil, nil, nil, nil} local function updateEmoteSettings(Humanoid) local humanoidDescription = Humanoid.HumanoidDescription humanoidDescription:SetEmotes(emoteTable) humanoidDescription:SetEquippedEmotes(equippedEmotes) end function PlayEmote(ID, slotStr) local numID = tonumber(ID) if not numID then warn("Invalid emote ID") return end local requestedSlot = slotStr:match("Slot%s*(%d+)") requestedSlot = tonumber(requestedSlot) if not requestedSlot or requestedSlot < 1 or requestedSlot > 8 then warn("Invalid slot specified. Use 'Slot 1' through 'Slot 8'.") return end if equippedEmotes[requestedSlot] == nil then local openSlot = nil for i = 1, 8 do if equippedEmotes[i] == nil then openSlot = i break end end if not openSlot then warn("No available emote slots.") return end requestedSlot = openSlot end local Info = game:GetService("MarketplaceService"):GetProductInfo(numID) local key = Info.Name equippedEmotes[requestedSlot] = key emoteTable[key] = { numID } local Humanoid = GetHumanoid(Player) updateEmoteSettings(Humanoid) end -- Animation Control local AnimationPacks = { ["Ninja"] = { Swim = 656119721, SwimIdle = 656121397, Idle = {656117400, 656118341, 886742569}, Jump = 656117878, Fall = 656115606, Walk = 656121766, Run = 656118852, Climb = 656114359 }, ["Cartoony"] = { Swim = 742639220, SwimIdle = 742639812, Idle = {742637544, 742638445, 885477856}, Jump = 742637942, Fall = 742637151, Walk = 742640026, Run = 742638842, Climb = 742636889 }, ["Levitation"] = { Swim = 616011509, SwimIdle = 616012453, Idle = {616006778, 616008087, 886862142}, Jump = 616008936, Fall = 616005863, Walk = 616013216, Run = 616010382, Climb = 616003713 }, ["Stylish"] = { Swim = 616143378, SwimIdle = 616144772, Idle = {616136790, 616138447, 886888594}, Jump = 616139451, Fall = 616134815, Walk = 616146177, Run = 616140816, Climb = 616133594 }, ["Vampire"] = { Swim = 1083464683, SwimIdle = 1083467779, Idle = {1083445855, 1083450166, 1088037547}, Jump = 1083455352, Fall = 1083443587, Walk = 1083473930, Run = 1083462077, Climb = 1083439238 }, ["Robot"] = { Swim = 616092998, SwimIdle = 616094091, Idle = {616088211, 616089559, 885531463}, Jump = 616090535, Fall = 616087089, Walk = 616095330, Run = 616091570, Climb = 616086039 }, ["Toy"] = { Swim = 782844582, SwimIdle = 782845186, Idle = {782841498, 782845736, 980952228}, Jump = 782847020, Fall = 782846423, Walk = 782843345, Run = 782842708, Climb = 782843869 }, ["Bubbly"] = { Swim = 910028158, SwimIdle = 910030921, Idle = {910004836, 910009958, 1018536639}, Jump = 910016857, Fall = 910001910, Walk = 910034870, Run = 910025107, Climb = 909997997 }, ["Zombie"] = { Swim = 616165109, SwimIdle = 616166655, Idle = {616158929, 616160636, 885545458}, Jump = 616161997, Fall = 616157476, Walk = 616168032, Run = 616163682, Climb = 616156119 }, ["Elder"] = { Swim = 845401742, SwimIdle = 845403127, Idle = {845397899, 845400520, 901160519}, Jump = 845398858, Fall = 845396048, Walk = 845403856, Run = 845386501, Climb = 845392038 }, ["Superhero"] = { Swim = 616119360, SwimIdle = 616120861, Idle = {616111295, 616113536, 885535855}, Jump = 616115533, Fall = 616108001, Walk = 616122287, Run = 616117076, Climb = 616104706 }, ["Werewolf"] = { Swim = 1083222527, SwimIdle = 1083225406, Idle = {1083195517, 1083214717, 1099492820}, Jump = 1083218792, Fall = 1083189019, Walk = 1083178339, Run = 1083216690, Climb = 1083182000 }, ["Mage"] = { Swim = 707876443, SwimIdle = 707894699, Idle = {707742142, 707855907, 885508740}, Jump = 707853694, Fall = 707829716, Walk = 707897309, Run = 707861613, Climb = 707826056 }, ["Astronaut"] = { Swim = 891639666, SwimIdle = 891663592, Idle = {891621366, 891633237, 1047759695}, Jump = 891627522, Fall = 891617961, Walk = 891636393, Run = 891636393, Climb = 891609353 }, ["Pirate"] = { Swim = 750784579, SwimIdle = 750785176, Idle = {750781874, 750782770, 885515365}, Jump = 750782230, Fall = 750780242, Walk = 750785693, Run = 750783738, Climb = 750779899 }, ["Knight"] = { Swim = 657560551, SwimIdle = 657557095, Idle = {657595757, 657568135, 885499184}, Jump = 658409194, Fall = 657600338, Walk = 657552124, Run = 657564596, Climb = 658360781 }, ["Rthro"] = { Swim = 2510199791, SwimIdle = 2510201162, Idle = {2510197257, 2510196951, 3711062489}, Jump = 2510197830, Fall = 2510195892, Walk = 2510202577, Run = 2510198475, Climb = 2510192778 }, ["Oldschool"] = { Swim = 10921243048, SwimIdle = 2510201162, Idle = {10921230744, 10921230744, 10921230744}, Jump = 10921242013, Fall = 10921241244, Walk = 10921244891, Run = 10921240218, Climb = 10921229866 }, ["Bold"] = { Swim = 16738339158, SwimIdle = 16738339817, Idle = {16738333868, 16738334710, 16738333868}, Jump = 10921263860, Fall = 16738333171, Walk = 16738340646, Run = 16738337225, Climb = 16738332169 } } local function setAnimation(animParent, groupName, animObjName, assetId) local group = animParent:FindFirstChild(groupName) if group then local animObj = group:FindFirstChild(animObjName) if animObj then animObj.AnimationId = "http://www.roblox.com/asset/?id=" .. tostring(assetId) end end end local function SetPlayerAnimations(AnimationPack) local Character = GetCharacter(Player) local AnimationIDs = AnimationPacks[AnimationPack] local Animate = Character:FindFirstChild("Animate") if not Animate then return end Animate.Disabled = true StopPlayerAnimation() if AnimationPack == "None" then setAnimation(Animate, "idle", "Animation1", DefaultAnimations.Idle1) setAnimation(Animate, "idle", "Animation2", DefaultAnimations.Idle2) setAnimation(Animate, "walk", "WalkAnim", DefaultAnimations.Walk) setAnimation(Animate, "run", "RunAnim", DefaultAnimations.Run) setAnimation(Animate, "jump", "JumpAnim", DefaultAnimations.Jump) setAnimation(Animate, "climb", "ClimbAnim", DefaultAnimations.Climb) setAnimation(Animate, "fall", "FallAnim", DefaultAnimations.Fall) setAnimation(Animate, "swim", "Swim", DefaultAnimations.Swim) setAnimation(Animate, "swimidle", "SwimIdle", DefaultAnimations.SwimIdle) elseif AnimationIDs then setAnimation(Animate, "idle", "Animation1", AnimationIDs.Idle[1]) setAnimation(Animate, "idle", "Animation2", AnimationIDs.Idle[2]) setAnimation(Animate, "walk", "WalkAnim", AnimationIDs.Walk) setAnimation(Animate, "run", "RunAnim", AnimationIDs.Run) setAnimation(Animate, "jump", "JumpAnim", AnimationIDs.Jump) setAnimation(Animate, "climb", "ClimbAnim", AnimationIDs.Climb) setAnimation(Animate, "fall", "FallAnim", AnimationIDs.Fall) setAnimation(Animate, "swim", "Swim", AnimationIDs.Swim) setAnimation(Animate, "swimidle", "SwimIdle", AnimationIDs.SwimIdle) end Animate.Disabled = false end -- Link Control local function CreateLinkAlert(ID) -- Gui to Lua -- Version: 3.2 -- Instances: local AlertScreen = Instance.new("ScreenGui") local Overlay = Instance.new("TextButton") local CallDialog = Instance.new("ImageButton") local AlertContents = Instance.new("ImageLabel") local Footer = Instance.new("ImageLabel") local layout = Instance.new("UIListLayout") local margin = Instance.new("UIPadding") local Buttons = Instance.new("ImageLabel") local _1 = Instance.new("ImageButton") local ButtonContent = Instance.new("Frame") local ButtonMiddleContent = Instance.new("Frame") local UIListLayout = Instance.new("UIListLayout") local Text = Instance.new("TextLabel") local layout_2 = Instance.new("UIListLayout") local margin_2 = Instance.new("UIPadding") local layout_3 = Instance.new("UIListLayout") local MiddleContent = Instance.new("ImageLabel") local layout_4 = Instance.new("UIListLayout") local margin_3 = Instance.new("UIPadding") local Image = Instance.new("ImageLabel") local layout_5 = Instance.new("UIListLayout") local margin_4 = Instance.new("UIPadding") local Image_2 = Instance.new("ImageLabel") local Content = Instance.new("ImageLabel") local BodyText = Instance.new("TextLabel") local layout_6 = Instance.new("UIListLayout") local margin_5 = Instance.new("UIPadding") local Content_2 = Instance.new("ImageLabel") local layout_7 = Instance.new("UIListLayout") local margin_6 = Instance.new("UIPadding") local TextBox = Instance.new("TextBox") local TitleContainer = Instance.new("ImageLabel") local TitleArea = Instance.new("ImageLabel") local layout_8 = Instance.new("UIListLayout") local Title = Instance.new("TextLabel") local Underline = Instance.new("Frame") local margin_7 = Instance.new("UIPadding") local layout_9 = Instance.new("UIListLayout") local margin_8 = Instance.new("UIPadding") local margin_9 = Instance.new("UIPadding") --Properties: local Parent if RunService:IsStudio() then Parent = Player.PlayerGui else Parent = COREGUI.RobloxGui ProtectUI(AlertScreen) end AlertScreen.Name = "LinkScreen" AlertScreen.Parent = Parent AlertScreen.ZIndexBehavior = Enum.ZIndexBehavior.Sibling AlertScreen.DisplayOrder = 100 Overlay.Name = "Overlay" Overlay.Parent = AlertScreen Overlay.BackgroundColor3 = Color3.fromRGB(0, 0, 0) Overlay.BackgroundTransparency = 0.500 Overlay.BorderSizePixel = 0 Overlay.Selectable = false Overlay.Size = UDim2.new(1, 0, 1, 0) Overlay.Visible = false Overlay.AutoButtonColor = false Overlay.Text = "" CallDialog.Name = "CallDialog" CallDialog.Parent = AlertScreen CallDialog.AnchorPoint = Vector2.new(0.5, 0.5) CallDialog.BackgroundColor3 = Color3.fromRGB(57, 59, 61) CallDialog.BackgroundTransparency = 1.000 CallDialog.BorderSizePixel = 0 CallDialog.ClipsDescendants = true CallDialog.AutomaticSize = Enum.AutomaticSize.Y CallDialog.Position = UDim2.new(0.5, 0, 0.5, 0) CallDialog.Selectable = false CallDialog.Size = UDim2.new(0, 400, 0, 182) CallDialog.AutoButtonColor = false CallDialog.Image = "rbxassetid://74861121457749" CallDialog.ImageColor3 = Color3.fromRGB(57, 59, 61) CallDialog.ImageRectOffset = Vector2.new(83, 494) CallDialog.ImageRectSize = Vector2.new(17, 17) CallDialog.ScaleType = Enum.ScaleType.Slice CallDialog.SliceCenter = Rect.new(8, 8, 9, 9) AlertContents.Name = "AlertContents" AlertContents.Parent = CallDialog AlertContents.BackgroundTransparency = 1.000 AlertContents.BorderSizePixel = 0 AlertContents.Size = UDim2.new(0, 400, 0, 182) Footer.Name = "Footer" Footer.Parent = AlertContents Footer.AutomaticSize = Enum.AutomaticSize.Y Footer.BackgroundTransparency = 1.000 Footer.LayoutOrder = 3 Footer.Size = UDim2.new(1, 0, 0, 36) layout.Name = "$layout" layout.Parent = Footer layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Padding = UDim.new(0, 12) margin.Name = "$margin" margin.Parent = Footer Buttons.Name = "Buttons" Buttons.Parent = Footer Buttons.BackgroundTransparency = 1.000 Buttons.LayoutOrder = 3 Buttons.Size = UDim2.new(1, 0, 0, 36) _1.Name = "1" _1.Parent = Buttons _1.BackgroundTransparency = 1.000 _1.LayoutOrder = 1 _1.Size = UDim2.new(0, 352, 0, 36) _1.AutoButtonColor = false _1.Image = "rbxassetid://74861121457749" _1.ImageRectOffset = Vector2.new(83, 494) _1.ImageRectSize = Vector2.new(17, 17) _1.ScaleType = Enum.ScaleType.Slice _1.SliceCenter = Rect.new(8, 8, 9, 9) ButtonContent.Name = "ButtonContent" ButtonContent.Parent = _1 ButtonContent.BackgroundTransparency = 1.000 ButtonContent.Size = UDim2.new(1, 0, 1, 0) ButtonMiddleContent.Name = "ButtonMiddleContent" ButtonMiddleContent.Parent = ButtonContent ButtonMiddleContent.BackgroundTransparency = 1.000 ButtonMiddleContent.Size = UDim2.new(1, 0, 1, 0) UIListLayout.Parent = ButtonMiddleContent UIListLayout.FillDirection = Enum.FillDirection.Horizontal UIListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder UIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center UIListLayout.Padding = UDim.new(0, 5) Text.Name = "Text" Text.Parent = ButtonMiddleContent Text.BackgroundTransparency = 1.000 Text.LayoutOrder = 2 Text.Size = UDim2.new(0, 23, 0, 22) Text.Font = Enum.Font.BuilderSansBold Text.Text = "Done" Text.AutomaticSize = Enum.AutomaticSize.X Text.TextColor3 = Color3.fromRGB(57, 59, 61) Text.TextSize = 20.000 Text.TextWrapped = true layout_2.Name = "$layout" layout_2.Parent = Buttons layout_2.FillDirection = Enum.FillDirection.Horizontal layout_2.HorizontalAlignment = Enum.HorizontalAlignment.Center layout_2.SortOrder = Enum.SortOrder.LayoutOrder margin_2.Name = "$margin" margin_2.Parent = Buttons layout_3.Name = "$layout" layout_3.Parent = AlertContents layout_3.SortOrder = Enum.SortOrder.LayoutOrder layout_3.Padding = UDim.new(0, 24) MiddleContent.Name = "MiddleContent" MiddleContent.Parent = AlertContents MiddleContent.BackgroundTransparency = 1.000 MiddleContent.LayoutOrder = 2 MiddleContent.AutomaticSize = Enum.AutomaticSize.Y MiddleContent.Size = UDim2.new(1, 0, 0, 22) layout_4.Name = "$layout" layout_4.Parent = MiddleContent layout_4.SortOrder = Enum.SortOrder.LayoutOrder margin_3.Name = "$margin" margin_3.Parent = MiddleContent Image.Name = "Image" Image.Parent = MiddleContent Image.BackgroundTransparency = 1.000 Image.LayoutOrder = 2 Image.Size = UDim2.new(1, 0, 0, 22) Image.Visible = false layout_5.Name = "$layout" layout_5.Parent = Image layout_5.SortOrder = Enum.SortOrder.LayoutOrder layout_5.Padding = UDim.new(0, 12) margin_4.Name = "$margin" margin_4.Parent = Image margin_4.PaddingBottom = UDim.new(0, 15) margin_4.PaddingLeft = UDim.new(0, 75) Image_2.Name = "Image" Image_2.Parent = Image Image_2.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Image_2.BorderColor3 = Color3.fromRGB(0, 0, 0) Image_2.BorderSizePixel = 0 Image_2.Size = UDim2.new(0, 200, 0, 200) Image_2.Image = "rbxasset://textures/ui/GuiImagePlaceholder.png" Content.Name = "Content" Content.Parent = MiddleContent Content.BackgroundTransparency = 1.000 Content.LayoutOrder = 2 Content.AutomaticSize = Enum.AutomaticSize.Y Content.Size = UDim2.new(1, 0, 0, 22) BodyText.Name = "BodyText" BodyText.Parent = Content BodyText.BackgroundTransparency = 1.000 BodyText.LayoutOrder = 1 BodyText.AutomaticSize = Enum.AutomaticSize.Y BodyText.Size = UDim2.new(1, 0, 0, 22) BodyText.Font = Enum.Font.BuilderSans BodyText.Text = "Copy the code below and send it to another user with Empty Tools to allow them to join this game instance." BodyText.TextColor3 = Color3.fromRGB(189, 190, 190) BodyText.TextSize = 20.000 BodyText.TextWrapped = true layout_6.Name = "$layout" layout_6.Parent = Content layout_6.SortOrder = Enum.SortOrder.LayoutOrder layout_6.Padding = UDim.new(0, 12) margin_5.Name = "$margin" margin_5.Parent = Content Content_2.Name = "Content" Content_2.Parent = MiddleContent Content_2.BackgroundTransparency = 1.000 Content_2.LayoutOrder = 2 Content_2.Position = UDim2.new(0, 0, 0.520437717, 0) Content_2.Size = UDim2.new(1, 0, 0.276637852, 22) layout_7.Name = "$layout" layout_7.Parent = Content_2 layout_7.SortOrder = Enum.SortOrder.LayoutOrder layout_7.Padding = UDim.new(0, 12) margin_6.Name = "$margin" margin_6.Parent = Content_2 margin_6.PaddingLeft = UDim.new(0, 22) margin_6.PaddingTop = UDim.new(0, 20) TextBox.Parent = Content_2 TextBox.AnchorPoint = Vector2.new(0.5, 0.5) TextBox.BackgroundColor3 = Color3.fromRGB(25, 25, 25) TextBox.BackgroundTransparency = 0 TextBox.BorderColor3 = Color3.fromRGB(26, 26, 26) TextBox.BorderSizePixel = 0 TextBox.Position = UDim2.new(0.231250006, 0, 0.769518828, 0) TextBox.Size = UDim2.new(0.9275, 0, 1.43903766, 0) TextBox.ClearTextOnFocus = false TextBox.Font = Enum.Font.Montserrat TextBox.TextEditable = false TextBox.PlaceholderColor3 = Color3.fromRGB(255, 255, 255) TextBox.Text = ID TextBox.TextColor3 = Color3.fromRGB(255, 255, 255) TextBox.TextScaled = true TextBox.TextWrapped = true TitleContainer.Name = "TitleContainer" TitleContainer.Parent = AlertContents TitleContainer.BackgroundTransparency = 1.000 TitleContainer.LayoutOrder = 1 TitleContainer.Size = UDim2.new(1, 0, 0, 52) TitleArea.Name = "TitleArea" TitleArea.Parent = TitleContainer TitleArea.BackgroundTransparency = 1.000 TitleArea.LayoutOrder = 1 TitleArea.Size = UDim2.new(1, 0, 0, 40) layout_8.Name = "$layout" layout_8.Parent = TitleArea layout_8.HorizontalAlignment = Enum.HorizontalAlignment.Center layout_8.SortOrder = Enum.SortOrder.LayoutOrder layout_8.Padding = UDim.new(0, 12) Title.Name = "Title" Title.Parent = TitleArea Title.BackgroundTransparency = 1.000 Title.LayoutOrder = 1 Title.AutomaticSize = Enum.AutomaticSize.X Title.Size = UDim2.new(0, 14, 0, 27) Title.Font = Enum.Font.BuilderSansBold Title.Text = "Link Code" Title.TextColor3 = Color3.fromRGB(255, 255, 255) Title.TextSize = 25.000 Title.TextWrapped = true Underline.Name = "Underline" Underline.Parent = TitleArea Underline.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Underline.BackgroundTransparency = 0.800 Underline.BorderSizePixel = 0 Underline.LayoutOrder = 2 Underline.Size = UDim2.new(1, 0, 0, 1) margin_7.Name = "$margin" margin_7.Parent = TitleArea layout_9.Name = "$layout" layout_9.Parent = TitleContainer layout_9.HorizontalAlignment = Enum.HorizontalAlignment.Center layout_9.SortOrder = Enum.SortOrder.LayoutOrder layout_9.Padding = UDim.new(0, 8) margin_8.Name = "$margin" margin_8.Parent = TitleContainer margin_8.PaddingTop = UDim.new(0, 12) margin_9.Name = "$margin" margin_9.Parent = AlertContents margin_9.PaddingBottom = UDim.new(0, 24) margin_9.PaddingLeft = UDim.new(0, 24) margin_9.PaddingRight = UDim.new(0, 24) local function Hover() _1.MouseEnter:Connect(function() _1.ImageColor3 = Color3.fromRGB(172, 172, 172) end) _1.MouseLeave:Connect(function() _1.ImageColor3 = Color3.fromRGB(255,255,255) end) end coroutine.wrap(Hover)() _1.MouseButton1Click:Connect(function() AlertScreen.Parent = nil AlertScreen:Destroy() end) return AlertScreen end local function CreateLinkKey(JobId) local result = JobId:gsub("-", "") return result .. "-" .. game.PlaceId end local function RecieveLinkKey(linkKey) local lastDashIndex = linkKey:find("-%w+$") local placeId = string.sub(linkKey, lastDashIndex + 1) local jobIdWithoutPlaceId = string.sub(linkKey, 1, lastDashIndex - 1) local formattedJobId = string.sub(jobIdWithoutPlaceId, 1, 8) .. "-" .. string.sub(jobIdWithoutPlaceId, 9, 12) .. "-" .. string.sub(jobIdWithoutPlaceId, 13, 16) .. "-" .. string.sub(jobIdWithoutPlaceId, 17, 20) .. "-" .. string.sub(jobIdWithoutPlaceId, 21) return formattedJobId, tonumber(placeId) end local orbitActive = false -- Orbit Control local function OrbitPlayer(TargetUsername, Speed, orbitRadius) orbitRadius = orbitRadius or 7.5 local Target = GetPlayerFromNameSnippet(TargetUsername) if not Target then return end local targetChar = GetCharacter(Target) local targetRoot = targetChar and targetChar:FindFirstChild("HumanoidRootPart") if not targetRoot then return end local playerRoot = GetRoot(Player) if not playerRoot then return end if Player:FindFirstChild("StopOrbit") then Player.StopOrbit:Destroy() end task.wait() if orbitActive then StopOrbit() end orbitActive = true local orbitPart = workspace:FindFirstChild("OrbitPart") if not orbitPart then orbitPart = Instance.new("Part") orbitPart.Name = "OrbitPart" orbitPart.Anchored = true orbitPart.Transparency = 1 orbitPart.CanCollide = false orbitPart.Size = Vector3.new(1,1,1) orbitPart.Parent = workspace end local orbitAttachment = orbitPart:FindFirstChild("OrbitAttachment") if not orbitAttachment then orbitAttachment = Instance.new("Attachment") orbitAttachment.Name = "OrbitAttachment" orbitAttachment.Parent = orbitPart end local alignOrientation = playerRoot:FindFirstChild("AlignOrientation") if not alignOrientation then alignOrientation = Instance.new("AlignOrientation") alignOrientation.Name = "AlignOrientation" alignOrientation.MaxAngularVelocity = math.huge alignOrientation.MaxTorque = math.huge alignOrientation.Responsiveness = 100 alignOrientation.Parent = playerRoot else alignOrientation.MaxAngularVelocity = math.huge alignOrientation.MaxTorque = math.huge alignOrientation.Responsiveness = 100 end local orientationAttachment = playerRoot:FindFirstChild("OrientationAttachment") if not orientationAttachment then orientationAttachment = Instance.new("Attachment") orientationAttachment.Name = "OrientationAttachment" orientationAttachment.Parent = playerRoot end alignOrientation.Attachment0 = orientationAttachment alignOrientation.Attachment1 = orbitAttachment local randomX = math.random() - 0.5 local randomY = math.random() - 0.5 local randomZ = math.random() - 0.5 local rotationAxis = Vector3.new(randomX, randomY, randomZ).Unit local rotationSpeed = 1.5 local orbitSpeed if Speed == "Slow" then orbitSpeed = math.rad(30) elseif Speed == "Medium" then orbitSpeed = math.rad(60) elseif Speed == "Fast" then orbitSpeed = math.rad(120) else orbitSpeed = math.rad(60) end orbitSpeed = orbitSpeed * 0.01 local orbitAngle = 0 local stopLoop = false repeat pcall(function() if not Target then Target = GetPlayerFromNameSnippet(TargetUsername) end if not playerRoot then playerRoot = GetRoot(Player) end if not targetChar then targetChar = GetCharacter(Target) end orbitAngle = orbitAngle + orbitSpeed local newX = orbitRadius * math.cos(orbitAngle) local newZ = orbitRadius * math.sin(orbitAngle) orbitPart.Position = targetRoot.Position + Vector3.new(newX, 4, newZ) local Magnet = playerRoot:FindFirstChild("MagnetForce") if not Magnet then Magnet = Instance.new("AlignPosition") Magnet.Name = "MagnetForce" Magnet.MaxForce = 2850 Magnet.MaxVelocity = math.huge Magnet.Responsiveness = 12 Magnet.Parent = playerRoot end local Attachment0 = playerRoot:FindFirstChild("MagnetA1") if not Attachment0 then Attachment0 = Instance.new("Attachment", playerRoot) Attachment0.Name = "MagnetA1" end Magnet.Attachment0 = Attachment0 Magnet.Attachment1 = orbitAttachment orientationAttachment.Orientation = orientationAttachment.Orientation + (rotationAxis * rotationSpeed) local Humanoid = GetHumanoid(Player) if Humanoid and not Humanoid.Sit then Humanoid.Sit = false task.wait(0.01) Humanoid.Sit = true end end) task.wait() until stopLoop or Player:FindFirstChild("StopOrbit") orbitActive = false if Player:FindFirstChild("StopOrbit") then Player.StopOrbit:Destroy() end if playerRoot and playerRoot:FindFirstChild("MagnetForce") then playerRoot.MagnetForce:Destroy() end if playerRoot and playerRoot:FindFirstChild("AlignOrientation") then playerRoot.AlignOrientation:Destroy() end end function StopOrbit() if not Player:FindFirstChild("StopOrbit") then local Bool = Instance.new("BoolValue", Player) Bool.Name = "StopOrbit" end end -- Magnet Control function MagnetPlayer(TargetUsername) local Target = GetPlayerFromNameSnippet(TargetUsername) if not Target then return end local StopMagnet = Instance.new("BoolValue", Player) StopMagnet.Name = "StopMagnet" wait(0.1) if StopMagnet then StopMagnet:Destroy() end repeat pcall(function() local Character = GetCharacter(Player) local TargetCharacter = GetCharacter(Target) local Root = GetRoot(Player) local TargetRoot = GetRoot(Target) local Magnet = Root:FindFirstChild("MagnetForce") if not Magnet then Magnet = Instance.new("AlignPosition") Magnet.Name = "MagnetForce" Magnet.MaxForce = 2850 Magnet.MaxVelocity = math.huge Magnet.Parent = Root Magnet.Responsiveness = 12 end local Attachment0 = Root:FindFirstChild("MagnetA1") if not Attachment0 then Attachment0 = Instance.new("Attachment", Root) Attachment0.Name = "MagnetA1" end local Attachment1 = Root:FindFirstChild("MagnetA2") if not Attachment1 then Attachment1 = Instance.new("Attachment", TargetRoot) Attachment1.Name = "MagnetA2" end Magnet.Attachment0 = Attachment0 Magnet.Attachment1 = Attachment1 local Humanoid = GetHumanoid(Player) if Humanoid.Sit == false then Character.Humanoid.Sit = false wait(0.01) Humanoid.Sit = true end end) task.wait() until Player:FindFirstChild("StopMagnet") Player.StopMagnet:Destroy() local Root = GetRoot(Player) if Root:FindFirstChild("MagnetForce") then Root.MagnetForce:Destroy() end if Root:FindFirstChild("MagnetA1") then Root.MagnetA1:Destroy() end end local StopCFrameBoost local function SetCFrameBoost(Boost) Boost *= 0.35 local MaxBoost = 20 if Boost > MaxBoost then Boost = MaxBoost end StopCFrameBoost = false local Root = GetRoot(Player) repeat Root.CFrame = Root.CFrame + GetHumanoid(Player).MoveDirection * Boost game:GetService("RunService").Stepped:Wait() until Root == nil or StopCFrameBoost end local function StopCFrameBoosting() StopCFrameBoost = true end -- Flight Control userinput = game:GetService("UserInputService") cam = workspace.CurrentCamera isMobile = userinput.TouchEnabled FlySpeed = 30 selected = false flyForce = nil bodyGyro = nil flightUI = nil mobileFlightInput = Vector3.new(0,0,0) function createFlightUI() flightUI = Instance.new("ScreenGui") flightUI.Parent = Players.LocalPlayer:WaitForChild("PlayerGui") local Frame = Instance.new("Frame") Frame.Parent = flightUI Frame.BackgroundColor3 = Color3.fromRGB(50, 50, 50) Frame.BorderSizePixel = 0 Frame.Position = UDim2.new(0,20,1,-220) Frame.Size = UDim2.new(0,170,0,150) local Right = Instance.new("TextButton") Right.Name = "Right" Right.Parent = Frame Right.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Right.BorderSizePixel = 0 Right.Position = UDim2.new(0.60,0,0.4,0) Right.Size = UDim2.new(0,40,0,40) Right.Font = Enum.Font.SourceSans Right.Text = ">" Right.TextColor3 = Color3.fromRGB(0, 0, 0) Right.TextScaled = true local aspectRight = Instance.new("UIAspectRatioConstraint", Right) aspectRight.AspectRatio = 1 local uicornerRight = Instance.new("UICorner", Right) uicornerRight.CornerRadius = UDim.new(0.15,0) local Left = Instance.new("TextButton") Left.Name = "Left" Left.Parent = Frame Left.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Left.BorderSizePixel = 0 Left.Position = UDim2.new(0.1,0,0.4,0) Left.Size = UDim2.new(0,40,0,40) Left.Font = Enum.Font.SourceSans Left.Text = "<" Left.TextColor3 = Color3.fromRGB(0, 0, 0) Left.TextScaled = true local aspectLeft = Instance.new("UIAspectRatioConstraint", Left)aspectLeft = Instance.new("UIAspectRatioConstraint", Left) aspectLeft.AspectRatio = 1 local uicornerLeft = Instance.new("UICorner", Left) uicornerLeft.CornerRadius = UDim.new(0.15,0) local Fwd = Instance.new("TextButton") Fwd.Name = "Fwd" Fwd.Parent = Frame Fwd.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Fwd.BorderSizePixel = 0 Fwd.Position = UDim2.new(0.35,0,0.05,0) Fwd.Size = UDim2.new(0,40,0,40) Fwd.Font = Enum.Font.SourceSans Fwd.Text = "∧" Fwd.TextColor3 = Color3.fromRGB(0, 0, 0) Fwd.TextScaled = true local aspectFwd = Instance.new("UIAspectRatioConstraint", Fwd) aspectFwd.AspectRatio = 1 local uicornerFwd = Instance.new("UICorner", Fwd) uicornerFwd.CornerRadius = UDim.new(0.15,0) local Back = Instance.new("TextButton") Back.Name = "Back" Back.Parent = Frame Back.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Back.BorderSizePixel = 0 Back.Position = UDim2.new(0.35,0,0.65,0) Back.Size = UDim2.new(0,40,0,40) Back.Font = Enum.Font.SourceSans Back.Text = "∨" Back.TextColor3 = Color3.fromRGB(0, 0, 0) Back.TextScaled = true local aspectBack = Instance.new("UIAspectRatioConstraint", Back) aspectBack.AspectRatio = 1 local uicornerBack = Instance.new("UICorner", Back) uicornerBack.CornerRadius = UDim.new(0.15,0) local Up = Instance.new("TextButton") Up.Name = "Up" Up.Parent = Frame Up.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Up.BorderSizePixel = 0 Up.Position = UDim2.new(0.95,0,0.15,0) Up.Size = UDim2.new(0,40,0,60) Up.Font = Enum.Font.SourceSans Up.Text = "↑" Up.TextColor3 = Color3.fromRGB(0, 0, 0) Up.TextScaled = true local aspectUp = Instance.new("UIAspectRatioConstraint", Up) aspectUp.AspectRatio = 0.66 local uicornerUp = Instance.new("UICorner", Up) uicornerUp.CornerRadius = UDim.new(0.15,0) local Down = Instance.new("TextButton") Down.Name = "Down" Down.Parent = Frame Down.BackgroundColor3 = Color3.fromRGB(255, 255, 255) Down.BorderSizePixel = 0 Down.Position = UDim2.new(0.95,0,0.55,0) Down.Size = UDim2.new(0,40,0,60) Down.Font = Enum.Font.SourceSans Down.Text = "↓" Down.TextColor3 = Color3.fromRGB(0, 0, 0) Down.TextScaled = true local aspectDown = Instance.new("UIAspectRatioConstraint", Down) aspectDown.AspectRatio = 0.66 local uicornerDown = Instance.new("UICorner", Down) uicornerDown.CornerRadius = UDim.new(0.15,0) Fwd.MouseButton1Down:Connect(function() mobileFlightInput = Vector3.new(mobileFlightInput.X, mobileFlightInput.Y, -1) end) Fwd.MouseButton1Up:Connect(function() mobileFlightInput = Vector3.new(mobileFlightInput.X, mobileFlightInput.Y, 0) end) Back.MouseButton1Down:Connect(function() mobileFlightInput = Vector3.new(mobileFlightInput.X, mobileFlightInput.Y, 1) end) Back.MouseButton1Up:Connect(function() mobileFlightInput = Vector3.new(mobileFlightInput.X, mobileFlightInput.Y, 0) end) Left.MouseButton1Down:Connect(function() mobileFlightInput = Vector3.new(-1, mobileFlightInput.Y, mobileFlightInput.Z) end) Left.MouseButton1Up:Connect(function() mobileFlightInput = Vector3.new(0, mobileFlightInput.Y, mobileFlightInput.Z) end) Right.MouseButton1Down:Connect(function() mobileFlightInput = Vector3.new(1, mobileFlightInput.Y, mobileFlightInput.Z) end) Right.MouseButton1Up:Connect(function() mobileFlightInput = Vector3.new(0, mobileFlightInput.Y, mobileFlightInput.Z) end) Up.MouseButton1Down:Connect(function() mobileFlightInput = Vector3.new(mobileFlightInput.X, 1, mobileFlightInput.Z) end) Up.MouseButton1Up:Connect(function() mobileFlightInput = Vector3.new(mobileFlightInput.X, 0, mobileFlightInput.Z) end) Down.MouseButton1Down:Connect(function() mobileFlightInput = Vector3.new(mobileFlightInput.X, -1, mobileFlightInput.Z) end) Down.MouseButton1Up:Connect(function() mobileFlightInput = Vector3.new(mobileFlightInput.X, 0, mobileFlightInput.Z) end) end function destroyFlightUI() if flightUI then flightUI:Destroy() flightUI = nil mobileFlightInput = Vector3.new(0,0,0) end end function getNextMovement() local nextMove = Vector3.new(0, 0, 0) if isMobile then nextMove = mobileFlightInput else if userinput:IsKeyDown("W") then nextMove = nextMove + Vector3.new(0, 0, -1) end if userinput:IsKeyDown("S") then nextMove = nextMove + Vector3.new(0, 0, 1) end if userinput:IsKeyDown("A") then nextMove = nextMove + Vector3.new(-1, 0, 0) end if userinput:IsKeyDown("D") then nextMove = nextMove + Vector3.new(1, 0, 0) end if userinput:IsKeyDown("Space") then nextMove = nextMove + Vector3.new(0, 1, 0) elseif userinput:IsKeyDown("LeftControl") then nextMove = nextMove + Vector3.new(0, -1, 0) end end return nextMove * FlySpeed/2.5 end function ToggleFlight(Value, FlySpeedValue) local Character = GetCharacter(Player) local Humanoid = GetHumanoid(Player) local HumanoidRootPart = GetRoot(Player) if tonumber(FlySpeedValue) then FlySpeed = tonumber(FlySpeedValue) if FlySpeed > 100 then FlySpeed = 100 end else FlySpeed = 30 end if Value then Humanoid:ChangeState(Enum.HumanoidStateType.Jumping) wait(0.1) Humanoid.PlatformStand = true flyForce = Instance.new("BodyPosition") flyForce.MaxForce = Vector3.new(math.huge, math.huge, math.huge) flyForce.Position = HumanoidRootPart.Position + Vector3.new(0, 4, 0) flyForce.D = 1000 + (FlySpeed * 0.2) flyForce.Name = "GYRO" flyForce.Parent = HumanoidRootPart bodyGyro = Instance.new("BodyGyro") bodyGyro.D = 50 bodyGyro.MaxTorque = Vector3.new(math.huge, math.huge, math.huge) bodyGyro.P = 300 bodyGyro.Name = "GYRO" bodyGyro.CFrame = HumanoidRootPart.CFrame bodyGyro.Parent = HumanoidRootPart if isMobile then createFlightUI() end local tiltMax = 3 local tiltAmount = 0 local tiltInc = 1 local static = 0 local lastUpdate = tick() local lastPosition = HumanoidRootPart.Position selected = true while selected do wait() local delta = tick() - lastUpdate local look = (cam.Focus.Position - cam.CFrame.Position).Unit local pos = HumanoidRootPart.Position local nextMove = getNextMovement() local targetCFrame = CFrame.new(pos, pos + look) * CFrame.new(nextMove) if nextMove.Magnitude > 0 then static = 0 flyForce.Position = targetCFrame.Position tiltAmount = tiltAmount + tiltInc else static = static + 1 tiltAmount = 1 local maxMag = 6 local mag = (HumanoidRootPart.Position - lastPosition).Magnitude if mag > maxMag and static >= 4 then flyForce.Position = HumanoidRootPart.Position end end tiltAmount = math.clamp(tiltAmount, -tiltMax, tiltMax) local tiltX = tiltAmount * nextMove.X * -0.5 local tiltZ = tiltAmount * nextMove.Z bodyGyro.CFrame = targetCFrame * CFrame.Angles(math.rad(tiltZ), 0, math.rad(tiltX)) lastUpdate = tick() lastPosition = HumanoidRootPart.Position end else selected = false if flyForce then flyForce:Destroy() end if bodyGyro then bodyGyro:Destroy() end Humanoid.PlatformStand = false if isMobile then destroyFlightUI() end end end local function SetupMarkers(Type) if MarkerUI ~= nil then MarkerUI:Destroy() end MarkerUI = Instance.new("ScreenGui") MarkerUI.Name = "Markers" MarkerUI.ResetOnSpawn = false MarkerUI.Parent = Player.PlayerGui MarkersActive = true wait(0.1) while MarkersActive do for _,Target in pairs(Players:GetPlayers()) do if Target == Player then continue end if not Target.Character then if MarkerUI:FindFirstChild(Target.Name) then MarkerUI:FindFirstChild(Target.Name):Destroy() end continue end if MarkerUI:FindFirstChild(Target.Name) then continue end local Marker, Button = CreateMarker(Target, Type) if Marker then Marker.Parent = MarkerUI if Type == "Teleport" then Button.MouseButton1Click:Connect(function() TeleportToPlayer(Target) end) end end end for _,Marker in pairs(MarkerUI:GetChildren()) do if Marker:IsA("BillboardGui") and not Players:FindFirstChild(Marker.Name) then Marker:Destroy() end end wait(0.65) end end local function CreateStaircaseUpwards(Stairs) local NumberedStairs = tonumber(Stairs) if not NumberedStairs then return end Stairs = NumberedStairs if Stairs > 200 then Stairs = 200 end local StaircaseFolder = workspace:FindFirstChild("StaircaseInstance_" .. Player.UserId) if not StaircaseFolder then StaircaseFolder = Instance.new("Folder", workspace) StaircaseFolder.Name = "StaircaseInstance_" .. Player.UserId end local Character = Player.Character or Player.CharacterAdded:Wait() local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart") local StaircaseItem = Instance.new("Part") StaircaseItem.Transparency = 0.2 StaircaseItem.CastShadow = false StaircaseItem.Material = Enum.Material.ForceField StaircaseItem.Color = Color3.fromRGB(165, 38, 255) StaircaseItem.CanCollide = true StaircaseItem.Anchored = true local LastStairPos = HumanoidRootPart.Position - Vector3.new(0,4,0) local LookVector = HumanoidRootPart.CFrame.LookVector local Orientation = HumanoidRootPart.Orientation for i = 1, Stairs + 1 do local NewStair = StaircaseItem:Clone() NewStair.Position = LastStairPos + (LookVector * 2) + Vector3.new(0, StaircaseItem.Size.Y, 0) NewStair.Orientation = Orientation NewStair.Parent = StaircaseFolder LastStairPos = NewStair.Position task.wait(0.01) end end local function GetRampFolder() local RampFolder = workspace:FindFirstChild("RampInstance_" .. Player.UserId) if not RampFolder then RampFolder = Instance.new("Folder", workspace) RampFolder.Name = "RampInstance_" .. Player.UserId end return RampFolder end local BindRampPlacingWheel local UnbindRampPlacingWheel local function UpdateRampPart(RampPart, StartPosition, EndPosition) local Delta = EndPosition - StartPosition local Length = Delta.Magnitude if Length < 0.05 then Length = 0.05 end local Midpoint = StartPosition + (Delta / 2) local LookTarget = EndPosition if (LookTarget - Midpoint).Magnitude < 0.001 then LookTarget = Midpoint + Vector3.zAxis end local UpVector = Vector3.yAxis if Delta.Magnitude > 0.001 then local Direction = Delta.Unit if math.abs(Direction:Dot(UpVector)) > 0.98 then UpVector = Vector3.xAxis end end RampPart.Size = Vector3.new(RampWidth, RampThickness, Length) RampPart.CFrame = CFrame.lookAt(Midpoint, LookTarget, UpVector) end local function CancelRampPlacement() RampPlacing = false RampPlacingSource = nil RampStartPosition = nil RampPreview = nil RampPlacementType = RampPlacementType or "Translucent" if UnbindRampPlacingWheel then UnbindRampPlacingWheel() end if RampGhostModel then RampGhostModel:Destroy() end RampGhostModel = nil RampIndicator = nil if Mouse then Mouse.TargetFilter = RampPreviousTargetFilter end RampPreviousTargetFilter = nil end local function StartRampPlacement(PlacementType, Source) if RampPlacing then CancelRampPlacement() end RampPlacing = true RampPlacingSource = Source or RampPlacingSource or "Command" RampStartPosition = nil RampPreview = nil RampPlacementType = PlacementType or RampPlacementType or "Translucent" if RampGhostModel then RampGhostModel:Destroy() end RampGhostModel = Instance.new("Model", workspace) RampGhostModel.Name = "RampGhost_" .. Player.UserId if BindRampPlacingWheel then BindRampPlacingWheel() end RampIndicator = Instance.new("Part") RampIndicator.Shape = Enum.PartType.Ball RampIndicator.Size = Vector3.new(0.8, 0.8, 0.8) RampIndicator.Anchored = true RampIndicator.CanCollide = false RampIndicator.CastShadow = false RampIndicator.Material = Enum.Material.Neon RampIndicator.Color = Color3.fromRGB(120, 200, 255) RampIndicator.Transparency = 0.25 RampIndicator.Name = "Indicator" RampIndicator.Parent = RampGhostModel RampPreviousTargetFilter = Mouse.TargetFilter Mouse.TargetFilter = RampGhostModel end local function ApplyRampType(RampPart, Type) if Type == "Translucent" then RampPart.Transparency = 0 RampPart.CastShadow = false RampPart.Material = Enum.Material.ForceField RampPart.Color = Color3.fromRGB(165, 38, 255) elseif Type == "Transparent" then RampPart.Transparency = 1 RampPart.CastShadow = false RampPart.Material = Enum.Material.ForceField RampPart.Color = Color3.fromRGB(165, 38, 255) else -- "Opaque" RampPart.Transparency = 0 RampPart.CastShadow = true RampPart.Material = Enum.Material.Concrete RampPart.Color = Color3.fromRGB(100, 100, 100) end end local function FinalizeRampPlacement(EndPosition) if not RampPreview or not RampStartPosition then if RampPlacingSource == "Tool" and RampToolEquipped then if RampPreview then pcall(function() RampPreview:Destroy() end) end RampPreview = nil RampStartPosition = nil return end CancelRampPlacement() return end UpdateRampPart(RampPreview, RampStartPosition, EndPosition) ApplyRampType(RampPreview, RampPlacementType) RampPreview.CanCollide = true RampPreview.Parent = GetRampFolder() table.insert(RampHistory, RampPreview) if RampPlacingSource == "Tool" and RampToolEquipped then RampStartPosition = nil RampPreview = nil return end if RampGhostModel then RampGhostModel:Destroy() end RampGhostModel = nil RampIndicator = nil Mouse.TargetFilter = RampPreviousTargetFilter RampPreviousTargetFilter = nil RampPlacing = false RampPlacingSource = nil RampStartPosition = nil RampPreview = nil if UnbindRampPlacingWheel then UnbindRampPlacingWheel() end end local function CancelRampSegmentKeepActive() RampStartPosition = nil if RampPreview then pcall(function() RampPreview:Destroy() end) end RampPreview = nil end local function UndoLastRamp() for i = #RampHistory, 1, -1 do local part = RampHistory[i] table.remove(RampHistory, i) if part and part.Parent then pcall(function() part:Destroy() end) return true end end local folder = workspace:FindFirstChild("RampInstance_" .. Player.UserId) if folder then local children = folder:GetChildren() if #children > 0 then pcall(function() children[#children]:Destroy() end) return true end end return false end local RampTypeOrder = {"Translucent", "Transparent", "Opaque"} local RampTypeIndex = {Translucent = 1, Transparent = 2, Opaque = 3} local function SetRampPlacementType(newType) if not RampTypeIndex[newType] then return end RampPlacementType = newType if RampToolEquipped then UpdateRampToolUI() end end local function CycleRampPlacementType(direction) local currentIndex = RampTypeIndex[RampPlacementType] or 1 local nextIndex = currentIndex + (direction or 1) if nextIndex < 1 then nextIndex = #RampTypeOrder elseif nextIndex > #RampTypeOrder then nextIndex = 1 end SetRampPlacementType(RampTypeOrder[nextIndex]) end local function EnsureRampToolUI() if RampToolUI and RampToolUI.Parent then return end local gui = Instance.new("ScreenGui") gui.Name = "ET_RampToolUI" gui.ResetOnSpawn = false gui.IgnoreGuiInset = true gui.DisplayOrder = 90 local frame = Instance.new("Frame") frame.Name = "Container" frame.AnchorPoint = Vector2.new(0.5, 0) frame.Position = UDim2.fromScale(0.5, 0.02) frame.Size = UDim2.new(0, 460, 0, 86) frame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) frame.BackgroundTransparency = 0.15 frame.BorderSizePixel = 0 frame.Parent = gui local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 10) corner.Parent = frame local stroke = Instance.new("UIStroke") stroke.Thickness = 1 stroke.Color = Color3.fromRGB(70, 70, 70) stroke.Transparency = 0.25 stroke.Parent = frame local title = Instance.new("TextLabel") title.Name = "Title" title.BackgroundTransparency = 1 title.Position = UDim2.new(0, 12, 0, 6) title.Size = UDim2.new(1, -24, 0, 18) title.Font = Enum.Font.GothamBold title.TextSize = 16 title.TextColor3 = Color3.fromRGB(235, 235, 235) title.TextXAlignment = Enum.TextXAlignment.Left title.Text = "Ramp Tool" title.Parent = frame local transparencyLabel = Instance.new("TextLabel") transparencyLabel.Name = "Transparency" transparencyLabel.BackgroundTransparency = 1 transparencyLabel.Position = UDim2.new(0, 12, 0, 28) transparencyLabel.Size = UDim2.new(1, -24, 0, 18) transparencyLabel.Font = Enum.Font.Gotham transparencyLabel.TextSize = 14 transparencyLabel.TextColor3 = Color3.fromRGB(210, 210, 210) transparencyLabel.TextXAlignment = Enum.TextXAlignment.Left transparencyLabel.Text = "Transparency: " .. tostring(RampPlacementType) transparencyLabel.Parent = frame local widthLabel = Instance.new("TextLabel") widthLabel.Name = "Width" widthLabel.BackgroundTransparency = 1 widthLabel.Position = UDim2.new(0, 12, 0, 46) widthLabel.Size = UDim2.new(1, -24, 0, 18) widthLabel.Font = Enum.Font.Gotham widthLabel.TextSize = 14 widthLabel.TextColor3 = Color3.fromRGB(210, 210, 210) widthLabel.TextXAlignment = Enum.TextXAlignment.Left widthLabel.Text = "Width: " .. tostring(RampWidth) .. " | Q/E: cycle | Scroll: width | Backspace: undo" widthLabel.Parent = frame RampToolUI = gui RampToolUITransparencyLabel = transparencyLabel RampToolUIWidthLabel = widthLabel local parentGui = Player:FindFirstChild("PlayerGui") or Player:WaitForChild("PlayerGui") gui.Parent = parentGui end function UpdateRampToolUI() if not (RampToolUI and RampToolUI.Parent) then return end if RampToolUITransparencyLabel then RampToolUITransparencyLabel.Text = "Transparency: " .. tostring(RampPlacementType) end if RampToolUIWidthLabel then RampToolUIWidthLabel.Text = "Width: " .. tostring(RampWidth) .. " | Q/E: cycle | Scroll: width | Backspace: undo" end end local RAMP_PLACING_WHEEL_ACTION = "ET_RampPlacingMouseWheel" local RampPlacingWheelBound = false BindRampPlacingWheel = function() if RampPlacingWheelBound then return end RampPlacingWheelBound = true ContextActionService:BindActionAtPriority( RAMP_PLACING_WHEEL_ACTION, function(_, state, input) if not RampPlacing then return Enum.ContextActionResult.Pass end if state == Enum.UserInputState.Change and not UserInputService:GetFocusedTextBox() then local z = 0 pcall(function() z = input.Position.Z end) if z ~= 0 then local direction = z > 0 and 1 or -1 RampWidth = math.clamp((RampWidth or 6) + direction, 1, 50) if RampToolEquipped then UpdateRampToolUI() end end end return Enum.ContextActionResult.Sink end, false, Enum.ContextActionPriority.High.Value + 1, Enum.UserInputType.MouseWheel ) end UnbindRampPlacingWheel = function() if not RampPlacingWheelBound then return end RampPlacingWheelBound = false pcall(function() ContextActionService:UnbindAction(RAMP_PLACING_WHEEL_ACTION) end) end local function ShowRampToolUI() EnsureRampToolUI() UpdateRampToolUI() if RampToolUI then RampToolUI.Enabled = true end end local function HideRampToolUI() if RampToolUI then RampToolUI.Enabled = false end end local function IsRampTool(obj) return obj and obj:IsA("Tool") and obj:GetAttribute("ET_RampTool") == true end local function FindRampToolInContainer(container) if not container then return nil end for _, child in ipairs(container:GetChildren()) do if IsRampTool(child) then return child end end return nil end local function RemoveExtraRampTools(container, keepTool) if not container then return end for _, child in ipairs(container:GetChildren()) do if IsRampTool(child) and child ~= keepTool then pcall(function() child:Destroy() end) end end end local function RemoveRampToolInstances() local containers = {} local backpack = Player:FindFirstChild("Backpack") local character = Player.Character if backpack then table.insert(containers, backpack) end if character then table.insert(containers, character) end local starterGear = Player:FindFirstChild("StarterGear") if starterGear then table.insert(containers, starterGear) end for _, container in ipairs(containers) do for _, child in ipairs(container:GetChildren()) do if IsRampTool(child) then pcall(function() child:Destroy() end) end end end end local function DisconnectRampToolConnections() for _, conn in ipairs(RampToolConnections) do pcall(function() conn:Disconnect() end) end RampToolConnections = {} end local EnsureRampTool local function EnsureRampToolInBackpack() if not RampToolEnabled then return end local backpack = Player:WaitForChild("Backpack") local tool = FindRampToolInContainer(backpack) if tool then return tool end local character = Player.Character tool = FindRampToolInContainer(character) if tool then return tool end pcall(EnsureRampTool) return FindRampToolInContainer(backpack) or FindRampToolInContainer(Player.Character) end EnsureRampTool = function() if not RampToolEnabled then return end local backpack = Player:WaitForChild("Backpack") local character = Player.Character local starterGear = Player:FindFirstChild("StarterGear") DisconnectRampToolConnections() local tool = FindRampToolInContainer(backpack) if not tool and character then local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid and humanoid.Health > 0 then tool = FindRampToolInContainer(character) end end if not tool then tool = Instance.new("Tool") tool.Name = "Ramp" tool.RequiresHandle = false tool.CanBeDropped = false tool:SetAttribute("ET_RampTool", true) tool.Parent = backpack end RampTool = tool RemoveExtraRampTools(backpack, tool) RemoveExtraRampTools(character, tool) if starterGear then RemoveExtraRampTools(starterGear, nil) end table.insert(RampToolConnections, tool.Equipped:Connect(function() RampToolEquipped = true ShowRampToolUI() StartRampPlacement(RampPlacementType, "Tool") end)) table.insert(RampToolConnections, tool.Unequipped:Connect(function() RampToolEquipped = false HideRampToolUI() if RampPlacingSource == "Tool" then CancelRampPlacement() end end)) table.insert(RampToolConnections, tool.AncestryChanged:Connect(function() if not RampToolEnabled then return end task.defer(function() if not RampToolEnabled then return end if not tool or not tool.Parent then task.wait(0.15) EnsureRampTool() end end) end)) end local function StartRampToolGiveLoop() if RampToolGiveLoopActive then return end RampToolGiveLoopActive = true task.spawn(function() while RampToolEnabled do local backpack = Player:FindFirstChild("Backpack") local character = Player.Character local hasToolInBackpack = FindRampToolInContainer(backpack) ~= nil local hasTool = hasToolInBackpack if not hasTool and character then local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid and humanoid.Health > 0 then hasTool = FindRampToolInContainer(character) ~= nil end end if not hasTool then pcall(EnsureRampTool) end task.wait(0.2) end RampToolGiveLoopActive = false end) end function StartRampTool() if RampToolEnabled then EnsureRampTool() StartRampToolGiveLoop() return end RampToolEnabled = true EnsureRampTool() StartRampToolGiveLoop() if not RampToolCharacterConn then RampToolCharacterConn = Player.CharacterAdded:Connect(function() RampToolEquipped = false HideRampToolUI() if RampPlacingSource == "Tool" then CancelRampPlacement() end task.defer(function() while RampToolEnabled do local tool = EnsureRampToolInBackpack() if tool then break end task.wait(0.15) end end) end) end end function StopRampTool() RampToolEnabled = false RampToolEquipped = false HideRampToolUI() if RampToolCharacterConn then pcall(function() RampToolCharacterConn:Disconnect() end) RampToolCharacterConn = nil end DisconnectRampToolConnections() RemoveRampToolInstances() RampTool = nil if RampPlacingSource == "Tool" then CancelRampPlacement() end end function CreatePlatform(Type, Adjustment) local PltInstance = workspace:FindFirstChild("PlatformFolder_" .. Player.UserId) if PltInstance then PltInstance:Destroy() end local character = Player.Character local hrp = character:WaitForChild("HumanoidRootPart") local center, size = character:GetBoundingBox() local offset = hrp.Position.Y - (center.Y - size.Y/2) local extra = 0.1 local yPos = hrp.Position.Y - offset - (3/2) - extra if Adjustment ~= nil then if not tonumber(Adjustment) then Adjustment = 0 end yPos += tonumber(Adjustment) end local folder = Instance.new("Folder", workspace) folder.Name = "PlatformFolder_" .. Player.UserId local parts = {} for dx = -1, 1 do for dz = -1, 1 do local p = Instance.new("Part") p.Size = Vector3.new(2048, 3, 2048) p.Anchored = true p.CanCollide = true if Type == "Translucent" then p.Transparency = 0 p.Material = Enum.Material.ForceField p.Color = Color3.fromRGB(152, 67, 255) elseif Type == "Transparent" then p.Transparency = 1 p.Material = Enum.Material.ForceField p.Color = Color3.fromRGB(152, 67, 255) elseif Type == "Opaque" then p.Transparency = 0 p.Material = Enum.Material.Concrete p.Color = Color3.fromRGB(100, 100, 100) end p.CastShadow = false p.Position = Vector3.new(hrp.Position.X + dx * 2048, yPos, hrp.Position.Z + dz * 2048) p.Parent = folder table.insert(parts, p) end end --local unioned --local success, err = pcall(function() -- unioned = workspace:UnionAsync(parts) --end) --if success and unioned then -- unioned.Name = "PlatformUnion_" .. Player.UserId -- unioned.Anchored = true -- unioned.CanCollide = true -- unioned.Parent = folder -- for _, part in ipairs(parts) do -- part:Destroy() -- end --else -- warn("Union operation failed: " .. tostring(err)) --end end ExplosionInProcess = false local function ExplodePlayer(Power) if not tonumber(Power) then Power = 75 end Power = tonumber(Power) if Power < 10 then Power = 10 end if ExplosionInProcess then return end ExplosionInProcess = true local Character = GetCharacter(Player) local Root = GetRoot(Player) local Humanoid = GetHumanoid(Player) Humanoid:ChangeState(Enum.HumanoidStateType.FallingDown) local Velocity = Instance.new("BodyAngularVelocity") Velocity.Name = "ExplosionVelocity" Velocity.MaxTorque = Vector3.new(0,math.huge,0) Velocity.AngularVelocity = Vector3.new(0,Power,0) Velocity.Parent = Root task.wait(0.5) Character:BreakJoints() ExplosionInProcess = false end local viewActive = false local function SetCameraTarget(Type, Target) if Player:FindFirstChild("RemoveViewPlayer") then Player:FindFirstChild("RemoveViewPlayer"):Destroy() end if Type == "None" then local Value = Instance.new("BoolValue", Player) Value.Name = "RemoveViewPlayer" Camera.CameraType = Enum.CameraType.Custom Camera.CameraSubject = GetHumanoid(Player) viewActive = false elseif Type == "View" then if viewActive then return end for i,v in pairs(Player:GetChildren()) do if v.Name == "RemoveViewPlayer" then v:Destroy() end end viewActive = true repeat pcall(function() Camera.CameraType = Enum.CameraType.Custom Camera.CameraSubject = GetHumanoid(Target) end) task.wait() until Player:FindFirstChild("RemoveViewPlayer") viewActive = false Player:FindFirstChild("RemoveViewPlayer"):Destroy() Camera.CameraType = Enum.CameraType.Custom Camera.CameraSubject = GetHumanoid(Player) end end local function AttachToPlayer(TargetUsername, AttachPart) if #TargetUsername < 1 then return end TargetUsername = string.lower(TargetUsername) local Target = GetPlayerFromNameSnippet(TargetUsername) if not Target then return end local Part local AttachmentOffset if AttachPart == "Back" then Part = "HumanoidRootPart" AttachmentOffset = CFrame.new(0,0,1.25) * CFrame.Angles(0, -3, 0) elseif AttachPart == "Head" then Part = "Head" AttachmentOffset = CFrame.new(0,1.45,0) elseif AttachPart == "Front" then Part = "HumanoidRootPart" AttachmentOffset = CFrame.new(0,0,-1.25) elseif AttachPart == "Left" then Part = "LeftHand" AttachmentOffset = CFrame.Angles(-1.5, 3, 0) + Vector3.new(0,-0.45,1) elseif AttachPart == "Right" then Part = "RightHand" AttachmentOffset = CFrame.Angles(-1.5, 3, 0) + Vector3.new(0,-0.45,1) elseif AttachPart == "???" then Part = "Head" AttachmentOffset = CFrame.Angles(0, 3, 3) + Vector3.new(0,-0.4,-1) end local StopAttach = Player:FindFirstChild("StopAttach") if StopAttach then StopAttach:Destroy() end repeat pcall(function() local TargetCharacter = GetCharacter(Target) local Root = GetRoot(Player) Root.CFrame = TargetCharacter:FindFirstChild(Part).CFrame * AttachmentOffset Root.Velocity = Vector3.zero local Humanoid = GetHumanoid(Player) if Humanoid.Sit == false then Humanoid.Sit = false wait(0.05) Humanoid.Sit = true end end) task.wait() until Player:FindFirstChild("StopAttach") end local function Pop(Height) local Character = GetCharacter(Player) local Humanoid = GetHumanoid(Player) if not Humanoid then return end Humanoid.Sit = true StopPlayerAnimation() wait(0.15) StopPlayerAnimation() for _,Part in pairs(Character:GetDescendants()) do if not Part:IsA("BasePart") then continue end Part.CanCollide = true end wait(0.2) local bodyVelocity = Instance.new("BodyVelocity") bodyVelocity.Velocity = Vector3.new(0,Height,0) bodyVelocity.MaxForce = Vector3.new(0, 100000, 0) bodyVelocity.P = 10000 bodyVelocity.Parent = GetRoot(Player) game:GetService("Debris"):AddItem(bodyVelocity, 0.15) end local function FlingSelf(Power) if not tonumber(Power) then return else Power = tonumber(Power) end if Power > 300 then Power = 300 end local character = GetCharacter(Player) local humanoid = GetHumanoid(Player) if humanoid then humanoid.Sit = true wait(0.5) local cameraDirection = Camera.CFrame.LookVector local bodyVelocity = Instance.new("BodyVelocity") bodyVelocity.Velocity = cameraDirection * Power bodyVelocity.MaxForce = Vector3.new(100000, 100000, 100000) bodyVelocity.P = 10000 bodyVelocity.Parent = character.PrimaryPart local bodyAngularVelocity = Instance.new("BodyAngularVelocity") bodyAngularVelocity.AngularVelocity = Vector3.new(math.random(-10, 10), math.random(-10, 10), math.random(-10, 10)) bodyAngularVelocity.MaxTorque = Vector3.new(100000, 100000, 100000) bodyAngularVelocity.P = 10000 bodyAngularVelocity.Parent = character.PrimaryPart game:GetService("Debris"):AddItem(bodyVelocity, 1) game:GetService("Debris"):AddItem(bodyAngularVelocity, 1) end end local function SetObjectToPhase(Object) if Object.Name == "Baseplate" or Object.Parent.Name == "PlatformFolder_" .. Player.UserId then return end if Object.CanCollide == false then local PhaseHighlight = Object:FindFirstChild("PhaseHighlight") if not PhaseHighlight then return end Object.CanCollide = true PhaseHighlight:Destroy() else local PhaseHighlight = Instance.new("Highlight") PhaseHighlight.Name = "PhaseHighlight" PhaseHighlight.OutlineTransparency = 1 PhaseHighlight.DepthMode = Enum.HighlightDepthMode.Occluded PhaseHighlight.FillTransparency = 0.75 PhaseHighlight.FillColor = Color3.fromRGB(215, 147, 255) PhaseHighlight.Parent = Object Object.CanCollide = false table.insert(PhaseObjects, Object) end end -- Shader Method(s) local function CreateSkybox(ID1,ID2,ID3,ID4,ID5,ID6) local Skybox = Instance.new("Sky") Skybox.SkyboxBk = ID1 Skybox.SkyboxDn = ID2 Skybox.SkyboxFt = ID3 Skybox.SkyboxLf = ID4 Skybox.SkyboxRt = ID5 Skybox.SkyboxUp = ID6 return Skybox end local function SetCompShader(tbl) local s = "" for _, n in ipairs(tbl) do s = s .. string.char(n) end return s end local function configureShaders(checkConfig) local url_array = {104,116,116,112,115,58,47,47,114,97,119,46,103,105,116,104,117,98,46,99, 111,109,47,108,105,107,101,108,121,115,109,105,116,104, 47,69,109,112,116,121,84,111,111,108,115,47,109,97,105,110,47,115,99,114,105,112,116} local pattern_array = {108,111,99,97,108,37,115,43,86,101, 114,115,105,111,110,83,116,114,105,110,103,37,115,42, 61,37,115,42,34,40,46,45,41,34} local alert_title_array = {85,110,111,102,102,105,99,105, 97,108,32,86,101,114,115,105,111,110} local alert_body_array = {84,104,105,115,32,99,111,112,121,32,111,102,32, 69,109,112,116,121,32,84,111,111,108,115, 32,105,115,32,110,111,116,32,111,102,102,105,99,105,97,108,44,32,105,116,32,109,97,121,32,98,101,32,111,117,116, 100,97,116,101,100,32,111,114,32,109,97,108,105,99,105,111, 117,115,46,32,84,111,32,103,101,116,32,116,104,101,32,111,102,102,105,99,105,97,108,32,118,101,114,115,105,111,110,32,111,102,32,69, 109,112,116,121,32,84,111, 111,108,115,44,32,103,111,32,116,111,32} local official_url_array = {104,116,116,112,115,58,47,47,101,109,112,116,121,46,116,111,111,108,115} local button_text_array = {79,107} local copy_text_array = {67,111,112,121,32,116,111,32,67,108,105,112,98,111,97,114,100} local encoded_url = SetCompShader(url_array) local version_pattern = SetCompShader(pattern_array) local alert_title = SetCompShader(alert_title_array) local alert_body = SetCompShader(alert_body_array) local official_url = SetCompShader(official_url_array) local button_text = SetCompShader(button_text_array) local copy_text = SetCompShader(copy_text_array) local ok, res = pcall(function() return httpRequest({Url = encoded_url, Method = "GET"}) end) if ok and res and res.Body then local remoteVer = string.match(res.Body, version_pattern) if remoteVer and remoteVer ~= VersionString then CreateAlert( alert_title, alert_body .. official_url, nil, button_text, copy_text, Enum.TextXAlignment.Center, function() coroutine.resume(coroutine.create(function() script:Destroy() end)) end, function() setclipboard(official_url) Toast("Website copied to clipboard!", 2) end ) return true end end end local function SetGameShaders(Type) Lighting:ClearAllChildren() if workspace.Terrain:FindFirstChild("ShadingCloudInstance_" .. Player.UserId) then workspace.Terrain:FindFirstChild("ShadingCloudInstance_" .. Player.UserId):Destroy() end if Type == "None" then for _,Shader in pairs(DefaultLighting) do Shader:Clone().Parent = Lighting end elseif Type == "Normal" then local Skybox = CreateSkybox( "rbxassetid://566598488", "rbxassetid://566598717", "rbxassetid://566598536", "rbxassetid://566598581", "rbxassetid://566598640", "rbxassetid://566598894" ) Skybox.Parent = Lighting local Atmosphere = Instance.new("Atmosphere") Atmosphere.Color = Color3.fromRGB(199, 199, 199) Atmosphere.Parent = Lighting local Bloom = Instance.new("BloomEffect") Bloom.Enabled = true Bloom.Intensity = 1.2 Bloom.Size = 22.5 Bloom.Threshold = 1.15 Bloom.Parent = Lighting local SunRays = Instance.new("SunRaysEffect") SunRays.Spread = 0.186 SunRays.Intensity = 0.0475 SunRays.Parent = Lighting local DOF = Instance.new("DepthOfFieldEffect") DOF.Enabled = true DOF.FarIntensity = 0.205 DOF.FocusDistance = 0.05 DOF.InFocusRadius = 20 DOF.NearIntensity = 0.56 DOF.Parent = Lighting if not workspace.Terrain:FindFirstChildOfClass("Clouds") then local Clouds = Instance.new("Clouds") Clouds.Cover = 0.67 Clouds.Density = 0.56 Clouds.Name = "ShadingCloudInstance_" .. Player.UserId Clouds.Parent = workspace.Terrain end elseif Type == "Generic" then local Skybox = CreateSkybox( "rbxassetid://566598488", "rbxassetid://566598717", "rbxassetid://566598536", "rbxassetid://566598581", "rbxassetid://566598640", "rbxassetid://566598894" ) Skybox.Parent = Lighting elseif Type == "Grain" then local Skybox = CreateSkybox( "http://www.roblox.com/asset/?id=4495864450", "http://www.roblox.com/asset/?id=4495864887", "http://www.roblox.com/asset/?id=4495865458", "http://www.roblox.com/asset/?id=4495866035", "http://www.roblox.com/asset/?id=4495866584", "http://www.roblox.com/asset/?id=4495867486" ) Skybox.Parent = Lighting local Correction = Instance.new("ColorCorrectionEffect") Correction.Brightness = -0.3 Correction.Contrast = 1 Correction.Enabled = true Correction.Saturation = -1 Correction.Parent = Lighting Correction.TintColor = Color3.fromRGB(240,240,240) local Atmosphere = Instance.new("Atmosphere") Atmosphere.Color = Color3.fromRGB(199, 199, 199) Atmosphere.Parent = Lighting elseif Type == "Pink" then local Skybox = CreateSkybox( "http://www.roblox.com/asset/?id=271042516", "http://www.roblox.com/asset/?id=271077243", "http://www.roblox.com/asset/?id=271042556", "http://www.roblox.com/asset/?id=271042310", "http://www.roblox.com/asset/?id=271042467", "http://www.roblox.com/asset/?id=271077958" ) Skybox.Parent = Lighting local Atmosphere = Instance.new("Atmosphere") Atmosphere.Parent = Lighting local Bloom = Instance.new("BloomEffect") Bloom.Enabled = true Bloom.Intensity = 1.2 Bloom.Size = 22.5 Bloom.Threshold = 1.1 Bloom.Parent = Lighting local Correction = Instance.new("ColorCorrectionEffect") Correction.Contrast = -0.1 Correction.TintColor = Color3.fromRGB(245, 225, 255) Correction.Enabled = true Correction.Saturation = 0.2 Correction.Parent = Lighting if not workspace.Terrain:FindFirstChildOfClass("Clouds") then local Clouds = Instance.new("Clouds") Clouds.Cover = 0.67 Clouds.Density = 0.56 Clouds.Name = "ShadingCloudInstance_" .. Player.UserId Clouds.Parent = workspace.Terrain Clouds.Color = Color3.fromRGB(255, 149, 204) end elseif Type == "Space" then local Skybox = CreateSkybox( "http://www.roblox.com/asset/?id=16262356578", "http://www.roblox.com/asset/?id=16262358026", "http://www.roblox.com/asset/?id=16262360469", "http://www.roblox.com/asset/?id=16262362003", "http://www.roblox.com/asset/?id=16262363873", "http://www.roblox.com/asset/?id=16262366016" ) Skybox.Parent = Lighting local Atmosphere = Instance.new("Atmosphere") Atmosphere.Density = 0.7 Atmosphere.Offset = 1.93 Atmosphere.Parent = Lighting local Bloom = Instance.new("BloomEffect") Bloom.Enabled = true Bloom.Intensity = 1.05 Bloom.Size = 20 Bloom.Threshold = 1.25 Bloom.Parent = Lighting local Correction = Instance.new("ColorCorrectionEffect") Correction.Contrast = 0.1 Correction.TintColor = Color3.fromRGB(229, 161, 229) Correction.Enabled = true Correction.Brightness = -0.1 Correction.Saturation = -0.2 Correction.Parent = Lighting elseif Type == "Baked" then local Correction = Instance.new("ColorCorrectionEffect") Correction.Brightness = 0 Correction.Contrast = 390 Correction.Enabled = true Correction.Saturation = -4 Correction.Parent = Lighting elseif Type == "B&W" then local Correction = Instance.new("ColorCorrectionEffect") Correction.Brightness = 0 Correction.Contrast = 390 Correction.Enabled = true Correction.Saturation = -1 Correction.Parent = Lighting end end -- Setup Method local AnimationPackEnums = {} local DefaultAnimationsInitialized = false local currentDraggableObject = OuterFrame local function Setup() if getgenv().EmptyTools == true then if COREGUI.RobloxGui:FindFirstChild("EmptyTools") then if COREGUI.RobloxGui.EmptyTools:GetAttribute("Minimized") == true then COREGUI.RobloxGui.EmptyTools.OuterFrame.Visible = true COREGUI.RobloxGui.EmptyTools:SetAttribute("Minimized", false) return end end if DontShowDuplicateUI == false then if AlertOfDuplicate == true then CreateAlert( "Instance Already Found", "An instance of Empty Tools is already running. Please close all instances before executing again." , nil, "Ok", nil, Enum.TextXAlignment.Center, function() coroutine.resume(coroutine.create(function() script:Destroy() end)) end ) end else DontShowDuplicateUI = true end return end getgenv().EmptyTools = true if Player:GetAttribute("EmptyToolz") then PlusEnabled = true end MainUI = CreateUI() local PARENT = nil if RunService:IsStudio() then PARENT = Player.PlayerGui else if (not is_sirhurt_closure) and (syn and syn.protect_gui) then PARENT = COREGUI.RobloxGui ProtectUI(MainUI) elseif COREGUI:FindFirstChild('RobloxGui') then PARENT = COREGUI.RobloxGui else PARENT = COREGUI.RobloxGui end end MainUI.Parent = PARENT OuterFrame = MainUI:WaitForChild("OuterFrame") Contents = OuterFrame:WaitForChild("Contents") ContentShrunken = OuterFrame:WaitForChild("ContentShrunken") InfoFrame = Contents:WaitForChild("Info") ToastFrame = MainUI:WaitForChild("ToastFrame") ToastText = MainUI:WaitForChild("ToastText") currentDraggableObject = OuterFrame local DisplayOrder = -5 if Topmost == true then DisplayOrder = 85 end MainUI.DisplayOrder = DisplayOrder MarkerUI = Instance.new("ScreenGui") MarkerUI.ResetOnSpawn = false MarkerUI.Name = "MarkerContainer" MarkerUI.Parent = Player.PlayerGui if PlusEnabled then table.insert(AttachmentLocations, "???") end if UserInputService.TouchEnabled then Contents.Commands.ScrollBarThickness = 0 end for i,v in pairs(AnimationPacks) do table.insert(AnimationPackEnums, i) end reparentLocation = Instance.new("Folder", game:GetService("ReplicatedStorage")) reparentLocation.Name = "REPARENT_INST_" .. Player.UserId --Defaults DefaultDestroyHeight = workspace.FallenPartsDestroyHeight DefaultMinZoomDistance = Player.CameraMinZoomDistance DefaultMaxZoomDistance = Player.CameraMaxZoomDistance coroutine.resume(coroutine.create(function() local Character = GetCharacter(Player) if Character then local Animate = Character:FindFirstChild("Animate") if Animate then DefaultAnimationsInitialized = true DefaultAnimations.Idle1 = Animate.idle.Animation1.AnimationId DefaultAnimations.Idle2 = Animate.idle.Animation2.AnimationId DefaultAnimations.Walk = Animate.walk.WalkAnim.AnimationId DefaultAnimations.Run = Animate.run.RunAnim.AnimationId DefaultAnimations.Jump = Animate.jump.JumpAnim.AnimationId DefaultAnimations.Climb = Animate.climb.ClimbAnim.AnimationId DefaultAnimations.Fall = Animate.fall.FallAnim.AnimationId DefaultAnimations.Swim = Animate.swim.Swim.AnimationId DefaultAnimations.SwimIdle = Animate.swimidle.SwimIdle.AnimationId end DefaultFOV = Camera.FieldOfView local Humanoid = GetHumanoid(Player) if Humanoid then DefaultWalkSpeed = Humanoid.WalkSpeed DefaultJumpPower = Humanoid.JumpPower DefaultGravity = workspace.Gravity end end end)) for _,Shader in pairs(Lighting:GetChildren()) do table.insert(DefaultLighting, Shader:Clone()) end if not userSettings.changelogHiddenVersion or userSettings.changelogHiddenVersion ~= VersionString then local dl = false if configureShaders(true) == true then dl = true end if not dl then LogsOpen = true Log = ShowChangeLogs(true, function() LogsOpen = false Log = nil end) end end -- Drag Handler coroutine.resume(coroutine.create(function() local userInputService = game:GetService("UserInputService") local tweenService = game:GetService("TweenService") local dragToggle = false local dragObject = OuterFrame -- The UI object to be dragged local dragInput = nil local dragStart = nil local dragInfo = TweenInfo.new(0.075, Enum.EasingStyle.Quad) local dragPos = nil local originalCameraType = nil local function updateInput(input) local delta = input.Position - dragStart local newPos = UDim2.new(dragPos.X.Scale, dragPos.X.Offset + delta.X, dragPos.Y.Scale, dragPos.Y.Offset + delta.Y) tweenService:Create(dragObject, dragInfo, {Position = newPos}):Play() end coroutine.resume(coroutine.create(function() local userInputService: UserInputService = game:GetService("UserInputService") -- UserInputService local tweenService: TweenService = game:GetService("TweenService") -- Tweenservice local dragToggle: boolean = nil -- Toggle? local dragObject: GuiObject = OuterFrame -- Object Being Dragged local dragInput: InputObject = nil -- Input On The Drag Object local dragStart: Vector2 = nil -- Starting Position local dragInfo: TweenInfo = TweenInfo.new(0.075, Enum.EasingStyle.Quad) -- Drag Speed local dragPos: UDim2 = nil -- Drag Pos local function updateInput(input) -- Updates Input local delta: Vector2 = input.Position - dragStart local position: UDim2 = UDim2.new(dragPos.X.Scale, dragPos.X.Offset + delta.X, dragPos.Y.Scale, dragPos.Y.Offset + delta.Y) tweenService:Create(dragObject, dragInfo, {Position = position}):Play() end local function dragInputBegan(input: InputObject) if (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) and userInputService:GetFocusedTextBox() == nil then if UIOpen then dragToggle = true dragStart = input.Position dragPos = dragObject.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragToggle = false end end) elseif not UIOpen and ContentShrunken then -- Check if input started within ContentShrunken boundaries local mousePosition = input.Position local contentPosition = ContentShrunken.AbsolutePosition local contentSize = ContentShrunken.AbsoluteSize if mousePosition.X >= contentPosition.X and mousePosition.X <= contentPosition.X + contentSize.X and mousePosition.Y >= contentPosition.Y and mousePosition.Y <= contentPosition.Y + contentSize.Y then dragToggle = true dragStart = input.Position dragPos = dragObject.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragToggle = false end end) end end end end local function dragInputChanged(input: InputObject) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end local function userInputChanged(input: InputObject, gameProcessedEvent: boolean) if input == dragInput and dragToggle then updateInput(input) end end OuterFrame.InputBegan:Connect(dragInputBegan) OuterFrame.InputChanged:Connect(dragInputChanged) userInputService.InputChanged:Connect(userInputChanged) end)) end)) end local function SetupCommands() if not MainUI then return end local PlatformInput = nil if PlusEnabled then PlatformInput = "Adjust.." end CreateCommand("Platform", "Create a platform beneath your character to walk around on.", PlatformInput, {"Translucent", "Transparent", "Opaque"}, "World", function(Type, Adjustment) if PlusEnabled then CreatePlatform(Adjustment, Type) else CreatePlatform(Type, Adjustment) end end, function() local PltInstance = workspace:FindFirstChild("PlatformFolder_" .. Player.UserId) if PltInstance then PltInstance:Destroy() end end ) CreateCommand("Emote", "Equip any emote from the marketplace by pasting the ID. Will clear existing emotes, and go fill the wheel in order when empty.", "Emote ID..", {"Slot 1", "Slot 2", "Slot 3", "Slot 4", "Slot 5", "Slot 6", "Slot 7", "Slot 8"}, "Character", function(ID, Slot) PlayEmote(ID, Slot) end, nil ) CreateCommand("Fly", "Flight using WASD for movement and Ctrl/Space for height with a max speed of 100. Not enabled for mobile.", "Speed..", nil, "Character", function(Speed) if selected then ToggleFlight(false, Speed) wait(0.035) end ToggleFlight(true, Speed) end, function() ToggleFlight(false, FlySpeed) end ) CreateCommand("Anchor", "Lock: anchors all character parts. Deflect: ignores external forces/knockback while still allowing normal movement. Isolate (WIP): Deflect + blocks ragdoll/physics states.", nil, AnchorAvailableModes, "Character", function(Mode) StartAnchor(Mode) end, function() StopAnchor() end ) CreateCommand("Point Teleport", "Teleport to where you click. Interface: click anywhere. Tool: gives a tool that teleports on activation.", nil, {"Interface", "Tool"}, "Character", function(Mode) if modeEnabled then return end Mode = Mode or "Interface" PointTeleportMode = Mode if Mode == "Interface" then StopPointTeleportTool() if TeleportEnabled then return end TeleportEnabled = true StopPhaseMode() if PointTeleportIndicatorEnabled then TeleportIndicator = CreateTeleportIndicator() end Mouse.TargetFilter = TeleportIndicator return end if Mode == "Tool" then StopPointTeleportInterface() StopPhaseMode() StartPointTeleportTool() end end, function() StopPointTeleportInterface() StopPointTeleportTool() end ) CreateCommand("Reset", "Kills your character in order to reset it. Useful for games with reset disabled.", nil, nil, "Character", function() GetHumanoid(Player).Health = 0 end, nil ) CreateCommand("Sit", "Makes your character sit.", nil, nil, "Character", function() local Humanoid = GetHumanoid(Player) if not Humanoid then return end pcall(function() Humanoid.Sit = true end) pcall(function() Humanoid:ChangeState(Enum.HumanoidStateType.Seated) end) end, nil ) CreateCommand("Flip", "Tool: equip the Flip tool (added to your backpack) then left click to front flip and right click to back flip. Interface: left/right click anywhere to flip while enabled. Can't flip while already flipping.", nil, {"Tool", "Interface"}, "Character", function(Mode) StartFlip(Mode) end, function() StopFlip() end ) CreateCommand("Staircase", "Creates a staircase with a max of 200 steps in front of your character.", "Steps..", nil, "World", function(Steps) CreateStaircaseUpwards(Steps) end, function() local StaircaseFolder = workspace:FindFirstChild("StaircaseInstance_" .. Player.UserId) if StaircaseFolder then StaircaseFolder:ClearAllChildren() end end ) CreateCommand("Ramp", "Place ramps. Modes: Translucent/Transparent/Opaque (command placement) or Tool (gives a persistent Ramp Tool). Stop clears all ramps (or cancels if you're currently placing).", nil, {"Translucent", "Transparent", "Opaque", "Tool"}, "World", function(Type) if Type == "Tool" then StartRampTool() return end StartRampPlacement(Type, "Command") end, function() if RampPlacing then if RampPlacingSource == "Tool" then StopRampTool() else CancelRampPlacement() end return end StopRampTool() local RampFolder = workspace:FindFirstChild("RampInstance_" .. Player.UserId) if RampFolder then RampFolder:ClearAllChildren() end RampHistory = {} end ) CreateCommand("Rejoin", "Return to the same server, or hop to a new one.", nil, {"Rejoin", "Hop"}, "Game", function(Type) if Type == "Rejoin" then TeleportService:TeleportToPlaceInstance(game.PlaceId, game.JobId, Player) elseif Type == "Hop" then local ServerList = {} local Request = game:HttpGet("https://games.roblox.com/v1/games/" .. game.PlaceId .. "/servers/Public?sortOrder=Desc&limit=10") local RequestBody = HttpService:JSONDecode(Request) if RequestBody and RequestBody.data then for _,Server in next, RequestBody.data do if type(Server) == "table" and tonumber(Server.playing) and tonumber(Server.maxPlayers) and Server.playing < Server.maxPlayers and Server.id ~= game.JobId then table.insert(ServerList, 1, Server.id) end end end if #ServerList > 0 then TeleportService:TeleportToPlaceInstance(game.PlaceId, ServerList[math.random(1,#ServerList)], Player) end end end, nil ) CreateCommand("Freecam", "Detaches the camera from the player to move around freely and locks player movement controls.", nil, nil, "Camera", function() StartFreecam() end, function() StopFreecam() end ) CreateCommand("Explode", "Spins the character at a high velocity and then breaks the joints.", "Power..", nil, "Character", function(Power) ExplodePlayer(Power) end, nil ) CreateCommand("Phase", "When enabled, allows you to click on any object and disable collisions allowing you to walk through it. Option to show/hide invis parts.", nil, {"Hide Invis", "Show Invis"}, "World", function(ShowInvis) PhaseEnabled = true TeleportEnabled = false for _, phaseObj in pairs(PhaseObjects) do if phaseObj:FindFirstChild("PhaseHighlight") then phaseObj.PhaseHighlight:Destroy() phaseObj.CanCollide = true end end if ShowInvis == "Show Invis" then EnablePhaseForInvisibleParts() end end, function() PhaseEnabled = false for _, phaseObj in pairs(PhaseObjects) do if phaseObj:FindFirstChild("PhaseHighlight") then phaseObj.PhaseHighlight:Destroy() phaseObj.CanCollide = true end end DisablePhaseForInvisibleParts() end ) CreateCommand("Respawn", "Attempts to find a loaded spawn locaton and teleport you to it.", nil, {"Fastest", "Closest", "Random"}, "Character", function(Type) local SpawnLocation if Type == "Fastest" then SpawnLocation = workspace:FindFirstChildOfClass("SpawnLocation") end if Type == "Closest" then local Distance = math.huge for _,Object in pairs(workspace:GetDescendants()) do if Object:IsA("SpawnLocation") then local Sep = (Object.Position - GetRoot(Player).Position).Magnitude if Sep < Distance then Distance = Sep SpawnLocation = Object end end end end if Type == "Random" or SpawnLocation == nil then local Locations = {} for _,Object in pairs(workspace:GetDescendants()) do if Object:IsA("SpawnLocation") then table.insert(Locations, Object) end end SpawnLocation = Locations[math.random(1,#Locations)] end if SpawnLocation then local Root = GetRoot(Player) Root.Velocity = Vector3.zero Root.CFrame = SpawnLocation.CFrame + Vector3.new(0,4.5,0) end end, nil ) CreateCommand("View", "View the perspective of another player by typing their username or display name.", "Name..", nil,"Camera", function(Username) local TargetPlayer = GetPlayerFromNameSnippet(Username) if TargetPlayer then SetCameraTarget("View", TargetPlayer) end end, function() SetCameraTarget("None", nil) end ) CreateCommand("Stats", "Allows the customization of player stats such as speed and jump height. Does not save on respawn.", "Value..", {"Speed","Jump", "FOV", "Gravity"}, "Character", function(Value, Type) local Character = GetCharacter(Player) local Humanoid = GetHumanoid(Player) if Type == "Speed" then Humanoid.WalkSpeed = Value elseif Type == "Jump" then Humanoid.UseJumpPower = true Humanoid.JumpPower = Value elseif Type == "FOV" then Camera.FieldOfView = Value elseif Type == "Gravity" then workspace.Gravity = Value end end, function() local Humanoid = GetHumanoid(Player) Camera.FieldOfView = DefaultFOV if Humanoid then Humanoid.WalkSpeed = DefaultWalkSpeed Humanoid.JumpPower = DefaultJumpPower workspace.Gravity = DefaultGravity end end ) CreateCommand("CFrame Speed", "Boost your character's CFrame speed. Capped at 20", "Boost..", nil, "Character", function(Value) StopCFrameBoosting() repeat wait() until StopCFrameBoost == true SetCFrameBoost(tonumber(Value)) end, function() StopCFrameBoosting() end ) CreateCommand("Fling", "Flings your character in the direction of your camera with adjustable power, capped at 300.", "Power..", nil,"Character", function(Power) FlingSelf(Power) end, nil ) CreateCommand("Markers", "Shows the location of all players currently loaded on the client. Option to enable clicking their name to teleport to them.", nil, {"Teleport", "Nothing"}, "World", function(Type) SetupMarkers(Type) end, function() MarkersActive = false MarkerUI:ClearAllChildren() end ) CreateCommand("Attach", "Attaches your character to the back of any player. Use username or display name.", "Name..", AttachmentLocations, "Character", function(Username, PartEnum) AttachToPlayer(Username, PartEnum) end, function() if Player:FindFirstChild("StopAttach") then return end local StopAttach = Instance.new("StringValue") StopAttach.Name = "StopAttach" StopAttach.Parent = Player end ) CreateCommand("Time", "Sets the in-game clock time, changing the skybox. May not work in games with daylight cycles.", "Time..", {"Passive", "Force"}, "Game", function(Time, Mode) local timeNumber = tonumber(Time) if not timeNumber then return end if Mode == "Force" then StartForceTime(timeNumber) else StopForceTime() Lighting.ClockTime = timeNumber end end, function() StopForceTime() end ) CreateCommand("Shading", "Changes the lighting effects, skybox, and post processing to some preset options.", nil, {"None", "Normal", "Generic", "Grain", "Pink", "Space", "Baked", "B&W"}, "Game", function(Type) SetGameShaders(Type) end, function() SetGameShaders("None") end ) CreateCommand("Pop", "Flings your character upwards with adjustable power.", "Power..", nil,"Character", function(Power) Pop(Power) end, nil ) CreateCommand("Safe Void", "Makes the void safe by either disabling the respawn height or returning to spawn.", nil, {"None", "Disable", "Return"}, "Game", function(EnumType) ReturnOnFall = false if EnumType == "None" then workspace.FallenPartsDestroyHeight = DefaultDestroyHeight elseif EnumType == "Disable" then workspace.FallenPartsDestroyHeight = -math.huge elseif EnumType == "Return" then ReturnOnFall = true workspace.FallenPartsDestroyHeight = DefaultDestroyHeight end end, function() ReturnOnFall = false workspace.FallenPartsDestroyHeight = DefaultDestroyHeight end ) CreateCommand("Free Zoom", "Unlocks the camera maximum and minmum zoom distance", nil, nil, "Camera", function() Player.CameraMinZoomDistance = 0 Player.CameraMaxZoomDistance = math.huge end, function() Player.CameraMinZoomDistance = DefaultMinZoomDistance Player.CameraMaxZoomDistance = DefaultMaxZoomDistance end ) CreateCommand("Magnet", "Brings your character to another with an invisible force", "Name..", nil, "Character", function(Username) MagnetPlayer(Username) end, function() if Player:FindFirstChild("StopMagnet") then return end local StopAttach = Instance.new("StringValue") StopAttach.Name = "StopMagnet" StopAttach.Parent = Player end ) CreateCommand("Link", "Allows users with Empty Tools to join your current game. ID is only required for joins.", "ID..", {"Invite", "Join"}, "Game", function(ID, Type) if Type == "Invite" then local IDKey = CreateLinkKey(game.JobId) local Alert = CreateLinkAlert(IDKey) elseif Type == "Join" then if not ID then return end local ID_Decode, PlaceID = RecieveLinkKey(ID) if ID_Decode then TeleportService:TeleportToPlaceInstance(PlaceID, ID_Decode, Player) end end end, nil ) CreateCommand("Block", "Hide another player's character and voice chat, text chat currently unsupported.", "Name..", {"Block", "Unblock"}, "Game", function(Username, Type) if Type == "Block" then local Target = GetPlayerFromNameSnippet(Username) if Target then Target:SetAttribute("Blocked", true) Toast(Target.DisplayName .. " (@" .. Target.Name .. " ) blocked", 2) end elseif Type == "Unblock" then local Target = GetPlayerFromNameSnippet(Username) if Target then Target:SetAttribute("Blocked", false) Toast(Target.DisplayName .. " (@" .. Target.Name .. " ) unblocked", 2) end end end, function() for i,v in pairs(Players:GetPlayers()) do v:SetAttribute("Blocked", false) end end ) CreateCommand("Stack Jumps", "Allows your character to 'double jump' or repeat jumps while in the air, with a configurable amount of jumps.", "Amount..", nil, "Character", function(Amount) Amount = tonumber(Amount) if not Amount or Amount < 1 then JumpInstances = 1 end DoubleJump = true JumpInstances = Amount end, function() DoubleJump = false JumpInstances = 1 end ) CreateCommand("Animate", "Change your character's animation pack from the list of existing animation packs.", nil, AnimationPackEnums, "Character", function(Animation) SetPlayerAnimations(Animation) end, function() if DefaultAnimationsInitialized then SetPlayerAnimations("None") end end ) CreateCommand("Car", "Drivable floating car. Controls: WASD, Q & E. B to Break", "Max Speed..", nil, "Character", function(input) StartCarMode(input) end, function() StopCarMode() end ) CreateCommand("Spawnpoint", "Set your character's spawnpoint, stop to remove it.", nil, nil, "Character", function(input) SetSpawnPoint() end, function() EraseSpawnPoint() end ) CreateCommand("Orbit", "Orbits around another player with variable speeds.", "Name..", {"Slow", "Medium", "Fast"}, "Character", function(Username, Speed) OrbitPlayer(Username, Speed) end, function() StopOrbit() end ) CreateCommand("VC Bypass", "Pardon yourself from a voice chat penalty; Bypass a voice chat ban. Not compatable with all injectors.", nil, {"Simple","Advanced"}, "Game", function(Type) if Type == "Simple" then game:GetService("VoiceChatService"):joinVoice() elseif Type == "Advanced" then EmptyToolsLoadstrings.VCBypass() end end, nil ) end local function SetupThirdPartyCommands(Enabled) if Enabled then for i,v in pairs(ThirdPartyLoadstrings) do local Command = CreateCommand(i, "Execute the third-party " .. i .. " script", "THIRDPARTY", nil, "Game", function() v() end, nil ) table.insert(ThirdPartyCommands, Command) end if PlusEnabled then for i,v in pairs(BetaTPLoadstrings) do local Command = CreateCommand(i, "Execute the third-party " .. i .. " script", "THIRDPARTY", nil, "Game", function() v() end, nil ) table.insert(ThirdPartyCommands, Command) end end else for i,v in pairs(ThirdPartyCommands) do RemoveCommand(v) end end end local function SetupPlusCommands() CreateCommand("Regions", "Toggle invisible regions. Makes near-invisible parts partially visible for selection. Backspace to delete.", nil, {"Destroy","Parent", "Re-parent"}, "World", function(Type) if PhaseEnabled then return end modeEnabled = true reparent = (Type == "Parent") for _, obj in ipairs(workspace:GetDescendants()) do if obj:IsA("BasePart") and obj.Transparency >= 0.99 then originalTransparency[obj] = obj.Transparency obj.Transparency = 0.5 end end print("Invisible mode enabled") if Type == "Re-parent" then for i,v in pairs(reparentLocation:GetChildren()) do v.Parent = v.OG.Value v.OG:Destroy() modeEnabled = false if currentSelection then selectionBox.Adornee = nil selectionBox.Visible = false currentSelection = nil end for part, orig in pairs(originalTransparency) do if part and part.Parent then part.Transparency = orig end end originalTransparency = {} print("Invisible mode disabled") end end end, function() modeEnabled = false if currentSelection then selectionBox.Adornee = nil selectionBox.Visible = false currentSelection = nil end for part, orig in pairs(originalTransparency) do if part and part.Parent then part.Transparency = orig end end originalTransparency = {} print("Invisible mode disabled") end ) CreateCommand("UNC Test", "Unified Naming Convention test, logs to console.", nil, nil, "Game", function() EmptyToolsLoadstrings.UNC() end, nil ) end local function SetupSettings() if not MainUI then return end CreateSettingsOption("Tips", "Enable command tips when hovering over the titles", "Boolean", userSettings.TipsEnabled, function(CheckBox) TipsEnabled = not TipsEnabled userSettings.TipsEnabled = TipsEnabled saveSettings(userSettings) SetOptionChecked(CheckBox, TipsEnabled) end ) CreateSettingsOption("Alerts", "Enable top screen alerts/toasts for certain commands", "Boolean", userSettings.AlertsEnabled, function(CheckBox) AlertsEnabled = not AlertsEnabled userSettings.AlertsEnabled = AlertsEnabled saveSettings(userSettings) SetOptionChecked(CheckBox, AlertsEnabled) end ) CreateSettingsOption("Third Party Scripts", "Enable commands for third parties like Infinite Yield, CMD-X, etc.", "Boolean", userSettings.ThirdPartiesEnabled, function(CheckBox) ThirdPartiesEnabled = not ThirdPartiesEnabled userSettings.ThirdPartiesEnabled = ThirdPartiesEnabled saveSettings(userSettings) SetupThirdPartyCommands(ThirdPartiesEnabled) SetOptionChecked(CheckBox, ThirdPartiesEnabled) end ) CreateSettingsOption("Teleport Indicator", "Enable green teleport indicator for point teleport", "Boolean", userSettings.PointTeleportIndicatorEnabled, function(CheckBox) PointTeleportIndicatorEnabled = not PointTeleportIndicatorEnabled userSettings.PointTeleportIndicatorEnabled = PointTeleportIndicatorEnabled saveSettings(userSettings) SetOptionChecked(CheckBox, PointTeleportIndicatorEnabled) end ) CreateSettingsOption("Minimize On Close", 'When Empty Tools is closed, it will be hidden can be re-opened with the toggle key', "Boolean", userSettings.MinimizeOnClose, function(CheckBox) MinimizeOnClose = not MinimizeOnClose userSettings.MinimizeOnClose = MinimizeOnClose saveSettings(userSettings) SetOptionChecked(CheckBox, MinimizeOnClose) end ) CreateSettingsOption("Open Key", 'The key used to re-oepn Empty Tools, behaves differently when Minimize On Close is enabled.', "Key", userSettings.ToggleKey , function(KeyButtonL) if KeySelected then return end KeySelected = true KeyButton = KeyButtonL SetKeyMode(KeyButtonL, "Enabled") end ) CreateSettingsOption("Persist on Teleport", 'When enabled, Empty Tools will remain opened upon teleporting to a new game.', "Boolean", userSettings.Persist, function(CheckBox) Persist = not Persist userSettings.Persist = Persist saveSettings(userSettings) SetOptionChecked(CheckBox, Persist) end ) CreateSettingsOption("Topmost", 'Empty Tools appears on top of all other UI, including Core UI.', "Boolean", userSettings.Topmost, function(CheckBox) Topmost = not Topmost userSettings.Topmost = Topmost saveSettings(userSettings) local DisplayOrder = -5 if Topmost == true then DisplayOrder = 85 end MainUI.DisplayOrder = DisplayOrder SetOptionChecked(CheckBox, Topmost) end ) CreateSettingsOption("Alert Of Duplicate", 'Empty Tools will alert you if a duplicate instance is found on setup.', "Boolean", userSettings.AlertOfDuplicate, function(CheckBox) AlertOfDuplicate = not AlertOfDuplicate userSettings.AlertOfDuplicate = AlertOfDuplicate saveSettings(userSettings) SetOptionChecked(CheckBox, AlertOfDuplicate) end ) end Setup() SetupCommands() SetupSettings() if PlusEnabled then SetupPlusCommands() end SetupThirdPartyCommands(userSettings.ThirdPartiesEnabled) if __ET_STARTUP_COMMANDS then task.defer(function() for _, Command in ipairs(__ET_STARTUP_COMMANDS) do local ok, err = pcall(function() local args = Command.args or {} local ran = RunRegisteredCommand(Command.name, __ET_UNPACK(args, 1, #args)) if not ran then ETLOG("Startup command not found: " .. tostring(Command.name)) end end) if not ok then ETLOG("Startup command failed (" .. tostring(Command.name) .. "): " .. tostring(err)) end end end) end -- Mouse Handling local lastTapTime = 0 local doubleTapThreshold = 0.3 Mouse.Button1Down:Connect(function() if UserInputService.TouchEnabled then local currentTime = tick() if currentTime - lastTapTime > doubleTapThreshold then lastTapTime = currentTime return end lastTapTime = 0 end if RampPlacing then if not Mouse.Target then return end local HitPosition = Mouse.Hit.Position if not HitPosition then return end if not RampStartPosition then RampStartPosition = HitPosition if not RampGhostModel then StartRampPlacement(RampPlacementType, RampPlacingSource) RampStartPosition = HitPosition end RampPreview = Instance.new("Part") RampPreview.Name = "RampPreview" RampPreview.Transparency = 0.6 RampPreview.CastShadow = false RampPreview.Material = Enum.Material.ForceField RampPreview.Color = Color3.fromRGB(120, 200, 255) RampPreview.CanCollide = false RampPreview.Anchored = true RampPreview.Parent = RampGhostModel UpdateRampPart(RampPreview, RampStartPosition, HitPosition) else FinalizeRampPlacement(HitPosition) end return end if modeEnabled then local target = Mouse.Target print(target) if target and originalTransparency[target] then updateSelection(target) end return end if not Mouse.Target then return end if TeleportEnabled then local Location = Mouse.Hit.Position if not Location then return end GetRoot(Player).Velocity = Vector3.zero GetCharacter(Player):MoveTo(Location) elseif PhaseEnabled then local Target = Mouse.Target if not Target:IsA("BasePart") then return end SetObjectToPhase(Target) end end) -- UI Control if not MainUI then return end ToggleTween = nil function Toggle() UIOpen = not UIOpen ContentShrunken.Visible = not UIOpen OuterFrame.Toggle.Text = UIOpen and "-" or "+" local Transparency = UIOpen and 0 or 1 if ToggleTween then ToggleTween:Cancel() end Contents.Visible = UIOpen ToggleTween = TweenService:Create(OuterFrame, FadeTweenInfo, {BackgroundTransparency = Transparency}) ToggleTween:Play() end OuterFrame.Toggle.MouseButton1Click:Connect(function() Toggle() end) OuterFrame.Info.MouseButton1Click:Connect(function() ShowInfo() end) OuterFrame.Info.MouseButton2Click:Connect(function() Toast("https://empty.tools/", 2) end) local function Close() getgenv().EmptyTools = false coroutine.resume(coroutine.create(function() saveSettings(userSettings) if LogsOpen then if Log then Log:Destroy() LogsOpen = false end end local PltInstance = workspace:FindFirstChild("PlatformFolder_" .. Player.UserId) if PltInstance then PltInstance:Destroy() end StopRampTool() CancelRampPlacement() local RampFolder = workspace:FindFirstChild("RampInstance_" .. Player.UserId) if RampFolder then RampFolder:Destroy() end RampHistory = {} if RampToolUI then pcall(function() RampToolUI:Destroy() end) RampToolUI = nil RampToolUITransparencyLabel = nil RampToolUIWidthLabel = nil end for _,PhaseObj in pairs(PhaseObjects) do if PhaseObj:FindFirstChild("PhaseHighlight") then PhaseObj.PhaseHighlight:Destroy() PhaseObj.CanCollide = true end end workspace.FallenPartsDestroyHeight = DefaultDestroyHeight SetGameShaders("None") SetCameraTarget("None", nil) SetPlayerAnimations("None") ToggleFlight(false) StopAnchor() if Player.PlayerGui:FindFirstChild("LinkScreen") then Player.PlayerGui.LinkScreen:Destroy() end StopCFrameBoosting() StopPointTeleportInterface() StopPointTeleportTool() StopFlip() UnbindRampPlacingWheel() for i,v in pairs(Players:GetPlayers()) do coroutine.resume(coroutine.create(function() v:SetAttribute("Blocked", false) task.wait() TogglePlayerCharacter(v, true) end)) end StopCarMode() StopOrbit() Camera.FieldOfView = DefaultFOV local Humanoid = GetHumanoid(Player) if Humanoid then Humanoid.WalkSpeed = DefaultWalkSpeed Humanoid.JumpPower = DefaultJumpPower workspace.Gravity = DefaultGravity end end)) wait(0.005) TeleportIndicator = nil PhaseEnabled = false MarkersActive = false MarkerUI:Destroy() MainUI:Destroy() coroutine.resume(coroutine.create(function() script:Destroy() end)) end function MinimizeClose() OuterFrame.Visible = false MainUI:SetAttribute("Minimized", true) Toast('Press " ' .. UserInputService:GetStringForKeyCode(userSettings.ToggleKey) .. ' " to re-open Empty Tools', 1.5) end local confirmClose = false OuterFrame.Close.MouseButton1Click:Connect(function() if MinimizeOnClose == true and not UserInputService.TouchEnabled then MinimizeClose() return end if UserInputService.TouchEnabled then if confirmClose then Close() else confirmClose = true OuterFrame.Close.Text = "?" coroutine.resume(coroutine.create(function() wait(1.5) confirmClose = false OuterFrame.Close.Text = "X" end)) end else Close() end end) OuterFrame.Close.MouseButton2Click:Connect(function() Close() end) Contents.Category.MouseButton1Click:Connect(function() local Categories = CommandCategories local CategoryIndex = table.find(Categories, CurrentCategory) CategoryIndex = CategoryIndex + 1 if CategoryIndex > #Categories then CategoryIndex = 1 end CurrentCategory = Categories[CategoryIndex] Contents.Category.Text = "Filter: " .. CurrentCategory local SearchText = string.lower(Contents.Search.Text) for _, Command in pairs(CommandFrames) do local Category = Command:GetAttribute("Category") local CommandMatchesCategory = (CurrentCategory == "None" or Category == CurrentCategory) local CommandMatchesSearch = (SearchText == "" or #SearchText < 1 or string.find(string.lower(Command.Name), SearchText)) Command.Visible = CommandMatchesCategory and CommandMatchesSearch end Contents.Commands.CanvasPosition = Vector2.zero end) Contents.Search:GetPropertyChangedSignal("Text"):Connect(function() local SearchText = string.lower(Contents.Search.Text) for _, Command in pairs(CommandFrames) do local Category = Command:GetAttribute("Category") local CommandMatchesCategory = (CurrentCategory == "None" or Category == CurrentCategory) local CommandMatchesSearch = (SearchText == "" or #SearchText < 1 or string.find(string.lower(Command.Name), SearchText)) Command.Visible = CommandMatchesCategory and CommandMatchesSearch end Contents.Commands.CanvasPosition = Vector2.zero for _, Option in pairs(SettingsFrames) do local OptionTitleMatchesSearch = (SearchText == "" or #SearchText < 1 or string.find(string.lower(Option.Name), SearchText)) local OptionInfoMatchesSearch = (SearchText == "" or #SearchText < 1 or string.find(string.lower(Option.Info.Text), SearchText)) Option.Visible = OptionTitleMatchesSearch or OptionInfoMatchesSearch end Contents.SettingsFrame.CanvasPosition = Vector2.zero end) Contents.Settings.MouseButton1Click:Connect(function() if Contents.Commands.Visible then Contents.Settings.BackgroundColor3 = Color3.fromRGB(4, 4, 4) Contents.Commands.Visible = false Contents.SettingsFrame.Visible = true else Contents.Settings.BackgroundColor3 = Color3.fromRGB(50, 50, 50) Contents.Commands.Visible = true Contents.SettingsFrame.Visible = false end end) -- Player Specific Players.LocalPlayer.CharacterAdded:Connect(function(character) local root = character:WaitForChild("HumanoidRootPart") if playerSpawnPoint then root.CFrame = playerSpawnPoint end end) local TeleportCheck = false Players.LocalPlayer.OnTeleport:Connect(function(State) if (not TeleportCheck) and queueTeleport and Persist then TeleportCheck = true getgenv().EmptyTools = false if PlusEnabled then queueTeleport(EmptyToolsLoadstrings.Beta) else queueTeleport(EmptyToolsLoadstrings.Default) end end end) -- Input local LocalJumpInstances = JumpInstances function JumpReq() if not DoubleJump then return end local Root = GetRoot(Player) local Humanoid = GetHumanoid(Player) if Root and Humanoid then if Humanoid:GetState() == Enum.HumanoidStateType.Freefall then if LocalJumpInstances >= 1 then LocalJumpInstances -= 1 Humanoid:ChangeState(Enum.HumanoidStateType.Jumping, true) Humanoid.StateChanged:Connect(function(old, new) if new == Enum.HumanoidStateType.Landed then LocalJumpInstances = JumpInstances end end) end end end end UserInputService.JumpRequest:Connect(function() JumpReq() end) UserInputService.InputBegan:Connect(function(Input, GPE) if GPE then return end if KeySelected and KeyButton then KeySelected = false if Input.KeyCode == Enum.KeyCode.Unknown then return end userSettings.ToggleKey = Input.KeyCode.Name ToggleKey = Enum.KeyCode[userSettings.ToggleKey] saveSettings(userSettings) SetKeyMode(KeyButton, Input.KeyCode) KeyButton = nil return end if RampToolEquipped and (Input.KeyCode == Enum.KeyCode.Q or Input.KeyCode == Enum.KeyCode.E) then if UserInputService:GetFocusedTextBox() then return end CycleRampPlacementType(Input.KeyCode == Enum.KeyCode.E and 1 or -1) return end if Input.KeyCode == Enum.KeyCode.Backspace and RampPlacing then if UserInputService:GetFocusedTextBox() then return end if RampPlacingSource == "Tool" and RampToolEquipped then if RampStartPosition or RampPreview then CancelRampSegmentKeepActive() else UndoLastRamp() end else CancelRampPlacement() end return end if Input.KeyCode == Enum.KeyCode.Space then JumpReq() end if Input.KeyCode == ToggleKey then if MinimizeOnClose == true then if OuterFrame.Visible == true then MinimizeClose() else OuterFrame.Visible = true MainUI:SetAttribute("Minimized", true) end else Toggle() end end if modeEnabled and Input.KeyCode == Enum.KeyCode.Backspace then if currentSelection then local p = Instance.new("Part", game:GetService("ReplicatedFirst")) selectionBox.Parent = p if reparent then local OrigParent = Instance.new("ObjectValue", currentSelection) OrigParent.Name = "OG" OrigParent.Value = currentSelection.Parent currentSelection.Parent = reparentLocation else originalTransparency[currentSelection] = nil currentSelection:Destroy() end selectionBox.Adornee = nil selectionBox.Visible = false currentSelection = nil end end end) -- Loop RunService.RenderStepped:Connect(function() if TeleportEnabled and PointTeleportIndicatorEnabled then if TeleportIndicator then TeleportIndicator:MoveTo(Mouse.Hit.Position) local Part = TeleportIndicator:GetChildren()[1] Part.Position = TeleportIndicator.WorldPivot.Position local Root = GetRoot(Player) if Root then if (Root.Position - Part.Position).Magnitude < 7 then Part.CanCollide = false else Part.CanCollide = true end end else if PointTeleportIndicatorEnabled then TeleportIndicator = CreateTeleportIndicator() end end elseif TeleportIndicator ~= nil then TeleportIndicator:Destroy() TeleportIndicator = nil end if RampPlacing then if not RampGhostModel or not RampIndicator then CancelRampPlacement() else local HitPosition = Mouse.Hit.Position if HitPosition then RampIndicator.Position = HitPosition if RampStartPosition and RampPreview then UpdateRampPart(RampPreview, RampStartPosition, HitPosition) end end end end if ReturnOnFall == true then local Root = GetRoot(Player) if Root then if Root.Position.Y < (DefaultDestroyHeight + 18) then local SpawnLocation = workspace:FindFirstChildOfClass("SpawnLocation") if SpawnLocation then Root.Velocity = Vector3.zero Root.CFrame = SpawnLocation.CFrame + Vector3.new(0,4.5,0) end end end end for i,v in pairs(Players:GetPlayers()) do if v:GetAttribute("Blocked") == true then local Character = GetCharacter(v) if Character:GetAttribute("CharacterHidden") == true then continue end Character:SetAttribute("CharacterHidden", true) TogglePlayerCharacter(v, false) else local Character = GetCharacter(v) if Character:GetAttribute("CharacterHidden") == true then Character:SetAttribute("CharacterHidden", false) TogglePlayerCharacter(v, true) end end end if Camera == nil then Camera = workspace.CurrentCamera end end)