null nil false Health function waitForChild(parent, childName) local child = parent:findFirstChild(childName) if child then return child end while true do child = parent.ChildAdded:wait() if child.Name==childName then return child end end end -- declarations local Figure = script.Parent local Head = waitForChild(Figure, "Head") local Humanoid = waitForChild(Figure, "Humanoid") local regening = false -- regeneration function regenHealth() if regening then return end regening = true while Humanoid.Health < Humanoid.MaxHealth do local s = wait(1) local health = Humanoid.Health if health > 0 and health < Humanoid.MaxHealth then local newHealthDelta = 0.01 * s * Humanoid.MaxHealth health = health + newHealthDelta Humanoid.Health = math.min(health,Humanoid.MaxHealth) end end if Humanoid.Health > Humanoid.MaxHealth then Humanoid.Health = Humanoid.MaxHealth end regening = false end Humanoid.HealthChanged:connect(regenHealth) true false HealthScript v3.1 local HealthGUI_prototype = script:FindFirstChild("HealthGUI") local lastHealth = 100 local lastHealth2 = 100 local maxWidth = 0.96 local humanoid = script.Parent.Humanoid if (humanoid == nil) then print("ERROR: no humanoid found in 'HealthScript v3.1'") end function CreateGUI() local p = game.Players:GetPlayerFromCharacter(humanoid.Parent) HealthGUI_prototype.Parent = p.PlayerGui end function UpdateGUI(health) tray = HealthGUI_prototype.tray local width = (health / humanoid.MaxHealth) * maxWidth local height = 0.83 local lastX = tray.bar.Position.X.Scale local x = 0.019 + (maxWidth - width) local y = 0.1 tray.bar.Position = UDim2.new(x ,0, y, 0) tray.bar.Size = UDim2.new(width, 0, height, 0) -- If more than 1/4 health, bar = green. Else, bar = red. if( (health / humanoid.MaxHealth) > 0.25 ) then tray.barRed.Size = UDim2.new(0, 0, 0, 0) else tray.barRed.Position = tray.bar.Position tray.barRed.Size = tray.bar.Size tray.bar.Size = UDim2.new(0, 0, 0, 0) end if ( (lastHealth - health) > (humanoid.MaxHealth / 10) ) then lastHealth = health if humanoid.Health ~= humanoid.MaxHealth then delay(0,function() AnimateHurtOverlay() end) delay(0,function() AnimateBars(x, y, lastX, height) end) end else lastHealth = health end end function HealthChanged(health) UpdateGUI(health) if ( (lastHealth2 - health) > (humanoid.MaxHealth / 10) ) then lastHealth2 = health else lastHealth2 = health end end function AnimateBars(x, y, lastX, height) tray = HealthGUI_prototype.tray local width = math.abs(x - lastX) if( x > lastX ) then x = lastX end tray.bar2.Position = UDim2.new(x,0, y, 0) tray.bar2.Size = UDim2.new(width, 0, height, 0) tray.bar2.BackgroundTransparency = 0 local GBchannels = 1 local j = 0.2 local i_total = 30 for i=1,i_total do -- Increment Values if (GBchannels < 0.2) then j = -j end GBchannels = GBchannels + j if (i > (i_total - 10)) then tray.bar2.BackgroundTransparency = tray.bar2.BackgroundTransparency + 0.1 end tray.bar2.BackgroundColor3 = Color3.new(1, GBchannels, GBchannels) wait(0.02) end end function AnimateHurtOverlay() -- Start: -- overlay.Position = UDim2.new(0, 0, 0, -22) -- overlay.Size = UDim2.new(1, 0, 1.15, 30) -- Finish: -- overlay.Position = UDim2.new(-2, 0, -2, -22) -- overlay.Size = UDim2.new(4.5, 0, 4.65, 30) overlay = HealthGUI_prototype.hurtOverlay overlay.Position = UDim2.new(-2, 0, -2, -22) overlay.Size = UDim2.new(4.5, 0, 4.65, 30) -- Animate In, fast local i_total = 2 local wiggle_total = 0 local wiggle_i = 0.02 for i=1,i_total do overlay.Position = UDim2.new( (-2 + (2 * (i/i_total)) + wiggle_total/2), 0, (-2 + (2 * (i/i_total)) + wiggle_total/2), -22 ) overlay.Size = UDim2.new( (4.5 - (3.5 * (i/i_total)) + wiggle_total), 0, (4.65 - (3.5 * (i/i_total)) + wiggle_total), 30 ) wait(0.01) end i_total = 30 wait(0.03) -- Animate Out, slow for i=1,i_total do if( math.abs(wiggle_total) > (wiggle_i * 3) ) then wiggle_i = -wiggle_i end wiggle_total = wiggle_total + wiggle_i overlay.Position = UDim2.new( (0 - (2 * (i/i_total)) + wiggle_total/2), 0, (0 - (2 * (i/i_total)) + wiggle_total/2), -22 ) overlay.Size = UDim2.new( (1 + (3.5 * (i/i_total)) + wiggle_total), 0, (1.15 + (3.5 * (i/i_total)) + wiggle_total), 30 ) wait(0.01) end -- Hide after we're done overlay.Position = UDim2.new(10, 0, 0, 0) end CreateGUI() humanoid.HealthChanged:connect(HealthChanged) humanoid.Died:connect(function() HealthChanged(0) end) true HealthGUI true false 4290164919 1 4279970357 1 false http://www.roblox.com/asset/?id=34854607 hurtOverlay 2 0 0 -22 1 0 1.1500001 30 0 true 1 true false 4285215356 1 4279970357 1 false tray 0.5 -44 1 -26 0 170 0 18 2 0 true 1 true false 4294967295 1 4279970357 1 false http://www.roblox.com/asset/?id=35238000 bkg 0 0 0 0 1 0 1 0 0 true 1 true false 4294967295 1 4279970357 1 false http://www.roblox.com/asset/?id=35238036 barRed 0.0189999994 0 0.100000001 0 0 0 0 0 0 true 1 true false 4294967295 1.00000012 4279970357 0 false bar2 0.0189999994 0 0.100000001 0 0.192000002 0 0.829999983 0 0 0 true 1 true false 4294967295 1 4279970357 1 false http://www.roblox.com/asset/?id=35238053 bar 0.0189999994 0 0.100000001 0 0.959999979 0 0.829999983 0 0 true 1 true false 4294967295 1 4279970357 0 false http://www.roblox.com/asset/?id=34816363 label 0.680000007 0 0.300000012 0 0.25 0 0.349999994 0 0 true 1 true