Admin Command Reference

NeoTF server administration commands, by authorization level

Before Any Of These Will Work

Three gates, and all three are silent

An admin command that fails these does nothing at all — no error, no message. It looks exactly like a broken or misspelled command.

1. You must be authorized. Your SteamID / WONID / IP and an AuthLevel must be listed in ntf_users.ini.
2. ntf_feature_admin must be on — without it every neotf_* command is a silent no-op.
3. Wait about 10 seconds after enabling it. NeoTF rebuilds its feature flags on a timer, so setting the cvar and running a command in the same breath will not work.

Quote any Steam ID

The Half-Life console treats : as a token of its own, so an unquoted Steam ID arrives split into pieces and the command prints its usage line instead of running:

ntf_msg STEAM_0:1:12345 "text"     <-- WRONG, argv1 is just "STEAM_0"
ntf_msg "STEAM_0:1:12345" "text"   <-- correct

This is engine behaviour, not a NeoTF bug, and it affects every command taking an ID — ntf_msg, ntfsv_exec, ntf_deletemsg, neotf_ban, neotf_checkdev_steam. Nothing quotes it for you.

Some commands do not work on bots

Several commands skip bots deliberately, and most of the _all variants skip them too.

Command Syntax Key
<USER ID>      Slot number assigned to each player ("status" or "users")
<STEAM ID>     STEAM_0:0:123456789 format -- ALWAYS QUOTE IT
<NAME>         Player's name (quote it; substrings work if unambiguous)
<person>       Any of the three above: name, Steam ID or user ID
<color rgb>    Red, Green, Blue values (0-255)
<origin xyz>   Coordinates in 3D space (x y z)
<team>         Team number (1-4)
<classnumber>  Class numbers (1-9, 11 = civilian)
<duration>     Time, usually in seconds
<cvar>         Server cvar name (e.g. ntf_jetpack_armor)
<value>        Numeric value (e.g. 100, 1.0, 0.5)
<command>      Console / server command
[abcdefg]      Arguments in square brackets are optional
Admin Commands by Auth Level

Click a heading to expand it. The number beside each is the AuthLevel bit required; an AuthLevel is the sum of the levels you want to grant.

LLAMACTRL: Llama Control / Fun Tools 32768
neotf_antifreeze (duration)
neotf_concussioneffect_all (integer)
neotf_fov <player> (integer)
neotf_fov_all (integer)
neotf_punchangle <person> (x y z)      SETS the punchangle
neotf_punchangle_all (x y z)
neotf_slap <person>
neotf_slap_all
neotf_velocity <person> (x y z)        ADDS to current velocity
neotf_velocity_all (x y z)
neotf_weaponstrip <player>

neotf_llama <player>
neotf_llama <player> off

neotf_gag <player>
neotf_gag <player> off

neotf_anydeath <person> (type)         0 = plain, above 6 = RANDOM
neotf_anydeath_all
neotf_slay <person> (life width amplitude)   unclamped -- see below
neotf_slay2 <person>                   same, but clamped

neotf_screenfade <person> (r g b) (alpha)
neotf_screenfade_all (r g b) (alpha)
ntfsv_command screenfade_all (r g b) (alpha)

neotf_plague <player>
neotf_plague_all
ntfsv_command plague_all
ntfsv_command cure_all

neotf_civ <person>
neotf_civteam (team)
neotf_civall
neotf_civ <person> <lock?>
neotf_civteam (team) <lock?>
neotf_civall <lock?>
neotf_civ <person> <unlock>
neotf_civteam (team) <unlock>
neotf_civall <unlock>

neotf_classlock <player> <class>
neotf_classlock <player> 0

neotf_admincam <person>
neotf_admincamoff
togglecam
cammenu

Corrected against the 1.9.0 source

neotf_velocity takes (x y z), not (r g b). The original documentation had this wrong for twenty-two years — the _all variant beside it was always documented correctly. It ADDS to the player's current velocity; neotf_punchangle, immediately above it, assigns instead.

neotf_slay takes (life width amplitude) for the lightning bolt it draws, not (r g b). The three values are passed to the engine with no clamping at all, which is exactly why neotf_slay2 exists — it clamps all three. Prefer slay2 unless you know what you are sending.

neotf_anydeath's type argument is not clamped upward: below 1 becomes 0, but anything above 6 picks a RANDOM death rather than the highest one. So neotf_anydeath bob 99 is the way to ask for a random one.

No argument checking

The velocity, punchangle and slay commands do not check how many arguments you gave them. A missing number reads as 0 rather than producing an error.

PASS: Server Controls & CVARs 16384
neotf_map <mapname>
neotf_pass <password>
neotf_nopass
ntf_reload
neotf_cvar <cvar>
neotf_cvar <cvar> (value)
EXEC: Execute Commands on Clients 8192
neotf_exec <person> (command)
neotf_execall (command)
neotf_execteam (team) (command)
KICKBAN: Kick and Ban 4096
neotf_kick <ID>
neotf_ban (duration) "<ID>"
neotf_unban "<ID>"

Note the quotes around the ID in the ban commands — they are required, for the reason given at the top of this page.

FUN: Fun Commands 2048
neotf_to <person>
neotf_teleport <person> (x y z)
neotf_speakall "(text)"
neotf_fakedeath <killer> <victim> (weapon)
neotf_team <player> (team)
neotf_class <person> (classnumber)
discoball
discoball2
neotf_kill_discoball
neotf_kill_discoball2
neotf_makelight (r g b) (area)
neotf_kill_makelight
neotf_glow_all (r g b)
neotf_glow <person> (r g b)            all zero = OFF
neotf_lightstyle (string)
neotf_supertrail <radius> <glow> <white> <follow>

Corrected against the 1.9.0 source

neotf_glow has no on/off argument. neotf_glow bob 0 0 0 is how you turn a glow off — the all-zero colour is the switch. Each component is clamped to 0-255.

MAPENT: Map Entity Commands 1024
neotf_opendoor
neotf_use_ent
ntf_cycler <origin xyz> <type>
ntf_item_quad <team> <duration> <delay> <onfloor?>
ntf_item_invul ...
ntf_item_invis ...
ntf_item_airtank ...
ntf_speedball ...
ntf_item_antidote ...
ntf_item_weapon ...
ntf_item_weaponbox ...
ntf_tentacle ...
ntf_tentacle_maw ...
ntf_barnacle
ntf_xen_tree
ntf_tank
ntf_tanklaser
neotf_ent_button <team> <make name?>
neotf_ammopack2 ...
neotf_ammopack ...
neotf_triggerhurt ...
neotf_trigger_teleport ...

Creation commands have their own feature gates, and the names mislead

Being authorized is not enough — each of these also needs its own feature cvar, and some are grouped in ways the name does not suggest:

ntf_feature_tentacle    tentacle AND tentacle_maw   (needs a map change)
ntf_feature_barnacle    barnacle                    (needs a map change)
ntf_feature_mappowerup  the 5 powerups and speedball
ntf_feature_mapweapon   ntf_tank and ntf_tanklaser
ntf_feature_xentree     xen_tree                    (needs a map change)

ntf_feature_mapweapon is what gates the tanks, which is not obvious. The ones marked "needs a map change" are only read at map load — set the cvar, then changelevel.

A silent refusal usually means the spot is bad

These commands check placement strictly and report failure in a way rcon cannot see. A tentacle needs 400 units of headroom; a barnacle needs a real ceiling. Most build spots inside a base are also blocked by nobuild or respawn zones.

Other Levels: Elvis, Nuke, Godmode, Give, Messaging, Llamacage 1-64
ntf_elvis
togglegod
apachenuke
neotf_give_invul ...
neotf_giveall_invul ...
neotf_give_quad ...
neotf_give_ammo ...
neotf_give_detpack ...
neotf_give_cure ...
neotf_give_weapon ...
addhealth
addarmor
addarmor (integer)
toggleclip
ntf_msg "<id>" "message"
ntf_getmsg
ntf_dumpmsg
ntf_deletemsg <msg#>
ntf_replymsg "message"
neotf_psay <person> "(text)"
neotf_tsay "(text)" (r g b)
neotf_csay "(text)" (r g b)
llamacage [2-4]
detspecialcage
llamaport <player> <cage#>
llamafy [2-4]
unllamacage <player>
neotf_timeleft
neotf_serverdate
neotf_checkdev_steam "<ID>"
neotf_mp3_all <playtype> <tracknumber>
ntf_status

Llama cage: crash in 1.9.0, fixed in 1.9.1

On 1.9.0, caging three players and then having the first one disconnect takes the whole server down on the next tick. If you are running 1.9.0, avoid using all three cage slots. Fixed in 1.9.1 — see the changelog.

HLDS Server Commands rcon / console
ntfsv_teamlist (type)
ntfsv_csay (text) (rgb)
ntfsv_command ...
ntfsv_create ...
ntfsv_removeent ...

These run from the server console or rcon rather than from a player, so they do not use the AuthLevel system.

Seeing What Happened

Make the log visible over rcon

Many NeoTF commands report through the server log rather than the console, so over rcon they look like they did nothing. Turn the log echo on and the replies come straight back:

mp_logecho 1
log on

Every admin command is logged when it runs, so this is also the quickest way to confirm that your authorization is actually working.