Simple Control  (OpenSourse)
Key Required Patched

Simple Control (OpenSourse)

Piggy [SEASON 9 - FRIGHT NIGHT]Therealcrazy53Therealcrazy53 850 views 711 executesUpdated Oct 3, 2026
0.0/ 5(1 votes)
010% Positive
Lua Script•545 lines (14555 chars)
--Script. Made by OpenSourseComunity 
local WindUI = loadstring(game:HttpGet("https://raw.githubusercontent.com/Footagesus/WindUI/main/dist/main.lua"))()

local Window = WindUI:CreateWindow({
    Title = "Piggy Bot Control",
    Icon = "lucide:bot",
    Author = "YourName",
    Folder = "PiggyBot",
    Size = UDim2.fromOffset(580, 460),
    Transparent = true,
    Theme = "Dark",
    Acrylic = true,
})

local Tab1 = Window:Tab({
    Title = "Control",
    Icon = "lucide:gamepad-2",
})

-- Variables base del script
local inf, pi = math.huge, math.pi

game.Players.LocalPlayer.PlayerGui:FindFirstChild("GameGUI").ResetOnSpawn = false

local Client = game:GetService("Players").LocalPlayer
local Character = Client.Character or Client.CharacterAdded:Wait()
local Humanoid = Character:WaitForChild("Humanoid")
local HumanoidRootPart = Humanoid.RootPart
local Mouse = Client:GetMouse()
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")

local Controlling = false
local CurrentlyControlledNPC = nil
local OriginalProperties = {}
local DisposableInstances = {}
local OriginalPosition
local CurrentMode = 1
local Connections = {}
local ToggleEnabled = true
local lastChar = Character

function CreateDisposableInstance(className, properties)
	properties = properties or {}
	local instance = Instance.new(className)
	table.insert(DisposableInstances, instance)
	for name, value in pairs(properties) do
		instance[name] = value
	end
	return instance
end

local ClientHighligher = CreateDisposableInstance("Highlight", {
	FillTransparency = 1,
	OutlineColor = Color3.fromRGB(75, 150, 255),
	Enabled = false,
	Parent = Character
})

local ClientAttachment = CreateDisposableInstance("Attachment", {Parent = HumanoidRootPart})
local DummyAttachment = CreateDisposableInstance("Attachment")
local NPCAttachment = CreateDisposableInstance("Attachment")

local ClientVelocity = CreateDisposableInstance("LinearVelocity", {
	Attachment0 = ClientAttachment,
	MaxForce = inf,
	Enabled = false,
	Parent = workspace
})

local ClientAlignOrientation = CreateDisposableInstance("AlignOrientation", {
	MaxTorque = inf,
	Responsiveness = inf,
	Attachment0 = ClientAttachment,
	Attachment1 = NPCAttachment,
	Enabled = false,
	Parent = workspace
})

local NPCAlignPosition = CreateDisposableInstance("AlignPosition", {
	ApplyAtCenterOfMass = false,
	Attachment0 = NPCAttachment,
	Attachment1 = DummyAttachment,
	MaxForce = inf,
	Responsiveness = inf,
	Enabled = false,
	Parent = workspace
})

local NPCAlignOrientation = CreateDisposableInstance("AlignOrientation", {
	MaxTorque = inf,
	Responsiveness = inf,
	Attachment0 = NPCAttachment,
	Attachment1 = DummyAttachment,
	Enabled = false,
	Parent = workspace
})

local DummyModel, DummyRootPart
local NPCModel, NPCRootPart, NPCName, NPCHighlighter
local DummyDiedConnection, ClientHealthChangedConnection

function SetOriginalProperty(instance, name, value)
	local instanceOriginalProperties = OriginalProperties[instance] or {}
	instanceOriginalProperties[name] = value
	OriginalProperties[instance] = instanceOriginalProperties
end

function SetCameraSubject(subject)
	while task.wait() do
		local camera = workspace.CurrentCamera
		if camera then
			camera.CameraSubject = subject
			return
		end
	end
end

Client.CharacterAdded:Connect(function(newCharacter)
	local wasDeath = false
	if lastChar then
		local oldHumanoid = lastChar:FindFirstChildOfClass("Humanoid")
		if oldHumanoid and oldHumanoid.Health <= 0 then
			wasDeath = true
		end
	end

	if wasDeath then
		Character = newCharacter
		Humanoid = newCharacter:WaitForChild("Humanoid")
		HumanoidRootPart = Humanoid.RootPart

		ClientHighligher.Parent = Character
		ClientAttachment.Parent = HumanoidRootPart

		Humanoid.Died:Once(function()
			StopControlling()
		end)
	end

	lastChar = newCharacter
end)

function StopControlling(restorePosition)
	Controlling = false
	CurrentlyControlledNPC = nil

	if ClientHealthChangedConnection then
		ClientHealthChangedConnection:Disconnect()
		ClientHealthChangedConnection = nil
	end

	if DummyDiedConnection then
		DummyDiedConnection:Disconnect()
		DummyDiedConnection = nil
	end

	NPCAlignPosition.Enabled = false
	NPCAlignOrientation.Enabled = false
	ClientVelocity.Enabled = false
	ClientAlignOrientation.Enabled = false

	if CurrentMode == 2 then
		if Character then
			SetCameraSubject(Humanoid)
			Client.Character = Character
		else
			for _, Newchar in pairs(workspace:GetDescendants()) do
				if Newchar.Name == Client.Name then
					Client.Character = Newchar
					SetCameraSubject(Newchar:FindFirstChildOfClass("Humanoid"))
					HumanoidRootPart = Newchar:FindFirstChild("HumanoidRootPart")
					Humanoid = Newchar:FindFirstChildOfClass("Humanoid")
				end
			end
		end
	else
		SetCameraSubject(Humanoid)
		Client.Character = Character
	end

	DummyAttachment.Parent = nil
	NPCAttachment.Parent = nil

	if DummyModel then
		DummyModel:Destroy()
		DummyModel = nil
	end
	DummyRootPart = nil

	if NPCHighlighter then
		NPCHighlighter:Destroy()
		NPCHighlighter = nil
	end

	NPCModel = nil
	NPCRootPart = nil
	NPCName = nil

	if Humanoid.Health > 0 then
		if restorePosition and OriginalPosition then
			HumanoidRootPart.CFrame = OriginalPosition
			OriginalPosition = nil
		end

		for instance, originalProperties in pairs(OriginalProperties) do
			for name, value in pairs(originalProperties) do
				instance[name] = value
			end
			OriginalProperties[instance] = nil
		end

		if game.Players.LocalPlayer.Character:FindFirstChild("Energy") and game.Players.LocalPlayer.Character:FindFirstChild("Energy").Value == 100 then
			game.Players.LocalPlayer.Character:FindFirstChild("Energy").Value = 99
			game.Players.LocalPlayer.Character:FindFirstChild("Energy").Value = 100
		end

		local player = game.Players.LocalPlayer
		local character = player.Character or player.CharacterAdded:Wait()

		for _, part in ipairs(character:GetChildren()) do
			if part:IsA("BasePart") then
				part.CanTouch = true
			end
		end

		ClientHighligher.Enabled = false
		Humanoid.PlatformStand = false
	end
end

function Control(npcModel)
	if Controlling then return end
	if CurrentlyControlledNPC == npcModel then return end

	local npcHumanoid = npcModel:FindFirstChildOfClass("Humanoid")
	local npcRootPart = npcHumanoid and npcHumanoid.RootPart

	if npcRootPart and npcHumanoid then
		local player = game.Players:GetPlayerFromCharacter(npcModel)
		if player then return end
		if npcModel == Character then return end

		CurrentlyControlledNPC = npcModel
		OriginalPosition = HumanoidRootPart.CFrame

		ClientHighligher.Enabled = true
		SetOriginalProperty(HumanoidRootPart, "CFrame", HumanoidRootPart.CFrame)

		Humanoid.PlatformStand = true

		local localPlayer = game.Players.LocalPlayer
		local localCharacter = localPlayer.Character or localPlayer.CharacterAdded:Wait()

		for _, part in ipairs(localCharacter:GetChildren()) do
			if part:IsA("BasePart") then
				part.CanTouch = false
			end
		end

		task.wait(0.5)

		if not Humanoid or Humanoid.Health <= 0
			or not HumanoidRootPart or not HumanoidRootPart.Parent
			or not npcRootPart or not npcRootPart.Parent then
			CurrentlyControlledNPC = nil
			pcall(function() Humanoid.PlatformStand = false end)
			ClientHighligher.Enabled = false
			for _, part in ipairs(Character:GetChildren()) do
				if part:IsA("BasePart") then
					part.CanTouch = true
				end
			end
			return
		end

		pcall(function() npcRootPart.BodyPosition:Destroy() end)
		pcall(function() npcRootPart.BodyGyro:Destroy() end)

		local dummyModel = npcModel:Clone()
		local dummyHumanoid = dummyModel:FindFirstChildOfClass("Humanoid")
		local dummyRootPart = dummyModel:FindFirstChild(npcRootPart.Name)

		if CurrentMode == 1 then
			DummyDiedConnection = dummyHumanoid.Died:Once(function()
				if Controlling then StopControlling(true) end
			end)
		else
			DummyDiedConnection = dummyHumanoid.Died:Once(function()
				if Controlling then Humanoid.Health = 0 end
			end)
		end

		local function updateHealth()
			if Controlling then
				dummyHumanoid.MaxHealth = inf
				dummyHumanoid.Health = inf
				Humanoid.Health = inf
			end
		end

		ClientHealthChangedConnection = Humanoid.Changed:Connect(updateHealth)
		updateHealth()

		for _, descendant in pairs(dummyModel:GetDescendants()) do
			if descendant:IsA("Light") or descendant:IsA("Sound") then
				descendant:Remove()
			else
				pcall(function() descendant.Transparency = 0.95 end)
			end
		end

		DummyModel = dummyModel
		DummyRootPart = dummyRootPart
		dummyModel.Parent = workspace

		DummyAttachment.Parent = dummyRootPart
		NPCAttachment.Parent = npcRootPart

		NPCModel = npcModel
		NPCRootPart = npcRootPart
		NPCName = npcModel.Name

		NPCHighlighter = Instance.new("Highlight")
		NPCHighlighter.FillTransparency = 1
		NPCHighlighter.OutlineColor = Color3.fromRGB(255, 0, 0)
		NPCHighlighter.Parent = npcModel

		local DummyHighlighter = Instance.new("Highlight")
		DummyHighlighter.FillTransparency = 1
		DummyHighlighter.OutlineColor = Color3.fromRGB(128, 0, 128)
		DummyHighlighter.Parent = dummyModel

		SetCameraSubject(dummyHumanoid)
		Client.Character = dummyModel

		NPCAlignPosition.Enabled = true
		NPCAlignOrientation.Enabled = true
		ClientAlignOrientation.Enabled = false
		ClientVelocity.Enabled = true
		Controlling = true
	end
end

task.spawn(function()
	while true do
		task.wait(0.5)
		if not Controlling or not ToggleEnabled or CurrentMode ~= 2 then continue end

		local npcModel = NPCModel
		local dummyRootPart = DummyRootPart
		if not npcModel or not dummyRootPart then continue end

		for _, objc in ipairs(npcModel:GetDescendants()) do
			if objc:IsA("TouchTransmitter") then
				objc:Remove()
			end
		end
		for _, objc in ipairs(npcModel:GetDescendants()) do
			if objc:IsA("Script") then
				objc:Remove()
			end
		end

		local closestRootPart = nil
		local closestDist = math.huge

		local mainSpawn = workspace:FindFirstChild("GameFolder")
			and workspace.GameFolder:FindFirstChild("MainSpawn")

		for _, player in ipairs(game.Players:GetPlayers()) do
			if player ~= Client
				and player.Character
				and not player.Character:FindFirstChild("Enemy")
				and not player.Character:FindFirstChild("Traitor") then

				local rootPart = player.Character:FindFirstChild("HumanoidRootPart")
				if rootPart then
					if mainSpawn then
						local dist = (rootPart.Position - mainSpawn.Position).Magnitude
						if dist >= 20 and dist < closestDist then
							closestDist = dist
							closestRootPart = rootPart
						end
					else
						closestRootPart = rootPart
						break
					end
				end
			end
		end

		if closestRootPart then
			dummyRootPart.CFrame = closestRootPart.CFrame * CFrame.new(0, 2, -9)
		end
	end
end)

function DestroyEverything()
	StopControlling(false)

	for _, connection in pairs(Connections) do
		pcall(function() connection:Disconnect() end)
	end
	Connections = {}

	for _, instance in pairs(DisposableInstances) do
		pcall(function() instance:Destroy() end)
	end
	DisposableInstances = {}
end

-- Componentes de WindUI
Tab1:Paragraph({
    Title = "Información",
    Desc = "Haz clic en cualquier NPC (Bot) de Piggy para controlarlo.",
})

local ToggleElement = Tab1:Toggle({
    Title = "Activar Bot Control",
    Desc = "Habilita o deshabilita el sistema de control al hacer clic.",
    Value = true,
    Callback = function(state)
		if not state and Controlling then
			StopControlling(true)
		end
		ToggleEnabled = state
    end
})

local ModeDropdown = Tab1:Dropdown({
    Title = "Modo de Control",
    Desc = "Selecciona el comportamiento del bot.",
    Values = {"Normal", "Killer"},
    Default = "Normal",
    Callback = function(selected)
        CurrentMode = (selected == "Normal") and 1 or 2
    end
})

Tab1:Button({
    Title = "Forzar Parar Control",
    Desc = "Devuelve el control a tu personaje original.",
    Callback = function()
        StopControlling(true)
    end
})

Tab1:Button({
    Title = "Destruir Interfaz / Script",
    Desc = "Limpia todas las conexiones y objetos creados.",
    Callback = function()
        DestroyEverything()
        Window:Destroy()
    end
})

local function OnMouseClick()
	if not ToggleEnabled then return end
	local target = Mouse.Target
	if not target then return end

	local model = target
	while model and model ~= workspace do
		local h = model:FindFirstChildOfClass("Humanoid")
		if h and h.RootPart then
			task.wait(0)
			Control(model)
			break
		end
		model = model.Parent
	end
end

Connections = {
	UserInputService.InputBegan:Connect(function(input, gameProcessedEvent)
		if not gameProcessedEvent
			and input.KeyCode == Enum.KeyCode.H
			and input.UserInputState == Enum.UserInputState.Begin then
			ToggleEnabled = not ToggleEnabled
			ToggleElement:Set(ToggleEnabled)
			if not ToggleEnabled and Controlling then
				StopControlling(true)
			end
		end
	end),

	Mouse.Button1Down:Connect(OnMouseClick),

	RunService.Heartbeat:Connect(function()
		if not (Controlling and ToggleEnabled) then return end

		if not NPCRootPart or not NPCRootPart.Parent
			or not HumanoidRootPart or not HumanoidRootPart.Parent
			or not Humanoid or Humanoid.Health <= 0 then
			return
		end

		if type(sethiddenproperty) == "function" then
			pcall(function() sethiddenproperty(Client, "SimulationRadius", inf) end)
		elseif type(setsimulationradius) == "function" then
			pcall(function() setsimulationradius(inf) end)
		end

		if NPCRootPart then
			local offset = CurrentMode == 1 and 7.2 or 8.4
			local npcPosition = NPCRootPart.Position
			HumanoidRootPart.CFrame = CFrame.new(
				npcPosition.X, npcPosition.Y - offset, npcPosition.Z
			) * NPCRootPart.CFrame.Rotation
		end

		for _, child in pairs(Character:GetChildren()) do
			if child:IsA("BasePart") and child.CanCollide then
				SetOriginalProperty(child, "CanCollide", true)
				child.CanCollide = false
				SetOriginalProperty(child, "CanTouch", true)
				child.CanTouch = false
			end
		end

		if DummyModel then
			for _, child in pairs(DummyModel:GetChildren()) do
				if child:IsA("BasePart") and child.CanCollide then
					child.CanCollide = false
					child.CanTouch = false
				end
			end
		end

		if NPCModel then
			for _, child in pairs(NPCModel:GetChildren()) do
				if child:IsA("BasePart") and child.CanCollide then
					SetOriginalProperty(child, "CanCollide", true)
					child.CanCollide = false
				end
			end
		end
	end),

	Humanoid.Died:Once(function() StopControlling(false) end),
	Character.Destroying:Once(function() StopControlling(false) end),
}

Window:SelectTab(1)

Features & Information

1. **Execute the Script:** Copy and paste the script into your trusted Roblox executor. 2. **Open the UI:** A modern interface titled **"Piggy Bot Control"** will appear on your screen. 3. **Control an NPC:** * Make sure the **"Activar Bot Control"** (Bot Control) toggle is enabled (ON). * Simply **click on any Piggy NPC or Bot** in the game to take control of it. 4. **Control Modes:** * **Normal Mode:** Standard control behavior allowing you to manage and move the bot normally. * **Killer Mode:** Specialized aggressive mode designed for hunting players. 5. **Shortcuts & Safety:** * Press the **`H` key** on your keyboard at any time to quickly toggle the control system on or off. * Click **"Forzar Parar Control"** (Force Stop Control) to instantly return to your original player character and restore your position. * Click **"Destruir Interfaz / Script"** (Destroy UI) to completely clean up all connections and close the interface.
#ControlPiggyBots#Piggy#Keyless#ControlBot#open sourse

Community Comments (3)

tickingclocktickingclockOct 8, 2026

ai

Replying to @tickingclock
forsakenUPLOADERforsakenUPLOADEROct 8, 2026

@tickingclock everything on here is ai at this point

Replying to @forsakenUPLOADER
tickingclocktickingclockOct 8, 2026

@forsakenUPLOADER fair

More Scripts for Piggy [SEASON 9 - FRIGHT NIGHT]