]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/mutators/mutator_superspec.qc
Make superspec better, support cmd followfc [red|blue], comment out unused funcs
[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 TRUE;
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                 centerprint(self, "No active powerups\n");
28                 return TRUE;
29         }
30
31         if(cmd_name == "followstrength")
32         {
33                 entity _player;
34                 FOR_EACH_PLAYER(_player)
35                 {
36                         if(_player.strength_finished > time)
37                                 return _spectate(_player);
38                 }
39                 centerprint(self, "No active Strength\n");
40                 return TRUE;
41         }
42
43         if(cmd_name == "followstshield")
44         {
45                 entity _player;
46                 FOR_EACH_PLAYER(_player)
47                 {
48                         if(_player.invincible_finished > time)
49                                 return _spectate(_player);
50                 }
51                 centerprint(self, "No active Shield\n");
52                 return TRUE;
53         }
54
55         if(cmd_name == "followfc")
56         {
57                 if(!g_ctf)
58                         return TRUE;
59                 
60                 entity _player;         
61                 float _team;
62                 
63                 if(cmd_argc == 2)
64                 {                       
65                         if(argv(1) == "red")
66                                 _team = COLOR_TEAM1;
67                         else
68                                 _team = COLOR_TEAM2;
69                 }
70                 
71                 FOR_EACH_PLAYER(_player)
72                 {
73                         if(_player.flagcarried && (_player.team == _team || _team == 0))
74                                 return _spectate(_player);
75                 }
76                 
77                 centerprint(self, "No active FC\n");
78                 return TRUE;
79         }       
80
81         return FALSE;
82 }
83
84 MUTATOR_HOOKFUNCTION(superspec_BuildMutatorsString)
85 {
86         ret_string = strcat(ret_string, ":SS");
87         return 0;
88 }
89
90 MUTATOR_HOOKFUNCTION(superspec_BuildMutatorsPrettyString)
91 {
92         ret_string = strcat(ret_string, ", Super Spectators");
93         return 0;
94 }
95
96 /*
97 MUTATOR_HOOKFUNCTION(superspec_PlayerSpawn)
98 {
99
100         return FALSE;
101 }
102
103 MUTATOR_HOOKFUNCTION(superspec_ClientDisconnect)
104 {
105
106         return FALSE;
107 }
108 MUTATOR_HOOKFUNCTION(superspec_PlayerPreThink)
109 {
110         return FALSE;
111 }
112 */
113
114 MUTATOR_DEFINITION(mutator_superspec)
115 {
116
117         MUTATOR_HOOK(BuildMutatorsString, superspec_BuildMutatorsString, CBC_ORDER_ANY);
118         MUTATOR_HOOK(BuildMutatorsPrettyString, superspec_BuildMutatorsPrettyString, CBC_ORDER_ANY);
119         MUTATOR_HOOK(SV_ParseClientCommand, superspec_SV_ParseClientCommand, CBC_ORDER_ANY);
120         //MUTATOR_HOOK(ClientConnect, superspec_ClientConnect, CBC_ORDER_ANY);
121         //MUTATOR_HOOK(PlayerSpawn, superspec_PlayerSpawn, CBC_ORDER_ANY);
122         //MUTATOR_HOOK(PlayerPreThink, superspec_PlayerPreThink, CBC_ORDER_ANY);
123         //MUTATOR_HOOK(ClientDisconnect, superspec_ClientDisconnect, CBC_ORDER_ANY);
124
125         MUTATOR_ONADD
126         {
127         }
128
129         MUTATOR_ONREMOVE
130         {
131         }
132
133         return 0;
134 }