-- Sistema de volar para Evolve 3D (mantener posición al quedarse quieto) local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local player = Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() local humanoidRootPart = character:WaitForChild("HumanoidRootPart") -- Variables local speed = 50 local enabled = false local keysDown = {} local lastPos = nil -- última posición guardada -- Actualizar referencias al respawn local function setupCharacter(char) character = char humanoidRootPart = character:WaitForChild("HumanoidRootPart") lastPos = humanoidRootPart.Position end player.CharacterAdded:Connect(setupCharacter) -- Crear GUI local ScreenGui = Instance.new("ScreenGui", game:GetService("CoreGui")) ScreenGui.Name = "SistemaDeVolarEvolve3D" local Frame = Instance.new("Frame", ScreenGui) Frame.Size = UDim2.new(0.25, 0, 0.25, 0) Frame.Position = UDim2.new(0.05, 0, 0.05, 0) Frame.BackgroundColor3 = Color3.fromRGB(30,30,30) local Title = Instance.new("TextLabel", Frame) Title.Size = UDim2.new(1,0,0.2,0) Title.Text = "Sistema de volar para Evolve 3D" Title.TextColor3 = Color3.new(1,1,1) Title.BackgroundTransparency = 1 Title.Font = Enum.Font.SourceSansBold Title.TextScaled = true local ToggleButton = Instance.new("TextButton", Frame) ToggleButton.Size = UDim2.new(0.4,0,0.25,0) ToggleButton.Position = UDim2.new(0.05,0,0.3,0) ToggleButton.Text = "OFF" ToggleButton.BackgroundColor3 = Color3.fromRGB(200,50,50) ToggleButton.TextScaled = true local SpeedBox = Instance.new("TextBox", Frame) SpeedBox.Size = UDim2.new(0.4,0,0.25,0) SpeedBox.Position = UDim2.new(0.55,0,0.3,0) SpeedBox.Text = tostring(speed) SpeedBox.PlaceholderText = "Velocidad" SpeedBox.BackgroundColor3 = Color3.fromRGB(50,50,50) SpeedBox.TextColor3 = Color3.new(1,1,1) SpeedBox.TextScaled = true local Status = Instance.new("TextLabel", Frame) Status.Size = UDim2.new(1,0,0.2,0) Status.Position = UDim2.new(0,0,0.7,0) Status.Text = "Desactivado" Status.TextColor3 = Color3.new(1,1,1) Status.BackgroundTransparency = 1 Status.TextScaled = true -- Hacer la GUI arrastrable local dragToggle, dragStart, startPos local dragSpeed = 0.1 local function updateInput(input) local delta = input.Position - dragStart local pos = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) TweenService:Create(Frame, TweenInfo.new(dragSpeed), {Position = pos}):Play() end Frame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragToggle = true dragStart = input.Position startPos = Frame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragToggle = false end end) end end) UserInputService.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then if dragToggle then updateInput(input) end end end) -- Eventos GUI ToggleButton.MouseButton1Click:Connect(function() enabled = not enabled if enabled then ToggleButton.Text = "ON" ToggleButton.BackgroundColor3 = Color3.fromRGB(50,200,50) Status.Text = "Activado" lastPos = humanoidRootPart.Position else ToggleButton.Text = "OFF" ToggleButton.BackgroundColor3 = Color3.fromRGB(200,50,50) Status.Text = "Desactivado" keysDown = {} end end) SpeedBox.FocusLost:Connect(function() local val = tonumber(SpeedBox.Text) if val then speed = val end end) -- Control de teclas UserInputService.InputBegan:Connect(function(input, gp) if gp then return end if not enabled then return end keysDown[input.KeyCode] = true end) UserInputService.InputEnded:Connect(function(input, gp) if gp then return end if not enabled then return end keysDown[input.KeyCode] = nil end) -- Movimiento continuo ajustado a la cámara RunService.Heartbeat:Connect(function(dt) if enabled and humanoidRootPart and character then local cam = workspace.CurrentCamera local forward = cam.CFrame.LookVector local right = cam.CFrame.RightVector local dir = Vector3.new(0,0,0) if keysDown[Enum.KeyCode.W] then dir = dir + Vector3.new(forward.X, 0, forward.Z) end if keysDown[Enum.KeyCode.S] then dir = dir - Vector3.new(forward.X, 0, forward.Z) end if keysDown[Enum.KeyCode.A] then dir = dir - Vector3.new(right.X, 0, right.Z) end if keysDown[Enum.KeyCode.D] then dir = dir + Vector3.new(right.X, 0, right.Z) end if keysDown[Enum.KeyCode.Space] then dir = dir + Vector3.new(0,1,0) -- subir end if keysDown[Enum.KeyCode.LeftShift] then dir = dir + Vector3.new(0,-1,0) -- bajar end if dir.Magnitude > 0 then dir = dir.Unit local step = dir * speed * dt lastPos = humanoidRootPart.Position + step character:PivotTo(CFrame.new(lastPos, lastPos + cam.CFrame.LookVector)) else -- Mantener posición fija cuando no hay movimiento if lastPos then character:PivotTo(CFrame.new(lastPos, lastPos + cam.CFrame.LookVector)) end end end end)