From: terencehill Date: Mon, 11 Mar 2013 16:43:46 +0000 (+0100) Subject: Add the new field respawn_flags and set it just when the player dies so there's no... X-Git-Tag: xonotic-v0.7.0~61^2~10 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=a5f026e24f8c5c8dbfe828fc23ca11d29579aa71;p=xonotic%2Fxonotic-data.pk3dir.git Add the new field respawn_flags and set it just when the player dies so there's no need of the hook GetRespawnFlags --- diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 574df368d..111501cb0 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -478,6 +478,7 @@ void PutObserverInServer (void) self.pauseregen_finished = 0; self.damageforcescale = 0; self.death_time = 0; + self.respawn_flags = 0; self.respawn_time = 0; self.stat_respawn_time = 0; self.alpha = 0; @@ -765,6 +766,7 @@ void PutClientInServer (void) } self.damageforcescale = 2; self.death_time = 0; + self.respawn_flags = 0; self.respawn_time = 0; self.stat_respawn_time = 0; self.scale = 0; @@ -2634,18 +2636,14 @@ void PlayerPreThink (void) } else { - float button_pressed, respawn_flags; + float button_pressed; if(frametime) player_anim(); button_pressed = (self.BUTTON_ATCK || self.BUTTON_JUMP || self.BUTTON_ATCK2 || self.BUTTON_HOOK || self.BUTTON_USE); - respawn_flags = MUTATOR_CALLHOOK(GetRespawnFlags); - if(g_lms || g_cts || autocvar_g_forced_respawn) - respawn_flags = respawn_flags | RESPAWN_FORCE; - if (self.deadflag == DEAD_DYING) { - if(respawn_flags & RESPAWN_FORCE) + if(self.respawn_flags & RESPAWN_FORCE) self.deadflag = DEAD_RESPAWNING; else if(!button_pressed) self.deadflag = DEAD_DEAD; @@ -2671,7 +2669,7 @@ void PlayerPreThink (void) ShowRespawnCountdown(); - if(respawn_flags & RESPAWN_SILENT) + if(self.respawn_flags & RESPAWN_SILENT) self.stat_respawn_time = 0; else self.stat_respawn_time = self.respawn_time; diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 2c9a823a8..3b6ba4bc5 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -661,11 +661,14 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht self.respawn_time = ceil((time + sdelay) / waves) * waves; else self.respawn_time = time + sdelay; - self.stat_respawn_time = self.respawn_time; if((sdelay + waves >= 5.0) && (self.respawn_time - time > 1.75)) self.respawn_countdown = 10; // first number to count down from is 10 else self.respawn_countdown = -1; // do not count down + + if(g_lms || g_cts || autocvar_g_forced_respawn) + self.respawn_flags = self.respawn_flags | RESPAWN_FORCE; + self.death_time = time; if (random() < 0.5) animdecide_setstate(self, self.anim_state | ANIMSTATE_DEAD1, TRUE); diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index 3281218cc..db71b4a06 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -104,6 +104,7 @@ float server_is_dedicated; //.float cnt2; .float play_time; +.float respawn_flags; .float respawn_time; .float death_time; .float fade_time; diff --git a/qcsrc/server/mutators/base.qh b/qcsrc/server/mutators/base.qh index 06b5c0892..d3d91232c 100644 --- a/qcsrc/server/mutators/base.qh +++ b/qcsrc/server/mutators/base.qh @@ -65,9 +65,6 @@ MUTATOR_HOOKABLE(ForbidPlayerScore_Clear); MUTATOR_HOOKABLE(ClientDisconnect); // called when a player disconnects -MUTATOR_HOOKABLE(GetRespawnFlags); - // returns respawn flags - MUTATOR_HOOKABLE(PlayerDies); // called when a player dies to e.g. remove stuff he was carrying. // INPUT: diff --git a/qcsrc/server/mutators/gamemode_arena.qc b/qcsrc/server/mutators/gamemode_arena.qc index c561815ad..c64886b91 100644 --- a/qcsrc/server/mutators/gamemode_arena.qc +++ b/qcsrc/server/mutators/gamemode_arena.qc @@ -204,14 +204,6 @@ MUTATOR_HOOKFUNCTION(arena_PlayerSpawn) return 1; } -MUTATOR_HOOKFUNCTION(arena_GetRespawnFlags) -{ - // put dead players in the spawn queue - if(arena_roundbased) - return (RESPAWN_FORCE | RESPAWN_SILENT); - return RESPAWN_SILENT; -} - MUTATOR_HOOKFUNCTION(arena_ForbidPlayerScore_Clear) { return 1; @@ -226,6 +218,11 @@ MUTATOR_HOOKFUNCTION(arena_GiveFragsForKill) MUTATOR_HOOKFUNCTION(arena_PlayerDies) { + // put dead players in the spawn queue + if(arena_roundbased) + self.respawn_flags = (RESPAWN_FORCE | RESPAWN_SILENT); + else + self.respawn_flags = RESPAWN_SILENT; Spawnqueue_Unmark(self); return 1; } @@ -257,7 +254,6 @@ MUTATOR_DEFINITION(gamemode_arena) MUTATOR_HOOK(PutClientInServer, arena_PutClientInServer, CBC_ORDER_ANY); MUTATOR_HOOK(ClientConnect, arena_ClientConnect, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerSpawn, arena_PlayerSpawn, CBC_ORDER_ANY); - MUTATOR_HOOK(GetRespawnFlags, arena_GetRespawnFlags, CBC_ORDER_ANY); MUTATOR_HOOK(ForbidPlayerScore_Clear, arena_ForbidPlayerScore_Clear, CBC_ORDER_ANY); MUTATOR_HOOK(GiveFragsForKill, arena_GiveFragsForKill, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerDies, arena_PlayerDies, CBC_ORDER_ANY); diff --git a/qcsrc/server/mutators/gamemode_ca.qc b/qcsrc/server/mutators/gamemode_ca.qc index c86aa6d9e..f00c4df39 100644 --- a/qcsrc/server/mutators/gamemode_ca.qc +++ b/qcsrc/server/mutators/gamemode_ca.qc @@ -190,11 +190,11 @@ MUTATOR_HOOKFUNCTION(ca_GetTeamCount) return 1; } -MUTATOR_HOOKFUNCTION(ca_GetRespawnFlags) +MUTATOR_HOOKFUNCTION(ca_PlayerDies) { if(!allowed_to_spawn) - return RESPAWN_SILENT; - return 0; + self.respawn_flags = RESPAWN_SILENT; + return 1; } MUTATOR_HOOKFUNCTION(ca_ForbidPlayerScore_Clear) @@ -244,7 +244,7 @@ MUTATOR_DEFINITION(gamemode_ca) MUTATOR_HOOK(reset_map_global, ca_reset_map_global, CBC_ORDER_ANY); MUTATOR_HOOK(reset_map_players, ca_reset_map_players, CBC_ORDER_ANY); MUTATOR_HOOK(GetTeamCount, ca_GetTeamCount, CBC_ORDER_EXCLUSIVE); - MUTATOR_HOOK(GetRespawnFlags, ca_GetRespawnFlags, CBC_ORDER_ANY); + MUTATOR_HOOK(PlayerDies, ca_PlayerDies, CBC_ORDER_ANY); MUTATOR_HOOK(ForbidPlayerScore_Clear, ca_ForbidPlayerScore_Clear, CBC_ORDER_ANY); MUTATOR_HOOK(ForbidThrowCurrentWeapon, ca_ForbidThrowCurrentWeapon, CBC_ORDER_ANY); MUTATOR_HOOK(GiveFragsForKill, ca_GiveFragsForKill, CBC_ORDER_FIRST);