]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/mutators/mutator_superspec.qc
Merge remote-tracking branch 'origin/terencehill/freezetag_fixes'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mutators / mutator_superspec.qc
1 float _spectate(entity _player)
2 {
3         if(SpectateNext(_player) == 1)
4         {
5                 PutObserverInServer();
6                 self.classname = "spectator";
7         }       
8         return TRUE;
9 }
10
11 MUTATOR_HOOKFUNCTION(superspec_SV_ParseClientCommand)
12 {
13         if(MUTATOR_RETURNVALUE) // command was already handled?
14                 return FALSE;
15
16         if(self.classname == "player")
17                 return FALSE;
18
19         if(cmd_name == "followpowerup")
20         {
21                 entity _player;
22                 FOR_EACH_PLAYER(_player)
23                 {
24                         if(_player.strength_finished > time || _player.invincible_finished > time)
25                                 return _spectate(_player);
26                 }
27                 
28                 centerprint(self, "No active powerups\n");
29                 return TRUE;
30         }
31
32         if(cmd_name == "followstrength")
33         {
34                 entity _player;
35                 FOR_EACH_PLAYER(_player)
36                 {
37                         if(_player.strength_finished > time)
38                                 return _spectate(_player);
39                 }
40                 
41                 centerprint(self, "No active Strength\n");
42                 return TRUE;
43         }
44
45         if(cmd_name == "followstshield")
46         {
47                 entity _player;
48                 FOR_EACH_PLAYER(_player)
49                 {
50                         if(_player.invincible_finished > time)
51                                 return _spectate(_player);
52                 }
53                 
54                 centerprint(self, "No active Shield\n");
55                 return TRUE;
56         }
57
58         if(cmd_name == "followfc")
59         {
60                 if(!g_ctf)
61                         return TRUE;
62                 
63                 entity _player;         
64                 float _team;
65                 
66                 if(cmd_argc == 2)
67                 {                       
68                         if(argv(1) == "red")
69                                 _team = COLOR_TEAM1;
70                         else
71                                 _team = COLOR_TEAM2;
72                 }
73                 
74                 FOR_EACH_PLAYER(_player)
75                 {
76                         if(_player.flagcarried && (_player.team == _team || _team == 0))
77                                 return _spectate(_player);
78                 }
79                 
80                 centerprint(self, "No active flag carrier\n");
81                 return TRUE;
82         }       
83
84         return FALSE;
85 }
86
87 MUTATOR_HOOKFUNCTION(superspec_BuildMutatorsString)
88 {
89         ret_string = strcat(ret_string, ":SS");
90         return 0;
91 }
92
93 MUTATOR_HOOKFUNCTION(superspec_BuildMutatorsPrettyString)
94 {
95         ret_string = strcat(ret_string, ", Super Spectators");
96         return 0;
97 }
98
99 /*
100 MUTATOR_HOOKFUNCTION(superspec_PlayerSpawn)
101 {
102
103         return FALSE;
104 }
105
106 MUTATOR_HOOKFUNCTION(superspec_ClientDisconnect)
107 {
108
109         return FALSE;
110 }
111 MUTATOR_HOOKFUNCTION(superspec_PlayerPreThink)
112 {
113         return FALSE;
114 }
115 */
116
117 MUTATOR_DEFINITION(mutator_superspec)
118 {
119
120         MUTATOR_HOOK(BuildMutatorsString, superspec_BuildMutatorsString, CBC_ORDER_ANY);
121         MUTATOR_HOOK(BuildMutatorsPrettyString, superspec_BuildMutatorsPrettyString, CBC_ORDER_ANY);
122         MUTATOR_HOOK(SV_ParseClientCommand, superspec_SV_ParseClientCommand, CBC_ORDER_ANY);
123         //MUTATOR_HOOK(ClientConnect, superspec_ClientConnect, CBC_ORDER_ANY);
124         //MUTATOR_HOOK(PlayerSpawn, superspec_PlayerSpawn, CBC_ORDER_ANY);
125         //MUTATOR_HOOK(PlayerPreThink, superspec_PlayerPreThink, CBC_ORDER_ANY);
126         //MUTATOR_HOOK(ClientDisconnect, superspec_ClientDisconnect, CBC_ORDER_ANY);
127
128         MUTATOR_ONADD
129         {
130         }
131
132         MUTATOR_ONREMOVE
133         {
134         }
135
136         return 0;
137 }