-- FPV 3D ACRO DRONE (FIXED SLIDERS + TESTA INVISIBILE) local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local GuiService = game:GetService("GuiService") local player = Players.LocalPlayer local camera = workspace.CurrentCamera -- CONFIGURAZIONE ACRO local STICK_SENSITIVITY = 300 local ROLL_MULTIPLIER = 1.5 local EXPO = 1.2 local THROTTLE_MAX_POWER = 130 -- FISICA local DRAG = 0.992 local GRAVITY_FORCE = 45 local CAMERA_TILT = 30 local DEADZONE = 0.15 local BOUNCE_ELASTICITY = 0.3 -- STATO local active = false local unarmed = true local velocity = Vector3.new() local currentPos = camera.CFrame.Position local droneRotation = CFrame.new() -- GUI SETUP local screenGui = Instance.new("ScreenGui", player:WaitForChild("PlayerGui")) screenGui.Name = "DroneGuiAcro3D" screenGui.ResetOnSpawn = false local toggleBtn = Instance.new("TextButton", screenGui) toggleBtn.Size = UDim2.new(0, 160, 0, 40) toggleBtn.Position = UDim2.new(1, -180, 0, 20) toggleBtn.Text = "DRONE: OFF (Y)" toggleBtn.BackgroundColor3 = Color3.fromRGB(30, 30, 30) toggleBtn.TextColor3 = Color3.new(1, 1, 1) toggleBtn.Font = Enum.Font.SourceSansBold toggleBtn.TextSize = 14 Instance.new("UICorner", toggleBtn) -- SLIDER SPEED local sliderFrame = Instance.new("Frame", screenGui) sliderFrame.Size = UDim2.new(0, 160, 0, 25) sliderFrame.Position = UDim2.new(1, -180, 0, 65) sliderFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40) Instance.new("UICorner", sliderFrame) local sliderBar = Instance.new("Frame", sliderFrame) sliderBar.Size = UDim2.new(THROTTLE_MAX_POWER/500, 0, 1, 0) sliderBar.BackgroundColor3 = Color3.fromRGB(0, 180, 100) Instance.new("UICorner", sliderBar) local sliderLabel = Instance.new("TextLabel", sliderFrame) sliderLabel.Size = UDim2.new(1, 0, 1, 0) sliderLabel.BackgroundTransparency = 1 sliderLabel.Text = "SPEED: " .. math.floor(THROTTLE_MAX_POWER) sliderLabel.TextColor3 = Color3.new(1, 1, 1) sliderLabel.Font = Enum.Font.SourceSansBold sliderLabel.TextSize = 14 sliderLabel.ZIndex = 3 -- SLIDER TILT local tiltFrame = Instance.new("Frame", screenGui) tiltFrame.Size = UDim2.new(0, 160, 0, 25) tiltFrame.Position = UDim2.new(1, -180, 0, 95) tiltFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40) Instance.new("UICorner", tiltFrame) local tiltBar = Instance.new("Frame", tiltFrame) tiltBar.Size = UDim2.new(CAMERA_TILT/60, 0, 1, 0) tiltBar.BackgroundColor3 = Color3.fromRGB(0, 120, 220) Instance.new("UICorner", tiltBar) local tiltLabel = Instance.new("TextLabel", tiltFrame) tiltLabel.Size = UDim2.new(1, 0, 1, 0) tiltLabel.BackgroundTransparency = 1 tiltLabel.Text = "TILT: " .. math.floor(CAMERA_TILT) .. "°" tiltLabel.TextColor3 = Color3.new(1, 1, 1) tiltLabel.Font = Enum.Font.SourceSansBold tiltLabel.TextSize = 14 tiltLabel.ZIndex = 3 local unarmedLabel = Instance.new("TextLabel", screenGui) unarmedLabel.Size = UDim2.new(0, 160, 0, 25) unarmedLabel.Position = UDim2.new(1, -180, 0, 130) unarmedLabel.Text = "DISARMED (B)" unarmedLabel.BackgroundColor3 = Color3.fromRGB(200, 50, 50) unarmedLabel.TextColor3 = Color3.new(1, 1, 1) unarmedLabel.Font = Enum.Font.SourceSansBold unarmedLabel.TextSize = 14 Instance.new("UICorner", unarmedLabel) -- LOGICA SLIDERS MIGLIORATA local isDraggingSpeed = false local isDraggingTilt = false local function updateSliders() local mouseLocation = UserInputService:GetMouseLocation() local inset = GuiService:GetGuiInset() local adjustedMouseX = mouseLocation.X - inset.X if isDraggingSpeed then local relativeX = math.clamp((adjustedMouseX - sliderFrame.AbsolutePosition.X) / sliderFrame.AbsoluteSize.X, 0, 1) sliderBar.Size = UDim2.new(relativeX, 0, 1, 0) THROTTLE_MAX_POWER = relativeX * 500 sliderLabel.Text = "SPEED: " .. math.floor(THROTTLE_MAX_POWER) end if isDraggingTilt then local relativeX = math.clamp((adjustedMouseX - tiltFrame.AbsolutePosition.X) / tiltFrame.AbsoluteSize.X, 0, 1) tiltBar.Size = UDim2.new(relativeX, 0, 1, 0) CAMERA_TILT = relativeX * 60 tiltLabel.Text = "TILT: " .. math.floor(CAMERA_TILT) .. "°" end end -- Input Iniziale sliderFrame.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then isDraggingSpeed = true end end) tiltFrame.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then isDraggingTilt = true end end) -- Rilascio (Globale per evitare blocchi) UserInputService.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then isDraggingSpeed = false isDraggingTilt = false end end) -- LOGICA ARM/DISARM local function toggleArm() unarmed = not unarmed unarmedLabel.Text = unarmed and "DISARMED (B)" or "ARMED" unarmedLabel.BackgroundColor3 = unarmed and Color3.fromRGB(200, 50, 50) or Color3.fromRGB(50, 200, 50) end -- LOGICA ATTIVAZIONE local function toggle() active = not active local char = player.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if active then if char and char.PrimaryPart then currentPos = char.PrimaryPart.Position + Vector3.new(0, 5, 0) hum.PlatformStand = true hum:SetStateEnabled(Enum.HumanoidStateType.Dead, false) end velocity = Vector3.new() droneRotation = camera.CFrame * CFrame.Angles(math.rad(-CAMERA_TILT), 0, 0) droneRotation = droneRotation - droneRotation.Position camera.CameraType = Enum.CameraType.Scriptable UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter toggleBtn.Text = "DRONE: ON" toggleBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50) else if hum then hum.PlatformStand = false hum:SetStateEnabled(Enum.HumanoidStateType.Dead, true) end camera.CameraType = Enum.CameraType.Custom toggleBtn.Text = "DRONE: OFF (Y)" toggleBtn.BackgroundColor3 = Color3.fromRGB(30, 30, 30) UserInputService.MouseBehavior = Enum.MouseBehavior.Default end end -- FISICA RAYCAST local raycastParams = RaycastParams.new() raycastParams.FilterType = Enum.RaycastFilterType.Exclude local function updateFilter(char) if char then raycastParams.FilterDescendantsInstances = {char} end end updateFilter(player.Character or player.CharacterAdded:Wait()) local function applyExpo(value) return (value > 0 and 1 or -1) * (math.abs(value) ^ EXPO) end -- LOOP PRINCIPALE RunService.Heartbeat:Connect(function(dt) updateSliders() -- Chiamata fissa per fluidità if not active then return end local pitch, roll, yaw, throttleInput = 0, 0, 0, 0 local gpts = UserInputService:GetGamepadState(Enum.UserInputType.Gamepad1) for _, input in pairs(gpts) do local pos = input.Position if input.KeyCode == Enum.KeyCode.Thumbstick1 then if math.abs(pos.X) > DEADZONE then yaw = applyExpo(-pos.X) end throttleInput = pos.Y elseif input.KeyCode == Enum.KeyCode.Thumbstick2 then if math.abs(pos.Y) > DEADZONE then pitch = applyExpo(-pos.Y) end if math.abs(pos.X) > DEADZONE then roll = applyExpo(pos.X) end end end local thrust = not unarmed and (droneRotation.UpVector * (throttleInput * THROTTLE_MAX_POWER)) or Vector3.new() velocity = (velocity + (thrust * dt) + (Vector3.new(0, -GRAVITY_FORCE, 0) * dt)) * math.pow(DRAG, dt * 60) local move = velocity * dt local hit = workspace:Raycast(currentPos, move + (move.Unit * 1.5), raycastParams) if hit then velocity = (velocity - 2 * velocity:Dot(hit.Normal) * hit.Normal) * BOUNCE_ELASTICITY currentPos = hit.Position + hit.Normal * 0.5 end droneRotation = droneRotation * CFrame.Angles(math.rad(pitch * STICK_SENSITIVITY * dt), math.rad(yaw * STICK_SENSITIVITY * dt), math.rad(-roll * (STICK_SENSITIVITY * ROLL_MULTIPLIER) * dt)) currentPos = currentPos + velocity * dt local finalCF = CFrame.new(currentPos) * droneRotation * CFrame.Angles(math.rad(CAMERA_TILT), 0, 0) camera.CFrame = finalCF if player.Character then for _, part in ipairs(player.Character:GetChildren()) do if part:IsA("BasePart") then part.CFrame = finalCF part.AssemblyLinearVelocity = velocity if part.Name == "Head" then part.LocalTransparencyModifier = 1 else part.LocalTransparencyModifier = 0 end end end end end) UserInputService.InputBegan:Connect(function(input, processed) if not processed then if input.KeyCode == Enum.KeyCode.ButtonY or input.KeyCode == Enum.KeyCode.Y then toggle() elseif input.KeyCode == Enum.KeyCode.ButtonB or input.KeyCode == Enum.KeyCode.B then toggleArm() end end end) toggleBtn.MouseButton1Click:Connect(toggle)