Run it
Copy the script and paste it into your executor.
UIS = :()
Players = :()
RunService = :()
Workspace = :()
player = Players.LocalPlayer
character = player.Character player.CharacterAdded:()
humanoidRootPart = character:()
camera = Workspace.CurrentCamera
maxDistance =
pullStrength =
boostForce =
idlePull =
maxSwingSpeed =
airDrag =
cableThickness =
aimRadius =
defaultFOV = camera camera.FieldOfView
fovMax =
fovSpeedStart =
fovSpeedMax =
fovLerpSpeed =
grappleDistanceStart =
grappleDistanceMax = maxDistance
grappleMaxMultiplier =
grappleMinMultiplier =
left = { active = }
right = { active = }
boosting =
(position, hitPart)
anchor = .()
anchor.Size = .(, , )
anchor.Anchored =
anchor.CanCollide =
anchor.Transparency =
anchor.Position = position
anchor.Parent = Workspace
hitPart
weld = .()
weld.Part0 = anchor
weld.Part1 = hitPart
weld.Parent = anchor
anchor
(color)
attach0 = .()
attach0.Position = .(, , )
attach0.Parent = humanoidRootPart
beam = .()
beam.Attachment0 = attach0
beam.Width0 = cableThickness
beam.Width1 = cableThickness
beam.FaceCamera =
beam.LightEmission =
beam.Color = ColorSequence.(color)
beam.Parent = humanoidRootPart
beam, attach0
()
mouse = player:()
ray = camera:(mouse.X, mouse.Y)
params = RaycastParams.()
params.FilterDescendantsInstances = { character }
params.FilterType = .RaycastFilterType.Blacklist
result = Workspace:(ray.Origin, ray.Direction * maxDistance, params)
result result.Instance result.Instance.CanCollide
result.Position, result.Instance
closestPart
closestPoint
closestDist = .huge
rayEnd = ray.Origin + ray.Direction * maxDistance
_, part (Workspace:())
part:() part.CanCollide
point = part.Position
dist = (point - rayEnd).Magnitude
dist < aimRadius dist < closestDist
closestDist = dist
closestPart = part
closestPoint = point
closestPart
closestPoint, closestPart
,
(side)
data = (side == ) left right
data.active
hitPos, hitPart = ()
hitPos hitPart
data.anchor = (hitPos, hitPart)
data.attach1 = .(, data.anchor)
data.beam, data.attach0 = (
side == .(, , )
.(, , )
)
data.beam.Attachment1 = data.attach1
data.length = (humanoidRootPart.Position - hitPos).Magnitude
dist = data.length
t =
dist > grappleDistanceStart
t = .((dist - grappleDistanceStart) / .(, (grappleDistanceMax - grappleDistanceStart)), , )
data.pullMultiplier = grappleMinMultiplier + (grappleMaxMultiplier - grappleMinMultiplier) * t
data.active =
(side)
data = (side == ) left right
data.active
data.beam:()
data.attach0:()
data.attach1:()
data.anchor:()
data.active =
RunService.Heartbeat:((dt)
_, data ({ left, right })
data.active
hrp = humanoidRootPart
toAnchor = data.anchor.Position - hrp.Position
distance = toAnchor.Magnitude
dir = toAnchor.Unit
distance > data.length
hrp:(dir * (distance - data.length) * pullStrength * (data.pullMultiplier ))
hrp:(dir * idlePull * (data.pullMultiplier ))
boosting
hrp:(dir * boostForce * (data.pullMultiplier ))
vel = hrp.AssemblyLinearVelocity
vel.Magnitude > maxSwingSpeed
hrp.AssemblyLinearVelocity = vel.Unit * maxSwingSpeed
hrp.AssemblyLinearVelocity *= airDrag
speed =
humanoidRootPart humanoidRootPart.AssemblyLinearVelocity
speed = humanoidRootPart.AssemblyLinearVelocity.Magnitude
t =
speed > fovSpeedStart
t = .((speed - fovSpeedStart) / .(, (fovSpeedMax - fovSpeedStart)), , )
targetFOV = defaultFOV + (fovMax - defaultFOV) * t
camera
camera.FieldOfView = camera.FieldOfView + (targetFOV - camera.FieldOfView) * .(fovLerpSpeed * dt, , )
)
UIS.InputBegan:((input, gp)
gp
input.KeyCode == .KeyCode.Q
()
input.KeyCode == .KeyCode.E
()
input.KeyCode == .KeyCode.LeftControl input.KeyCode == .KeyCode.RightControl
boosting =
)
UIS.InputEnded:((input)
input.KeyCode == .KeyCode.Q
()
input.KeyCode == .KeyCode.E
()
input.KeyCode == .KeyCode.LeftControl input.KeyCode == .KeyCode.RightControl
boosting =
)
player.CharacterAdded:((char)
character = char
humanoidRootPart = char:()
boosting =
()
()
)
()
()Never paste your .ROBLOSECURITY cookie anywhere, and use an alt account with scripts.

Universal