Bring specific named part DIY script (read description)
Key RequiredUniversal

Bring specific named part DIY script (read description)

Universal ScriptMeWhenICheatMeWhenICheat 2.4K views 824 executesUpdated Mar 19, 2026
Unrated
00
Lua Script•215 lines (5093 chars)
-- Services
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Workspace = game:GetService("Workspace")

-- White list part name
local WHITELIST = {
	part = true,
	part2 = true
}

-- GUI
local Gui = Instance.new("ScreenGui")
Gui.Name = "Gui"
Gui.Parent = gethui()

local Main = Instance.new("Frame")
Main.Size = UDim2.new(0, 320, 0, 230)
Main.Position = UDim2.new(0.5, -160, 0.5, -90)
Main.BackgroundColor3 = Color3.fromRGB(30,30,35)
Main.Active = true
Main.Draggable = true
Main.Parent = Gui
Instance.new("UICorner", Main).CornerRadius = UDim.new(0,8)

local Label = Instance.new("TextLabel")
Label.Size = UDim2.new(1,0,0,40)
Label.BackgroundColor3 = Color3.fromRGB(40,40,45)
Label.Text = "White list BP V3 by GPT"
Label.TextSize = 16
Label.TextColor3 = Color3.new(1,1,1)
Label.Font = Enum.Font.GothamBold
Label.Parent = Main
Instance.new("UICorner", Label)

local Box = Instance.new("TextBox")
Box.Size = UDim2.new(0.85,0,0,40)
Box.Position = UDim2.new(0.075,0,0.3,0)
Box.PlaceholderText = "Player here"
Box.BackgroundColor3 = Color3.fromRGB(45,45,50)
Box.TextColor3 = Color3.new(1,1,1)
Box.Parent = Main
Instance.new("UICorner", Box)

local Button = Instance.new("TextButton")
Button.Size = UDim2.new(0.85,0,0,45)
Button.Position = UDim2.new(0.075,0,0.5,0)
Button.Text = "Bring | Off"
Button.BackgroundColor3 = Color3.fromRGB(0,120,215)
Button.TextColor3 = Color3.new(1,1,1)
Button.Parent = Main
Instance.new("UICorner", Button)

-- Vars
local LocalPlayer = Players.LocalPlayer
local targetPart
local selectedPlayer

-- Network Table
getgenv().Network = {
	BaseParts = {},
	BasePartsMap = {},
	Velocity = Vector3.new(30,30,30)
}

-- Attachment Center
local Folder = Instance.new("Folder", Workspace)
local Part = Instance.new("Part", Folder)
Part.Anchored = true
Part.Transparency = 1
Part.CanCollide = false
local Attachment1 = Instance.new("Attachment", Part)

-- Cleanup
local function CleanupPart(v)
	if not v then return end

	if v:FindFirstChild("BH_Align") then v.BH_Align:Destroy() end
	if v:FindFirstChild("BH_Attachment") then v.BH_Attachment:Destroy() end
	if v:FindFirstChild("BH_Processed") then v.BH_Processed:Destroy() end

	pcall(function()
		v.AssemblyLinearVelocity = Vector3.zero
		v.AssemblyAngularVelocity = Vector3.zero
	end)
end

-- Retain
function Network.RetainPart(p)
	if not p or Network.BasePartsMap[p] then return end
	Network.BasePartsMap[p] = true
	table.insert(Network.BaseParts, p)
end

-- ForcePart
local function ForcePart(v)
	if not v:IsA("BasePart") or v.Anchored then return end
	if v:FindFirstChild("BH_Align") then return end

	local tag = Instance.new("BoolValue", v)
	tag.Name = "BH_Processed"

	local att = Instance.new("Attachment", v)
	att.Name = "BH_Attachment"

	local align = Instance.new("AlignPosition", v)
	align.Name = "BH_Align"
	align.Attachment0 = att
	align.Attachment1 = Attachment1
	align.MaxForce = 3000 -- force power
	align.Responsiveness = 20

	v.CanCollide = false
	Network.RetainPart(v)
end

-- Heartbeat cleaning every 10sec
task.spawn(function()
	while true do
		task.wait(10) -- seconds

		sethiddenproperty(LocalPlayer, "SimulationRadius", 30) -- range to bring parts

		for i = #Network.BaseParts, 1, -1 do
			local p = Network.BaseParts[i]

			-- clean off despawned parts
			if not p or p.Parent == nil then
				Network.BasePartsMap[p] = nil
				table.remove(Network.BaseParts, i)
			else
				p.Velocity = Network.Velocity
			end
		end
	end
end)

local function IsTarget(v)
	return v:IsA("BasePart") and WHITELIST[v.Name]
end

-- Enable / Disable
local active = false
local descConn
local renderConn

local function Enable()
	if active or not targetPart then return end
	active = true
	Button.Text = "Bring | On"

	for _, v in ipairs(Workspace:GetDescendants()) do
		if IsTarget(v) then
			ForcePart(v)
		end
	end

	descConn = Workspace.DescendantAdded:Connect(function(v)
		if IsTarget(v) then ForcePart(v) end
	end)

	renderConn = RunService.RenderStepped:Connect(function()
		if targetPart then
			Attachment1.WorldCFrame = targetPart.CFrame
		end
	end)
end

local function Disable()
	active = false
	Button.Text = "Bring | Off"

	if descConn then descConn:Disconnect() end
	if renderConn then renderConn:Disconnect() end

	for i = #Network.BaseParts, 1, -1 do
		local p = Network.BaseParts[i]
		CleanupPart(p)
		Network.BasePartsMap[p] = nil
		table.remove(Network.BaseParts, i)
	end
end

-- Player finder
local function getPlayer(name)
	name = name:lower()
	for _, p in ipairs(Players:GetPlayers()) do
		if p.Name:lower():find(name) then
			return p
		end
	end
end

Box.FocusLost:Connect(function(enter)
	if enter then
		selectedPlayer = getPlayer(Box.Text)
		if selectedPlayer then
			Box.Text = selectedPlayer.Name
		end
	end
end)

Button.MouseButton1Click:Connect(function()
	if not selectedPlayer then return end

	local char = selectedPlayer.Character or selectedPlayer.CharacterAdded:Wait()
	targetPart = char:FindFirstChild("HumanoidRootPart")

	if active then
		Disable()
	else
		Enable()
	end
end)

Features & Information

You HAVE to edit the script yourself in order to bring the part you want (default names are part & part2) it can bring parts within radius (default is 30) Original script by TengeMan https://scriptblox.com/script/Universal-Script-Bring-Parts-V2-28529 removed bring part to everyone tested with solara executor I used ChatGPT to edit some functions and used Dex Explorer to find parts to try fixing issue with respawn parts
#solara

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts