Xonotic
common.qh File Reference
+ Include dependency graph for common.qh:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define COMMON_COMMAND(id, description)
 
#define GetClientErrorString(clienterror, original_input)   GetClientErrorString_color(clienterror, original_input, "^7")
 

Functions

 COMMON_COMMAND (cvar_changes, "Prints a list of all changed server cvars")
 
 COMMON_COMMAND (cvar_purechanges, "Prints a list of all changed gameplay cvars")
 
 COMMON_COMMAND (editmob, "Modifies a monster or all monsters")
 
 COMMON_COMMAND (info, "Request for unique server information set up by admin")
 
 COMMON_COMMAND (ladder, "Get information about top players if supported")
 
 COMMON_COMMAND (lsmaps, "List maps which can be used with the current game mode")
 
 COMMON_COMMAND (printmaplist, "Display full server maplist reply")
 
 COMMON_COMMAND (rankings, "Print information about rankings")
 
 COMMON_COMMAND (records, "Print records for the current gametype")
 
 COMMON_COMMAND (teamstatus, "Show information about player and team scores")
 
 COMMON_COMMAND (time, "Print different formats/readouts of time")
 
 COMMON_COMMAND (timein, "Resume the game from being paused with a timeout")
 
 COMMON_COMMAND (timeout, "Call a timeout which pauses the game for certain amount of time unless unpaused")
 
 COMMON_COMMAND (vote, "Request an action to be voted upon by players")
 
 COMMON_COMMAND (who, "Display detailed client information about all players")
 
void CommonCommand_cvar_changes (int request, entity caller)
 
void CommonCommand_cvar_purechanges (int request, entity caller)
 
void CommonCommand_editmob (int request, entity caller, int argc)
 
void CommonCommand_info (int request, entity caller, int argc)
 
void CommonCommand_ladder (int request, entity caller)
 
void CommonCommand_lsmaps (int request, entity caller)
 
float CommonCommand_macro_command (int argc, entity caller, string command)
 
void CommonCommand_macro_help (entity caller)
 
float CommonCommand_macro_usage (int argc, entity caller)
 
void CommonCommand_macro_write_aliases (float fh)
 
void CommonCommand_printmaplist (int request, entity caller)
 
void CommonCommand_rankings (int request, entity caller)
 
void CommonCommand_records (int request, entity caller)
 
void CommonCommand_teamstatus (int request, entity caller)
 
void CommonCommand_time (int request, entity caller)
 
void CommonCommand_timein (int request, entity caller)
 
void CommonCommand_timeout (int request, entity caller)
 
void CommonCommand_who (int request, entity caller, int argc)
 
string GetCallerName (entity caller)
 
string GetClientErrorString_color (float clienterror, string original_input, string col)
 
string GetCommandPrefix (entity caller)
 
entity GetFilteredEntity (string input)
 
entity GetIndexedEntity (int argc, float start_index)
 
void print_to (entity to, string input)
 
 STATIC_INIT (COMMON_COMMANDS_aliases)
 
void timeout_handler_reset (entity this)
 
void timeout_handler_think (entity this)
 
float VerifyClientEntity (entity client, float must_be_real, float must_be_bots)
 
float VerifyClientNumber (float tmp_number)
 
float VerifyKickableEntity (entity client)
 

Variables

float allowed_timeouts
 
string autocvar_sv_adminnick
 
bool autocvar_sv_status_privacy
 
bool autocvar_sv_timeout
 
float autocvar_sv_timeout_leadtime
 
float autocvar_sv_timeout_length
 
int autocvar_sv_timeout_number
 
float autocvar_sv_timeout_resumetime
 
const float CLIENT_ACCEPTABLE = 1
 
const float CLIENT_DOESNT_EXIST = -1
 
const float CLIENT_NOT_BOT = -3
 
const float CLIENT_NOT_REAL = -2
 
vector lastV_angle
 
float next_token
 
float orig_slowmo
 
float sys_frametime
 
const float TIMEOUT_ACTIVE = 2
 
entity timeout_caller
 
entity timeout_handler
 
const float TIMEOUT_INACTIVE = 0
 
const float TIMEOUT_LEADTIME = 1
 
float timeout_leadtime
 
const float TIMEOUT_SLOWMO_VALUE = 0.0001
 
float timeout_time
 

Macro Definition Documentation

◆ COMMON_COMMAND

#define COMMON_COMMAND (   id,
  description 
)
Value:
CLASS(commoncommand_##id, Command) \
ATTRIB(commoncommand_##id, m_name, string, #id); \
ATTRIB(commoncommand_##id, m_description, string, description); \
ENDCLASS(commoncommand_##id) \
REGISTER(COMMON_COMMANDS, CMD_SV, id, m_id, NEW(commoncommand_##id)); \
METHOD(commoncommand_##id, m_invokecmd, void(commoncommand_##id this, int request, entity caller, int arguments, string command))
#define NEW(cname,...)
Definition: oo.qh:105
CLASS(Object) Object
Definition: oo.qh:318
entity() spawn
int m_id
Definition: effect.qh:19
string m_name
Definition: scores.qh:135

Definition at line 18 of file common.qh.

◆ GetClientErrorString

#define GetClientErrorString (   clienterror,
  original_input 
)    GetClientErrorString_color(clienterror, original_input, "^7")

Function Documentation

◆ COMMON_COMMAND() [1/15]

COMMON_COMMAND ( cvar_changes  ,
"Prints a list of all changed server cvars"   
)

Definition at line 147 of file common.qh.

References CommonCommand_cvar_changes().

147 { CommonCommand_cvar_changes(request, caller); }
void CommonCommand_cvar_changes(int request, entity caller)
Definition: common.qc:276
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [2/15]

COMMON_COMMAND ( cvar_purechanges  ,
"Prints a list of all changed gameplay cvars"   
)

Definition at line 148 of file common.qh.

References CommonCommand_cvar_purechanges().

148 { CommonCommand_cvar_purechanges(request, caller); }
void CommonCommand_cvar_purechanges(int request, entity caller)
Definition: common.qc:297
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [3/15]

COMMON_COMMAND ( editmob  ,
"Modifies a monster or all monsters"   
)

Definition at line 149 of file common.qh.

References CommonCommand_editmob().

149 { CommonCommand_editmob(request, caller, arguments); }
void CommonCommand_editmob(int request, entity caller, int argc)
Definition: common.qc:318
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [4/15]

COMMON_COMMAND ( info  ,
"Request for unique server information set up by admin"   
)

Definition at line 150 of file common.qh.

References CommonCommand_info().

150 { CommonCommand_info(request, caller, arguments); }
void CommonCommand_info(int request, entity caller, int argc)
Definition: common.qc:465
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [5/15]

COMMON_COMMAND ( ladder  ,
"Get information about top players if supported"   
)

Definition at line 151 of file common.qh.

References CommonCommand_ladder().

151 { CommonCommand_ladder(request, caller); }
void CommonCommand_ladder(int request, entity caller)
Definition: common.qc:489
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [6/15]

COMMON_COMMAND ( lsmaps  ,
"List maps which can be used with the current game mode"   
)

Definition at line 152 of file common.qh.

References CommonCommand_lsmaps().

152 { CommonCommand_lsmaps(request, caller); }
void CommonCommand_lsmaps(int request, entity caller)
Definition: common.qc:509
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [7/15]

COMMON_COMMAND ( printmaplist  ,
"Display full server maplist reply"   
)

Definition at line 153 of file common.qh.

References CommonCommand_printmaplist().

153 { CommonCommand_printmaplist(request, caller); }
void CommonCommand_printmaplist(int request, entity caller)
Definition: common.qc:529
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [8/15]

COMMON_COMMAND ( rankings  ,
"Print information about rankings"   
)

Definition at line 154 of file common.qh.

References CommonCommand_rankings().

154 { CommonCommand_rankings(request, caller); }
void CommonCommand_rankings(int request, entity caller)
Definition: common.qc:549
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [9/15]

COMMON_COMMAND ( records  ,
"Print records for the current gametype  
)

Definition at line 155 of file common.qh.

References CommonCommand_records().

155 { CommonCommand_records(request, caller); }
void CommonCommand_records(int request, entity caller)
Definition: common.qc:569
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [10/15]

COMMON_COMMAND ( teamstatus  ,
"Show information about player and team scores  
)

Definition at line 156 of file common.qh.

References CommonCommand_teamstatus().

156 { CommonCommand_teamstatus(request, caller); }
void CommonCommand_teamstatus(int request, entity caller)
Definition: common.qc:598
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [11/15]

COMMON_COMMAND ( time  ,
"Print different formats/readouts of time  
)

Definition at line 157 of file common.qh.

References CommonCommand_time().

157 { CommonCommand_time(request, caller); }
void CommonCommand_time(int request, entity caller)
Definition: common.qc:618
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [12/15]

COMMON_COMMAND ( timein  ,
"Resume the game from being paused with a timeout"   
)

Definition at line 158 of file common.qh.

References CommonCommand_timein().

158 { CommonCommand_timein(request, caller); }
void CommonCommand_timein(int request, entity caller)
Definition: common.qc:644
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [13/15]

COMMON_COMMAND ( timeout  ,
"Call a timeout which pauses the game for certain amount of time unless unpaused"   
)

Definition at line 159 of file common.qh.

References CommonCommand_timeout().

159 { CommonCommand_timeout(request, caller); }
void CommonCommand_timeout(int request, entity caller)
Definition: common.qc:700
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [14/15]

COMMON_COMMAND ( vote  ,
"Request an action to be voted upon by players  
)

Definition at line 160 of file common.qh.

References VoteCommand().

160 { VoteCommand(request, caller, arguments, command); }
void VoteCommand(int request, entity caller, int argc, string vote_command)
Definition: vote.qc:1264
+ Here is the call graph for this function:

◆ COMMON_COMMAND() [15/15]

COMMON_COMMAND ( who  ,
"Display detailed client information about all players  
)

Definition at line 161 of file common.qh.

References CommonCommand_who().

161 { CommonCommand_who(request, caller, arguments);}
void CommonCommand_who(int request, entity caller, int argc)
Definition: common.qc:769
+ Here is the call graph for this function:

◆ CommonCommand_cvar_changes()

void CommonCommand_cvar_changes ( int  request,
entity  caller 
)

Definition at line 276 of file common.qc.

References CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, cvar_changes, GetCommandPrefix(), print_to(), and strcat().

Referenced by COMMON_COMMAND().

277 {
278  switch (request)
279  {
280  case CMD_REQUEST_COMMAND:
281  {
282  print_to(caller, cvar_changes);
283  return; // never fall through to usage
284  }
285 
286  default:
287  case CMD_REQUEST_USAGE:
288  {
289  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " cvar_changes"));
290  print_to(caller, " No arguments required.");
291  print_to(caller, "See also: ^2cvar_purechanges^7");
292  return;
293  }
294  }
295 }
string GetCommandPrefix(entity caller)
Definition: common.qc:26
const int CMD_REQUEST_USAGE
Definition: command.qh:4
void print_to(entity to, string input)
Definition: common.qc:172
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
string cvar_changes
Definition: world.qh:41
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_cvar_purechanges()

void CommonCommand_cvar_purechanges ( int  request,
entity  caller 
)

Definition at line 297 of file common.qc.

References CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, cvar_purechanges, GetCommandPrefix(), print_to(), and strcat().

Referenced by COMMON_COMMAND().

298 {
299  switch (request)
300  {
301  case CMD_REQUEST_COMMAND:
302  {
303  print_to(caller, cvar_purechanges);
304  return; // never fall through to usage
305  }
306 
307  default:
308  case CMD_REQUEST_USAGE:
309  {
310  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " cvar_purechanges"));
311  print_to(caller, " No arguments required.");
312  print_to(caller, "See also: ^2cvar_changes^7");
313  return;
314  }
315  }
316 }
string GetCommandPrefix(entity caller)
Definition: common.qc:26
const int CMD_REQUEST_USAGE
Definition: command.qh:4
void print_to(entity to, string input)
Definition: common.qc:172
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
string cvar_purechanges
Definition: world.qh:42
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_editmob()

void CommonCommand_editmob ( int  request,
entity  caller,
int  argc 
)

Definition at line 318 of file common.qc.

References argv(), autocvar_g_campaign, autocvar_g_monsters, autocvar_g_monsters_edit, autocvar_g_monsters_max, autocvar_g_monsters_max_perplayer, CENTER_OR_VIEWOFS, CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, Damage(), DMG_NOWEP, entity(), FOREACH, ftos(), g_monsters, GetCommandPrefix(), GetResource(), IL_CLEAR, IL_EACH, IS_DEAD, IS_MONSTER, IS_PLAYER, LOG_INFO, M_ARGV, makevectors, Monster_Remove(), monsters_killed, monsters_total, MOVE_NORMAL, MUTATOR_CALLHOOK, NULL, print_to(), RES_HEALTH, spawn(), spawnmonster(), stof(), strcat(), totalspawned, trace_endpos, trace_ent, v_forward, WarpZone_TraceBox(), and WarpZone_TraceLine().

Referenced by COMMON_COMMAND().

319 {
320  switch (request)
321  {
322  case CMD_REQUEST_COMMAND:
323  {
324  if (autocvar_g_campaign) { print_to(caller, "Monster editing is disabled in singleplayer"); return; }
325  // no checks for g_monsters here, as it may be toggled mid match which existing monsters
326 
327  if (caller)
328  {
329  makevectors(caller.v_angle);
330  WarpZone_TraceLine(caller.origin + caller.view_ofs, caller.origin + caller.view_ofs + v_forward * 100, MOVE_NORMAL, caller);
331  }
332 
333  entity mon = trace_ent;
334  bool is_visible = IS_MONSTER(mon);
335  string argument = argv(2);
336 
337  switch (argv(1))
338  {
339  case "name":
340  {
341  if (!caller) { print_to(caller, "Only players can edit monsters"); return; }
342  if (!argument) break; // escape to usage
343  if (!autocvar_g_monsters_edit) { print_to(caller, "Monster editing is disabled"); return; }
344  if (mon.realowner != caller && autocvar_g_monsters_edit < 2) { print_to(caller, "This monster does not belong to you"); return; }
345  if (!is_visible) { print_to(caller, "You must look at your monster to edit it"); return; }
346 
347  string mon_oldname = mon.monster_name;
348 
349  mon.monster_name = argument;
350  if (mon.sprite) WaypointSprite_UpdateSprites(mon.sprite, WP_Monster, WP_Null, WP_Null);
351  print_to(caller, sprintf("Your pet '%s' is now known as '%s'", mon_oldname, mon.monster_name));
352  return;
353  }
354  case "spawn":
355  {
356  if (!caller) { print_to(caller, "Only players can spawn monsters"); return; }
357  if (!argv(2)) break; // escape to usage
358 
359  int moveflag, tmp_moncount = 0;
360  string arg_lower = strtolower(argument);
361  moveflag = (argv(3)) ? stof(argv(3)) : 1; // follow owner if not defined
362 
363  if (arg_lower == "list") { print_to(caller, monsterlist_reply); return; }
364 
365  IL_EACH(g_monsters, it.realowner == caller,
366  {
367  ++tmp_moncount;
368  });
369 
370  if (!autocvar_g_monsters) { print_to(caller, "Monsters are disabled"); return; }
371  if (autocvar_g_monsters_max <= 0 || autocvar_g_monsters_max_perplayer <= 0) { print_to(caller, "Monster spawning is disabled"); return; }
372  if (!IS_PLAYER(caller)) { print_to(caller, "You must be playing to spawn a monster"); return; }
373  if (MUTATOR_CALLHOOK(AllowMobSpawning, caller)) { print_to(caller, M_ARGV(1, string)); return; }
374  if (caller.vehicle) { print_to(caller, "You can't spawn monsters while driving a vehicle"); return; }
375  if (STAT(FROZEN, caller)) { print_to(caller, "You can't spawn monsters while frozen"); return; }
376  if (IS_DEAD(caller)) { print_to(caller, "You can't spawn monsters while dead"); return; }
377  if (tmp_moncount >= autocvar_g_monsters_max) { print_to(caller, "The maximum monster count has been reached"); return; }
378  if (tmp_moncount >= autocvar_g_monsters_max_perplayer) { print_to(caller, "You can't spawn any more monsters"); return; }
379 
380  bool found = false;
381  FOREACH(Monsters, it != MON_Null && it.netname == arg_lower,
382  {
383  found = true;
384  break;
385  });
386 
387  if (!found && arg_lower != "random" && arg_lower != "anyrandom") { print_to(caller, "Invalid monster"); return; }
388 
389  totalspawned += 1;
390  WarpZone_TraceBox(CENTER_OR_VIEWOFS(caller), caller.mins, caller.maxs, CENTER_OR_VIEWOFS(caller) + v_forward * 150, true, caller);
391  mon = spawnmonster(spawn(), arg_lower, MON_Null, caller, caller, trace_endpos, false, false, moveflag);
392  print_to(caller, strcat("Spawned ", mon.monster_name));
393  return;
394  }
395  case "kill":
396  {
397  if (!caller) { print_to(caller, "Only players can kill monsters"); return; }
398  if (mon.realowner != caller && autocvar_g_monsters_edit < 2) { print_to(caller, "This monster does not belong to you"); return; }
399  if (!is_visible) { print_to(caller, "You must look at your monster to edit it"); return; }
400 
401  Damage(mon, NULL, NULL, GetResource(mon, RES_HEALTH) + mon.max_health + 200, DEATH_KILL.m_id, DMG_NOWEP, mon.origin, '0 0 0');
402  print_to(caller, strcat("Your pet '", mon.monster_name, "' has been brutally mutilated"));
403  return;
404  }
405  case "skin":
406  {
407  if (!caller) { print_to(caller, "Only players can edit monsters"); return; }
408  if (!argument) break; // escape to usage
409  if (!autocvar_g_monsters_edit) { print_to(caller, "Monster editing is disabled"); return; }
410  if (!is_visible) { print_to(caller, "You must look at your monster to edit it"); return; }
411  if (mon.realowner != caller && autocvar_g_monsters_edit < 2) { print_to(caller, "This monster does not belong to you"); return; }
412  if (mon.monsterdef == MON_MAGE) { print_to(caller, "Mage skins can't be changed"); return; } // TODO
413 
414  mon.skin = stof(argument);
415  print_to(caller, strcat("Monster skin successfully changed to ", ftos(mon.skin)));
416  return;
417  }
418  case "movetarget":
419  {
420  if (!caller) { print_to(caller, "Only players can edit monsters"); return; }
421  if (!argument) break; // escape to usage
422  if (!autocvar_g_monsters_edit) { print_to(caller, "Monster editing is disabled"); return; }
423  if (!is_visible) { print_to(caller, "You must look at your monster to edit it"); return; }
424  if (mon.realowner != caller && autocvar_g_monsters_edit < 2) { print_to(caller, "This monster does not belong to you"); return; }
425 
426  mon.monster_moveflags = stof(argument);
427  print_to(caller, strcat("Monster move target successfully changed to ", ftos(mon.monster_moveflags)));
428  return;
429  }
430  case "butcher":
431  {
432  if (caller) { print_to(caller, "This command is not available to players"); return; }
433  if (MUTATOR_CALLHOOK(AllowMobButcher)) { LOG_INFO(M_ARGV(0, string)); return; }
434 
435  int tmp_remcount = 0;
436 
437  IL_EACH(g_monsters, true,
438  {
439  Monster_Remove(it);
440  ++tmp_remcount;
441  });
443 
445 
446  print_to(caller, (tmp_remcount) ? sprintf("Killed %d monster%s", tmp_remcount, (tmp_remcount == 1) ? "" : "s") : "No monsters to kill");
447  return;
448  }
449  }
450  }
451 
452  default:
453  case CMD_REQUEST_USAGE:
454  {
455  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " editmob <command> [<arguments>]"));
456  print_to(caller, " Where <command> can be butcher spawn skin movetarget kill name");
457  print_to(caller, " spawn, skin, movetarget and name require <arguments>");
458  print_to(caller, " spawn also takes arguments list and random");
459  print_to(caller, " Monster will follow owner if third argument of spawn command is not defined");
460  return;
461  }
462  }
463 }
bool autocvar_g_monsters_edit
Definition: sv_monsters.qh:6
#define IL_EACH(this, cond, body)
int monsters_total
Definition: sv_monsters.qh:34
entity spawnmonster(entity e, string monster, Monster monster_id, entity spawnedby, entity own, vector orig, bool respwn, bool removeifinvalid, int moveflag)
Definition: sv_spawn.qc:14
#define IL_CLEAR(this)
Remove all elements.
string GetCommandPrefix(entity caller)
Definition: common.qc:26
const int CMD_REQUEST_USAGE
Definition: command.qh:4
void WarpZone_TraceBox(vector org, vector mi, vector ma, vector end, float nomonsters, entity forent)
Definition: common.qc:333
entity() spawn
const float MOVE_NORMAL
Definition: csprogsdefs.qc:252
int autocvar_g_monsters_max
Definition: sv_monsters.qh:9
#define IS_MONSTER(v)
Definition: utils.qh:21
void print_to(entity to, string input)
Definition: common.qc:172
#define DMG_NOWEP
Definition: damage.qh:126
entity trace_ent
Definition: csprogsdefs.qc:40
int autocvar_g_monsters_max_perplayer
Definition: sv_monsters.qh:10
RES_HEALTH
Definition: ent_cs.qc:126
int monsters_killed
Definition: sv_monsters.qh:35
float autocvar_g_monsters
Definition: sv_monsters.qh:5
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
#define NULL
Definition: post.qh:17
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
#define LOG_INFO(...)
Definition: log.qh:70
void Monster_Remove(entity this)
Definition: sv_monsters.qc:852
vector trace_endpos
Definition: csprogsdefs.qc:37
void Damage(entity targ, entity inflictor, entity attacker, float damage, int deathtype,.entity weaponentity, vector hitloc, vector force)
Definition: damage.qc:583
#define M_ARGV(x, type)
Definition: events.qh:17
#define IS_DEAD(s)
Definition: utils.qh:26
#define CENTER_OR_VIEWOFS(ent)
Definition: utils.qh:28
int totalspawned
number of monsters spawned with mobspawn command
Definition: sv_monsters.qh:124
float GetResource(entity e, Resource res_type)
Returns the current amount of resource the given entity has.
Definition: cl_resources.qc:10
void WarpZone_TraceLine(vector org, vector end, float nomonsters, entity forent)
Definition: common.qc:338
#define MUTATOR_CALLHOOK(id,...)
Definition: base.qh:140
bool autocvar_g_campaign
Definition: campaign.qh:6
IntrusiveList g_monsters
Definition: sv_monsters.qh:144
#define makevectors
Definition: post.qh:21
#define FOREACH(list, cond, body)
Definition: iter.qh:19
#define IS_PLAYER(v)
Definition: utils.qh:9
vector v_forward
Definition: csprogsdefs.qc:31
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_info()

void CommonCommand_info ( int  request,
entity  caller,
int  argc 
)

Definition at line 465 of file common.qc.

References argv(), CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, cvar_string(), GetCommandPrefix(), print_to(), and strcat().

Referenced by COMMON_COMMAND().

466 {
467  switch (request)
468  {
469  case CMD_REQUEST_COMMAND:
470  {
471  string command = cvar_string(strcat("sv_info_", argv(1)));
472 
473  if (command) wordwrap_sprint(caller, command, 1000);
474  else print_to(caller, "ERROR: unsupported info command");
475 
476  return; // never fall through to usage
477  }
478 
479  default:
480  case CMD_REQUEST_USAGE:
481  {
482  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " info <request>"));
483  print_to(caller, " Where <request> is the suffixed string appended onto the request for cvar.");
484  return;
485  }
486  }
487 }
string GetCommandPrefix(entity caller)
Definition: common.qc:26
const int CMD_REQUEST_USAGE
Definition: command.qh:4
void print_to(entity to, string input)
Definition: common.qc:172
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_ladder()

void CommonCommand_ladder ( int  request,
entity  caller 
)

Definition at line 489 of file common.qc.

References CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, GetCommandPrefix(), print_to(), and strcat().

Referenced by COMMON_COMMAND().

490 {
491  switch (request)
492  {
493  case CMD_REQUEST_COMMAND:
494  {
495  print_to(caller, ladder_reply);
496  return; // never fall through to usage
497  }
498 
499  default:
500  case CMD_REQUEST_USAGE:
501  {
502  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " ladder"));
503  print_to(caller, " No arguments required.");
504  return;
505  }
506  }
507 }
string GetCommandPrefix(entity caller)
Definition: common.qc:26
const int CMD_REQUEST_USAGE
Definition: command.qh:4
void print_to(entity to, string input)
Definition: common.qc:172
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_lsmaps()

void CommonCommand_lsmaps ( int  request,
entity  caller 
)

Definition at line 509 of file common.qc.

References CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, GetCommandPrefix(), print_to(), and strcat().

Referenced by COMMON_COMMAND().

510 {
511  switch (request)
512  {
513  case CMD_REQUEST_COMMAND:
514  {
515  print_to(caller, lsmaps_reply);
516  return; // never fall through to usage
517  }
518 
519  default:
520  case CMD_REQUEST_USAGE:
521  {
522  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " lsmaps"));
523  print_to(caller, " No arguments required.");
524  return;
525  }
526  }
527 }
string GetCommandPrefix(entity caller)
Definition: common.qc:26
const int CMD_REQUEST_USAGE
Definition: command.qh:4
void print_to(entity to, string input)
Definition: common.qc:172
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_macro_command()

float CommonCommand_macro_command ( int  argc,
entity  caller,
string  command 
)

Definition at line 168 of file common.qh.

References argv(), and FOREACH.

Referenced by GameCommand(), and SV_ParseClientCommand().

169 {
170  string c = strtolower(argv(0));
171  FOREACH(COMMON_COMMANDS, it.m_name == c, {
172  it.m_invokecmd(it, CMD_REQUEST_COMMAND, caller, argc, command);
173  return true;
174  });
175  return false;
176 }
#define FOREACH(list, cond, body)
Definition: iter.qh:19
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_macro_help()

void CommonCommand_macro_help ( entity  caller)

Definition at line 163 of file common.qh.

References FOREACH, and print_to().

Referenced by GameCommand(), and SV_ParseClientCommand().

164 {
165  FOREACH(COMMON_COMMANDS, true, { print_to(caller, sprintf(" ^2%s^7: %s", it.m_name, it.m_description)); });
166 }
void print_to(entity to, string input)
Definition: common.qc:172
#define FOREACH(list, cond, body)
Definition: iter.qh:19
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_macro_usage()

float CommonCommand_macro_usage ( int  argc,
entity  caller 
)

Definition at line 178 of file common.qh.

References argv(), and FOREACH.

Referenced by GameCommand(), and SV_ParseClientCommand().

179 {
180  string c = strtolower(argv(1));
181  FOREACH(COMMON_COMMANDS, it.m_name == c, {
182  it.m_invokecmd(it, CMD_REQUEST_USAGE, caller, argc, "");
183  return true;
184  });
185  return false;
186 }
#define FOREACH(list, cond, body)
Definition: iter.qh:19
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_macro_write_aliases()

void CommonCommand_macro_write_aliases ( float  fh)

Definition at line 188 of file common.qh.

References CMD_Write_Alias, and FOREACH.

Referenced by GENERIC_COMMAND().

189 {
190  FOREACH(COMMON_COMMANDS, true, { CMD_Write_Alias("qc_cmd_svcmd", it.m_name, it.m_description); });
191 }
#define CMD_Write_Alias(execute, command, description)
Definition: generic.qh:34
#define FOREACH(list, cond, body)
Definition: iter.qh:19
+ Here is the caller graph for this function:

◆ CommonCommand_printmaplist()

void CommonCommand_printmaplist ( int  request,
entity  caller 
)

Definition at line 529 of file common.qc.

References CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, GetCommandPrefix(), print_to(), and strcat().

Referenced by COMMON_COMMAND().

530 {
531  switch (request)
532  {
533  case CMD_REQUEST_COMMAND:
534  {
535  print_to(caller, maplist_reply);
536  return; // never fall through to usage
537  }
538 
539  default:
540  case CMD_REQUEST_USAGE:
541  {
542  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " printmaplist"));
543  print_to(caller, " No arguments required.");
544  return;
545  }
546  }
547 }
string GetCommandPrefix(entity caller)
Definition: common.qc:26
const int CMD_REQUEST_USAGE
Definition: command.qh:4
void print_to(entity to, string input)
Definition: common.qc:172
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_rankings()

void CommonCommand_rankings ( int  request,
entity  caller 
)

Definition at line 549 of file common.qc.

References CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, GetCommandPrefix(), print_to(), and strcat().

Referenced by COMMON_COMMAND().

550 {
551  switch (request)
552  {
553  case CMD_REQUEST_COMMAND:
554  {
555  print_to(caller, rankings_reply);
556  return; // never fall through to usage
557  }
558 
559  default:
560  case CMD_REQUEST_USAGE:
561  {
562  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " rankings"));
563  print_to(caller, " No arguments required.");
564  return;
565  }
566  }
567 }
string GetCommandPrefix(entity caller)
Definition: common.qc:26
const int CMD_REQUEST_USAGE
Definition: command.qh:4
void print_to(entity to, string input)
Definition: common.qc:172
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_records()

void CommonCommand_records ( int  request,
entity  caller 
)

Definition at line 569 of file common.qc.

References argv(), CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, GetCommandPrefix(), print_to(), stoi, and strcat().

Referenced by COMMON_COMMAND().

570 {
571  switch (request)
572  {
573  case CMD_REQUEST_COMMAND:
574  {
575  int num = stoi(argv(1));
576  if(num > 0 && num <= 10 && records_reply[num - 1] != "")
577  print_to(caller, records_reply[num - 1]);
578  else
579  {
580  for (int i = 0; i < 10; ++i)
581  if (records_reply[i] != "") print_to(caller, records_reply[i]);
582  }
583 
584  return; // never fall through to usage
585  }
586 
587  default:
588  case CMD_REQUEST_USAGE:
589  {
590  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " records [<pagenum>]"));
591  print_to(caller, " Without arguments it prints all records (all pages) for the current gametype,");
592  print_to(caller, " otherwise if there are multiple pages it only prints page <pagenum> (1..10),");
593  return;
594  }
595  }
596 }
string GetCommandPrefix(entity caller)
Definition: common.qc:26
const int CMD_REQUEST_USAGE
Definition: command.qh:4
void print_to(entity to, string input)
Definition: common.qc:172
#define stoi(s)
Definition: int.qh:4
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_teamstatus()

void CommonCommand_teamstatus ( int  request,
entity  caller 
)

Definition at line 598 of file common.qc.

References CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, GetCommandPrefix(), print_to(), Score_NicePrint(), and strcat().

Referenced by COMMON_COMMAND().

599 {
600  switch (request)
601  {
602  case CMD_REQUEST_COMMAND:
603  {
604  Score_NicePrint(caller);
605  return; // never fall through to usage
606  }
607 
608  default:
609  case CMD_REQUEST_USAGE:
610  {
611  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " teamstatus"));
612  print_to(caller, " No arguments required.");
613  return;
614  }
615  }
616 }
string GetCommandPrefix(entity caller)
Definition: common.qc:26
const int CMD_REQUEST_USAGE
Definition: command.qh:4
void Score_NicePrint(entity to)
Prints the scores to the console of a player.
Definition: scores.qc:903
void print_to(entity to, string input)
Definition: common.qc:172
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_time()

void CommonCommand_time ( int  request,
entity  caller 
)

Definition at line 618 of file common.qc.

References CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, ftos(), GetCommandPrefix(), gettime(), GETTIME_FRAMESTART, GETTIME_HIRES, GETTIME_REALTIME, GETTIME_UPTIME, print_to(), strcat(), and time.

Referenced by COMMON_COMMAND().

619 {
620  switch (request)
621  {
622  case CMD_REQUEST_COMMAND:
623  {
624  print_to(caller, strcat("time = ", ftos(time)));
625  print_to(caller, strcat("frame start = ", ftos(gettime(GETTIME_FRAMESTART))));
626  print_to(caller, strcat("realtime = ", ftos(gettime(GETTIME_REALTIME))));
627  print_to(caller, strcat("hires = ", ftos(gettime(GETTIME_HIRES))));
628  print_to(caller, strcat("uptime = ", ftos(gettime(GETTIME_UPTIME))));
629  print_to(caller, strcat("localtime = ", strftime(true, "%a %b %d %H:%M:%S %Z %Y")));
630  print_to(caller, strcat("gmtime = ", strftime(false, "%a %b %d %H:%M:%S %Z %Y")));
631  return;
632  }
633 
634  default:
635  case CMD_REQUEST_USAGE:
636  {
637  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " time"));
638  print_to(caller, " No arguments required.");
639  return;
640  }
641  }
642 }
string GetCommandPrefix(entity caller)
Definition: common.qc:26
const int CMD_REQUEST_USAGE
Definition: command.qh:4
float GETTIME_FRAMESTART
void print_to(entity to, string input)
Definition: common.qc:172
#define GETTIME_REALTIME
Definition: static.qh:3
float GETTIME_UPTIME
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
float GETTIME_HIRES
float time
Definition: csprogsdefs.qc:16
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_timein()

void CommonCommand_timein ( int  request,
entity  caller 
)

Definition at line 644 of file common.qc.

References autocvar_sv_timeout, autocvar_sv_timeout_resumetime, bprint(), CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, GetCallerName(), GetCommandPrefix(), LOG_TRACE, NULL, print_to(), strcat(), time, TIMEOUT_ACTIVE, timeout_caller, timeout_handler, TIMEOUT_INACTIVE, TIMEOUT_LEADTIME, and timeout_time.

Referenced by COMMON_COMMAND().

645 {
646  switch (request)
647  {
648  case CMD_REQUEST_COMMAND:
649  {
650  if (!caller || autocvar_sv_timeout)
651  {
652  if (!timeout_status) { print_to(caller, "^7Error: There is no active timeout called."); }
653  else if (caller && (caller != timeout_caller))
654  {
655  print_to(caller, "^7Error: You are not allowed to stop the active timeout.");
656  }
657 
658  else // everything should be okay, continue aborting timeout
659  {
660  switch (timeout_status)
661  {
662  case TIMEOUT_LEADTIME:
663  {
664  timeout_status = TIMEOUT_INACTIVE;
665  timeout_time = 0;
666  timeout_handler.nextthink = time; // timeout_handler has to take care of it immediately
667  Kill_Notification(NOTIF_ALL, NULL, MSG_CENTER, CPID_TIMEOUT);
668  bprint(strcat("^7The timeout was aborted by ", GetCallerName(caller), " !\n"));
669  return;
670  }
671 
672  case TIMEOUT_ACTIVE:
673  {
675  timeout_handler.nextthink = time; // timeout_handler has to take care of it immediately
676  bprint(strcat("^1Attention: ^7", GetCallerName(caller), " resumed the game! Prepare for battle!\n"));
677  return;
678  }
679 
680  default: LOG_TRACE("timeout status was inactive, but this code was executed anyway?");
681  return;
682  }
683  }
684  }
685  else { print_to(caller, "^1Timeins are not allowed to be called, enable them with sv_timeout 1.\n"); }
686 
687  return; // never fall through to usage
688  }
689 
690  default:
691  case CMD_REQUEST_USAGE:
692  {
693  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " timein"));
694  print_to(caller, " No arguments required.");
695  return;
696  }
697  }
698 }
bool autocvar_sv_timeout
Definition: common.qh:5
string GetCommandPrefix(entity caller)
Definition: common.qc:26
const int CMD_REQUEST_USAGE
Definition: command.qh:4
void print_to(entity to, string input)
Definition: common.qc:172
entity timeout_handler
Definition: common.qh:56
const float TIMEOUT_ACTIVE
Definition: common.qh:49
const float TIMEOUT_INACTIVE
Definition: common.qh:47
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
float autocvar_sv_timeout_resumetime
Definition: common.qh:9
#define NULL
Definition: post.qh:17
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
entity timeout_caller
Definition: common.qh:55
float timeout_time
Definition: common.qh:59
string GetCallerName(entity caller)
Definition: common.qc:33
#define LOG_TRACE(...)
Definition: log.qh:81
const float TIMEOUT_LEADTIME
Definition: common.qh:48
float time
Definition: csprogsdefs.qc:16
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_timeout()

void CommonCommand_timeout ( int  request,
entity  caller 
)

Definition at line 700 of file common.qc.

References allowed_timeouts, autocvar_g_warmup_allow_timeout, autocvar_sv_timeout, autocvar_sv_timeout_leadtime, autocvar_sv_timeout_length, bprint(), CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, CS(), ftos(), GetCallerName(), GetCommandPrefix(), IS_PLAYER, NULL, print_to(), setthink, strcat(), time, timeout_caller, timeout_handler, timeout_handler_think(), TIMEOUT_LEADTIME, timeout_leadtime, timeout_time, vote_called, and warmup_stage.

Referenced by COMMON_COMMAND().

701 {
702  switch (request)
703  {
704  case CMD_REQUEST_COMMAND:
705  {
706  if (!caller || autocvar_sv_timeout)
707  {
708  float last_possible_timeout = ((autocvar_timelimit * 60) - autocvar_sv_timeout_leadtime - 1);
709 
710  if (timeout_status) { print_to(caller, "^7Error: A timeout is already active."); }
711  else if (vote_called)
712  {
713  print_to(caller, "^7Error: You can not call a timeout while a vote is active.");
714  }
716  {
717  print_to(caller, "^7Error: You can not call a timeout in warmup-stage.");
718  }
719  else if (time < game_starttime)
720  {
721  print_to(caller, "^7Error: You can not call a timeout while the map is being restarted.");
722  }
723  else if (caller && (CS(caller).allowed_timeouts < 1))
724  {
725  print_to(caller, "^7Error: You already used all your timeout calls for this map.");
726  }
727  else if (caller && !IS_PLAYER(caller))
728  {
729  print_to(caller, "^7Error: You must be a player to call a timeout.");
730  }
731  else if ((autocvar_timelimit) && (last_possible_timeout < time - game_starttime))
732  {
733  print_to(caller, "^7Error: It is too late to call a timeout now!");
734  }
735 
736  else // everything should be okay, proceed with starting the timeout
737  {
738  if (caller) CS(caller).allowed_timeouts -= 1;
739  // write a bprint who started the timeout (and how many they have left)
740  bprint(GetCallerName(caller), " ^7called a timeout", (caller ? strcat(" (", ftos(CS(caller).allowed_timeouts), " timeout(s) left)") : ""), "!\n");
741 
742  timeout_status = TIMEOUT_LEADTIME;
743  timeout_caller = caller;
746 
749  timeout_handler.nextthink = time; // always let the entity think asap
750 
751  Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_TIMEOUT);
752  }
753  }
754  else { print_to(caller, "^1Timeouts are not allowed to be called, enable them with sv_timeout 1.\n"); }
755 
756  return; // never fall through to usage
757  }
758 
759  default:
760  case CMD_REQUEST_USAGE:
761  {
762  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " timeout"));
763  print_to(caller, " No arguments required.");
764  return;
765  }
766  }
767 }
bool autocvar_sv_timeout
Definition: common.qh:5
string GetCommandPrefix(entity caller)
Definition: common.qc:26
float autocvar_sv_timeout_length
Definition: common.qh:7
const int CMD_REQUEST_USAGE
Definition: command.qh:4
void timeout_handler_think(entity this)
Definition: common.qc:192
bool autocvar_g_warmup_allow_timeout
Definition: world.qh:10
float autocvar_sv_timeout_leadtime
Definition: common.qh:6
ClientState CS(Client this)
Definition: state.qh:47
bool warmup_stage
Definition: main.qh:103
void print_to(entity to, string input)
Definition: common.qc:172
float vote_called
Definition: vote.qh:43
float timeout_leadtime
Definition: common.qh:60
entity timeout_handler
Definition: common.qh:56
float allowed_timeouts
Definition: common.qh:61
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
#define NULL
Definition: post.qh:17
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
entity timeout_caller
Definition: common.qh:55
float timeout_time
Definition: common.qh:59
string GetCallerName(entity caller)
Definition: common.qc:33
const float TIMEOUT_LEADTIME
Definition: common.qh:48
#define setthink(e, f)
float time
Definition: csprogsdefs.qc:16
#define IS_PLAYER(v)
Definition: utils.qh:9
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CommonCommand_who()

void CommonCommand_who ( int  request,
entity  caller,
int  argc 
)

Definition at line 769 of file common.qc.

References argv(), autocvar_sv_status_privacy, CMD_REQUEST_COMMAND, CMD_REQUEST_USAGE, CS(), etof(), FOREACH_CLIENT, ftos(), GetCommandPrefix(), IS_BOT_CLIENT, jointime, maxclients, ping, ping_packetloss, print_to(), process_time(), strcat(), and time.

Referenced by COMMON_COMMAND().

770 {
771  switch (request)
772  {
773  case CMD_REQUEST_COMMAND:
774  {
775  float total_listed_players, is_bot;
776 
777  float privacy = (caller && autocvar_sv_status_privacy);
778  string separator = strreplace("%", " ", strcat((argv(1) ? argv(1) : " "), "^7"));
779  string tmp_netaddress, tmp_crypto_idfp;
780 
781  print_to(caller, strcat("List of client information", (privacy ? " (some data is hidden for privacy)" : ""), ":"));
782  print_to(caller, sprintf(strreplace(" ", separator, " %-4s %-20s %-5s %-3s %-9s %-16s %s "),
783  "ent", "nickname", "ping", "pl", "time", "ip", "crypto_id"));
784 
785  total_listed_players = 0;
786  FOREACH_CLIENT(true, {
787  is_bot = (IS_BOT_CLIENT(it));
788 
789  if (is_bot)
790  {
791  tmp_netaddress = "null/botclient";
792  tmp_crypto_idfp = "null/botclient";
793  }
794  else if (privacy)
795  {
796  tmp_netaddress = "hidden";
797  tmp_crypto_idfp = "hidden";
798  }
799  else
800  {
801  tmp_netaddress = it.netaddress;
802  tmp_crypto_idfp = it.crypto_idfp;
803  }
804 
805  print_to(caller, sprintf(strreplace(" ", separator, " #%-3d %-20.20s %-5d %-3d %-9s %-16s %s "),
806  etof(it),
807  it.netname,
808  CS(it).ping,
809  CS(it).ping_packetloss,
810  process_time(1, time - CS(it).jointime),
811  tmp_netaddress,
812  tmp_crypto_idfp));
813 
814  ++total_listed_players;
815  });
816 
817  print_to(caller, strcat("Finished listing ", ftos(total_listed_players), " client(s) out of ", ftos(maxclients), " slots."));
818 
819  return; // never fall through to usage
820  }
821 
822  default:
823  case CMD_REQUEST_USAGE:
824  {
825  print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " who [<separator>]"));
826  print_to(caller, " Where <separator> is the optional string to separate the values with, default is a space.");
827  return;
828  }
829  }
830 }
string GetCommandPrefix(entity caller)
Definition: common.qc:26
const int CMD_REQUEST_USAGE
Definition: command.qh:4
bool autocvar_sv_status_privacy
Definition: common.qh:4
ClientState CS(Client this)
Definition: state.qh:47
#define FOREACH_CLIENT(cond, body)
Definition: utils.qh:49
float maxclients
Definition: csprogsdefs.qc:21
ERASEABLE string process_time(float outputtype, int seconds)
Definition: counting.qh:120
void print_to(entity to, string input)
Definition: common.qc:172
float ping
Definition: main.qh:138
float ping_packetloss
Definition: main.qh:138
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
const int CMD_REQUEST_COMMAND
Definition: command.qh:3
float jointime
Definition: client.qh:64
#define IS_BOT_CLIENT(v)
want: (IS_CLIENT(v) && !IS_REAL_CLIENT(v))
Definition: utils.qh:15
float time
Definition: csprogsdefs.qc:16
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetCallerName()

string GetCallerName ( entity  caller)

Definition at line 33 of file common.qc.

References autocvar_sv_adminnick.

Referenced by CommonCommand_timein(), CommonCommand_timeout(), GameCommand_adminmsg(), GameCommand_stuffto(), VoteCommand_call(), VoteCommand_master(), and VoteStop().

34 {
35  if (caller) return playername(caller.netname, caller.team, false);
36  else return ((autocvar_sv_adminnick != "") ? autocvar_sv_adminnick : "SERVER ADMIN"); // autocvar_hostname
37 }
string autocvar_sv_adminnick
Definition: common.qh:3
+ Here is the caller graph for this function:

◆ GetClientErrorString_color()

string GetClientErrorString_color ( float  clienterror,
string  original_input,
string  col 
)

Definition at line 57 of file common.qc.

References CLIENT_DOESNT_EXIST, CLIENT_NOT_BOT, CLIENT_NOT_REAL, and strcat().

58 {
59  switch (clienterror)
60  {
62  { return strcat(col, "Client '", original_input, col, "' doesn't exist");
63  }
64  case CLIENT_NOT_REAL:
65  { return strcat(col, "Client '", original_input, col, "' is not real");
66  }
67  case CLIENT_NOT_BOT:
68  { return strcat(col, "Client '", original_input, col, "' is not a bot");
69  }
70  default:
71  { return "Incorrect usage of GetClientErrorString";
72  }
73  }
74 }
const float CLIENT_NOT_BOT
Definition: common.qh:44
const float CLIENT_DOESNT_EXIST
Definition: common.qh:42
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
const float CLIENT_NOT_REAL
Definition: common.qh:43
+ Here is the call graph for this function:

◆ GetCommandPrefix()

◆ GetFilteredEntity()

entity GetFilteredEntity ( string  input)

Definition at line 144 of file common.qc.

References entity(), FOREACH_CLIENT, NULL, stof(), substring(), and VerifyClientNumber().

Referenced by BanCommand_mute(), BanCommand_unmute(), ClientCommand_spectate(), GameCommand_adminmsg(), and GameCommand_moveplayer().

145 {
146  entity selection;
147  float tmp_number;
148 
149  if (substring(input, 0, 1) == "#") tmp_number = stof(substring(input, 1, -1));
150  else tmp_number = stof(input);
151 
152  if (VerifyClientNumber(tmp_number))
153  {
154  selection = edict_num(tmp_number);
155  }
156  else
157  {
158  selection = NULL;
159  FOREACH_CLIENT(true, {
160  if(strdecolorize(it.netname) == strdecolorize(input))
161  {
162  selection = it;
163  break; // no reason to keep looking
164  }
165  });
166  }
167 
168  return selection;
169 }
entity() spawn
#define FOREACH_CLIENT(cond, body)
Definition: utils.qh:49
float VerifyClientNumber(float tmp_number)
Definition: common.qc:77
#define NULL
Definition: post.qh:17
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetIndexedEntity()

entity GetIndexedEntity ( int  argc,
float  start_index 
)

Definition at line 83 of file common.qc.

References argv(), entity(), FOREACH_CLIENT, next_token, NULL, stof(), substring(), and VerifyClientNumber().

Referenced by BanCommand_kickban(), ClientCommand_minigame(), ClientCommand_tell(), GameCommand_anticheat(), GameCommand_defer_clear(), GameCommand_stuffto(), and VoteCommand_parse().

84 {
85  entity selection;
86  float tmp_number, index;
87  string tmp_string;
88 
89  next_token = -1;
90  index = start_index;
91  selection = NULL;
92 
93  if (argc > start_index)
94  {
95  if (substring(argv(index), 0, 1) == "#")
96  {
97  tmp_string = substring(argv(index), 1, -1);
98  ++index;
99 
100  if (tmp_string != "") // is it all one token? like #1
101  {
102  tmp_number = stof(tmp_string);
103  }
104  else if (argc > index) // no, it's two tokens? # 1
105  {
106  tmp_number = stof(argv(index));
107  ++index;
108  }
109  else
110  {
111  tmp_number = 0;
112  }
113  }
114  else // maybe it's ONLY a number?
115  {
116  tmp_number = stof(argv(index));
117  ++index;
118  }
119 
120  if (VerifyClientNumber(tmp_number))
121  {
122  selection = edict_num(tmp_number); // yes, it was a number
123  }
124  else // no, maybe it's a name?
125  {
126  FOREACH_CLIENT(true, {
127  if(strdecolorize(it.netname) == strdecolorize(argv(start_index)))
128  {
129  selection = it;
130  break; // no reason to keep looking
131  }
132  });
133 
134  index = (start_index + 1);
135  }
136  }
137 
138  next_token = index;
139  // print(strcat("start_index: ", ftos(start_index), ", next_token: ", ftos(next_token), ", edict: ", ftos(num_for_edict(selection)), ".\n"));
140  return selection;
141 }
entity() spawn
#define FOREACH_CLIENT(cond, body)
Definition: utils.qh:49
float next_token
Definition: common.qh:71
float VerifyClientNumber(float tmp_number)
Definition: common.qc:77
#define NULL
Definition: post.qh:17
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ print_to()

void print_to ( entity  to,
string  input 
)

Definition at line 172 of file common.qc.

References print(), sprint(), and strcat().

Referenced by ClientCommand_tell(), CommonCommand_cvar_changes(), CommonCommand_cvar_purechanges(), CommonCommand_editmob(), CommonCommand_info(), CommonCommand_ladder(), CommonCommand_lsmaps(), CommonCommand_macro_help(), CommonCommand_printmaplist(), CommonCommand_rankings(), CommonCommand_records(), CommonCommand_teamstatus(), CommonCommand_time(), CommonCommand_timein(), CommonCommand_timeout(), CommonCommand_who(), MUTATOR_HOOKFUNCTION(), print_available_commands_to(), sandbox_ObjectSpawn(), Score_NicePrint_Player(), Score_NicePrint_Spectator(), Score_NicePrint_Spectators(), Score_NicePrint_Team(), ValidateMap(), VoteCommand(), VoteCommand_abstain(), VoteCommand_call(), VoteCommand_macro_help(), VoteCommand_master(), VoteCommand_no(), VoteCommand_parse(), VoteCommand_status(), VoteCommand_stop(), VoteCommand_yes(), and VoteCount().

173 {
174  if (to) sprint(to, strcat(input, "\n"));
175  else print(input, "\n");
176 }
entity to
Definition: self.qh:96
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ STATIC_INIT()

STATIC_INIT ( COMMON_COMMANDS_aliases  )

Definition at line 26 of file common.qh.

References FOREACH, and localcmd.

26  {
27  FOREACH(COMMON_COMMANDS, true, { localcmd(sprintf("alias %1$s \"%2$s %1$s ${* ?}\"\n", it.m_name, "qc_cmd_svcmd")); });
28 }
#define FOREACH(list, cond, body)
Definition: iter.qh:19

◆ timeout_handler_reset()

void timeout_handler_reset ( entity  this)

Definition at line 183 of file common.qc.

References NULL, timeout_caller, timeout_leadtime, and timeout_time.

Referenced by timeout_handler_think().

184 {
186  timeout_time = 0;
187  timeout_leadtime = 0;
188 
189  delete(this);
190 }
float timeout_leadtime
Definition: common.qh:60
#define NULL
Definition: post.qh:17
entity timeout_caller
Definition: common.qh:55
float timeout_time
Definition: common.qh:59
+ Here is the caller graph for this function:

◆ timeout_handler_think()

void timeout_handler_think ( entity  this)

Definition at line 192 of file common.qc.

References autocvar_sv_timeout_resumetime, cvar_set(), FOREACH_CLIENT, ftos(), IS_PLAYER, IS_REAL_CLIENT, nextthink, NULL, orig_slowmo, time, TIMEOUT_ACTIVE, timeout_handler_reset(), TIMEOUT_INACTIVE, TIMEOUT_LEADTIME, timeout_leadtime, TIMEOUT_SLOWMO_VALUE, and timeout_time.

Referenced by CommonCommand_timeout().

193 {
194  switch (timeout_status)
195  {
196  case TIMEOUT_ACTIVE:
197  {
198  if (timeout_time > 0) // countdown is still going
199  {
200  Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_TIMEOUT_ENDING, timeout_time);
201 
202  if (timeout_time == autocvar_sv_timeout_resumetime) // play a warning sound when only <sv_timeout_resumetime> seconds are left
203  Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_PREPARE);
204 
205  this.nextthink = time + TIMEOUT_SLOWMO_VALUE; // think again in one second
206  timeout_time -= 1; // decrease the time counter
207  }
208  else // time to end the timeout
209  {
210  Kill_Notification(NOTIF_ALL, NULL, MSG_CENTER, CPID_TIMEIN);
211  timeout_status = TIMEOUT_INACTIVE;
212 
213  // reset the slowmo value back to normal
214  cvar_set("slowmo", ftos(orig_slowmo));
215 
216  // unlock the view for players so they can move around again
218  it.fixangle = false;
219  });
220 
221  timeout_handler_reset(this);
222  }
223 
224  return;
225  }
226 
227  case TIMEOUT_LEADTIME:
228  {
229  if (timeout_leadtime > 0) // countdown is still going
230  {
231  Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_TIMEOUT_BEGINNING, timeout_leadtime);
232 
233  this.nextthink = time + 1; // think again in one second
234  timeout_leadtime -= 1; // decrease the time counter
235  }
236  else // time to begin the timeout
237  {
238  timeout_status = TIMEOUT_ACTIVE;
239 
240  // set the slowmo value to the timeout default slowmo value
241  cvar_set("slowmo", ftos(TIMEOUT_SLOWMO_VALUE));
242 
243  // reset all the flood variables
244  FOREACH_CLIENT(true, {
245  it.nickspamcount = it.nickspamtime = it.floodcontrol_chat =
246  it.floodcontrol_chatteam = it.floodcontrol_chattell =
247  it.floodcontrol_voice = it.floodcontrol_voiceteam = 0;
248  });
249 
250  // copy .v_angle to .lastV_angle for every player in order to fix their view during pause (see PlayerPreThink)
252  it.lastV_angle = it.v_angle;
253  });
254 
255  this.nextthink = time; // think again next frame to handle it under TIMEOUT_ACTIVE code
256  }
257 
258  return;
259  }
260 
261 
262  case TIMEOUT_INACTIVE:
263  default:
264  {
265  timeout_handler_reset(this);
266  return;
267  }
268  }
269 }
#define FOREACH_CLIENT(cond, body)
Definition: utils.qh:49
float timeout_leadtime
Definition: common.qh:60
const float TIMEOUT_ACTIVE
Definition: common.qh:49
const float TIMEOUT_SLOWMO_VALUE
Definition: common.qh:52
#define IS_REAL_CLIENT(v)
Definition: utils.qh:17
const float TIMEOUT_INACTIVE
Definition: common.qh:47
float autocvar_sv_timeout_resumetime
Definition: common.qh:9
#define NULL
Definition: post.qh:17
float timeout_time
Definition: common.qh:59
float nextthink
Definition: csprogsdefs.qc:121
const float TIMEOUT_LEADTIME
Definition: common.qh:48
void timeout_handler_reset(entity this)
Definition: common.qc:183
float time
Definition: csprogsdefs.qc:16
#define IS_PLAYER(v)
Definition: utils.qh:9
float orig_slowmo
Definition: common.qh:58
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ VerifyClientEntity()

float VerifyClientEntity ( entity  client,
float  must_be_real,
float  must_be_bots 
)

Definition at line 47 of file common.qc.

References CLIENT_ACCEPTABLE, CLIENT_DOESNT_EXIST, CLIENT_NOT_BOT, CLIENT_NOT_REAL, IS_BOT_CLIENT, IS_CLIENT, and IS_REAL_CLIENT.

Referenced by BanCommand_mute(), BanCommand_unmute(), ClientCommand_spectate(), ClientCommand_tell(), GameCommand_adminmsg(), GameCommand_anticheat(), GameCommand_defer_clear(), GameCommand_moveplayer(), GameCommand_stuffto(), invite_minigame(), and VoteCommand_parse().

48 {
49  if (!IS_CLIENT(client)) return CLIENT_DOESNT_EXIST;
50  else if (must_be_real && !IS_REAL_CLIENT(client)) return CLIENT_NOT_REAL;
51  else if (must_be_bots && !IS_BOT_CLIENT(client)) return CLIENT_NOT_BOT;
52 
53  return CLIENT_ACCEPTABLE;
54 }
const float CLIENT_NOT_BOT
Definition: common.qh:44
#define IS_CLIENT(v)
Definition: utils.qh:13
const float CLIENT_ACCEPTABLE
Definition: common.qh:41
const float CLIENT_DOESNT_EXIST
Definition: common.qh:42
#define IS_REAL_CLIENT(v)
Definition: utils.qh:17
const float CLIENT_NOT_REAL
Definition: common.qh:43
#define IS_BOT_CLIENT(v)
want: (IS_CLIENT(v) && !IS_REAL_CLIENT(v))
Definition: utils.qh:15
+ Here is the caller graph for this function:

◆ VerifyClientNumber()

float VerifyClientNumber ( float  tmp_number)

Definition at line 77 of file common.qc.

References maxclients.

Referenced by GetFilteredEntity(), and GetIndexedEntity().

78 {
79  if ((tmp_number < 1) || (tmp_number > maxclients)) return false;
80  else return true;
81 }
float maxclients
Definition: csprogsdefs.qc:21
+ Here is the caller graph for this function:

◆ VerifyKickableEntity()

float VerifyKickableEntity ( entity  client)

Definition at line 40 of file common.qc.

References CLIENT_ACCEPTABLE, CLIENT_NOT_REAL, and IS_REAL_CLIENT.

Referenced by BanCommand_kickban().

41 {
42  if (!IS_REAL_CLIENT(client)) return CLIENT_NOT_REAL;
43  return CLIENT_ACCEPTABLE;
44 }
const float CLIENT_ACCEPTABLE
Definition: common.qh:41
#define IS_REAL_CLIENT(v)
Definition: utils.qh:17
const float CLIENT_NOT_REAL
Definition: common.qh:43
+ Here is the caller graph for this function:

Variable Documentation

◆ allowed_timeouts

float allowed_timeouts

Definition at line 61 of file common.qh.

Referenced by CommonCommand_timeout().

◆ autocvar_sv_adminnick

string autocvar_sv_adminnick

Definition at line 3 of file common.qh.

Referenced by GetCallerName().

◆ autocvar_sv_status_privacy

bool autocvar_sv_status_privacy

Definition at line 4 of file common.qh.

Referenced by CommonCommand_who().

◆ autocvar_sv_timeout

bool autocvar_sv_timeout

Definition at line 5 of file common.qh.

Referenced by CommonCommand_timein(), CommonCommand_timeout(), and ReadyRestart_force().

◆ autocvar_sv_timeout_leadtime

float autocvar_sv_timeout_leadtime

Definition at line 6 of file common.qh.

Referenced by CommonCommand_timeout().

◆ autocvar_sv_timeout_length

float autocvar_sv_timeout_length

Definition at line 7 of file common.qh.

Referenced by CommonCommand_timeout().

◆ autocvar_sv_timeout_number

int autocvar_sv_timeout_number

Definition at line 8 of file common.qh.

Referenced by ClientConnect(), and ReadyRestart_force().

◆ autocvar_sv_timeout_resumetime

float autocvar_sv_timeout_resumetime

Definition at line 9 of file common.qh.

Referenced by CommonCommand_timein(), and timeout_handler_think().

◆ CLIENT_ACCEPTABLE

const float CLIENT_ACCEPTABLE = 1

Definition at line 41 of file common.qh.

Referenced by VerifyClientEntity(), and VerifyKickableEntity().

◆ CLIENT_DOESNT_EXIST

const float CLIENT_DOESNT_EXIST = -1

Definition at line 42 of file common.qh.

Referenced by GetClientErrorString_color(), and VerifyClientEntity().

◆ CLIENT_NOT_BOT

const float CLIENT_NOT_BOT = -3

Definition at line 44 of file common.qh.

Referenced by GetClientErrorString_color(), and VerifyClientEntity().

◆ CLIENT_NOT_REAL

const float CLIENT_NOT_REAL = -2

Definition at line 43 of file common.qh.

Referenced by GetClientErrorString_color(), VerifyClientEntity(), and VerifyKickableEntity().

◆ lastV_angle

vector lastV_angle

Definition at line 62 of file common.qh.

Referenced by PlayerThink().

◆ next_token

◆ orig_slowmo

float orig_slowmo

Definition at line 58 of file common.qh.

Referenced by Shutdown(), StartFrame(), and timeout_handler_think().

◆ sys_frametime

◆ TIMEOUT_ACTIVE

◆ timeout_caller

entity timeout_caller

Definition at line 55 of file common.qh.

Referenced by CommonCommand_timein(), CommonCommand_timeout(), and timeout_handler_reset().

◆ timeout_handler

entity timeout_handler

Definition at line 56 of file common.qh.

Referenced by CommonCommand_timein(), and CommonCommand_timeout().

◆ TIMEOUT_INACTIVE

const float TIMEOUT_INACTIVE = 0

Definition at line 47 of file common.qh.

Referenced by CommonCommand_timein(), and timeout_handler_think().

◆ TIMEOUT_LEADTIME

const float TIMEOUT_LEADTIME = 1

◆ timeout_leadtime

float timeout_leadtime

Definition at line 60 of file common.qh.

Referenced by CommonCommand_timeout(), timeout_handler_reset(), and timeout_handler_think().

◆ TIMEOUT_SLOWMO_VALUE

const float TIMEOUT_SLOWMO_VALUE = 0.0001

Definition at line 52 of file common.qh.

Referenced by timeout_handler_think().

◆ timeout_time