Ragdoll на клавишу R
👋 Привет, Друг!
💞 Спасибо что зашел на данную страницу.
Локальный Скрипт (LocalScript):
---
local player = game.Players.LocalPlayer -- Получаем локального игрока
local character = player.Character or player.CharacterAdded:Wait() -- Получаем персонажа игрока или ждем его появления
local humanoid = character:WaitForChild("Humanoid") -- Ждем, пока у персонажа появится объект Humanoid
local camera = game.Workspace.CurrentCamera -- Получаем текущую камеру в рабочем пространстве
local originalCameraSubject = camera.CameraSubject -- Сохраняем оригинальный объект камеры (CameraSubject)
local ragdolling = false -- Переменная для отслеживания состояния ragdoll (включен/выключен)
local motors = {} -- Таблица для хранения оригинальных Motor6D
local UserInputService = game:GetService("UserInputService") -- Получаем сервис ввода пользователя
-- Сохранить оригинальные Motor6D
local function storeMotors()
for _, joint in pairs(character:GetDescendants()) do -- Проходим по всем потомкам персонажа
if joint:IsA("Motor6D") then -- Проверяем, является ли объект Motor6D
motors[joint] = { -- Сохраняем данные о Motor6D в таблице motors
Part0 = joint.Part0, -- Сохраняем первую часть соединения
Part1 = joint.Part1, -- Сохраняем вторую часть соединения
C0 = joint.C0, -- Сохраняем C0
C1 = joint.C1, -- Сохраняем C1
}
end
end
end
-- Активировать ragdoll
local function enableRagdoll()
if humanoid.Health > 0 and not ragdolling then -- Проверяем, жив ли персонаж и не активирован ли ragdoll
ragdolling = true -- Устанавливаем состояние ragdoll в true
humanoid:ChangeState(Enum.HumanoidStateType.Physics) -- Меняем состояние Humanoid на Physics
camera.CameraSubject = character:WaitForChild("HumanoidRootPart") -- Устанавливаем объект камеры на HumanoidRootPart персонажа
for _, joint in pairs(character:GetDescendants()) do -- Проходим по всем потомкам персонажа
if joint:IsA("Motor6D") then -- Проверяем, является ли объект Motor6D
local socket = Instance.new("BallSocketConstraint") -- Создаем новый BallSocketConstraint
local a1 = Instance.new("Attachment") -- Создаем первую привязку
local a2 = Instance.new("Attachment") -- Создаем вторую привязку
a1.Parent = joint.Part0 -- Устанавливаем родителем первой привязки Part0 соединения
a2.Parent = joint.Part1 -- Устанавливаем родителем второй привязки Part1 соединения
socket.Parent = joint.Parent -- Устанавливаем родителем BallSocketConstraint родительское соединение
socket.Attachment0 = a1 -- Присоединяем первую привязку к сокету
socket.Attachment1 = a2 -- Присоединяем вторую привязку к сокету
a1.CFrame = joint.C0 -- Устанавливаем CFrame для первой привязки
a2.CFrame = joint.C1 -- Устанавливаем CFrame для второй привязки
socket.LimitsEnabled = true -- Включаем ограничения для сокета
socket.TwistLimitsEnabled = true -- Включаем ограничения на скручивание для сокета
joint:Destroy() -- Уничтожаем оригинальное соединение Motor6D
end
end
print("Ragdoll enabled") -- Выводим сообщение об активации ragdoll
end
end
-- Деактивировать ragdoll
local function disableRagdoll()
if ragdolling and humanoid.Health > 0 then -- Проверяем, активирован ли ragdoll и жив ли персонаж
ragdolling = false -- Устанавливаем состояние ragdoll в false
humanoid:ChangeState(Enum.HumanoidStateType.GettingUp) -- Меняем состояние Humanoid на GettingUp
camera.CameraSubject = originalCameraSubject -- Возвращаем оригинальный объект камеры
for joint, data in pairs(motors) do -- Проходим по всем сохраненным Motor6D
local newJoint = Instance.new("Motor6D") -- Создаем новое соединение Motor6D
newJoint.Part0 = data.Part0 -- Устанавливаем первую часть соединения
newJoint.Part1 = data.Part1 -- Устанавливаем вторую часть соединения
newJoint.C0 = data.C0 -- Устанавливаем C0 для нового соединения
newJoint.C1 = data.C1 -- Устанавливаем C1 для нового соединения
newJoint.Parent = data.Part0 -- Устанавливаем родителем новое соединение Part0
end
for _, descendant in pairs(character:GetDescendants()) do -- Проходим по всем потомкам персонажа
if descendant:IsA("BallSocketConstraint") or descendant:IsA("Attachment") then -- Проверяем, является ли объект BallSocketConstraint или Attachment
descendant:Destroy() -- Уничтожаем объект, если он является BallSocketConstraint или Attachment
end
end
print("Ragdoll disabled") -- Выводим сообщение о деактивации ragdoll
end
end
-- Обработчик нажатия клавиш
local function onKeyPress(input, gameProcessedEvent)
if input.KeyCode == Enum.KeyCode.R and not gameProcessedEvent then -- Проверяем, нажата ли клавиша R и не обработано ли событие игрой
humanoid = character:WaitForChild("Humanoid") -- Обновляем ссылку на Humanoid
if humanoid.Health > 0 then -- Проверяем, жив ли персонаж
if ragdolling then -- Если ragdoll активирован
disableRagdoll() -- Деактивируем ragdoll
else
enableRagdoll() -- Иначе активируем ragdoll
end
end
end
end
-- Обработчик появления нового персонажа
local function onCharacterAdded(newCharacter)
character = newCharacter -- Обновляем ссылку на нового персонажа
humanoid = character:WaitForChild("Humanoid") -- Ждем, пока у нового персонажа появится объект Humanoid
originalCameraSubject = camera.CameraSubject -- Обновляем оригинальный CameraSubject для нового персонажа
storeMotors() -- Сохраняем Motor6D для нового персонажа
humanoid.Died:Connect(function() -- Подписываемся на событие смерти Humanoid
ragdolling = false -- Сбрасываем состояние ragdoll при смерти персонажа
print("Character died") -- Выводим сообщение о смерти персонажа
end)
end
player.CharacterAdded:Connect(onCharacterAdded) -- Подписываемся на событие появления нового персонажа у игрока
humanoid.Died:Connect(function() -- Подписываемся на событие смерти Humanoid текущего персонажа
ragdolling = false -- Сбрасываем состояние ragdoll при смерти персонажа
print("Character died") -- Выводим сообщение о смерти персонажа
end)
if character then -- Проверяем, существует ли текущий персонаж
originalCameraSubject = camera.CameraSubject -- Обновляем оригинальный CameraSubject для текущего персонажа
storeMotors() -- Сохраняем Motor6D для текущего персонажа
humanoid.Died:Connect(function() -- Подписываемся на событие смерти Humanoid текущего персонажа
ragdolling = false -- Сбрасываем состояние ragdoll при смерти
end)
end
UserInputService.InputBegan:Connect(onKeyPress) -- Подключаем обработчик нажатия клавиш