local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local HttpService = game:GetService("HttpService") local RunService = game:GetService("RunService") local PlayerGui = LocalPlayer:WaitForChild("PlayerGui", 10) if not PlayerGui then return end if PlayerGui:FindFirstChild("DeltaCFrameRecorder") then PlayerGui.DeltaCFrameRecorder:Destroy() end local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "DeltaCFrameRecorder" ScreenGui.ResetOnSpawn = false ScreenGui.Parent = PlayerGui local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35) MainFrame.BorderSizePixel = 0 MainFrame.Position = UDim2.new(0.3, 0, 0.2, 0) MainFrame.Size = UDim2.new(0, 240, 0, 210) MainFrame.Active = true MainFrame.Draggable = true MainFrame.Parent = ScreenGui local TitleLabel = Instance.new("TextLabel") TitleLabel.Size = UDim2.new(1, 0, 0, 30) TitleLabel.BackgroundColor3 = Color3.fromRGB(50, 50, 50) TitleLabel.Text = " ☰ 67 Recorder" TitleLabel.TextColor3 = Color3.fromRGB(255, 255, 255) TitleLabel.Font = Enum.Font.SourceSansBold TitleLabel.TextSize = 15 TitleLabel.TextXAlignment = Enum.TextXAlignment.Left TitleLabel.Parent = MainFrame local UIListLayout = Instance.new("UIListLayout") UIListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder UIListLayout.Padding = UDim.new(0, 6) UIListLayout.Parent = MainFrame local function setupButton(text, order, color) local btn = Instance.new("TextButton") btn.Size = UDim2.new(0.9, 0, 0, 35) btn.Text = text btn.Font = Enum.Font.SourceSansBold btn.TextSize = 14 btn.TextColor3 = Color3.fromRGB(255, 255, 255) btn.BackgroundColor3 = color or Color3.fromRGB(65, 65, 65) btn.BorderSizePixel = 0 btn.LayoutOrder = order btn.Parent = MainFrame return btn end local RecordBtn = setupButton("⏺ Start Recording Me", 1, Color3.fromRGB(180, 50, 50)) local PlayBtn = setupButton("▶ Play Saved Animation", 2, Color3.fromRGB(50, 120, 50)) local CopyBtn = setupButton("📋 Copy CFrame Data", 3) local ClearBtn = setupButton("🗑 Clear Save", 4, Color3.fromRGB(85, 85, 85)) -- File name changed to 67.json local FILE_NAME = "67.json" local savedData = {} local isRecording = false local isPlaying = false local tempFrames = {} local frameCount = 1 local recordConnection = nil if isfile and readfile and isfile(FILE_NAME) then local success, decoded = pcall(function() return HttpService:JSONDecode(readfile(FILE_NAME)) end) if success then savedData = decoded end end local function round(num) return math.round(num * 100) / 100 end local function cfToTable(cf) local components = {cf:GetComponents()} for i, v in ipairs(components) do components[i] = round(v) end return components end local function tableToCf(t) return CFrame.new(unpack(t)) end RecordBtn.MouseButton1Click:Connect(function() local char = LocalPlayer.Character if not char then return end if not isRecording then isRecording = true tempFrames = {} frameCount = 1 RecordBtn.Text = "⏹ Tap to Save & Stop" RecordBtn.BackgroundColor3 = Color3.fromRGB(230, 140, 40) local joints = {} for _, v in ipairs(char:GetDescendants()) do if v:IsA("Motor6D") then table.insert(joints, v) end end recordConnection = RunService.Heartbeat:Connect(function() local currentFrame = {} local hasJoints = false for _, joint in ipairs(joints) do if joint and joint.Parent then currentFrame[joint.Name] = cfToTable(joint.Transform) hasJoints = true end end if hasJoints then tempFrames[tostring(frameCount)] = currentFrame frameCount = frameCount + 1 end end) else isRecording = false if recordConnection then recordConnection:Disconnect() recordConnection = nil end savedData = tempFrames if writefile then writefile(FILE_NAME, HttpService:JSONEncode(savedData)) end RecordBtn.Text = "⏺ Start Recording Me" RecordBtn.BackgroundColor3 = Color3.fromRGB(180, 50, 50) end end) PlayBtn.MouseButton1Click:Connect(function() local char = LocalPlayer.Character if not char or isPlaying or not savedData or next(savedData) == nil then return end isPlaying = true PlayBtn.Text = "Playing..." local joints = {} for _, v in ipairs(char:GetDescendants()) do if v:IsA("Motor6D") then joints[v.Name] = v end end local totalFrames = 0 for k, _ in pairs(savedData) do local n = tonumber(k) or 0 if n > totalFrames then totalFrames = n end end task.spawn(function() local humanoid = char:FindFirstChildOfClass("Humanoid") local animator = humanoid and humanoid:FindFirstChildOfClass("Animator") local animatorParent = animator and animator.Parent if animator then animator.Parent = nil end for f = 1, totalFrames do local data = savedData[tostring(f)] if data then for jName, cfTable in pairs(data) do if joints[jName] then joints[jName].Transform = tableToCf(cfTable) end end end RunService.Heartbeat:Wait() end if animator then animator.Parent = animatorParent end isPlaying = false PlayBtn.Text = "▶ Play Saved Animation" end) end) CopyBtn.MouseButton1Click:Connect(function() if not savedData or next(savedData) == nil then return end local dataString = HttpService:JSONEncode(savedData) if setclipboard then setclipboard(dataString) CopyBtn.Text = "Copied! Size: " .. string.len(dataString) .. " chars" task.wait(2) CopyBtn.Text = "📋 Copy CFrame Data" end end) ClearBtn.MouseButton1Click:Connect(function() savedData = {} if writefile then writefile(FILE_NAME, "{}") end ClearBtn.Text = "Cleared!" task.wait(1.5) ClearBtn.Text = "🗑 Clear Save" end)