
Key RequiredUniversal

-- 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)No comments yet for this script.



