joystick 8 fix
Key RequiredUniversal

joystick 8 fix

Universal ScriptSodaAlexanderSodaAlexander 867 views 914 executesUpdated Jan 20, 2026
Unrated
00
Lua Script•151 lines (4305 chars)
-- MOBILE JOYSTICK 8 HƯỚNG
-- MAX SPEED + DEADZONE UI
-- FIX FLY (KHÔNG CHẶN BAY LÊN/XUỐNG)

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local Workspace = game:GetService("Workspace")

local player = Players.LocalPlayer
local camera = Workspace.CurrentCamera

-------------------------------------------------
-- DEADZONE
-------------------------------------------------
local DEADZONE = 0.08

-------------------------------------------------
-- UI (DRAGGABLE)
-------------------------------------------------
local gui = Instance.new("ScreenGui")
gui.Name = "DeadzoneUI"
gui.ResetOnSpawn = false
gui.Parent = player:WaitForChild("PlayerGui")

local frame = Instance.new("Frame")
frame.Size = UDim2.fromOffset(220, 120)
frame.Position = UDim2.fromScale(0.05, 0.6)
frame.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
frame.BackgroundTransparency = 0.05
frame.BorderSizePixel = 0
frame.Parent = gui
frame.Active = true
Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 14)

local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 32)
title.BackgroundTransparency = 1
title.Text = "Deadzone Setting"
title.TextColor3 = Color3.new(1,1,1)
title.Font = Enum.Font.GothamBold
title.TextSize = 14
title.Parent = frame

local box = Instance.new("TextBox")
box.Size = UDim2.new(1, -20, 0, 36)
box.Position = UDim2.fromOffset(10, 40)
box.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
box.TextColor3 = Color3.new(1,1,1)
box.PlaceholderText = "Deadzone (0.00 - 0.5)"
box.Text = tostring(DEADZONE)
box.ClearTextOnFocus = false
box.Font = Enum.Font.Gotham
box.TextSize = 14
box.Parent = frame
Instance.new("UICorner", box).CornerRadius = UDim.new(0,10)

local hint = Instance.new("TextLabel")
hint.Size = UDim2.new(1, -20, 0, 24)
hint.Position = UDim2.fromOffset(10, 82)
hint.BackgroundTransparency = 1
hint.Text = "Drag UI • Fly safe"
hint.TextColor3 = Color3.fromRGB(180,180,180)
hint.Font = Enum.Font.Gotham
hint.TextSize = 12
hint.Parent = frame

-- Drag UI
do
	local dragging, dragStart, startPos
	frame.InputBegan:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.Touch then
			dragging = true
			dragStart = input.Position
			startPos = frame.Position
		end
	end)
	frame.InputChanged:Connect(function(input)
		if dragging and input.UserInputType == Enum.UserInputType.Touch then
			local delta = input.Position - dragStart
			frame.Position = UDim2.new(
				startPos.X.Scale,
				startPos.X.Offset + delta.X,
				startPos.Y.Scale,
				startPos.Y.Offset + delta.Y
			)
		end
	end)
	UIS.InputEnded:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.Touch then
			dragging = false
		end
	end)
end

box.FocusLost:Connect(function()
	local v = tonumber(box.Text)
	if v then
		DEADZONE = math.clamp(v, 0, 0.5)
		box.Text = string.format("%.3f", DEADZONE)
	end
end)

-------------------------------------------------
-- SNAP 8 HƯỚNG (GIỮ TRỤC Y)
-------------------------------------------------
local function snap8CameraPreserveY(vec)
	if vec.Magnitude < DEADZONE then
		return Vector3.zero
	end

	-- giữ Y nếu đang bay
	local y = vec.Y

	-- xử lý X/Z theo camera
	local camForward = Vector3.new(camera.CFrame.LookVector.X, 0, camera.CFrame.LookVector.Z).Unit
	local camRight = Vector3.new(camera.CFrame.RightVector.X, 0, camera.CFrame.RightVector.Z).Unit

	local localX = vec:Dot(camRight)
	local localZ = vec:Dot(camForward)

	local angle = math.atan2(localZ, localX)
	local snapped = math.round(angle / (math.pi / 4)) * (math.pi / 4)

	local flatDir = camRight * math.cos(snapped) + camForward * math.sin(snapped)

	-- ghép lại Y
	return Vector3.new(flatDir.X, y, flatDir.Z)
end

-------------------------------------------------
-- APPLY MOVE
-------------------------------------------------
local function onCharacter(char)
	local humanoid = char:WaitForChild("Humanoid")

	RunService.RenderStepped:Connect(function()
		local raw = humanoid.MoveDirection
		if raw.Magnitude == 0 then return end

		local dir = snap8CameraPreserveY(raw)
		if dir.Magnitude > 0 then
			humanoid:Move(dir, false) -- không xoay camera, không phá fly
		end
	end)
end

player.CharacterAdded:Connect(onCharacter)
if player.Character then
	onCharacter(player.Character)
end

Features & Information

do script cũ gây ra việc fly bị mất trục nên fix

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts