
KeylessUniversal

-------------------------------------------------------------------------------------------------------------------------------
-- Animation Logger (Diubah suai)
-- Diletakkan di StarterPlayerScripts
-------------------------------------------------------------------------------------------------------------------------------
if not game:IsLoaded() then game.Loaded:Wait() end
-------------------------------------------------------------------------------------------------------------------------------
local players = game:GetService("Players")
local marketplaceservice = game:GetService("MarketplaceService")
local httpservice = game:GetService("HttpService")
local localplayer = players.LocalPlayer
--[[
Fungsi untuk menyahaktifkan log animasi tertentu.
Tambah nama Animation object (bukan nama aset) ke dalam jadual ini untuk mengabaikannya.
]]
local disabledAnimations = {
["WalkAnim"] = true,
["JumpAnim"] = true,
["RunAnim"] = true,
["SwimAnim"] = true,
["IdleAnim"] = true,
["FallAnim"] = true,
["SwimIdleAnim"] = true,
["ClimbAnim"] = true,
}
-------------------------------------------------------------------------------------------------------------------------------
local function clik()
local s = Instance.new("Sound")
s.SoundId = "rbxassetid://87152549167464"
s.Parent = game.Workspace
s.Volume = 1.2
s.TimePosition = 0.1
s:Play()
task.delay(1, function() s:Destroy() end)
end
-------------------------------------------------------------------------------------------------------------------------------
local dw = {
[16116270224] = true,
[16552821455] = true,
[18984416148] = true
}
local indw = dw[game.GameId] or false
-- Dapatkan nama permainan sekali sahaja untuk kecekapan
local gameName = "Unknown"
local success, result = pcall(function()
gameName = marketplaceservice:GetProductInfo(game.PlaceId).Name
end)
if not success then gameName = "Failed to fetch" end
-------------------------------------------------------------------------------------------------------------------------------
local gui = Instance.new("ScreenGui")
gui.Name = "AnimationLogger"
gui.Parent = gethui and gethui() or game:GetService("CoreGui")
gui.ResetOnSpawn = false
local function repos(ui, w, h)
local sw, sh = workspace.CurrentCamera.ViewportSize.X, workspace.CurrentCamera.ViewportSize.Y
local cx, cy = (sw - w) / 2, (sh - h) / 2 - 56
ui.Position = UDim2.new(0, cx, 0, cy)
end
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 400, 0, 250)
frame.Position = UDim2.new(0.35, 0, 0.3, 0)
repos(frame, 400, 250)
frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
frame.BorderSizePixel = 0
frame.Parent = gui
frame.Active = true
frame.Draggable = true
-------------------------------------------------------------------------------------------------------------------------------
local topbar = Instance.new("Frame")
topbar.Size = UDim2.new(0, 400, 0, 30)
topbar.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
topbar.BorderSizePixel = 0
topbar.Parent = frame
local titlelabel = Instance.new("TextLabel")
titlelabel.Size = UDim2.new(1, -140, 1, 0)
titlelabel.Position = UDim2.new(0, 0, 0, 0)
titlelabel.BackgroundTransparency = 1
titlelabel.Text = " Animation Logger"
titlelabel.Font = Enum.Font.RobotoMono
titlelabel.TextXAlignment = Enum.TextXAlignment.Left
titlelabel.TextColor3 = Color3.new(1, 1, 1)
titlelabel.TextSize = 18
titlelabel.Parent = topbar
local function createbutton(name, position, size, color, text)
local button = Instance.new("TextButton")
button.Name = name
button.Size = size
button.Position = position
button.BackgroundColor3 = color
button.Text = text
button.TextColor3 = Color3.new(1, 1, 1)
button.TextSize = 16
button.Font = Enum.Font.RobotoMono
button.BorderSizePixel = 0
button.BackgroundTransparency = 0.7
button.Parent = topbar
return button
end
local clearbutton = createbutton("ClearButton", UDim2.new(1, -116, 0, 5), UDim2.new(0, 60, 0, 20), Color3.fromRGB(200, 50, 50), "Clear")
local minimizebutton = createbutton("MinimizeButton", UDim2.new(1, -51, 0, 5), UDim2.new(0, 20, 0, 20), Color3.fromRGB(50, 50, 200), "–")
local xbutton = createbutton("CloseButton", UDim2.new(1, -25, 0, 5), UDim2.new(0, 20, 0, 20), Color3.fromRGB(200, 50, 50), "X")
-------------------------------------------------------------------------------------------------------------------------------
local fakeframe = Instance.new("Frame")
fakeframe.Size = UDim2.new(1, 0, 1, -30)
fakeframe.Position = UDim2.new(0, 0, 0, 30)
fakeframe.BorderSizePixel = 0
fakeframe.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
fakeframe.Parent = frame
local scrollframe = Instance.new("ScrollingFrame")
scrollframe.Size = UDim2.new(1, 0, 0, 210)
scrollframe.Position = UDim2.new(0, 5, 0, 35)
scrollframe.CanvasSize = UDim2.new(0, 0, 0, 0)
scrollframe.ScrollBarThickness = 5
scrollframe.BorderSizePixel = 0
scrollframe.BackgroundTransparency = 1
scrollframe.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
scrollframe.Parent = frame
local loglayout = Instance.new("UIListLayout")
loglayout.Padding = UDim.new(0, 5)
loglayout.Parent = scrollframe
-------------------------------------------------------------------------------------------------------------------------------
local function extractanimationid(fullid)
return string.gsub(tostring(fullid or ""), "[^%d]", "")
end
local function getAnimationInfo(assetid)
local success, result = pcall(function()
return marketplaceservice:GetProductInfo(assetid, Enum.InfoType.Asset)
end)
if success and result then
return {
Creator = result.Creator.Name,
Name = result.Name,
Status = result.IsPublicDomain and "Public" or "Private"
}
end
return { Creator = "Unknown", Name = "Unknown", Status = "Unknown" }
end
-------------------------------------------------------------------------------------------------------------------------------
local loggedanimations = {}
local function createlogentry(animationname, animationid, source)
local displayid = extractanimationid(animationid)
local numericid = tonumber(displayid)
if not numericid then return end
local entryframe = Instance.new("Frame")
entryframe.Size = UDim2.new(0, 390, 0, 130) -- Saiz diubahsuai untuk susun atur butang baru
entryframe.Position = UDim2.new(0, 10, 0, 10)
entryframe.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
entryframe.BorderSizePixel = 0
entryframe.Parent = scrollframe
local info = getAnimationInfo(numericid)
if info.Creator == "Roblox" then
entryframe:Destroy()
loggedanimations[animationid] = nil
return
end
local function createLabel(text, yPos, size, color)
local label = Instance.new("TextLabel")
label.Size = UDim2.new(1, -170, 0, 20) -- Lebar diubahsuai untuk memberi ruang kepada butang
label.Position = UDim2.new(0, 5, 0, yPos)
label.BackgroundTransparency = 1
label.Text = text
label.Font = Enum.Font.RobotoMono
label.TextColor3 = color or Color3.new(1, 1, 1)
label.TextSize = size
label.BorderSizePixel = 0
label.TextXAlignment = Enum.TextXAlignment.Left
label.Parent = entryframe
return label
end
createLabel("Game: " .. gameName, 5, 14, Color3.fromRGB(200, 200, 200))
createLabel("ID: " .. displayid, 25, 16)
createLabel("Creator: " .. info.Creator, 45, 14, Color3.fromRGB(200, 200, 200))
createLabel("Status: " .. info.Status, 65, 14, Color3.fromRGB(200, 200, 200))
createLabel("Source: " .. source, 85, 14, Color3.fromRGB(200, 200, 200))
local animNameLabel = createLabel("Animation Name: " .. info.Name, 105, 14, Color3.fromRGB(200, 200, 200))
local function createEntryButton(text, yPos, color, xOffset)
local button = Instance.new("TextButton")
button.Size = UDim2.new(0, 75, 0, 20)
button.Position = UDim2.new(1, -80 - (xOffset or 0), 0, yPos)
button.BackgroundColor3 = color
button.Text = text
button.Font = Enum.Font.RobotoMono
button.BorderSizePixel = 0
button.TextColor3 = Color3.new(1, 1, 1)
button.TextSize = 12
button.Parent = entryframe
return button
end
-- [[ DIUBAH: Kedudukan Butang ]]
-- Lajur Kiri (Butang Salin)
local copyidbutton = createEntryButton("Copy ID", 5, Color3.fromRGB(60, 60, 150), 80)
local copynamebutton = createEntryButton("Copy Name", 30, Color3.fromRGB(60, 60, 150), 80)
local copyurlbutton = createEntryButton("Copy Url", 55, Color3.fromRGB(60, 60, 150), 80)
-- Lajur Kanan (Butang Tindakan)
local playbutton = createEntryButton("Play", 5, Color3.fromRGB(60, 150, 60))
local stopbutton = createEntryButton("Stop", 30, Color3.fromRGB(150, 60, 60))
local removebutton = createEntryButton("Remove", 55, Color3.fromRGB(200, 80, 80))
local track = nil
playbutton.MouseButton1Click:Connect(function()
clik()
if localplayer.Character then
local humanoid = localplayer.Character:FindFirstChildOfClass("Humanoid")
if humanoid then
if track then track:Stop() track = nil end
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://" .. numericid
track = humanoid:LoadAnimation(animation)
track:Play()
track:AdjustWeight(999)
playbutton.Text = "Playing"
task.delay(1, function() if playbutton then playbutton.Text = "Play" end end)
end
end
end)
stopbutton.MouseButton1Click:Connect(function()
clik()
if track then
track:Stop()
track = nil
stopbutton.Text = "Stopped"
task.delay(1, function() if stopbutton then stopbutton.Text = "Stop" end end)
end
end)
local function copyToClipboard(textToCopy, button)
clik()
if setclipboard then
setclipboard(textToCopy)
local originalText = button.Text
button.Text = "Copied!"
task.wait(1)
button.Text = originalText
else
local originalText = button.Text
button.Text = "Error"
task.wait(1)
button.Text = originalText
end
end
copyidbutton.MouseButton1Click:Connect(function()
copyToClipboard(displayid, copyidbutton)
end)
copynamebutton.MouseButton1Click:Connect(function()
copyToClipboard(info.Name, copynamebutton)
end)
copyurlbutton.MouseButton1Click:Connect(function()
local url = "https://www.roblox.com/library/" .. displayid
copyToClipboard(url, copyurlbutton)
end)
removebutton.MouseButton1Click:Connect(function()
clik()
loggedanimations[animationid] = nil
entryframe:Destroy()
end)
return entryframe
end
-------------------------------------------------------------------------------------------------------------------------------
local function loganimation(animationname, animationid, source)
if not animationid or loggedanimations[animationid] or disabledAnimations[animationname] then
return
end
loggedanimations[animationid] = true
task.spawn(function()
createlogentry(animationname, animationid, source)
scrollframe.CanvasSize = UDim2.new(0, 0, 0, loglayout.AbsoluteContentSize.Y)
end)
end
local function trackanimationplaying(humanoid)
if indw then return end
local connection = humanoid.AnimationPlayed:Connect(function(animationtrack)
if not animationtrack or not animationtrack.Animation then return end
local anim = animationtrack.Animation
loganimation(anim.Name, anim.AnimationId, "Played Animation")
end)
return function()
if connection then connection:Disconnect() end
end
end
-------------------------------------------------------------------------------------------------------------------------------
local function setupcharacter(character)
local humanoid = character:WaitForChild("Humanoid")
local animateScript = character:FindFirstChild("Animate")
if animateScript then
for _, child in ipairs(animateScript:GetChildren()) do
if child:IsA("StringValue") and child:FindFirstChildOfClass("Animation") then
local anim = child:FindFirstChildOfClass("Animation")
loganimation(anim.Name, anim.AnimationId, "Animate Script")
end
end
end
if indw then return end
trackanimationplaying(humanoid)
end
-------------------------------------------------------------------------------------------------------------------------------
local characterconnection
local function monitorcharacter()
if characterconnection then characterconnection:Disconnect() end
characterconnection = localplayer.CharacterAdded:Connect(setupcharacter)
if localplayer.Character then setupcharacter(localplayer.Character) end
end
monitorcharacter()
-------------------------------------------------------------------------------------------------------------------------------
clearbutton.MouseButton1Click:Connect(function()
clik()
for _, child in ipairs(scrollframe:GetChildren()) do
if child:IsA("Frame") then child:Destroy() end
end
loggedanimations = {}
scrollframe.CanvasSize = UDim2.new(0, 0, 0, 0)
end)
xbutton.MouseButton1Click:Connect(function()
clik()
gui:Destroy()
end)
local isminimized = false
local originalsize = frame.Size
minimizebutton.MouseButton1Click:Connect(function()
clik()
isminimized = not isminimized
if isminimized then
minimizebutton.Text = "+"
frame.Size = UDim2.new(originalsize.X.Scale, originalsize.X.Offset, 0, 30)
scrollframe.Visible = false
else
minimizebutton.Text = "–"
frame.Size = originalsize
scrollframe.Visible = true
end
end)
-------------------------------------------------------------------------------------------------------------------------------
loglayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
scrollframe.CanvasSize = UDim2.new(0, 0, 0, loglayout.AbsoluteContentSize.Y)
end)
-------------------------------------------------------------------------------------------------------------------------------



W script
Tysm
What it do?
@mayaflores962 logs any animations you play, its only log localplayer animate..
@Irfannnnn fe?
@mayaflores962 no, i guess.. its a logger, not a emote gui thingy..
lowk * logger. only grabs animations being pla* directly