From 0626b6cb8f0c2ad08d05989fdd80f6e6bbe1b6dd Mon Sep 17 00:00:00 2001 From: terencehill Date: Wed, 2 Jan 2013 10:28:18 +0100 Subject: [PATCH] Move reset_map code in a better place (old arena file is now gone!) --- qcsrc/server/arena.qc | 86 ------------------------------------ qcsrc/server/command/vote.qc | 84 +++++++++++++++++++++++++++++++++++ qcsrc/server/command/vote.qh | 1 + qcsrc/server/progs.src | 1 - 4 files changed, 85 insertions(+), 87 deletions(-) delete mode 100644 qcsrc/server/arena.qc diff --git a/qcsrc/server/arena.qc b/qcsrc/server/arena.qc deleted file mode 100644 index 8f744f839..000000000 --- a/qcsrc/server/arena.qc +++ /dev/null @@ -1,86 +0,0 @@ -void PutClientInServer(); - -/** - * Resets the state of all clients, items, flags, runes, keys, weapons, waypoints, ... of the map. - */ -void reset_map(float dorespawn) -{ - entity oldself; - oldself = self; - - if(time <= game_starttime && round_handler_IsActive()) - round_handler_Reset(game_starttime + 1); - - if(g_race || g_cts) - race_ReadyRestart(); - else MUTATOR_CALLHOOK(reset_map_global); - - lms_lowest_lives = 999; - lms_next_place = player_count; - - for(self = world; (self = nextent(self)); ) - if(clienttype(self) == CLIENTTYPE_NOTACLIENT) - { - if(self.reset) - { - self.reset(); - continue; - } - - if(self.team_saved) - self.team = self.team_saved; - - if(self.flags & FL_PROJECTILE) // remove any projectiles left - remove(self); - } - - // Waypoints and assault start come LAST - for(self = world; (self = nextent(self)); ) - if(clienttype(self) == CLIENTTYPE_NOTACLIENT) - { - if(self.reset2) - { - self.reset2(); - continue; - } - } - - // Moving the player reset code here since the player-reset depends - // on spawnpoint entities which have to be reset first --blub - if(dorespawn) - if(!MUTATOR_CALLHOOK(reset_map_players)) - FOR_EACH_CLIENT(self) { - if(self.flags & FL_CLIENT) // reset all players - { - { - /* - only reset players if a restart countdown is active - this can either be due to cvar sv_ready_restart_after_countdown having set - restart_mapalreadyrestarted to 1 after the countdown ended or when - sv_ready_restart_after_countdown is not used and countdown is still running - */ - if (restart_mapalreadyrestarted || (time < game_starttime)) - { - //NEW: changed behaviour so that it prevents that previous spectators/observers suddenly spawn as players - if (self.classname == "player") { - //PlayerScore_Clear(self); - if(g_lms) - PlayerScore_Add(self, SP_LMS_LIVES, LMS_NewPlayerLives()); - self.killcount = 0; - //stop the player from moving so that he stands still once he gets respawned - self.velocity = '0 0 0'; - self.avelocity = '0 0 0'; - self.movement = '0 0 0'; - PutClientInServer(); - } - } - } - } - } - - if(g_keyhunt) - kh_Controller_SetThink_NoMsg(autocvar_g_balance_keyhunt_delay_round+(game_starttime - time), kh_StartRound); - - self = oldself; -} - diff --git a/qcsrc/server/command/vote.qc b/qcsrc/server/command/vote.qc index e45647530..f6f99d01b 100644 --- a/qcsrc/server/command/vote.qc +++ b/qcsrc/server/command/vote.qc @@ -319,6 +319,90 @@ void VoteThink() // Game logic for warmup // ======================= +/** + * Resets the state of all clients, items, flags, runes, keys, weapons, waypoints, ... of the map. + */ +void reset_map(float dorespawn) +{ + entity oldself; + oldself = self; + + if(time <= game_starttime && round_handler_IsActive()) + round_handler_Reset(game_starttime + 1); + + if(g_race || g_cts) + race_ReadyRestart(); + else MUTATOR_CALLHOOK(reset_map_global); + + lms_lowest_lives = 999; + lms_next_place = player_count; + + for(self = world; (self = nextent(self)); ) + if(clienttype(self) == CLIENTTYPE_NOTACLIENT) + { + if(self.reset) + { + self.reset(); + continue; + } + + if(self.team_saved) + self.team = self.team_saved; + + if(self.flags & FL_PROJECTILE) // remove any projectiles left + remove(self); + } + + // Waypoints and assault start come LAST + for(self = world; (self = nextent(self)); ) + if(clienttype(self) == CLIENTTYPE_NOTACLIENT) + { + if(self.reset2) + { + self.reset2(); + continue; + } + } + + // Moving the player reset code here since the player-reset depends + // on spawnpoint entities which have to be reset first --blub + if(dorespawn) + if(!MUTATOR_CALLHOOK(reset_map_players)) + FOR_EACH_CLIENT(self) { + if(self.flags & FL_CLIENT) // reset all players + { + { + /* + only reset players if a restart countdown is active + this can either be due to cvar sv_ready_restart_after_countdown having set + restart_mapalreadyrestarted to 1 after the countdown ended or when + sv_ready_restart_after_countdown is not used and countdown is still running + */ + if (restart_mapalreadyrestarted || (time < game_starttime)) + { + //NEW: changed behaviour so that it prevents that previous spectators/observers suddenly spawn as players + if (self.classname == "player") { + //PlayerScore_Clear(self); + if(g_lms) + PlayerScore_Add(self, SP_LMS_LIVES, LMS_NewPlayerLives()); + self.killcount = 0; + //stop the player from moving so that he stands still once he gets respawned + self.velocity = '0 0 0'; + self.avelocity = '0 0 0'; + self.movement = '0 0 0'; + PutClientInServer(); + } + } + } + } + } + + if(g_keyhunt) + kh_Controller_SetThink_NoMsg(autocvar_g_balance_keyhunt_delay_round+(game_starttime - time), kh_StartRound); + + self = oldself; +} + // Restarts the map after the countdown is over (and cvar sv_ready_restart_after_countdown is set) void ReadyRestart_think() { diff --git a/qcsrc/server/command/vote.qh b/qcsrc/server/command/vote.qh index 748b7ce6d..1225b6be5 100644 --- a/qcsrc/server/command/vote.qh +++ b/qcsrc/server/command/vote.qh @@ -47,4 +47,5 @@ float readycount; // amount of players who are ready float readyrestart_happened; // keeps track of whether a restart has already happened float restart_mapalreadyrestarted; // bool, indicates whether reset_map() was already executed .float ready; // flag for if a player is ready +void reset_map(float dorespawn); void ReadyCount(); \ No newline at end of file diff --git a/qcsrc/server/progs.src b/qcsrc/server/progs.src index 624d5cd67..8d3238834 100644 --- a/qcsrc/server/progs.src +++ b/qcsrc/server/progs.src @@ -99,7 +99,6 @@ g_subs.qc g_tetris.qc runematch.qc -arena.qc g_violence.qc g_damage.qc -- 2.39.2