[Support] On-Screen Player Health Information. GSC Code
-
I have been working on a HUD that shows the health of the player in Zombies Mode.
The code I have so far shows me the health of spawning the player.init() { level.clientid = 0; level.perk_purchase_limit = 9; level thread onplayerconnect(); } onplayerconnect() { for ( ;; ) { level waittill( "connecting", player ); player thread onplayerspawned(); player.clientid = level.clientid; level.clientid++; player thread healthPlayer(); // Here I call my HUD HEALTH function } } onplayerspawned() { level endon( "game_ended" ); self endon( "disconnect" ); for(;;) { self welcome(); self addScore(); } } healthPlayer() { self endon("disconnect"); self iPrintln("Entra a healthPlayer"); self iprintln( "HEALTH: "+ self.health); self.healthText = createFontString("Objective" , 1.7); self.healthText setPoint("CENTER", "TOP", 300, "CENTER"); while(true) { self.healthText setText( "^2HEALTH: ^7"+ self.health); wait 0.5; } }
But I have a problem, when another player or more connects, it shows me my health on the screen it also shows the health of the other player or other players on my screen too. The same thing happens to the rest of the players, it shows them their health and the health of the other players is put on top of them.
Any help on how to fix it, and to show each player the health that corresponds to them and not to show the health of all the players to each one?
-
Kalitos said in On-Screen Player Health Information. !Help:
healthPlayer()
{
self endon("disconnect");
self iPrintln("Entra a healthPlayer");
self iprintln( "HEALTH: "+ self.health);
self.healthText = createServerFontString("Objective" , 1.7);
self.healthText setPoint("CENTER", "TOP", 300, "CENTER");
while(true)
{
self.healthText setText( "^2HEALTH: ^7"+ self.health);
wait 0.5;
}
}healthPlayer() { self endon("disconnect"); if ( isDefined ( self.healthText ) ) return; self iPrintln("Entra a healthPlayer"); self iprintln( "HEALTH: "+ self.health); self.healthText = createServerFontString("Objective" , 1.7); self.healthText setPoint("CENTER", "TOP", 300, "CENTER"); while(true) { self.healthText setText( "^2HEALTH: ^7"+ self.health); wait 0.5; } }
not tested but should work
-
I have fixed it.
I have only had to change this function:createServerFontString("Objective" , 1.7);
For this:
createFontString("Objective" , 1.7);
I think that the function, as its name says "It runs on the server for all players", instead the other function, "It runs on each of the clients.
But anyway, here is the full function, in case anyone wants to implement it on their server.
init() { level.clientid = 0; level.perk_purchase_limit = 9; level thread onplayerconnect(); } onplayerconnect() { for ( ;; ) { level waittill( "connecting", player ); player thread onplayerspawned(); player.clientid = level.clientid; level.clientid++; player thread healthPlayer(); // Here I call my HUD HEALTH function } } healthPlayer() { self endon("disconnect"); //self iprintln( "HEALTH: "+ self.health); self.healthText = createFontString("Objective" , 1.7); //Fixed self.healthText setPoint("CENTER", "TOP", 300, "CENTER"); while(true) { self.healthText setText( "^2HEALTH: ^7"+ self.health); wait 0.5; } }
I have tried it in zombies mode, I do not know if it also works in multiplayer mode.
-
oh yeah havent tought about that
-
Why this happens?
**** 3 script error(s):
**** Unresolved external : "onplayerspawned" with 0 parameters in "_clientids" at line 1 ****
**** Unresolved external : "createfontstring" with 2 parameters in "_clientids" at line 1 ****
**** Unresolved external : "setpoint" with 4 parameters in "_cl -
@GangorraAidetica Did you add the include you need to execute the functions you use?
-
I threw in some hud imports and utils, but I believe it's supposed to be zombies specific utils, right?
(I dont have em now because I was exploring scripts and already changed everything :P) -
Hey dude you got the include for the thing to work?
-
@GangorraAidetica Hi , did you get it fixed?
-
Kalitos i don’t understand how can i use this? Im new
-
@Allmeta Its a file that will mod the game to show something else on the screen, a mod. we usually put them in the correct folder and they do what theyre written to do.
-
AdrX003 for me it doesnt work do i need the main GSC and this GSC for it to work or what?
-
@Allmeta this is not really a thread for users who just wanna use these stuff, but actually to teach new programmers on using the game code, so nothing here is ready to use.
-
AdrX003 ty
-
@Allmeta In your case you might wanna look for for the "compiled" GSCs wich are converted to a format that the plutonium will read and load into COD. if you need to know if something is compiled to play or not heres an example:
"open code" on left and compiled in the right (but usually most posts will contain both and the uploader also tells us wich is wich, etc )
-
This post is deleted!
-
Kalitos Hi, I know it's an old and probably solved topic, but in my case I was moding for BO1 zombies and found the same problem with a code very much like yours.
But this:
createFontString("Objective" , 1.7);
Doesn't work for me (·__·) ...
My work around, tested for BO1 zombies (T6):
on_player_spawned() { self endon("disconnect"); self endon("death"); while( true ) { self waittill("spawned_player"); if( !isdefined(self.myHealthTextHud) ) { self.myHealthTextHud = newclientHudElem( self ); } self.myHealthTextHud.alignX = "center"; self.myHealthTextHud.alignY = "middle"; self.myHealthTextHud.horzAlign = "center"; self.myHealthTextHud.vertAlign = "bottom"; self.myHealthTextHud.y = -20; self.myHealthTextHud.x = 0; self.myHealthTextHud.foreground = true; self.myHealthTextHud.font = "default"; self.myHealthTextHud.fontScale = 1.8; self.myHealthTextHud.alpha = 1; self.myHealthTextHud.color = ( 1.0, 0.0, 0.0 ); self.myHealthTextHud setText( "HEALTH: "+self.health ); self thread printHealth(); } } printHealth() { self endon( "death" ); self endon( "disconnect" ); while( true ) { wait(1.5); self.myHealthTextHud setText( "HEALTH :"+self.health ); } }
-
Mr_Miks I wouldn't recommend using setText() without an overflow fix because it eventually causes configstrings to overflow and error the game. Instead you should use .label for a static string, and setValue() for the health updating. Also "death" doesn't trigger in zombies so what will happen after running this code long enough you'll run out of script variables if players respawn. You would need to use "bled_out" instead.
-
JezuzLizard Thanks alot for the feedback! I really appreciate it!
For those interested:
Initialization:
on_player_spawned() { self endon("disconnect"); self endon("bled_out"); while( true ) { self waittill("spawned_player"); if( !isdefined(self.myHealthTextHud) ) { x = 0; y = -20; value = self.health; self.myHealthTextHud = create_health_hud( x, y, value ); // self.myHealthTextHud = newclientHudElem( self ); } self thread printHealth(); } }
Update loop:
printHealth() { self endon( "bled_out" ); self endon( "disconnect" ); while( true ) { wait(1.5); self.myHealthTextHud SetValue( self.health ); } }
And HUD creation:
// This is a modified version of: //common_zombie\maps\_zombiemode_score.gsc:584: hud = self create_highlight_hud( x, y, value ); create_health_hud( x, y, value ) { font_size = 1.8; hud = create_simple_hud( self ); //common_zombie_patch\maps\_zombiemode_utility.gsc:111 level.hudelem_count++; hud.foreground = true; hud.sort = 0.5; hud.x = x; hud.y = y; hud.fontScale = font_size; hud.alignX = "center"; hud.alignY = "middle"; hud.horzAlign = "center"; hud.vertAlign = "bottom"; hud.color = ( 0.9, 0.9, 0.0 ); hud.alpha = 1; hud.color = ( 1.0, 0.0, 0.0 ); // hud.glowColor = ( 0.3, 0.6, 0.3 ); // hud.glowAlpha = 1; hud.hidewheninmenu = true; hud.hidewheninmenu = false; hud.label = "HEALTH: "; hud SetValue( value ); return hud; }