Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
world.qh File Reference
Include dependency graph for world.qh:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define autocvar_g_weaponarena   cvar_string("g_weaponarena")
#define WARMUP_START_WEAPONS   ((autocvar_g_warmup_allguns == 1) ? (warmup_start_weapons & (weaponsInMap | start_weapons)) : warmup_start_weapons)

Functions

void CheckRules_World ()
void DropToFloor_QC_DelayedInit (entity this)
void DumpStats (float final)
void InitializeEntitiesRun ()
void InitializeEntity (entity e, void(entity this) func, int order)
void MatchEnd_RestoreSpectatorAndTeamStatus (.int prev_team_field)
void MatchEnd_RestoreSpectatorStatus ()
bool MoveToRandomLocationWithinBounds (entity e, vector boundmin, vector boundmax, float goodcontents, float badcontents, float badsurfaceflags, int attempts, float maxaboveground, float minviewdistance, bool frompos)
float MoveToRandomMapLocation (entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance)
void readlevelcvars ()
void readplayerstartcvars ()
void ReadyRestart (bool forceWarmupEnd)
float RedirectionThink ()
void SetWinners (.float field, float value)
 STATIC_INIT (g_moveables)
 void (entity this) initialize_entity
int want_weapon (entity weaponinfo, int allguns)
float WinningCondition_Scores (float limit, float leadlimit)

Variables

bool autocvar__endmatch
bool autocvar__sv_init
string autocvar__sv_vote_gametype_custom
bool autocvar_g_jetpack
string autocvar_g_random_start_weapons
 Holds a list of possible random start weapons.
bool autocvar_g_use_ammunition
int autocvar_g_warmup
int autocvar_g_warmup_allguns
bool autocvar_g_warmup_allow_timeout
string autocvar_quit_and_redirect
float autocvar_quit_and_redirect_timer
bool autocvar_quit_when_empty
string autocvar_sessionid
bool autocvar_sv_curl_serverpackages_auto
bool autocvar_sv_db_saveasdump
bool autocvar_sv_dedicated
bool autocvar_sv_logscores_bots
bool autocvar_sv_logscores_console
bool autocvar_sv_logscores_file
string autocvar_sv_logscores_filename
float autocvar_sv_mapchange_delay
bool autocvar_sv_mapformat_is_quake2
bool autocvar_sv_mapformat_is_quake3
string autocvar_sv_termsofservice_url
float autocvar_timelimit_decrement
float autocvar_timelimit_increment
float autocvar_timelimit_max
float autocvar_timelimit_min
float autocvar_timelimit_overtime
int autocvar_timelimit_overtimes
float autocvar_timelimit_suddendeath
string cache_lastmutatormsg
string cache_mutatormsg
float checkrules_equality
int checkrules_overtimesadded
float checkrules_suddendeathend
float checkrules_suddendeathwarning
string clientstuff
string cvar_changes
string cvar_purechanges
float cvar_purechanges_count
float default_player_alpha
float default_weapon_alpha
vector dropped_origin
string fog
float g_grappling_hook
IntrusiveList g_moveables
float g_weapon_stay
float g_weaponarena
string g_weaponarena_list
float g_weaponarena_random
WepSet g_weaponarena_weapons
bool gametype_custom_enabled
entity initialize_entity_first
entity initialize_entity_next
int initialize_entity_order
string loaded_gametype_custom_string
string matchid
string modname
bool observe_blocked_if_eliminated = false
entity random_start_ammo
 Entity that contains amount of ammo to give with random start weapons.
int random_start_weapons_count
 Number of random start weapons to give to players.
string record_type
string redirection_target
float ServerProgsDB
float start_ammo_cells
float start_ammo_fuel
float start_ammo_nails
float start_ammo_rockets
float start_ammo_shells
float start_armorvalue
float start_health
int start_items
WepSet start_weapons
WepSet start_weapons_default
WepSet start_weapons_defaultmask
bool sv_ready_restart_after_countdown
string sv_termsofservice_url_escaped
float TemporaryDB
int warmup_stage
float warmup_start_ammo_cells
float warmup_start_ammo_fuel
float warmup_start_ammo_nails
float warmup_start_ammo_rockets
float warmup_start_ammo_shells
float warmup_start_armorvalue
float warmup_start_health
WepSet warmup_start_weapons
WepSet warmup_start_weapons_default
WepSet warmup_start_weapons_defaultmask
float winning
const int WINNING_NEVER = 2
const int WINNING_NO = 0
const int WINNING_STARTSUDDENDEATHOVERTIME = 3
const int WINNING_YES = 1
int world_initialized

Macro Definition Documentation

◆ autocvar_g_weaponarena

#define autocvar_g_weaponarena   cvar_string("g_weaponarena")

Definition at line 12 of file world.qh.

Referenced by GameLogInit().

◆ WARMUP_START_WEAPONS

#define WARMUP_START_WEAPONS   ((autocvar_g_warmup_allguns == 1) ? (warmup_start_weapons & (weaponsInMap | start_weapons)) : warmup_start_weapons)

Definition at line 101 of file world.qh.

Referenced by GiveWarmupResources(), and MUTATOR_HOOKFUNCTION().

Function Documentation

◆ CheckRules_World()

void CheckRules_World ( )

Definition at line 1705 of file world.qc.

1706{
1707 VoteThink();
1708 MapVote_Think();
1709
1711
1712 if (intermission_running) // someone else quit the game already
1713 {
1714 if(player_count == 0) // Nobody there? Then let's go to the next map
1715 MapVote_Start();
1716 // this will actually check the player count in the next frame
1717 // again, but this shouldn't hurt
1718 return;
1719 }
1720
1721 float timelimit = autocvar_timelimit * 60;
1722 float fraglimit = autocvar_fraglimit;
1723 float leadlimit = autocvar_leadlimit;
1724 if (leadlimit < 0) leadlimit = 0;
1725
1726 if(warmup_stage || time <= game_starttime) // NOTE: this is <= to prevent problems in the very tic where the game starts
1727 {
1728 if(timelimit > 0)
1729 timelimit = 0; // timelimit is not made for warmup
1730 if(fraglimit > 0)
1731 fraglimit = 0; // no fraglimit for now
1732 leadlimit = 0; // no leadlimit for now
1733 }
1734
1735 if (autocvar__endmatch || timelimit < 0)
1736 {
1737 // endmatch
1738 NextLevel();
1739 return;
1740 }
1741
1742 if(timelimit > 0)
1743 timelimit += game_starttime;
1744
1745 int overtimes_prev = overtimes;
1746 int wantovertime = 0;
1747
1749 {
1751 {
1754 Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_RACE_FINISHLAP);
1755 else
1756 Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_OVERTIME_FRAG);
1757 }
1758 }
1759 else
1760 {
1761 if (timelimit && time >= timelimit)
1762 {
1763 if(g_race && (g_race_qualifying == 2) && timelimit > 0)
1764 {
1765 float totalplayers;
1766 float playerswithlaps;
1767 float readyplayers;
1768 totalplayers = playerswithlaps = readyplayers = 0;
1770 ++totalplayers;
1771 if(GameRules_scoring_add(it, RACE_FASTEST, 0))
1772 ++playerswithlaps;
1773 if(it.ready)
1774 ++readyplayers;
1775 });
1776
1777 // at least 2 of the players have completed a lap: start the RACE
1778 // otherwise, the players should end the qualifying on their own
1779 if(readyplayers || playerswithlaps >= 2)
1780 {
1782 ReadyRestart(true); // go to race
1783 return;
1784 }
1785 else
1786 wantovertime |= InitiateSuddenDeath();
1787 }
1788 else
1789 wantovertime |= InitiateSuddenDeath();
1790 }
1791 }
1792
1794 {
1795 NextLevel();
1796 return;
1797 }
1798
1799 int checkrules_status = WinningCondition_RanOutOfSpawns();
1800 if(checkrules_status == WINNING_YES)
1801 bprint("Hey! Someone ran out of spawns!\n");
1802 else if(MUTATOR_CALLHOOK(CheckRules_World, checkrules_status, timelimit, fraglimit))
1803 checkrules_status = M_ARGV(0, float);
1804 else
1805 checkrules_status = WinningCondition_Scores(fraglimit, leadlimit);
1806
1807 if(checkrules_status == WINNING_STARTSUDDENDEATHOVERTIME)
1808 {
1809 checkrules_status = WINNING_NEVER;
1811 wantovertime |= InitiateSuddenDeath();
1812 }
1813
1814 if(checkrules_status == WINNING_NEVER)
1815 // equality cases! Nobody wins if the overtime ends in a draw.
1816 ClearWinners();
1817
1818 if(wantovertime)
1819 {
1820 if(checkrules_status == WINNING_NEVER)
1822 else
1823 checkrules_status = WINNING_YES;
1824 }
1825
1827 if(checkrules_status != WINNING_NEVER || time >= checkrules_suddendeathend)
1828 checkrules_status = WINNING_YES;
1829
1830 if(checkrules_status == WINNING_YES)
1831 {
1832 if (overtimes == OVERTIME_SUDDENDEATH && overtimes != overtimes_prev)
1833 {
1834 // if suddendeathend overtime has just begun, revert it
1836 overtimes = overtimes_prev;
1837 }
1838 //print("WINNING\n");
1839 NextLevel();
1840 }
1841}
int player_count
Definition api.qh:103
#define MUTATOR_CALLHOOK(id,...)
Definition base.qh:143
bool warmup_stage
Definition main.qh:120
#define g_race
Definition race.qh:48
#define M_ARGV(x, type)
Definition events.qh:17
#define IS_PLAYER(s)
Definition player.qh:243
const int OVERTIME_SUDDENDEATH
Definition stats.qh:77
#define autocvar_timelimit
Definition stats.qh:92
#define autocvar_fraglimit
Definition stats.qh:90
float game_starttime
Definition stats.qh:82
int overtimes
Definition stats.qh:86
int autocvar_leadlimit
Definition stats.qh:84
float time
bool intermission_running
void bprint(string text,...)
void Send_Notification(NOTIF broadcast, entity client, MSG net_type, Notification net_name,...count)
Definition all.qc:1573
#define NULL
Definition post.qh:14
void VoteThink()
Definition vote.qc:336
void ReadyRestart(bool forceWarmupEnd)
Definition vote.qc:526
void MapVote_Think()
Definition mapvoting.qc:758
void MapVote_Start()
Definition mapvoting.qc:743
int g_race_qualifying
Definition race.qh:13
#define GameRules_scoring_add(client, fld, value)
Definition sv_rules.qh:85
#define FOREACH_CLIENT(cond, body)
Definition utils.qh:50
void InitiateOvertime()
Definition world.qc:1479
int InitiateSuddenDeath()
Definition world.qc:1447
void SetDefaultAlpha()
Definition world.qc:105
void ClearWinners()
Definition world.qc:1534
void CheckRules_World()
Definition world.qc:1705
void NextLevel()
Definition world.qc:1384
float WinningCondition_Scores(float limit, float leadlimit)
Definition world.qc:1540
float WinningCondition_RanOutOfSpawns()
Definition world.qc:1621
const int WINNING_NEVER
Definition world.qh:134
float checkrules_suddendeathwarning
Definition world.qh:36
const int WINNING_STARTSUDDENDEATHOVERTIME
Definition world.qh:135
int checkrules_overtimesadded
Definition world.qh:38
float checkrules_suddendeathend
Definition world.qh:37
bool autocvar__endmatch
Definition world.qh:6
const int WINNING_YES
Definition world.qh:133

References autocvar__endmatch, autocvar_fraglimit, autocvar_leadlimit, autocvar_timelimit, bprint(), checkrules_overtimesadded, checkrules_suddendeathend, checkrules_suddendeathwarning, CheckRules_World(), ClearWinners(), FOREACH_CLIENT, g_race, g_race_qualifying, game_starttime, GameRules_scoring_add, InitiateOvertime(), InitiateSuddenDeath(), intermission_running, IS_PLAYER, M_ARGV, MapVote_Start(), MapVote_Think(), MUTATOR_CALLHOOK, NextLevel(), NULL, OVERTIME_SUDDENDEATH, overtimes, player_count, ReadyRestart(), Send_Notification(), SetDefaultAlpha(), time, VoteThink(), warmup_stage, WINNING_NEVER, WINNING_STARTSUDDENDEATHOVERTIME, WINNING_YES, WinningCondition_RanOutOfSpawns(), and WinningCondition_Scores().

Referenced by CheckRules_World(), MUTATOR_HOOKABLE(), MUTATOR_HOOKFUNCTION(), MUTATOR_HOOKFUNCTION(), MUTATOR_HOOKFUNCTION(), MUTATOR_HOOKFUNCTION(), and StartFrame().

◆ DropToFloor_QC_DelayedInit()

void DropToFloor_QC_DelayedInit ( entity this)

Definition at line 2407 of file world.qc.

2408{
2410}
const int INITPRIO_DROPTOFLOOR
Definition constants.qh:97
void InitializeEntity(entity e, void(entity this) func, int order)
Definition world.qc:2209
void DropToFloor_QC(entity this)
Definition world.qc:2283

References DropToFloor_QC(), entity(), InitializeEntity(), and INITPRIO_DROPTOFLOOR.

Referenced by ctf_FlagSetup(), dom_controlpoint_setup(), MUTATOR_HOOKFUNCTION(), ons_ControlPoint_Setup(), ons_GeneratorSetup(), spawn_item_key(), StartItem(), and turret_initialize().

◆ DumpStats()

void DumpStats ( float final)

Definition at line 1244 of file world.qc.

1245{
1246 float file;
1247 string s;
1248 float to_console;
1249 float to_eventlog;
1250 float to_file;
1251 float i;
1252
1253 to_console = autocvar_sv_logscores_console;
1254 to_eventlog = autocvar_sv_eventlog;
1256
1257 if(!final)
1258 {
1259 to_console = true; // always print printstats replies
1260 to_eventlog = false; // but never print them to the event log
1261 }
1262
1263 if(to_eventlog)
1265 to_console = false; // otherwise we get the output twice
1266
1267 if(final)
1268 s = ":scores:";
1269 else
1270 s = ":status:";
1271 s = strcat(s, GetGametype(), "_", GetMapname(), ":", ftos(rint(time)));
1272
1273 if(to_console)
1274 LOG_HELP(s);
1275 if(to_eventlog)
1276 GameLogEcho(s);
1277
1278 file = -1;
1279 if(to_file)
1280 {
1282 if(file == -1)
1283 to_file = false;
1284 else
1285 fputs(file, strcat(s, "\n"));
1286 }
1287
1288 s = strcat(":labels:player:", GetPlayerScoreString(NULL, 0));
1289 if(to_console)
1290 LOG_HELP(s);
1291 if(to_eventlog)
1292 GameLogEcho(s);
1293 if(to_file)
1294 fputs(file, strcat(s, "\n"));
1295
1297 s = strcat(":player:see-labels:", GetPlayerScoreString(it, 0), ":");
1298 s = strcat(s, ftos(rint(time - CS(it).jointime)), ":");
1299 if(IS_PLAYER(it) || INGAME_JOINED(it))
1300 s = strcat(s, ftos(it.team), ":");
1301 else
1302 s = strcat(s, "spectator:");
1303
1304 if(to_console)
1305 LOG_HELP(s, playername(it.netname, it.team, false));
1306 if(to_eventlog)
1307 GameLogEcho(strcat(s, ftos(it.playerid), ":", playername(it.netname, it.team, false)));
1308 if(to_file)
1309 fputs(file, strcat(s, playername(it.netname, it.team, false), "\n"));
1310 });
1311
1312 if(teamplay)
1313 {
1314 s = strcat(":labels:teamscores:", GetTeamScoreString(0, 0));
1315 if(to_console)
1316 LOG_HELP(s);
1317 if(to_eventlog)
1318 GameLogEcho(s);
1319 if(to_file)
1320 fputs(file, strcat(s, "\n"));
1321
1322 for(i = 1; i < 16; ++i)
1323 {
1324 s = strcat(":teamscores:see-labels:", GetTeamScoreString(i, 0));
1325 s = strcat(s, ":", ftos(i));
1326 if(to_console)
1327 LOG_HELP(s);
1328 if(to_eventlog)
1329 GameLogEcho(s);
1330 if(to_file)
1331 fputs(file, strcat(s, "\n"));
1332 }
1333 }
1334
1335 if(to_console)
1336 LOG_HELP(":end");
1337 if(to_eventlog)
1338 GameLogEcho(":end");
1339 if(to_file)
1340 {
1341 fputs(file, ":end\n");
1342 fclose(file);
1343 }
1344}
string playername(string thename, int teamid, bool team_colorize)
Definition util.qc:2082
const float FILE_APPEND
void GameLogEcho(string s)
Definition gamelog.qc:15
bool autocvar_sv_eventlog_console
Definition gamelog.qh:4
bool autocvar_sv_eventlog
Definition gamelog.qh:3
string GetMapname()
string GetGametype()
#define LOG_HELP(...)
Definition log.qh:85
void fclose(float fhandle)
void fputs(float fhandle, string s)
float fopen(string filename, float mode)
float rint(float f)
string ftos(float f)
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
string GetTeamScoreString(int tm, float shortString)
Definition scores.qc:674
string GetPlayerScoreString(entity pl, float shortString)
Returns score strings for eventlog etc.
Definition scores.qc:613
float jointime
Definition client.qh:66
ClientState CS(Client this)
Definition state.qh:47
#define INGAME_JOINED(it)
Definition sv_rules.qh:25
bool teamplay
Definition teams.qh:59
#define IS_REAL_CLIENT(v)
Definition utils.qh:17
#define IS_BOT_CLIENT(v)
want: (IS_CLIENT(v) && !IS_REAL_CLIENT(v))
Definition utils.qh:15
bool autocvar_sv_logscores_file
Definition world.qh:21
bool autocvar_sv_logscores_console
Definition world.qh:20
bool autocvar_sv_logscores_bots
Definition world.qh:19
string autocvar_sv_logscores_filename
Definition world.qh:22

References autocvar_sv_eventlog, autocvar_sv_eventlog_console, autocvar_sv_logscores_bots, autocvar_sv_logscores_console, autocvar_sv_logscores_file, autocvar_sv_logscores_filename, CS(), fclose(), FILE_APPEND, fopen(), FOREACH_CLIENT, fputs(), ftos(), GameLogEcho(), GetGametype(), GetMapname(), GetPlayerScoreString(), GetTeamScoreString(), INGAME_JOINED, IS_BOT_CLIENT, IS_PLAYER, IS_REAL_CLIENT, jointime, LOG_HELP, NULL, playername(), rint(), strcat(), teamplay, and time.

Referenced by GameCommand_printstats(), and NextLevel().

◆ InitializeEntitiesRun()

void InitializeEntitiesRun ( )

Definition at line 2242 of file world.qc.

2243{
2244 entity startoflist = initialize_entity_first;
2247 for (entity e = startoflist; e; e = e.initialize_entity_next)
2248 {
2249 e.remove_except_protected_forbidden = 1;
2250 }
2251 for (entity e = startoflist; e; )
2252 {
2253 e.remove_except_protected_forbidden = 0;
2254 e.initialize_entity_order = 0;
2255 entity next = e.initialize_entity_next;
2256 e.initialize_entity_next = NULL;
2257 var void(entity this) func = e.initialize_entity;
2258 e.initialize_entity = func_null;
2259 if (e.classname == "initialize_entity")
2260 {
2261 entity wrappee = e.enemy;
2262 builtin_remove(e);
2263 e = wrappee;
2264 }
2265 //dprint("Delayed initialization: ", e.classname, "\n");
2266 if (func)
2267 {
2268 func(e);
2269 }
2270 else
2271 {
2272 eprint(e);
2273 backtrace(strcat("Null function in: ", e.classname, "\n"));
2274 }
2275 e = next;
2276 }
2278}
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
next
Definition all.qh:93
#define backtrace(msg)
Definition log.qh:99
void eprint(entity e)
var void func_null()
void
Definition self.qh:72
void remove_unsafely(entity e)
Definition main.qc:276
void remove_except_protected(entity e)
Definition main.qc:269
var void delete_fn(entity e)
entity initialize_entity_first
Definition world.qh:121

References backtrace, delete_fn(), entity(), eprint(), func_null(), initialize_entity_first, next, NULL, remove_except_protected(), remove_unsafely(), strcat(), and void.

Referenced by StartFrame().

◆ InitializeEntity()

void InitializeEntity ( entity e,
void(entity this) func,
int order )

Definition at line 2209 of file world.qc.

2210{
2211 entity prev, cur;
2212
2213 if (!e || e.initialize_entity)
2214 {
2215 // make a proxy initializer entity
2216 entity e_old = e;
2217 e = new(initialize_entity);
2218 e.enemy = e_old;
2219 }
2220
2221 e.initialize_entity = func;
2222 e.initialize_entity_order = order;
2223
2225 prev = NULL;
2226 for (;;)
2227 {
2228 if (!cur || cur.initialize_entity_order > order)
2229 {
2230 // insert between prev and cur
2231 if (prev)
2232 prev.initialize_entity_next = e;
2233 else
2235 e.initialize_entity_next = cur;
2236 return;
2237 }
2238 prev = cur;
2239 cur = cur.initialize_entity_next;
2240 }
2241}
prev
Definition all.qh:71

References entity(), initialize_entity_first, NULL, and prev.

Referenced by buffs_Initialize(), ctf_FlagSetup(), ctf_Initialize(), dom_Initialize(), DropToFloor_QC_DelayedInit(), g_clientmodel_init(), g_model_init(), InitGameplayMode(), invasion_Initialize(), MUTATOR_HOOKFUNCTION(), MUTATOR_HOOKFUNCTION(), nb_Initialize(), ons_ControlPoint_Setup(), ons_GeneratorSetup(), ons_Initialize(), readplayerstartcvars(), REGISTER_MUTATOR(), relocate_spawnpoint(), SetBrushEntityModel(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), spawnfunc(), StartItem(), target_checkpoint_setup(), tdm_Initialize(), tmayhem_Initialize(), and turret_initialize().

◆ MatchEnd_RestoreSpectatorAndTeamStatus()

void MatchEnd_RestoreSpectatorAndTeamStatus ( .int prev_team_field)

Definition at line 1350 of file world.qc.

1351{
1352 bool fix_team = (teamplay && prev_team_field != team);
1353 FOREACH_CLIENT(true,
1354 {
1355 if (!IS_PLAYER(it) && INGAME_JOINING(it))
1356 {
1358 PutObserverInServer(it, true, false);
1359 bprint(playername(it.netname, it.team, false), " has been moved back to spectator");
1360 it.winning = false;
1361 }
1362 else if (fix_team && INGAME_JOINED(it) && it.(prev_team_field) && it.team != it.(prev_team_field))
1363 {
1365 if (MoveToTeam(it, Team_TeamToIndex(it.(prev_team_field)), 6))
1366 {
1367 string pl_name = playername(it.netname, it.team, false);
1368 bprint(pl_name, " has been moved back to the ", Team_ColoredFullName(it.team));
1369 }
1370 it.winning = (it.team == WinningConditionHelper_winnerteam);
1371 }
1372 });
1373}
int team
Definition main.qh:188
void PutObserverInServer(entity this, bool is_forced, bool use_spawnpoint)
putting a client as observer in the server
Definition client.qc:261
float WinningConditionHelper_winnerteam
the color of the winning team, or -1 if none
Definition scores.qh:109
#define INGAME_STATUS_CLEAR(it)
Definition sv_rules.qh:22
#define INGAME_JOINING(it)
Definition sv_rules.qh:26
void Player_SetForcedTeamIndex(entity player, int team_index)
Sets the index of the forced team of the given player.
Definition teamplay.qc:323
bool MoveToTeam(entity client, int team_index, int type)
Moves player to the specified team.
Definition teamplay.qc:299
@ TEAM_FORCE_DEFAULT
Don't force any team.
Definition teamplay.qh:138
int Team_TeamToIndex(int team_num)
Converts team value into team index.
Definition teams.qh:184
#define Team_ColoredFullName(teamid)
Definition teams.qh:232

References bprint(), FOREACH_CLIENT, INGAME_JOINED, INGAME_JOINING, INGAME_STATUS_CLEAR, IS_PLAYER, MoveToTeam(), Player_SetForcedTeamIndex(), playername(), PutObserverInServer(), team, Team_ColoredFullName, TEAM_FORCE_DEFAULT, Team_TeamToIndex(), teamplay, and WinningConditionHelper_winnerteam.

Referenced by MatchEnd_RestoreSpectatorStatus(), and MUTATOR_HOOKFUNCTION().

◆ MatchEnd_RestoreSpectatorStatus()

void MatchEnd_RestoreSpectatorStatus ( )

Definition at line 1375 of file world.qc.

1376{
1378}
void MatchEnd_RestoreSpectatorAndTeamStatus(.int prev_team_field)
Definition world.qc:1350

References MatchEnd_RestoreSpectatorAndTeamStatus(), and team.

Referenced by MUTATOR_HOOKFUNCTION().

◆ MoveToRandomLocationWithinBounds()

bool MoveToRandomLocationWithinBounds ( entity e,
vector boundmin,
vector boundmax,
float goodcontents,
float badcontents,
float badsurfaceflags,
int attempts,
float maxaboveground,
float minviewdistance,
bool frompos )

Definition at line 1101 of file world.qc.

1102{
1103 float m = e.dphitcontentsmask;
1104 e.dphitcontentsmask = goodcontents | badcontents;
1105
1106 vector org = boundmin;
1107 vector delta = boundmax - boundmin;
1108
1109 vector start, end;
1110 start = end = org;
1111 int j; // used after the loop
1112 for(j = 0; j < attempts; ++j)
1113 {
1114 start.x = org.x + random() * delta.x;
1115 start.y = org.y + random() * delta.y;
1116 start.z = org.z + random() * delta.z;
1117
1118 // rule 1: start inside world bounds, and outside
1119 // solid, and don't start from somewhere where you can
1120 // fall down to evil
1121 tracebox(start, e.mins, e.maxs, start - '0 0 1' * delta.z, MOVE_NORMAL, e);
1122 if (trace_fraction >= 1)
1123 continue;
1124 if (trace_startsolid)
1125 continue;
1126 if (trace_dphitcontents & badcontents)
1127 continue;
1128 if (trace_dphitq3surfaceflags & badsurfaceflags)
1129 continue;
1130
1131 // rule 2: if we are too high, lower the point
1132 if (trace_fraction * delta.z > maxaboveground)
1133 start = trace_endpos + '0 0 1' * maxaboveground;
1134 vector enddown = trace_endpos;
1135
1136 // rule 3: make sure we aren't outside the map. This only works
1137 // for somewhat well formed maps. A good rule of thumb is that
1138 // the map should have a convex outside hull.
1139 // these can be traceLINES as we already verified the starting box
1140 vector mstart = start + 0.5 * (e.mins + e.maxs);
1141 traceline(mstart, mstart + '1 0 0' * delta.x, MOVE_NORMAL, e);
1142 if (trace_fraction >= 1 || trace_dphittexturename == "common/caulk")
1143 continue;
1144 traceline(mstart, mstart - '1 0 0' * delta.x, MOVE_NORMAL, e);
1145 if (trace_fraction >= 1 || trace_dphittexturename == "common/caulk")
1146 continue;
1147 traceline(mstart, mstart + '0 1 0' * delta.y, MOVE_NORMAL, e);
1148 if (trace_fraction >= 1 || trace_dphittexturename == "common/caulk")
1149 continue;
1150 traceline(mstart, mstart - '0 1 0' * delta.y, MOVE_NORMAL, e);
1151 if (trace_fraction >= 1 || trace_dphittexturename == "common/caulk")
1152 continue;
1153 traceline(mstart, mstart + '0 0 1' * delta.z, MOVE_NORMAL, e);
1154 if (trace_fraction >= 1 || trace_dphittexturename == "common/caulk")
1155 continue;
1156
1157 // rule 4: we must "see" some spawnpoint or item
1158 entity sp = NULL;
1159 if(frompos)
1160 {
1161 if((traceline(mstart, e.origin, MOVE_NORMAL, e), trace_fraction) >= 1)
1162 sp = e;
1163 }
1164 if(!sp)
1165 {
1166 IL_EACH(g_spawnpoints, checkpvs(mstart, it),
1167 {
1168 if((traceline(mstart, it.origin, MOVE_NORMAL, e), trace_fraction) >= 1)
1169 {
1170 sp = it;
1171 break;
1172 }
1173 });
1174 }
1175 if(!sp)
1176 {
1177 int items_checked = 0;
1178 IL_EACH(g_items, checkpvs(mstart, it),
1179 {
1180 if((traceline(mstart, it.origin + (it.mins + it.maxs) * 0.5, MOVE_NORMAL, e), trace_fraction) >= 1)
1181 {
1182 sp = it;
1183 break;
1184 }
1185
1186 ++items_checked;
1187 if(items_checked >= attempts)
1188 break; // sanity
1189 });
1190
1191 if(!sp)
1192 continue;
1193 }
1194
1195 // find a random vector to "look at"
1196 end.x = org.x + random() * delta.x;
1197 end.y = org.y + random() * delta.y;
1198 end.z = org.z + random() * delta.z;
1199 end = start + normalize(end - start) * vlen(delta);
1200
1201 // rule 4: start TO end must not be too short
1202 tracebox(start, e.mins, e.maxs, end, MOVE_NORMAL, e);
1204 continue;
1205 if(trace_fraction < minviewdistance / vlen(delta))
1206 continue;
1207
1208 // rule 5: don't want to look at sky
1210 continue;
1211
1212 // rule 6: we must not end up in trigger_hurt
1213 if(tracebox_hits_trigger_hurt(start, e.mins, e.maxs, enddown))
1214 continue;
1215
1216 break;
1217 }
1218
1219 e.dphitcontentsmask = m;
1220
1221 if(j < attempts)
1222 {
1223 setorigin(e, start);
1224 e.angles = vectoangles(end - start);
1225 LOG_DEBUG("Needed ", ftos(j + 1), " attempts");
1226 return true;
1227 }
1228 return false;
1229}
float Q3SURFACEFLAG_SKY
float trace_dphitcontents
const float MOVE_NORMAL
string trace_dphittexturename
vector trace_endpos
float checkpvs(vector viewpos, entity viewee)
float trace_startsolid
float trace_dphitq3surfaceflags
float trace_fraction
bool tracebox_hits_trigger_hurt(vector start, vector e_min, vector e_max, vector end)
Definition hurt.qc:79
#define IL_EACH(this, cond, body)
#define LOG_DEBUG(...)
Definition log.qh:80
float random(void)
float vlen(vector v)
vector vectoangles(vector v)
vector normalize(vector v)
vector
Definition self.qh:92
vector org
Definition self.qh:92
IntrusiveList g_items
Definition items.qh:125
IntrusiveList g_spawnpoints

References checkpvs(), entity(), ftos(), g_items, g_spawnpoints, IL_EACH, LOG_DEBUG, MOVE_NORMAL, normalize(), NULL, org, Q3SURFACEFLAG_SKY, random(), trace_dphitcontents, trace_dphitq3surfaceflags, trace_dphittexturename, trace_endpos, trace_fraction, trace_startsolid, tracebox_hits_trigger_hurt(), vectoangles(), vector, and vlen().

Referenced by M_Mage_Attack_Teleport(), and MoveToRandomMapLocation().

◆ MoveToRandomMapLocation()

float MoveToRandomMapLocation ( entity e,
float goodcontents,
float badcontents,
float badsurfaceflags,
float attempts,
float maxaboveground,
float minviewdistance )

Definition at line 1231 of file world.qc.

1232{
1233 return MoveToRandomLocationWithinBounds(e, world.mins, world.maxs, goodcontents, badcontents, badsurfaceflags, attempts, maxaboveground, minviewdistance, false);
1234}
#define world
Definition post.qh:15
bool MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundmax, float goodcontents, float badcontents, float badsurfaceflags, int attempts, float maxaboveground, float minviewdistance, bool frompos)
Definition world.qc:1101

References entity(), MoveToRandomLocationWithinBounds(), and world.

Referenced by buff_Respawn(), CheatImpulse(), invasion_SpawnChosenMonster(), ka_RespawnBall(), and tka_RespawnBall().

◆ readlevelcvars()

void readlevelcvars ( )

Definition at line 2167 of file world.qc.

2168{
2170 if(cvar("sv_allow_fullbright"))
2172
2174 if(cvar("sv_forbid_pickuptimer"))
2176
2177 sv_ready_restart_after_countdown = cvar("sv_ready_restart_after_countdown");
2178
2179 if(cvar("g_campaign"))
2180 warmup_stage = 0; // no warmup during campaign
2181 else
2182 {
2185 warmup_limit = -1; // don't start until there's enough players
2186 else if (warmup_stage == 1)
2187 {
2188 // this code is duplicated in ReadyCount()
2189 warmup_limit = cvar("g_warmup_limit");
2190 if(warmup_limit == 0)
2192 }
2193 }
2194
2195 g_weapon_stay = cvar(strcat("g_", GetGametype(), "_weapon_stay"));
2196 if(!g_weapon_stay)
2197 g_weapon_stay = cvar("g_weapon_stay");
2198
2199 MUTATOR_CALLHOOK(ReadLevelCvars);
2200
2202 game_starttime = time + cvar("g_start_delay");
2203
2204 FOREACH(Weapons, it != WEP_Null, { it.wr_init(it); });
2205
2207}
int serverflags
Definition main.qh:211
float warmup_limit
Definition stats.qh:375
const int SERVERFLAG_FORBID_PICKUPTIMER
Definition constants.qh:20
const int SERVERFLAG_ALLOW_FULLBRIGHT
Definition constants.qh:16
Weapons
Definition guide.qh:113
#define FOREACH(list, cond, body)
Definition iter.qh:19
bool autocvar_g_campaign
Definition menu.qc:747
float cvar(string name)
void readplayerstartcvars()
Definition world.qc:1963
float g_weapon_stay
Definition world.qh:109
int autocvar_g_warmup
Definition world.qh:9
bool sv_ready_restart_after_countdown
Definition world.qh:116

References autocvar_g_campaign, autocvar_g_warmup, autocvar_timelimit, cvar(), FOREACH, g_weapon_stay, game_starttime, GetGametype(), MUTATOR_CALLHOOK, readplayerstartcvars(), SERVERFLAG_ALLOW_FULLBRIGHT, SERVERFLAG_FORBID_PICKUPTIMER, serverflags, strcat(), sv_ready_restart_after_countdown, time, warmup_limit, warmup_stage, and Weapons.

Referenced by spawnfunc().

◆ readplayerstartcvars()

void readplayerstartcvars ( )

Definition at line 1963 of file world.qc.

1964{
1965 // initialize starting values for players
1966 start_weapons = '0 0 0';
1967 start_weapons_default = '0 0 0';
1968 start_weapons_defaultmask = '0 0 0';
1969 start_items = 0;
1971 start_ammo_nails = 0;
1973 start_ammo_cells = 0;
1974 if (random_start_ammo == NULL)
1975 {
1977 }
1978 start_health = cvar("g_balance_health_start");
1979 start_armorvalue = cvar("g_balance_armor_start");
1980
1981 g_weaponarena = 0;
1982 g_weaponarena_weapons = '0 0 0';
1983
1984 string s = cvar_string("g_weaponarena");
1985
1986 MUTATOR_CALLHOOK(SetWeaponArena, s);
1987 s = M_ARGV(0, string);
1988
1989 if (s == "0" || s == "")
1990 {
1991 // no arena
1992 }
1993 else if (s == "off")
1994 {
1995 // forcibly turn off weaponarena
1996 }
1997 else if (s == "all" || s == "1")
1998 {
1999 g_weaponarena = 1;
2000 g_weaponarena_list = "All Weapons Arena";
2002 }
2003 else if (s == "devall")
2004 {
2005 g_weaponarena = 1;
2006 g_weaponarena_list = "Dev All Weapons Arena";
2008 }
2009 else if (s == "most")
2010 {
2011 g_weaponarena = 1;
2012 g_weaponarena_list = "Most Weapons Arena";
2014 }
2015 else if (s == "all_available")
2016 {
2017 g_weaponarena = 1;
2018 g_weaponarena_list = "All Available Weapons Arena";
2019
2020 // this needs to run after weaponsInMapAll is initialized
2022 }
2023 else if (s == "devall_available")
2024 {
2025 g_weaponarena = 1;
2026 g_weaponarena_list = "Dev All Available Weapons Arena";
2027
2028 // this needs to run after weaponsInMapAll is initialized
2030 }
2031 else if (s == "most_available")
2032 {
2033 g_weaponarena = 1;
2034 g_weaponarena_list = "Most Available Weapons Arena";
2035
2036 // this needs to run after weaponsInMapAll is initialized
2038 }
2039 else if (s == "none")
2040 {
2041 g_weaponarena = 1;
2042 g_weaponarena_list = "No Weapons Arena";
2043 }
2044 else
2045 {
2046 g_weaponarena = 1;
2047 float t = tokenize_console(s);
2048 g_weaponarena_list = "";
2049 for (int j = 0; j < t; ++j)
2050 {
2051 s = argv(j);
2052 Weapon wep = Weapon_from_name(s);
2053 if(wep != WEP_Null)
2054 {
2055 g_weaponarena_weapons |= (wep.m_wepset);
2057 }
2058 }
2059 if (g_weaponarena_list != "") // remove trailing " & "
2061 else // no valid weapon found
2062 g_weaponarena_list = "No Weapons Arena";
2063 }
2064
2065 if (g_weaponarena)
2066 {
2067 g_weapon_stay = 0; // incompatible
2071 }
2072 else
2073 {
2074 FOREACH(Weapons, it != WEP_Null, {
2075 int w = want_weapon(it, false);
2076 WepSet s = it.m_wepset;
2077 if(w & 1)
2078 start_weapons |= s;
2079 if(w & 2)
2081 if(w & 4)
2083 });
2084 }
2085
2086 if(cvar("g_balance_superweapons_time") < 0)
2088
2089 if(!cvar("g_use_ammunition"))
2091
2092 start_ammo_shells = cvar("g_start_ammo_shells");
2093 start_ammo_nails = cvar("g_start_ammo_nails");
2094 start_ammo_rockets = cvar("g_start_ammo_rockets");
2095 start_ammo_cells = cvar("g_start_ammo_cells");
2096 start_ammo_fuel = cvar("g_start_ammo_fuel");
2097 random_start_weapons_count = cvar("g_random_start_weapons_count");
2098 SetResource(random_start_ammo, RES_SHELLS, cvar("g_random_start_shells"));
2099 SetResource(random_start_ammo, RES_BULLETS, cvar("g_random_start_bullets"));
2100 SetResource(random_start_ammo, RES_ROCKETS, cvar("g_random_start_rockets"));
2101 SetResource(random_start_ammo, RES_CELLS, cvar("g_random_start_cells"));
2102
2113
2114 if (!g_weaponarena)
2115 {
2116 warmup_start_ammo_shells = cvar("g_warmup_start_ammo_shells");
2117 warmup_start_ammo_nails = cvar("g_warmup_start_ammo_nails");
2118 warmup_start_ammo_rockets = cvar("g_warmup_start_ammo_rockets");
2119 warmup_start_ammo_cells = cvar("g_warmup_start_ammo_cells");
2120 warmup_start_ammo_fuel = cvar("g_warmup_start_ammo_fuel");
2121 warmup_start_health = cvar("g_warmup_start_health");
2122 warmup_start_armorvalue = cvar("g_warmup_start_armor");
2123 warmup_start_weapons = '0 0 0';
2126 FOREACH(Weapons, it != WEP_Null, {
2128 WepSet s = it.m_wepset;
2129 if(w & 1)
2131 if(w & 2)
2133 if(w & 4)
2135 });
2136 }
2137
2139 start_items |= ITEM_Jetpack.m_itemid;
2140
2141 MUTATOR_CALLHOOK(SetStartItems);
2142
2143 if (start_items & ITEM_Jetpack.m_itemid)
2144 {
2145 start_items |= ITEM_FuelRegen.m_itemid;
2146 start_ammo_fuel = max(start_ammo_fuel, cvar("g_balance_fuel_rotstable"));
2147 warmup_start_ammo_fuel = max(warmup_start_ammo_fuel, cvar("g_balance_fuel_rotstable"));
2148 }
2149
2155 SetResource(random_start_ammo, RES_SHELLS, max(0, GetResource(random_start_ammo, RES_SHELLS)));
2156 SetResource(random_start_ammo, RES_BULLETS, max(0, GetResource(random_start_ammo, RES_BULLETS)));
2157 SetResource(random_start_ammo, RES_ROCKETS, max(0, GetResource(random_start_ammo, RES_ROCKETS)));
2158 SetResource(random_start_ammo, RES_CELLS, max(0, GetResource(random_start_ammo, RES_CELLS)));
2159
2165}
void SetResource(entity e, Resource res_type, float amount)
Sets the current amount of resource the given entity will have.
float GetResource(entity e, Resource res_type)
Returns the current amount of resource the given entity has.
fields which are explicitly/manually set are marked with "M", fields set automatically are marked wit...
Definition weapon.qh:44
string netname
M: refname : reference name name.
Definition weapon.qh:79
const int IT_UNLIMITED_AMMO
Definition item.qh:23
const int IT_UNLIMITED_SUPERWEAPONS
Definition item.qh:24
const int INITPRIO_FINDTARGET
Definition constants.qh:96
#define strlen
#define tokenize_console
string substring(string s, float start, float length)
const string cvar_string(string name)
string strzone(string s)
string argv(float n)
float max(float f,...)
#define new_pure(class)
purely logical entities (not linked to the area grid)
Definition oo.qh:67
Weapon Weapon_from_name(string s)
Definition all.qh:144
vector WepSet
Definition weapon.qh:14
int want_weapon(entity weaponinfo, int allguns)
Definition world.qc:1843
WepSet weapons_most()
Definition world.qc:1914
WepSet weapons_all()
Definition world.qc:1894
void weaponarena_available_all_update(entity this)
Definition world.qc:1924
void weaponarena_available_devall_update(entity this)
Definition world.qc:1937
void weaponarena_available_most_update(entity this)
Definition world.qc:1950
WepSet weapons_devall()
Definition world.qc:1904
WepSet start_weapons
Definition world.qh:80
float warmup_start_ammo_cells
Definition world.qh:105
entity random_start_ammo
Entity that contains amount of ammo to give with random start weapons.
Definition world.qh:95
bool autocvar_g_jetpack
Definition world.qh:8
float start_ammo_shells
Definition world.qh:84
float warmup_start_ammo_rockets
Definition world.qh:104
float warmup_start_ammo_shells
Definition world.qh:102
float start_ammo_fuel
Definition world.qh:88
int start_items
Definition world.qh:83
WepSet start_weapons_default
Definition world.qh:81
int random_start_weapons_count
Number of random start weapons to give to players.
Definition world.qh:90
float warmup_start_ammo_nails
Definition world.qh:103
int autocvar_g_warmup_allguns
Definition world.qh:10
WepSet g_weaponarena_weapons
Definition world.qh:76
float start_ammo_cells
Definition world.qh:87
float g_weaponarena
Definition world.qh:75
float warmup_start_health
Definition world.qh:107
WepSet start_weapons_defaultmask
Definition world.qh:82
float start_ammo_rockets
Definition world.qh:86
WepSet warmup_start_weapons_default
Definition world.qh:99
float start_armorvalue
Definition world.qh:97
WepSet warmup_start_weapons_defaultmask
Definition world.qh:100
WepSet warmup_start_weapons
Definition world.qh:98
float warmup_start_ammo_fuel
Definition world.qh:106
string g_weaponarena_list
Definition world.qh:78
float start_health
Definition world.qh:96
float warmup_start_armorvalue
Definition world.qh:108
float start_ammo_nails
Definition world.qh:85

References argv(), autocvar_g_jetpack, autocvar_g_warmup_allguns, cvar(), cvar_string(), FOREACH, g_weapon_stay, g_weaponarena, g_weaponarena_list, g_weaponarena_weapons, GetResource(), InitializeEntity(), INITPRIO_FINDTARGET, IT_UNLIMITED_AMMO, IT_UNLIMITED_SUPERWEAPONS, M_ARGV, max(), MUTATOR_CALLHOOK, Weapon::netname, new_pure, NULL, random_start_ammo, random_start_weapons_count, SetResource(), start_ammo_cells, start_ammo_fuel, start_ammo_nails, start_ammo_rockets, start_ammo_shells, start_armorvalue, start_health, start_items, start_weapons, start_weapons_default, start_weapons_defaultmask, strcat(), strlen, strzone(), substring(), tokenize_console, want_weapon(), warmup_start_ammo_cells, warmup_start_ammo_fuel, warmup_start_ammo_nails, warmup_start_ammo_rockets, warmup_start_ammo_shells, warmup_start_armorvalue, warmup_start_health, warmup_start_weapons, warmup_start_weapons_default, warmup_start_weapons_defaultmask, Weapon_from_name(), weaponarena_available_all_update(), weaponarena_available_devall_update(), weaponarena_available_most_update(), Weapons, weapons_all(), weapons_devall(), and weapons_most().

Referenced by readlevelcvars().

◆ ReadyRestart()

void ReadyRestart ( bool forceWarmupEnd)

Definition at line 526 of file vote.qc.

527{
528 if (MUTATOR_CALLHOOK(ReadyRestart_Deny))
529 {
530 // NOTE: ReadyRestart support is mandatory in campaign
532 error("ReadyRestart must be supported in campaign mode!");
533 localcmd("restart\n"); // if ReadyRestart is denied, restart the server
534 }
535 else if (intermission_running || race_completing) // game is over, ReadyRestart no longer available
536 localcmd("restart\n");
537 else
538 localcmd("\nsv_hook_readyrestart\n");
539
540 if(forceWarmupEnd || autocvar_g_campaign)
541 warmup_stage = 0; // forcefully end warmup and go to match stage
542 else
543 warmup_stage = autocvar_g_warmup; // go into warmup if it's enabled, otherwise restart into match stage
544
545 ReadyRestart_force(false);
546}
void localcmd(string command,...)
#define error
Definition pre.qh:6
void ReadyRestart_force(bool is_fake_round_start)
Definition vote.qc:441
float race_completing
Definition race.qh:28

References autocvar_g_campaign, autocvar_g_warmup, error, intermission_running, localcmd(), MUTATOR_CALLHOOK, race_completing, ReadyRestart_force(), and warmup_stage.

Referenced by CheckRules_World(), GameCommand_allready(), GameCommand_resetmatch(), Join(), ReadyCount(), and StartFrame().

◆ RedirectionThink()

float RedirectionThink ( )

Definition at line 2540 of file world.qc.

2541{
2542 float clients_found;
2543
2544 if(redirection_target == "")
2545 return false;
2546
2548 {
2549 cvar_set("sv_public", "-2");
2550 redirection_timeout = time + 0.6; // this will only try twice... should be able to keep more clients
2551 if(redirection_target == "self")
2552 bprint("^3SERVER NOTICE:^7 restarting the server\n");
2553 else
2554 bprint("^3SERVER NOTICE:^7 redirecting everyone to ", redirection_target, "\n");
2555 }
2556
2558 return true;
2559
2561
2562 clients_found = 0;
2564 // TODO add timer
2565 LOG_INFO("Redirecting: sending connect command to ", it.netname);
2566 if(redirection_target == "self")
2567 stuffcmd(it, "\ndisconnect; defer ", ftos(autocvar_quit_and_redirect_timer), " reconnect\n");
2568 else
2569 stuffcmd(it, strcat("\ndisconnect; defer ", ftos(autocvar_quit_and_redirect_timer), " \"connect ", redirection_target, "\"\n"));
2570 ++clients_found;
2571 });
2572
2573 LOG_INFO("Redirecting: ", ftos(clients_found), " clients left.");
2574
2575 if(time > redirection_timeout || clients_found == 0)
2576 localcmd("\nwait; wait; wait; quit\n");
2577
2578 return true;
2579}
#define LOG_INFO(...)
Definition log.qh:65
void cvar_set(string name, string value)
#define stuffcmd(cl,...)
Definition progsdefs.qh:23
float redirection_nextthink
Definition world.qc:2539
float redirection_timeout
Definition world.qc:2538
float autocvar_quit_and_redirect_timer
Definition world.qh:14
string redirection_target
Definition world.qh:67

References autocvar_quit_and_redirect_timer, bprint(), cvar_set(), FOREACH_CLIENT, ftos(), IS_REAL_CLIENT, localcmd(), LOG_INFO, redirection_nextthink, redirection_target, redirection_timeout, strcat(), stuffcmd, and time.

Referenced by StartFrame().

◆ SetWinners()

void SetWinners ( .float field,
float value )

Definition at line 1519 of file world.qc.

1520{
1521 FOREACH_CLIENT(IS_PLAYER(it) || INGAME(it), { it.winning = (it.(field) == value); });
1522}
#define INGAME(it)
Definition sv_rules.qh:24

References FOREACH_CLIENT, INGAME, and IS_PLAYER.

Referenced by WinningCondition_Assault(), WinningCondition_Invasion(), and WinningCondition_Scores().

◆ STATIC_INIT()

STATIC_INIT ( g_moveables )

Definition at line 158 of file world.qh.

158{ g_moveables = IL_NEW(); }
#define IL_NEW()
IntrusiveList g_moveables
Definition world.qh:157

References g_moveables, and IL_NEW.

◆ void()

void ( entity this)

References entity().

◆ want_weapon()

int want_weapon ( entity weaponinfo,
int allguns )

Definition at line 1843 of file world.qc.

1844{
1845 int d = 0;
1846 bool allow_mutatorblocked = false;
1847
1848 if(!weaponinfo.m_id)
1849 return 0;
1850
1851 bool mutator_returnvalue = MUTATOR_CALLHOOK(WantWeapon, weaponinfo, d, allguns, allow_mutatorblocked);
1852 d = M_ARGV(1, float);
1853 allguns = M_ARGV(2, int);
1854 allow_mutatorblocked = M_ARGV(3, bool);
1855
1856 if(allguns == 1)
1857 d = boolean(!(weaponinfo.spawnflags & WEP_FLAG_HIDDEN));
1858 else if(allguns == 2)
1859 d = boolean((weaponinfo.spawnflags & WEP_FLAG_NORMAL) && !(weaponinfo.spawnflags & WEP_FLAG_HIDDEN));
1860 else if(!mutator_returnvalue)
1861 d = !(!weaponinfo.weaponstart);
1862
1863 if(!allow_mutatorblocked && (weaponinfo.spawnflags & WEP_FLAG_MUTATORBLOCKED)) // never default mutator blocked guns
1864 d = 0;
1865
1866 float t = weaponinfo.weaponstartoverride;
1867
1868 //LOG_INFOF("want_weapon: %s - d: %d t: %d\n", weaponinfo.netname, d, t);
1869
1870 // bit order in t:
1871 // 1: want or not
1872 // 2: is default?
1873 // 4: is set by default?
1874 if(t < 0)
1875 t = 4 | (3 * d);
1876 else
1877 t |= (2 * d);
1878
1879 return t;
1880}
#define boolean(value)
Definition bool.qh:9
const int WEP_FLAG_MUTATORBLOCKED
Definition weapon.qh:219
const int WEP_FLAG_HIDDEN
Definition weapon.qh:216
const int WEP_FLAG_NORMAL
Definition weapon.qh:215

References boolean, entity(), M_ARGV, MUTATOR_CALLHOOK, WEP_FLAG_HIDDEN, WEP_FLAG_MUTATORBLOCKED, and WEP_FLAG_NORMAL.

Referenced by readplayerstartcvars(), and weapons_start().

◆ WinningCondition_Scores()

float WinningCondition_Scores ( float limit,
float leadlimit )

Definition at line 1540 of file world.qc.

1541{
1542 // TODO make everything use THIS winning condition (except LMS)
1544
1545 if(teamplay)
1546 {
1547 for (int i = 1; i < 5; ++i)
1548 {
1551 }
1552 }
1553
1554 ClearWinners();
1559
1561 {
1564 limit = -limit;
1565 }
1566
1568 leadlimit = 0; // not supported in this mode
1569
1570 if(MUTATOR_CALLHOOK(Scores_CountFragsRemaining))
1571 {
1572 float fragsleft;
1574 {
1575 fragsleft = 1;
1576 }
1577 else
1578 {
1579 fragsleft = FLOAT_MAX;
1580 float leadingfragsleft = FLOAT_MAX;
1581 if (limit)
1582 fragsleft = limit - WinningConditionHelper_topscore;
1583 if (leadlimit)
1585
1586 if (limit && leadlimit && autocvar_leadlimit_and_fraglimit)
1587 fragsleft = max(fragsleft, leadingfragsleft);
1588 else
1589 fragsleft = min(fragsleft, leadingfragsleft);
1590 }
1591
1592 if (fragsleft_last != fragsleft) // do not announce same remaining frags multiple times
1593 {
1594 if (fragsleft == 1)
1595 Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_1);
1596 else if (fragsleft == 2)
1597 Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_2);
1598 else if (fragsleft == 3)
1599 Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_3);
1600
1601 fragsleft_last = fragsleft;
1602 }
1603 }
1604
1605 bool fraglimit_reached = (limit && WinningConditionHelper_topscore >= limit);
1606 bool leadlimit_reached = (leadlimit && WinningConditionHelper_topscore - WinningConditionHelper_secondscore >= leadlimit);
1607
1608 bool limit_reached;
1609 // only respect leadlimit_and_fraglimit when both limits are set or the game will never end
1610 if (limit && leadlimit && autocvar_leadlimit_and_fraglimit)
1611 limit_reached = (fraglimit_reached && leadlimit_reached);
1612 else
1613 limit_reached = (fraglimit_reached || leadlimit_reached);
1614
1615 return GetWinningCode(
1616 WinningConditionHelper_topscore && limit_reached,
1618 );
1619}
const float FLOAT_MAX
Definition float.qh:3
float min(float f,...)
float TeamScore_GetCompareValue(float t)
Returns a value indicating the team score (and higher is better).
Definition scores.qc:806
void WinningConditionHelper(entity this)
Sets the following results for the current scores entities.
Definition scores.qc:443
float WinningConditionHelper_secondscore
second highest score
Definition scores.qh:108
entity WinningConditionHelper_winner
the winning player, or NULL if none
Definition scores.qh:112
float WinningConditionHelper_topscore
highest score
Definition scores.qh:107
float WinningConditionHelper_equality
we have no winner
Definition scores.qh:111
float WinningConditionHelper_lowerisbetter
lower is better, duh
Definition scores.qh:114
float WinningConditionHelper_zeroisworst
zero is worst, duh
Definition scores.qh:115
int autocvar_leadlimit_and_fraglimit
Definition sv_rules.qh:8
void Team_SetTeamScore(entity team_ent, float score)
Sets the score of the team.
Definition teamplay.qc:80
entity Team_GetTeamFromIndex(int index)
Returns the global team entity at the given index.
Definition teamplay.qc:57
int Team_IndexToTeam(int index)
Converts team index into team value.
Definition teams.qh:169
int fragsleft_last
Definition world.qc:1539
void SetWinners(.float field, float value)
Definition world.qc:1519
float GetWinningCode(float fraglimitreached, float equality)
Definition world.qc:1490

References autocvar_leadlimit_and_fraglimit, checkrules_suddendeathend, ClearWinners(), FLOAT_MAX, fragsleft_last, GetWinningCode(), max(), min(), MUTATOR_CALLHOOK, NULL, Send_Notification(), SetWinners(), team, Team_GetTeamFromIndex(), Team_IndexToTeam(), Team_SetTeamScore(), teamplay, TeamScore_GetCompareValue(), time, WinningConditionHelper(), WinningConditionHelper_equality, WinningConditionHelper_lowerisbetter, WinningConditionHelper_secondscore, WinningConditionHelper_topscore, WinningConditionHelper_winner, WinningConditionHelper_winnerteam, and WinningConditionHelper_zeroisworst.

Referenced by CheckRules_World(), WinningCondition_QualifyingThenRace(), and WinningCondition_Race().

Variable Documentation

◆ autocvar__endmatch

bool autocvar__endmatch

Definition at line 6 of file world.qh.

Referenced by CheckRules_World(), Pause_TryPause_Dedicated(), and SV_PausedTic().

◆ autocvar__sv_init

bool autocvar__sv_init

Definition at line 5 of file world.qh.

Referenced by GotoFirstMap().

◆ autocvar__sv_vote_gametype_custom

string autocvar__sv_vote_gametype_custom

Definition at line 51 of file world.qh.

Referenced by InitGameplayMode().

◆ autocvar_g_jetpack

bool autocvar_g_jetpack

Definition at line 8 of file world.qh.

Referenced by readplayerstartcvars(), and SendWelcomeMessage().

◆ autocvar_g_random_start_weapons

string autocvar_g_random_start_weapons

Holds a list of possible random start weapons.

Definition at line 92 of file world.qh.

Referenced by PutPlayerInServer().

◆ autocvar_g_use_ammunition

bool autocvar_g_use_ammunition

Definition at line 7 of file world.qh.

Referenced by GameLogInit().

◆ autocvar_g_warmup

int autocvar_g_warmup

Definition at line 9 of file world.qh.

Referenced by readlevelcvars(), ReadyCount(), ReadyRestart(), and SendWelcomeMessage().

◆ autocvar_g_warmup_allguns

int autocvar_g_warmup_allguns

Definition at line 10 of file world.qh.

Referenced by readplayerstartcvars().

◆ autocvar_g_warmup_allow_timeout

bool autocvar_g_warmup_allow_timeout

Definition at line 11 of file world.qh.

Referenced by CommonCommand_timeout().

◆ autocvar_quit_and_redirect

string autocvar_quit_and_redirect

Definition at line 13 of file world.qh.

Referenced by DoNextMapOverride().

◆ autocvar_quit_and_redirect_timer

float autocvar_quit_and_redirect_timer

Definition at line 14 of file world.qh.

Referenced by RedirectionThink().

◆ autocvar_quit_when_empty

bool autocvar_quit_when_empty

Definition at line 15 of file world.qh.

Referenced by DoNextMapOverride().

◆ autocvar_sessionid

string autocvar_sessionid

Definition at line 16 of file world.qh.

Referenced by RestoreGame(), Shutdown(), and spawnfunc().

◆ autocvar_sv_curl_serverpackages_auto

bool autocvar_sv_curl_serverpackages_auto

Definition at line 17 of file world.qh.

Referenced by spawnfunc().

◆ autocvar_sv_db_saveasdump

bool autocvar_sv_db_saveasdump

Definition at line 18 of file world.qh.

Referenced by Shutdown().

◆ autocvar_sv_dedicated

◆ autocvar_sv_logscores_bots

bool autocvar_sv_logscores_bots

Definition at line 19 of file world.qh.

Referenced by DumpStats().

◆ autocvar_sv_logscores_console

bool autocvar_sv_logscores_console

Definition at line 20 of file world.qh.

Referenced by DumpStats().

◆ autocvar_sv_logscores_file

bool autocvar_sv_logscores_file

Definition at line 21 of file world.qh.

Referenced by DumpStats().

◆ autocvar_sv_logscores_filename

string autocvar_sv_logscores_filename

Definition at line 22 of file world.qh.

Referenced by DumpStats().

◆ autocvar_sv_mapchange_delay

float autocvar_sv_mapchange_delay

Definition at line 23 of file world.qh.

Referenced by NextLevel().

◆ autocvar_sv_mapformat_is_quake2

bool autocvar_sv_mapformat_is_quake2

Definition at line 33 of file world.qh.

Referenced by DropToFloor_QC(), and Physics_UpdateStats().

◆ autocvar_sv_mapformat_is_quake3

bool autocvar_sv_mapformat_is_quake3

Definition at line 32 of file world.qh.

Referenced by DropToFloor_QC(), Physics_UpdateStats(), and PutPlayerInServer().

◆ autocvar_sv_termsofservice_url

string autocvar_sv_termsofservice_url

Definition at line 57 of file world.qh.

Referenced by spawnfunc().

◆ autocvar_timelimit_decrement

float autocvar_timelimit_decrement

Definition at line 25 of file world.qh.

Referenced by GameCommand_reducematchtime().

◆ autocvar_timelimit_increment

float autocvar_timelimit_increment

Definition at line 24 of file world.qh.

Referenced by GameCommand_extendmatchtime().

◆ autocvar_timelimit_max

float autocvar_timelimit_max

◆ autocvar_timelimit_min

float autocvar_timelimit_min

◆ autocvar_timelimit_overtime

float autocvar_timelimit_overtime

Definition at line 28 of file world.qh.

Referenced by InitiateOvertime(), InitiateSuddenDeath(), and ReadyRestart_force().

◆ autocvar_timelimit_overtimes

int autocvar_timelimit_overtimes

Definition at line 29 of file world.qh.

Referenced by InitiateSuddenDeath().

◆ autocvar_timelimit_suddendeath

float autocvar_timelimit_suddendeath

Definition at line 30 of file world.qh.

Referenced by InitiateSuddenDeath(), and Onslaught_CheckWinner().

◆ cache_lastmutatormsg

string cache_lastmutatormsg

Definition at line 70 of file world.qh.

Referenced by InitGameplayMode(), and SendWelcomeMessage().

◆ cache_mutatormsg

string cache_mutatormsg

Definition at line 69 of file world.qh.

Referenced by InitGameplayMode(), net_handle_ServerWelcome(), and SendWelcomeMessage().

◆ checkrules_equality

float checkrules_equality

Definition at line 35 of file world.qh.

Referenced by CampaignPreIntermission(), and WinningCondition_RanOutOfSpawns().

◆ checkrules_overtimesadded

int checkrules_overtimesadded

◆ checkrules_suddendeathend

float checkrules_suddendeathend

◆ checkrules_suddendeathwarning

float checkrules_suddendeathwarning

Definition at line 36 of file world.qh.

Referenced by CheckRules_World(), and ReadyRestart_force().

◆ clientstuff

string clientstuff

Definition at line 61 of file world.qh.

Referenced by ClientConnect(), InitGameplayMode(), and spawnfunc().

◆ cvar_changes

string cvar_changes

Definition at line 45 of file world.qh.

Referenced by COMMON_COMMAND(), CommonCommand_cvar_changes(), and cvar_changes_init().

◆ cvar_purechanges

string cvar_purechanges

◆ cvar_purechanges_count

float cvar_purechanges_count

◆ default_player_alpha

◆ default_weapon_alpha

◆ dropped_origin

◆ fog

string fog

Definition at line 65 of file world.qh.

◆ g_grappling_hook

float g_grappling_hook

Definition at line 113 of file world.qh.

Referenced by PRECACHE(), and REGISTER_MUTATOR().

◆ g_moveables

◆ g_weapon_stay

◆ g_weaponarena

◆ g_weaponarena_list

string g_weaponarena_list

Definition at line 78 of file world.qh.

Referenced by readplayerstartcvars(), and SendWelcomeMessage().

◆ g_weaponarena_random

float g_weaponarena_random

Definition at line 77 of file world.qh.

Referenced by MUTATOR_HOOKFUNCTION(), MUTATOR_HOOKFUNCTION(), and MUTATOR_HOOKFUNCTION().

◆ g_weaponarena_weapons

◆ gametype_custom_enabled

bool gametype_custom_enabled

◆ initialize_entity_first

entity initialize_entity_first

Definition at line 121 of file world.qh.

Referenced by InitializeEntitiesRun(), InitializeEntity(), and make_safe_for_remove().

◆ initialize_entity_next

entity initialize_entity_next

Definition at line 120 of file world.qh.

◆ initialize_entity_order

int initialize_entity_order

Definition at line 119 of file world.qh.

◆ loaded_gametype_custom_string

string loaded_gametype_custom_string

◆ matchid

◆ modname

◆ observe_blocked_if_eliminated

bool observe_blocked_if_eliminated = false

◆ random_start_ammo

entity random_start_ammo

Entity that contains amount of ammo to give with random start weapons.

Definition at line 95 of file world.qh.

Referenced by PutPlayerInServer(), and readplayerstartcvars().

◆ random_start_weapons_count

int random_start_weapons_count

Number of random start weapons to give to players.

Definition at line 90 of file world.qh.

Referenced by PutPlayerInServer(), and readplayerstartcvars().

◆ record_type

◆ redirection_target

string redirection_target

Definition at line 67 of file world.qh.

Referenced by DoNextMapOverride(), and RedirectionThink().

◆ ServerProgsDB

◆ start_ammo_cells

◆ start_ammo_fuel

◆ start_ammo_nails

◆ start_ammo_rockets

◆ start_ammo_shells

◆ start_armorvalue

◆ start_health

◆ start_items

◆ start_weapons

◆ start_weapons_default

WepSet start_weapons_default

Definition at line 81 of file world.qh.

Referenced by readplayerstartcvars().

◆ start_weapons_defaultmask

WepSet start_weapons_defaultmask

Definition at line 82 of file world.qh.

Referenced by MUTATOR_HOOKFUNCTION(), and readplayerstartcvars().

◆ sv_ready_restart_after_countdown

bool sv_ready_restart_after_countdown

◆ sv_termsofservice_url_escaped

string sv_termsofservice_url_escaped

Definition at line 59 of file world.qh.

Referenced by Shutdown(), spawnfunc(), and WinningConditionHelper().

◆ TemporaryDB

float TemporaryDB

◆ warmup_stage

int warmup_stage

Definition at line 114 of file world.qh.

◆ warmup_start_ammo_cells

◆ warmup_start_ammo_fuel

◆ warmup_start_ammo_nails

◆ warmup_start_ammo_rockets

◆ warmup_start_ammo_shells

◆ warmup_start_armorvalue

◆ warmup_start_health

◆ warmup_start_weapons

◆ warmup_start_weapons_default

WepSet warmup_start_weapons_default

Definition at line 99 of file world.qh.

Referenced by readplayerstartcvars().

◆ warmup_start_weapons_defaultmask

WepSet warmup_start_weapons_defaultmask

Definition at line 100 of file world.qh.

Referenced by MUTATOR_HOOKFUNCTION(), and readplayerstartcvars().

◆ winning

◆ WINNING_NEVER

const int WINNING_NEVER = 2

◆ WINNING_NO

◆ WINNING_STARTSUDDENDEATHOVERTIME

const int WINNING_STARTSUDDENDEATHOVERTIME = 3

◆ WINNING_YES

◆ world_initialized