-- Remove previous GUI version if it exists if game:GetService("CoreGui"):FindFirstChild("TeleportHubGui") then game:GetService("CoreGui").TeleportHubGui:Destroy() end -- Service variables local Players = game:GetService("Players") local CoreGui = game:GetService("CoreGui") local HttpService = game:GetService("HttpService") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer -- Live script variables local savedPositions = {} local isMinimized = false -- Main GUI container local screenGui = Instance.new("ScreenGui") screenGui.Name = "TeleportHubGui" screenGui.Parent = CoreGui screenGui.ResetOnSpawn = false -- Main frame (The Main Window container) local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.new(0, 330, 0, 430) mainFrame.Position = UDim2.new(0.5, -165, 0.5, -215) mainFrame.BackgroundColor3 = Color3.fromRGB(20, 10, 35) mainFrame.BorderSizePixel = 0 mainFrame.Active = true mainFrame.Parent = screenGui local mainCorner = Instance.new("UICorner") mainCorner.CornerRadius = UDim.new(0, 10) mainCorner.Parent = mainFrame -- Title bar panel (Hold to drag STRICTLY here) local titleLabel = Instance.new("TextLabel") titleLabel.Size = UDim2.new(1, 0, 0, 40) titleLabel.BackgroundColor3 = Color3.fromRGB(40, 15, 75) titleLabel.Text = " Teleport Hub" titleLabel.TextColor3 = Color3.fromRGB(185, 115, 255) titleLabel.Font = Enum.Font.SourceSansBold titleLabel.TextSize = 18 titleLabel.TextXAlignment = Enum.TextXAlignment.Left titleLabel.Active = true titleLabel.Parent = mainFrame local titleCorner = Instance.new("UICorner") titleCorner.CornerRadius = UDim.new(0, 10) titleCorner.Parent = titleLabel -- Smooth Dragging Engine for Mobile Devices (No Shifting Bug) local dragging, dragInput, dragStart, startPos local function updateDrag(input) local delta = input.Position - dragStart mainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end titleLabel.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = mainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) titleLabel.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then updateDrag(input) end end) -- Minimize/Maximize Button local toggleButton = Instance.new("TextButton") toggleButton.Size = UDim2.new(0, 35, 0, 30) toggleButton.Position = UDim2.new(1, -40, 0, 5) toggleButton.BackgroundColor3 = Color3.fromRGB(60, 25, 110) toggleButton.Text = "▼" toggleButton.TextColor3 = Color3.fromRGB(185, 115, 255) toggleButton.Font = Enum.Font.SourceSansBold toggleButton.TextSize = 14 toggleButton.Parent = titleLabel local toggleCorner = Instance.new("UICorner") toggleCorner.CornerRadius = UDim.new(0, 5) toggleCorner.Parent = toggleButton -- MASTER SCROLLING FRAME local masterScroll = Instance.new("ScrollingFrame") masterScroll.Size = UDim2.new(1, 0, 1, -45) masterScroll.Position = UDim2.new(0, 0, 0, 45) masterScroll.BackgroundTransparency = 1 masterScroll.BorderSizePixel = 0 masterScroll.CanvasSize = UDim2.new(0, 0, 0, 530) masterScroll.ScrollBarThickness = 8 masterScroll.ScrollBarImageColor3 = Color3.fromRGB(110, 35, 200) masterScroll.ScrollingDirection = Enum.ScrollingDirection.Y masterScroll.Parent = mainFrame ---------------------------------------------------- -- FIXED: POPUP PROMPT WINDOW (Всплывающее фиолетовое окошко) ---------------------------------------------------- local promptFrame = Instance.new("Frame") promptFrame.Size = UDim2.new(0, 260, 0, 130) promptFrame.Position = UDim2.new(0.5, -130, 0.5, -65) promptFrame.BackgroundColor3 = Color3.fromRGB(35, 15, 60) promptFrame.BorderSizePixel = 0 promptFrame.ZIndex = 50 -- Ставим поверх всех остальных элементов promptFrame.Active = true -- Замораживает клики сквозь это окно promptFrame.Visible = false promptFrame.Parent = mainFrame local promptCorner = Instance.new("UICorner") promptCorner.CornerRadius = UDim.new(0, 8) promptCorner.Parent = promptFrame local promptLabel = Instance.new("TextLabel") promptLabel.Size = UDim2.new(1, 0, 0, 30) promptLabel.BackgroundTransparency = 1 promptLabel.Text = "Enter new name:" promptLabel.TextColor3 = Color3.fromRGB(185, 115, 255) promptLabel.Font = Enum.Font.SourceSansBold promptLabel.TextSize = 15 promptLabel.ZIndex = 51 promptLabel.Parent = promptFrame local promptInput = Instance.new("TextBox") promptInput.Size = UDim2.new(1, -20, 0, 35) promptInput.Position = UDim2.new(0, 10, 0, 40) promptInput.BackgroundColor3 = Color3.fromRGB(20, 10, 35) promptInput.Text = "" promptInput.TextColor3 = Color3.fromRGB(185, 115, 255) promptInput.Font = Enum.Font.SourceSans promptInput.TextSize = 15 promptInput.ZIndex = 51 -- Полная блокировка сдвигов Roblox при фокусе на клавиатуру смартфона promptInput.ClipsDescendants = false promptInput.Parent = promptFrame local promptInputCorner = Instance.new("UICorner") promptInputCorner.CornerRadius = UDim.new(0, 4) promptInputCorner.Parent = promptInput local promptOk = Instance.new("TextButton") promptOk.Size = UDim2.new(0.5, -15, 0, 30) promptOk.Position = UDim2.new(0, 10, 0, 85) promptOk.BackgroundColor3 = Color3.fromRGB(110, 35, 200) promptOk.Text = "OK" promptOk.TextColor3 = Color3.fromRGB(255, 255, 255) promptOk.Font = Enum.Font.SourceSansBold promptOk.TextSize = 14 promptOk.ZIndex = 51 promptOk.Parent = promptFrame local promptOkCorner = Instance.new("UICorner") promptOkCorner.CornerRadius = UDim.new(0, 4) promptOkCorner.Parent = promptOk local promptCancel = Instance.new("TextButton") promptCancel.Size = UDim2.new(0.5, -15, 0, 30) promptCancel.Position = UDim2.new(0.5, 5, 0, 85) promptCancel.BackgroundColor3 = Color3.fromRGB(80, 20, 60) promptCancel.Text = "Cancel" promptCancel.TextColor3 = Color3.fromRGB(255, 255, 255) promptCancel.Font = Enum.Font.SourceSansBold promptCancel.TextSize = 14 promptCancel.ZIndex = 51 promptCancel.Parent = promptFrame local promptCancelCorner = Instance.new("UICorner") promptCancelCorner.CornerRadius = UDim.new(0, 4) promptCancelCorner.Parent = promptCancel local currentPromptCallback = nil local function openPrompt(defaultText, callback) promptInput.Text = defaultText masterScroll.ScrollingEnabled = false -- Временно отключаем общую прокрутку (замораживаем меню) promptFrame.Visible = true promptInput:CaptureFocus() currentPromptCallback = callback end promptCancel.MouseButton1Click:Connect(function() promptFrame.Visible = false masterScroll.ScrollingEnabled = true -- Размораживаем меню currentPromptCallback = nil end) promptOk.MouseButton1Click:Connect(function() local text = promptInput.Text:match("^%s*(.-)%s*$") if text ~= "" and currentPromptCallback then currentPromptCallback(text) end promptFrame.Visible = false masterScroll.ScrollingEnabled = true -- Размораживаем меню currentPromptCallback = nil end) ---------------------------------------------------- -- INTERFACE ELEMENTS ---------------------------------------------------- local nameInput = Instance.new("TextBox") nameInput.Size = UDim2.new(1, -26, 0, 35) nameInput.Position = UDim2.new(0, 10, 0, 15) nameInput.BackgroundColor3 = Color3.fromRGB(35, 15, 55) nameInput.Text = "" nameInput.PlaceholderText = "Enter location name..." nameInput.TextColor3 = Color3.fromRGB(185, 115, 255) nameInput.PlaceholderColor3 = Color3.fromRGB(110, 60, 160) nameInput.Font = Enum.Font.SourceSans nameInput.TextSize = 16 nameInput.Parent = masterScroll local inputCorner = Instance.new("UICorner") inputCorner.CornerRadius = UDim.new(0, 5) inputCorner.Parent = nameInput local saveButton = Instance.new("TextButton") saveButton.Size = UDim2.new(1, -26, 0, 35) saveButton.Position = UDim2.new(0, 10, 0, 55) saveButton.BackgroundColor3 = Color3.fromRGB(110, 35, 200) saveButton.Text = "Save Current Position" saveButton.TextColor3 = Color3.fromRGB(220, 180, 255) saveButton.Font = Enum.Font.SourceSansBold saveButton.TextSize = 16 saveButton.Parent = masterScroll local saveCorner = Instance.new("UICorner") saveCorner.CornerRadius = UDim.new(0, 5) saveCorner.Parent = saveButton local configInput = Instance.new("TextBox") configInput.Size = UDim2.new(1, -26, 0, 35) configInput.Position = UDim2.new(0, 10, 0, 105) configInput.BackgroundColor3 = Color3.fromRGB(35, 15, 55) configInput.Text = "" configInput.PlaceholderText = "Enter config name (e.g. birds)..." configInput.TextColor3 = Color3.fromRGB(185, 115, 255) configInput.PlaceholderColor3 = Color3.fromRGB(110, 60, 160) configInput.Font = Enum.Font.SourceSans configInput.TextSize = 16 configInput.Parent = masterScroll local configInputCorner = Instance.new("UICorner") configInputCorner.CornerRadius = UDim.new(0, 5) configInputCorner.Parent = configInput local saveConfigBtn = Instance.new("TextButton") saveConfigBtn.Size = UDim2.new(0.5, -18, 0, 35) saveConfigBtn.Position = UDim2.new(0, 10, 0, 145) saveConfigBtn.BackgroundColor3 = Color3.fromRGB(80, 20, 150) saveConfigBtn.Text = "Save Config" saveConfigBtn.TextColor3 = Color3.fromRGB(220, 180, 255) saveConfigBtn.Font = Enum.Font.SourceSansBold saveConfigBtn.TextSize = 15 saveConfigBtn.Parent = masterScroll local saveConfigCorner = Instance.new("UICorner") saveConfigCorner.CornerRadius = UDim.new(0, 5) saveConfigCorner.Parent = saveConfigBtn local loadConfigBtn = Instance.new("TextButton") loadConfigBtn.Size = UDim2.new(0.5, -18, 0, 35) loadConfigBtn.Position = UDim2.new(0.5, 2, 0, 145) loadConfigBtn.BackgroundColor3 = Color3.fromRGB(95, 30, 175) loadConfigBtn.Text = "Load Config" loadConfigBtn.TextColor3 = Color3.fromRGB(220, 180, 255) loadConfigBtn.Font = Enum.Font.SourceSansBold loadConfigBtn.TextSize = 15 loadConfigBtn.Parent = masterScroll local loadConfigCorner = Instance.new("UICorner") loadConfigCorner.CornerRadius = UDim.new(0, 5) loadConfigCorner.Parent = loadConfigBtn local deleteConfigBtn = Instance.new("TextButton") deleteConfigBtn.Size = UDim2.new(1, -26, 0, 30) deleteConfigBtn.Position = UDim2.new(0, 10, 0, 185) deleteConfigBtn.BackgroundColor3 = Color3.fromRGB(95, 30, 175) deleteConfigBtn.Text = "Delete config" deleteConfigBtn.TextColor3 = Color3.fromRGB(220, 180, 255) deleteConfigBtn.Font = Enum.Font.SourceSansBold deleteConfigBtn.TextSize = 14 deleteConfigBtn.Parent = masterScroll local deleteConfigCorner = Instance.new("UICorner") deleteConfigCorner.CornerRadius = UDim.new(0, 5) deleteConfigCorner.Parent = deleteConfigBtn ---------------------------------------------------- -- CONFIG MANAGER MINI ZONE ---------------------------------------------------- local miniMenuHeader = Instance.new("TextLabel") miniMenuHeader.Size = UDim2.new(1, -26, 0, 20) miniMenuHeader.Position = UDim2.new(0, 10, 0, 225) miniMenuHeader.BackgroundTransparency = 1 miniMenuHeader.Text = "Saved Config Files Manager:" miniMenuHeader.TextColor3 = Color3.fromRGB(140, 80, 210) miniMenuHeader.Font = Enum.Font.SourceSansBold miniMenuHeader.TextSize = 14 miniMenuHeader.TextXAlignment = Enum.TextXAlignment.Left miniMenuHeader.Parent = masterScroll local miniMenuScroll = Instance.new("ScrollingFrame") miniMenuScroll.Size = UDim2.new(1, -26, 0, 75) miniMenuScroll.Position = UDim2.new(0, 10, 0, 245) miniMenuScroll.BackgroundColor3 = Color3.fromRGB(15, 5, 25) miniMenuScroll.BorderSizePixel = 0 miniMenuScroll.ScrollBarThickness = 5 miniMenuScroll.ScrollBarImageColor3 = Color3.fromRGB(95, 30, 175) miniMenuScroll.ScrollingDirection = Enum.ScrollingDirection.Y miniMenuScroll.Parent = masterScroll local miniMenuCorner = Instance.new("UICorner") miniMenuCorner.CornerRadius = UDim.new(0, 6) miniMenuCorner.Parent = miniMenuScroll local miniMenuLayout = Instance.new("UIListLayout") miniMenuLayout.Parent = miniMenuScroll miniMenuLayout.SortOrder = Enum.SortOrder.LayoutOrder miniMenuLayout.Padding = UDim.new(0, 3) miniMenuLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() miniMenuScroll.CanvasSize = UDim2.new(0, 0, 0, miniMenuLayout.AbsoluteContentSize.Y + 5) end) ---------------------------------------------------- -- LOCATIONS CONTAINER ---------------------------------------------------- local tpHeader = Instance.new("TextLabel") tpHeader.Size = UDim2.new(1, -26, 0, 20) tpHeader.Position = UDim2.new(0, 10, 0, 330) tpHeader.BackgroundTransparency = 1 tpHeader.Text = "Saved Locations Points:" tpHeader.TextColor3 = Color3.fromRGB(140, 80, 210) tpHeader.Font = Enum.Font.SourceSansBold tpHeader.TextSize = 14 tpHeader.TextXAlignment = Enum.TextXAlignment.Left tpHeader.Parent = masterScroll local pointsScroll = Instance.new("ScrollingFrame") pointsScroll.Size = UDim2.new(1, -26, 0, 160) pointsScroll.Position = UDim2.new(0, 10, 0, 350) pointsScroll.BackgroundColor3 = Color3.fromRGB(15, 5, 25) pointsScroll.BorderSizePixel = 0 pointsScroll.ScrollBarThickness = 6 pointsScroll.ScrollBarImageColor3 = Color3.fromRGB(110, 35, 200) pointsScroll.ScrollingDirection = Enum.ScrollingDirection.Y pointsScroll.Parent = masterScroll local pointsCorner = Instance.new("UICorner") pointsCorner.CornerRadius = UDim.new(0, 6) pointsCorner.Parent = pointsScroll local listLayout = Instance.new("UIListLayout") listLayout.Parent = pointsScroll listLayout.SortOrder = Enum.SortOrder.LayoutOrder listLayout.Padding = UDim.new(0, 5) listLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() pointsScroll.CanvasSize = UDim2.new(0, 0, 0, listLayout.AbsoluteContentSize.Y + 10) end) ---------------------------------------------------- -- CORE IMPLEMENTATIONS ---------------------------------------------------- local function clearListUI() for _, child in ipairs(pointsScroll:GetChildren()) do if child:IsA("Frame") then child:Destroy() end end end local function createLocationRow(name, position) local rowFrame = Instance.new("Frame") rowFrame.Size = UDim2.new(1, -8, 0, 40) rowFrame.BackgroundColor3 = Color3.fromRGB(35, 15, 55) rowFrame.Name = name rowFrame.Parent = pointsScroll local rowCorner = Instance.new("UICorner") rowCorner.CornerRadius = UDim.new(0, 5) rowCorner.Parent = rowFrame local locationLabel = Instance.new("TextLabel") locationLabel.Size = UDim2.new(0.4, 0, 1, 0) locationLabel.Position = UDim2.new(0, 10, 0, 0) locationLabel.BackgroundTransparency = 1 locationLabel.Text = name locationLabel.TextColor3 = Color3.fromRGB(185, 115, 255) locationLabel.Font = Enum.Font.SourceSans locationLabel.TextSize = 16 locationLabel.TextXAlignment = Enum.TextXAlignment.Left locationLabel.Parent = rowFrame local tpButton = Instance.new("TextButton") tpButton.Size = UDim2.new(0, 50, 0, 30) tpButton.Position = UDim2.new(1, -125, 0, 5) tpButton.BackgroundColor3 = Color3.fromRGB(90, 25, 160) tpButton.Text = "TP" tpButton.TextColor3 = Color3.fromRGB(220, 180, 255) tpButton.Font = Enum.Font.SourceSansBold tpButton.TextSize = 14 tpButton.Parent = rowFrame local tpCorner = Instance.new("UICorner") tpCorner.CornerRadius = UDim.new(0, 4) tpCorner.Parent = tpButton local renameBtn = Instance.new("TextButton") renameBtn.Size = UDim2.new(0, 32, 0, 30) renameBtn.Position = UDim2.new(1, -70, 0, 5) renameBtn.BackgroundColor3 = Color3.fromRGB(60, 25, 110) renameBtn.Text = "✏️" renameBtn.TextColor3 = Color3.fromRGB(255, 255, 255) renameBtn.Font = Enum.Font.SourceSansBold renameBtn.TextSize = 14 renameBtn.Parent = rowFrame local renCorner = Instance.new("UICorner") renCorner.CornerRadius = UDim.new(0, 4) renCorner.Parent = renameBtn local delButton = Instance.new("TextButton") delButton.Size = UDim2.new(0, 32, 0, 30) delButton.Position = UDim2.new(1, -35, 0, 5) delButton.BackgroundColor3 = Color3.fromRGB(130, 20, 80) delButton.Text = "🗑️" delButton.TextColor3 = Color3.fromRGB(255, 255, 255) delButton.Font = Enum.Font.SourceSansBold delButton.TextSize = 14 delButton.Parent = rowFrame local delCorner = Instance.new("UICorner") delCorner.CornerRadius = UDim.new(0, 4) delCorner.Parent = delButton tpButton.MouseButton1Click:Connect(function() local character = player.Character if character and character:FindFirstChild("HumanoidRootPart") then character.HumanoidRootPart.CFrame = CFrame.new(position) end end) -- FIXED: Окошко гарантированно вылетает, замораживая меню! renameBtn.MouseButton1Click:Connect(function() openPrompt(name, function(newName) if newName ~= "" and not savedPositions[newName] then savedPositions[newName] = position savedPositions[name] = nil locationLabel.Text = newName rowFrame.Name = newName name = newName end end) end) delButton.MouseButton1Click:Connect(function() savedPositions[name] = nil rowFrame:Destroy() end) end -- WORKSPACE SAVED CONFIG EXPLORER local lastScannedFiles = "" local function scanWorkspaceConfigFiles() local files = listfiles("") local currentFilesString = table.concat(files, ",") if currentFilesString == lastScannedFiles then return end lastScannedFiles = currentFilesString for _, child in ipairs(miniMenuScroll:GetChildren()) do if child:IsA("Frame") or child:IsA("TextLabel") then child:Destroy() end end local found = false for _, path in ipairs(files) do if path:match("_tphub%.json$") then found = true local cleanName = path:gsub("_tphub%.json", ""):gsub("^%./", ""):gsub("^workspace/", ""):gsub("^files/", "") local fileFrame = Instance.new("Frame") fileFrame.Size = UDim2.new(1, -5, 0, 25) fileFrame.BackgroundTransparency = 1 fileFrame.Parent = miniMenuScroll local fileLabel = Instance.new("TextLabel") fileLabel.Size = UDim2.new(1, -45, 1, 0) fileLabel.BackgroundTransparency = 1 fileLabel.Text = " 📄 " .. cleanName fileLabel.TextColor3 = Color3.fromRGB(185, 115, 255) fileLabel.Font = Enum.Font.SourceSans fileLabel.TextSize = 14 fileLabel.TextXAlignment = Enum.TextXAlignment.Left fileLabel.Parent = fileFrame local renameFileBtn = Instance.new("TextButton") renameFileBtn.Size = UDim2.new(0, 22, 0, 20) renameFileBtn.Position = UDim2.new(1, -25, 0, 2) renameFileBtn.BackgroundColor3 = Color3.fromRGB(45, 20, 70) renameFileBtn.Text = "✏️" renameFileBtn.TextColor3 = Color3.fromRGB(255, 255, 255) renameFileBtn.Font = Enum.Font.SourceSansBold renameFileBtn.TextSize = 11 renameFileBtn.Parent = fileFrame local rfCorner = Instance.new("UICorner") rfCorner.CornerRadius = UDim.new(0, 3) rfCorner.Parent = renameFileBtn -- FIXED: Окошко гарантированно вылетает для файлов конфигураций! renameFileBtn.MouseButton1Click:Connect(function() openPrompt(cleanName, function(newConfigName) local oldPath = cleanName .. "_tphub.json" local newPath = newConfigName .. "_tphub.json" if isfile(oldPath) and not isfile(newPath) then local content = readfile(oldPath) writefile(newPath, content) delfile(oldPath) lastScannedFiles = "" scanWorkspaceConfigFiles() end end) end) end end if not found then local emptyLabel = Instance.new("TextLabel") emptyLabel.Size = UDim2.new(1, 0, 0, 20) emptyLabel.BackgroundTransparency = 1 emptyLabel.Text = " No saved configs found" emptyLabel.TextColor3 = Color3.fromRGB(110, 60, 160) emptyLabel.Font = Enum.Font.SourceSansItalic emptyLabel.TextSize = 13 emptyLabel.TextXAlignment = Enum.TextXAlignment.Left emptyLabel.Parent = miniMenuScroll end end local HttpService = game:GetService("HttpService") -- SAVE CONFIG ENGINE saveConfigBtn.MouseButton1Click:Connect(function() local cfgName = configInput.Text:match("^%s*(.-)%s*$") if cfgName == "" then return end local exportData = {} for name, pos in pairs(savedPositions) do exportData[name] = {pos.X, pos.Y, pos.Z} end local success, jsonStr = pcall(function() return HttpService:JSONEncode(exportData) end) if success then writefile(cfgName .. "_tphub.json", jsonStr) configInput.Text = "" configInput.PlaceholderText = "Saved!" lastScannedFiles = "" scanWorkspaceConfigFiles() task.delay(1.5, function() configInput.PlaceholderText = "Enter config name (e.g. birds)..." end) end end) -- LOAD CONFIG ENGINE loadConfigBtn.MouseButton1Click:Connect(function() local cfgName = configInput.Text:match("^%s*(.-)%s*$") if cfgName == "" then return end local fileName = cfgName .. "_tphub.json" if not isfile(fileName) then return end local fileContent = readfile(fileName) local success, importData = pcall(function() return HttpService:JSONDecode(fileContent) end) if success and importData then savedPositions = {} clearListUI() for name, coords in pairs(importData) do local vectorPos = Vector3.new(coords, coords, coords) savedPositions[name] = vectorPos createLocationRow(name, vectorPos) end configInput.Text = "" end end) -- DELETE CONFIG ENGINE deleteConfigBtn.MouseButton1Click:Connect(function() local cfgName = configInput.Text:match("^%s*(.-)%s*$") if cfgName == "" then return end local fileName = cfgName .. "_tphub.json" if isfile(fileName) then delfile(fileName) configInput.Text = "" lastScannedFiles = "" scanWorkspaceConfigFiles() end end) -- Live Location Creator saveButton.MouseButton1Click:Connect(function() local text = nameInput.Text:match("^%s*(.-)%s*$") if text == "" or savedPositions[text] then if savedPositions[text] then nameInput.Text = "" nameInput.PlaceholderText = "Name already taken!" nameInput.PlaceholderColor3 = Color3.fromRGB(185, 115, 255) task.delay(2, function() nameInput.PlaceholderText = "Enter location name..." nameInput.PlaceholderColor3 = Color3.fromRGB(110, 60, 160) end) end return end local character = player.Character if character and character:FindFirstChild("HumanoidRootPart") then local currentPos = character.HumanoidRootPart.Position for savedName, savedPos in pairs(savedPositions) do if (currentPos - savedPos).Magnitude < 1.5 then nameInput.Text = "" nameInput.PlaceholderText = "Position already saved!" nameInput.PlaceholderColor3 = Color3.fromRGB(185, 115, 255) task.delay(2, function() nameInput.PlaceholderText = "Enter location name..." nameInput.PlaceholderColor3 = Color3.fromRGB(110, 60, 160) end) return end end savedPositions[text] = currentPos createLocationRow(text, currentPos) nameInput.Text = "" end end) -- Minimize/Maximize calculation toggleButton.MouseButton1Click:Connect(function() isMinimized = not isMinimized if isMinimized then masterScroll.Visible = false mainFrame.Size = UDim2.new(0, 330, 0, 40) toggleButton.Text = "▲" else masterScroll.Visible = true mainFrame.Size = UDim2.new(0, 330, 0, 430) toggleButton.Text = "▼" end end) -- Run background scanners loop thread safely scanWorkspaceConfigFiles() task.spawn(function() while true do task.wait(2) pcall(scanWorkspaceConfigFiles) end end)