#include "../teamplay.qh"
#include "../mutators/_mod.qh"
+#include <common/gamemodes/_mod.qh>
#ifdef SVQC
#include <common/vehicles/all.qh>
#include <common/physics/player.qh>
#include <common/teams.qh>
#include <common/util.qh>
-#include <common/triggers/triggers.qh>
+#include <common/mapobjects/triggers.qh>
#include <common/minigames/sv_minigames.qh>
{
if (IS_CLIENT(caller))
{
- if (warmup_stage || autocvar_sv_ready_restart || g_race_qualifying == 2)
+ if (warmup_stage || sv_ready_restart || g_race_qualifying == 2)
{
- if (!readyrestart_happened || autocvar_sv_ready_restart_repeatable)
+ if (!readyrestart_happened || sv_ready_restart_repeatable)
{
if (time < game_starttime) // game is already restarting
return;
if (caller.ready) // toggle
{
caller.ready = false;
- bprint(playername(caller, false), "^2 is ^1NOT^2 ready\n");
+ if(IS_PLAYER(caller) || caller.caplayer == 1)
+ bprint(playername(caller, false), "^2 is ^1NOT^2 ready\n");
}
else
{
caller.ready = true;
- bprint(playername(caller, false), "^2 is ready\n");
+ if(IS_PLAYER(caller) || caller.caplayer == 1)
+ bprint(playername(caller, false), "^2 is ready\n");
}
// cannot reset the game while a timeout is active!
{
case CMD_REQUEST_COMMAND:
{
- if (argv(1) != "")
+ if (argv(1) == "")
{
- if (IS_CLIENT(caller))
+ return;
+ }
+ if (!IS_CLIENT(caller))
+ {
+ return;
+ }
+ if (!teamplay)
+ {
+ sprint(caller, "^7selectteam can only be used in teamgames\n");
+ return;
+ }
+ if (caller.team_forced > 0)
+ {
+ sprint(caller, "^7selectteam can not be used as your team is forced\n");
+ return;
+ }
+ if (lockteams)
+ {
+ sprint(caller, "^7The game has already begun, you must wait until the next map to be able to join a team.\n");
+ return;
+ }
+ float selection;
+ switch (argv(1))
+ {
+ case "red":
{
- if (teamplay)
- {
- if (caller.team_forced <= 0)
- {
- if (!lockteams)
- {
- float selection;
-
- switch (argv(1))
- {
- case "red": selection = NUM_TEAM_1;
- break;
- case "blue": selection = NUM_TEAM_2;
- break;
- case "yellow": selection = NUM_TEAM_3;
- break;
- case "pink": selection = NUM_TEAM_4;
- break;
- case "auto": selection = (-1);
- break;
-
- default: selection = 0;
- break;
- }
-
- if (selection)
- {
- if (caller.team == selection && selection != -1 && !IS_DEAD(caller))
- {
- sprint(caller, "^7You already are on that team.\n");
- }
- else if (CS(caller).wasplayer && autocvar_g_changeteam_banned)
- {
- sprint(caller, "^1You cannot change team, forbidden by the server.\n");
- }
- else
- {
- if (autocvar_g_balance_teams && autocvar_g_balance_teams_prevent_imbalance)
- {
- CheckAllowedTeams(caller);
- GetTeamCounts(caller);
- if (!TeamSmallerEqThanTeam(Team_TeamToNumber(selection), Team_TeamToNumber(caller.team), caller))
- {
- Send_Notification(NOTIF_ONE, caller, MSG_INFO, INFO_TEAMCHANGE_LARGERTEAM);
- return;
- }
- }
- ClientKill_TeamChange(caller, selection);
- }
- if(!IS_PLAYER(caller))
- caller.team_selected = true; // avoids asking again for team selection on join
- }
- }
- else
- {
- sprint(caller, "^7The game has already begun, you must wait until the next map to be able to join a team.\n");
- }
- }
- else
- {
- sprint(caller, "^7selectteam can not be used as your team is forced\n");
- }
- }
- else
- {
- sprint(caller, "^7selectteam can only be used in teamgames\n");
- }
+ selection = NUM_TEAM_1;
+ break;
+ }
+ case "blue":
+ {
+ selection = NUM_TEAM_2;
+ break;
+ }
+ case "yellow":
+ {
+ selection = NUM_TEAM_3;
+ break;
+ }
+ case "pink":
+ {
+ selection = NUM_TEAM_4;
+ break;
}
+ case "auto":
+ {
+ selection = (-1);
+ break;
+ }
+ default:
+ {
+ return;
+ }
+ }
+ if (caller.team == selection && selection != -1 && !IS_DEAD(caller))
+ {
+ sprint(caller, "^7You already are on that team.\n");
+ return;
+ }
+ if (CS(caller).wasplayer && autocvar_g_changeteam_banned)
+ {
+ sprint(caller, "^1You cannot change team, forbidden by the server.\n");
return;
}
+ if ((selection != -1) && autocvar_g_balance_teams &&
+ autocvar_g_balance_teams_prevent_imbalance)
+ {
+ entity balance = TeamBalance_CheckAllowedTeams(caller);
+ TeamBalance_GetTeamCounts(balance, caller);
+ if ((Team_IndexToBit(Team_TeamToIndex(selection)) &
+ TeamBalance_FindBestTeams(balance, caller, false)) == 0)
+ {
+ Send_Notification(NOTIF_ONE, caller, MSG_INFO, INFO_TEAMCHANGE_LARGERTEAM);
+ TeamBalance_Destroy(balance);
+ return;
+ }
+ TeamBalance_Destroy(balance);
+ }
+ ClientKill_TeamChange(caller, selection);
+ if (!IS_PLAYER(caller))
+ {
+ caller.team_selected = true; // avoids asking again for team selection on join
+ }
+ return;
}
-
default:
sprint(caller, "Incorrect parameters for ^2selectteam^7\n");
case CMD_REQUEST_USAGE:
sprint(caller, sprintf("Invalid voice. Use one of: %s\n", allvoicesamples));
return;
}
- if (argc >= 3) VoiceMessage(caller, e, substring(command, argv_start_index(2), argv_end_index(-1) - argv_start_index(2)));
- else VoiceMessage(caller, e, "");
+ string msg = "";
+ if (argc >= 3)
+ msg = substring(command, argv_start_index(2), argv_end_index(-1) - argv_start_index(2));
+ VoiceMessage(caller, e, msg);
return;
}