
KeylessUniversal

--// Custom Animation Controller Pro (Som de Caminhada + Som de Dormir)
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 lastActivity = tick()
local isAfk = false
local canDash = true
local isDashing = false
--// IDs DE ANIMAÇÃO E SOM
local ANIMS_DATA = {
Idle = "rbxassetid://72134715166180",
Walk = "rbxassetid://114722309053999",
AfkLoop = "rbxassetid://105410450070122",
Dash = "rbxassetid://522635514",
}
local SOUND_DORMIR = "rbxassetid://114376757380093" -- Menu Theme
local SOUND_WALK = "rbxassetid://596046130" -- Flying Sound FX
local SOUND_NORMAL = "rbxassetid://1836935697" -- Test Facility
local humanoid, animator, rootPart
local tracks = {}
local sfxDormir, sfxWalk, sfxNormal
--// SETUP DE PERSONAGEM E SONS
local function setupCharacter(char)
humanoid = char:WaitForChild("Humanoid")
animator = humanoid:WaitForChild("Animator")
rootPart = char:WaitForChild("HumanoidRootPart")
-- Criar os objetos de som
local function createSound(id, name, looped)
local s = Instance.new("Sound", rootPart)
s.Name = name
s.SoundId = id
s.Looped = looped
s.Volume = 0.5
return s
end
sfxDormir = createSound(SOUND_DORMIR, "SleepSound", true)
sfxWalk = createSound(SOUND_WALK, "WalkSound", true)
sfxNormal = createSound(SOUND_NORMAL, "NormalSound", true)
-- Carregar Animações
for _, t in pairs(tracks) do t:Stop() t:Destroy() end
tracks = {}
for name, id in pairs(ANIMS_DATA) do
local anim = Instance.new("Animation")
anim.AnimationId = id
local track = animator:LoadAnimation(anim)
track.Priority = (name == "Dash") and Enum.AnimationPriority.Action4 or (name == "AfkLoop" and Enum.AnimationPriority.Action or Enum.AnimationPriority.Movement)
tracks[name] = track
end
end
local function playSmoothly(name, fadeTime)
fadeTime = fadeTime or 0.5
if tracks[name] and not tracks[name].IsPlaying then
if isDashing and name ~= "Dash" then return end
for n, t in pairs(tracks) do if n ~= name then t:Stop(fadeTime) end end
tracks[name]:Play(fadeTime)
end
end
--// SISTEMA DE DASH
local function createDashSystem()
local sg = Instance.new("ScreenGui", player.PlayerGui)
sg.Name = "DashGuiPro"
local btn = Instance.new("TextButton", sg)
btn.Size = UDim2.new(0, 70, 0, 70)
btn.Position = UDim2.new(0.75, 0, 0.45, 0)
btn.Text = "DASH"
btn.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
btn.TextColor3 = Color3.new(1,1,1)
btn.Draggable = true
Instance.new("UICorner", btn).CornerRadius = UDim.new(0.5, 0)
Instance.new("UIStroke", btn).Color = Color3.fromRGB(0, 170, 255)
btn.MouseButton1Click:Connect(function()
if canDash and not isDashing then
canDash = false; isDashing = true; lastActivity = tick()
local bv = Instance.new("BodyVelocity", rootPart)
bv.MaxForce = Vector3.new(1e5, 0, 1e5); bv.Velocity = rootPart.CFrame.LookVector * 55
playSmoothly("Dash", 0.1)
task.wait(0.9)
bv:Destroy(); isDashing = false
task.wait(2); canDash = true
end
end)
end
--// LÓGICA DE MOVIMENTO E SONS
RunService.RenderStepped:Connect(function()
if not humanoid or humanoid.Health <= 0 then return end
local moveSpeed = humanoid.MoveDirection.Magnitude
local now = tick()
if moveSpeed > 0.1 or isDashing then
lastActivity = now
if isAfk then
isAfk = false
tracks.AfkLoop:Stop(0.5)
sfxDormir:Stop()
end
if not isDashing then
playSmoothly("Walk", 0.3)
-- Controle de Sons ao mover
if not sfxWalk.IsPlaying then sfxWalk:Play() end
if not sfxNormal.IsPlaying then sfxNormal:Play() end
end
else
-- Parado
sfxWalk:Stop()
if now - lastActivity >= 60 then
if not isAfk then
isAfk = true
playSmoothly("AfkLoop", 0.8)
sfxDormir:Play()
sfxNormal:Stop() -- Para a música normal para dormir
end
else
if not isAfk and not isDashing then playSmoothly("Idle", 0.5) end
end
end
end)
if player.Character then setupCharacter(player.Character) end
player.CharacterAdded:Connect(setupCharacter)
createDashSystem()



w