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.
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": {}
}
}