--[[ Saber Simulator – Summer Event 2026 Auto Seashell Collector MINIMAL GUI – Auto‑Collect and Invisibility (no fling). ]] -- ============================================================ -- 1. CONFIGURATION & STATE -- ============================================================ local Config = { Enabled = false, Delay = 0.1, TeleportOffsetY = 3, AntibanMin = 0.02, AntibanMax = 0.06, UseRemote = true, UseTeleport = true, Invisible = false, } local isRunning = false local CollectionThread = nil local CurrencyHolder = nil local RemoteEvent = nil local LocalPlayer = game:GetService("Players").LocalPlayer local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() local Humanoid = Character:WaitForChild("Humanoid") local RootPart = Character:WaitForChild("HumanoidRootPart") -- ============================================================ -- 2. FLING‑FREE INVISIBILITY -- ============================================================ local function ApplyInvisibility(enable) Character = LocalPlayer.Character if not Character then return end if enable then -- Make character visually transparent for _, part in ipairs(Character:GetDescendants()) do if part:IsA("BasePart") then part.Transparency = 1 end end -- Make character sit (grounded, no fling) and disable movement Humanoid.Sit = true Humanoid.WalkSpeed = 0 Humanoid.JumpPower = 0 -- Hide name display (if present) if Character:FindFirstChild("NameDisplay") then Character.NameDisplay.TextTransparency = 1 end else -- Restore visibility for _, part in ipairs(Character:GetDescendants()) do if part:IsA("BasePart") then part.Transparency = 0 end end -- Restore movement and stand up Humanoid.Sit = false Humanoid.WalkSpeed = 16 Humanoid.JumpPower = 50 if Character:FindFirstChild("NameDisplay") then Character.NameDisplay.TextTransparency = 0 end end end -- Apply invisibility on character respawn LocalPlayer.CharacterAdded:Connect(function(newChar) Character = newChar Humanoid = Character:WaitForChild("Humanoid") RootPart = Character:WaitForChild("HumanoidRootPart") if Config.Invisible then ApplyInvisibility(true) end end) -- ============================================================ -- 3. LOCATE GAME OBJECTS -- ============================================================ local function LocateGameObjects() CurrencyHolder = workspace.Gameplay and workspace.Gameplay.RegionsLoaded and workspace.Gameplay.RegionsLoaded.SummerEvent26 and workspace.Gameplay.RegionsLoaded.SummerEvent26.CurrencyPickup and workspace.Gameplay.RegionsLoaded.SummerEvent26.CurrencyPickup.CurrencyHolder if not CurrencyHolder then CurrencyHolder = workspace:FindFirstChild("Gameplay") and workspace.Gameplay:FindFirstChild("RegionsLoaded") and workspace.Gameplay.RegionsLoaded:FindFirstChild("SummerEvent26") and workspace.Gameplay.RegionsLoaded.SummerEvent26:FindFirstChild("CurrencyPickup") and workspace.Gameplay.RegionsLoaded.SummerEvent26.CurrencyPickup:FindFirstChild("CurrencyHolder") end if not CurrencyHolder then warn("[AutoCollect] CurrencyHolder NOT FOUND.") return false end local possibleNames = { "CollectCurrency", "CollectShell", "PickupCurrency", "CurrencyCollect", "SummerCollect", "GetCurrency", "Collect" } local ReplicatedStorage = game:GetService("ReplicatedStorage") for _, name in ipairs(possibleNames) do local event = ReplicatedStorage:FindFirstChild(name) if event and event:IsA("RemoteEvent") then RemoteEvent = event break end end return true end -- ============================================================ -- 4. CORE COLLECTION LOGIC -- ============================================================ local function IsShellValid(shell) if not shell then return false end if not shell.Parent then return false end if not shell:IsA("BasePart") then return false end if shell.Transparency and shell.Transparency > 0.8 then return false end return true end local function CollectByRemote(shell) if not RemoteEvent or not Config.UseRemote then return false end if not IsShellValid(shell) then return false end local success = pcall(function() RemoteEvent:FireServer(shell) end) return success end local function CollectByTeleport(shell) if not Config.UseTeleport then return false end if not IsShellValid(shell) then return false end local offset = Vector3.new(0, Config.TeleportOffsetY, 0) RootPart.CFrame = CFrame.new(shell.Position + offset) task.wait(0.05) if IsShellValid(shell) then RootPart.CFrame = RootPart.CFrame * CFrame.new(0, 0, 1) task.wait(0.05) RootPart.CFrame = RootPart.CFrame * CFrame.new(0, 0, -1) return not IsShellValid(shell) else return true end end local function CollectShell(shell) if not IsShellValid(shell) then return false end local collected = false if Config.UseRemote then collected = CollectByRemote(shell) end if not collected and Config.UseTeleport then collected = CollectByTeleport(shell) end if collected then local delay = math.random() * (Config.AntibanMax - Config.AntibanMin) + Config.AntibanMin task.wait(delay) end return collected end -- ============================================================ -- 5. MAIN COLLECTION LOOP -- ============================================================ local function CollectionLoop() while isRunning do if not Config.Enabled then task.wait(0.5) continue end Character = LocalPlayer.Character if not Character or not Character.Parent then Character = LocalPlayer.CharacterAdded:Wait() Humanoid = Character:WaitForChild("Humanoid") RootPart = Character:WaitForChild("HumanoidRootPart") if Config.Invisible then ApplyInvisibility(true) end end if not CurrencyHolder then if not LocateGameObjects() then task.wait(1) continue end end local shells = CurrencyHolder:GetChildren() if #shells == 0 then task.wait(Config.Delay) continue end table.sort(shells, function(a, b) if not a or not b then return false end if not a:IsA("BasePart") or not b:IsA("BasePart") then return false end return (RootPart.Position - a.Position).Magnitude < (RootPart.Position - b.Position).Magnitude end) for i = #shells, 1, -1 do local shell = shells[i] if IsShellValid(shell) then CollectShell(shell) end end task.wait(Config.Delay) end end -- ============================================================ -- 6. START / STOP -- ============================================================ local function StartCollector() if isRunning then return end if not LocateGameObjects() then warn("[AutoCollect] Cannot start – game objects not found.") return end isRunning = true if Config.Invisible then ApplyInvisibility(true) end CollectionThread = task.spawn(CollectionLoop) print("[AutoCollect] Collector started.") end local function StopCollector() isRunning = false if CollectionThread then task.cancel(CollectionThread) CollectionThread = nil end if Config.Invisible then ApplyInvisibility(false) end print("[AutoCollect] Collector stopped.") end -- ============================================================ -- 7. BUILD MINIMAL GUI -- ============================================================ local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "SeashellCollector" ScreenGui.ResetOnSpawn = false ScreenGui.Parent = game:GetService("CoreGui") -- Tiny window local Window = Instance.new("Frame") Window.Size = UDim2.new(0, 200, 0, 80) Window.Position = UDim2.new(0.5, -100, 0.5, -40) Window.BackgroundColor3 = Color3.fromRGB(30, 30, 40) Window.BackgroundTransparency = 0.05 Window.BorderSizePixel = 0 Window.ClipsDescendants = true Window.Parent = ScreenGui -- Title bar local TitleBar = Instance.new("Frame") TitleBar.Size = UDim2.new(1, 0, 0, 22) TitleBar.BackgroundColor3 = Color3.fromRGB(60, 60, 80) TitleBar.BackgroundTransparency = 0.2 TitleBar.BorderSizePixel = 0 TitleBar.Parent = Window local TitleText = Instance.new("TextLabel") TitleText.Size = UDim2.new(1, -44, 1, 0) TitleText.Position = UDim2.new(0, 6, 0, 0) TitleText.BackgroundTransparency = 1 TitleText.Text = "🌊 Shell" TitleText.TextColor3 = Color3.fromRGB(255, 200, 100) TitleText.TextSize = 12 TitleText.TextXAlignment = Enum.TextXAlignment.Left TitleText.Font = Enum.Font.GothamBold TitleText.Parent = TitleBar -- Min button local MinButton = Instance.new("TextButton") MinButton.Size = UDim2.new(0, 20, 1, 0) MinButton.Position = UDim2.new(1, -40, 0, 0) MinButton.BackgroundTransparency = 1 MinButton.Text = "−" MinButton.TextColor3 = Color3.fromRGB(255, 255, 150) MinButton.TextSize = 16 MinButton.Font = Enum.Font.GothamBold MinButton.Parent = TitleBar local isMinimized = false MinButton.MouseButton1Click:Connect(function() isMinimized = not isMinimized if isMinimized then Window.Size = UDim2.new(0, 200, 0, 22) Content.Visible = false MinButton.Text = "+" else Window.Size = UDim2.new(0, 200, 0, 80) Content.Visible = true MinButton.Text = "−" end end) -- Close button local CloseButton = Instance.new("TextButton") CloseButton.Size = UDim2.new(0, 20, 1, 0) CloseButton.Position = UDim2.new(1, -20, 0, 0) CloseButton.BackgroundTransparency = 1 CloseButton.Text = "✕" CloseButton.TextColor3 = Color3.fromRGB(255, 100, 100) CloseButton.TextSize = 12 CloseButton.Font = Enum.Font.GothamBold CloseButton.Parent = TitleBar CloseButton.MouseButton1Click:Connect(function() ScreenGui:Destroy() StopCollector() end) -- Drag logic local dragData = { isDragging = false, startPos = nil, startMouse = nil } TitleBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragData.isDragging = true dragData.startPos = Window.Position dragData.startMouse = input.Position end end) TitleBar.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragData.isDragging = false end end) game:GetService("UserInputService").InputChanged:Connect(function(input) if dragData.isDragging and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - dragData.startMouse Window.Position = UDim2.new( dragData.startPos.X.Scale, dragData.startPos.X.Offset + delta.X, dragData.startPos.Y.Scale, dragData.startPos.Y.Offset + delta.Y ) end end) -- Content – two toggles local Content = Instance.new("Frame") Content.Size = UDim2.new(1, -12, 1, -28) Content.Position = UDim2.new(0, 6, 0, 26) Content.BackgroundTransparency = 1 Content.Parent = Window -- Toggle 1: Auto-Collect local ToggleFrame1 = Instance.new("Frame") ToggleFrame1.Size = UDim2.new(1, 0, 0, 22) ToggleFrame1.Position = UDim2.new(0, 0, 0, 0) ToggleFrame1.BackgroundTransparency = 1 ToggleFrame1.Parent = Content local ToggleLabel1 = Instance.new("TextLabel") ToggleLabel1.Size = UDim2.new(0.5, 0, 1, 0) ToggleLabel1.BackgroundTransparency = 1 ToggleLabel1.Text = "Auto-Collect" ToggleLabel1.TextColor3 = Color3.fromRGB(220, 220, 220) ToggleLabel1.TextSize = 11 ToggleLabel1.TextXAlignment = Enum.TextXAlignment.Left ToggleLabel1.Font = Enum.Font.GothamMedium ToggleLabel1.Parent = ToggleFrame1 local ToggleButton1 = Instance.new("TextButton") ToggleButton1.Size = UDim2.new(0, 36, 0, 18) ToggleButton1.Position = UDim2.new(1, -38, 0.5, -9) ToggleButton1.BackgroundColor3 = Color3.fromRGB(80, 80, 80) ToggleButton1.BorderSizePixel = 0 ToggleButton1.Text = "OFF" ToggleButton1.TextColor3 = Color3.fromRGB(200, 200, 200) ToggleButton1.TextSize = 11 ToggleButton1.Font = Enum.Font.GothamBold ToggleButton1.Parent = ToggleFrame1 local toggleState1 = false ToggleButton1.MouseButton1Click:Connect(function() toggleState1 = not toggleState1 Config.Enabled = toggleState1 if toggleState1 then ToggleButton1.BackgroundColor3 = Color3.fromRGB(0, 180, 80) ToggleButton1.Text = "ON" pcall(StartCollector) else ToggleButton1.BackgroundColor3 = Color3.fromRGB(80, 80, 80) ToggleButton1.Text = "OFF" pcall(StopCollector) end end) -- Toggle 2: Invisibility (fling‑free) local ToggleFrame2 = Instance.new("Frame") ToggleFrame2.Size = UDim2.new(1, 0, 0, 22) ToggleFrame2.Position = UDim2.new(0, 0, 0, 24) ToggleFrame2.BackgroundTransparency = 1 ToggleFrame2.Parent = Content local ToggleLabel2 = Instance.new("TextLabel") ToggleLabel2.Size = UDim2.new(0.5, 0, 1, 0) ToggleLabel2.BackgroundTransparency = 1 ToggleLabel2.Text = "Invisibility" ToggleLabel2.TextColor3 = Color3.fromRGB(220, 220, 220) ToggleLabel2.TextSize = 11 ToggleLabel2.TextXAlignment = Enum.TextXAlignment.Left ToggleLabel2.Font = Enum.Font.GothamMedium ToggleLabel2.Parent = ToggleFrame2 local ToggleButton2 = Instance.new("TextButton") ToggleButton2.Size = UDim2.new(0, 36, 0, 18) ToggleButton2.Position = UDim2.new(1, -38, 0.5, -9) ToggleButton2.BackgroundColor3 = Color3.fromRGB(80, 80, 80) ToggleButton2.BorderSizePixel = 0 ToggleButton2.Text = "OFF" ToggleButton2.TextColor3 = Color3.fromRGB(200, 200, 200) ToggleButton2.TextSize = 11 ToggleButton2.Font = Enum.Font.GothamBold ToggleButton2.Parent = ToggleFrame2 local toggleState2 = false ToggleButton2.MouseButton1Click:Connect(function() toggleState2 = not toggleState2 Config.Invisible = toggleState2 if toggleState2 then ToggleButton2.BackgroundColor3 = Color3.fromRGB(180, 100, 200) ToggleButton2.Text = "ON" ApplyInvisibility(true) else ToggleButton2.BackgroundColor3 = Color3.fromRGB(80, 80, 80) ToggleButton2.Text = "OFF" ApplyInvisibility(false) end end) print("[AutoCollect] Minimal GUI loaded. Invisibility uses 'Sit' – no fling.")