From 2bace91b7d2eb16815fb1a187d26b0aa98130704 Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Mon, 20 Jul 2026 22:08:06 +0200 Subject: [PATCH] feat: add verified quick-actions across modules; first set for dayz MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds 33 console quick-actions across 9 modules, each command verified against official game/server docs: ark(4), cs2(6), dont-starve-together(2), factorio(4), minecraft-java(4), project-zomboid(6), rust(1), terraria(2), and dayz(4) as a first BattlEye-RCON set (broadcast via 'say -1', kick by BE player number, lock/unlock). palworld/satisfactory/v-rising intentionally get none — their agent RCON clients accept only fixed verb sets, not free-text commands. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- ark-survival-ascended/template.yaml | 47 +++++++++++++++++++++ cs2/template.yaml | 37 +++++++++++++++++ dayz/template.yaml | 46 +++++++++++++++++++-- dont-starve-together/template.yaml | 23 +++++++++++ factorio/template.yaml | 53 ++++++++++++++++++++++++ minecraft-java/template.yaml | 63 +++++++++++++++++++++++++++++ project-zomboid/template.yaml | 49 ++++++++++++++++++++++ rust/template.yaml | 19 +++++++++ terraria/template.yaml | 26 ++++++++++++ 9 files changed, 359 insertions(+), 4 deletions(-) diff --git a/ark-survival-ascended/template.yaml b/ark-survival-ascended/template.yaml index 3061c82..f1b010a 100644 --- a/ark-survival-ascended/template.yaml +++ b/ark-survival-ascended/template.yaml @@ -177,6 +177,53 @@ spec: danger: true confirm: true command: "DestroyWildDinos" + - id: set-motd + displayName: Set message of the day + description: Message shown to players when they connect. + icon: message-square + group: Server + command: "SetMessageOfTheDay {{.Params.message}}" + params: + - name: message + displayName: Message + type: string + required: true + - id: set-game-speed + displayName: Set game speed + description: Time-passage multiplier — 1 is normal, 2 is double, 0.5 is half. + icon: gauge + group: World + command: "Slomo {{.Params.factor}}" + params: + - name: factor + displayName: Speed multiplier + type: string + default: "1" + required: true + - id: kick-player + displayName: Kick player + description: Disconnect a player by EOS ID (see ListPlayers). Not a ban. + icon: user-minus + group: Players + command: "KickPlayer {{.Params.eosid}}" + params: + - name: eosid + displayName: EOS ID + type: string + required: true + - id: ban-player + displayName: Ban player + description: Ban a player by EOS ID. Persistent until unbanned. + icon: ban + group: Players + danger: true + confirm: true + command: "BanPlayer {{.Params.eosid}}" + params: + - name: eosid + displayName: EOS ID + type: string + required: true mods: # ASA has no mods directory and no mods env — its only hook is a # -mods=,... flag on the launch string, which also diff --git a/cs2/template.yaml b/cs2/template.yaml index 3cc1181..91f31dc 100644 --- a/cs2/template.yaml +++ b/cs2/template.yaml @@ -142,6 +142,43 @@ spec: icon: clock group: World command: "mp_warmup_start" + - id: pause-match + displayName: Pause match + description: Pauses at the end of the current round. + icon: pause + group: World + command: "mp_pause_match" + - id: unpause-match + displayName: Unpause match + description: Resumes a paused match (or cancels a queued pause). + icon: play + group: World + command: "mp_unpause_match" + - id: end-warmup + displayName: End warmup + icon: flag + group: World + command: "mp_warmup_end" + - id: swap-teams + displayName: Swap teams + description: Switches CT and T sides and restarts the game (scores reset). + icon: repeat + group: World + danger: true + confirm: true + command: "mp_swapteams" + - id: add-bot + displayName: Add bot + description: Adds one bot to a team with an open slot. + icon: bot + group: Players + command: "bot_add" + - id: kick-bots + displayName: Kick bots + description: Removes bots from the server. + icon: user-minus + group: Players + command: "bot_kick" # No version/loader axis for CS2, so mods use the legacy single-path # form. Metamod stays at game/csgo/addons; CounterStrikeSharp nests one # level deeper (game/csgo/addons/counterstrikesharp/plugins) but is diff --git a/dayz/template.yaml b/dayz/template.yaml index d3b8684..0bf48a1 100644 --- a/dayz/template.yaml +++ b/dayz/template.yaml @@ -111,10 +111,48 @@ spec: # BattlEye moderation is by player number, not name — the dashboard # passes what the list returned, so kick/ban are left unset rather # than shipping commands that would silently target the wrong player. - # No capabilities.actions either: BattlEye RCon's command set is too - # restricted, and a broadcast command ("say -1 ") could not be - # verified for DayZ specifically (BE's "say" semantics vary by game). - # No actions rather than shipping buttons that may error. + # BattlEye RCon does support a small set of verified admin commands + # beyond the players list: a global broadcast ("say -1 ", no "#" + # prefix) and a few "#"-prefixed server commands. kick-player below + # asks for the BattlEye player number explicitly (read from the + # players list above) rather than a name — the standard BE admin + # workflow, and different from the auto-name-passing this module + # declines for players.kick/ban above. + actions: + - id: broadcast + displayName: Broadcast message + description: Send a global message to all players. + icon: megaphone + group: Server + command: "say -1 {{.Params.message}}" + params: + - name: message + displayName: Message + type: string + required: true + - id: kick-player + displayName: Kick player + description: Kick a player by their BattlEye player number (from the players list). + icon: user-minus + group: Players + command: "#kick {{.Params.number}}" + params: + - name: number + displayName: Player number + type: int + required: true + - id: lock-server + displayName: Lock server + description: Stop new players from connecting (existing players stay). + icon: lock + group: Server + command: "#lock" + - id: unlock-server + displayName: Unlock server + description: Allow new connections again. + icon: lock-open + group: Server + command: "#unlock" # No console/probes block: the game's only ports are UDP (no TCP surface # to probe), and there is no HTTP endpoint either. Kubernetes falls back diff --git a/dont-starve-together/template.yaml b/dont-starve-together/template.yaml index 09dd421..9b03da6 100644 --- a/dont-starve-together/template.yaml +++ b/dont-starve-together/template.yaml @@ -86,6 +86,29 @@ spec: type: int default: "1" required: true + - id: set-season + displayName: Set season + description: Change the current season. + icon: leaf + group: World + transport: stdin + command: 'TheWorld:PushEvent("ms_setseason", "{{.Params.season}}")' + params: + - name: season + displayName: Season + type: enum + enum: ["autumn", "winter", "spring", "summer"] + default: autumn + required: true + - id: regenerate-world + displayName: Regenerate world + description: Deletes the current world and generates a brand-new one. All progress is lost. + icon: refresh-cw + group: World + danger: true + confirm: true + transport: stdin + command: "c_regenerateworld()" configSchema: - name: DST_CLUSTER_TOKEN displayName: Cluster Token diff --git a/factorio/template.yaml b/factorio/template.yaml index 3fe0f49..efa6f34 100644 --- a/factorio/template.yaml +++ b/factorio/template.yaml @@ -121,6 +121,59 @@ spec: icon: save group: World command: "/save" + - id: kick-player + displayName: Kick player + description: Disconnect a player. They can reconnect. + icon: user-minus + group: Players + command: "/kick {{.Params.player}} {{.Params.reason}}" + params: + - name: player + displayName: Player name + type: string + required: true + - name: reason + displayName: Reason (optional) + type: string + required: false + - id: ban-player + displayName: Ban player + description: Ban a player; the reason is shown when they try to reconnect. + icon: ban + group: Players + danger: true + confirm: true + command: "/ban {{.Params.player}} {{.Params.reason}}" + params: + - name: player + displayName: Player name + type: string + required: true + - name: reason + displayName: Reason (optional) + type: string + required: false + - id: unban-player + displayName: Unban player + icon: user-plus + group: Players + command: "/unban {{.Params.player}}" + params: + - name: player + displayName: Player name + type: string + required: true + - id: mute-player + displayName: Mute player + description: Prevents a player from sending chat messages. + icon: mic-off + group: Players + command: "/mute {{.Params.player}}" + params: + - name: player + displayName: Player name + type: string + required: true # Factorio loads .zip mods straight from the mods dir (no extraction). # The in-app browser searches the official mod portal; downloads need # the player's own factorio.com credentials, so the panel hands off to diff --git a/minecraft-java/template.yaml b/minecraft-java/template.yaml index 7a1879c..3537f0b 100644 --- a/minecraft-java/template.yaml +++ b/minecraft-java/template.yaml @@ -407,6 +407,69 @@ spec: type: string default: "Server restarting shortly — please log out safely." required: true + - id: give-item + displayName: Give item + description: Grant an item to a player. + icon: gift + group: Players + command: "give {{.Params.player}} {{.Params.item}} {{.Params.count}}" + params: + - name: player + displayName: Player name + type: string + required: true + - name: item + displayName: Item ID (e.g. diamond, golden_apple) + type: string + required: true + - name: count + displayName: Quantity + type: int + default: "1" + required: true + - id: set-gamemode + displayName: Set player game mode + description: Change one player's game mode. + icon: gamepad-2 + group: Players + command: "gamemode {{.Params.mode}} {{.Params.player}}" + params: + - name: mode + displayName: Game mode + type: enum + enum: ["survival", "creative", "adventure", "spectator"] + default: survival + required: true + - name: player + displayName: Player name + type: string + required: true + - id: toggle-daylight-cycle + displayName: Toggle daylight cycle + description: Freeze or resume the day/night cycle. + icon: sun + group: World + command: "gamerule doDaylightCycle {{.Params.value}}" + params: + - name: value + displayName: Daylight cycle + type: enum + enum: ["true", "false"] + default: "true" + required: true + - id: toggle-keep-inventory + displayName: Toggle keep inventory + description: Whether players keep their items on death. + icon: backpack + group: World + command: "gamerule keepInventory {{.Params.value}}" + params: + - name: value + displayName: Keep inventory + type: enum + enum: ["true", "false"] + default: "false" + required: true status: metrics: - id: seed diff --git a/project-zomboid/template.yaml b/project-zomboid/template.yaml index e33b5cc..d56d1c0 100644 --- a/project-zomboid/template.yaml +++ b/project-zomboid/template.yaml @@ -166,6 +166,55 @@ spec: icon: siren group: World command: "alarm" + - id: kick-player + displayName: Kick player + description: Disconnect a player from the server. + icon: user-minus + group: Players + command: 'kickuser "{{.Params.player}}"' + params: + - name: player + displayName: Username + type: string + required: true + - id: ban-player + displayName: Ban player + description: Disconnect and ban a player. + icon: ban + group: Players + danger: true + confirm: true + command: 'banuser "{{.Params.player}}"' + params: + - name: player + displayName: Username + type: string + required: true + - id: unban-player + displayName: Unban player + icon: user-plus + group: Players + command: 'unbanuser "{{.Params.player}}"' + params: + - name: player + displayName: Username + type: string + required: true + - id: start-rain + displayName: Start rain + icon: cloud-rain + group: World + command: "startrain" + - id: stop-rain + displayName: Stop rain + icon: sun + group: World + command: "stoprain" + - id: start-storm + displayName: Start storm + icon: cloud-lightning + group: World + command: "startstorm" probes: # Game/direct ports are UDP; RCON is the only TCP port, so it's the diff --git a/rust/template.yaml b/rust/template.yaml index e95bcf4..9dfafc7 100644 --- a/rust/template.yaml +++ b/rust/template.yaml @@ -112,6 +112,25 @@ spec: type: int default: "12" required: true + - id: announce-restart + displayName: Announce restart + description: Warns players in chat with a countdown, saves, then restarts the server. + icon: rotate-ccw + group: Server + danger: true + confirm: true + command: 'restart {{.Params.seconds}} "{{.Params.message}}"' + params: + - name: seconds + displayName: Countdown (seconds) + type: int + default: "300" + required: true + - name: message + displayName: Message + type: string + default: "Server restarting" + required: true mods: loaders: oxide: diff --git a/terraria/template.yaml b/terraria/template.yaml index 71726f7..2ad97a8 100644 --- a/terraria/template.yaml +++ b/terraria/template.yaml @@ -154,6 +154,32 @@ spec: displayName: Message type: string required: true + - id: kick-player + displayName: Kick player + description: Disconnect a player from the server. + icon: user-minus + group: Players + transport: stdin + command: "kick {{.Params.player}}" + params: + - name: player + displayName: Player name + type: string + required: true + - id: ban-player + displayName: Ban player + description: Disconnect and ban a player. + icon: ban + group: Players + danger: true + confirm: true + transport: stdin + command: "ban {{.Params.player}}" + params: + - name: player + displayName: Player name + type: string + required: true # tModLoader modpacks live under /ModPacks; the active modpack is # picked with the MODPACK config field. Vanilla has no loaders entry, so # vanilla servers show no Mods tab.