Run it
Copy the script and paste it into your executor.
Players = :()
RunService = :()
UIS = :()
Workspace = :()
Stats = :()
Camera = Workspace.CurrentCamera
LP = Players.LocalPlayer
playerGui = LP:()
Lighting = :()
blur = .()
blur.Size =
blur.Parent = Lighting
gui = .()
gui.Name =
gui.ResetOnSpawn =
gui.IgnoreGuiInset =
gui.DisplayOrder =
gui.Parent = playerGui
bg = .()
bg.Size = .(, , , )
bg.BackgroundColor3 = .(, , )
bg.BackgroundTransparency =
bg.BorderSizePixel =
bg.Parent = gui
scanlines = .()
scanlines.Size = .(, , , )
scanlines.BackgroundTransparency =
scanlines.BorderSizePixel =
scanlines.Parent = gui
i = ,
line = .()
line.Size = .(, , , )
line.Position = .(, , i / , )
line.BackgroundColor3 = .(, , )
line.BackgroundTransparency =
line.BorderSizePixel =
line.Parent = scanlines
reflection = .()
reflection.Size = .(, , , )
reflection.Position = .(, , , )
reflection.BackgroundTransparency =
reflection.BorderSizePixel =
reflection.Text =
reflection.TextScaled =
reflection.Font = .Font.GothamBlack
reflection.TextColor3 = .(, , )
reflection.TextTransparency =
reflection.TextStrokeTransparency =
reflection.Rotation =
reflection.Parent = gui
reflGradient = .()
reflGradient.Color = ColorSequence.({
ColorSequenceKeypoint.(, .(, , )),
ColorSequenceKeypoint.(, .(, , )),
ColorSequenceKeypoint.(, .(, , )),
ColorSequenceKeypoint.(, .(, , )),
})
reflGradient.Transparency = NumberSequence.({
NumberSequenceKeypoint.(, ),
NumberSequenceKeypoint.(, ),
})
reflGradient.Parent = reflection
label = .()
label.Size = .(, , , )
label.Position = .(, , , )
label.BackgroundTransparency =
label.BorderSizePixel =
label.Text =
label.TextScaled =
label.Font = .Font.GothamBlack
label.TextColor3 = .(, , )
label.TextStrokeTransparency =
label.Parent = gui
gradient = .()
gradient.Color = ColorSequence.({
ColorSequenceKeypoint.(, .(, , )),
ColorSequenceKeypoint.(, .(, , )),
ColorSequenceKeypoint.(, .(, , )),
ColorSequenceKeypoint.(, .(, , )),
ColorSequenceKeypoint.(, .(, , )),
ColorSequenceKeypoint.(, .(, , )),
ColorSequenceKeypoint.(, .(, , )),
})
gradient.Parent = label
stroke = .()
stroke.Thickness =
stroke.Transparency =
stroke.ApplyStrokeMode = .ApplyStrokeMode.Border
strokeGradient = .()
strokeGradient.Color = gradient.Color
strokeGradient.Parent = stroke
stroke.Parent = label
barBg = .()
barBg.Size = .(, , , )
barBg.Position = .(, , , )
barBg.BackgroundColor3 = .(, , )
barBg.BackgroundTransparency =
barBg.BorderSizePixel =
barBg.Parent = gui
barFill = .()
barFill.Size = .(, , , )
barFill.BackgroundColor3 = .(, , )
barFill.BorderSizePixel =
barFill.Parent = barBg
barGradient = .()
barGradient.Color = gradient.Color
barGradient.Parent = barFill
barCorner = .()
barCorner.CornerRadius = .(, )
barCorner.Parent = barBg
barCornerFill = .()
barCornerFill.CornerRadius = .(, )
barCornerFill.Parent = barFill
sub = .()
sub.Size = .(, , , )
sub.Position = .(, , , )
sub.BackgroundTransparency =
sub.Text =
sub.TextSize =
sub.Font = .Font.Gotham
sub.TextColor3 = .(, , )
sub.Parent = gui
.(()
full_text =
.(()
i = ,
blur.Size = i *
bg.BackgroundTransparency = - (i / ) *
.()
)
.(()
gui.Parent
gradient.Rotation = (() * ) %
strokeGradient.Rotation = (() * ) %
barGradient.Rotation = (() * ) %
reflGradient.Rotation = (() * ) %
.()
)
.(()
gui.Parent
s = + .(() * ) *
label.Size = .(s, , * s, )
.()
)
i = , #full_text
label.Text = full_text:(, i)
reflection.Text = full_text:(, i)
.()
.()
i = ,
barFill.Size = .(i / , , , )
sub.Text = .. .(, i % )
.()
.()
i = ,
a = i /
label.TextTransparency = a
stroke.Transparency = + a *
reflection.TextTransparency = + a *
barBg.BackgroundTransparency = + a *
barFill.BackgroundTransparency = a
sub.TextTransparency = a
bg.BackgroundTransparency = + a *
_, l (scanlines:())
l.BackgroundTransparency = + a *
blur.Size = - i
.()
(() gui:() )
(() blur:() )
)
T = {
conns = {},
grabbed_list = {},
last_thrown_list = {},
auto_return = ,
auto_return_delay = ,
return_in_progress = ,
hold_distance = ,
pull_speed = ,
throw_speed = ,
return_speed = ,
grab_deadzone = ,
hitbox_scale = ,
unloaded = ,
aim_on_item = ,
hitbox_wrappers = {},
show_hitboxes = ,
hitbox_visuals = {},
orbit_mode = ,
stick_mode = ,
multi_select = ,
orbit_radius = ,
orbit_speed = ,
orbit_angle = ,
original_massless = {},
original_density = {},
freeze_mode = ,
no_collide = ,
grabbed_noclip = ,
grabbed_assembly = {},
original_collide = {},
original_anchored = {},
original_velocity = {},
action_log = {},
fps = ,
frame_count = ,
fps_time = ,
formation = ,
formation_ring_radius = ,
formation_wall_w = ,
formation_wall_h = ,
target_lock = ,
target_player = ,
rocket_speed = ,
rocket_cooldown = ,
charge_start = ,
charge_active = ,
charge_max_time = ,
charge_min_mult = ,
charge_max_mult = ,
anchor_strikes = {},
anchor_strike_limit = ,
anchor_skip_list = {},
face_mode = ,
shield_mode = ,
shield_radius = ,
shield_speed = ,
}
(sig, fn)
c = sig:(fn)
.(T.conns, c)
c
()
LP.Character
release_all
get_target_head
update_trajectory
get_formation_offset
throw
MATRIX_GREEN = .(, , )
MATRIX_GREEN_DIM = .(, , )
MATRIX_BG = .(, , )
MATRIX_FONT = .Font.Code
(frame, opts)
opts = opts {}
pad = opts.padding
corner = opts.corner
frame.BackgroundColor3 = MATRIX_BG
frame.BackgroundTransparency =
frame.BorderSizePixel =
c = .()
c.CornerRadius = .(, corner)
c.Parent = frame
stroke = .()
stroke.Color = MATRIX_GREEN
stroke.Thickness =
stroke.Transparency =
stroke.Parent = frame
strokeGlow = .()
strokeGlow.Color = MATRIX_GREEN
strokeGlow.Thickness =
strokeGlow.Transparency =
strokeGlow.Parent = frame
padding = .()
padding.PaddingTop = .(, pad)
padding.PaddingBottom = .(, pad)
padding.PaddingLeft = .(, pad)
padding.PaddingRight = .(, pad)
padding.Parent = frame
scan = .()
scan.Name =
scan.Size = .(, , , )
scan.BackgroundColor3 = MATRIX_GREEN
scan.BackgroundTransparency =
scan.BorderSizePixel =
scan.ZIndex =
scan.Parent = frame
.(()
y =
scan.Parent T.unloaded
y = (y + ) %
scan.Position = .(, , y / , )
.()
)
_, c (frame:())
c:() c.Name ~=
c.ZIndex = .(c.ZIndex, )
{ stroke = stroke, glow = strokeGlow }
(lbl, color, bold)
lbl.Font = MATRIX_FONT
lbl.TextColor3 = color MATRIX_GREEN_DIM
bold
lbl.TextStrokeColor3 = MATRIX_GREEN
lbl.TextStrokeTransparency =
(text)
.(T.action_log, {
text = text,
time = (),
})
#T.action_log >
.(T.action_log, )
active_trails = {}
TRAIL_COLORS = {
rocket = { .(, , ), .(, , ) },
throw = { .(, , ), .(, , ) },
recall = { .(, , ), .(, , ) },
launch = { .(, , ), .(, , ) },
}
(part, mode, lifetime)
part part.Parent
active_trails[part]
cols = TRAIL_COLORS[mode] TRAIL_COLORS.throw
trail = .()
a0 = .()
a1 = .()
a0.Position = .(, part.Size.Y / , )
a1.Position = .(, -part.Size.Y / , )
a0.Parent = part
a1.Parent = part
trail.Attachment0 = a0
trail.Attachment1 = a1
trail.Lifetime = lifetime
trail.Color = ColorSequence.(cols[], cols[])
trail.Transparency = NumberSequence.({
NumberSequenceKeypoint.(, ),
NumberSequenceKeypoint.(, ),
})
trail.LightEmission =
trail.Parent = part
active_trails[part] = { trail = trail, a0 = a0, a1 = a1 }
(part, )
part
data = active_trails[part]
data
active_trails[part] =
()
(() data.trail:() )
(() data.a0:() )
(() data.a1:() )
>
.(, cleanup)
()
()
part, data (active_trails)
(() data.trail:() )
(() data.a0:() )
(() data.a1:() )
active_trails = {}
highlights = {}
(model)
n = model.Name:()
n:() n:() n:()
n:() n:() n:()
.(, , )
n:() n:() n:() n:()
.(, , )
n:() n:() n:() n:()
.(, , )
n:() n:() n:() n:()
.(, , )
n:() n:() n:() n:()
.(, , )
.(, , )
(model)
model
highlights[model]
col = (model)
h = .()
h.Name =
h.FillColor = col
h.FillTransparency =
h.OutlineColor = col
h.OutlineTransparency =
h.DepthMode = .HighlightDepthMode.AlwaysOnTop
h.Adornee = model
h.Parent = LP.PlayerGui
highlights[model] = h
(model)
highlights[model]
(() highlights[model]:() )
highlights[model] =
()
_, h (highlights)
(() h:() )
highlights = {}
(part)
part
T.original_massless[part] ~=
T.original_massless[part] = part.Massless
T.original_density[part] = part.CustomPhysicalProperties
bf = part:()
bf
bf = .()
bf.Name =
bf.Parent = part
orig = part.CustomPhysicalProperties
orig
(()
part.CustomPhysicalProperties = PhysicalProperties.(
orig.Density * ,
orig.Friction,
orig.Elasticity
)
)
(()
part.CustomPhysicalProperties = PhysicalProperties.(, , )
)
(part)
part
T.original_massless[part] ==
(()
part.Massless = T.original_massless[part]
)
(()
part.CustomPhysicalProperties = T.original_density[part]
)
bf = part:()
bf
(() bf:() )
T.original_massless[part] =
T.original_density[part] =
.(()
T.unloaded
_, item (T.grabbed_list)
part = item.part
part part.Parent
bf = part:()
bf
mass = part:()
gravity = Workspace.Gravity
(()
bf.Force = .(, mass * gravity, )
)
.()
)
(part)
part
root = T.grabbed_assembly T.grabbed_assembly[part]
root
parts = {}
(()
_, p (root:())
p:() parts[p] =
)
parts[root] =
parts[part] =
p (parts)
orig = T.original_collide[p]
orig ~= p.Parent
(() p.CanCollide = orig )
T.original_collide[p] =
T.grabbed_assembly[part] =
orig = T.original_collide[part]
orig ~= part.Parent
(() part.CanCollide = orig )
T.original_collide[part] =
()
_, item (T.grabbed_list)
part = item.part
part part.Parent
T.original_collide[part] ==
T.original_collide[part] = part.CanCollide
part.CanCollide =
()
part, orig (T.original_collide)
part part.Parent
(() part.CanCollide = orig )
T.original_collide = {}
T.grabbed_assembly = {}
.(()
T.unloaded
i = #T.grabbed_list, , -
item = T.grabbed_list[i]
part = item.part
part part.Parent
part.Anchored T.freeze_mode
T.anchor_strikes[part] = (T.anchor_strikes[part] ) +
T.anchor_strikes[part] >= T.anchor_strike_limit
T.anchor_skip_list[part] = ()
(part)
(item.model)
.(T.grabbed_list, i)
T.anchor_strikes[part] =
(() part.Anchored = )
T.anchor_strikes[part] =
T.anchor_strikes[part] =
.()
)
()
_, item (T.grabbed_list)
part = item.part
part part.Parent
T.original_anchored[part] ==
T.original_anchored[part] = part.Anchored
T.original_velocity[part] = {
linear = part.AssemblyLinearVelocity,
angular = part.AssemblyAngularVelocity,
}
part.Anchored =
()
part, orig (T.original_anchored)
part part.Parent
(() part.Anchored = orig )
T.original_anchored = {}
T.original_velocity = {}
playerGui = LP:()
crosshairGui = .()
crosshairGui.Name =
crosshairGui.ResetOnSpawn =
crosshairGui.IgnoreGuiInset =
crosshairGui.DisplayOrder =
crosshairGui.Parent = playerGui
CH_COLOR_HIT = .(, , )
CH_COLOR_STROKE = .(, , )
ch_dot = .()
ch_dot.Size = .(, , , )
ch_dot.BackgroundColor3 = CH_COLOR_HIT
ch_dot.BorderSizePixel =
ch_dot.AnchorPoint = .(, )
ch_dot.Visible =
ch_dot.ZIndex =
ch_dot.Parent = crosshairGui
ch_dot_corner = .()
ch_dot_corner.CornerRadius = .(, )
ch_dot_corner.Parent = ch_dot
ch_dot_stroke = .()
ch_dot_stroke.Color = CH_COLOR_STROKE
ch_dot_stroke.Thickness =
ch_dot_stroke.Transparency =
ch_dot_stroke.Parent = ch_dot
ch_ring_outer = .()
ch_ring_outer.Size = .(, , , )
ch_ring_outer.BackgroundTransparency =
ch_ring_outer.BorderSizePixel =
ch_ring_outer.AnchorPoint = .(, )
ch_ring_outer.Visible =
ch_ring_outer.ZIndex =
ch_ring_outer.Parent = crosshairGui
ch_ring_outer_corner = .()
ch_ring_outer_corner.CornerRadius = .(, )
ch_ring_outer_corner.Parent = ch_ring_outer
ch_ring_outer_stroke = .()
ch_ring_outer_stroke.Color = CH_COLOR_HIT
ch_ring_outer_stroke.Thickness =
ch_ring_outer_stroke.Transparency =
ch_ring_outer_stroke.Parent = ch_ring_outer
ch_ring_inner = .()
ch_ring_inner.Size = .(, , , )
ch_ring_inner.BackgroundTransparency =
ch_ring_inner.BorderSizePixel =
ch_ring_inner.AnchorPoint = .(, )
ch_ring_inner.Visible =
ch_ring_inner.ZIndex =
ch_ring_inner.Parent = crosshairGui
ch_ring_inner_corner = .()
ch_ring_inner_corner.CornerRadius = .(, )
ch_ring_inner_corner.Parent = ch_ring_inner
ch_ring_inner_stroke = .()
ch_ring_inner_stroke.Color = CH_COLOR_HIT
ch_ring_inner_stroke.Thickness =
ch_ring_inner_stroke.Transparency =
ch_ring_inner_stroke.Parent = ch_ring_inner
ch_lines = {}
_, name ({, , , })
line = .()
line.Name = name
line.BackgroundColor3 = CH_COLOR_HIT
line.BorderSizePixel =
line.AnchorPoint = .(, )
line.Visible =
line.ZIndex =
line.Parent = crosshairGui
l_stroke = .()
l_stroke.Color = CH_COLOR_STROKE
l_stroke.Thickness =
l_stroke.Transparency =
l_stroke.Parent = line
ch_lines[name] = line
ch_charge = .()
ch_charge.Size = .(, , , )
ch_charge.AnchorPoint = .(, )
ch_charge.Position = .(, , , -)
ch_charge.BackgroundColor3 = .(, , )
ch_charge.BorderSizePixel =
ch_charge.Visible =
ch_charge.ZIndex =
ch_charge.Parent = crosshairGui
ch_charge_max =
()
T.aim_on_item
ch_dot.Visible =
ch_ring_outer.Visible =
ch_ring_inner.Visible =
_, l (ch_lines) l.Visible =
mouse = UIS:()
vp = Camera.ViewportSize
relX = mouse.X / vp.X
relY = mouse.Y / vp.Y
col = CH_COLOR_HIT
pulse = + .(() * ) *
ch_ring_outer.Position = .(relX, , relY, )
ch_ring_outer.Size = .(, * pulse, , * pulse)
ch_ring_outer_stroke.Color = col
ch_ring_outer.Visible =
ch_ring_inner.Position = .(relX, , relY, )
ch_ring_inner.Size = .(, * pulse, , * pulse)
ch_ring_inner_stroke.Color = col
ch_ring_inner.Visible =
ch_dot.Position = .(relX, , relY, )
ch_dot.Size = .(, * pulse, , * pulse)
ch_dot.BackgroundColor3 = col
ch_dot.Visible =
gap =
len =
ch_lines.up.Size = .(, , , len)
ch_lines.up.Position = .(relX, , relY, -(gap + len/))
ch_lines.up.BackgroundColor3 = col
ch_lines.up.Visible =
ch_lines.down.Size = .(, , , len)
ch_lines.down.Position = .(relX, , relY, (gap + len/))
ch_lines.down.BackgroundColor3 = col
ch_lines.down.Visible =
ch_lines.left.Size = .(, len, , )
ch_lines.left.Position = .(relX, -(gap + len/), relY, )
ch_lines.left.BackgroundColor3 = col
ch_lines.left.Visible =
ch_lines.right.Size = .(, len, , )
ch_lines.right.Position = .(relX, (gap + len/), relY, )
ch_lines.right.BackgroundColor3 = col
ch_lines.right.Visible =
T.charge_active
mouse = UIS:()
vp = Camera.ViewportSize
relX = mouse.X / vp.X
relY = mouse.Y / vp.Y
ch_charge.Visible =
ch_charge.Position = .(relX, , relY, -)
t = .((() - T.charge_start) / T.charge_max_time, , )
ch_charge.Size = .(, ch_charge_max * t, , )
ch_charge.BackgroundColor3 = .(, + * t, - * t)
ch_charge.Visible =
()
ch_dot.Visible =
ch_ring_outer.Visible =
ch_ring_inner.Visible =
ch_charge.Visible =
_, l (ch_lines) l.Visible =
hitMarkerGui = .()
hitMarkerGui.Name =
hitMarkerGui.ResetOnSpawn =
hitMarkerGui.IgnoreGuiInset =
hitMarkerGui.DisplayOrder =
hitMarkerGui.Parent = playerGui
hitSound = .()
hitSound.SoundId =
hitSound.Volume =
hitSound.Parent = hitMarkerGui
hit_marker_root = .()
hit_marker_root.Size = .(, , , )
hit_marker_root.AnchorPoint = .(, )
hit_marker_root.Position = .(, , , )
hit_marker_root.BackgroundTransparency =
hit_marker_root.Visible =
hit_marker_root.Parent = hitMarkerGui
hm_throw = .()
hm_throw.Size = .(, , , )
hm_throw.BackgroundTransparency =
hm_throw.Parent = hit_marker_root
throw_lines = {}
i, ang ({, -})
line = .()
line.Size = .(, , , )
line.AnchorPoint = .(, )
line.Position = .(, , , )
line.Rotation = ang
line.BackgroundColor3 = .(, , )
line.BorderSizePixel =
line.Parent = hm_throw
throw_lines[i] = line
hm_rocket = .()
hm_rocket.Size = .(, , , )
hm_rocket.BackgroundTransparency =
hm_rocket.Parent = hit_marker_root
rocket_core = .()
rocket_core.Size = .(, , , )
rocket_core.AnchorPoint = .(, )
rocket_core.Position = .(, , , )
rocket_core.BackgroundColor3 = .(, , )
rocket_core.BorderSizePixel =
rocket_core.Parent = hm_rocket
rocket_core_c = .()
rocket_core_c.CornerRadius = .(, )
rocket_core_c.Parent = rocket_core
rocket_ring = .()
rocket_ring.Size = .(, , , )
rocket_ring.AnchorPoint = .(, )
rocket_ring.Position = .(, , , )
rocket_ring.BackgroundTransparency =
rocket_ring.Parent = hm_rocket
rocket_ring_c = .()
rocket_ring_c.CornerRadius = .(, )
rocket_ring_c.Parent = rocket_ring
rocket_ring_s = .()
rocket_ring_s.Color = .(, , )
rocket_ring_s.Thickness =
rocket_ring_s.Parent = rocket_ring
hm_orbit = .()
hm_orbit.Size = .(, , , )
hm_orbit.BackgroundTransparency =
hm_orbit.Parent = hit_marker_root
orbit_lines = {}
_, name ({, , , })
line = .()
line.Name = name
line.BackgroundColor3 = .(, , )
line.BorderSizePixel =
line.AnchorPoint = .(, )
line.Parent = hm_orbit
orbit_lines[name] = line
hit_mode =
hit_time =
hit_visible =
(mode)
hit_mode = mode
hit_time = ()
hit_visible =
hit_marker_root.Visible =
hm_throw.Visible = (hit_mode == )
hm_rocket.Visible = (hit_mode == )
hm_orbit.Visible = (hit_mode == )
(()
hitSound:()
hitSound:()
)
()
hit_visible
elapsed = () - hit_time
dur =
elapsed > dur
hit_visible =
hit_marker_root.Visible =
t = elapsed / dur
hit_mode ==
spread = + t *
len = + t *
throw_lines[].Size = .(, , , len)
throw_lines[].Position = .(, spread, , spread)
throw_lines[].BackgroundTransparency = t
throw_lines[].Size = .(, , , len)
throw_lines[].Position = .(, spread, , -spread)
throw_lines[].BackgroundTransparency = t
hit_mode ==
core_size = + t *
rocket_core.Size = .(, core_size, , core_size)
rocket_core.BackgroundTransparency = t *
ring_size = + t *
rocket_ring.Size = .(, ring_size, , ring_size)
rocket_ring_s.Transparency = t
hit_mode ==
spread = + t *
len =
orbit_lines.up.Size = .(, , , len)
orbit_lines.up.Position = .(, , , -(spread + len/))
orbit_lines.up.BackgroundTransparency = t
orbit_lines.down.Size = .(, , , len)
orbit_lines.down.Position = .(, , , (spread + len/))
orbit_lines.down.BackgroundTransparency = t
orbit_lines.left.Size = .(, len, , )
orbit_lines.left.Position = .(, -(spread + len/), , )
orbit_lines.left.BackgroundTransparency = t
orbit_lines.right.Size = .(, len, , )
orbit_lines.right.Position = .(, (spread + len/), , )
orbit_lines.right.BackgroundTransparency = t
trajGui = .()
trajGui.Name =
trajGui.ResetOnSpawn =
trajGui.IgnoreGuiInset =
trajGui.DisplayOrder =
trajGui.Parent = playerGui
trajDots = {}
i = ,
d = .()
d.Size = .(, , , )
d.AnchorPoint = .(, )
d.BackgroundColor3 = MATRIX_GREEN
d.BorderSizePixel =
d.Visible =
d.ZIndex =
d.Parent = trajGui
c = .()
c.CornerRadius = .(, )
c.Parent = d
trajDots[i] = d
()
_, d (trajDots) d.Visible =
update_trajectory = ()
#T.grabbed_list ==
()
tgt_head = get_target_head ()
start_part = T.grabbed_list[].part
start_part start_part.Parent
()
pos = start_part.Position
charge_mult =
T.charge_active
charge_mult = T.charge_min_mult
+ (T.charge_max_mult - T.charge_min_mult)
* .((() - T.charge_start) / T.charge_max_time, , )
speed = T.throw_speed * charge_mult
vel
tgt_head
vel = (tgt_head.Position - pos).Unit * speed
vel = Camera.CFrame.LookVector * speed
g = Workspace.Gravity
dt =
t =
i = , #trajDots
t = t + dt
p = pos + vel * t + .(, - * g * t * t, )
screen, onscreen = Camera:(p)
dot = trajDots[i]
onscreen screen.Z >
dot.Position = .(, screen.X, , screen.Y)
dot.Visible =
dot.BackgroundTransparency = (i / #trajDots) *
dot.Size = .(, .(, - i * ), , .(, - i * ))
dot.Visible =
infoGui = .()
infoGui.Name =
infoGui.ResetOnSpawn =
infoGui.IgnoreGuiInset =
infoGui.DisplayOrder =
infoGui.Parent = playerGui
infoFrame = .()
infoFrame.Size = .(, , , )
infoFrame.Position = .(, -, , )
infoFrame.Parent = infoGui
(infoFrame, { padding = , corner = })
infoTitle = .()
infoTitle.Size = .(, , , )
infoTitle.Position = .(, , , )
infoTitle.BackgroundTransparency =
infoTitle.Text =
infoTitle.TextSize =
infoTitle.TextXAlignment = .TextXAlignment.Left
infoTitle.ZIndex =
infoTitle.Parent = infoFrame
(infoTitle, MATRIX_GREEN, )
infoSub = .()
infoSub.Size = .(, , , )
infoSub.Position = .(, , , )
infoSub.BackgroundTransparency =
infoSub.Text =
infoSub.TextSize =
infoSub.TextXAlignment = .TextXAlignment.Left
infoSub.ZIndex =
infoSub.Parent = infoFrame
(infoSub, MATRIX_GREEN_DIM, )
infoSep = .()
infoSep.Size = .(, , , )
infoSep.Position = .(, , , )
infoSep.BackgroundColor3 = MATRIX_GREEN
infoSep.BackgroundTransparency =
infoSep.BorderSizePixel =
infoSep.ZIndex =
infoSep.Parent = infoFrame
(y, labelText)
label = .()
label.Size = .(, , , )
label.Position = .(, , , y)
label.BackgroundTransparency =
label.Text = labelText
label.TextSize =
label.TextXAlignment = .TextXAlignment.Left
label.ZIndex =
label.Parent = infoFrame
(label, MATRIX_GREEN_DIM, )
label
infoGrabbed = (, )
infoCount = (, )
infoDist = (, )
infoFps = (, )
infoMulti = (, )
infoMode = (, )
infoHitbox = (, )
infoOrbit = (, )
infoStick = (, )
infoFreeze = (, )
infoNoclip = (, )
infoForm = (, )
infoTarget = (, )
infoFace = (, )
infoShield = (, )
logGui = .()
logGui.Name =
logGui.ResetOnSpawn =
logGui.IgnoreGuiInset =
logGui.DisplayOrder =
logGui.Parent = playerGui
logFrame = .()
logFrame.Size = .(, , , )
logFrame.Position = .(, , , -)
logFrame.Parent = logGui
(logFrame, { padding = , corner = })
logTitle = .()
logTitle.Size = .(, , , )
logTitle.Position = .(, , , )
logTitle.BackgroundTransparency =
logTitle.Text =
logTitle.TextSize =
logTitle.TextXAlignment = .TextXAlignment.Left
logTitle.ZIndex =
logTitle.Parent = logFrame
(logTitle, MATRIX_GREEN, )
logLabels = {}
i = ,
label = .()
label.Size = .(, , , )
label.Position = .(, , , + (i - ) * )
label.BackgroundTransparency =
label.Text =
label.TextSize =
label.TextXAlignment = .TextXAlignment.Left
label.ZIndex =
label.Parent = logFrame
(label, MATRIX_GREEN_DIM, )
logLabels[i] = label
.(()
T.unloaded
count = #T.action_log
i = ,
entry = T.action_log[count - + i]
entry
age = () - entry.time
logLabels[i].Text = .. entry.text
logLabels[i].TextTransparency = .(age / , )
logLabels[i].Text =
.()
)
bindsGui = .()
bindsGui.Name =
bindsGui.ResetOnSpawn =
bindsGui.IgnoreGuiInset =
bindsGui.DisplayOrder =
bindsGui.Parent = playerGui
bindsFrame = .()
bindsFrame.Size = .(, , , )
bindsFrame.Position = .(, -, , )
bindsFrame.Parent = bindsGui
(bindsFrame, { padding = , corner = })
bindsTitle = .()
bindsTitle.Size = .(, , , )
bindsTitle.Position = .(, , , )
bindsTitle.BackgroundTransparency =
bindsTitle.Text =
bindsTitle.TextSize =
bindsTitle.TextXAlignment = .TextXAlignment.Left
bindsTitle.ZIndex =
bindsTitle.Parent = bindsFrame
(bindsTitle, MATRIX_GREEN, )
BIND_LIST = {
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
{, },
}
i, bind_info (BIND_LIST)
key = bind_info[]
desc = bind_info[]
y = + (i - ) *
keyLabel = .()
keyLabel.Size = .(, , , )
keyLabel.Position = .(, , , y)
keyLabel.BackgroundTransparency =
keyLabel.Text = key
keyLabel.TextSize =
keyLabel.TextXAlignment = .TextXAlignment.Left
keyLabel.ZIndex =
keyLabel.Parent = bindsFrame
(keyLabel, MATRIX_GREEN, )
descLabel = .()
descLabel.Size = .(, -, , )
descLabel.Position = .(, , , y)
descLabel.BackgroundTransparency =
descLabel.Text = desc
descLabel.TextSize =
descLabel.TextXAlignment = .TextXAlignment.Left
descLabel.ZIndex =
descLabel.Parent = bindsFrame
(descLabel, MATRIX_GREEN_DIM, )
wmGui = .()
wmGui.Name =
wmGui.ResetOnSpawn =
wmGui.IgnoreGuiInset =
wmGui.DisplayOrder =
wmGui.Parent = playerGui
wmFrame = .()
wmFrame.Size = .(, , , )
wmFrame.Position = .(, , , -)
wmFrame.Parent = wmGui
(wmFrame, { padding = , corner = })
wmTitle = .()
wmTitle.Size = .(, , , )
wmTitle.Position = .(, , , )
wmTitle.BackgroundTransparency =
wmTitle.Text =
wmTitle.TextSize =
wmTitle.TextXAlignment = .TextXAlignment.Left
wmTitle.ZIndex =
wmTitle.Parent = wmFrame
(wmTitle, MATRIX_GREEN, )
wmNick = .()
wmNick.Size = .(, , , )
wmNick.Position = .(, , , )
wmNick.BackgroundTransparency =
wmNick.Text =
wmNick.TextSize =
wmNick.TextXAlignment = .TextXAlignment.Left
wmNick.ZIndex =
wmNick.Parent = wmFrame
(wmNick, MATRIX_GREEN_DIM, )
wmFps = .()
wmFps.Size = .(, , , )
wmFps.Position = .(, , , )
wmFps.BackgroundTransparency =
wmFps.Text =
wmFps.TextSize =
wmFps.TextXAlignment = .TextXAlignment.Left
wmFps.ZIndex =
wmFps.Parent = wmFrame
(wmFps, MATRIX_GREEN_DIM, )
wmPing = .()
wmPing.Size = .(, , , )
wmPing.Position = .(, , , )
wmPing.BackgroundTransparency =
wmPing.Text =
wmPing.TextSize =
wmPing.TextXAlignment = .TextXAlignment.Right
wmPing.ZIndex =
wmPing.Parent = wmFrame
(wmPing, MATRIX_GREEN_DIM, )
wmNick.Text = .. LP.Name
.(()
T.unloaded
wmFps.Text = .. (.(T.fps))
ping =
(()
ping = .(Stats.Network.ServerStatsItem[]:())
)
wmPing.Text = .. (ping)
.()
)
.(()
T.unloaded
count = #T.grabbed_list
count >
infoCount.Text = .. count
infoCount.TextColor3 = MATRIX_GREEN
count ==
infoGrabbed.Text = .. T.grabbed_list[].model.Name
infoGrabbed.Text = .. count ..
infoGrabbed.TextColor3 = MATRIX_GREEN
char = ()
my_head = char char:()
my_head T.grabbed_list[].part T.grabbed_list[].part.Parent
dist = .((my_head.Position - T.grabbed_list[].part.Position).Magnitude)
infoDist.Text = .. dist ..
infoDist.Text =
infoDist.TextColor3 = MATRIX_GREEN
infoGrabbed.Text =
infoCount.Text =
infoDist.Text =
infoGrabbed.TextColor3 = MATRIX_GREEN_DIM
infoCount.TextColor3 = MATRIX_GREEN_DIM
infoDist.TextColor3 = MATRIX_GREEN_DIM
infoFps.Text = .. .(T.fps)
infoFps.TextColor3 = T.fps >= MATRIX_GREEN MATRIX_GREEN_DIM
(lbl, name, on)
lbl.Text = name .. .. (on )
lbl.TextColor3 = on MATRIX_GREEN MATRIX_GREEN_DIM
(infoMulti, , T.multi_select)
(infoMode, , T.auto_return)
(infoHitbox, , T.show_hitboxes)
(infoOrbit, , T.orbit_mode)
(infoStick, , T.stick_mode)
(infoFreeze, , T.freeze_mode)
(infoNoclip, , T.no_collide)
(infoFace, , T.face_mode)
(infoShield, , T.shield_mode)
infoForm.Text = .. T.formation
infoForm.TextColor3 = MATRIX_GREEN
T.target_lock T.target_player
infoTarget.Text = .. T.target_player.Name
infoTarget.TextColor3 = MATRIX_GREEN
infoTarget.Text =
infoTarget.TextColor3 = MATRIX_GREEN_DIM
.()
)
.(()
T.unloaded
T.frame_count = T.frame_count +
now = ()
now - T.fps_time >=
T.fps = T.frame_count / (now - T.fps_time)
T.frame_count =
T.fps_time = now
.()
)
(model)
model
model:()
h = model:() model:()
h h:() h
p = model:() model:()
p p:() p
_, v (model:())
v:() v
(model)
model
parent = model.Parent
parent parent ~= Workspace
Players:(parent)
parent:()
parent = parent.Parent
(model)
model model:()
Players:(model)
model.Name:()
(model)
model:() model:()
name = model.Name:()
name:() name:() name:()
name:() name:() name:()
name:() name:() name:()
name:() name:()
_, v (model:())
v:()
(model)
model
handle = model:() model:()
handle
handle:() handle:()
handle:() handle:()
handle:()
(model)
model
(model)
part = (model)
part
T.hitbox_wrappers[part]
wrapper = .()
wrapper.Name =
wrapper.Size = part.Size * T.hitbox_scale
wrapper.CFrame = part.CFrame
wrapper.Anchored =
wrapper.CanCollide =
wrapper.CanQuery =
wrapper.CanTouch =
wrapper.Transparency =
wrapper.Massless =
wrapper.CastShadow =
wrapper.Material = .Material.SmoothPlastic
wrapper.Parent = Workspace
weld = .()
weld.Part0 = wrapper
weld.Part1 = part
weld.Parent = wrapper
T.hitbox_wrappers[part] = wrapper
()
_, obj (Workspace:())
obj:()
Players:(obj)
obj.Name:()
name_lower = obj.Name:()
is_map = name_lower:() name_lower:()
name_lower:() name_lower:()
name_lower:() name_lower:()
name_lower:() name_lower:()
name_lower:() name_lower:()
name_lower:() name_lower:()
name_lower:() name_lower:()
name_lower:() name_lower:()
name_lower:()
is_map
(obj)
is_weapon = (obj)
has_primary = obj:() ~=
has_handle = obj:() ~=
weapon_marker = (obj)
is_weapon has_primary has_handle weapon_marker
part = (obj)
part part.Size.Magnitude <
(obj)
part, wrapper (T.hitbox_wrappers)
part.Parent wrapper.Parent
(() wrapper:() )
T.hitbox_wrappers[part] =
()
part, data (T.hitbox_visuals)
data.visual data.visual.Parent
(() data.visual:() )
T.hitbox_visuals = {}
()
()
T.show_hitboxes
part, wrapper (T.hitbox_wrappers)
wrapper wrapper.Parent
(part.Parent)
visual = .()
visual.Name =
visual.Size = wrapper.Size
visual.CFrame = wrapper.CFrame
visual.Anchored =
visual.CanCollide =
visual.CanQuery =
visual.CanTouch =
visual.Material = .Material.SmoothPlastic
visual.Color = .(, , )
visual.Transparency =
visual.CastShadow =
visual.Parent = Workspace
T.hitbox_visuals[part] = { visual = visual }
()
T.show_hitboxes
part, data (T.hitbox_visuals)
wrapper = T.hitbox_wrappers[part]
wrapper wrapper.Parent data.visual data.visual.Parent
data.visual.Size = wrapper.Size
data.visual.CFrame = wrapper.CFrame
data.visual data.visual.Parent
(() data.visual:() )
T.hitbox_visuals[part] =
MULTIPOINT_OFFSETS = {
.( , , ),
.( , , ),
.(-, , ),
.( , -, ),
.(-, -, ),
.( , , ),
.(-, , ),
.( , -, ),
.(-, -, ),
}
FACE_POINTS = {
.(-, , ),
.( , , ),
.(-, , ),
.(-, -, ),
.( , -, ),
.( , -, ),
.( , , ),
.( , , ),
.(-, , ),
.( , , ),
}
get_formation_offset = (i, count, base_cf)
f = T.formation
f ==
.(, (i - ) * , )
f ==
w = T.formation_wall_w
col = (i - ) % w
row = .((i - ) / w)
.(
(col - (w - ) / ) * ,
row * ,
)
f ==
r = T.formation_ring_radius
a = ((i - ) / .(count, )) * .pi *
.(.(a) * r, , .(a) * r)
f ==
side = .(, .(count ^ (/)))
x = (i - ) % side
y = .((i - ) / side) % side
z = .((i - ) / (side * side))
c = (side - ) /
.((x - c) * , (y - c) * , (z - c) * )
f ==
MULTIPOINT_OFFSETS[((i - ) % #MULTIPOINT_OFFSETS) + ]
f ==
FACE_POINTS[((i - ) % #FACE_POINTS) + ]
.(, (i - ) * , )
()
char = ()
char
head = char:()
char:()
char:()
head
look = Camera.CFrame.LookVector
look = .(look.X, , look.Z)
look.Magnitude >
look = look.Unit
look = head.CFrame.LookVector
head.Position + look * T.hold_distance
Camera.CFrame.Position + Camera.CFrame.LookVector * T.hold_distance
(max_dist)
max_dist = max_dist
ray = Ray.(Camera.CFrame.Position, Camera.CFrame.LookVector * max_dist)
ignore = {}
() .(ignore, ())
hit = Workspace:(ray, ignore)
hit
hit.Name ==
part, wrapper (T.hitbox_wrappers)
wrapper == hit
(part.Parent)
model = part:()
model model
tool = part:()
tool tool
(hit)
tool = hit:()
tool
(tool)
tool
model = hit:()
model model ~= Workspace
(model) model
model = model:()
get_target_head = ()
T.target_lock
plr = T.target_player
plr plr.Character
hum = plr.Character:()
hum hum.Health <=
plr.Character:()
()
grab_mode_active = T.orbit_mode T.stick_mode T.shield_mode T.face_mode
_, item (T.last_thrown_list)
part = item.part
part part.Parent item.rocket
_, plr (Players:())
plr ~= LP plr.Character
_, bp (plr.Character:())
bp:()
d = (part.Position - bp.Position).Magnitude
d < (part.Size.Magnitude / + bp.Size.Magnitude / + )
()
item.rocket =
grab_mode_active
_, item (T.grabbed_list)
part = item.part
part part.Parent
_, plr (Players:())
plr ~= LP plr.Character
_, bp (plr.Character:())
bp:()
d = (part.Position - bp.Position).Magnitude
d < (part.Size.Magnitude / + bp.Size.Magnitude / + )
()
_, item (T.last_thrown_list)
part = item.part
part part.Parent item.rocket
_, plr (Players:())
plr ~= LP plr.Character
_, bp (plr.Character:())
bp:()
d = (part.Position - bp.Position).Magnitude
d < (part.Size.Magnitude / + bp.Size.Magnitude / + )
()
()
T.return_in_progress =
T.multi_select #T.grabbed_list == T.orbit_mode
_, item (T.grabbed_list)
item.part item.part.Parent
item.part.AssemblyLinearVelocity = .zero
item.part.AssemblyAngularVelocity = .zero
wrapper = T.hitbox_wrappers[item.part]
wrapper wrapper.Parent
wrapper.CanQuery =
T.freeze_mode
orig_anch = T.original_anchored[item.part]
orig_anch ~= item.part.Parent
item.part.Anchored = orig_anch
T.original_anchored[item.part] =
T.original_velocity[item.part] =
T.no_collide T.grabbed_noclip
(item.part)
(item.part)
(item.part)
()
T.grabbed_list = {}
T.return_in_progress =
()
model = ()
model
(model)
T.multi_select #T.grabbed_list >
_, item (T.grabbed_list)
item.part item.part.Parent
item.part.AssemblyLinearVelocity = .zero
item.part.AssemblyAngularVelocity = .zero
wrapper = T.hitbox_wrappers[item.part]
wrapper wrapper.Parent
wrapper.CanQuery =
T.freeze_mode
orig_anch = T.original_anchored[item.part]
if orig_anch ~= nil and item.part.Parent then
item.part.Anchored = orig_anch
end
T.original_anchored[item.part] = nil
T.original_velocity[item.part] = nil
end
if T.no_collide or T.grabbed_noclip then
restore_one_collide(item.part)
end
restore_item_physics(item.part)
detach_trail(item.part)
end
end
clear_highlight()
T.grabbed_list = {}
end
if T.multi_select then
for _, item in ipairs(T.grabbed_list) do
if item.model == model then
return
end
end
end
local part = get_item_part(model)
if not part then return end
if T.anchor_skip_list[part] and tick() - T.anchor_skip_list[part] < 3 then
return
end
table.insert(T.grabbed_list, {
model = model,
part = part,
})
local wrapper = T.hitbox_wrappers[part]
if wrapper and wrapper.Parent then
wrapper.CanQuery = false
end
apply_item_physics(part)
if T.grabbed_noclip then
local root = part.AssemblyRootPart or part
local parts_to_disable = {}
pcall(function()
for _, p in ipairs(root:GetConnectedParts(true)) do
if p:IsA("BasePart") then parts_to_disable[p] = true end
end
end)
parts_to_disable[root] = true
parts_to_disable[part] = true
for p in pairs(parts_to_disable) do
if T.original_collide[p] == nil then
T.original_collide[p] = p.CanCollide
end
pcall(function() p.CanCollide = false end)
end
T.grabbed_assembly[part] = root
end
if T.no_collide then
if T.original_collide[part] == nil then
T.original_collide[part] = part.CanCollide
end
part.CanCollide = false
end
if T.freeze_mode then
T.original_anchored[part] = part.Anchored
T.original_velocity[part] = {
linear = part.AssemblyLinearVelocity,
angular = part.AssemblyAngularVelocity,
}
part.Anchored = true
end
add_highlight(model)
log_action("grabbed " .. model.Name)
end
release_all = function()
if T.orbit_mode then
return
end
if #T.grabbed_list == 0 then
return
end
local cnt = #T.grabbed_list
for _, item in ipairs(T.grabbed_list) do
if item.part and item.part.Parent then
item.part.AssemblyLinearVelocity = Vector3.zero
item.part.AssemblyAngularVelocity = Vector3.zero
local wrapper = T.hitbox_wrappers[item.part]
if wrapper and wrapper.Parent then
wrapper.CanQuery = true
end
if T.freeze_mode then
local orig_anch = T.original_anchored[item.part]
if orig_anch ~= nil and item.part.Parent then
item.part.Anchored = orig_anch
end
T.original_anchored[item.part] = nil
T.original_velocity[item.part] = nil
end
if T.no_collide or T.grabbed_noclip then
restore_one_collide(item.part)
end
restore_item_physics(item.part)
detach_trail(item.part)
end
end
clear_highlight()
T.grabbed_list = {}
T.return_in_progress = false
log_action("released " .. cnt .. " items")
end
local function explode()
if #T.grabbed_list == 0 then
return
end
local cnt = #T.grabbed_list
for _, item in ipairs(T.grabbed_list) do
if item.part and item.part.Parent then
if T.freeze_mode then
item.part.Anchored = false
end
if T.no_collide or T.grabbed_noclip then
restore_one_collide(item.part)
end
restore_item_physics(item.part)
attach_trail(item.part, "throw", 0.3)
task.delay(0.8, function() detach_trail(item.part) end)
local random_dir = Vector3.new(
math.random(-100, 100),
math.random(50, 150),
math.random(-100, 100)
).Unit
item.part.AssemblyLinearVelocity = random_dir * 300
item.part.AssemblyAngularVelocity = Vector3.new(
math.random(-100, 100), math.random(-100, 100), math.random(-100, 100)
)
local wrapper = T.hitbox_wrappers[item.part]
if wrapper and wrapper.Parent then
wrapper.CanQuery = true
end
end
end
T.grabbed_list = {}
clear_highlight()
T.original_anchored = {}
T.original_velocity = {}
T.original_collide = {}
T.grabbed_assembly = {}
log_action("exploded " .. cnt .. " items")
end
local function teleport_to_last()
if not T.last_thrown_list or #T.last_thrown_list == 0 then
return
end
local last = T.last_thrown_list[#T.last_thrown_list]
if not last or not last.part or not last.part.Parent then
return
end
local char = get_char()
if not char then return end
pcall(function()
char:PivotTo(CFrame.new(last.part.Position + Vector3.new(0, 3, 0)))
end)
log_action("teleported to item")
end
throw = function(charge_mult)
if #T.grabbed_list == 0 then return end
charge_mult = charge_mult or 1.0
local speed = T.throw_speed * charge_mult
T.last_thrown_list = {}
local cnt = #T.grabbed_list
local tgt_head = get_target_head()
for _, item in ipairs(T.grabbed_list) do
if item.part and item.part.Parent then
if T.freeze_mode then
item.part.Anchored = false
T.original_anchored[item.part] = nil
T.original_velocity[item.part] = nil
end
restore_item_physics(item.part)
if T.no_collide or T.grabbed_noclip then
restore_one_collide(item.part)
end
local dir
if tgt_head then
dir = (tgt_head.Position - item.part.Position).Unit
else
dir = Camera.CFrame.LookVector
end
attach_trail(item.part, "throw", 0.5)
task.delay(1.5, function() detach_trail(item.part) end)
item.part.AssemblyLinearVelocity = dir * speed
item.part.AssemblyAngularVelocity = Vector3.new(
math.random(-50, 50), math.random(-50, 50), math.random(-50, 50)
)
local wrapper = T.hitbox_wrappers[item.part]
if wrapper and wrapper.Parent then
wrapper.CanQuery = true
end
table.insert(T.last_thrown_list, item)
end
end
T.grabbed_list = {}
clear_highlight()
T.original_anchored = {}
T.original_velocity = {}
T.original_collide = {}
T.grabbed_assembly = {}
log_action("threw " .. cnt .. " x" .. string.format("%.2f", charge_mult) .. (tgt_head and " (locked)" or ""))
if T.auto_return and #T.last_thrown_list > 0 then
task.delay(T.auto_return_delay, function()
if T.unloaded then return end
if #T.grabbed_list == 0 and #T.last_thrown_list > 0 then
T.return_in_progress = true
log_action("auto-return start")
end
end)
end
end
local function recall_last()
if not T.last_thrown_list or #T.last_thrown_list == 0 then
return
end
T.return_in_progress = true
log_action("recall " .. #T.last_thrown_list .. " items")
end
local function start_charge()
T.charge_active = true
T.charge_start = tick()
end
local function get_charge_mult()
if not T.charge_active then return 1.0 end
local t = math.clamp((tick() - T.charge_start) / T.charge_max_time, 0, 1)
return T.charge_min_mult + (T.charge_max_mult - T.charge_min_mult) * t
end
local function release_charge()
if not T.charge_active then return end
local mult = get_charge_mult()
T.charge_active = false
throw(mult)
end
local function launch_rocket()
if os.clock() < T.rocket_cooldown then
return
end
if #T.grabbed_list == 0 then
return
end
local item = T.grabbed_list[1]
local part = item.part
if not part or not part.Parent then return end
local tgt_head = get_target_head()
local dir
if tgt_head then
dir = (tgt_head.Position - part.Position).Unit
else
dir = Camera.CFrame.LookVector
end
if T.freeze_mode then part.Anchored = false end
part.Anchored = false
restore_item_physics(part)
part.CanCollide = true
part.CanTouch = true
part.CanQuery = true
part.Massless = false
part.AssemblyLinearVelocity = dir * T.rocket_speed
part.AssemblyAngularVelocity = Vector3.zero
local saved_auto_return = T.auto_return
T.auto_return = false
for i, it in ipairs(T.grabbed_list) do
if it.part == part then
table.remove(T.grabbed_list, i)
it.rocket = true
table.insert(T.last_thrown_list, it)
break
end
end
remove_highlight(item.model)
attach_trail(part, "rocket", 0.4)
local hb_conn
local finished = false
local elapsed = 0
local function cleanup()
if finished then return end
finished = true
if hb_conn then hb_conn:Disconnect() end
detach_trail(part, 0.3)
T.auto_return = saved_auto_return
end
local function do_hit(plr, hrp, hum)
if finished then return end
show_hit_marker("rocket")
pcall(function()
hrp.AssemblyLinearVelocity = dir * 120 + Vector3.new(0, 60, 0)
end)
pcall(function()
hum:ChangeState(Enum.HumanoidStateType.Physics)
end)
cleanup()
end
hb_conn = RunService.Heartbeat:Connect(function(dt)
if finished then return end
if not part or not part.Parent then
cleanup()
return
end
elapsed = elapsed + dt
if elapsed > 5 then
cleanup()
return
end
local speed_now = part.AssemblyLinearVelocity.Magnitude
local step = math.max(speed_now * dt, 5)
local origin = part.Position
local ray_dir = part.AssemblyLinearVelocity
if ray_dir.Magnitude < 0.1 then
ray_dir = dir
else
ray_dir = ray_dir.Unit
end
local ray_params = RaycastParams.new()
ray_params.FilterType = Enum.RaycastFilterType.Exclude
ray_params.FilterDescendantsInstances = { LP.Character, part }
ray_params.IgnoreWater = true
local result = Workspace:Raycast(origin, ray_dir * step, ray_params)
if result and result.Instance then
local hit_model = result.Instance:FindFirstAncestorOfClass("Model")
if hit_model then
local plr = Players:GetPlayerFromCharacter(hit_model)
if plr and plr ~= LP then
local hum = hit_model:FindFirstChildOfClass("Humanoid")
local hrp = hit_model:FindFirstChild("HumanoidRootPart")
if hum and hrp then
do_hit(plr, hrp, hum)
return
end
end
end
end
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= LP and plr.Character then
local hrp = plr.Character:FindFirstChild("HumanoidRootPart")
local hum = plr.Character:FindFirstChildOfClass("Humanoid")
if hrp and hum then
local d = (part.Position - hrp.Position).Magnitude
if d < 4 then
do_hit(plr, hrp, hum)
return
end
end
end
end
end)
table.insert(T.conns, hb_conn)
task.delay(5, cleanup)
T.rocket_cooldown = os.clock() + 1.0
log_action("rocket launched")
end
bind(RunService.RenderStepped, function()
if T.unloaded then return end
T.aim_on_item = find_item_under_crosshair() ~= nil
update_crosshair()
update_hitbox_visuals()
update_hit_marker()
update_trajectory()
check_hit_marker()
if T.freeze_mode and #T.grabbed_list > 0 then
for _, item in ipairs(T.grabbed_list) do
if item.part and item.part.Parent and not item.part.Anchored then
item.part.Anchored = true
end
end
end
if T.grabbed_noclip and #T.grabbed_list > 0 then
for _, item in ipairs(T.grabbed_list) do
local part = item.part
if part and part.Parent then
local root = T.grabbed_assembly[part] or part.AssemblyRootPart
if root then
pcall(function()
for _, p in ipairs(root:GetConnectedParts(true)) do
if p:IsA("BasePart") and p.CanCollide then
p.CanCollide = false
end
end
if root.CanCollide then root.CanCollide = false end
end)
end
if part.CanCollide then part.CanCollide = false end
end
end
end
if T.no_collide and #T.grabbed_list > 0 then
for _, item in ipairs(T.grabbed_list) do
if item.part and item.part.Parent and item.part.CanCollide then
item.part.CanCollide = false
end
end
end
if #T.grabbed_list > 0 then
for i = #T.grabbed_list, 1, -1 do
local item = T.grabbed_list[i]
if not item.part or not item.part.Parent then
restore_item_physics(item.part)
remove_highlight(item.model)
table.remove(T.grabbed_list, i)
elseif is_attached_to_character(item.part.Parent) then
restore_item_physics(item.part)
remove_highlight(item.model)
table.remove(T.grabbed_list, i)
end
end
if #T.grabbed_list == 0 then
clear_highlight()
return
end
T.orbit_angle = T.orbit_angle + T.orbit_speed
if T.shield_mode then
local char = get_char()
local my_hrp = char and char:FindFirstChild("HumanoidRootPart")
if my_hrp then
local count = #T.grabbed_list
local shield_angle = tick() * T.shield_speed
for i, item in ipairs(T.grabbed_list) do
if item.part and item.part.Parent and not item.part.Anchored then
local n = i
local total = math.max(count, 1)
local phi = math.acos(1 - 2 * (n - 0.5) / total)
local theta = math.pi * (1 + 5 ^ 0.5) * (n - 1) + shield_angle
local off = Vector3.new(
math.sin(phi) * math.cos(theta),
math.cos(phi),
math.sin(phi) * math.sin(theta)
) * T.shield_radius
local shield_target = my_hrp.Position + off
local dir = shield_target - item.part.Position
local dist = dir.Magnitude
if dist > 0.5 then
local speed = math.min(dist * T.pull_speed * 2, 500)
item.part.AssemblyLinearVelocity = dir.Unit * speed
else
item.part.AssemblyLinearVelocity = Vector3.zero
end
item.part.AssemblyAngularVelocity = Vector3.zero
end
end
end
return
end
if T.stick_mode then
local target = get_hold_target()
local leader = T.grabbed_list[1]
local count = #T.grabbed_list
if leader and leader.part and leader.part.Parent and not leader.part.Anchored then
local dir = target - leader.part.Position
local dist = dir.Magnitude
if dist > T.grab_deadzone then
local speed = math.min(dist * T.pull_speed, 300)
leader.part.AssemblyLinearVelocity = dir.Unit * speed
else
if leader.part.AssemblyLinearVelocity.Magnitude > 2 then
leader.part.AssemblyLinearVelocity = Vector3.zero
end
end
leader.part.AssemblyAngularVelocity = Vector3.zero
local sphere_r = 2 + count * 0.35
for i = 2, count do
local item = T.grabbed_list[i]
if item.part and item.part.Parent and not item.part.Anchored then
local n = i - 1
local total = math.max(count - 1, 1)
local phi = math.acos(1 - 2 * (n - 0.5) / total)
local theta = math.pi * (1 + 5 ^ 0.5) * (n - 1)
local off = Vector3.new(
math.sin(phi) * math.cos(theta),
math.cos(phi),
math.sin(phi) * math.sin(theta)
) * sphere_r
local rot = CFrame.Angles(0, T.orbit_angle * 0.6, 0)
off = rot:VectorToWorldSpace(off)
local sphere_target = target + off
local ldir = sphere_target - item.part.Position
local ldist = ldir.Magnitude
if ldist > 1 then
local speed = math.min(ldist * T.pull_speed, 300)
item.part.AssemblyLinearVelocity = ldir.Unit * speed
else
if item.part.AssemblyLinearVelocity.Magnitude > 2 then
item.part.AssemblyLinearVelocity = Vector3.zero
end
end
item.part.AssemblyAngularVelocity = Vector3.zero
end
end
end
elseif T.orbit_mode then
local char = get_char()
local my_head = char and char:FindFirstChild("Head")
if my_head then
local count = #T.grabbed_list
for i, item in ipairs(T.grabbed_list) do
if item.part and item.part.Parent and not item.part.Anchored then
local angle = T.orbit_angle + (i / count) * math.pi * 2
local orbit_target = my_head.Position + Vector3.new(
math.cos(angle) * T.orbit_radius,
1 + math.sin(T.orbit_angle + i * 0.5) * 1.5,
math.sin(angle) * T.orbit_radius
)
local dir = orbit_target - item.part.Position
local dist = dir.Magnitude
if dist > 1 then
local speed = math.min(dist * T.pull_speed, 300)
item.part.AssemblyLinearVelocity = dir.Unit * speed
else
if item.part.AssemblyLinearVelocity.Magnitude > 2 then
item.part.AssemblyLinearVelocity = Vector3.zero
end
end
item.part.AssemblyAngularVelocity = Vector3.zero
end
end
end
else
local target = get_hold_target()
for i, item in ipairs(T.grabbed_list) do
if item.part and item.part.Parent and not item.part.Anchored then
local offset = get_formation_offset(i, #T.grabbed_list, Camera.CFrame)
local item_target = target + offset
local dir = item_target - item.part.Position
local dist = dir.Magnitude
if dist > T.grab_deadzone then
local speed = math.min(dist * T.pull_speed, 300)
item.part.AssemblyLinearVelocity = dir.Unit * speed
item.part.AssemblyAngularVelocity = Vector3.zero
else
if item.part.AssemblyLinearVelocity.Magnitude > 2 then
item.part.AssemblyLinearVelocity = Vector3.zero
end
if item.part.AssemblyAngularVelocity.Magnitude > 2 then
item.part.AssemblyAngularVelocity = Vector3.zero
end
end
end
end
end
return
end
if T.return_in_progress and T.last_thrown_list and #T.last_thrown_list > 0 then
local target = get_hold_target()
if #T.last_thrown_list >= 2 then
local count = 0
for i = #T.last_thrown_list, 1, -1 do
local item = T.last_thrown_list[i]
if not item.part or not item.part.Parent then
table.remove(T.last_thrown_list, i)
else
pcall(function()
item.part.CFrame = CFrame.new(target + Vector3.new(
math.random(-1, 1) * 0.5,
count * 0.6,
math.random(-1, 1) * 0.5
))
end)
item.part.AssemblyLinearVelocity = Vector3.zero
item.part.AssemblyAngularVelocity = Vector3.zero
local wrapper = T.hitbox_wrappers[item.part]
if wrapper and wrapper.Parent then
wrapper.CanQuery = false
end
apply_item_physics(item.part)
if T.grabbed_noclip or T.no_collide then
local root = item.part.AssemblyRootPart or item.part
local parts_to_disable = {}
pcall(function()
for _, p in ipairs(root:GetConnectedParts(true)) do
if p:IsA("BasePart") then parts_to_disable[p] = true end
end
end)
parts_to_disable[root] = true
parts_to_disable[item.part] = true
for p in pairs(parts_to_disable) do
if T.original_collide[p] == nil then
T.original_collide[p] = p.CanCollide
end
pcall(function() p.CanCollide = false end)
end
T.grabbed_assembly[item.part] = root
end
add_highlight(item.model)
detach_trail(item.part, 0.3)
table.insert(T.grabbed_list, item)
table.remove(T.last_thrown_list, i)
count = count + 1
end
end
T.return_in_progress = false
log_action("recalled " .. count .. " (instant)")
return
end
for i = #T.last_thrown_list, 1, -1 do
local item = T.last_thrown_list[i]
if not item.part or not item.part.Parent then
table.remove(T.last_thrown_list, i)
else
local dir = target - item.part.Position
local dist = dir.Magnitude
if dist < T.grab_deadzone then
table.insert(T.grabbed_list, item)
table.remove(T.last_thrown_list, i)
local wrapper = T.hitbox_wrappers[item.part]
if wrapper and wrapper.Parent then
wrapper.CanQuery = false
end
apply_item_physics(item.part)
if T.grabbed_noclip or T.no_collide then
local root = item.part.AssemblyRootPart or item.part
local parts_to_disable = {}
pcall(function()
for _, p in ipairs(root:GetConnectedParts(true)) do
if p:IsA("BasePart") then parts_to_disable[p] = true end
end
end)
parts_to_disable[root] = true
parts_to_disable[item.part] = true
for p in pairs(parts_to_disable) do
if T.original_collide[p] == nil then
T.original_collide[p] = p.CanCollide
end
pcall(function() p.CanCollide = false end)
end
T.grabbed_assembly[item.part] = root
end
add_highlight(item.model)
detach_trail(item.part, 0.3)
else
if not active_trails[item.part] then
attach_trail(item.part, "recall", 0.3)
end
local speed = math.min(dist * T.pull_speed, T.return_speed)
item.part.AssemblyLinearVelocity = dir.Unit * speed
item.part.AssemblyAngularVelocity = Vector3.zero
end
end
end
if #T.last_thrown_list == 0 then
T.return_in_progress = false
log_action("recalled all")
end
end
end)
bind(RunService.Heartbeat, function()
if T.unloaded then return end
refresh_hitboxes()
if T.show_hitboxes then
rebuild_hitbox_visuals()
end
end)
LP.CharacterRemoving:Connect(function()
clear_highlight()
detach_all_trails()
for _, item in ipairs(T.grabbed_list) do
if item.part then restore_item_physics(item.part) end
end
for _, item in ipairs(T.last_thrown_list) do
if item.part then restore_item_physics(item.part) end
end
T.grabbed_list = {}
T.last_thrown_list = {}
T.return_in_progress = false
T.original_anchored = {}
T.original_velocity = {}
T.original_collide = {}
T.grabbed_assembly = {}
end)
local function unload()
if T.unloaded then return end
T.unloaded = true
clear_highlight()
detach_all_trails()
for _, item in ipairs(T.grabbed_list) do
if item.part then
if T.freeze_mode and item.part.Parent then
item.part.Anchored = T.original_anchored[item.part] or false
end
if (T.no_collide or T.grabbed_noclip) and item.part.Parent then
restore_one_collide(item.part)
end
restore_item_physics(item.part)
end
end
for _, item in ipairs(T.last_thrown_list) do
if item.part then restore_item_physics(item.part) end
end
T.grabbed_list = {}
T.last_thrown_list = {}
T.return_in_progress = false
clear_hitbox_visuals()
for part, wrapper in pairs(T.hitbox_wrappers) do
if wrapper and wrapper.Parent then
pcall(function() wrapper:Destroy() end)
end
end
T.hitbox_wrappers = {}
hide_crosshair()
hide_trajectory()
pcall(function() crosshairGui:Destroy() end)
pcall(function() trajGui:Destroy() end)
pcall(function() hitMarkerGui:Destroy() end)
pcall(function() infoGui:Destroy() end)
pcall(function() logGui:Destroy() end)
pcall(function() bindsGui:Destroy() end)
pcall(function() wmGui:Destroy() end)
for _, c in ipairs(T.conns) do
pcall(function() c:Disconnect() end)
end
T.conns = {}
end
refresh_hitboxes()
T.fps_time = tick()
local input_conn = UIS.InputBegan:Connect(function(input, gpe)
if gpe then return end
if T.unloaded then return end
local k = input.KeyCode
if k == Enum.KeyCode.E then
grab()
elseif k == Enum.KeyCode.G then
release_all()
elseif k == Enum.KeyCode.Q then
start_charge()
elseif k == Enum.KeyCode.End then
T.auto_return = not T.auto_return
elseif k == Enum.KeyCode.T then
recall_last()
elseif k == Enum.KeyCode.X then
explode()
elseif k == Enum.KeyCode.Z then
teleport_to_last()
elseif k == Enum.KeyCode.Y then
T.face_mode = not T.face_mode
if T.face_mode then
T.stick_mode = false
T.orbit_mode = false
T.shield_mode = false
T.formation = "face"
end
log_action("face " .. (T.face_mode and "ON" or "OFF"))
elseif k == Enum.KeyCode.KeypadDivide then
T.shield_mode = not T.shield_mode
if T.shield_mode then
T.stick_mode = false
T.orbit_mode = false
T.face_mode = false
end
log_action("shield " .. (T.shield_mode and "ON" or "OFF"))
elseif k == Enum.KeyCode.KeypadZero then
T.freeze_mode = not T.freeze_mode
if T.freeze_mode then
apply_freeze()
log_action("freeze ON")
else
restore_freeze()
log_action("freeze OFF")
end
elseif k == Enum.KeyCode.N then
T.no_collide = not T.no_collide
if T.no_collide then
apply_no_collide()
log_action("no-collide ON")
else
restore_collide()
log_action("no-collide OFF")
end
elseif k == Enum.KeyCode.Delete then
T.show_hitboxes = not T.show_hitboxes
if T.show_hitboxes then
rebuild_hitbox_visuals()
else
clear_hitbox_visuals()
end
elseif k == Enum.KeyCode.L then
T.stick_mode = not T.stick_mode
if T.stick_mode then
T.orbit_mode = false
T.face_mode = false
T.shield_mode = false
end
elseif k == Enum.KeyCode.KeypadOne then
T.orbit_mode = not T.orbit_mode
if T.orbit_mode then
T.stick_mode = false
T.face_mode = false
T.shield_mode = false
end
elseif k == Enum.KeyCode.KeypadThree then
T.multi_select = not T.multi_select
if not T.multi_select then
for _, item in ipairs(T.grabbed_list) do
if item.part and item.part.Parent then
item.part.AssemblyLinearVelocity = Vector3.zero
item.part.AssemblyAngularVelocity = Vector3.zero
local wrapper = T.hitbox_wrappers[item.part]
if wrapper and wrapper.Parent then
wrapper.CanQuery = true
end
restore_item_physics(item.part)
if T.no_collide or T.grabbed_noclip then
restore_one_collide(item.part)
end
detach_trail(item.part)
end
end
clear_highlight()
T.grabbed_list = {}
end
elseif k == Enum.KeyCode.B then
local order = {"column", "wall", "ring", "cube", "multi", "face"}
local idx = 1
for i, v in ipairs(order) do
if v == T.formation then idx = i break end
end
T.formation = order[(idx % #order) + 1]
if T.formation == "face" then
T.face_mode = true
else
T.face_mode = false
end
log_action("formation: " .. T.formation)
elseif k == Enum.KeyCode.K then
T.target_lock = not T.target_lock
if not T.target_lock then T.target_player = nil end
log_action("target-lock " .. (T.target_lock and "ON" or "OFF"))
elseif k == Enum.KeyCode.J then
local plist = {}
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= LP and plr.Character and plr.Character:FindFirstChild("Head") then
table.insert(plist, plr)
end
end
if #plist == 0 then
T.target_player = nil
else
local idx = 1
for i, p in ipairs(plist) do
if p == T.target_player then idx = i break end
end
T.target_player = plist[(idx % #plist) + 1]
log_action("target: " .. T.target_player.Name)
end
elseif k == Enum.KeyCode.KeypadPlus then
launch_rocket()
elseif k == Enum.KeyCode.RightAlt then
infoFrame.Visible = not infoFrame.Visible
bindsFrame.Visible = not bindsFrame.Visible
logFrame.Visible = not logFrame.Visible
elseif k == Enum.KeyCode.KeypadMinus then
wmFrame.Visible = not wmFrame.Visible
elseif k == Enum.KeyCode.LeftBracket then
T.hold_distance = math.min(T.hold_distance + 2, 30)
elseif k == Enum.KeyCode.RightBracket then
T.hold_distance = math.max(T.hold_distance - 2, 3)
elseif k == Enum.KeyCode.Insert then
unload()
end
end)
table.insert(T.conns, input_conn)
local input_end_conn = UIS.InputEnded:Connect(function(input, gpe)
if T.unloaded then return end
if input.KeyCode == Enum.KeyCode.Q then
release_charge()
end
end)
table.insert(T.conns, input_end_conn)