Quick actions

cmd+k|ctrl+k

Navigation

Languages

Ragdoll penis

Snippet info

Language

Lua

Visibility

public

Author

shashlik

Created

2025-06-14T15:02:21.685865Z

Updated

2025-06-14T23:49:20.908226Z

--// Ragdoll Penis FE V2.0
local model = Instance.new("Model", workspace)
local m = game.Players.LocalPlayer:GetMouse()
local togglerot = false
local down = false
local up = false
m.KeyDown:Connect(
    function(key)
        if key == "z" then
            up = true
        end
        if key == "x" then
            down = true
        end
    end
)
m.KeyUp:Connect(
    function(key)
        if key == "z" then
            up = false
        end
        if key == "x" then
            down = false
        end
    end
)
local a = Instance.new("Part", model)
a.Size = Vector3.new(1.1, 2.1, 1.1)
local a2 = Instance.new("Part", model)
a2.Size = Vector3.new(1.1, 2.1, 1.1)
local a3 = Instance.new("Part", model)
a3.Size = Vector3.new(1.1, 2.1, 1.1)
local a4 = Instance.new("Part", model)
a4.Size = Vector3.new(1.1, 2.1, 1.1)
a4.Position = Vector3.new(0, 5, 0)
a.Anchored = true
a.Rotation = Vector3.new(90, 0, 0)
a.Position = Vector3.new(-0.5, 0.5, 0)
a3.Position = Vector3.new(0, 3.15, 0)
a2.Position = Vector3.new(0, 1.3, 0)
a.CanQuery = false
a2.CanQuery = false
a3.CanQuery = false
a4.CanQuery = false
a.Transparency = 0.6
a2.Transparency = 0.6
a3.Transparency = 0.6
a4.Transparency = 0.6
a.Anchored = true
a.CanCollide = false
a2.CanCollide = false
a3.CanCollide = false
a4.CanCollide = false

local function recreateModel()
    model:Destroy()
    model = Instance.new("Model", workspace)
    
    a = Instance.new("Part", model)
    a.Size = Vector3.new(1.1, 2.1, 1.1)
    a2 = Instance.new("Part", model)
    a2.Size = Vector3.new(1.1, 2.1, 1.1)
    a3 = Instance.new("Part", model)
    a3.Size = Vector3.new(1.1, 2.1, 1.1)
    a4 = Instance.new("Part", model)
    a4.Size = Vector3.new(1.1, 2.1, 1.1)
    a4.Position = Vector3.new(0, 5, 0)
    a.Anchored = true
    a.Rotation = Vector3.new(90, 0, 0)
    a.Position = Vector3.new(-0.5, 0.5, 0)
    a3.Position = Vector3.new(0, 3.15, 0)
    a2.Position = Vector3.new(0, 1.3, 0)
    a.CanQuery = false
    a2.CanQuery = false
    a3.CanQuery = false
    a4.CanQuery = false
    a.Transparency = 0.6
    a2.Transparency = 0.6
    a3.Transparency = 0.6
    a4.Transparency = 0.6
    a.Anchored = true
    a.CanCollide = false
    a2.CanCollide = false
    a3.CanCollide = false
    a4.CanCollide = false
    
    spawn(
        function()
            local last = nil
            for i, v in pairs(model:GetChildren()) do
                if last == nil then
                    last = v
                else
                    local a = Instance.new("WeldConstraint", model)
                    a.Part0 = last
                    a.Part1 = v
                    last = v
                end
            end
        end
    )
    
    model:MoveTo(game.Players.LocalPlayer.Character.HumanoidRootPart.Position)
end

game.Players.LocalPlayer.CharacterAdded:Connect(function(character)
    character:WaitForChild("Humanoid").Died:Connect(function()
        task.wait()
        recreateModel()
    end)
end)

spawn(
    function()
        local last = nil
        for i, v in pairs(model:GetChildren()) do
            if last == nil then
                last = v
            else
                local a = Instance.new("WeldConstraint", model)
                a.Part0 = last
                a.Part1 = v
                last = v
            end
        end
    end
)

local cameraLoop
spawn(
    function()
        cameraLoop = true
        while cameraLoop do
            task.wait()
            workspace.CurrentCamera.CameraSubject = model
        end
    end
)

model:MoveTo(game.Players.LocalPlayer.Character.HumanoidRootPart.Position)

local movementLoop
spawn(
    function()
        movementLoop = true
        while movementLoop do
            task.wait()
            if not togglerot then
                model:PivotTo(model.WorldPivot + game.Players.LocalPlayer.Character.Humanoid.MoveDirection / 3)
                a.CFrame =
                    CFrame.new(
                    a.Position,
                    a.Position +
                        Vector3.new(
                            workspace.CurrentCamera.CFrame.LookVector.X,
                            a.Position,
                            workspace.CurrentCamera.CFrame.LookVector.Z
                        )
                ) * CFrame.Angles(0, 0, math.rad(90))
            end
            if up then
                model:PivotTo(model.WorldPivot + Vector3.new(0, 0.2, 0))
            end
            if down then
                model:PivotTo(model.WorldPivot + Vector3.new(0, -0.2, 0))
            end
        end
    end
)

local screenGui = Instance.new("ScreenGui")
screenGui.Name = "ControlGUI"
screenGui.Parent = game:GetService("CoreGui")

local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 150, 0, 50)
frame.Position = UDim2.new(0.8, -75, 0.1, 0)
frame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
frame.BackgroundTransparency = 0.3
frame.Parent = screenGui

local UICorner = Instance.new("UICorner")
UICorner.CornerRadius = UDim.new(0, 8)
UICorner.Parent = frame

local toggleBtn = Instance.new("TextButton")
toggleBtn.Size = UDim2.new(0.9, 0, 0.8, 0)
toggleBtn.Position = UDim2.new(0.05, 0, 0.1, 0)
toggleBtn.BackgroundColor3 = Color3.fromRGB(20, 80, 20)
toggleBtn.Text = "ON"
toggleBtn.TextColor3 = Color3.new(1, 1, 1)
toggleBtn.Parent = frame

local btnCorner = Instance.new("UICorner")
btnCorner.CornerRadius = UDim.new(0, 6)
btnCorner.Parent = toggleBtn

local originalPositions = {}
local character = game.Players.LocalPlayer.Character

local function saveOriginalPositions()
    for _, part in pairs(character:GetDescendants()) do
        if part:IsA("BasePart") then
            originalPositions[part] = {
                CFrame = part.CFrame,
                Velocity = part.Velocity,
                AssemblyLinearVelocity = part.AssemblyLinearVelocity,
                AssemblyAngularVelocity = part.AssemblyAngularVelocity
            }
        end
    end
end

saveOriginalPositions()

local function restoreOriginalPositions()
    for part, data in pairs(originalPositions) do
        if part and part.Parent then
            part.CFrame = data.CFrame
            part.Velocity = data.Velocity
            part.AssemblyLinearVelocity = data.AssemblyLinearVelocity
            part.AssemblyAngularVelocity = data.AssemblyAngularVelocity
        end
    end
end

local function toggleScript()
    if toggleBtn.Text == "ON" then
        toggleBtn.Text = "OFF"
        toggleBtn.BackgroundColor3 = Color3.fromRGB(80, 20, 20)
        
        cameraLoop = false
        movementLoop = false
        
        restoreOriginalPositions()
        
        local speaker = game.Players.LocalPlayer
        workspace.CurrentCamera:remove()
        task.wait(.1)
        repeat task.wait() until speaker.Character ~= nil
        workspace.CurrentCamera.CameraSubject = speaker.Character:FindFirstChildWhichIsA('Humanoid')
        workspace.CurrentCamera.CameraType = "Custom"
        speaker.CameraMinZoomDistance = 0.5
        speaker.CameraMaxZoomDistance = 400
        speaker.CameraMode = "Classic"
        speaker.Character.Head.Anchored = false
    else
        toggleBtn.Text = "ON"
        toggleBtn.BackgroundColor3 = Color3.fromRGB(20, 80, 20)
        
        saveOriginalPositions()
        
        spawn(function()
            cameraLoop = true
            while cameraLoop do
                task.wait()
                workspace.CurrentCamera.CameraSubject = model
            end
        end)
        
        spawn(function()
            movementLoop = true
            while movementLoop do
                task.wait()
                if not togglerot then
                    model:PivotTo(model.WorldPivot + game.Players.LocalPlayer.Character.Humanoid.MoveDirection / 3)
                    a.CFrame =
                        CFrame.new(
                        a.Position,
                        a.Position +
                            Vector3.new(
                                workspace.CurrentCamera.CFrame.LookVector.X,
                                a.Position,
                                workspace.CurrentCamera.CFrame.LookVector.Z
                            )
                    ) * CFrame.Angles(0, 0, math.rad(90))
                end
                if up then
                    model:PivotTo(model.WorldPivot + Vector3.new(0, 0.2, 0))
                end
                if down then
                    model:PivotTo(model.WorldPivot + Vector3.new(0, -0.2, 0))
                end
            end
        end)
    end
end

toggleBtn.MouseButton1Click:Connect(toggleScript)

local function connectBodyParts()
    for i, v in pairs(game.Players.LocalPlayer.Character:GetDescendants()) do
        if v.Name == "Left Leg" then
            game:GetService("RunService").PostSimulation:Connect(
                function()
                    if toggleBtn.Text == "OFF" then return end
                    v.CFrame = a.CFrame  -- Чётко к позиции части "a"
                    v.Velocity = Vector3.new(0, 4, 0)
                    v.AssemblyLinearVelocity = Vector3.new(0, 4, 0)
                    v.AssemblyAngularVelocity = Vector3.new(5, 0, 0)
                end
            )
        elseif v.Name == "Right Leg" then
            game:GetService("RunService").PostSimulation:Connect(
                function()
                    if toggleBtn.Text == "OFF" then return end
                    v.CFrame = a2.CFrame * CFrame.Angles(math.rad(180), 0, 0)  -- Чётко к "a2" + поворот
                    v.Velocity = Vector3.new(0, 4, 0)
                    v.AssemblyLinearVelocity = Vector3.new(0, 4, 0)
                    v.AssemblyAngularVelocity = Vector3.new(5, 0, 0)
                end
            )
        elseif v.Name == "Right Arm" then
            game:GetService("RunService").PostSimulation:Connect(
                function()
                    if toggleBtn.Text == "OFF" then return end
                    v.CFrame = a4.CFrame * CFrame.Angles(math.rad(180), math.rad(-90), 0)  -- Чётко к "a4" + поворот
                    v.Velocity = Vector3.new(0, 4, 0)
                    v.AssemblyLinearVelocity = Vector3.new(0, 4, 0)
                    v.AssemblyAngularVelocity = Vector3.new(5, 0, 0)
                end
            )
        elseif v.Name == "Left Arm" then
            game:GetService("RunService").PostSimulation:Connect(
                function()
                    if toggleBtn.Text == "OFF" then return end
                    v.CFrame = a3.CFrame  -- Чётко к позиции части "a3"
                    v.Velocity = Vector3.new(0, 4, 0)
                    v.AssemblyLinearVelocity = Vector3.new(0, 4, 0)
                    v.AssemblyAngularVelocity = Vector3.new(5, 0, 0)
                end
            )
        elseif v:IsA("BasePart") and (v.Name ~= "Left Leg" or v.Name ~= "Right Leg") then
            game:GetService("RunService").PostSimulation:Connect(
                function()
                    if toggleBtn.Text == "OFF" then 
                        return 
                    end
                    v.CFrame = CFrame.new(model.WorldPivot.Position + Vector3.new(0, 600, 0))
                    v.Velocity = Vector3.new(0, 0, 0)
                    v.AssemblyLinearVelocity = Vector3.new(0, 0, 0)
                    v.AssemblyAngularVelocity = Vector3.new(0, 0, 0)
                end
            )
        end
    end
end

connectBodyParts()

game.Players.LocalPlayer.CharacterAdded:Connect(function(character)
    connectBodyParts()
end)
INFO