Which way will be more optimal for creating custom health bars?

I’m currently working on a game in-which I have designed two ways to create custom health bars, but I’m not sure which one would be more optimal causing less lag/latency, or if it even matters.

Design 1(Locally): One local script for each player that goes through all NPCS and Players and edits their health bar locally for that player. (Could also only edit if the NPC or Player is a certain range from the Local Player)

Design 2(Server): A server script inside each individual NPC and Player that edits their health bar for everyone.

Design 3(Other): Suggest an Alternative

Extra Notes:
These health bars would be BillBoard Guis above the NPC/Player’s head.
There will be 25 Player servers with at the minimum 30 NPCS.
I’m still using the humanoid Health I just want to have a custom health bar display that I can edit and have more freedom with. (EX: Having shields visualized by a grey piece in the health bar)

I see no reason why you shouldn’t change the billboard gui server-side.

So you don’t want to use the the Humanoid’s Health and create your own health system?

I’m worried that having to constantly check through 50+ instances on the client and then editing it might make the game laggy for lower end specs, though again I’m really not good in knowing/telling the difference between server and local script performance cost.

I’m still using the humanoid Health I just want to have a custom health bar display that I can edit and have more freedom with. (EX: Having shields visualized by a grey part in the health bar)

Why would you do this…? Just connect a function which updates the billboard to an event signal such as Humanoid.HealthChanged etc. ?

I’m not 100% sure how ROBLOX’s Server->Client system works. But, If the server is updating it, The client has to recieve the information from the server, then update it locally, So technically the client has to search the game for that specific item, Which will update items from a mile away probably. Again, i’m not fully sure how to works, If i’m wrong please do correct. I personally let the client handle stuff like this. It won’t be detrimental if they manipulate it.

I don’t want to just have just the health displayed, in my game there are shields that can be given to players/npcs that block damage, however this shield is stored in a value that my attack scripts subtract from before dealing damage. This is why I can’t do Humanoid.HealthChanged as I want to visualize the Shield within the health bar. (Grey bar added to health)

You still would connect an “update billboard” function to a “value changed” event signal. Not constantly check the values like you proposed.