aboutsummaryrefslogtreecommitdiffstats
path: root/q3plus/conf/callvote.txt
diff options
context:
space:
mode:
authorFilip Wandzio <contact@philw.dev>2026-01-27 01:01:50 +0100
committerFilip Wandzio <contact@philw.dev>2026-01-27 01:01:50 +0100
commitb194fa3bdc697dbeac4efaceeda69daaffb159cf (patch)
treef821fe82f7fc93aa37e901d792bbc3b5292ad25b /q3plus/conf/callvote.txt
downloadq3sv-b194fa3bdc697dbeac4efaceeda69daaffb159cf.tar.gz
q3sv-b194fa3bdc697dbeac4efaceeda69daaffb159cf.zip
Initial commit for server config files
Signed-off-by: Filip Wandzio <contact@philw.dev>
Diffstat (limited to 'q3plus/conf/callvote.txt')
-rw-r--r--q3plus/conf/callvote.txt505
1 files changed, 505 insertions, 0 deletions
diff --git a/q3plus/conf/callvote.txt b/q3plus/conf/callvote.txt
new file mode 100644
index 0000000..f4ace50
--- /dev/null
+++ b/q3plus/conf/callvote.txt
@@ -0,0 +1,505 @@
1
2/* Advanced callvote and referee commands
3 *
4 * Use "/set sv_vote callvote.txt" and/or "/set sv_referee callvote.txt" to
5 * enable this file.
6 **/
7
8config, conf {
9 // first argument
10 1 {
11 // little helper, when using "/callvote config" it will show
12 // something like "usage: /callvote config <fileName>"
13 // instead of "usage: /callvote config <*>"
14 argument = "fileName";
15
16 // any argument
17 * {
18 // "load" is special, it will only pass if the config is
19 // available/exists on the server
20 command = "load $";
21 }
22 }
23
24 description = "Loads a custom gameplay config.";
25}
26
27restart, map_restart {
28 // no arguments
29 command = "map_restart";
30
31 description = "Restarts the current map.";
32}
33
34nextmap, rotate {
35 command = "rotate";
36
37 description = "Forces the next map in server rotation to load.";
38}
39
40gametype, g_gametype {
41 1 {
42 // don't let them vote for the current gametype
43
44 if ( $g_gametype != GT_FFA ) {
45 ffa, deathmatch, 0 {
46 // client might have used one of the alternatives like "ffa"
47 // explicit use the number "0" instead of the variable "$"
48 command = "set g_gametype 0";
49 }
50 }
51
52 // just the same for all other gametypes
53 if ( $g_gametype != GT_DUEL ) {
54 duel, tourney, tournament, 1 {
55 command = "set g_gametype 1";
56 }
57 }
58
59 if ( $g_gametype != GT_TDM ) {
60 tdm, team, 3 {
61 command = "set g_gametype 3";
62 }
63 }
64
65 if ( $g_gametype != GT_CTF ) {
66 ctf, capture, 4 {
67 command = "set g_gametype 4";
68 }
69 }
70
71 if ( $g_gametype != GT_RTF ) {
72 rtf, return, returnflag, 5 {
73 command = "set g_gametype 5";
74 }
75 }
76
77 if ( $g_gametype != GT_1FCTF ) {
78 onectf, 1ctf, 1flag, 1fctf, oneflag, 1flagctf, oneflagctf, 6 {
79 command = "set g_gametype 6";
80 }
81 }
82
83 if ( $g_gametype != GT_CA ) {
84 ca, clan, arena, clanarena, 7 {
85 command = "set g_gametype 7";
86 }
87 }
88
89 if ( $g_gametype != GT_FREEZE ) {
90 freeze, tag, ftag, freezetag, 8 {
91 command = "set g_gametype 8";
92 }
93 }
94
95 if ( $g_gametype != GT_PTL ) {
96 ptl, protect, leader, protectleader, 9 {
97 command = "set g_gametype 9";
98 }
99 }
100 }
101
102 // second argument is optional
103 2 {
104 argument = "mapName";
105
106 // empty and "" is just the same
107 empty {
108 // just restart the map so the new gametype is enforced
109 command .= "; map_restart 0";
110 }
111
112 // assume a valid mapname
113 * {
114 // "map" command is special, it will only pass if the map is
115 // available/exists on the server
116 command .= "; map $";
117 }
118 }
119}
120
121map {
122 1 {
123 argument = "mapName";
124
125 * {
126 // "map" command is special, it will only pass if the map is
127 // available/exists on the server
128 command = "map $";
129 }
130 }
131}
132
133if ( $g_gametype >= GT_TEAM ) {
134 teamBalance {
135 1 {
136 empty,
137 FPH, 1 {
138 command = "teamBalance 1";
139 }
140
141 score, 2 {
142 command = "teamBalance 2";
143 }
144 }
145
146 description = "Balance the teams on the fly, without resetting the game score.";
147 }
148}
149
150timelimit {
151 1 {
152 // referee is god, while mere mortals are limited to a range between 5 and 20
153 REF *,
154 5..20 {
155 command = "set timelimit $";
156 }
157 }
158}
159
160if ( in($g_gametype, GT_CTF, GT_RTF, GT_ONEFLAG) ) {
161 capturelimit {
162 1 {
163 REF *,
164 5..50 {
165 command = "set roundlimit 0; set capturelimit $";
166 }
167 }
168 }
169}
170else {
171 fraglimit {
172 1 {
173 REF *,
174 5..100 {
175 command = "set roundlimit 0; set fraglimit $";
176 }
177 }
178 }
179}
180
181roundlimit {
182 1 {
183 REF *,
184 0..100 {
185 command = "set roundlimit $";
186 }
187 }
188}
189
190physics, sv_physics {
191 1 {
192 //baseq3 {
193 // command = "set sv_physics 0";
194 //}
195
196 bunnyhop, +bunnyhop {
197 command = "set sv_physics ". ( $sv_physics | PHYSICS_CONTROL_FORWARD | PHYSICS_CONTROL_SIDEWARD | PHYSICS_CONTROL_STOP );
198 }
199 -bunnyhop {
200 command = "set sv_physics ". ( $sv_physics & ~(PHYSICS_CONTROL_FORWARD | PHYSICS_CONTROL_SIDEWARD | PHYSICS_CONTROL_STOP) );
201 }
202
203 // referee can set any value
204 REF * {
205 command = "set sv_physics $";
206 }
207 }
208
209 description = "Changes the movement physics.";
210}
211
212unlagged, sv_unlagged {
213 1 {
214 if ( $sv_unlagged ) {
215 off, 0 {
216 command = "set sv_unlagged 0";
217 }
218 }
219 else {
220 on, 1 {
221 command = "set sv_unlagged 1";
222 }
223 }
224 }
225}
226
227
228
229
230// Referee commands
231REF warmup, REF g_warmup {
232 1 {
233 on, 1 {
234 command = "set g_doWarmup 1";
235
236 if ( $g_warmup < 5 ) {
237 command .= "; set g_warmup 5";
238 }
239 }
240
241 off, 0 {
242 command = "set g_doWarmup 0";
243 }
244
245 0..999 {
246 command = "set g_doWarmup 1; set g_warmup $";
247 }
248 }
249}
250
251if ( $g_gametype >= GT_TEAM ) {
252 REF friendlyFire, REF g_friendlyFire {
253 1 {
254 on, 1 {
255 command = "set g_friendlyFire 1";
256 }
257
258 off, 0 {
259 command = "set g_friendlyFire 0";
260 }
261 }
262
263 description = "Allows hurting team members.";
264 }
265}
266
267REF suddenDeath, REF sv_suddenDeath {
268 1 {
269 on, 1 {
270 command = "set sv_suddenDeath 1";
271 }
272
273 off, 0 {
274 command = "set sv_suddenDeath 0";
275 }
276 }
277}
278
279REF forceTeam {
280 1 {
281 0..63 {
282 command = "forceteam $";
283 }
284
285 all {
286 command = "forceteam all";
287 }
288
289 bots, allbots {
290 command = "forceteam allbots";
291 }
292 }
293
294 2 {
295 if ( $g_gametype >= GT_TEAM ) {
296 auto, a, free, f {
297 command .= " free";
298 }
299
300 red, r {
301 command .= " red";
302 }
303
304 blue, b {
305 command .= " blue";
306 }
307 }
308 else {
309 free, f, auto, a {
310 command .= " free";
311 }
312 }
313
314 spec, s {
315 command .= " spectator";
316 }
317
318 away {
319 command .= " away";
320 }
321 }
322}
323
324REF matchMode, REF sv_matchMode {
325 1 {
326 on, 1 {
327 command = "set sv_matchMode 1";
328 }
329
330 off, 0 {
331 command = "set sv_matchMode 0";
332 }
333 }
334
335 description = "Enables advanced clan war options like ^3/timeout^7, ^3/lock ^7etc.";
336}
337
338if ( $sv_matchMode ) {
339 if ( $g_gametype >= GT_TEAM ) {
340 REF forceJoin {
341 1 {
342 argument = "playerId";
343
344 0..63 {
345 command = "forcejoin $";
346 }
347 }
348
349 2 {
350 red, r {
351 command .= " red";
352 }
353
354 blue, b {
355 command .= " blue";
356 }
357
358 none, n {
359 command .= " none";
360 }
361 }
362 }
363
364 REF lock {
365 1 {
366 all, a {
367 command = "lock all";
368 }
369
370 red, r {
371 command = "lock red";
372 }
373
374 blue, b {
375 command = "lock blue";
376 }
377 }
378 }
379
380 REF unlock {
381 1 {
382 all, a {
383 command = "unlock all";
384 }
385
386 red, r {
387 command = "unlock red";
388 }
389
390 blue, b {
391 command = "unlock blue";
392 }
393 }
394 }
395 }
396
397 REF timeout {
398 command = "timeout";
399 }
400 REF pause {
401 command = "pause";
402 }
403
404 REF timein {
405 command = "timein";
406 }
407 REF ready {
408 command = "ready";
409 }
410 REF unpause {
411 command = "unpause";
412 }
413
414 REF notready {
415 command = "notready";
416 }
417}
418
419REF mute {
420 1 {
421 argument = "playerId";
422
423 0..63 {
424 command = "mute $";
425 }
426 }
427}
428
429REF unmute {
430 1 {
431 argument = "playerId";
432
433 0..63 {
434 command = "unmute $";
435 }
436 }
437}
438
439REF status, REF s {
440 command = "s";
441}
442
443if ( $sv_userdb ) {
444 REF whois, REF w {
445 1 {
446 argument = "playerId";
447
448 empty {
449 command = "w";
450 }
451
452 0..63 {
453 command = "whois $";
454 }
455 }
456 }
457}
458
459REF kick, REF k {
460 1 {
461 argument = "playerId";
462
463 0..63 {
464 command = "k $+";
465 }
466 }
467
468 // just to show some valuable information for "/ref kick ?"
469 2 {
470 argument = "duration";
471
472 REF empty, REF * {}
473 }
474
475 3 {
476 argument = "reason";
477
478 REF empty, REF * {}
479 }
480}
481
482REF ban {
483 1 {
484 argument = "playerId";
485
486 0..63 {
487 command = "ban $+";
488 }
489 }
490
491 // just to show some valuable information for "/ref ban ?"
492 2 {
493 argument = "duration";
494
495 REF empty, REF * {}
496 }
497
498 3 {
499 argument = "reason";
500
501 REF empty, REF * {}
502 }
503
504 description = "Bans a player.\n\n^3duration ^7can be used for a temporary ban\nlike ^31w ^7for one week, ^32d ^7for two days,\n^33h ^7for three hours etc.";
505}