From dae3329fc64eed9fded5cf1623de8fa1f933d2ec Mon Sep 17 00:00:00 2001 From: blub0 Date: Mon, 17 Mar 2008 13:04:52 +0000 Subject: [PATCH] onslaught ready reset code, all those who promised to test it haven't reported any bugs with it, I couldn't find any either, so I assume it is working :P git-svn-id: svn://svn.icculus.org/nexuiz/trunk@3512 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/arena.qc | 62 ++++++++++++++++++----------- data/qcsrc/server/clientcommands.qc | 4 +- data/qcsrc/server/mode_onslaught.qc | 36 +++++++++++++++++ 3 files changed, 77 insertions(+), 25 deletions(-) diff --git a/data/qcsrc/server/arena.qc b/data/qcsrc/server/arena.qc index b56de425a..aaf242deb 100644 --- a/data/qcsrc/server/arena.qc +++ b/data/qcsrc/server/arena.qc @@ -16,6 +16,8 @@ void(entity e) DropFlag; void(entity e) ReturnFlag; void(entity e) removedecor; void dom_controlpoint_setup(); +void onslaught_generator_reset(); +void onslaught_controlpoint_reset(); void reset_map() { @@ -29,25 +31,7 @@ void reset_map() self = nextent(world); while(self) { - if(self.flags & FL_CLIENT) // reset all players - { - if(time < restart_countdown) - { - self.frags = (g_lms)?LMS_NewPlayerLives():0; - self.deaths = 0; - self.killcount = 0; - self.classname = "player"; - PutClientInServer(); - } - else if(g_arena) - { - if(self.spawned) - PutClientInServer(); - else - PutObserverInServer(); - } - } - else if(self.classname == STR_ITEM_KH_KEY) + if(self.classname == STR_ITEM_KH_KEY) { kh_Key_AssignTo(self, world); //if(self.owner) @@ -81,10 +65,6 @@ void reset_map() { dom_controlpoint_setup(); } - else if(self.classname == "info_player_deathmatch") - { - self.team = self.team_saved; // reset spawns to their original state too! - } else if(self.flags & FL_ITEM) // reset items { self.model = self.mdl; @@ -103,10 +83,46 @@ void reset_map() removedecor(self); } // TODO properly reset Onslaught + else if(self.classname == "onslaught_generator") + { + onslaught_generator_reset(); + } + else if(self.classname == "onslaught_controlpoint") + { + onslaught_controlpoint_reset(); + } // TODO properly reset Assault + // General teambased game modes + else if(self.classname == "info_player_deathmatch") + { + self.team = self.team_saved; + } self = nextent(self); } + // Moving the player reset code here since the player-reset depends + // on spawnpoint entities which have to be reset first --blub + FOR_EACH_CLIENT(self) { + if(self.flags & FL_CLIENT) // reset all players + { + if(time < restart_countdown) + { + self.frags = (g_lms)?LMS_NewPlayerLives():0; + self.deaths = 0; + self.killcount = 0; + self.classname = "player"; + PutClientInServer(); + } + else if(g_arena) + { + if(self.spawned) + PutClientInServer(); + else + PutObserverInServer(); + } + } + } + if(g_keyhunt) kh_Controller_SetThink(cvar("g_balance_keyhunt_delay_round")+RESTART_COUNTDOWN, "", kh_StartRound); diff --git a/data/qcsrc/server/clientcommands.qc b/data/qcsrc/server/clientcommands.qc index 99944922e..7e9365540 100644 --- a/data/qcsrc/server/clientcommands.qc +++ b/data/qcsrc/server/clientcommands.qc @@ -829,8 +829,8 @@ void ReadyCount() bprint("^1Server is restarting...\n"); - // no arena, assault & onslaught support yet... - if(g_arena | g_assault | g_onslaught | gameover | intermission_running) + // no arena, assault support yet... + if(g_arena | g_assault | gameover | intermission_running) localcmd("restart\n"); restart_countdown = time + RESTART_COUNTDOWN; diff --git a/data/qcsrc/server/mode_onslaught.qc b/data/qcsrc/server/mode_onslaught.qc index dbde61dbc..c18e8a108 100644 --- a/data/qcsrc/server/mode_onslaught.qc +++ b/data/qcsrc/server/mode_onslaught.qc @@ -548,6 +548,7 @@ void() onslaught_generator = precache_sound("sound/onslaught/generator_underattack.wav"); if (!self.team) objerror("team must be set"); + self.team_saved = self.team; self.colormap = 1024 + (self.team - 1) * 17; self.solid = SOLID_BSP; self.movetype = MOVETYPE_NONE; @@ -578,6 +579,20 @@ void() onslaught_generator = self.sprite.waypointsprite_for_player = onslaught_generator_waypointsprite_for_player; }; +void() onslaught_generator_reset = +{ + self.team = self.team_saved; + self.lasthealth = self.max_health = self.health = cvar("g_onslaught_gen_health"); + self.takedamage = DAMAGE_AIM; + self.bot_attack = TRUE; + self.iscaptured = TRUE; + self.islinked = TRUE; + self.isshielded = TRUE; + self.enemy.solid = SOLID_NOT; + self.think = onslaught_generator_delayed; + self.nextthink = time + 0.2; +} + void(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) onslaught_controlpoint_icon_damage = { entity oself; @@ -763,6 +778,27 @@ void() onslaught_controlpoint = self.sprite.waypointsprite_for_player = onslaught_controlpoint_waypointsprite_for_player; }; +void() onslaught_controlpoint_reset = +{ + if(self.goalentity && self.goalentity != world) + remove(self.goalentity); + self.goalentity = world; + self.team = 0; + self.colormap = 1024; + self.iscaptured = FALSE; + self.islinked = FALSE; + self.isshielded = TRUE; + self.enemy.solid = SOLID_NOT; + self.enemy.colormap = self.colormap; + self.think = self.enemy.think = SUB_Null; + self.nextthink = 0; // don't like SUB_Null :P + + onslaught_updatelinks(); + + activator = self; + SUB_UseTargets(); // to reset the structures, playerspawns etc. +} + void() onslaught_link_delayed = { self.goalentity = find(world, targetname, self.target); -- 2.39.2