Super-Nostalgia-Zone/Client/HumanoidLabels/init.client.lua

134 lines
3.1 KiB
Lua

local humanoids = {}
local player = game.Players.LocalPlayer
local pgui = player:WaitForChild("PlayerGui")
local healthBase = script:WaitForChild("Health")
local rs = game:GetService("RunService")
local farStudsOffset = Vector3.new(0,2,0)
local closeStudsOffset = Vector3.new(0,1,0)
local farSize = UDim2.new(0, 50, 0, 20)
local closeSize = UDim2.new(0, 100, 0, 30)
local function isFinite(num)
return num == num and num ~= -1/0 and num ~= 1/0
end
local function setupHumanoid(h)
local updateCon = nil
local currentHealth = nil
local function onAncestryChanged()
if updateCon then
updateCon:disconnect()
updateCon = nil
end
if currentHealth then
currentHealth:Destroy()
currentHealth = nil
end
local char = h.Parent
if char then
while not char:FindFirstChild("Head") do
if h.Parent ~= char then
break
end
char.ChildAdded:Wait()
end
local head = char:FindFirstChild("Head")
if head then
local health = healthBase:Clone()
local playerName = health:WaitForChild("PlayerName")
local redBar = health:WaitForChild("RedBar")
local greenBar = redBar:WaitForChild("GreenBar")
local inOverWrite = false
local overWriter = nil
local hPlayer = game.Players:GetPlayerFromCharacter(char)
playerName.Text = char.Name
health.Adornee = head
health.PlayerToHideFrom = hPlayer
health.Parent = head
local c = workspace.CurrentCamera
local function update()
local dist = (c.CFrame.p - head.Position).magnitude
local fontSize = 12
if dist < 20 then
fontSize = 24
elseif dist < 50 then
fontSize = 18
end
local ratio = h.Health / h.MaxHealth
redBar.Visible = isFinite(ratio)
redBar.BackgroundTransparency = math.floor(ratio)
redBar.Size = UDim2.new(0, fontSize * 4, 0, fontSize / 2)
greenBar.Size = UDim2.new(ratio, 0, 1, 0)
local width = fontSize * 4
health.Size = UDim2.new(0, width, 0, fontSize)
health.Enabled = (dist <= 100 and head.Transparency < 1)
health.StudsOffsetWorldSpace = Vector3.new(0, 1.5, 0)
if hPlayer and game:FindService("Teams") then
playerName.TextColor = hPlayer.TeamColor
else
playerName.TextColor3 = Color3.new(1, 1, 1)
end
local overWriter = char:FindFirstChild("NameOverwrite")
if overWriter and overWriter:IsA("StringValue") then
playerName.Text = overWriter.Value
else
playerName.Text = char.Name
end
end
updateCon = rs.RenderStepped:Connect(update)
currentHealth = health
h.DisplayDistanceType = "None"
end
end
end
onAncestryChanged()
h.AncestryChanged:Connect(onAncestryChanged)
end
for _,desc in pairs(workspace:GetDescendants()) do
if desc:IsA("Humanoid") then
humanoids[desc] = true
end
end
for h in pairs(humanoids) do
humanoids[h] = true
spawn(function ()
setupHumanoid(h)
end)
end
local function onDescendantAdded(child)
if child:IsA("Humanoid") then
humanoids[child] = true
setupHumanoid(child)
end
end
for _,desc in pairs(workspace:GetDescendants()) do
onDescendantAdded(desc)
end
workspace.DescendantAdded:Connect(onDescendantAdded)