
KeylessUniversal

-- Full Physical Motion Mirroring (9 Limbs: Knees & Elbows Included) ---
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local CoreGui = game:GetService("CoreGui")
local LocalPlayer = Players.LocalPlayer
local Mouse = LocalPlayer:GetMouse()
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
-- Таблица для хранения привязанных объектов (добавлено 4 новых сустава)
local AttachedObjects = {
Torso = {Part = nil, R15 = "UpperTorso", R6 = "Torso"},
-- Верхние части рук (Плечи)
LeftArm = {Part = nil, R15 = "LeftUpperArm", R6 = "Left Arm"},
RightArm = {Part = nil, R15 = "RightUpperArm", R6 = "Right Arm"},
-- Нижние части рук (Предплечья / Локти)
LeftLowerArm = {Part = nil, R15 = "LeftLowerArm", R6 = "Left Arm"},
RightLowerArm = {Part = nil, R15 = "RightLowerArm", R6 = "Right Arm"},
-- Верхние части ног (Бёдра)
LeftLeg = {Part = nil, R15 = "LeftUpperLeg", R6 = "Left Leg"},
RightLeg = {Part = nil, R15 = "RightUpperLeg", R6 = "Right Leg"},
-- Нижние части ног (Голени / Колени)
LeftLowerLeg = {Part = nil, R15 = "LeftLowerLeg", R6 = "Left Leg"},
RightLowerLeg = {Part = nil, R15 = "RightLowerLeg", R6 = "Right Leg"}
}
-- Ссылка на GUI для обновления текста статуса
local StatusLabels = {}
-- Функция поиска правильной кости персонажа в зависимости от R15 / R6
local function GetCharacterLimb(limbData)
if Character:FindFirstChild("Humanoid") and Character.Humanoid.RigType == Enum.HumanoidRigType.R6 then
return Character:FindFirstChild(limbData.R6)
else
return Character:FindFirstChild(limbData.R15)
end
end
--- ========================================== ---
--- ФУНКЦИЯ СОЗДАНИЯ ИНСТРУМЕНТОВ ---
--- ========================================== ---
local function CreateLimbTool(toolName, keyName, color)
local Tool = Instance.new("Tool")
Tool.Name = toolName
Tool.RequiresHandle = false
Tool.Equipped:Connect(function()
local conn
conn = Mouse.Button1Down:Connect(function()
local target = Mouse.Target
-- Проверяем, что это незафиксированный блок и не часть нашего персонажа
if target and target:IsA("BasePart") and not target.Anchored and not target:IsDescendantOf(Character) then
-- Если этот блок уже привязан к другой части тела, освобождаем его там
for k, data in pairs(AttachedObjects) do
if data.Part == target then
AttachedObjects[k].Part = nil
if StatusLabels[k] then
StatusLabels[k].Text = k .. ": пусто"
StatusLabels[k].TextColor3 = Color3.fromRGB(150, 150, 150)
end
end
end
-- Привязываем блок
AttachedObjects[keyName].Part = target
target.AssemblyLinearVelocity = Vector3.new(0, 0, 0)
-- Эффект вспышки при выборе
local origTrans = target.Transparency
target.Transparency = 0.5
task.delay(0.2, function() target.Transparency = origTrans end)
-- Обновляем текст в GUI
if StatusLabels[keyName] then
StatusLabels[keyName].Text = toolName .. " -> " .. target.Name
StatusLabels[keyName].TextColor3 = color
end
print(toolName .. " успешно подключен к: " .. target.Name)
end
end)
Tool.Unequipped:Connect(function()
if conn then conn:Disconnect() end
end)
end)
Tool.Parent = LocalPlayer:WaitForChild("Backpack")
end
-- Создаем 9 инструментов для полной детализации робота
CreateLimbTool("Робот: Тело", "Torso", Color3.fromRGB(255, 255, 255))
CreateLimbTool("Робот: Л. Плечо", "LeftArm", Color3.fromRGB(0, 150, 255))
CreateLimbTool("Робот: Л. Локоть", "LeftLowerArm", Color3.fromRGB(0, 100, 200))
CreateLimbTool("Робот: П. Плечо", "RightArm", Color3.fromRGB(0, 255, 150))
CreateLimbTool("Робот: П. Локоть", "RightLowerArm", Color3.fromRGB(0, 200, 100))
CreateLimbTool("Робот: Л. Бедро", "LeftLeg", Color3.fromRGB(255, 150, 0))
CreateLimbTool("Робот: Л. Колено", "LeftLowerLeg", Color3.fromRGB(200, 100, 0))
CreateLimbTool("Робот: П. Бедро", "RightLeg", Color3.fromRGB(255, 50, 250))
CreateLimbTool("Робот: П. Колено", "RightLowerLeg", Color3.fromRGB(200, 30, 200))
--- ========================================== ---
--- ОСНОВНОЙ ЦИКЛ СИНХРОНИЗАЦИИ ---
--- ========================================== ---
RunService.Heartbeat:Connect(function()
for keyName, data in pairs(AttachedObjects) do
local obj = data.Part
if obj and obj.Parent then
local limb = GetCharacterLimb(data)
if limb then
-- Берём текущую позицию блока на земле, чтобы избежать левитации
local _, _, _, r00, r01, r02, r10, r11, r12, r20, r21, r22 = limb.CFrame:components()
local limbRotation = CFrame.new(0, 0, 0, r00, r01, r02, r10, r11, r12, r20, r21, r22)
-- Применяем только вращение, позиция регулируется физикой Roblox
obj.CFrame = CFrame.new(obj.Position) * limbRotation
obj.AssemblyAngularVelocity = Vector3.new(0, 0, 0)
else
-- Автосброс при потере конечности
AttachedObjects[keyName].Part = nil
if StatusLabels[keyName] then
StatusLabels[keyName].Text = keyName .. ": пусто"
StatusLabels[keyName].TextColor3 = Color3.fromRGB(150, 150, 150)
end
end
end
end
end)
--- ========================================== ---
--- СОЗДАНИЕ ИНТЕРФЕЙСА ---
--- ========================================== ---
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "RobotAnatomyMirror_GUI"
ScreenGui.ResetOnSpawn = false
if gethui then ScreenGui.Parent = gethui() else ScreenGui.Parent = CoreGui end
local MainPanel = Instance.new("Frame")
MainPanel.Size = UDim2.new(0, 320, 0, 185) -- Увеличено под 9 строк мониторинга
MainPanel.Position = UDim2.new(0.5, 0, 1, -240)
MainPanel.AnchorPoint = Vector2.new(0.5, 0)
MainPanel.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
MainPanel.BorderSizePixel = 2
MainPanel.Parent = ScreenGui
local Corner = Instance.new("UICorner")
Corner.CornerRadius = UDim.new(0, 8)
Corner.Parent = MainPanel
local function CreateStatusLabel(text, posY)
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, -20, 0, 15)
lbl.Position = UDim2.new(0, 10, 0, posY)
lbl.Text = text
lbl.TextColor3 = Color3.fromRGB(150, 150, 150)
lbl.BackgroundTransparency = 1
lbl.Font = Enum.Font.SourceSansBold
lbl.TextSize = 12
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Parent = MainPanel
return lbl
end
StatusLabels["Torso"] = CreateStatusLabel("Корпус: пусто", 10)
StatusLabels["LeftArm"] = CreateStatusLabel("Л. Плечо: пусто", 27)
StatusLabels["LeftLowerArm"] = CreateStatusLabel("Л. Локоть: пусто", 44)
StatusLabels["RightArm"] = CreateStatusLabel("П. Плечо: пусто", 61)
StatusLabels["RightLowerArm"] = CreateStatusLabel("П. Локоть: пусто", 78)
StatusLabels["LeftLeg"] = CreateStatusLabel("Л. Бедро: пусто", 95)
StatusLabels["LeftLowerLeg"] = CreateStatusLabel("Л. Колено: пусто", 112)
StatusLabels["RightLeg"] = CreateStatusLabel("П. Бедро: пусто", 129)
StatusLabels["RightLowerLeg"] = CreateStatusLabel("П. Колено: пусто", 146)
print("9-ти суставный физический аниматор запущен! Полная поддержка коленей и локтей.")


W script
is this visual or its ss cuz too good