Run it
Copy the script and paste it into your executor.
v2 = .new
v3 = .new
rgb = .fromRGB
sin = .sin
abs = .abs
floor = .floor
random = .random
insert = .insert
remove = .remove
rs = :()
plrs = :()
uis = :()
lp = plrs.LocalPlayer
cam = .CurrentCamera
enabled =
movingmode =
hudoffset = (, )
dragstart =
indicators = {}
healthcache = {}
recenthits = {}
kills =
deaths =
dmghistory = {}
totaldamage =
gridsize =
lastentityscan =
lastplayerscan =
lastraycast =
lastdpsclean =
entityscanrate =
playerscannrate =
raycastrate =
dpscleanrate =
cacheddps =
raycastparams = RaycastParams.()
raycastparams.FilterType = .RaycastFilterType.Exclude
draw =
panel = draw.()
panel.Size = (, )
panel.Color = (, , )
panel.Filled =
panel.Transparency =
panel.Visible =
accent = draw.()
accent.Thickness =
accent.Color = (, , )
accent.Transparency =
accent.Visible =
dpsnum = draw.()
dpsnum.Text =
dpsnum.Size =
dpsnum.Color = (, , )
dpsnum.Font =
dpsnum.Outline =
dpsnum.Visible =
dpslabel = draw.()
dpslabel.Text =
dpslabel.Size =
dpslabel.Color = (, , )
dpslabel.Font =
dpslabel.Outline =
dpslabel.Visible =
totalnum = draw.()
totalnum.Text =
totalnum.Size =
totalnum.Color = (, , )
totalnum.Font =
totalnum.Outline =
totalnum.Visible =
totallabel = draw.()
totallabel.Text =
totallabel.Size =
totallabel.Color = (, , )
totallabel.Font =
totallabel.Outline =
totallabel.Visible =
kdnum = draw.()
kdnum.Text =
kdnum.Size =
kdnum.Color = (, , )
kdnum.Font =
kdnum.Outline =
kdnum.Visible =
kdlabel = draw.()
kdlabel.Text =
kdlabel.Size =
kdlabel.Color = (, , )
kdlabel.Font =
kdlabel.Outline =
kdlabel.Visible =
ratiotext = draw.()
ratiotext.Text =
ratiotext.Size =
ratiotext.Color = (, , )
ratiotext.Font =
ratiotext.Outline =
ratiotext.Visible =
combobg = draw.()
combobg.Size = (, )
combobg.Color = (, , )
combobg.Filled =
combobg.Transparency =
combobg.Visible =
combonum = draw.()
combonum.Text =
combonum.Size =
combonum.Color = (, , )
combonum.Font =
combonum.Outline =
combonum.Center =
combonum.Visible =
combolabel = draw.()
combolabel.Text =
combolabel.Size =
combolabel.Color = (, , )
combolabel.Font =
combolabel.Outline =
combolabel.Center =
combolabel.Visible =
dragoutline = draw.()
dragoutline.Size = (, )
dragoutline.Color = (, , )
dragoutline.Filled =
dragoutline.Transparency =
dragoutline.Thickness =
dragoutline.Visible =
combo =
lastcombo =
(val)
(val / gridsize) * gridsize
(pos, dmg, crit)
ind = {
pos = pos,
dmg = dmg,
time = ,
max = ,
crit = crit,
vel = ((-, ), (, ), (-, ))
}
txt = draw.()
txt.Text = ((dmg))
txt.Size = crit
txt.Color = crit (, , ) (, , )
txt.Font =
txt.Outline =
txt.Center =
txt.Visible =
ind.txt = txt
(indicators, ind)
(dt)
i = #indicators, , -
ind = indicators[i]
ind.time = ind.time + dt
ind.pos = ind.pos + ind.vel * dt
ind.vel = ind.vel + (, - * dt, )
sp, vis = cam:(ind.pos)
vis
ind.txt.Position = (sp.X, sp.Y)
ind.txt.Transparency = - (ind.time / ind.max)
ind.txt.Size = (ind.crit ) * ( + ind.time * )
ind.txt.Visible =
ind.txt.Visible =
ind.time >= ind.max
ind.txt:()
(indicators, i)
()
total =
i = , #dmghistory
total = total + dmghistory[i].d
total
()
now = ()
dmghistory[] (now - dmghistory[].t > )
(dmghistory, )
()
lp.Character
raycastparams.FilterDescendantsInstances = {lp.Character}
mouse = lp:()
origin = cam.CFrame.Position
mousepos = mouse.Hit.Position
dir = (mousepos - origin).Unit *
result = :(origin, dir, raycastparams)
result
part = result.Instance
char = part:()
char char ~= lp.Character
hum = char:()
hum hum.Health >
char.Name:()
recenthits[char] = ()
char
(entity)
entity == lp.Character
healthcache[entity]
h = entity:()
h
healthcache[entity] = {last = h.Health}
h.HealthChanged:((newhealth)
cache = healthcache[entity]
cache
dmg = cache.last - newhealth
dmg >
now = ()
recenthits[entity] (now - recenthits[entity]) <
root = entity:()
entity:()
entity:()
entity:()
root
crit = dmg >
(root.Position + (, , ), dmg, crit)
combo = combo +
lastcombo = now
totaldamage = totaldamage + dmg
(dmghistory, {d = dmg, t = now})
newhealth <=
kills = kills +
recenthits[entity] =
cache.last = newhealth
)
()
_, p (plrs:())
p ~= lp p.Character
(p.Character)
()
playerchars = {}
_, p (plrs:())
p.Character
playerchars[p.Character] =
(container)
container
_, obj (container:())
obj:() playerchars[obj]
hum = obj:()
hum hum.Health >
(obj)
(:())
(:())
(:())
()
ss = cam.ViewportSize
px, py
movingmode dragstart
mouse = uis:()
px = (mouse.X - dragstart.X)
py = (mouse.Y - dragstart.Y)
px = .(px, , ss.X - )
py = .(py, , ss.Y - )
px = ss.X - + hudoffset.X
py = + hudoffset.Y
panel.Position = (px, py)
accent.From = (px, py + )
accent.To = (px + , py + )
dpsnum.Position = (px + , py - )
dpslabel.Position = (px + , py + )
totalnum.Position = (px + , py + )
totallabel.Position = (px + , py + )
kdnum.Position = (px + , py + )
kdlabel.Position = (px + , py + )
ratiotext.Position = (px + , py + )
movingmode
dragoutline.Position = (px, py)
dragoutline.Visible =
dragoutline.Visible =
cx = ss.X / -
cy =
combobg.Position = (cx, cy)
combonum.Position = (cx + , cy + )
combolabel.Position = (cx + , cy + )
()
()
enabled
panel.Visible =
accent.Visible =
dpsnum.Visible =
dpslabel.Visible =
totalnum.Visible =
totallabel.Visible =
kdnum.Visible =
kdlabel.Visible =
ratiotext.Visible =
combobg.Visible =
combonum.Visible =
combolabel.Visible =
panel.Visible =
accent.Visible =
dpsnum.Visible =
dpslabel.Visible =
totalnum.Visible =
totallabel.Visible =
kdnum.Visible =
kdlabel.Visible =
ratiotext.Visible =
dpsnum.Text = ((cacheddps))
totalnum.Text = ((totaldamage))
kd = deaths > (kills / deaths) kills
kdnum.Text = .(, kd)
kdnum.Color = kd > (, , ) kd > (, , ) (, , )
ratiotext.Text = .(, kills, deaths)
combo >
combobg.Visible =
combonum.Visible =
combolabel.Visible =
combonum.Text = (combo)
p = ((() * ))
combonum.Color = (, + p * , )
combobg.Visible =
combonum.Visible =
combolabel.Visible =
()
combo > () - lastcombo >
combo =
lp.Character
hum = lp.Character:()
hum
hum.Died:(()
deaths = deaths +
)
lp.CharacterAdded:((char)
char:().Died:(()
deaths = deaths +
)
)
plrs.PlayerAdded:((p)
p.CharacterAdded:((char)
.()
(char)
)
)
uis.InputBegan:((inp, gp)
gp
inp.KeyCode == .KeyCode.F5
enabled = enabled
inp.KeyCode == .KeyCode.F6
movingmode = movingmode
movingmode
mouse = uis:()
ss = cam.ViewportSize
currentx = ss.X - + hudoffset.X
currenty = + hudoffset.Y
dragstart = (mouse.X - currentx, mouse.Y - currenty)
dragstart
mouse = uis:()
ss = cam.ViewportSize
newx = (mouse.X - dragstart.X)
newy = (mouse.Y - dragstart.Y)
newx = .(newx, , ss.X - )
newy = .(newy, , ss.Y - )
hudoffset = (newx - (ss.X - ), newy - )
dragstart =
)
rs.Heartbeat:((dt)
now = ()
mousedown = uis:(.UserInputType.MouseButton1)
mousedown (now - lastraycast) >= raycastrate
()
lastraycast = now
now - lastplayerscan >= playerscannrate
()
lastplayerscan = now
now - lastentityscan >= entityscanrate
()
lastentityscan = now
now - lastdpsclean >= dpscleanrate
()
cacheddps = ()
lastdpsclean = now
()
)
rs.RenderStepped:((dt)
(dt)
()
)
.(()
playerchars = {}
_, p (plrs:())
p.Character
playerchars[p.Character] =
descendants = :()
chunk =
i = , #descendants, chunk
j = i, .(i + chunk - , #descendants)
obj = descendants[j]
obj:() playerchars[obj]
hum = obj:()
hum hum.Health >
(obj)
.()
lastentityscan = ()
)
()tracks dps, total damage, and kd. only works with games using the normal roblox humanoid health

Universal