BUNDLE Animation lD
Key RequiredUniversal

BUNDLE Animation lD

Universal ScriptMyntyPawsMyntyPaws 1.8K views 2.9K executesUpdated Aug 6, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•376 lines (13443 chars)
-- Services
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")

local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")

---------------------------------------------------------
-- 1. MAIN SCREEN GUI & TOGGLE BUTTON
---------------------------------------------------------
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "BundleAnimationsGui"
screenGui.ResetOnSpawn = false
screenGui.Parent = playerGui

local toggleBtn = Instance.new("TextButton")
toggleBtn.Name = "ToggleAnimBtn"
toggleBtn.Size = UDim2.new(0, 130, 0, 36)
toggleBtn.Position = UDim2.new(0, 15, 0, 100)
toggleBtn.BackgroundColor3 = Color3.fromRGB(30, 30, 35)
toggleBtn.Text = "▶ Animations"
toggleBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
toggleBtn.Font = Enum.Font.SourceSansBold
toggleBtn.TextSize = 14
toggleBtn.Parent = screenGui

local toggleCorner = Instance.new("UICorner")
toggleCorner.CornerRadius = UDim.new(0, 8)
toggleCorner.Parent = toggleBtn

---------------------------------------------------------
-- 2. MAIN FRAME (DESAIN DARK THEME)
---------------------------------------------------------
local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(0, 440, 0, 320)
mainFrame.Position = UDim2.new(0.5, -220, 0.5, -160)
mainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 23)
mainFrame.BorderSizePixel = 0
mainFrame.Active = true
mainFrame.ClipsDescendants = true
mainFrame.Parent = screenGui

local mainCorner = Instance.new("UICorner")
mainCorner.CornerRadius = UDim.new(0, 10)
mainCorner.Parent = mainFrame

-- Header Container
local headerFrame = Instance.new("Frame")
headerFrame.Size = UDim2.new(1, 0, 0, 45)
headerFrame.BackgroundTransparency = 1
headerFrame.Parent = mainFrame

-- Play Icon
local iconLabel = Instance.new("TextLabel")
iconLabel.Size = UDim2.new(0, 28, 0, 28)
iconLabel.Position = UDim2.new(0, 12, 0, 8)
iconLabel.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
iconLabel.Text = "▶"
iconLabel.TextColor3 = Color3.fromRGB(20, 20, 23)
iconLabel.Font = Enum.Font.SourceSansBold
iconLabel.TextSize = 12
iconLabel.Parent = headerFrame

local iconCorner = Instance.new("UICorner")
iconCorner.CornerRadius = UDim.new(0, 6)
iconCorner.Parent = iconLabel

-- Title Text
local titleLabel = Instance.new("TextLabel")
titleLabel.Size = UDim2.new(0, 200, 1, 0)
titleLabel.Position = UDim2.new(0, 48, 0, 0)
titleLabel.BackgroundTransparency = 1
titleLabel.Text = "BUNDLE ANIMATIONS"
titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
titleLabel.Font = Enum.Font.SourceSansBold
titleLabel.TextSize = 16
titleLabel.TextXAlignment = Enum.TextXAlignment.Left
titleLabel.Parent = headerFrame

-- Close Button (X)
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 28, 0, 28)
closeBtn.Position = UDim2.new(1, -38, 0, 8)
closeBtn.BackgroundColor3 = Color3.fromRGB(35, 35, 40)
closeBtn.Text = "X"
closeBtn.TextColor3 = Color3.fromRGB(220, 220, 220)
closeBtn.Font = Enum.Font.SourceSansBold
closeBtn.TextSize = 14
closeBtn.Parent = headerFrame

local closeCorner = Instance.new("UICorner")
closeCorner.CornerRadius = UDim.new(0, 6)
closeCorner.Parent = closeBtn

---------------------------------------------------------
-- 3. SCROLLING CONTAINER
---------------------------------------------------------
local scrollFrame = Instance.new("ScrollingFrame")
scrollFrame.Size = UDim2.new(1, -20, 1, -55)
scrollFrame.Position = UDim2.new(0, 10, 0, 45)
scrollFrame.BackgroundTransparency = 1
scrollFrame.BorderSizePixel = 0
scrollFrame.ScrollBarThickness = 4
scrollFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y
scrollFrame.Parent = mainFrame

local listLayout = Instance.new("UIListLayout")
listLayout.SortOrder = Enum.SortOrder.LayoutOrder
listLayout.Padding = UDim.new(0, 8)
listLayout.Parent = scrollFrame

---------------------------------------------------------
-- 4. LOGIKA ANIMASI & TOGGLE STATE
---------------------------------------------------------
local animList = {"Idle", "Walk", "Run", "Jump", "Fall"}
local savedCustomIds = {}
local defaultAnimIds = {}
local toggleStates = {} -- Menyimpan status ON/OFF tiap baris

local function captureDefaults(animateScript)
	if not animateScript then return end
	if not defaultAnimIds["Idle"] and animateScript:FindFirstChild("idle") then
		local a1 = animateScript.idle:FindFirstChild("Animation1")
		if a1 then defaultAnimIds["Idle"] = a1.AnimationId end
	end
	if not defaultAnimIds["Walk"] and animateScript:FindFirstChild("walk") then
		local w = animateScript.walk:FindFirstChild("WalkAnim")
		if w then defaultAnimIds["Walk"] = w.AnimationId end
	end
	if not defaultAnimIds["Run"] and animateScript:FindFirstChild("run") then
		local r = animateScript.run:FindFirstChild("RunAnim")
		if r then defaultAnimIds["Run"] = r.AnimationId end
	end
	if not defaultAnimIds["Jump"] and animateScript:FindFirstChild("jump") then
		local j = animateScript.jump:FindFirstChild("JumpAnim")
		if j then defaultAnimIds["Jump"] = j.AnimationId end
	end
	if not defaultAnimIds["Fall"] and animateScript:FindFirstChild("fall") then
		local f = animateScript.fall:FindFirstChild("FallAnim")
		if f then defaultAnimIds["Fall"] = f.AnimationId end
	end
end

local function applyAnimToCharacter(animType, id, enableCustom)
	local char = player.Character
	if not char then return end
	local animateScript = char:FindFirstChild("Animate")
	if not animateScript then return end

	captureDefaults(animateScript)

	local cleanId = id and tostring(id):gsub("%D", "") or ""
	local formattedId = nil

	if enableCustom and cleanId ~= "" and #cleanId >= 5 then
		formattedId = "rbxassetid://" .. cleanId
	else
		-- Gunakan ID default jika OFF / ID invalid / kosong
		if animType == "Idle" then formattedId = defaultAnimIds["Idle"]
		elseif animType == "Walk" then formattedId = defaultAnimIds["Walk"]
		elseif animType == "Run" then formattedId = defaultAnimIds["Run"]
		elseif animType == "Jump" then formattedId = defaultAnimIds["Jump"]
		elseif animType == "Fall" then formattedId = defaultAnimIds["Fall"]
		end
	end

	if animType == "Idle" and animateScript:FindFirstChild("idle") then
		if animateScript.idle:FindFirstChild("Animation1") and formattedId then
			animateScript.idle.Animation1.AnimationId = formattedId
		end
		if animateScript.idle:FindFirstChild("Animation2") and formattedId then
			animateScript.idle.Animation2.AnimationId = formattedId
		end
	elseif animType == "Walk" and animateScript:FindFirstChild("walk") and animateScript.walk:FindFirstChild("WalkAnim") then
		if formattedId then animateScript.walk.WalkAnim.AnimationId = formattedId end
	elseif animType == "Run" and animateScript:FindFirstChild("run") and animateScript.run:FindFirstChild("RunAnim") then
		if formattedId then animateScript.run.RunAnim.AnimationId = formattedId end
	elseif animType == "Jump" and animateScript:FindFirstChild("jump") and animateScript.jump:FindFirstChild("JumpAnim") then
		if formattedId then animateScript.jump.JumpAnim.AnimationId = formattedId end
	elseif animType == "Fall" and animateScript:FindFirstChild("fall") and animateScript.fall:FindFirstChild("FallAnim") then
		if formattedId then animateScript.fall.FallAnim.AnimationId = formattedId end
	end

	-- Reload animasi berjalan
	local humanoid = char:FindFirstChildOfClass("Humanoid")
	if humanoid then
		local animator = humanoid:FindFirstChildOfClass("Animator")
		if animator then
			for _, track in ipairs(animator:GetPlayingAnimationTracks()) do
				track:Stop()
			end
		end
	end
end

-- Helper Baris UI
local function createAnimRow(name, order)
	toggleStates[name] = false -- Status awal: OFF

	local rowFrame = Instance.new("Frame")
	rowFrame.Size = UDim2.new(1, -6, 0, 42)
	rowFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 35)
	rowFrame.BorderSizePixel = 0
	rowFrame.LayoutOrder = order
	rowFrame.Parent = scrollFrame

	local rowCorner = Instance.new("UICorner")
	rowCorner.CornerRadius = UDim.new(0, 8)
	rowCorner.Parent = rowFrame

	local nameLabel = Instance.new("TextLabel")
	nameLabel.Size = UDim2.new(0, 60, 1, 0)
	nameLabel.Position = UDim2.new(0, 15, 0, 0)
	nameLabel.BackgroundTransparency = 1
	nameLabel.Text = name
	nameLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
	nameLabel.Font = Enum.Font.SourceSansBold
	nameLabel.TextSize = 14
	nameLabel.TextXAlignment = Enum.TextXAlignment.Left
	nameLabel.Parent = rowFrame

	local idBox = Instance.new("TextBox")
	idBox.Size = UDim2.new(1, -190, 0, 26)
	idBox.Position = UDim2.new(0, 80, 0.5, -13)
	idBox.BackgroundTransparency = 1
	idBox.Text = "— default —"
	idBox.TextColor3 = Color3.fromRGB(150, 150, 160)
	idBox.Font = Enum.Font.SourceSans
	idBox.TextSize = 13
	idBox.ClearTextOnFocus = true
	idBox.Parent = rowFrame

	-- 🔄 TOMBOL ON / OFF
	local toggleOnOffBtn = Instance.new("TextButton")
	toggleOnOffBtn.Size = UDim2.new(0, 48, 0, 26)
	toggleOnOffBtn.Position = UDim2.new(1, -95, 0.5, -13)
	toggleOnOffBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 55)
	toggleOnOffBtn.Text = "OFF"
	toggleOnOffBtn.TextColor3 = Color3.fromRGB(180, 180, 180)
	toggleOnOffBtn.Font = Enum.Font.SourceSansBold
	toggleOnOffBtn.TextSize = 12
	toggleOnOffBtn.Parent = rowFrame

	local toggleOnOffCorner = Instance.new("UICorner")
	toggleOnOffCorner.CornerRadius = UDim.new(0, 6)
	toggleOnOffCorner.Parent = toggleOnOffBtn

	-- Tombol Reset (X)
	local resetBtn = Instance.new("TextButton")
	resetBtn.Size = UDim2.new(0, 30, 0, 26)
	resetBtn.Position = UDim2.new(1, -40, 0.5, -13)
	resetBtn.BackgroundColor3 = Color3.fromRGB(42, 42, 48)
	resetBtn.Text = "X"
	resetBtn.TextColor3 = Color3.fromRGB(180, 180, 190)
	resetBtn.Font = Enum.Font.SourceSansBold
	resetBtn.TextSize = 12
	resetBtn.Parent = rowFrame

	local resetCorner = Instance.new("UICorner")
	resetCorner.CornerRadius = UDim.new(0, 6)
	resetCorner.Parent = resetBtn

	-- Logika Perubahan Tombol ON/OFF
	local function updateToggleUI()
		local isON = toggleStates[name]
		local textId = idBox.Text
		local clean = textId:gsub("%D", "")

		if isON then
			if textId ~= "" and textId ~= "— default —" and #clean >= 5 then
				-- Tampilan Saat ON & Valid
				toggleOnOffBtn.Text = "ON"
				toggleOnOffBtn.BackgroundColor3 = Color3.fromRGB(46, 139, 87) -- Hijau
				toggleOnOffBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
				idBox.TextColor3 = Color3.fromRGB(100, 255, 150)
				savedCustomIds[name] = textId
				applyAnimToCharacter(name, textId, true)
			else
				-- Jika diketik kosong/invalid tapi ditekan ON, otomatis kembali OFF
				toggleStates[name] = false
				toggleOnOffBtn.Text = "OFF"
				toggleOnOffBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 55)
				toggleOnOffBtn.TextColor3 = Color3.fromRGB(180, 180, 180)
				idBox.TextColor3 = Color3.fromRGB(255, 100, 100) -- Merah penanda invalid
				applyAnimToCharacter(name, "", false)
			end
		else
			-- Tampilan Saat OFF
			toggleOnOffBtn.Text = "OFF"
			toggleOnOffBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 55)
			toggleOnOffBtn.TextColor3 = Color3.fromRGB(180, 180, 180)
			if textId == "" or textId == "— default —" then
				idBox.TextColor3 = Color3.fromRGB(150, 150, 160)
			end
			applyAnimToCharacter(name, "", false)
		end
	end

	-- Click Event ON / OFF
	toggleOnOffBtn.MouseButton1Click:Connect(function()
		toggleStates[name] = not toggleStates[name]
		updateToggleUI()
	end)

	-- Reset Button Event
	resetBtn.MouseButton1Click:Connect(function()
		toggleStates[name] = false
		savedCustomIds[name] = nil
		idBox.Text = "— default —"
		updateToggleUI()
	end)
end

for index, name in ipairs(animList) do
	createAnimRow(name, index)
end

---------------------------------------------------------
-- 5. DRAGGABLE & TOGGLE MAIN WINDOW
---------------------------------------------------------
local dragging, dragStart, startPos

mainFrame.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		dragging = true
		dragStart = input.Position
		startPos = mainFrame.Position
	end
end)

UserInputService.InputChanged:Connect(function(input)
	if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
		local delta = input.Position - dragStart
		mainFrame.Position = UDim2.new(
			startPos.X.Scale, startPos.X.Offset + delta.X,
			startPos.Y.Scale, startPos.Y.Offset + delta.Y
		)
	end
end)

UserInputService.InputEnded:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		dragging = false
	end
end)

local function setGuiState(visible)
	mainFrame.Visible = visible
	toggleBtn.Text = visible and "▶ Animations" or "▶ Open Anim"
end

toggleBtn.MouseButton1Click:Connect(function() setGuiState(not mainFrame.Visible) end)
closeBtn.MouseButton1Click:Connect(function() setGuiState(false) end)

-- Re-apply saat respawn
player.CharacterAdded:Connect(function(newChar)
	local animScript = newChar:WaitForChild("Animate", 3)
	if animScript then
		task.wait(0.5)
		captureDefaults(animScript)
	end
	task.wait(1)
	for animName, isON in pairs(toggleStates) do
		if isON and savedCustomIds[animName] then
			applyAnimToCharacter(animName, savedCustomIds[animName], true)
		end
	end
end)

if player.Character then
	task.spawn(function()
		local animScript = player.Character:WaitForChild("Animate", 3)
		if animScript then captureDefaults(animScript) end
	end)
end

Features & Information

ID Animation

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts