From 3ab36e44c46afcf0c3037140ee283277adce4c0c Mon Sep 17 00:00:00 2001 From: terencehill Date: Wed, 26 Dec 2012 16:14:57 +0100 Subject: [PATCH] Add mutator hook PutClientInServer --- qcsrc/server/cl_client.qc | 9 +++------ qcsrc/server/mutators/base.qh | 3 +++ qcsrc/server/mutators/gamemode_ca.qc | 11 +++++++++++ qcsrc/server/teamplay.qc | 1 + 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 60582fecf..35f678e2d 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -643,11 +643,7 @@ Called when a client spawns in the server void PutClientInServer (void) { if(clienttype(self) == CLIENTTYPE_BOT) - { self.classname = "player"; - if(g_ca) - self.caplayer = 1; - } else if(clienttype(self) == CLIENTTYPE_REAL) { msg_entity = self; @@ -665,10 +661,11 @@ void PutClientInServer (void) if(PlayerScore_Add(self, SP_LMS_RANK, 0) > 0) self.classname = "observer"; } - - if((g_arena && !self.spawned) || (g_ca && !allowed_to_spawn)) + else if(g_arena && !self.spawned) self.classname = "observer"; + MUTATOR_CALLHOOK(PutClientInServer); + if(gameover) self.classname = "observer"; diff --git a/qcsrc/server/mutators/base.qh b/qcsrc/server/mutators/base.qh index 2a3eb795e..04b725fad 100644 --- a/qcsrc/server/mutators/base.qh +++ b/qcsrc/server/mutators/base.qh @@ -44,6 +44,9 @@ void Mutator_Remove(mutatorfunc_t func, string name); // calls error() on fail MUTATOR_HOOKABLE(MakePlayerObserver); // called when a player becomes observer, after shared setup +MUTATOR_HOOKABLE(PutClientInServer); + entity self; // client wanting to spawn + MUTATOR_HOOKABLE(PlayerSpawn); entity spawn_spot; // spot that was used, or world // called when a player spawns as player, after shared setup, before his weapon is chosen (so items may be changed in here) diff --git a/qcsrc/server/mutators/gamemode_ca.qc b/qcsrc/server/mutators/gamemode_ca.qc index 0db2c5beb..51daf6f2e 100644 --- a/qcsrc/server/mutators/gamemode_ca.qc +++ b/qcsrc/server/mutators/gamemode_ca.qc @@ -140,6 +140,15 @@ MUTATOR_HOOKFUNCTION(ca_PlayerSpawn) return 1; } +MUTATOR_HOOKFUNCTION(ca_PutClientInServer) +{ + if(clienttype(self) == CLIENTTYPE_BOT) + self.caplayer = TRUE; + if(!allowed_to_spawn) + self.classname = "observer"; + return 1; +} + MUTATOR_HOOKFUNCTION(ca_reset_map_players) { FOR_EACH_CLIENT(self) @@ -180,6 +189,7 @@ MUTATOR_HOOKFUNCTION(ca_ForbidPlayerScore_Clear) { return 1; } + MUTATOR_HOOKFUNCTION(ca_ForbidThrowCurrentWeapon) { return 1; @@ -200,6 +210,7 @@ void ca_Initialize() MUTATOR_DEFINITION(gamemode_ca) { MUTATOR_HOOK(PlayerSpawn, ca_PlayerSpawn, CBC_ORDER_ANY); + MUTATOR_HOOK(PutClientInServer, ca_PutClientInServer, CBC_ORDER_ANY); 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); diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index 2a82b164f..674b1c8b7 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -183,6 +183,7 @@ void InitGameplayMode() leadlimit_override = autocvar_g_ca_point_leadlimit; MUTATOR_ADD(gamemode_ca); } + if(g_keyhunt) { ActivateTeamplay(); -- 2.39.2