-- Frisbee Monitor Script with Rayfield UI -- Features: Frisbee modifications, walkspeed, and jump power controls -- Load Rayfield UI Library local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))() -- Create Window local Window = Rayfield:CreateWindow({ Name = "Frisbee Helper", LoadingTitle = "Frisbee Monitor", LoadingSubtitle = "by Assistant", ConfigurationSaving = { Enabled = true, FolderName = nil, FileName = "FrisbeeHelper" }, Discord = { Enabled = false, }, KeySystem = false, }) -- Get Services and Player local Players = game:GetService("Players") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer -- Configuration Variables local CONFIG = { HORIZONTAL_MULTIPLIER = 1.5, VERTICAL_MULTIPLIER = 3, TRANSPARENCY = 0.5, WALKSPEED = 16, JUMPPOWER = 50, MAGNET_RANGE = 50, DIVE_SPEED = 0.5, -- Duration in seconds (lower = faster) -- Toggle States frisbeeModEnabled = false, walkspeedEnabled = false, jumppowerEnabled = false, magnetEnabled = false, noJumpCooldownEnabled = false, } -- Table to track processed Frisbees local processedFrisbees = {} local frisbeeConnections = {} -- Function to apply modifications to a Frisbee local function modifyFrisbee(frisbee) if processedFrisbees[frisbee] then return end print("Found new Frisbee:", frisbee.Name) -- Store original properties if not frisbee:GetAttribute("OriginalSize") then frisbee:SetAttribute("OriginalSize", tostring(frisbee.Size)) frisbee:SetAttribute("OriginalTransparency", frisbee.Transparency) end -- Increase size with more vertical height local currentSize = frisbee.Size frisbee.Size = Vector3.new( currentSize.X * CONFIG.HORIZONTAL_MULTIPLIER, currentSize.Y * CONFIG.VERTICAL_MULTIPLIER, currentSize.Z * CONFIG.HORIZONTAL_MULTIPLIER ) -- Set transparency frisbee.Transparency = CONFIG.TRANSPARENCY -- Mark as processed processedFrisbees[frisbee] = true print("Modified Frisbee - New Size:", frisbee.Size, "Transparency:", frisbee.Transparency) end -- Function to restore Frisbee to original state local function restoreFrisbee(frisbee) local originalSize = frisbee:GetAttribute("OriginalSize") local originalTransparency = frisbee:GetAttribute("OriginalTransparency") if originalSize then -- Parse the Vector3 string local x, y, z = originalSize:match("([%d%.]+),%s*([%d%.]+),%s*([%d%.]+)") if x and y and z then frisbee.Size = Vector3.new(tonumber(x), tonumber(y), tonumber(z)) end end if originalTransparency then frisbee.Transparency = originalTransparency end frisbee.CanCollide = true end -- Function to check if Frisbee is under the player local function checkAndUpdateCollision(frisbee) local character = LocalPlayer.Character if not character then return end local humanoidRootPart = character:FindFirstChild("HumanoidRootPart") if not humanoidRootPart then return end -- Check if Frisbee is below the player local playerY = humanoidRootPart.Position.Y local frisbeeY = frisbee.Position.Y if frisbeeY < playerY then frisbee.CanCollide = false else frisbee.CanCollide = true end end -- Function to check if Frisbee is owned by any player local function isFrisbeeOwnedByPlayer(frisbee) -- Check if the Frisbee is a child of any player's character for _, player in pairs(Players:GetPlayers()) do if player.Character then if frisbee:IsDescendantOf(player.Character) then return true end end end -- Check if the Frisbee has a BodyVelocity or is being held (common ownership indicators) local bodyVelocity = frisbee:FindFirstChild("BodyVelocity") local bodyPosition = frisbee:FindFirstChild("BodyPosition") -- If it has these and they're active, it might be owned if bodyVelocity or bodyPosition then -- Additional check: see if it's near any player's hand for _, player in pairs(Players:GetPlayers()) do if player.Character then local rightHand = player.Character:FindFirstChild("RightHand") or player.Character:FindFirstChild("Right Arm") local leftHand = player.Character:FindFirstChild("LeftHand") or player.Character:FindFirstChild("Left Arm") if rightHand and (frisbee.Position - rightHand.Position).Magnitude < 5 then return true end if leftHand and (frisbee.Position - leftHand.Position).Magnitude < 5 then return true end end end end return false end -- Active dives table to track ongoing dives local activeDives = {} -- Function to create a smooth dive to the Frisbee local function diveToFrisbee(humanoidRootPart, targetFrisbee) -- Cancel any existing dive if activeDives[humanoidRootPart] then activeDives[humanoidRootPart].connection:Disconnect() if activeDives[humanoidRootPart].bodyVelocity then activeDives[humanoidRootPart].bodyVelocity:Destroy() end end local startTime = tick() local trackingDuration = 2 -- Track for 2 seconds -- Create BodyVelocity for smooth movement local bodyVelocity = Instance.new("BodyVelocity") bodyVelocity.Name = "DiveVelocity" bodyVelocity.MaxForce = Vector3.new(100000, 100000, 100000) bodyVelocity.Velocity = Vector3.new(0, 0, 0) bodyVelocity.Parent = humanoidRootPart -- Create the diving motion local diveConnection diveConnection = RunService.Heartbeat:Connect(function() local elapsed = tick() - startTime -- Stop tracking after 2 seconds if elapsed >= trackingDuration then if bodyVelocity and bodyVelocity.Parent then bodyVelocity:Destroy() end diveConnection:Disconnect() activeDives[humanoidRootPart] = nil print("Dive ended - 2 seconds elapsed") return end -- Check if Frisbee still exists if not targetFrisbee or not targetFrisbee.Parent then if bodyVelocity and bodyVelocity.Parent then bodyVelocity:Destroy() end diveConnection:Disconnect() activeDives[humanoidRootPart] = nil print("Dive ended - Frisbee disappeared") return end -- Check if Frisbee is now owned by a player (someone caught it) if isFrisbeeOwnedByPlayer(targetFrisbee) then if bodyVelocity and bodyVelocity.Parent then bodyVelocity:Destroy() end diveConnection:Disconnect() activeDives[humanoidRootPart] = nil print("Dive ended - Frisbee was caught") return end -- Update target position to follow the Frisbee local targetPosition = targetFrisbee.Position + Vector3.new(0, -1.5, 0) local currentPosition = humanoidRootPart.Position local distance = (targetPosition - currentPosition).Magnitude -- If we're very close, stop diving if distance < 2 then if bodyVelocity and bodyVelocity.Parent then bodyVelocity.Velocity = targetFrisbee.AssemblyLinearVelocity end print("Dive ended - Reached Frisbee") return end -- Calculate direction local direction = (targetPosition - currentPosition).Unit -- Much faster speed calculation local baseSpeed = math.min(distance * 8, 200) -- Much faster multiplier and higher cap local speedMultiplier = 1.5 + (elapsed / trackingDuration) * 1 -- Start faster and speed up more local targetSpeed = baseSpeed * speedMultiplier -- Cap speed targetSpeed = math.clamp(targetSpeed, 60, 250) -- Higher minimum and maximum speed -- Calculate target velocity local targetVelocity = direction * targetSpeed -- Add slight upward component for diving arc (only at start) local arcStrength = math.max(0, 1 - (elapsed / 0.3)) -- Shorter arc duration targetVelocity = targetVelocity + Vector3.new(0, 15 * arcStrength, 0) -- Apply velocity directly (no lerp for more responsive movement) bodyVelocity.Velocity = targetVelocity -- Rotate to face direction of movement local lookDirection = targetVelocity.Unit if lookDirection.Magnitude > 0 then humanoidRootPart.CFrame = CFrame.new(currentPosition, currentPosition + lookDirection) end end) activeDives[humanoidRootPart] = { connection = diveConnection, bodyVelocity = bodyVelocity } end -- Function to magnet Frisbee to player on click local function setupMagnetClick() local UserInputService = game:GetService("UserInputService") UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if input.UserInputType == Enum.UserInputType.MouseButton1 then if not CONFIG.magnetEnabled then return end local character = LocalPlayer.Character if not character then return end local humanoidRootPart = character:FindFirstChild("HumanoidRootPart") if not humanoidRootPart then return end -- Find the closest Frisbee in range local closestFrisbee = nil local closestDistance = CONFIG.MAGNET_RANGE for _, object in pairs(workspace:GetDescendants()) do if object:IsA("BasePart") and string.lower(object.Name):find("frisbee") then local distance = (object.Position - humanoidRootPart.Position).Magnitude if distance <= CONFIG.MAGNET_RANGE and distance < closestDistance and not isFrisbeeOwnedByPlayer(object) then closestFrisbee = object closestDistance = distance end end end if closestFrisbee then -- Dive to the Frisbee with smooth animation and tracking diveToFrisbee(humanoidRootPart, closestFrisbee) print("Diving to Frisbee! Distance: " .. math.floor(closestDistance) .. " studs - Tracking for 2 seconds!") else print("No Frisbee in range!") end end end) end -- Function to find and modify all Frisbees local function findAndModifyFrisbees() for _, object in pairs(workspace:GetDescendants()) do if object:IsA("BasePart") and string.lower(object.Name):find("frisbee") then if CONFIG.frisbeeModEnabled then modifyFrisbee(object) checkAndUpdateCollision(object) end end end end -- Function to restore all Frisbees local function restoreAllFrisbees() for frisbee, _ in pairs(processedFrisbees) do if frisbee and frisbee.Parent then restoreFrisbee(frisbee) end end processedFrisbees = {} end -- Create Tabs local FrisbeeTab = Window:CreateTab("Frisbee", 4483362458) local PlayerTab = Window:CreateTab("Player", 4483362458) -- Frisbee Tab Controls local FrisbeeSection = FrisbeeTab:CreateSection("Frisbee Modifications") local FrisbeeToggle = FrisbeeTab:CreateToggle({ Name = "Enable Frisbee Modifications", CurrentValue = false, Flag = "FrisbeeToggle", Callback = function(Value) CONFIG.frisbeeModEnabled = Value if Value then print("Frisbee modifications enabled") findAndModifyFrisbees() else print("Frisbee modifications disabled") restoreAllFrisbees() end end, }) FrisbeeTab:CreateSlider({ Name = "Horizontal Size Multiplier", Range = {1, 5}, Increment = 0.1, CurrentValue = 1.5, Flag = "HorizontalMultiplier", Callback = function(Value) CONFIG.HORIZONTAL_MULTIPLIER = Value if CONFIG.frisbeeModEnabled then restoreAllFrisbees() findAndModifyFrisbees() end end, }) FrisbeeTab:CreateSlider({ Name = "Vertical Size Multiplier", Range = {1, 10}, Increment = 0.5, CurrentValue = 3, Flag = "VerticalMultiplier", Callback = function(Value) CONFIG.VERTICAL_MULTIPLIER = Value if CONFIG.frisbeeModEnabled then restoreAllFrisbees() findAndModifyFrisbees() end end, }) FrisbeeTab:CreateSlider({ Name = "Transparency", Range = {0, 1}, Increment = 0.1, CurrentValue = 0.5, Flag = "Transparency", Callback = function(Value) CONFIG.TRANSPARENCY = Value if CONFIG.frisbeeModEnabled then restoreAllFrisbees() findAndModifyFrisbees() end end, }) local MagnetSection = FrisbeeTab:CreateSection("Frisbee Magnet") local MagnetToggle = FrisbeeTab:CreateToggle({ Name = "Dive to Frisbee (Left Click)", CurrentValue = false, Flag = "MagnetToggle", Callback = function(Value) CONFIG.magnetEnabled = Value if Value then print("Frisbee dive enabled - Left click to dive to nearest Frisbee!") else print("Frisbee dive disabled") end end, }) FrisbeeTab:CreateSlider({ Name = "Magnet Range", Range = {10, 200}, Increment = 5, CurrentValue = 50, Flag = "MagnetRange", Callback = function(Value) CONFIG.MAGNET_RANGE = Value end, }) FrisbeeTab:CreateSlider({ Name = "Dive Speed (Lower = Faster)", Range = {0.1, 2}, Increment = 0.1, CurrentValue = 0.5, Flag = "DiveSpeed", Callback = function(Value) CONFIG.DIVE_SPEED = Value end, }) -- Player Tab Controls local PlayerSection = PlayerTab:CreateSection("Player Modifications") local WalkspeedToggle = PlayerTab:CreateToggle({ Name = "Custom Walkspeed", CurrentValue = false, Flag = "WalkspeedToggle", Callback = function(Value) CONFIG.walkspeedEnabled = Value if not Value then local character = LocalPlayer.Character if character then local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid then humanoid.WalkSpeed = 16 -- Default Roblox walkspeed end end end end, }) PlayerTab:CreateSlider({ Name = "Walkspeed", Range = {16, 200}, Increment = 1, CurrentValue = 16, Flag = "Walkspeed", Callback = function(Value) CONFIG.WALKSPEED = Value end, }) local JumppowerToggle = PlayerTab:CreateToggle({ Name = "Custom Jump Power", CurrentValue = false, Flag = "JumppowerToggle", Callback = function(Value) CONFIG.jumppowerEnabled = Value if not Value then local character = LocalPlayer.Character if character then local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid then humanoid.JumpPower = 50 -- Default Roblox jump power end end end end, }) PlayerTab:CreateSlider({ Name = "Jump Power", Range = {50, 300}, Increment = 5, CurrentValue = 50, Flag = "Jumppower", Callback = function(Value) CONFIG.JUMPPOWER = Value end, }) local NoJumpCooldownToggle = PlayerTab:CreateToggle({ Name = "No Jump Cooldown", CurrentValue = false, Flag = "NoJumpCooldown", Callback = function(Value) CONFIG.noJumpCooldownEnabled = Value if Value then print("No jump cooldown enabled") else print("No jump cooldown disabled") end end, }) -- Main Loop using RunService RunService.Heartbeat:Connect(function() -- Update Frisbees if CONFIG.frisbeeModEnabled then findAndModifyFrisbees() end -- Update Player Stats local character = LocalPlayer.Character if character then local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid then if CONFIG.walkspeedEnabled then humanoid.WalkSpeed = CONFIG.WALKSPEED end if CONFIG.jumppowerEnabled then humanoid.JumpPower = CONFIG.JUMPPOWER end if CONFIG.noJumpCooldownEnabled then -- Remove jump cooldown by setting UseJumpPower to true -- This allows instant jumping if humanoid:GetState() == Enum.HumanoidStateType.Landed then humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, true) end -- Alternative method: Set JumpHeight or modify the StateChanged pcall(function() humanoid.UseJumpPower = true end) end end end end) -- Wait for character to load before setting up magnet if LocalPlayer.Character then setupMagnetClick() else LocalPlayer.CharacterAdded:Wait() setupMagnetClick() end -- Initial check print("Frisbee Helper UI Loaded!") Rayfield:Notify({ Title = "Frisbee Helper", Content = "UI Loaded Successfully!", Duration = 3, Image = 4483362458, })