Run it
Copy the script and paste it into your executor.
Players = :()
RunService = :()
UserInputService = :()
player = Players.LocalPlayer
playerGui = player:()
mainCam = .CurrentCamera
TEAM_CHECK =
WALL_CHECK =
W =
H =
BAR =
GAP =
PAD_RIGHT =
PAD_TOP =
CONFIGS = {
{name = , angle = .( )},
{name = , angle = .()},
{name = , angle = .(-)},
}
CIRCLE_BASE =
CIRCLE_MIN =
CIRCLE_MAX =
MAX_CIRCLES =
BANNER_H =
BANNER_GAP =
WIN1_Y = PAD_TOP + BANNER_H + BANNER_GAP
gui = .()
gui.Name =
gui.ResetOnSpawn =
gui.ZIndexBehavior = .ZIndexBehavior.Sibling
gui.IgnoreGuiInset =
gui.Parent = playerGui
BANNER_W =
topBanner = .()
topBanner.Name =
topBanner.Size = .(, BANNER_W, , BANNER_H)
topBanner.Position = .(, -BANNER_W / , , PAD_TOP)
topBanner.BackgroundColor3 = .(, , )
topBanner.BorderSizePixel =
topBanner.ZIndex =
topBanner.Visible =
topBanner.Parent = gui
.(, topBanner).CornerRadius = .(, )
bStroke = .(, topBanner)
bStroke.Color = .(, , ); bStroke.Thickness =
bIcon = .(, topBanner)
bIcon.Size = .(, , , ); bIcon.Position = .(, , , )
bIcon.BackgroundTransparency = ; bIcon.Text =
bIcon.TextColor3 = .(, , ); bIcon.Font = .Font.GothamBold
bIcon.TextSize = ; bIcon.ZIndex =
bannerLabel = .(, topBanner)
bannerLabel.Size = .(, -, , )
bannerLabel.Position = .(, , , )
bannerLabel.BackgroundTransparency =
bannerLabel.Text =
bannerLabel.TextColor3 = .(, , )
bannerLabel.Font = .Font.GothamBold
bannerLabel.TextSize =
bannerLabel.TextXAlignment = .TextXAlignment.Left
bannerLabel.TextTruncate = .TextTruncate.AtEnd
bannerLabel.ZIndex =
settingLbl = .(, topBanner)
settingLbl.Size = .(, , , )
settingLbl.Position = .(, -, , )
settingLbl.BackgroundTransparency =
settingLbl.Font = .Font.Gotham
settingLbl.TextSize =
settingLbl.TextXAlignment = .TextXAlignment.Right
settingLbl.ZIndex =
()
tc = TEAM_CHECK
wc = WALL_CHECK
tcColor = TEAM_CHECK
wcColor = WALL_CHECK
settingLbl.Text = tc .. .. wc
settingLbl.TextColor3 = .(, , )
()
drag =
UserInputService.InputChanged:((inp)
drag inp.UserInputType == .UserInputType.MouseMovement
d = inp.Position - drag.startMouse
drag.frame.Position = .(
, drag.startPos.X.Offset + d.X,
, drag.startPos.Y.Offset + d.Y
)
)
UserInputService.InputEnded:((inp)
inp.UserInputType == .UserInputType.MouseButton1 drag =
)
(parent)
c = .(, parent)
c.BackgroundTransparency = ; c.BorderSizePixel =
c.ZIndex = ; c.Visible = ; c.AnchorPoint = .(, )
.(, c).CornerRadius = .(, )
st = .(, c)
st.Color = .(, , ); st.Thickness =
nl = .(, c)
nl.Name = ; nl.Size = .(, , , )
nl.Position = .(-, , , )
nl.BackgroundTransparency =
nl.TextColor3 = .(, , )
nl.Font = .Font.GothamBold; nl.TextSize =
nl.Text = ; nl.TextTruncate = .TextTruncate.AtEnd; nl.ZIndex =
c, nl
windows = {}
(cfg, idx)
py = WIN1_Y + (idx - ) * (H + BAR + GAP)
frame = .()
frame.Name = ..idx
frame.Size = .(, W, , H + BAR)
frame.Position = .(, -(W + PAD_RIGHT), , py)
frame.BackgroundColor3 = .(,,)
frame.BorderSizePixel = ; frame.ZIndex = ; frame.ClipsDescendants =
frame.Parent = gui
.(, frame).CornerRadius = .(, )
fst = .(, frame)
fst.Color = .(,,); fst.Thickness = ; fst.Transparency =
bar = .(, frame)
bar.Name = ; bar.Size = .(,,,BAR)
bar.BackgroundColor3 = .(,,); bar.BorderSizePixel = ; bar.ZIndex =
.(, bar).CornerRadius = .(, )
fix = .(, bar)
fix.Size = .(,,,); fix.Position = .(,,,)
fix.BackgroundColor3 = .(,,); fix.BorderSizePixel = ; fix.ZIndex =
nameLbl = .(, bar)
nameLbl.Size = .(,,,); nameLbl.Position = .(,,,)
nameLbl.BackgroundTransparency = ; nameLbl.Text = cfg.name
nameLbl.TextColor3 = .(,,); nameLbl.Font = .Font.GothamBold
nameLbl.TextSize = ; nameLbl.TextXAlignment = .TextXAlignment.Left; nameLbl.ZIndex =
fovLbl = .(, bar)
fovLbl.Size = .(,,,); fovLbl.Position = .(,,,)
fovLbl.BackgroundTransparency = ; fovLbl.Text =
fovLbl.TextColor3 = .(,,); fovLbl.Font = .Font.Gotham
fovLbl.TextSize = ; fovLbl.TextXAlignment = .TextXAlignment.Left; fovLbl.ZIndex =
closeBtn = .(, bar)
closeBtn.Size = .(,,,); closeBtn.Position = .(,-,,)
closeBtn.BackgroundColor3 = .(,,); closeBtn.Text =
closeBtn.TextColor3 = .(,,); closeBtn.Font = .Font.GothamBold
closeBtn.TextSize = ; closeBtn.BorderSizePixel = ; closeBtn.ZIndex =
.(, closeBtn).CornerRadius = .(, )
vp = .(, frame)
vp.Name = ; vp.Size = .(,,,-BAR); vp.Position = .(,,,BAR)
vp.BackgroundColor3 = .(,,); vp.BorderSizePixel =
vp.LightColor = .(,,); vp.LightDirection = .(-,-,-)
vp.Ambient = .(,,); vp.ZIndex = ; vp.ClipsDescendants =
.(, vp).CornerRadius = .(, )
cc = .(, vp)
cc.Name = ; cc.Size = .(,,,)
cc.BackgroundTransparency = ; cc.BorderSizePixel = ; cc.ZIndex =
circles = {}
i = , MAX_CIRCLES
c, nl = (cc)
circles[i] = {frame = c, nl = nl}
worldModel = .(, vp)
vpCam = .()
vpCam.CameraType = .CameraType.Scriptable
vpCam.FieldOfView = mainCam.FieldOfView
vpCam.CFrame = mainCam.CFrame
vpCam.Parent = vp; vp.CurrentCamera = vpCam
bar.InputBegan:((inp)
inp.UserInputType == .UserInputType.MouseButton1
drag = {frame = frame, startMouse = inp.Position, startPos = frame.Position}
)
reopenBtn = .(, gui)
reopenBtn.Size = .(,W,,)
reopenBtn.Position = .(, -(W+PAD_RIGHT), , py)
reopenBtn.BackgroundColor3 = .(,,)
reopenBtn.Text = cfg.name..
reopenBtn.TextColor3 = .(,,); reopenBtn.Font = .Font.GothamBold
reopenBtn.TextSize = ; reopenBtn.BorderSizePixel = ; reopenBtn.Visible = ; reopenBtn.ZIndex =
.(, reopenBtn).CornerRadius = .(, )
closeBtn.MouseButton1Click:(()
frame.Visible = ; reopenBtn.Visible =
)
reopenBtn.MouseButton1Click:(()
frame.Visible = ; reopenBtn.Visible =
)
windows[idx] = {
name = cfg.name, frame = frame, vpCam = vpCam, vp = vp,
worldModel = worldModel, fovLbl = fovLbl, angle = cfg.angle,
circles = circles, hasPlayer = ,
}
i, cfg (CONFIGS) (cfg, i)
(wm)
cs = {}
_, p (Players:())
p.Character cs[p.Character] =
_, obj (:())
obj:() obj:() cs[obj] obj.Archivable
ok, clone = (() obj:() )
ok clone
_, s (clone:())
s:() s:() s:()
(() s:() )
clone.Parent = wm
charData = {}
(real, clone)
m = {}
_, rp (real:())
rp:()
cp = clone:(rp.Name, )
cp cp:() m[rp] = cp
m
(p, char)
char
.()
char.Parent
char.Archivable =
_, d (char:()) (() d.Archivable = )
uid = (p.UserId)
charData[uid]
_, c (charData[uid].clones) (() c:() )
charData[uid] =
data = {realChar = char, clones = {}, partMap = {}}
charData[uid] = data
_, win (windows)
ok, clone = (() char:() )
ok clone
_, s (clone:())
s:() s:() s:()
(() s:() )
_, part (clone:())
part:()
part.LocalTransparencyModifier =
part.Transparency = .(part.Transparency, )
clone.Name = ..uid; clone.Parent = win.worldModel
data.clones[win.worldModel] = clone
data.partMap[win.worldModel] = (char, clone)
(p)
uid = (p.UserId)
charData[uid]
_, c (charData[uid].clones) (() c:() )
charData[uid] =
_, p (Players:())
p.Character .(addChar, p, p.Character)
p.CharacterAdded:((c) (p, c) )
p.CharacterRemoving:(() (p) )
Players.PlayerAdded:((p)
p.CharacterAdded:((c) (p, c) )
p.CharacterRemoving:(() (p) )
)
Players.PlayerRemoving:((p) (p) )
.(()
player.Character player.CharacterAdded:()
player.Character:(, )
.()
_, win (windows) (win.worldModel)
)
player.CharacterAdded:((char)
char:(, )
.()
_, win (windows)
_, child (win.worldModel:())
.(child.Name, ) child:()
(win.worldModel)
)
raycastParams = RaycastParams.()
raycastParams.FilterType = .RaycastFilterType.Exclude
(targetHRP)
myChar = player.Character
myChar
myHRP = myChar:()
myHRP
exclude = {myChar, targetHRP.Parent}
raycastParams.FilterDescendantsInstances = exclude
origin = myHRP.Position
direction = targetHRP.Position - origin
result = :(origin, direction, raycastParams)
result ==
(p, hrp)
p == player
TEAM_CHECK player.Team == p.Team
WALL_CHECK (hrp)
(vpCam, vp, worldPos)
sp, onScreen = vpCam:(worldPos)
onScreen sp.Z <= ,
vs = vpCam.ViewportSize
vs.X == vs.Y == ,
rx, ry = sp.X / vs.X, sp.Y / vs.Y
rx < rx > ry < ry > ,
ab = vp.AbsoluteSize
.(rx * ab.X, ry * ab.Y), sp.Z
RunService.RenderStepped:(()
cf = mainCam.CFrame
fov = mainCam.FieldOfView
_, win (windows)
win.hasPlayer =
win.frame.Visible
win.vpCam.CFrame = cf * .(, win.angle, )
win.vpCam.FieldOfView = fov
win.fovLbl.Text = .. (.(fov + ))
_, data (charData)
rc = data.realChar
rc rc.Parent
_, win (windows)
win.frame.Visible
pm = data.partMap[win.worldModel]
pm
rp, cp (pm)
rp.Parent cp.Parent
cp.CFrame = rp.CFrame
cp.LocalTransparencyModifier =
_, win (windows)
win.frame.Visible
_, c (win.circles) c.frame.Visible =
ci =
_, p (Players:())
p.Character
hrp = p.Character:()
hrp (p, hrp)
pos2D, depth = (win.vpCam, win.vp, hrp.Position)
pos2D
ci = ci +
ci <= MAX_CIRCLES
obj = win.circles[ci]
r = .(CIRCLE_BASE * ( / .(depth, )), CIRCLE_MIN, CIRCLE_MAX)
obj.frame.Size = .(, r*, , r*)
obj.frame.Position = .(, pos2D.X, , pos2D.Y)
obj.frame.Visible =
obj.nl.Text = p.DisplayName
win.hasPlayer =
i = ci + , MAX_CIRCLES win.circles[i].frame.Visible =
found = {}
_, win (windows)
win.hasPlayer .(found, win.name)
#found >
topBanner.Visible =
bannerLabel.Text = .. .(found, )
topBanner.Visible =
)
()
( .. (TEAM_CHECK))
( .. (WALL_CHECK))
Universal