-- ═══════════════════════════════════════════ -- 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")