ATG Commands

One shared in-game chat command, /atg, that the other ATG mods add their controls to.

What the mod does

ATG Commands adds a single chat command, /atg, and lets the other ATG mods put their controls underneath it. Instead of learning a different command per mod, an administrator learns one word.

On its own it does very little — it answers /atg and three small built-in commands, with two more appearing when ATG Core is loaded alongside it. Its value is that everything else lives in one place: install it alongside other ATG mods and their commands appear automatically under /atg.

Installing it

Load ATG Commands before any ATG mod that uses it. Mods find it by load order rather than by declaring it as a dependency, so a mod ordered ahead of ATG Commands will silently come up with no chat commands at all.

If you run a server with ATG Scenario, the order in your mod list should read ATG Commands, then ATG Scenario.

Nothing else is required, and there is nothing to configure.

Using it

Type /atg on its own to list every command available on that server, including ones added by other mods. The list is generated from what is actually loaded, so it is always accurate for that server.

CommandWhat it does
/atgList every available command
/atg statusReport what each ATG mod is currently doing, one line per topic
/atg whoamiReport which server roles you hold
/atg altitudeReport the Game Master camera height, or set it
/atg reloadRe-read every ATG mod’s settings file. Needs ATG Core loaded too.
/atg rplprobeMeasure what a player’s connection will carry. Needs ATG Core too.

Everything else comes from other mods. With ATG Scenario loaded you also get op and combat, for switching the server between rolling objectives and an authored operation — see Narrative ops — and zone, for marking out where objectives may be placed from inside the running game — see Objective placement.

/atg status

Each mod contributes its own labelled lines, printed separately so they stay readable as more mods are added:

ATG: mode - combat ops, tier may rise, op in 12 minutes
ATG: score - 1240, tier 3, +85 since the last switch
ATG: narrative - 4 root(s)
ATG: settings - 2 of 9 client(s) still receiving - 6 config(s), 21813 bytes, slowest about 4s
ATG: slowest - Jolyon - 4 config(s), 18422 bytes, about 3s to go

A mod with nothing to report stays quiet rather than printing an empty line. If nothing at all is registered, /atg status says so.

The last two lines come from ATG Core and are about settings reaching players as they join. settings always answers; slowest names whoever is worst off and is silent when nobody is waiting on anything. A player who is not acknowledging at all, rather than merely slow, is reported as such — that is the one to reach for /atg rplprobe with. See ATG Core configuration.

/atg whoami

Prints which roles the server thinks you hold. This is the first thing to reach for when a command refuses somebody it shouldn’t — it distinguishes “you don’t have the role” from “the command is broken”.

/atg altitude

Reports how high the Game Master camera is sitting, in metres above the ground beneath it and metres above sea level. Give it a number and it moves the camera to that height above the ground:

/atg altitude          Report where the camera is
/atg altitude 400      Put the camera 400 m above the ground below it

Open Game Master first — with no camera open it says so rather than doing nothing. The engine’s own ceiling is 8000 m above sea level; a request above that is clamped, and the reply says which height it settled at.

/atg reload

Re-reads every ATG mod’s settings file from the server’s profile directory and applies it over the settings that mod is already running, without restarting the server.

/atg reload
/atg reload atg-scenario

With no argument it reloads every ATG mod that has registered settings. With a mod name it reloads that one, and the name is the whole file name without its extension — atg-scenario for ATG/atg-scenario.json, not scenario. A name nothing is registered under is refused with the list of names that are.

Each mod replies with one line saying which keys moved, and every connected player is sent whichever of the new values reach clients at all, in the same step, so nobody has to rejoin to pick them up.

This verb comes from ATG Core, which owns the settings file and the reload itself, so it only appears on a server running both mods. If no ATG mod has registered settings there is nothing to reload, and it says so rather than reporting success.

It needs the administrator role, because it changes what the whole server is doing.

Two limits are worth knowing before you rely on it. Deleting a key, or the whole file, does not put the shipped default back — the value stays where the last read left it until the server restarts. And a setting that a subsystem reads once while starting up cannot always be moved by a reload; where that is true the mod’s own page says so. Both are covered on ATG Core configuration.

/atg rplprobe

Finds out how much replicated traffic one player’s connection will actually carry. It is the tool for a server where players are being dropped on join and nobody can say whose connection is at fault.

/atg rplprobe                Test your own connection
/atg rplprobe Jolyon         Ask that player, then test theirs
/atg rplprobe stop           Stop a running test, or withdraw a standing request
/atg rplprobe status         Say what is running

The server sends that player a rising amount of filler — doubling every few seconds — until one of two things happens: their connection gives up, or the rate reaches a level comfortably beyond anything the server would ever need to send them. Either way the result is written to the server log and returned to whoever asked for it, as a multiple of what that server’s real settings weigh. A player whose connection drops during the test is given their own result when they come back.

Testing somebody else asks them first. They see a dialog naming who asked, warning that it may disconnect them, and they may refuse — a refusal is reported back to the requester. Testing yourself asks nobody, because you asked.

Two things it declines to do rather than reporting a meaningless number. It will not test the player sitting at a listen host’s own keyboard, because nothing is sent over a connection there. And it stands down partway through if the test is costing the server frame time, reporting what it measured up to that point.

It needs the administrator role, because it can disconnect somebody on purpose. Only one test runs at a time on a server.

This verb comes from ATG Core, which owns the settings replication it measures, so it only appears on a server running both mods.

Who can run what

Every command declares how much authority it needs, and a higher role satisfies a lower requirement — an administrator can run everything without also being flagged as a Game Master.

  • Game Master — any server role at all. Used for commands that only read state, such as status.
  • Session administrator — used for commands that change what the whole server is doing.
  • Administrator — the highest level.

A player without the required role is told which role the command wants, rather than being ignored, because the usual cause is holding a role one rung below.

These roles describe the chat command only. An RCON caller holds no in-game role, so the roles above are not consulted at all and access is decided by the keyword instead — see below.

Over RCON

The commands are reachable from an RCON client as well as from chat, through two keywords:

KeywordReaches
#atgEvery command exposed over RCON
#atgmonitorOnly the commands that read state without changing it

Send the keyword that matches your server’s rcon permission. A keyword carries a permission level of its own, and that level has to match the listener rather than be outranked by it — admin is not a superset of monitor. So a server configured "permission": "admin" answers #atg and refuses #atgmonitor; one configured "permission": "monitor" answers #atgmonitor and refuses #atg. The refusal reads missing permission, which is the same answer a genuine permission failure gives, so a client sending the wrong keyword looks like one that is not allowed in.

A command is reachable over RCON only if it asked to be, and the default is not reachable — so installing this mod exposes nothing that was not written to be exposed. Of the built-in commands, status is reachable through either keyword, and reload and rplprobe through #atg alone, since both change what the server is doing. whoami and altitude both need a player at a keyboard, so neither is offered.

rplprobe over RCON has no connection of its own to test, so it has to be given a player name rather than run bare.

#atg on its own lists what is reachable through the keyword you used, so the list is accurate for the connection you are on rather than for the mod in general.

Arguments reach a command exactly as typed. Only the command word itself is case-insensitive, because names, identifiers and keys are not.

Typing #atg into in-game chat answers with a note to use /atg instead. The # namespace belongs to the engine’s own administrator commands and is not the chat one.

Extending it

Other ATG mods register their own commands and status lines automatically when loaded in the right order; nothing needs wiring up by hand. If you are building a mod of your own and want it to appear under /atg, get in touch — the registration interface is small, but it is not documented here.