## Console variables

Console variables (or CVars) are present in all quake-based games.

By default, it is settings, created by engine, server or client libraries.

But you can use `set` command to define variables even if they are not created by the engine.

For example, you can set cvar before it is registered in code.

`set defaultmap crossfire`

This works even in server.cfg before server cvars initialization and the engine will reuse its value on cvar creation

## Aliases

An alias allows to define new commands.

`alias wnext "invnext;wait;wait;+attack;wait;-attack"`

You can hook any command by adding an alias to it and unaliasing it, when you want to use original command.

```
alias invnext1 "unalias invnext;wnext;alias invnext invnext1"
alias invnext invnext1
```

## Scripting extensions

This is an extensions of Xash3D FWGS(merged to original Xash3D since build 3887), that can be enabled by cmd_scripting cvar.

Enabling scripting: `cmd_scripting 1`

This is an archive cvar and it will be saved.

### CVar substitution

You can substitute cvar value to any command by adding \$ symbol:

`echo $sv_cheats`

### Condition checking

Allows checking cvar values.

```
if <value1> <operator> <value2>
:<action1>
:if <value3>
::<action2>
:<action3>
else
:<action4>
```

* Values are any string or numeric values (for example, substituted cvars).
* Operator is = (or ==), \!=, \<, \>, \<=, \>=. == is same to =.
* If single value specified, condition is true when value is non-zero

Example:

```
if $sv_cheats == 1
:echo Cheats enabled, adding cheat menu
:exec cheatmenu.cfg
else
:echo Please enable cheats to use this!
```