]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
mutator_superspec (g_superspectate 1 to enable): Extended spectation fucntions. Curre...
authorJakob MG <jakob_mg@hotmail.com>
Thu, 16 Aug 2012 19:27:40 +0000 (21:27 +0200)
committerJakob MG <jakob_mg@hotmail.com>
Thu, 16 Aug 2012 19:27:40 +0000 (21:27 +0200)
qcsrc/server/cl_client.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/mutators/mutator_superspec.qc [new file with mode: 0644]
qcsrc/server/mutators/mutators.qh
qcsrc/server/progs.src

index 80159b85d7dbb7d05cd2ed4edafb49bd2bcca670..ec8edad65bda8046736c6626f6eb05532985b6b7 100644 (file)
@@ -2250,8 +2250,13 @@ entity CA_SpectateNext(entity start) {
        return other;
 }
 
-float SpectateNext() {
-       other = find(self.enemy, classname, "player");
+float SpectateNext(entity _prefer) {
+       
+       if(_prefer)
+               other = _prefer;        
+       else
+               other = find(self.enemy, classname, "player");
+       
        if (g_ca && !autocvar_g_ca_spectate_enemies && self.caplayer) {
                // CA and ca players when spectating enemies is forbidden
                other = CA_SpectateNext(other);
@@ -2465,7 +2470,7 @@ void ObserverThink()
                        self.flags |= FL_SPAWNING;
                } else if(self.BUTTON_ATCK && !self.version_mismatch) {
                        self.flags &~= FL_JUMPRELEASED;
-                       if(SpectateNext() == 1) {
+                       if(SpectateNext(world) == 1) {
                                self.classname = "spectator";
                        }
                } else {
@@ -2496,7 +2501,7 @@ void SpectatorThink()
                        self.flags |= FL_SPAWNING;
                } else if(self.BUTTON_ATCK) {
                        self.flags &~= FL_JUMPRELEASED;
-                       if(SpectateNext() == 1) {
+                       if(SpectateNext(world) == 1) {
                                self.classname = "spectator";
                        } else {
                                self.classname = "observer";
index 70523892a114ae8d244a5696c95496a7d36700ad..1e8cb45aa8b56df58ba1f15717a950c3d42e9f15 100644 (file)
@@ -1129,7 +1129,9 @@ void readlevelcvars(void)
                if(cvar("g_rocket_flying"))
                        MUTATOR_ADD(mutator_rocketflying);
                if(cvar("g_vampire"))
-                       MUTATOR_ADD(mutator_vampire);
+                       MUTATOR_ADD(mutator_vampire);           
+               if(cvar("g_superspectate"))
+                       MUTATOR_ADD(mutator_superspec);
        }
 
        // is this a mutator? is this a mode?
diff --git a/qcsrc/server/mutators/mutator_superspec.qc b/qcsrc/server/mutators/mutator_superspec.qc
new file mode 100644 (file)
index 0000000..cb5a9c0
--- /dev/null
@@ -0,0 +1,131 @@
+MUTATOR_HOOKFUNCTION(superspec_PlayerPreThink)
+{
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(superspec_SV_ParseClientCommand)
+{
+       if(MUTATOR_RETURNVALUE) // command was already handled?
+               return FALSE;
+
+       if(self.classname == "player")
+       {
+               centerprint(self, "GTFO\n");
+               return TRUE;
+       }
+               
+       if(cmd_name == "followpowerup")
+       {
+               entity _player;
+               FOR_EACH_PLAYER(_player)
+               {
+                       if(_player.strength_finished > time || _player.invincible_finished > time)
+                       {
+                               SpectateNext(_player);
+                               //centerprint(self, "Active powerup found\n");
+                               return TRUE;                            
+                       }
+               }
+               //centerprint(self, "No active powerups\n");
+               return TRUE;            
+       }
+       
+       if(cmd_name == "followstrength")
+       {
+               entity _player;
+               FOR_EACH_PLAYER(_player)
+               {
+                       if(_player.strength_finished > time)
+                       {
+                               SpectateNext(_player);
+                               //centerprint(self, "Active powerup found\n");
+                               return TRUE;                            
+                       }
+               }
+               //centerprint(self, "No active powerups\n");
+               return TRUE;            
+       }
+       
+       if(cmd_name == "followstshield")
+       {
+               entity _player;
+               FOR_EACH_PLAYER(_player)
+               {
+                       if(_player.invincible_finished > time)
+                       {
+                               SpectateNext(_player);
+                               //centerprint(self, "Active powerup found\n");
+                               return TRUE;                            
+                       }
+               }
+               //centerprint(self, "No active powerups\n");
+               return TRUE;            
+       }
+       
+       /*
+       {
+               if(cmd_argc == 2)
+               {
+                       if(argv(1) == "bar")
+                
+                       else if(argv(1) == "baz")
+                
+                       else
+                       {
+                               float _idx = stof(argv(1));
+                               
+                       }
+               }
+               
+               return TRUE;
+       }
+       */
+       
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(superspec_BuildMutatorsString)
+{
+       ret_string = strcat(ret_string, ":SS");
+       return 0;
+}
+
+MUTATOR_HOOKFUNCTION(superspec_BuildMutatorsPrettyString)
+{
+       ret_string = strcat(ret_string, ", Super Spectators");
+       return 0;
+}
+
+MUTATOR_HOOKFUNCTION(superspec_PlayerSpawn)
+{      
+       
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(superspec_ClientDisconnect)
+{
+    
+       return FALSE;
+}
+
+MUTATOR_DEFINITION(mutator_superspec)
+{
+
+       MUTATOR_HOOK(BuildMutatorsString, superspec_BuildMutatorsString, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsPrettyString, superspec_BuildMutatorsPrettyString, CBC_ORDER_ANY);
+       MUTATOR_HOOK(SV_ParseClientCommand, superspec_SV_ParseClientCommand, CBC_ORDER_ANY);
+       //MUTATOR_HOOK(ClientConnect, superspec_ClientConnect, CBC_ORDER_ANY);
+       //MUTATOR_HOOK(PlayerSpawn, superspec_PlayerSpawn, CBC_ORDER_ANY);
+       //MUTATOR_HOOK(PlayerPreThink, superspec_PlayerPreThink, CBC_ORDER_ANY);
+       //MUTATOR_HOOK(ClientDisconnect, superspec_ClientDisconnect, CBC_ORDER_ANY);
+
+       MUTATOR_ONADD
+       {
+       }
+
+       MUTATOR_ONREMOVE
+       {
+       }
+
+       return 0;
+}
index 8ba7320f2f086e546d479e1502cbf4524ceda8d2..61c2b896ae50d1d036ebe71ba942d99dd9afd276 100644 (file)
@@ -11,5 +11,6 @@ MUTATOR_DECLARATION(mutator_nix);
 MUTATOR_DECLARATION(mutator_rocketflying);
 MUTATOR_DECLARATION(mutator_spawn_near_teammate);
 MUTATOR_DECLARATION(mutator_vampire);
+MUTATOR_DECLARATION(mutator_superspec);
 
 MUTATOR_DECLARATION(sandbox);
index 4dde8f22bae838af22ae430c833f9194225b064e..b58f5d53216631dc990389cb1fd54558146b0335 100644 (file)
@@ -218,6 +218,7 @@ mutators/mutator_rocketflying.qc
 mutators/mutator_vampire.qc
 mutators/mutator_spawn_near_teammate.qc
 mutators/sandbox.qc
+mutators/mutator_superspec.qc
 
 ../warpzonelib/anglestransform.qc
 ../warpzonelib/mathlib.qc