Run it
Copy the script and paste it into your executor.
Players = :()
RunService = :()
Debris = :()
player = Players.LocalPlayer
mouse = player:()
camera = .CurrentCamera
BASE_OFFSET = .(, , )
SIZE_MULTIPLIER =
THROW_FORCE =
NETWORK_RADIUS =
SCAN_INTERVAL =
grabbedPart =
alignPos, alignOri
currentOffset = .zero
scanTimer =
(part)
part part:() part.Anchored
(()
(part, , .NetworkOwnershipRule.Manual)
part:(player)
)
RunService.Heartbeat:((dt)
scanTimer += dt
scanTimer < SCAN_INTERVAL
scanTimer =
player.Character
hrp = player.Character:()
hrp
_, part (:())
part:()
part.Anchored
part ~= grabbedPart
(part.Position - hrp.Position).Magnitude <= NETWORK_RADIUS
(part)
grabbedPart
(grabbedPart)
)
()
grabbedPart
alignPos alignPos:()
alignOri alignOri:()
alignPos, alignOri = ,
grabbedPart =
mouse.Button1Down:(()
target = mouse.Target
target target:() target.Anchored
grabbedPart == target
()
()
grabbedPart = target
(target)
size = target.Size
largestAxis = .(size.X, size.Y, size.Z)
currentOffset = .(
BASE_OFFSET.X + largestAxis * SIZE_MULTIPLIER,
BASE_OFFSET.Y + largestAxis * SIZE_MULTIPLIER,
)
alignPos = .()
alignPos.MaxForce =
alignPos.Responsiveness =
alignPos.Mode = .PositionAlignmentMode.OneAttachment
alignPos.Parent = target
att0 = .()
att0.Parent = target
alignPos.Attachment0 = att0
alignOri = .()
alignOri.MaxTorque =
alignOri.Responsiveness =
alignOri.Mode = .OrientationAlignmentMode.OneAttachment
alignOri.Parent = target
att1 = .()
att1.Parent = target
alignOri.Attachment0 = att1
)
RunService.RenderStepped:(()
grabbedPart alignPos player.Character
hrp = player.Character:()
hrp
alignPos.Position =
hrp.Position
+ hrp.CFrame.RightVector * currentOffset.X
+ .(, currentOffset.Y, )
)
gui = .()
gui.Name =
gui.ResetOnSpawn =
gui.Parent = player:()
throwButton = .()
throwButton.Size = .(, )
throwButton.Position = .(, )
throwButton.Text =
throwButton.TextScaled =
throwButton.BackgroundColor3 = .(, , )
throwButton.TextColor3 = .(,,)
throwButton.Parent = gui
corner = .()
corner.CornerRadius = .(, )
corner.Parent = throwButton
()
origin = camera.CFrame.Position
direction = camera.CFrame.LookVector *
params = RaycastParams.()
params.FilterDescendantsInstances = {player.Character}
params.FilterType = .RaycastFilterType.Blacklist
result = :(origin, direction, params)
result
model = result.Instance:()
model model:()
model.HumanoidRootPart.Position
origin + direction
throwButton.MouseButton1Click:(()
grabbedPart
targetPos = ()
partCenter = grabbedPart.Position
direction = (targetPos - partCenter)
direction.Magnitude ==
direction = direction.Unit
alignPos alignPos:()
alignOri alignOri:()
alignPos, alignOri = ,
grabbedPart.AssemblyLinearVelocity = .zero
grabbedPart.AssemblyAngularVelocity = .zero
bv = .()
bv.MaxForce = .(, , )
bv.P =
bv.Velocity = direction * THROW_FORCE
bv.Parent = grabbedPart
Debris:(bv, )
grabbedPart =
)This script is simple and universal, it works for any game with “actual” unanchored parts just click on the part and click throw while looking at a player

Universal