Run it
Copy the script and paste it into your executor.
Players = :()
UserInputService = :()
RunService = :()
=
player = Players.LocalPlayer
character = player.Character player.CharacterAdded:()
humanoidRootPart = character:()
enabled =
holding =
holdStartTime =
currentHoldingPrompt =
currentHoldDuration =
currentAction =
screenGui = .()
screenGui.Name =
screenGui.ResetOnSpawn =
screenGui.Parent = player:()
frame = .()
frame.Size = .(, , , )
frame.Position = .(, , , )
frame.BackgroundColor3 = .(, , )
frame.BackgroundTransparency =
frame.BorderSizePixel =
frame.Parent = screenGui
corner = .()
corner.CornerRadius = .(, )
corner.Parent = frame
titleLabel = .()
titleLabel.Size = .(, -, , )
titleLabel.Position = .(, , , )
titleLabel.BackgroundTransparency =
titleLabel.Text =
titleLabel.TextColor3 = .(, , )
titleLabel.TextScaled =
titleLabel.Font = .Font.GothamBold
titleLabel.Parent = frame
toggleButton = .()
toggleButton.Size = .(, -, , )
toggleButton.Position = .(, , , )
toggleButton.BackgroundColor3 = .(, , )
toggleButton.Text =
toggleButton.TextColor3 = .(, , )
toggleButton.TextScaled =
toggleButton.Font = .Font.GothamBold
toggleButton.Parent = frame
buttonCorner = .()
buttonCorner.CornerRadius = .(, )
buttonCorner.Parent = toggleButton
statusLabel = .()
statusLabel.Size = .(, -, , -)
statusLabel.Position = .(, , , )
statusLabel.BackgroundTransparency =
statusLabel.TextColor3 = .(, , )
statusLabel.Text =
statusLabel.TextSize =
statusLabel.TextYAlignment = .TextYAlignment.Top
statusLabel.TextXAlignment = .TextXAlignment.Left
statusLabel.Font = .Font.Gotham
statusLabel.TextWrapped =
statusLabel.Parent = frame
progressBg = .()
progressBg.Size = .(, -, , )
progressBg.Position = .(, , , -)
progressBg.BackgroundColor3 = .(, , )
progressBg.BorderSizePixel =
progressBg.Parent = frame
progressCorner = .()
progressCorner.CornerRadius = .(, )
progressCorner.Parent = progressBg
progressFill = .()
progressFill.Size = .(, , , )
progressFill.BackgroundColor3 = .(, , )
progressFill.BorderSizePixel =
progressFill.Parent = progressBg
fillCorner = .()
fillCorner.CornerRadius = .(, )
fillCorner.Parent = progressFill
dragging =
dragStart =
startPos =
frame.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1
dragging =
dragStart = input.Position
startPos = frame.Position
)
frame.InputChanged:((input)
dragging input.UserInputType == .UserInputType.MouseMovement
delta = input.Position - dragStart
frame.Position = .(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
)
frame.InputEnded:((input)
input.UserInputType == .UserInputType.MouseButton1
dragging =
)
(prompt)
parent = prompt.Parent
parent:()
parent.Position
parent:()
parent.WorldPosition
humanoidRootPart.Position
(prompt)
text = prompt.ActionText
text == text = prompt.ObjectText
text == prompt.Parent text = prompt.Parent.Name
text ~= text
(progress)
lines = {, }
enabled
lines[#lines + ] =
lines[#lines + ] =
lines[#lines + ] =
enabled
progressFill.Visible =
holding currentHoldingPrompt
pos = (currentHoldingPrompt)
dist = (humanoidRootPart.Position - pos).Magnitude
lines[#lines + ] = .(, currentAction)
lines[#lines + ] = .(, dist)
lines[#lines + ] = .(, progress * )
progressFill.Visible =
progressFill.Size = .(progress, , , )
progressFill.Visible =
lines[#lines + ] =
statusLabel.Text = .(lines, )
toggleButton.Text = enabled
toggleButton.BackgroundColor3 = enabled .(, , ) .(, , )
()
enabled = enabled
()
enabled holding currentHoldingPrompt
currentHoldingPrompt:()
holding =
holdStartTime =
currentHoldingPrompt =
toggleButton.MouseButton1Click:(toggleAutoHold)
UserInputService.InputBegan:((input, gameProcessed)
gameProcessed
input.KeyCode == .KeyCode.F
()
)
RunService.Heartbeat:(()
character character:() enabled
()
humanoidRootPart = character.HumanoidRootPart
rootPos = humanoidRootPart.Position
holding currentHoldingPrompt
valid = currentHoldingPrompt.Parent currentHoldingPrompt.Enabled
valid
pos = (currentHoldingPrompt)
dist = (rootPos - pos).Magnitude
dist > currentHoldingPrompt.MaxActivationDistance valid =
valid
currentHoldingPrompt:()
holding =
holdStartTime =
currentHoldingPrompt =
progress =
holding holdStartTime
progress = .((() - holdStartTime) / currentHoldDuration, , )
closestPrompt =
closestDist = .huge
closestAction =
otherRoots = {}
_, p Players:()
p ~= player p.Character p.Character:()
.(otherRoots, p.Character.HumanoidRootPart.Position)
_, obj :()
obj:() obj.Enabled obj.HoldDuration >
pos = (obj)
localDist = (rootPos - pos).Magnitude
localDist <= obj.MaxActivationDistance
exclusive =
_, otherPos otherRoots
(otherPos - pos).Magnitude <= obj.MaxActivationDistance
exclusive =
exclusive localDist < closestDist
closestDist = localDist
closestPrompt = obj
closestAction = (obj)
holding closestPrompt
targetPrompt = closestPrompt
holdDur = targetPrompt.HoldDuration
holding =
currentHoldingPrompt = targetPrompt
currentHoldDuration = holdDur
currentAction = closestAction
holdStartTime = ()
targetPrompt:()
.(()
.(holdDur + )
holding currentHoldingPrompt == targetPrompt
currentHoldingPrompt:()
holding =
holdStartTime =
currentHoldingPrompt =
)
(progress)
)
player.CharacterAdded:((newChar)
character = newChar
humanoidRootPart = newChar:()
holding =
holdStartTime =
currentHoldingPrompt =
()
)
() holds proximity prompt note: you have to go straight to the proximity prompt without jumping to it to work!

Universal