-- PlayerListTeleport.lua -- Place this script in StarterGui local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local RunService = game:GetService("RunService") -- 動畫設置 local SPRING_SETTINGS = { dampingRatio = 0.75, frequency = 4 } -- 顏色設置 local COLORS = { background = Color3.fromRGB(35, 35, 35), backgroundLight = Color3.fromRGB(45, 45, 45), backgroundDark = Color3.fromRGB(30, 30, 30), -- New color accent = Color3.fromRGB(66, 134, 245), accentLight = Color3.fromRGB(86, 154, 255), -- New color accentDark = Color3.fromRGB(46, 114, 225), -- New color text = Color3.fromRGB(255, 255, 255), textDim = Color3.fromRGB(200, 200, 200), success = Color3.fromRGB(46, 184, 87), error = Color3.fromRGB(235, 69, 69), gradient1 = Color3.fromRGB(66, 134, 245), -- New color gradient2 = Color3.fromRGB(83, 91, 230) -- New color } -- Wait for player to load if not LocalPlayer then Players:GetPropertyChangedSignal("LocalPlayer"):Wait() LocalPlayer = Players.LocalPlayer end -- Create UI local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "TeleportGui" ScreenGui.ResetOnSpawn = false ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling ScreenGui.Parent = PlayerGui -- 創建彈簧動畫函數 local function createSpring(initial) local spring = {} spring.target = initial or 0 spring.position = spring.target spring.velocity = 0 function spring:step(dt) local f = SPRING_SETTINGS.frequency * 2 * math.pi local d = SPRING_SETTINGS.dampingRatio local r = self.target - self.position local sp = r * f * f local sv = self.velocity * f * d * 2 local acc = sp - sv self.velocity = self.velocity + acc * dt self.position = self.position + self.velocity * dt return self.position end return spring end -- Main Container (最小化時的容器) local MinContainer = Instance.new("Frame") MinContainer.Name = "MinContainer" MinContainer.BackgroundTransparency = 1 MinContainer.Size = UDim2.new(0, 60, 0, 60) MinContainer.Position = UDim2.new(1, -70, 0.5, -30) MinContainer.Parent = ScreenGui -- 最小化按鈕 local MinButton = Instance.new("ImageButton") MinButton.Name = "MinButton" MinButton.BackgroundColor3 = COLORS.background MinButton.Size = UDim2.new(0, 50, 0, 50) MinButton.Position = UDim2.new(0.5, -25, 0.5, -25) MinButton.Image = "rbxassetid://7072718840" -- 用戶圖標 MinButton.ImageColor3 = COLORS.accent MinButton.ImageTransparency = 0.1 MinButton.Parent = MinContainer -- 最小化按鈕圓角和效果 local MinButtonCorner = Instance.new("UICorner") MinButtonCorner.CornerRadius = UDim.new(1, 0) MinButtonCorner.Parent = MinButton local MinButtonStroke = Instance.new("UIStroke") MinButtonStroke.Color = COLORS.accent MinButtonStroke.Thickness = 2 MinButtonStroke.Parent = MinButton -- 最小化按鈕陰影 local MinButtonShadow = Instance.new("ImageLabel") MinButtonShadow.Name = "Shadow" MinButtonShadow.BackgroundTransparency = 1 MinButtonShadow.Position = UDim2.new(0, -15, 0, -15) MinButtonShadow.Size = UDim2.new(1, 30, 1, 30) MinButtonShadow.ZIndex = -1 MinButtonShadow.Image = "rbxassetid://6014261993" MinButtonShadow.ImageColor3 = Color3.fromRGB(0, 0, 0) MinButtonShadow.ImageTransparency = 0.5 MinButtonShadow.ScaleType = Enum.ScaleType.Slice MinButtonShadow.SliceCenter = Rect.new(49, 49, 450, 450) MinButtonShadow.Parent = MinButton -- Main Frame local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.BackgroundColor3 = COLORS.background MainFrame.BorderSizePixel = 0 MainFrame.ClipsDescendants = true -- 防止內容溢出 MainFrame.Parent = ScreenGui -- Glassmorphism effect local BlurEffect = Instance.new("ImageLabel") BlurEffect.Name = "BlurEffect" BlurEffect.BackgroundTransparency = 1 BlurEffect.Size = UDim2.new(1, 0, 1, 0) BlurEffect.Image = "rbxassetid://8275353455" BlurEffect.ImageColor3 = COLORS.background BlurEffect.ImageTransparency = 0.9 BlurEffect.Parent = MainFrame local MainCorner = Instance.new("UICorner") MainCorner.CornerRadius = UDim.new(0, 20) MainCorner.Parent = MainFrame -- 主窗口陰影 local MainShadow = Instance.new("ImageLabel") MainShadow.Name = "Shadow" MainShadow.BackgroundTransparency = 1 MainShadow.Position = UDim2.new(0, -15, 0, -15) MainShadow.Size = UDim2.new(1, 30, 1, 30) MainShadow.ZIndex = -1 MainShadow.Image = "rbxassetid://6014261993" MainShadow.ImageColor3 = Color3.fromRGB(0, 0, 0) MainShadow.ImageTransparency = 0.5 MainShadow.ScaleType = Enum.ScaleType.Slice MainShadow.SliceCenter = Rect.new(49, 49, 450, 450) MainShadow.Parent = MainFrame -- Title Bar local TitleBar = Instance.new("Frame") TitleBar.Name = "TitleBar" TitleBar.BackgroundColor3 = COLORS.backgroundDark -- Updated color TitleBar.BorderSizePixel = 0 TitleBar.Size = UDim2.new(1, 0, 0, 50) TitleBar.Parent = MainFrame -- 添加漸變效果 local TitleGradient = Instance.new("UIGradient") TitleGradient.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, COLORS.gradient1), -- New color ColorSequenceKeypoint.new(1, COLORS.gradient2) -- New color }) TitleGradient.Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 0.8), NumberSequenceKeypoint.new(1, 0.9) }) TitleGradient.Rotation = 45 TitleGradient.Parent = TitleBar local TitleBarCorner = Instance.new("UICorner") TitleBarCorner.CornerRadius = UDim.new(0, 20) TitleBarCorner.Parent = TitleBar -- 添加標題欄裝飾線 local TitleDecoration = Instance.new("Frame") TitleDecoration.Name = "TitleDecoration" TitleDecoration.BackgroundColor3 = COLORS.accent -- New color TitleDecoration.BorderSizePixel = 0 TitleDecoration.Size = UDim2.new(0, 3, 0.6, 0) TitleDecoration.Position = UDim2.new(0, 10, 0.2, 0) TitleDecoration.Parent = TitleBar local TitleDecorationCorner = Instance.new("UICorner") TitleDecorationCorner.CornerRadius = UDim.new(1, 0) TitleDecorationCorner.Parent = TitleDecoration -- Title Text local TitleText = Instance.new("TextLabel") TitleText.Name = "TitleText" TitleText.BackgroundTransparency = 1 TitleText.Position = UDim2.new(0, 25, 0, 0) TitleText.Size = UDim2.new(1, -100, 1, 0) TitleText.Font = Enum.Font.GothamBold TitleText.Text = "玩家列表" TitleText.TextColor3 = COLORS.text TitleText.TextSize = 20 TitleText.TextXAlignment = Enum.TextXAlignment.Left TitleText.Parent = TitleBar -- 添加在線指示器 local OnlineIndicator = Instance.new("Frame") OnlineIndicator.Name = "OnlineIndicator" OnlineIndicator.BackgroundColor3 = COLORS.success OnlineIndicator.BorderSizePixel = 0 OnlineIndicator.Size = UDim2.new(0, 6, 0, 6) OnlineIndicator.Position = UDim2.new(0, 15, 0.5, 8) OnlineIndicator.Parent = TitleBar local OnlineIndicatorCorner = Instance.new("UICorner") OnlineIndicatorCorner.CornerRadius = UDim.new(1, 0) OnlineIndicatorCorner.Parent = OnlineIndicator -- 添加呼吸動畫效果 local function createBreathingEffect(object) local tweenInfo = TweenInfo.new( 1.5, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true ) local tween = TweenService:Create(object, tweenInfo, { BackgroundTransparency = 0.5 }) tween:Play() end createBreathingEffect(OnlineIndicator) -- Close Button local CloseButton = Instance.new("ImageButton") CloseButton.Name = "CloseButton" CloseButton.BackgroundTransparency = 1 CloseButton.Position = UDim2.new(1, -45, 0, 5) CloseButton.Size = UDim2.new(0, 40, 0, 40) CloseButton.Image = "rbxassetid://7072725342" -- 最小化圖標 CloseButton.ImageColor3 = COLORS.text CloseButton.ImageTransparency = 0.3 CloseButton.Parent = TitleBar -- Player Count local PlayerCount = Instance.new("TextLabel") PlayerCount.Name = "PlayerCount" PlayerCount.BackgroundTransparency = 1 PlayerCount.Position = UDim2.new(0, 20, 0, 50) PlayerCount.Size = UDim2.new(1, -40, 0, 30) PlayerCount.Font = Enum.Font.GothamSemibold PlayerCount.TextColor3 = COLORS.textDim PlayerCount.TextSize = 14 PlayerCount.TextXAlignment = Enum.TextXAlignment.Left PlayerCount.Parent = MainFrame -- Search Bar local SearchBar = Instance.new("Frame") SearchBar.Name = "SearchBar" SearchBar.BackgroundColor3 = COLORS.backgroundLight SearchBar.Position = UDim2.new(0, 20, 0, 90) SearchBar.Size = UDim2.new(1, -40, 0, 40) SearchBar.Parent = MainFrame local SearchBarCorner = Instance.new("UICorner") SearchBarCorner.CornerRadius = UDim.new(0, 12) SearchBarCorner.Parent = SearchBar local SearchIcon = Instance.new("ImageLabel") SearchIcon.Name = "SearchIcon" SearchIcon.BackgroundTransparency = 1 SearchIcon.Position = UDim2.new(0, 10, 0, 10) SearchIcon.Size = UDim2.new(0, 20, 0, 20) SearchIcon.Image = "rbxassetid://7072721559" -- 搜索圖標 SearchIcon.ImageColor3 = COLORS.textDim SearchIcon.Parent = SearchBar local SearchBox = Instance.new("TextBox") SearchBox.Name = "SearchBox" SearchBox.BackgroundTransparency = 1 SearchBox.Position = UDim2.new(0, 40, 0, 0) SearchBox.Size = UDim2.new(1, -50, 1, 0) SearchBox.Font = Enum.Font.Gotham SearchBox.PlaceholderText = "搜索玩家..." SearchBox.Text = "" SearchBox.TextColor3 = COLORS.text SearchBox.TextSize = 14 SearchBox.TextXAlignment = Enum.TextXAlignment.Left SearchBox.Parent = SearchBar -- Scroll Frame local ScrollFrame = Instance.new("ScrollingFrame") ScrollFrame.Name = "ScrollFrame" ScrollFrame.BackgroundTransparency = 1 ScrollFrame.Position = UDim2.new(0, 10, 0, 140) ScrollFrame.Size = UDim2.new(1, -20, 1, -150) ScrollFrame.CanvasSize = UDim2.new(0, 0, 0, 0) ScrollFrame.ScrollBarThickness = 4 ScrollFrame.ScrollBarImageColor3 = COLORS.accent ScrollFrame.Parent = MainFrame -- List Layout local ListLayout = Instance.new("UIListLayout") ListLayout.Name = "ListLayout" ListLayout.Padding = UDim.new(0, 10) ListLayout.SortOrder = Enum.SortOrder.Name ListLayout.Parent = ScrollFrame -- Variables local playerButtons = {} local isMinimized = false local searchText = "" -- 動畫系統 local animations = { minimizeSpring = createSpring(1), fadeSpring = createSpring(1) } -- 更新玩家數量顯示 local function updatePlayerCount() local count = #Players:GetPlayers() PlayerCount.Text = string.format("在線玩家: %d", count) end -- 創建玩家卡片 local function createPlayerCard(player) if playerButtons[player] then return end local PlayerCard = Instance.new("Frame") PlayerCard.Name = player.Name PlayerCard.BackgroundColor3 = COLORS.backgroundLight PlayerCard.Size = UDim2.new(1, -20, 0, 70) PlayerCard.Position = UDim2.new(0, 10, 0, 0) local CardCorner = Instance.new("UICorner") CardCorner.CornerRadius = UDim.new(0, 15) CardCorner.Parent = PlayerCard -- 玩家頭像 local Avatar = Instance.new("ImageLabel") Avatar.Name = "Avatar" Avatar.BackgroundTransparency = 1 Avatar.Position = UDim2.new(0, 10, 0, 10) Avatar.Size = UDim2.new(0, 50, 0, 50) Avatar.Parent = PlayerCard local AvatarCorner = Instance.new("UICorner") AvatarCorner.CornerRadius = UDim.new(1, 0) AvatarCorner.Parent = Avatar -- 安全地加載頭像 pcall(function() Avatar.Image = Players:GetUserThumbnailAsync( player.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420 ) end) -- 玩家信息 local InfoContainer = Instance.new("Frame") InfoContainer.Name = "InfoContainer" InfoContainer.BackgroundTransparency = 1 InfoContainer.Position = UDim2.new(0, 70, 0, 10) InfoContainer.Size = UDim2.new(1, -160, 1, -20) InfoContainer.Parent = PlayerCard local DisplayName = Instance.new("TextLabel") DisplayName.Name = "DisplayName" DisplayName.BackgroundTransparency = 1 DisplayName.Size = UDim2.new(1, 0, 0, 20) DisplayName.Font = Enum.Font.GothamBold DisplayName.Text = player.DisplayName DisplayName.TextColor3 = COLORS.text DisplayName.TextSize = 16 DisplayName.TextXAlignment = Enum.TextXAlignment.Left DisplayName.Parent = InfoContainer local Username = Instance.new("TextLabel") Username.Name = "Username" Username.BackgroundTransparency = 1 Username.Position = UDim2.new(0, 0, 0, 25) Username.Size = UDim2.new(1, 0, 0, 20) Username.Font = Enum.Font.Gotham Username.Text = "@" .. player.Name Username.TextColor3 = COLORS.textDim Username.TextSize = 14 Username.TextXAlignment = Enum.TextXAlignment.Left Username.Parent = InfoContainer -- 傳送按鈕 local TeleportButton = Instance.new("TextButton") TeleportButton.Name = "TeleportButton" TeleportButton.BackgroundColor3 = COLORS.accent TeleportButton.Position = UDim2.new(1, -80, 0.5, -20) TeleportButton.Size = UDim2.new(0, 70, 0, 40) TeleportButton.Font = Enum.Font.GothamBold TeleportButton.Text = "傳送" TeleportButton.TextColor3 = COLORS.text TeleportButton.TextSize = 14 TeleportButton.Parent = PlayerCard local ButtonCorner = Instance.new("UICorner") ButtonCorner.CornerRadius = UDim.new(0, 12) ButtonCorner.Parent = TeleportButton -- 按鈕動畫 local buttonSpring = createSpring(1) local buttonScale = 1 -- 按鈕懸停效果 TeleportButton.MouseEnter:Connect(function() buttonSpring.target = 1.1 TweenService:Create(TeleportButton, TweenInfo.new(0.3), { BackgroundColor3 = COLORS.accentHover }):Play() end) TeleportButton.MouseLeave:Connect(function() buttonSpring.target = 1 TweenService:Create(TeleportButton, TweenInfo.new(0.3), { BackgroundColor3 = COLORS.accent }):Play() end) -- 更新按鈕大小動畫 RunService.RenderStepped:Connect(function(dt) if not TeleportButton.Parent then return end buttonScale = buttonSpring:step(dt) TeleportButton.Size = UDim2.new(0, 70 * buttonScale, 0, 40 * buttonScale) TeleportButton.Position = UDim2.new(1, -80, 0.5, -20 * buttonScale) end) -- 傳送功能 TeleportButton.MouseButton1Click:Connect(function() -- 視覺反饋 buttonSpring.target = 0.9 task.delay(0.1, function() buttonSpring.target = 1 end) local originalColor = TeleportButton.BackgroundColor3 local originalText = TeleportButton.Text TeleportButton.BackgroundColor3 = COLORS.success TeleportButton.Text = "傳送中" -- 檢查玩家 if not player or not player:IsDescendantOf(Players) then TeleportButton.BackgroundColor3 = COLORS.error TeleportButton.Text = "錯誤" task.delay(1, function() TeleportButton.BackgroundColor3 = originalColor TeleportButton.Text = originalText end) return end -- 檢查角色 if not LocalPlayer.Character or not LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then TeleportButton.BackgroundColor3 = COLORS.error TeleportButton.Text = "錯誤" task.delay(1, function() TeleportButton.BackgroundColor3 = originalColor TeleportButton.Text = originalText end) return end -- 嘗試傳送 local success = false -- 方法1:直接傳送 if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then local targetPos = player.Character.HumanoidRootPart.Position LocalPlayer.Character:SetPrimaryPartCFrame( CFrame.new(targetPos + Vector3.new(0, 3, 3)) ) success = true end -- 方法2:備用傳送方法 if not success then pcall(function() if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then LocalPlayer.Character.Humanoid.Sit = false task.wait(0.1) LocalPlayer.Character:SetPrimaryPartCFrame( player.Character.HumanoidRootPart.CFrame * CFrame.new(0, 3, 3) ) success = true end end) end -- 更新按鈕狀態 if success then TeleportButton.BackgroundColor3 = COLORS.success TeleportButton.Text = "✓" else TeleportButton.BackgroundColor3 = COLORS.error TeleportButton.Text = "失敗" end -- 重置按鈕 task.delay(1, function() TeleportButton.BackgroundColor3 = originalColor TeleportButton.Text = originalText end) end) -- 卡片懸停效果 local cardSpring = createSpring(0) PlayerCard.MouseEnter:Connect(function() cardSpring.target = 1 end) PlayerCard.MouseLeave:Connect(function() cardSpring.target = 0 end) -- 更新卡片動畫 RunService.RenderStepped:Connect(function(dt) if not PlayerCard.Parent then return end local elevation = cardSpring:step(dt) PlayerCard.Position = UDim2.new(0, 10, 0, -elevation * 2) PlayerCard.BackgroundColor3 = COLORS.backgroundLight:Lerp( Color3.fromRGB(60, 60, 60), elevation ) end) PlayerCard.Parent = ScrollFrame playerButtons[player] = PlayerCard -- 更新滾動框大小 ScrollFrame.CanvasSize = UDim2.new(0, 0, 0, ListLayout.AbsoluteContentSize.Y + 10) end -- 移除玩家卡片 local function removePlayerCard(player) if playerButtons[player] then playerButtons[player]:Destroy() playerButtons[player] = nil ScrollFrame.CanvasSize = UDim2.new(0, 0, 0, ListLayout.AbsoluteContentSize.Y + 10) end end -- 搜索功能 SearchBox.Changed:Connect(function(prop) if prop == "Text" then searchText = SearchBox.Text:lower() for player, card in pairs(playerButtons) do local name = player.Name:lower() local displayName = player.DisplayName:lower() local visible = name:find(searchText) or displayName:find(searchText) card.Visible = visible end ScrollFrame.CanvasSize = UDim2.new(0, 0, 0, ListLayout.AbsoluteContentSize.Y + 10) end end) -- 最小化/最大化動畫 local function toggleMinimize() isMinimized = not isMinimized animations.minimizeSpring.target = isMinimized and 0 or 1 animations.fadeSpring.target = isMinimized and 0 or 1 MinContainer.Visible = true MainFrame.Visible = true end -- 更新UI動畫 RunService.RenderStepped:Connect(function(dt) local scale = animations.minimizeSpring:step(dt) local fade = animations.fadeSpring:step(dt) MainFrame.Size = UDim2.new(0, 300 * scale, 0, 400 * scale) MainFrame.Position = UDim2.new(1, -320 * scale, 0.5, -200 * scale) MainFrame.BackgroundTransparency = 1 - fade MinContainer.Position = UDim2.new(1, -70 + (250 * scale), 0.5, -30) MinButton.ImageTransparency = fade if scale < 0.1 then MainFrame.Visible = false end if fade > 0.9 then MinContainer.Visible = false end end) -- 初始化玩家列表 for _, player in pairs(Players:GetPlayers()) do createPlayerCard(player) end -- 更新玩家列表 Players.PlayerAdded:Connect(function(player) createPlayerCard(player) updatePlayerCount() end) Players.PlayerRemoving:Connect(function(player) removePlayerCard(player) updatePlayerCount() end) -- 初始化玩家數量 updatePlayerCount() -- 綁定最小化/最大化事件 CloseButton.MouseButton1Click:Connect(toggleMinimize) MinButton.MouseButton1Click:Connect(toggleMinimize) -- 使界面可拖動 local function enableDragging(gui, handle) local dragging local dragInput local dragStart local startPos -- 用於存儲初始觸摸位置的變量 local lastTouchPosition local lastTouchTime = 0 local function updateDrag(input) local delta = input.Position - dragStart local newPosition = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) -- 確保視窗不會完全離開屏幕 local viewportSize = workspace.CurrentCamera.ViewportSize local guiSize = gui.AbsoluteSize local minX = -guiSize.X * 0.5 local maxX = viewportSize.X - guiSize.X * 0.5 local minY = 0 local maxY = viewportSize.Y - guiSize.Y * 0.5 newPosition = UDim2.new( newPosition.X.Scale, math.clamp(newPosition.X.Offset, minX, maxX), newPosition.Y.Scale, math.clamp(newPosition.Y.Offset, minY, maxY) ) local tweenInfo = TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) TweenService:Create(gui, tweenInfo, {Position = newPosition}):Play() end handle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = gui.Position -- 記錄觸摸開始的時間和位置 if input.UserInputType == Enum.UserInputType.Touch then lastTouchPosition = input.Position lastTouchTime = tick() end input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) handle.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 -- 檢查是否是觸摸輸入,並計算移動距離 if input.UserInputType == Enum.UserInputType.Touch then local currentTime = tick() local timeDiff = currentTime - lastTouchTime local posDiff = (input.Position - lastTouchPosition).magnitude -- 如果移動太快或距離太短,忽略這次移動 if timeDiff < 0.05 or posDiff < 5 then return end lastTouchPosition = input.Position lastTouchTime = currentTime end updateDrag(input) end end) end -- 為 TitleBar 啟用拖動 enableDragging(MainFrame, TitleBar) -- 鍵盤快捷鍵 UserInputService.InputBegan:Connect(function(input, gameProcessed) if not gameProcessed and input.KeyCode == Enum.KeyCode.P then toggleMinimize() end end) -- 新的自適應尺寸計算函數 local function getAdaptiveSize() local viewportSize = workspace.CurrentCamera.ViewportSize local isMobile = UserInputService.TouchEnabled -- 移動端尺寸 if isMobile then local width = math.min(viewportSize.X * 0.9, 400) local height = math.min(viewportSize.Y * 0.7, 500) return { width = width, height = height, buttonSize = 45, fontSize = 16, cornerRadius = 15, padding = 10 } end -- 桌面端尺寸 return { width = 300, height = 400, buttonSize = 40, fontSize = 14, cornerRadius = 12, padding = 8 } end -- 更新 MainFrame 尺寸和位置 local adaptive = getAdaptiveSize() MainFrame.Size = UDim2.new(0, adaptive.width, 0, adaptive.height) MainFrame.Position = UDim2.new(0.5, -adaptive.width / 2, 0.5, -adaptive.height / 2) -- 更新標題文字大小 TitleText.TextSize = adaptive.fontSize + 2 -- 更新搜索欄樣式 SearchBar.Size = UDim2.new(1, -adaptive.padding * 4, 0, adaptive.buttonSize) SearchBox.TextSize = adaptive.fontSize SearchBox.PlaceholderColor3 = COLORS.textDim -- 更新玩家卡片樣式 local function updatePlayerCard(card) local cardSize = adaptive.height * 0.15 card.Size = UDim2.new(1, -adaptive.padding * 2, 0, cardSize) -- 更新卡片內部元素大小 local avatar = card:FindFirstChild("Avatar") if avatar then avatar.Size = UDim2.new(0, cardSize - adaptive.padding * 2, 0, cardSize - adaptive.padding * 2) end local teleportButton = card:FindFirstChild("TeleportButton") if teleportButton then teleportButton.Size = UDim2.new(0, cardSize * 1.2, 0, cardSize * 0.6) teleportButton.TextSize = adaptive.fontSize end end -- 監聽視窗大小變化 workspace.CurrentCamera:GetPropertyChangedSignal("ViewportSize"):Connect(function() local newAdaptive = getAdaptiveSize() -- 更新主視窗大小 MainFrame.Size = UDim2.new(0, newAdaptive.width, 0, newAdaptive.height) MainFrame.Position = UDim2.new(0.5, -newAdaptive.width / 2, 0.5, -newAdaptive.height / 2) -- Also update position on resize -- 更新標題文字大小 TitleText.TextSize = newAdaptive.fontSize + 2 -- 更新搜索欄樣式 SearchBar.Size = UDim2.new(1, -newAdaptive.padding * 4, 0, newAdaptive.buttonSize) SearchBox.TextSize = newAdaptive.fontSize -- 更新所有玩家卡片 for _, card in pairs(playerButtons) do updatePlayerCard(card) end end)