]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/gamemodes/gamemode/clanarena/sv_clanarena.qh
Merge branch 'master' into z411/bai-server
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / gamemodes / gamemode / clanarena / sv_clanarena.qh
1 #pragma once
2
3 #include <common/mutators/base.qh>
4 #include <server/elimination.qh>
5 #include <server/round_handler.qh>
6 #include <server/world.qh>
7 #include <server/command/sv_cmd.qh>
8
9 int autocvar_g_ca_spectate_enemies;
10 int autocvar_g_ca_point_limit;
11 int autocvar_g_ca_point_leadlimit;
12 float autocvar_g_ca_round_timelimit;
13 bool autocvar_g_ca_round_stop;
14 bool autocvar_g_ca_team_spawns;
15 //int autocvar_g_ca_teams;
16 int autocvar_g_ca_teams_override;
17 float autocvar_g_ca_warmup;
18 string autocvar_g_ca_weaponarena = "most";
19
20 int ca_teams;
21 bool allowed_to_spawn;
22 bool g_ca_spectate_enemies; // updated on map reset
23
24 const int ST_CA_ROUNDS = 1;
25
26 bool CA_CheckTeams();
27 bool CA_CheckWinner();
28 void CA_RoundStart();
29 bool ca_isEliminated(entity e);
30
31 REGISTER_MUTATOR(ca, false)
32 {
33     MUTATOR_STATIC();
34         MUTATOR_ONADD
35         {
36                 GameRules_teams(true);
37         GameRules_spawning_teams(autocvar_g_ca_team_spawns);
38         GameRules_limit_score(autocvar_g_ca_point_limit);
39         GameRules_limit_lead(autocvar_g_ca_point_leadlimit);
40
41                 ca_teams = autocvar_g_ca_teams_override;
42                 if (ca_teams < 2)
43                         ca_teams = cvar("g_ca_teams"); // read the cvar directly as it gets written earlier in the same frame
44                 if (autocvar_g_ca_spectate_enemies == -1)
45                         observe_blocked_if_eliminated = true;
46
47                 ca_teams = BITS(bound(2, ca_teams, 4));
48         GameRules_scoring(ca_teams, SFL_SORT_PRIO_PRIMARY, 0, {
49             field_team(ST_CA_ROUNDS, "rounds", SFL_SORT_PRIO_PRIMARY);
50         });
51
52                 allowed_to_spawn = true;
53                 g_ca_spectate_enemies = autocvar_g_ca_spectate_enemies;
54                 observe_blocked_if_eliminated = (g_ca_spectate_enemies == -1);
55                 round_handler_Spawn(CA_CheckTeams, CA_CheckWinner, CA_RoundStart);
56                 round_handler_Init(5, autocvar_g_ca_warmup, autocvar_g_ca_round_timelimit);
57                 EliminatedPlayers_Init(ca_isEliminated);
58         }
59         return 0;
60 }