Ragdoll на клавишу R

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) -- Подключаем обработчик нажатия клавиш 

Report Page