
KeylessUniversal

-- ═══════════════════════════════════════════
-- ANIMACIONES PREMIUM · FLUID EDITION
-- by Eren · discord.gg/eCkeBVA4S
-- ═══════════════════════════════════════════
local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))()
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local player = Players.LocalPlayer
-- ═══════════════════════════════════════════
-- DATOS DE ANIMACIONES
-- ═══════════════════════════════════════════
local animationData = {
["Adidas Aura"] = { Walk = 83842218823011, Run = 118320322718866, Jump = 109996626521204, Fall = 95603166884636, SwimIdle = 94922130551805, Swim = 134530128383903, Idle = 110211186840347, Idle2 = 114191137265065, Climb = 97824616490448 },
["Adidas Sports"] = { Walk = 18537392113, Run = 18537384940, Jump = 18537380791, Fall = 18537367238, SwimIdle = 18537387180, Swim = 18537389531, Idle = 18537376492, Idle2 = 18537371272, Climb = 18537363391 },
["Adidas Community"] = { Walk = 122150855457006, Run = 82598234841035, Jump = 75290611992385, Fall = 98600215928904, SwimIdle = 109346520324160, Swim = 133308483266208, Idle = 122257458498464, Idle2 = 102357151005774, Climb = 88763136693023 },
["Old School"] = { Walk = 10921244891, Run = 10921240218, Jump = 10921242013, Fall = 10921241244, SwimIdle = 10921244018, Swim = 10921243048, Idle = 10921230744, Idle2 = 10921232093, Climb = 10921229866 },
["Wicked Popular"] = { Walk = 92072849924640, Run = 72301599441680, Jump = 104325245285198, Fall = 121152442762481, Idle = 118832222982049, Idle2 = 76049494037641, SwimIdle = 113199415118199, Swim = 99384245425157, Climb = 131326830509784 },
["Catwalk Glam"] = { Walk = 109168724482748, Run = 81024476153754, Jump = 116936326516985, Fall = 92294537340807, SwimIdle = 98854111361360, Swim = 134591743181628, Idle = 133806214992291, Idle2 = 94970088341563, Climb = 119377220967554 },
["Astronaut"] = { Walk = 10921046031, Run = 10921039308, Jump = 10921042494, Fall = 10921040576, SwimIdle = 10921045006, Swim = 10921044000, Idle = 10921034824, Idle2 = 10921036806, Climb = 10921032124 },
["No Boundaries"] = { Walk = 18747074203, Run = 18747070484, Jump = 18747069148, Fall = 18747062535, SwimIdle = 18747071682, Swim = 18747073181, Idle = 18747067405, Idle2 = 18747063918, Climb = 18747060903 },
["NFL"] = { Walk = 110358958299415, Run = 117333533048078, Jump = 119846112151352, Fall = 129773241321032, SwimIdle = 79090109939093, Swim = 132697394189921, Idle = 92080889861410, Idle2 = 74451233229259, Climb = 134630013742019 },
["Amazon Unboxed"] = { Walk = 90478085024465, Run = 134824450619865, Jump = 121454505477205, Fall = 94788218468396, SwimIdle = 129126268464847, Swim = 105962919001086, Idle = 98281136301627, Climb = 121145883950231 },
["Elder"] = { Walk = 10921111375, Run = 10921104374, Jump = 10921107367, Fall = 10921105765, SwimIdle = 10921110146, Swim = 10921108971, Idle = 10921101664, Idle2 = 10921102574, Climb = 10921100400 },
["Zombie"] = { Walk = 10921355261, Run = 616163682, Jump = 10921351278, Fall = 10921350320, SwimIdle = 10921353442, Swim = 10921352344, Idle = 10921344533, Idle2 = 10921345304, Climb = 10921343576 },
["Mage"] = { Walk = 10921152678, Run = 10921148209, Jump = 10921149743, Fall = 10921148939, SwimIdle = 10921151661, Swim = 10921150788, Idle = 10921144709, Idle2 = 10921145797, Climb = 10921143404 },
["Werewolf"] = { Walk = 10921342074, Run = 10921336997, Fall = 10921337907, SwimIdle = 10921341319, Swim = 10921340419, Idle = 10921330408, Idle2 = 10921333667, Climb = 10921329322 },
["Superhero"] = { Walk = 10921298616, Run = 10921291831, Jump = 10921294559, Fall = 10921293373, SwimIdle = 10921297391, Swim = 10921295495, Idle = 10921288909, Idle2 = 10921290167, Climb = 10921286911 },
["Toy"] = { Walk = 10921312010, Run = 10921306285, Jump = 10921308158, Fall = 10921307241, SwimIdle = 10921310341, Swim = 10921309319, Idle = 10921301576, Climb = 10921300839 },
["Vampire"] = { Walk = 10921326949, Run = 10921320299, Jump = 10921322186, Fall = 10921321317, SwimIdle = 10921325443, Swim = 10921324408, Idle = 10921315373, Climb = 10921314188 },
["Ninja"] = { Walk = 656121766, Run = 656118852, Jump = 656117878, Fall = 656115606, SwimIdle = 656121397, Swim = 656119721, Idle = 656117400, Idle2 = 656118341, Climb = 656114359 },
["Robot"] = { Walk = 616095330, Run = 616091570, Jump = 616090535, Fall = 616087089, SwimIdle = 616094091, Swim = 616092998, Idle = 616088211, Idle2 = 616089559, Climb = 616086039 },
["Levitation"] = { Walk = 616013216, Run = 616010382, Jump = 616008936, Fall = 616005863, SwimIdle = 616012453, Swim = 616011509, Idle = 616006778, Idle2 = 616008087, Climb = 616003713 },
["Stylish"] = { Walk = 616146177, Run = 616140816, Jump = 616139451, Fall = 616134815, SwimIdle = 616144772, Swim = 616143378, Idle = 616136790, Idle2 = 616138447, Climb = 616133594 },
["Bubbly"] = { Walk = 910034870, Run = 910025107, Jump = 910016857, Fall = 910001910, SwimIdle = 910030921, Swim = 910028158, Idle = 910004836, Idle2 = 910009958, Climb = 909997997 },
["Cartoon"] = { Walk = 742640026, Run = 742638842, Jump = 742637942, Fall = 742637151, SwimIdle = 742639812, Swim = 742639220, Idle = 742637544, Idle2 = 742638445, Climb = 742636889 }
}
-- ═══════════════════════════════════════════
-- CONTROLADOR FLUIDO
-- ═══════════════════════════════════════════
local activeController = nil
local FADE = 0.15
local IDLE_CYCLE_TIME = 5
local FALL_VELOCITY_THRESHOLD = -10
local function stopController()
if not activeController then return end
for _, conn in ipairs(activeController.connections) do
pcall(function() conn:Disconnect() end)
end
for _, track in pairs(activeController.tracks) do
pcall(function() if track then track:Stop(0.1) end end)
end
activeController = nil
end
local function applyCustomAnims(customData, nombre)
if not customData then return end
local char = player.Character
if not char then return end
local hum = char:FindFirstChildOfClass("Humanoid")
if not hum then return end
local animator = hum:FindFirstChildOfClass("Animator")
if not animator then return end
stopController()
local animate = char:FindFirstChild("Animate")
if animate then animate.Disabled = true end
for _, t in ipairs(animator:GetPlayingAnimationTracks()) do
pcall(function() t:Stop(FADE) end)
end
task.wait(FADE + 0.05)
local function load(id, priority, looped)
if not id then return nil end
local a = Instance.new("Animation")
a.AnimationId = "rbxassetid://" .. tostring(id)
local ok, t = pcall(function() return animator:LoadAnimation(a) end)
if not ok or not t then return nil end
t.Priority = priority
t.Looped = looped
return t
end
local P_IDLE = Enum.AnimationPriority.Idle
local P_MOVE = Enum.AnimationPriority.Movement
local tracks = {
idle1 = load(customData.Idle, P_IDLE, true),
idle2 = load(customData.Idle2 or customData.Idle, P_IDLE, true),
walk = load(customData.Walk, P_MOVE, true),
run = load(customData.Run or customData.Walk, P_MOVE, true),
jump = load(customData.Jump, P_MOVE, false),
fall = load(customData.Fall, P_MOVE, true),
climb = load(customData.Climb, P_MOVE, true),
swim = load(customData.Swim, P_MOVE, true),
swimIdle = load(customData.SwimIdle or customData.Swim, P_IDLE, true),
}
local controller = {
tracks = tracks,
connections = {},
currentState = nil,
idleIndex = 1,
data = customData,
nombre = nombre or "Custom",
char = char,
hum = hum,
alive = true
}
activeController = controller
local function stopStateTracks(state)
if state == "idle" then
if tracks.idle1 and tracks.idle1.IsPlaying then pcall(function() tracks.idle1:Stop(FADE) end) end
if tracks.idle2 and tracks.idle2.IsPlaying then pcall(function() tracks.idle2:Stop(FADE) end) end
elseif state == "swimIdle" then
if tracks.swimIdle and tracks.swimIdle.IsPlaying then pcall(function() tracks.swimIdle:Stop(FADE) end) end
elseif state and tracks[state] and tracks[state].IsPlaying then
pcall(function() tracks[state]:Stop(FADE) end)
end
end
local function setState(newState)
if controller.currentState == newState then return end
local oldState = controller.currentState
controller.currentState = newState
if oldState then stopStateTracks(oldState) end
if newState == "idle" then
controller.idleIndex = 1
if tracks.idle1 then pcall(function() tracks.idle1:Play(FADE) end) end
elseif newState == "swimIdle" then
if tracks.swimIdle then pcall(function() tracks.swimIdle:Play(FADE) end) end
elseif tracks[newState] then
pcall(function() tracks[newState]:Play(FADE) end)
end
end
local function ajustarVelocidad()
local vel = hum.WalkSpeed
local factor = vel / 16
if factor < 0.5 then factor = 0.5 end
if factor > 3 then factor = 3 end
if tracks.walk and tracks.walk.IsPlaying then
pcall(function() tracks.walk:AdjustSpeed(factor) end)
end
if tracks.run and tracks.run.IsPlaying then
pcall(function() tracks.run:AdjustSpeed(factor) end)
end
end
-- ═══════════════════════════════════════
-- UPDATE CON DETECCIÓN DE FALL POR VELOCIDAD
-- ═══════════════════════════════════════
local function update()
if not controller.alive then return end
if not char.Parent or hum.Health <= 0 then return end
local state = hum:GetState()
local moveDir = hum.MoveDirection
local moving = moveDir.Magnitude > 0.1
-- Detección de caída por velocidad vertical
local root = char:FindFirstChild("HumanoidRootPart")
local velY = root and root.AssemblyLinearVelocity.Y or 0
local cayendo = velY < FALL_VELOCITY_THRESHOLD
local newState
if state == Enum.HumanoidStateType.Swimming then
newState = moving and "swim" or "swimIdle"
elseif state == Enum.HumanoidStateType.Climbing then
newState = "climb"
elseif cayendo then
-- Prioridad alta: si está cayendo, mostrar fall
newState = "fall"
elseif state == Enum.HumanoidStateType.Jumping then
newState = "jump"
elseif state == Enum.HumanoidStateType.Freefall then
newState = "fall"
elseif moving then
newState = hum.WalkSpeed >= 20 and "run" or "walk"
else
newState = "idle"
end
setState(newState)
ajustarVelocidad()
end
table.insert(controller.connections, RunService.Heartbeat:Connect(update))
table.insert(controller.connections, hum.StateChanged:Connect(update))
local function cycleIdle()
if not controller.alive or activeController ~= controller then return end
if controller.currentState == "idle" and tracks.idle1 and tracks.idle2 then
if controller.idleIndex == 1 then
if tracks.idle1.IsPlaying then tracks.idle1:Stop(0.4) end
tracks.idle2:Play(0.4)
controller.idleIndex = 2
else
if tracks.idle2.IsPlaying then tracks.idle2:Stop(0.4) end
tracks.idle1:Play(0.4)
controller.idleIndex = 1
end
end
task.delay(IDLE_CYCLE_TIME, cycleIdle)
end
task.delay(IDLE_CYCLE_TIME, cycleIdle)
table.insert(controller.connections, hum.Died:Connect(function()
controller.alive = false
end))
if tracks.idle1 then pcall(function() tracks.idle1:Play(FADE) end) end
controller.currentState = "idle"
return controller
end
player.CharacterAdded:Connect(function()
if activeController and activeController.data then
local savedData = activeController.data
local savedName = activeController.nombre
task.spawn(function()
task.wait(1)
applyCustomAnims(savedData, savedName)
end)
end
end)
-- ═══════════════════════════════════════════
-- MEZCLADOR
-- ═══════════════════════════════════════════
local mixSelection = {
Idle = "Adidas Aura", Walk = "Adidas Aura", Run = "Adidas Aura",
Jump = "Adidas Aura", Fall = "Adidas Aura", Climb = "Adidas Aura", Swim = "Adidas Aura"
}
local function getMixedData()
local mix = {}
if mixSelection.Idle ~= "Ninguno" then
mix.Idle = animationData[mixSelection.Idle].Idle
mix.Idle2 = animationData[mixSelection.Idle].Idle2 or animationData[mixSelection.Idle].Idle
end
if mixSelection.Walk ~= "Ninguno" then mix.Walk = animationData[mixSelection.Walk].Walk end
if mixSelection.Run ~= "Ninguno" then mix.Run = animationData[mixSelection.Run].Run end
if mixSelection.Jump ~= "Ninguno" then mix.Jump = animationData[mixSelection.Jump].Jump end
if mixSelection.Fall ~= "Ninguno" then mix.Fall = animationData[mixSelection.Fall].Fall end
if mixSelection.Climb ~= "Ninguno" then mix.Climb = animationData[mixSelection.Climb].Climb end
if mixSelection.Swim ~= "Ninguno" then
mix.Swim = animationData[mixSelection.Swim].Swim
mix.SwimIdle = animationData[mixSelection.Swim].SwimIdle or animationData[mixSelection.Swim].Swim
end
return mix
end
local nombres = {}
for name, _ in pairs(animationData) do table.insert(nombres, name) end
table.sort(nombres)
local listaConNinguno = {"Ninguno"}
for _, n in ipairs(nombres) do table.insert(listaConNinguno, n) end
-- ═══════════════════════════════════════════
-- VENTANA RAYFIELD
-- ═══════════════════════════════════════════
local Window = Rayfield:CreateWindow({
Name = "Animaciones Premium",
Icon = 0,
LoadingTitle = "Cargando animaciones...",
LoadingSubtitle = "by Eren",
Theme = "Amethyst",
ConfigurationSaving = {
Enabled = false,
FolderName = nil,
FileName = "AnimConfig"
},
Discord = {
Enabled = false,
Invite = "noinvite",
RememberJoins = true
},
KeySystem = false
})
-- ═══════════════════════════════════════════
-- TAB: PAQUETES
-- ═══════════════════════════════════════════
local TabPaquetes = Window:CreateTab("Paquetes", 4483362458)
TabPaquetes:CreateSection("⭐ Destacado")
Rayfield:Notify({
Title = "Menú cargado",
Content = "Selecciona un paquete para aplicar",
Duration = 4,
Image = 4483362458
})
TabPaquetes:CreateButton({
Name = "⭐ Adidas Aura",
Callback = function()
applyCustomAnims(animationData["Adidas Aura"], "Adidas Aura")
Rayfield:Notify({
Title = "Adidas Aura",
Content = "Animación aplicada correctamente",
Duration = 3,
Image = 4483362458
})
end
})
TabPaquetes:CreateSection("🎭 Todos los paquetes")
for _, name in ipairs(nombres) do
if name ~= "Adidas Aura" then
TabPaquetes:CreateButton({
Name = name,
Callback = function()
applyCustomAnims(animationData[name], name)
Rayfield:Notify({
Title = name,
Content = "Animación aplicada",
Duration = 3,
Image = 4483362458
})
end
})
end
end
TabPaquetes:CreateSection("⚙️ Opciones")
TabPaquetes:CreateButton({
Name = "🔄 Restaurar Default",
Callback = function()
stopController()
local char = player.Character
if char then
local animate = char:FindFirstChild("Animate")
if animate then animate.Disabled = false end
end
Rayfield:Notify({
Title = "Restaurado",
Content = "Animaciones default activas",
Duration = 3,
Image = 4483362458
})
end
})
-- ═══════════════════════════════════════════
-- TAB: MEZCLADOR
-- ═══════════════════════════════════════════
local TabMezclar = Window:CreateTab("Mezclador", 4483362458)
TabMezclar:CreateSection("🎨 Combina animaciones")
TabMezclar:CreateDropdown({
Name = "🧍 Reposo (Idle)",
Options = listaConNinguno,
CurrentOption = {mixSelection.Idle},
MultipleOptions = false,
Flag = "mix_idle",
Callback = function(Option)
mixSelection.Idle = Option[1] or "Adidas Aura"
end,
})
TabMezclar:CreateDropdown({
Name = "🚶 Caminar (Walk)",
Options = listaConNinguno,
CurrentOption = {mixSelection.Walk},
MultipleOptions = false,
Flag = "mix_walk",
Callback = function(Option)
mixSelection.Walk = Option[1] or "Adidas Aura"
end,
})
TabMezclar:CreateDropdown({
Name = "🏃 Correr (Run)",
Options = listaConNinguno,
CurrentOption = {mixSelection.Run},
MultipleOptions = false,
Flag = "mix_run",
Callback = function(Option)
mixSelection.Run = Option[1] or "Adidas Aura"
end,
})
TabMezclar:CreateDropdown({
Name = "⬆️ Saltar (Jump)",
Options = listaConNinguno,
CurrentOption = {mixSelection.Jump},
MultipleOptions = false,
Flag = "mix_jump",
Callback = function(Option)
mixSelection.Jump = Option[1] or "Adidas Aura"
end,
})
TabMezclar:CreateDropdown({
Name = "⬇️ Caer (Fall)",
Options = listaConNinguno,
CurrentOption = {mixSelection.Fall},
MultipleOptions = false,
Flag = "mix_fall",
Callback = function(Option)
mixSelection.Fall = Option[1] or "Adidas Aura"
end,
})
TabMezclar:CreateDropdown({
Name = "🧗 Escalar (Climb)",
Options = listaConNinguno,
CurrentOption = {mixSelection.Climb},
MultipleOptions = false,
Flag = "mix_climb",
Callback = function(Option)
mixSelection.Climb = Option[1] or "Adidas Aura"
end,
})
TabMezclar:CreateDropdown({
Name = "🏊 Nadar (Swim)",
Options = listaConNinguno,
CurrentOption = {mixSelection.Swim},
MultipleOptions = false,
Flag = "mix_swim",
Callback = function(Option)
mixSelection.Swim = Option[1] or "Adidas Aura"
end,
})
TabMezclar:CreateSection("✨ Aplicar")
TabMezclar:CreateButton({
Name = "✨ Aplicar Mezcla",
Callback = function()
local mix = getMixedData()
local algo = false
for _ in pairs(mix) do algo = true break end
if algo then
applyCustomAnims(mix, "Mezcla personalizada")
Rayfield:Notify({
Title = "Mezcla aplicada",
Content = "Tu combinación personalizada está activa",
Duration = 3,
Image = 4483362458
})
else
Rayfield:Notify({
Title = "Aviso",
Content = "No hay nada seleccionado",
Duration = 3,
Image = 4483362458
})
end
end
})
TabMezclar:CreateButton({
Name = "🔴 Reiniciar selección",
Callback = function()
mixSelection.Idle = "Adidas Aura"
mixSelection.Walk = "Adidas Aura"
mixSelection.Run = "Adidas Aura"
mixSelection.Jump = "Adidas Aura"
mixSelection.Fall = "Adidas Aura"
mixSelection.Climb = "Adidas Aura"
mixSelection.Swim = "Adidas Aura"
Rayfield:Notify({
Title = "Reiniciado",
Content = "Selección vuelta a Adidas Aura",
Duration = 3,
Image = 4483362458
})
end
})
-- ═══════════════════════════════════════════
-- TAB: INFO
-- ═══════════════════════════════════════════
local TabInfo = Window:CreateTab("Info", 4483362458)
TabInfo:CreateSection("📖 Sobre el script")
TabInfo:CreateParagraph({
Title = "Animaciones Premium",
Content = "Script que te permite cambiar las animaciones de tu personaje con paquetes completos o combinaciones personalizadas. Los cambios se ven en todos los jugadores de la partida."
})
TabInfo:CreateSection("🎯 Cómo usar")
TabInfo:CreateParagraph({
Title = "Paquetes",
Content = "Ve a la pestaña Paquetes y elige cualquier paquete para aplicarlo completo."
})
TabInfo:CreateParagraph({
Title = "Mezclador",
Content = "Ve a Mezclador y combina animaciones de distintos paquetes. Por ejemplo: Idle de Adidas Aura + Walk de Ninja + Run de Zombie."
})
TabInfo:CreateSection("⚡ Notas")
TabInfo:CreateParagraph({
Title = "Replicación",
Content = "Los cambios se replican automáticamente a todos los jugadores del servidor."
})
-- ═══════════════════════════════════════════
-- TAB: CRÉDITOS
-- ═══════════════════════════════════════════
local TabCreditos = Window:CreateTab("Créditos", 4483362458)
TabCreditos:CreateSection("👑 Desarrollador")
TabCreditos:CreateParagraph({
Title = "Eren",
Content = "Creador y desarrollador del script. Todas las funciones, diseños y sistemas fueron hechos por él."
})
TabCreditos:CreateSection("💬 Discord Oficial")
TabCreditos:CreateParagraph({
Title = "Únete al servidor",
Content = "https://discord.gg/eCkeBVA4S\n\nAhí puedes reportar bugs, pedir nuevas funciones, sugerir animaciones o simplemente charlar con la comunidad."
})
TabCreditos:CreateButton({
Name = "📋 Copiar link del Discord",
Callback = function()
if setclipboard then
setclipboard("https://discord.gg/eCkeBVA4S")
Rayfield:Notify({
Title = "¡Copiado!",
Content = "El link del Discord está en tu portapapeles",
Duration = 4,
Image = 4483362458
})
else
Rayfield:Notify({
Title = "Discord",
Content = "discord.gg/eCkeBVA4S",
Duration = 6,
Image = 4483362458
})
end
end
})
TabCreditos:CreateButton({
Name = "🌐 Abrir Discord en navegador",
Callback = function()
pcall(function()
local url = "https://discord.gg/eCkeBVA4S"
if request then
request({
Url = url,
Method = "GET"
})
end
end)
Rayfield:Notify({
Title = "Discord",
Content = "Busca: discord.gg/eCkeBVA4S",
Duration = 6,
Image = 4483362458
})
end
})
TabCreditos:CreateSection("🙏 Agradecimientos")
TabCreditos:CreateParagraph({
Title = "Rayfield UI",
Content = "Por la interfaz gráfica utilizada en este script."
})
TabCreditos:CreateParagraph({
Title = "Comunidad",
Content = "A todos los usuarios que probaron versiones anteriores y ayudaron a mejorarlo con sus reportes."
})
TabCreditos:CreateSection("ℹ️ Versión")
TabCreditos:CreateParagraph({
Title = "Animaciones Premium · v7.0",
Content = "Fluid Edition · Fall Fix · Credits Update"
})
print("✅ Animaciones Premium v7.0 cargado · discord.gg/eCkeBVA4S")No comments yet for this script.



