add automatic map restart upon all players running out of lives
This commit is contained in:
		
							parent
							
								
									c140ffe07d
								
							
						
					
					
						commit
						3d627c7530
					
				| 
						 | 
					@ -301,6 +301,9 @@ void() trigger_changelevel = {
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void() become_spectator = {
 | 
					void() become_spectator = {
 | 
				
			||||||
 | 
						float not_dead;
 | 
				
			||||||
 | 
						entity pl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	self.health       = self.max_health;
 | 
						self.health       = self.max_health;
 | 
				
			||||||
	self.armortype    = 0;
 | 
						self.armortype    = 0;
 | 
				
			||||||
	self.armorvalue   = 0;
 | 
						self.armorvalue   = 0;
 | 
				
			||||||
| 
						 | 
					@ -319,6 +322,16 @@ void() become_spectator = {
 | 
				
			||||||
	self.frame        = 0;
 | 
						self.frame        = 0;
 | 
				
			||||||
	self.modelindex   = modelindex_eyes;
 | 
						self.modelindex   = modelindex_eyes;
 | 
				
			||||||
	W_SetCurrentAmmo();
 | 
						W_SetCurrentAmmo();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pl = find(world, classname, "player");
 | 
				
			||||||
 | 
						while(pl != world) {
 | 
				
			||||||
 | 
							not_dead += pl.lives;
 | 
				
			||||||
 | 
							pl = find(pl, classname, "player");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(!not_dead) {
 | 
				
			||||||
 | 
							all_players_are_dead = time;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void() respawn = {
 | 
					void() respawn = {
 | 
				
			||||||
| 
						 | 
					@ -339,7 +352,7 @@ void() respawn = {
 | 
				
			||||||
		player_respawned = TRUE;
 | 
							player_respawned = TRUE;
 | 
				
			||||||
		PutClientInServer();
 | 
							PutClientInServer();
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		// restart the entire server
 | 
							// restart the map
 | 
				
			||||||
		localcmd("restart\n");
 | 
							localcmd("restart\n");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -630,6 +630,7 @@ float sf_lives;
 | 
				
			||||||
float sf_dist_ammo;
 | 
					float sf_dist_ammo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
float player_respawned;
 | 
					float player_respawned;
 | 
				
			||||||
 | 
					float all_players_are_dead;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// fields --------------------------------------------------------------------|
 | 
					// fields --------------------------------------------------------------------|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -179,7 +179,8 @@ void() worldspawn = {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void() StartFrame = {
 | 
					void() StartFrame = {
 | 
				
			||||||
	float temp1flag;
 | 
						entity pl;
 | 
				
			||||||
 | 
						float temp1flag, delta;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	teamplay   = cvar("teamplay");
 | 
						teamplay   = cvar("teamplay");
 | 
				
			||||||
	skill      = cvar("skill");
 | 
						skill      = cvar("skill");
 | 
				
			||||||
| 
						 | 
					@ -189,6 +190,20 @@ void() StartFrame = {
 | 
				
			||||||
	sf_cheats    = (temp1flag & SF_CHEATS) != 0;
 | 
						sf_cheats    = (temp1flag & SF_CHEATS) != 0;
 | 
				
			||||||
	sf_lives     = bit_shift_right(temp1flag & SF_LIVES_MSK, SF_LIVES_BEG);
 | 
						sf_lives     = bit_shift_right(temp1flag & SF_LIVES_MSK, SF_LIVES_BEG);
 | 
				
			||||||
	sf_dist_ammo = (temp1flag & SF_DIST_AMMO) != 0;
 | 
						sf_dist_ammo = (temp1flag & SF_DIST_AMMO) != 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(all_players_are_dead) {
 | 
				
			||||||
 | 
							delta = time - all_players_are_dead;
 | 
				
			||||||
 | 
							if(delta >= 9.95) {
 | 
				
			||||||
 | 
								localcmd("restart\n");
 | 
				
			||||||
 | 
							} else if(rint(delta * 10) == rint(delta) * 10) {
 | 
				
			||||||
 | 
								pl = find(world, classname, "player");
 | 
				
			||||||
 | 
								while(pl != world) {
 | 
				
			||||||
 | 
									centerprint(pl, "Mission failed.\nRestarting in ",
 | 
				
			||||||
 | 
									            ftos(10 - rint(delta)), " seconds");
 | 
				
			||||||
 | 
									pl = find(pl, classname, "player");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								todo
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								todo
									
									
									
									
									
								
							| 
						 | 
					@ -10,7 +10,6 @@ rename all functions to be lower_underscore
 | 
				
			||||||
core features:
 | 
					core features:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add registercvar support
 | 
					add registercvar support
 | 
				
			||||||
restart map after 10 seconds when everyone is dead
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
useful features:
 | 
					useful features:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,3 +34,4 @@ distributed ammo
 | 
				
			||||||
enforcers are broken
 | 
					enforcers are broken
 | 
				
			||||||
lives counting
 | 
					lives counting
 | 
				
			||||||
no friendly fire
 | 
					no friendly fire
 | 
				
			||||||
 | 
					restart map after 10 seconds when everyone is dead
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user