local Players = game:GetService("Players") local CoreGui = game:GetService("CoreGui") local TweenService = game:GetService("TweenService") local localPlayer = Players.LocalPlayer -- Asset ID текстур и лиц local NORMAL_FACE = "rbxassetid://75149787879884" local ANGER_FACE = "rbxassetid://118957392764865" local ANGER_TEXTURE = "rbxassetid://116081942235328" -- Координаты точек телепортации local posMain = Vector3.new(-179.4, 15, -133.11) local posBox = Vector3.new(-145.64, 13, -125.47) local posEnd = Vector3.new(-122, 15, 182.15) -- GUI Контейнер local screenGui = Instance.new("ScreenGui") screenGui.Name = "SphereTeleportGui" screenGui.ResetOnSpawn = false screenGui.Parent = (gethui and gethui()) or CoreGui or localPlayer:WaitForChild("PlayerGui") local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.new(0, 220, 0, 310) mainFrame.Position = UDim2.new(0.05, 0, 0.18, 0) mainFrame.BackgroundTransparency = 1 mainFrame.Active = true mainFrame.Draggable = true mainFrame.Parent = screenGui -- Телепорт с сохранением скорости local function teleportTo(targetPos) local character = localPlayer.Character if not character then return end local rootPart = character:FindFirstChild("HumanoidRootPart") local humanoid = character:FindFirstChildOfClass("Humanoid") if rootPart then local savedLinearVelocity = rootPart.AssemblyLinearVelocity local savedAngularVelocity = rootPart.AssemblyAngularVelocity if humanoid then humanoid:ChangeState(Enum.HumanoidStateType.Running) end character:PivotTo(CFrame.new(targetPos)) rootPart.AssemblyLinearVelocity = savedLinearVelocity rootPart.AssemblyAngularVelocity = savedAngularVelocity end end local buttonDataList = {} -- Создание круглой кнопки local function createSphereButton(name, text, yPos, targetVector, normalBg, gloomyBg, strokeHueCenter) local container = Instance.new("Frame") container.Name = name .. "_Container" container.Size = UDim2.new(1, 0, 0, 95) container.Position = UDim2.new(0, 0, 0, yPos) container.BackgroundTransparency = 1 container.Parent = mainFrame -- Основа кнопки local button = Instance.new("ImageButton") button.Name = name button.Size = UDim2.new(0, 58, 0, 58) button.Position = UDim2.new(0.5, -29, 0, 0) button.BackgroundColor3 = normalBg button.AutoButtonColor = false button.BackgroundTransparency = 1 button.Parent = container local buttonCorner = Instance.new("UICorner") buttonCorner.CornerRadius = UDim.new(1, 0) buttonCorner.Parent = button -- Слой полупрозрачной текстуры Anger (зажата в круг собственным UICorner) local angerOverlay = Instance.new("ImageLabel") angerOverlay.Name = "AngerTextureOverlay" angerOverlay.Size = UDim2.new(1, 0, 1, 0) angerOverlay.Position = UDim2.new(0, 0, 0, 0) angerOverlay.BackgroundTransparency = 1 angerOverlay.Image = ANGER_TEXTURE angerOverlay.ImageTransparency = 1 angerOverlay.ScaleType = Enum.ScaleType.Crop angerOverlay.ZIndex = 2 angerOverlay.Parent = button local textureCorner = Instance.new("UICorner") textureCorner.CornerRadius = UDim.new(1, 0) textureCorner.Parent = angerOverlay -- Слой лица (поверх текстуры) local faceLabel = Instance.new("ImageLabel") faceLabel.Name = "FaceImage" faceLabel.Size = UDim2.new(1, 0, 1, 0) faceLabel.Position = UDim2.new(0, 0, 0, 0) faceLabel.BackgroundTransparency = 1 faceLabel.Image = NORMAL_FACE faceLabel.ImageTransparency = 1 faceLabel.ScaleType = Enum.ScaleType.Fit faceLabel.ZIndex = 3 faceLabel.Parent = button local faceCorner = Instance.new("UICorner") faceCorner.CornerRadius = UDim.new(1, 0) faceCorner.Parent = faceLabel -- Переливающийся контур local stroke = Instance.new("UIStroke") stroke.Thickness = 3 stroke.Transparency = 1 stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border stroke.Parent = button -- Текст снизу (Minecraft Arcade) local label = Instance.new("TextLabel") label.Name = "Label" label.Size = UDim2.new(1, 0, 0, 30) label.Position = UDim2.new(0, 0, 0, 63) label.BackgroundTransparency = 1 label.TextColor3 = normalBg label.TextSize = 13 label.Font = Enum.Font.Arcade label.Text = text label.TextTransparency = 1 label.TextWrapped = true label.Parent = container -- Чёрный контур у текста local textStroke = Instance.new("UIStroke") textStroke.Color = Color3.fromRGB(0, 0, 0) textStroke.Thickness = 1.5 textStroke.Transparency = 1 textStroke.Parent = label -- Быстрое покачивание local swayRight = TweenService:Create(button, TweenInfo.new(0.9, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), {Rotation = 6}) local swayLeft = TweenService:Create(button, TweenInfo.new(0.9, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), {Rotation = -6}) task.spawn(function() while button and button.Parent do swayRight:Play() swayRight.Completed:Wait() swayLeft:Play() swayLeft.Completed:Wait() end end) button.MouseButton1Click:Connect(function() teleportTo(targetVector) end) local data = { button = button, angerOverlay = angerOverlay, faceLabel = faceLabel, stroke = stroke, label = label, textStroke = textStroke, normalBg = normalBg, gloomyBg = gloomyBg, strokeHueCenter = strokeHueCenter, isAnger = false, isAnimating = false } table.insert(buttonDataList, data) return data end -- Кнопки createSphereButton("MainTP", "TELEPORT 1\n[-179.4, 15, -133.11]", 0, posMain, Color3.fromRGB(0, 200, 255), Color3.fromRGB(15, 30, 60), 0.55) createSphereButton("BoxTP", "Оставить коробку чтобы помочь новичкам", 102, posBox, Color3.fromRGB(255, 45, 70), Color3.fromRGB(55, 10, 15), 0.98) createSphereButton("EndTP", "TELEPORT TO END OF MAP", 204, posEnd, Color3.fromRGB(0, 230, 100), Color3.fromRGB(10, 45, 20), 0.38) -- Плавное появление интерфейса task.spawn(function() for step = 1, 120 do local alpha = step / 120 for _, data in ipairs(buttonDataList) do data.button.BackgroundTransparency = 1 - alpha data.faceLabel.ImageTransparency = 1 - alpha data.stroke.Transparency = 1 - alpha data.label.TextTransparency = 1 - alpha data.textStroke.Transparency = 1 - alpha end task.wait(0.008) end end) -- Переливание контура task.spawn(function() local timeOffset = 0 while true do timeOffset = timeOffset + 0.03 for _, data in ipairs(buttonDataList) do local wave = math.sin(timeOffset) * 0.12 local currentHue = (data.strokeHueCenter + wave) % 1 local val = data.isAnger and 0.5 or 1.0 data.stroke.Color = Color3.fromHSV(currentHue, 0.85, val) end task.wait(0.02) end end) -- Анимация смены состояний (повышена прозрачность текстуры) local function setAngerState(toAnger) for _, data in ipairs(buttonDataList) do if data.isAnger ~= toAnger and not data.isAnimating then data.isAnger = toAnger data.isAnimating = true task.spawn(function() local startBg = data.button.BackgroundColor3 local targetBg = toAnger and data.gloomyBg or data.normalBg local targetFace = toAnger and ANGER_FACE or NORMAL_FACE -- Этап 1: Старое лицо уходит, текстура проявляется до легкой видимости (0.75 прозрачности / 25% видимости) for step = 1, 120 do local alpha = step / 120 data.faceLabel.ImageTransparency = alpha data.angerOverlay.ImageTransparency = toAnger and (1 - alpha * 0.25) or (0.75 + alpha * 0.25) data.button.BackgroundColor3 = startBg:Lerp(targetBg, alpha) task.wait(0.008) end data.faceLabel.Image = targetFace -- Этап 2: Новое лицо проявляется поверх текстуры for step = 1, 120 do local alpha = step / 120 data.faceLabel.ImageTransparency = 1 - alpha task.wait(0.008) end data.isAnimating = false end) end end end -- Отслеживание текста Anger task.spawn(function() local pGui = localPlayer:WaitForChild("PlayerGui", 10) if not pGui then return end local mainGui = pGui:WaitForChild("MainGui", 10) local uiTop = mainGui and mainGui:WaitForChild("UITop", 10) local frame = uiTop and uiTop:WaitForChild("Frame", 10) local angerBar = frame and frame:WaitForChild("AngerBar", 10) local angerTextLabel = angerBar and angerBar:WaitForChild("Anger", 10) if angerTextLabel then local function checkAnger() local txt = angerTextLabel.Text local is100 = string.find(txt, "100%%") ~= nil or (string.find(txt, "100") ~= nil and not string.find(txt, "1000")) setAngerState(is100) end angerTextLabel:GetPropertyChangedSignal("Text"):Connect(checkAnger) checkAnger() end end)