
KeylessUniversal

local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local TextService = game:GetService("TextService")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
-- Таблицы переводов
local translations = {
Russian = {
title = "Выбор языка",
r15 = "R15",
r6 = "R6",
start = "Начать запись",
stop = "Остановить",
play = "Воспроизвести",
play_reverse = "Воспр. назад",
speed = "Скорость: ",
recording = "Запись: ",
select_avatar = "Выберите тип аватара",
hide = "Скрыть",
show = "Показать",
enter_speed = "Введите скорость",
confirm = "OK",
show_gui = "Вернуть GUI",
scroll = "Листайте ↓"
},
English = {
title = "Language Selection",
r15 = "R15",
r6 = "R6",
start = "Start Recording",
stop = "Stop",
play = "Play",
play_reverse = "Play Reverse",
speed = "Speed: ",
recording = "Recording: ",
select_avatar = "Select Avatar Type",
hide = "Hide",
show = "Show",
enter_speed = "Enter speed",
confirm = "OK",
show_gui = "Show GUI",
scroll = "Scroll ↓"
},
Thai = {
title = "เลือกภาษา",
r15 = "R15",
r6 = "R6",
start = "เริ่มบันทึก",
stop = "หยุด",
play = "เล่น",
play_reverse = "เล่นย้อนกลับ",
speed = "ความเร็ว: ",
recording = "กำลังบันทึก: ",
select_avatar = "เลือกประเภทอวาตาร์",
hide = "ซ่อน",
show = "แสดง",
enter_speed = "ใส่ความเร็ว",
confirm = "ตกลง",
show_gui = "แสดง GUI",
scroll = "เลื่อน ↓"
},
Arabic = {
title = "اختيار اللغة",
r15 = "R15",
r6 = "R6",
start = "بدء التسجيل",
stop = "إيقاف",
play = "تشغيل",
play_reverse = "تشغيل عكسي",
speed = "السرعة: ",
recording = "التسجيل: ",
select_avatar = "اختر نوع الصورة الرمزية",
hide = "إخفاء",
show = "إظهار",
enter_speed = "أدخل السرعة",
confirm = "موافق",
show_gui = "إظهار GUI",
scroll = "انتقل لأسفل ↓"
},
French = {
title = "Sélection de la langue",
r15 = "R15",
r6 = "R6",
start = "Commencer l'enregistrement",
stop = "Arrêter",
play = "Lire",
play_reverse = "Lire à l'envers",
speed = "Vitesse: ",
recording = "Enregistrement: ",
select_avatar = "Sélectionner le type d'avatar",
hide = "Masquer",
show = "Afficher",
enter_speed = "Entrez la vitesse",
confirm = "OK",
show_gui = "Afficher GUI",
scroll = "Défiler ↓"
},
Spanish = {
title = "Selección de idioma",
r15 = "R15",
r6 = "R6",
start = "Comenzar grabación",
stop = "Detener",
play = "Reproducir",
play_reverse = "Reproducir reverso",
speed = "Velocidad: ",
recording = "Grabando: ",
select_avatar = "Seleccionar tipo de avatar",
hide = "Ocultar",
show = "Mostrar",
enter_speed = "Ingrese velocidad",
confirm = "OK",
show_gui = "Mostrar GUI",
scroll = "Desplazar ↓"
},
German = {
title = "Sprachauswahl",
r15 = "R15",
r6 = "R6",
start = "Aufnahme starten",
stop = "Stopp",
play = "Abspielen",
play_reverse = "Rückwärts abspielen",
speed = "Geschwindigkeit: ",
recording = "Aufnahme: ",
select_avatar = "Avatar-Typ auswählen",
hide = "Ausblenden",
show = "Einblenden",
enter_speed = "Geschwindigkeit eingeben",
confirm = "OK",
show_gui = "GUI anzeigen",
scroll = "Scrollen ↓"
}
}
-- Переменные
local currentLanguage = "English"
local selectedAvatar = "R15"
local isRecording = false
local isPlaying = false
local isReversePlaying = false
local recordingStartTime = 0
local recordedActions = {}
local recordingConnection = nil
local playConnection = nil
local currentSpeed = 1.0
-- Создание интерфейса
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "RecorderGUI"
screenGui.Parent = player.PlayerGui
-- Функция для форматирования времени
local function formatTime(seconds)
local minutes = math.floor(seconds / 60)
local secs = math.floor(seconds % 60)
return string.format("%02d:%02d", minutes, secs)
end
-- Функция создания кнопки
local function createButton(name, text, position, size)
local button = Instance.new("TextButton")
button.Name = name
button.Text = text
button.Size = UDim2.new(0, size.X, 0, size.Y)
button.Position = UDim2.new(0, position.X, 0, position.Y)
button.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
button.TextColor3 = Color3.fromRGB(255, 255, 255)
button.Font = Enum.Font.SourceSans
button.TextSize = 14
button.BorderSizePixel = 0
button.ZIndex = 10
button.AutoButtonColor = true
return button
end
-- Функция создания текстовой метки
local function createLabel(name, text, position)
local label = Instance.new("TextLabel")
label.Name = name
label.Text = text
label.Size = UDim2.new(0, 200, 0, 30)
label.Position = UDim2.new(0, position.X, 0, position.Y)
label.BackgroundTransparency = 1
label.TextColor3 = Color3.fromRGB(255, 255, 255)
label.Font = Enum.Font.SourceSans
label.TextSize = 16
label.ZIndex = 10
return label
end
-- Функция создания текстового поля
local function createTextBox(name, text, position, size)
local textBox = Instance.new("TextBox")
textBox.Name = name
textBox.Text = text
textBox.Size = UDim2.new(0, size.X, 0, size.Y)
textBox.Position = UDim2.new(0, position.X, 0, position.Y)
textBox.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
textBox.TextColor3 = Color3.fromRGB(255, 255, 255)
textBox.Font = Enum.Font.SourceSans
textBox.TextSize = 14
textBox.BorderSizePixel = 0
textBox.ZIndex = 10
return textBox
end
-- Кнопка возврата GUI (изначально скрыта)
local showGUIButton = createButton("ShowGUIButton", translations[currentLanguage].show_gui, Vector2.new(10, 10), Vector2.new(120, 40))
showGUIButton.BackgroundColor3 = Color3.fromRGB(30, 144, 255)
showGUIButton.Visible = false
showGUIButton.ZIndex = 100
showGUIButton.Parent = screenGui
-- Создание языкового меню с прокруткой
local languageFrame = Instance.new("Frame")
languageFrame.Size = UDim2.new(0, 350, 0, 400)
languageFrame.Position = UDim2.new(0.5, -175, 0.5, -200)
languageFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
languageFrame.BorderSizePixel = 0
languageFrame.ZIndex = 5
languageFrame.Parent = screenGui
-- Контейнер для прокрутки
local scrollingFrame = Instance.new("ScrollingFrame")
scrollingFrame.Size = UDim2.new(1, -20, 1, -80)
scrollingFrame.Position = UDim2.new(0, 10, 0, 60)
scrollingFrame.BackgroundTransparency = 1
scrollingFrame.BorderSizePixel = 0
scrollingFrame.ScrollBarThickness = 8
scrollingFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
scrollingFrame.ZIndex = 6
scrollingFrame.Parent = languageFrame
local titleLabel = createLabel("Title", "Select Language", Vector2.new(75, 15))
titleLabel.Size = UDim2.new(0, 200, 0, 40)
titleLabel.TextSize = 20
titleLabel.Parent = languageFrame
local scrollHint = createLabel("ScrollHint", translations[currentLanguage].scroll, Vector2.new(75, 365))
scrollHint.Size = UDim2.new(0, 200, 0, 30)
scrollHint.TextSize = 14
scrollHint.TextColor3 = Color3.fromRGB(200, 200, 200)
scrollHint.Parent = languageFrame
local languages = {"Russian", "English", "Thai", "Arabic", "French", "Spanish", "German", "Chinese", "Japanese", "Korean", "Portuguese", "Italian", "Dutch", "Turkish", "Hindi"}
local yOffset = 10
for _, lang in pairs(languages) do
local button = createButton(lang, lang, Vector2.new(25, yOffset), Vector2.new(280, 50))
button.TextSize = 16
button.Parent = scrollingFrame
yOffset += 60
end
-- Обновляем размер canvas для прокрутки
scrollingFrame.CanvasSize = UDim2.new(0, 0, 0, #languages * 60)
-- Обработчики для кнопок языка
for _, button in ipairs(scrollingFrame:GetChildren()) do
if button:IsA("TextButton") then
button.MouseButton1Click:Connect(function()
currentLanguage = button.Name
titleLabel.Text = translations[currentLanguage].title
scrollHint.Text = translations[currentLanguage].scroll
languageFrame.Visible = false
showAvatarSelection()
end)
end
end
-- Функция показа выбора аватара
function showAvatarSelection()
local avatarFrame = Instance.new("Frame")
avatarFrame.Size = UDim2.new(0, 350, 0, 250)
avatarFrame.Position = UDim2.new(0.5, -175, 0.5, -125)
avatarFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
avatarFrame.BorderSizePixel = 0
avatarFrame.ZIndex = 5
avatarFrame.Parent = screenGui
local title = createLabel("AvatarTitle", translations[currentLanguage].select_avatar, Vector2.new(75, 20))
title.Size = UDim2.new(0, 200, 0, 40)
title.TextSize = 18
title.Parent = avatarFrame
local r15Button = createButton("R15Button", translations[currentLanguage].r15, Vector2.new(75, 70), Vector2.new(200, 60))
r15Button.TextSize = 16
r15Button.Parent = avatarFrame
local r6Button = createButton("R6Button", translations[currentLanguage].r6, Vector2.new(75, 150), Vector2.new(200, 60))
r6Button.TextSize = 16
r6Button.Parent = avatarFrame
r15Button.MouseButton1Click:Connect(function()
selectedAvatar = "R15"
avatarFrame:Destroy()
createMainUI()
end)
r6Button.MouseButton1Click:Connect(function()
selectedAvatar = "R6"
avatarFrame:Destroy()
createMainUI()
end)
end
-- Функция остановки записи
local function stopRecording()
isRecording = false
if recordingConnection then
recordingConnection:Disconnect()
recordingConnection = nil
end
end
-- Функция остановки воспроизведения
local function stopPlayback()
isPlaying = false
isReversePlaying = false
if playConnection then
playConnection:Disconnect()
playConnection = nil
end
end
-- Создание основного интерфейса
function createMainUI()
local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(1, 0, 0, 70)
mainFrame.Position = UDim2.new(0, 0, 1, -70)
mainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
mainFrame.BorderSizePixel = 0
mainFrame.ZIndex = 5
mainFrame.Parent = screenGui
-- Кнопка записи
local recordButton = createButton("RecordButton", translations[currentLanguage].start, Vector2.new(20, 15), Vector2.new(100, 40))
recordButton.TextSize = 16
recordButton.Parent = mainFrame
-- Кнопка воспроизведения вперед
local playButton = createButton("PlayButton", translations[currentLanguage].play, Vector2.new(130, 15), Vector2.new(100, 40))
playButton.TextSize = 16
playButton.Parent = mainFrame
-- Кнопка воспроизведения назад
local reversePlayButton = createButton("ReversePlayButton", translations[currentLanguage].play_reverse, Vector2.new(240, 15), Vector2.new(100, 40))
reversePlayButton.TextSize = 14
reversePlayButton.Parent = mainFrame
-- Кнопка скрытия GUI
local hideButton = createButton("HideButton", translations[currentLanguage].hide, Vector2.new(350, 15), Vector2.new(100, 40))
hideButton.TextSize = 16
hideButton.Parent = mainFrame
-- Кнопка изменения скорости
local speedButton = createButton("SpeedButton", "⚙️ Speed", Vector2.new(460, 15), Vector2.new(100, 40))
speedButton.TextSize = 16
speedButton.Parent = mainFrame
-- Таймер записи
local timerLabel = createLabel("TimerLabel", translations[currentLanguage].recording .. "00:00/06:00", Vector2.new(20, 60))
timerLabel.Size = UDim2.new(0, 200, 0, 20)
timerLabel.TextSize = 14
timerLabel.Parent = mainFrame
-- Метка скорости
local speedLabel = createLabel("SpeedLabel", translations[currentLanguage].speed .. "1.0x", Vector2.new(230, 60))
speedLabel.Size = UDim2.new(0, 120, 0, 20)
speedLabel.TextSize = 14
speedLabel.Parent = mainFrame
-- Окно ввода скорости
local speedInputFrame = Instance.new("Frame")
speedInputFrame.Size = UDim2.new(0, 250, 0, 120)
speedInputFrame.Position = UDim2.new(0.5, -125, 0.5, -60)
speedInputFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
speedInputFrame.BorderSizePixel = 0
speedInputFrame.ZIndex = 20
speedInputFrame.Visible = false
speedInputFrame.Parent = screenGui
local speedInputLabel = createLabel("SpeedInputLabel", translations[currentLanguage].enter_speed, Vector2.new(25, 10))
speedInputLabel.Size = UDim2.new(0, 200, 0, 30)
speedInputLabel.TextSize = 16
speedInputLabel.Parent = speedInputFrame
local speedTextBox = createTextBox("SpeedTextBox", "1.0", Vector2.new(25, 50), Vector2.new(200, 30))
speedTextBox.Parent = speedInputFrame
local confirmButton = createButton("ConfirmButton", translations[currentLanguage].confirm, Vector2.new(25, 90), Vector2.new(200, 40))
confirmButton.TextSize = 16
confirmButton.Parent = speedInputFrame
-- Функция обновления скорости
local function updateSpeed(speed)
currentSpeed = math.clamp(tonumber(speed) or 1.0, 0.1, 10.0)
speedLabel.Text = translations[currentLanguage].speed .. string.format("%.1fx", currentSpeed)
speedInputFrame.Visible = false
end
-- Обработчики событий для окна скорости
speedButton.MouseButton1Click:Connect(function()
speedInputFrame.Visible = not speedInputFrame.Visible
if speedInputFrame.Visible then
speedTextBox.Text = tostring(currentSpeed)
end
end)
confirmButton.MouseButton1Click:Connect(function()
updateSpeed(speedTextBox.Text)
end)
speedTextBox.FocusLost:Connect(function(enterPressed)
if enterPressed then
updateSpeed(speedTextBox.Text)
end
end)
-- Обработчик скрытия GUI
local isGUIVisible = true
hideButton.MouseButton1Click:Connect(function()
isGUIVisible = not isGUIVisible
mainFrame.Visible = isGUIVisible
hideButton.Text = isGUIVisible and translations[currentLanguage].hide or translations[currentLanguage].show
showGUIButton.Visible = not isGUIVisible
showGUIButton.Text = translations[currentLanguage].show_gui
end)
-- Обработчик кнопки возврата GUI
showGUIButton.MouseButton1Click:Connect(function()
mainFrame.Visible = true
showGUIButton.Visible = false
hideButton.Text = translations[currentLanguage].hide
isGUIVisible = true
end)
-- Функции записи
recordButton.MouseButton1Click:Connect(function()
if not isRecording then
-- Начать запись
isRecording = true
recordedActions = {}
recordingStartTime = tick()
recordButton.Text = translations[currentLanguage].stop
playButton.Visible = false
reversePlayButton.Visible = false
-- Запись движений
recordingConnection = RunService.Heartbeat:Connect(function()
if isRecording then
local currentTime = tick() - recordingStartTime
if currentTime >= 360 then -- 6 минут
stopRecording()
recordButton.Text = translations[currentLanguage].start
playButton.Visible = true
reversePlayButton.Visible = true
return
end
-- Запись позиции и вращения
local action = {
time = currentTime,
position = character:GetPivot().Position,
rotation = character:GetPivot().Rotation
}
table.insert(recordedActions, action)
timerLabel.Text = translations[currentLanguage].recording .. formatTime(currentTime) .. "/06:00"
end
end)
else
-- Остановить запись
stopRecording()
recordButton.Text = translations[currentLanguage].start
playButton.Visible = true
reversePlayButton.Visible = true
end
end)
-- Функция воспроизведения вперед
playButton.MouseButton1Click:Connect(function()
if isPlaying or isReversePlaying then
-- Остановить воспроизведение
stopPlayback()
playButton.Text = translations[currentLanguage].play
reversePlayButton.Text = translations[currentLanguage].play_reverse
recordButton.Visible = true
elseif not isPlaying and #recordedActions > 0 then
-- Начать воспроизведение вперед
isPlaying = true
recordButton.Visible = false
playButton.Text = "⏹️"
local startTime = tick()
local currentIndex = 1
playConnection = RunService.Heartbeat:Connect(function()
if isPlaying then
local elapsed = (tick() - startTime) * currentSpeed
while currentIndex <= #recordedActions and recordedActions[currentIndex].time <= elapsed do
local action = recordedActions[currentIndex]
character:PivotTo(CFrame.new(action.position) * action.rotation)
currentIndex += 1
end
if currentIndex > #recordedActions then
stopPlayback()
playButton.Text = translations[currentLanguage].play
recordButton.Visible = true
end
else
stopPlayback()
end
end)
end
end)
-- Функция воспроизведения назад (обратная перемотка)
reversePlayButton.MouseButton1Click:Connect(function()
if isPlaying or isReversePlaying then
-- Остановить воспроизведение
stopPlayback()
playButton.Text = translations[currentLanguage].play
reversePlayButton.Text = translations[currentLanguage].play_reverse
recordButton.Visible = true
elseif not isReversePlaying and #recordedActions > 0 then
-- Начать воспроизведение назад
isReversePlaying = true
recordButton.Visible = false
reversePlayButton.Text = "⏹️"
local startTime = tick()
local currentIndex = #recordedActions
local totalDuration = recordedActions[#recordedActions].time
playConnection = RunService.Heartbeat:Connect(function()
if isReversePlaying then
local elapsed = (tick() - startTime) * currentSpeed
local reverseTime = math.max(0, totalDuration - elapsed)
-- Находим соответствующий кадр для обратного воспроизведения
local targetIndex = 1
for i = #recordedActions, 1, -1 do
if recordedActions[i].time <= reverseTime then
targetIndex = i
break
end
end
-- Применяем позицию и вращение
if targetIndex >= 1 and targetIndex <= #recordedActions then
local action = recordedActions[targetIndex]
character:PivotTo(CFrame.new(action.position) * action.rotation)
end
if elapsed >= totalDuration then
stopPlayback()
reversePlayButton.Text = translations[currentLanguage].play_reverse
recordButton.Visible = true
end
else
stopPlayback()
end
end)
end
end)
end



Localized script, international, maximum recording time of 6 minutes, 4 GB of RAM recommended
maybe, you can ResetOnS* is false?
@ScriptTrol There is no delete script button
@TTMYSCRIPTS You may have misunderstood. When you die, the gui will disappear.
@ScriptTrolI did this because there is no delete script button.