]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/client/ctf.qc
Include gmqcc binaries for Windows and Linux
[voretournament/voretournament.git] / data / qcsrc / client / ctf.qc
1 //include "main.qh"\r
2 // NOTE: This file contains lots of debugging stuff\r
3 // it is not really used... can be seen as another sample...\r
4 \r
5 string STR_PLAYER = "player";\r
6 #define FOR_EACH_PLAYER(v) for(v = world; (v = find(v, classname, STR_PLAYER)) != world; )\r
7 \r
8 string ctf_temp_1;\r
9 float order_page;\r
10 \r
11 void() menu_close =\r
12 {\r
13         menu_visible = false;\r
14         menu_show = menu_show_error;\r
15         menu_action = menu_sub_null_float;\r
16         \r
17         /*if(ctf_temp_1)\r
18           strunzone(ctf_temp_1);*/\r
19         \r
20         localcmd("\nin_bindmap 0 0;");\r
21 };\r
22 \r
23 void() order_menu_render =\r
24 {\r
25         local vector ps, po;\r
26         local float i, p, n;\r
27         local string frags, color;\r
28         ps = '0 200 0';\r
29         po = '0 8 0';\r
30 \r
31         color = getplayerkey(player_localentnum-1, "topcolor");\r
32         \r
33         if(getstati(STAT_CTF_STATE) == CTF_STATE_COMMANDER) {\r
34                 drawstring(ps, "\x1D\x1E\x1E\x1E\x1E Order Menu \x1E\x1E\x1E\x1E\x1F", '8 8 0', '1 1 0', 1, 0); ps += po;\r
35                 drawstring(ps, strcat("Order: ", ctf_temp_1), '8 8 0', '1 1 0', 1, 0); ps += po;\r
36                 drawcolorcodedstring(ps, "1) ^3previous page", '8 8 0', 1, 0); ps += po;\r
37                 drawcolorcodedstring(ps, "2) ^3next page", '8 8 0', 1, 0); ps += po;\r
38                 for((n = 2), (p = i = 0); i < maxclients && n > 0; ++i) {\r
39                         frags = getplayerkey(i, "frags");\r
40                         if(!frags || (i+1) == player_localentnum)\r
41                                 continue;\r
42                         if(frags == "-666" || getplayerkey(i, "topcolor") != color) // FIXME use GetPlayerTeam\r
43                                 continue;\r
44                         ++p;\r
45                         if(p > (8*order_page))\r
46                         {\r
47                                 // only render current page\r
48                                 ++n;\r
49                                 if(n == 10)\r
50                                         n = 0;\r
51                                 drawcolorcodedstring(ps, strcat(ftos(n), ") ", GetPlayerName(i), " : ", ftos(getstatf(STAT_CTF_STATE))), '8 8 0', 1, 0); ps += po;\r
52                         }\r
53                 }\r
54                 drawstring(ps, "ESC) Exit Menu", '8 8 0', '1 1 0', 1, 0); ps += po;\r
55         } else {\r
56                 menu_close();\r
57         }\r
58 };\r
59 \r
60 float(float bInputType, float nPrimary, float nSecondary) order_menu_action =\r
61 {\r
62         local string arg;\r
63         local float p, i, n, chose;\r
64         local string frags, color;\r
65         if(bInputType != 0) // key down wanted\r
66                 return FALSE;\r
67         \r
68         arg = chr2str(nSecondary);\r
69         chose = stof(chr2str(nPrimary));\r
70         //str2chr\r
71         if(arg == "1") {\r
72                 color = getplayerkey(player_localentnum-1, "topcolor");\r
73                 ++order_page;\r
74                 for(p = i = 0; i < maxclients; ++i) {\r
75                         frags = getplayerkey(i, "frags");\r
76                         if(!frags || (i+1) == player_localentnum)\r
77                                 continue;\r
78                         if(frags == "-666" || getplayerkey(i, "topcolor") != color) // FIXME use GetPlayerTeam\r
79                                 continue;\r
80                         ++p;\r
81                 }\r
82                 if(p <= (8*order_page)) // no ppl on page\r
83                         order_page = 0;\r
84         } else if(arg == "2") {\r
85                 color = getplayerkey(player_localentnum-1, "topcolor");\r
86                 --order_page;\r
87                 if(order_page < 0) {\r
88                         for(p = i = 0; i < maxclients; ++i) {\r
89                                 frags = getplayerkey(i, "frags");\r
90                                 if(!frags || (i+1) == player_localentnum)\r
91                                         continue;\r
92                                 if(frags == "-666" || getplayerkey(i, "topcolor") != color) // FIXME use GetPlayerTeam\r
93                                         continue;\r
94                                 ++p;\r
95                         }\r
96                         order_page = floor(p/8);\r
97                 }\r
98         } else if(chose >= 3 && chose <= 9 || arg == "0") { // the 10 needs extra checking, assuming that stof(astring) returns 0\r
99                 if(chose == 0)\r
100                         chose = 10;\r
101                 n = 2;\r
102                 color = getplayerkey(player_localentnum-1, "topcolor");\r
103                 for(p = i = 0; i < maxclients && n > 0; ++i) {\r
104                         frags = getplayerkey(i, "frags");\r
105                         if(!frags || (i+1) == player_localentnum)\r
106                                 continue;\r
107                         if(frags == "-666" || getplayerkey(i, "topcolor") != color) // FIXME use GetPlayerTeam\r
108                                 continue;\r
109                         ++p;\r
110                         if(p > (8*order_page))\r
111                         {\r
112                                 // only render current page\r
113                                 ++n;\r
114                                 if(n == chose) {\r
115                                         n = 0;\r
116                                         break;\r
117                                 }\r
118                         }\r
119                 }\r
120                 if(n == 0) {\r
121                         //print(strcat("Issuing order to: ", ftos(i+1), "\n"));\r
122                         //print(strcat("cmd order #", ftos(i+1), " ", ctf_temp_1, ";\n"));\r
123                         localcmd(strcat("\ncmd order #", ftos(i+1), " ", ctf_temp_1, ";"));\r
124                 } else {\r
125                         print(strcat("Couldn't find player ", ftos(chose), "\n"));\r
126                 }\r
127                 return TRUE;\r
128         } else if(nSecondary == K_ESCAPE) {\r
129                 strunzone(ctf_temp_1);\r
130                 menu_close();\r
131         } else {\r
132                 //print(strcat("Menu action ", arg, " does not exist.\n"));\r
133                 return FALSE;\r
134         }\r
135         return TRUE;\r
136 };\r
137 \r
138 void() order_menu_show =\r
139 {\r
140         order_page = 0;\r
141         menu_show = order_menu_render;\r
142         menu_action = order_menu_action;\r
143 };\r
144 \r
145 \r
146 void() ctf_menu_render =\r
147 {\r
148         local vector ps, po;\r
149         ps = '0 200 0';\r
150         po = '0 8 0';\r
151         \r
152         if(getstati(STAT_CTF_STATE) == CTF_STATE_COMMANDER) {\r
153                 drawstring(ps, "\x1D\x1E\x1E\x1E\x1E Command Menu \x1E\x1E\x1E\x1E\x1F", '8 8 0', '1 1 0', 1, 0); ps += po;\r
154                 drawstring(ps, "Issue orders:", '8 8 0', '1 1 0', 1, 0); ps += po;\r
155                 drawstring(ps, " 1) Attack ", '8 8 0', '1 1 0', 1, 0);\r
156                 drawstring(ps + '80 0 0', " \x0F", '8 8 0', '1 1 1', 1, 0); ps += po;\r
157                 drawstring(ps, " 2) Defend \x0E", '8 8 0', '1 1 0', 1, 0); ps += po;\r
158                 ps += po;\r
159                 drawstring(ps, "3) Resign from command.", '8 8 0', '1 1 0', 1, 0); ps += po;\r
160                 drawstring(ps, "ESC) Exit Menu", '8 8 0', '1 1 0', 1, 0); ps += po;\r
161         } else {\r
162                 menu_close();\r
163         }\r
164 };\r
165 \r
166 float(float bInputType, float nPrimary, float nSecondary) ctf_menu_action =\r
167 {\r
168         local string arg;\r
169         if(bInputType != 0) // key down wanted\r
170                 return FALSE;\r
171         \r
172         arg = chr2str(nSecondary);\r
173 \r
174         if(arg == "1") {\r
175                 ctf_temp_1 = strzone("attack");\r
176                 order_menu_show();\r
177         } else if(arg == "2") {\r
178                 ctf_temp_1 = strzone("defend");\r
179                 order_menu_show();\r
180         } else if(arg == "3") {\r
181                 localcmd("\ncmd order resign;");\r
182                 menu_close();\r
183         } else if(nSecondary == K_ESCAPE) {\r
184                 menu_close();\r
185         } else {\r
186                 //print(strcat("Menu action ", arg, " does not exist.\n"));\r
187                 return FALSE;\r
188         }\r
189         return TRUE;\r
190 };\r
191 \r
192 void() ctf_menu_show =\r
193 {\r
194         if(getstati(STAT_CTF_STATE) < 0)\r
195                 return;\r
196         menu_show = ctf_menu_render;\r
197         menu_action = ctf_menu_action;\r
198         menu_visible = TRUE;\r
199         //menu_default_binds();\r
200 };\r
201 \r
202 void() ctf_view =\r
203 {\r
204         local float stat;\r
205         stat = getstati(STAT_CTF_STATE);\r
206         if(stat == CTF_STATE_ATTACK) {\r
207                 drawpic('0 0 0', "gfx/ctf_ic_atk.tga", '64 64 0', '1 1 1', 1, 0);\r
208         } else if(stat == CTF_STATE_DEFEND) {\r
209                 drawpic('0 0 0', "gfx/ctf_ic_def.tga", '64 64 0', '1 1 1', 1, 0);\r
210         } else if(stat == CTF_STATE_COMMANDER) {\r
211                 drawstring('0 0 0', "You're commander!", '8 8 0', '1 1 1', 1, 0);\r
212         } else if(stat < 0) {\r
213         } else {\r
214                 drawstring('0 0 0', "Awaiting orders...", '8 8 0', '1 1 1', 0.5, 0);\r
215         }\r
216 };\r