Skip to content
NordBots.
Back to CommandDeck

CommandDeck configuration

The CommandDeck config.json controls how the plugin runs on your Ark Survival Ascended server. Every setting is listed below with what it does and its default value.

Open the configuration editorPrefer clicking to typing? Build the file with sliders and toggles.

Where it lives

Drop the file on your server at ArkApi/Plugins/CommandDeck/config.json then reload the plugin or restart the server. Keep a backup before large changes.

Every setting

Language

Which language file in lang/ I speak. "en" ships with me. Drop a de.json or fr.json next to it and put the code here.

LangAutoFill

When true I add any new lines I learn to your lang files without touching the wording you already changed. Your old file is kept as a .bak.

SenderName

The name I put on chat lines I send. Leave it empty and the game shows the plain (SERVER): prefix instead.

General

Debug
togglefalse
Turn this on and I explain myself in ArkApi.log: which permission answers I got, how I read a name, how long each command took, and every game symbol this build is missing. Off by default because the log should stay quiet.
EchoAnswersToLog
togglefalse
Some game panels do not show what RCON sends back. You type a command, it runs fine, and the panel prints nothing. If that is you, turn this on and I will also write every answer into ArkApi.log where you can read it. It changes nothing about how the commands work, it only puts a copy of the answer somewhere you can see. Off by default because a panel that shows replies does not need the log filling up as well.

Server

Who I am. I work this out on my own from the launch line, so most owners never touch this block.

Name
textempty
Force a name. Leave empty and I read the launch line instead.
NameFromParams
list["-ServerName=","-serverkey=","-clustermap=","?SessionName="]
The launch line pieces I look at, in order, to name myself.
UseSessionName
togglefalse
Fall back to the session name if the launch line gives me nothing.
Id
textempty
A short tag for this server. Empty and I make one from the name.

License

Key
textempty
Your NB- key from NordBots.cc. Without it I answer read commands only, so you can still look but not change anything.

Track

Whole groups of commands, on or off. Off means the command is not there at all, so nobody can run it by accident.

Deck
toggletrue
Player
toggletrue
Tribe
toggletrue
Dino
toggletrue
Build
toggletrue
Item
toggletrue
World
toggletrue
Server
toggletrue
Message
toggletrue
Script
togglefalse
Script.Run hands raw text to the game. It is the most dangerous thing I own, so it ships off. Turn it on only if you know why.

Gates

UsePermissions
toggletrue
Check the free Permissions plugin before letting anyone run a command in game. When Permissions is missing, in game commands are closed to everyone. That is on purpose.
ConsoleAlwaysAllowed
toggletrue
Let the server console change things. Reads always work either way, so turning this off makes the console look but not touch.
RconAlwaysAllowed
toggletrue
Same for RCON. On by default because whoever holds the RCON password already has full admin over the server. Turn it off if you hand that password to a monitoring tool that should only ever read.

Targeting

How I turn what you typed into one exact player or tribe. You can name someone by their survivor name, their platform name, their EOS id, their player id, "char:Dave", "name:Dave", "eos:...", "id:12345", "team:1934502", or #2 to pick off a list I just showed. @online, @all, @tribe:Wolves and @team:1934502 name a whole group.

MatchSurvivorName
toggletrue
Match the name over their head in game.
MatchPlatformName
toggletrue
Match their Steam, Xbox or PlayStation name.
MatchOldNames
toggletrue
Match names they used to go by.
AllowOffline
toggletrue
Let you name someone who is not logged in.
FuzzyTypos
toggletrue
Forgive small spelling mistakes. A near miss never runs a destructive command, it always asks you first.
MaxTypos
number2
How many letters can be wrong. 2 is comfortable. 0 turns it off.
MinTypoLength
number3
Do not forgive typos on names shorter than this, or "Dan" and "Dave" start looking like each other.
ShowChoices
number6
How many choices I show when more than one thing matches.
PickSeconds
number120
How long a numbered list stays good for, so #2 still means #2.

Safety

Guard rails on anything that changes the world.

RequireConfirm
toggletrue
Ask for a confirm code before a destroy goes ahead. Turn this off only for unattended scripts, and know that you turned it off.
ConfirmSeconds
number120
How long a confirm code lives.
DryRunAlways
togglefalse
Treat every command that would change something as --dry, so it counts and lists but never actually does it. A good way to try things out, or to leave a new admin on training wheels for a week.
MaxSetSize
number100
The most players or things one command may touch at once.
AllowScript
togglefalse
Deck.Script.Run sends a raw command straight to the game. I cannot check it, cannot undo it, and cannot tell you what it did. It is the most dangerous thing I own, so it ships off. Turn it on only if you know why you need it, and give the node to nobody you would not trust with the server console itself. Every use is logged and shouted to your alert channel with the full text.

Limits

ReplyBytes
number3400
The biggest reply I will send. Source RCON caps a packet at 4096 bytes, so 3400 leaves room. I page instead of cutting you off, and I always say how many rows I left out.
RowsPerPage
number20
Rows on a page. --limit on a command beats this.
ScanBudgetMicros
number3000
The most time in microseconds a command may hold the game thread in one go. Anything bigger gets spread over several ticks.
PerAdminPerMinute
number30
How many commands one admin may run in a minute. 0 means no cap.
MaxScanRows
number3000
How many creatures or structures I keep details for when I walk the map. The counts are always the whole map. This only caps the lists, so a list past this many says out loud that it is not everything.
CountGoodForSeconds
number120
How long a count of the world stays good before I go and look again. A bot polling every 30 seconds then costs me one walk every two minutes instead of one per question. Add --fresh to any command to force a walk.
MaxQueuedWrites
number5000
How many audit rows may pile up waiting for the database. Past this I write them to data/spool.jsonl instead and put them in when it comes back.

Audit

Enabled
toggletrue
Keep a row for every command anyone runs, with who and when.
KeepDays
number180
How many days of that to keep. 0 keeps it forever.
LogReads
togglefalse
Also record read only commands. Off by default because looking is not doing, but turn it on if you want a full transcript.

Database

Mode
text"sqlite"
"sqlite" needs no setup at all and writes to data/. "mysql" lets every map in a cluster share one name book.
TablePrefix
text"cd"
The front of my table names, like cd_audit and cd_people.
MySQL
group
Host
textempty
Port
number3306
User
textempty
Password
textempty
Database
textempty

Panel

The in game window from the free NordBots UI mod. Staff only. It never carries a destructive button, on purpose. A click in a game window is too easy to do by accident.

Enabled
toggletrue
RowsPerPage
number10
TopCount
number10
BuffTag
text"NordBotsUIBuff"
BuffPath
text"NordBotsUI/Buff_NordBotsUI"
SingletonPath
text"Blueprint'/NordBotsUI/NordBotsUI_Singleton.NordBotsUI_Singleton'"
RequireHandshake
togglefalse

ApiUtilsMod

On screen messages through the free ASA API Utils mod. If the mod is not installed I fall back to normal chat and nothing breaks.

Enabled
toggletrue
BackdropColor
list[0,0,0,0.55]
Red, green, blue and how solid, each from 0.0 to 1.0.
ScreenPosition
text"Center"
TextAlign
text"Center"
TextScale
number1
MessageSeconds
number6
AlsoShowInChat
toggletrue
Also send the words as a real chat line, so they stay in the log.

MapName

Pretty
toggletrue
Turn TheIsland_WP into The Island. Nobody should read a level file name.
Overrides
group
Your own name for a map, if mine is wrong. "TheIsland_WP": "Home"

The full commented config

This is a reading copy with notes. It is not valid JSON, so do not load it. Use the editor or the plain config.json instead.

// Command Deck, the whole config with a note on every line.
// This file is here to read. The plugin loads config.json, not this one.
// Copy a block across when you want to change something.
{
  // Which language file in lang/ I speak. "en" ships with me.
  // Drop a de.json or fr.json next to it and put the code here.
  "Language": "en",

  // When true I add any new lines I learn to your lang files without
  // touching the wording you already changed. Your old file is kept as a .bak.
  "LangAutoFill": true,

  // The name I put on chat lines I send. Leave it empty and the game
  // shows the plain (SERVER): prefix instead.
  "SenderName": "",

  "General": {
    // Turn this on and I explain myself in ArkApi.log: which permission
    // answers I got, how I read a name, how long each command took, and
    // every game symbol this build is missing. Off by default because the
    // log should stay quiet.
    "Debug": false,

    // Some game panels do not show what RCON sends back. You type a command,
    // it runs fine, and the panel prints nothing. If that is you, turn this
    // on and I will also write every answer into ArkApi.log where you can
    // read it. It changes nothing about how the commands work, it only puts
    // a copy of the answer somewhere you can see. Off by default because a
    // panel that shows replies does not need the log filling up as well.
    "EchoAnswersToLog": false
  },

  // Who I am. I work this out on my own from the launch line, so most
  // owners never touch this block.
  "Server": {
    // Force a name. Leave empty and I read the launch line instead.
    "Name": "",
    // The launch line pieces I look at, in order, to name myself.
    "NameFromParams": [
      "-ServerName=",
      "-serverkey=",
      "-clustermap=",
      "?SessionName="
    ],
    // Fall back to the session name if the launch line gives me nothing.
    "UseSessionName": false,
    // A short tag for this server. Empty and I make one from the name.
    "Id": ""
  },

  "License": {
    // Your NB- key from NordBots.cc. Without it I answer read commands
    // only, so you can still look but not change anything.
    "Key": ""
  },

  // Whole groups of commands, on or off. Off means the command is not
  // there at all, so nobody can run it by accident.
  "Track": {
    "Deck": true,
    "Player": true,
    "Tribe": true,
    "Dino": true,
    "Build": true,
    "Item": true,
    "World": true,
    "Server": true,
    "Message": true,
    // Script.Run hands raw text to the game. It is the most dangerous
    // thing I own, so it ships off. Turn it on only if you know why.
    "Script": false
  },

  "Gates": {
    // Check the free Permissions plugin before letting anyone run a
    // command in game. When Permissions is missing, in game commands are
    // closed to everyone. That is on purpose.
    "UsePermissions": true,
    // Let the server console change things. Reads always work either way,
    // so turning this off makes the console look but not touch.
    "ConsoleAlwaysAllowed": true,
    // Same for RCON. On by default because whoever holds the RCON password
    // already has full admin over the server. Turn it off if you hand that
    // password to a monitoring tool that should only ever read.
    "RconAlwaysAllowed": true
  },

  // How I turn what you typed into one exact player or tribe.
  // You can name someone by their survivor name, their platform name,
  // their EOS id, their player id, "char:Dave", "name:Dave", "eos:...",
  // "id:12345", "team:1934502", or #2 to pick off a list I just showed.
  // @online, @all, @tribe:Wolves and @team:1934502 name a whole group.
  "Targeting": {
    // Match the name over their head in game.
    "MatchSurvivorName": true,
    // Match their Steam, Xbox or PlayStation name.
    "MatchPlatformName": true,
    // Match names they used to go by.
    "MatchOldNames": true,
    // Let you name someone who is not logged in.
    "AllowOffline": true,
    // Forgive small spelling mistakes. A near miss never runs a
    // destructive command, it always asks you first.
    "FuzzyTypos": true,
    // How many letters can be wrong. 2 is comfortable. 0 turns it off.
    "MaxTypos": 2,
    // Do not forgive typos on names shorter than this, or "Dan" and
    // "Dave" start looking like each other.
    "MinTypoLength": 3,
    // How many choices I show when more than one thing matches.
    "ShowChoices": 6,
    // How long a numbered list stays good for, so #2 still means #2.
    "PickSeconds": 120
  },

  // Guard rails on anything that changes the world.
  "Safety": {
    // Ask for a confirm code before a destroy goes ahead. Turn this off
    // only for unattended scripts, and know that you turned it off.
    "RequireConfirm": true,
    // How long a confirm code lives.
    "ConfirmSeconds": 120,
    // Treat every command that would change something as --dry, so it counts
    // and lists but never actually does it. A good way to try things out, or
    // to leave a new admin on training wheels for a week.
    "DryRunAlways": false,
    // The most players or things one command may touch at once.
    "MaxSetSize": 100,

    // Deck.Script.Run sends a raw command straight to the game. I cannot check
    // it, cannot undo it, and cannot tell you what it did. It is the most
    // dangerous thing I own, so it ships off. Turn it on only if you know why
    // you need it, and give the node to nobody you would not trust with the
    // server console itself. Every use is logged and shouted to your alert
    // channel with the full text.
    "AllowScript": false
  },

  "Limits": {
    // The biggest reply I will send. Source RCON caps a packet at 4096
    // bytes, so 3400 leaves room. I page instead of cutting you off,
    // and I always say how many rows I left out.
    "ReplyBytes": 3400,
    // Rows on a page. --limit on a command beats this.
    "RowsPerPage": 20,
    // The most time in microseconds a command may hold the game thread
    // in one go. Anything bigger gets spread over several ticks.
    "ScanBudgetMicros": 3000,
    // How many commands one admin may run in a minute. 0 means no cap.
    "PerAdminPerMinute": 30,

    // How many creatures or structures I keep details for when I walk the map.
    // The counts are always the whole map. This only caps the lists, so a
    // list past this many says out loud that it is not everything.
    "MaxScanRows": 3000,

    // How long a count of the world stays good before I go and look again.
    // A bot polling every 30 seconds then costs me one walk every two minutes
    // instead of one per question. Add --fresh to any command to force a walk.
    "CountGoodForSeconds": 120,

    // How many audit rows may pile up waiting for the database. Past this I
    // write them to data/spool.jsonl instead and put them in when it comes back.
    "MaxQueuedWrites": 5000
  },

  "Audit": {
    // Keep a row for every command anyone runs, with who and when.
    "Enabled": true,
    // How many days of that to keep. 0 keeps it forever.
    "KeepDays": 180,
    // Also record read only commands. Off by default because looking is
    // not doing, but turn it on if you want a full transcript.
    "LogReads": false
  },

  "Database": {
    // "sqlite" needs no setup at all and writes to data/.
    // "mysql" lets every map in a cluster share one name book.
    "Mode": "sqlite",
    // The front of my table names, like cd_audit and cd_people.
    "TablePrefix": "cd",
    "MySQL": {
      "Host": "",
      "Port": 3306,
      "User": "",
      "Password": "",
      "Database": ""
    }
  },

  // The in game window from the free NordBots UI mod. Staff only.
  // It never carries a destructive button, on purpose. A click in a
  // game window is too easy to do by accident.
  "Panel": {
    "Enabled": true,
    "RowsPerPage": 10,
    "TopCount": 10,
    "BuffTag": "NordBotsUIBuff",
    "BuffPath": "NordBotsUI/Buff_NordBotsUI",
    "SingletonPath": "Blueprint'/NordBotsUI/NordBotsUI_Singleton.NordBotsUI_Singleton'",
    "RequireHandshake": false
  },

  // On screen messages through the free ASA API Utils mod. If the mod is
  // not installed I fall back to normal chat and nothing breaks.
  "ApiUtilsMod": {
    "Enabled": true,
    // Red, green, blue and how solid, each from 0.0 to 1.0.
    "BackdropColor": [ 0.0, 0.0, 0.0, 0.55 ],
    "ScreenPosition": "Center",
    "TextAlign": "Center",
    "TextScale": 1.0,
    "MessageSeconds": 6.0,
    // Also send the words as a real chat line, so they stay in the log.
    "AlsoShowInChat": true
  },

  "MapName": {
    // Turn TheIsland_WP into The Island. Nobody should read a level file name.
    "Pretty": true,
    // Your own name for a map, if mine is wrong. "TheIsland_WP": "Home"
    "Overrides": {}
  }
}