Community Server Tool
Run melee drills, arena fights, and bot lines from remote console commands.
Melee Drill System (MDS) is a utility mod by RyanLT for Holdfast: Nations At War servers. It adds commands and config variables for controlled melee arenas, X-v-X drills, group fights, open melee practice, and repeatable bot spawning.
Command PrefixAll runtime commands use the rc prefix and require admin login.
Arena RequiredMost drills use a rectangular arena defined by two corner points.
Config SupportUse mod_variable or mod_variable_local to configure MDS in rotations.

Overview

MDS tracks round and player state to run custom melee drills and utility commands. Server admins can use live rc commands during a session or add modded config variables to server rotation files for repeatable setups.

Commands are case-insensitive. Arguments in angle brackets are required, while arguments in square brackets are optional.
Command Quick Reference
rc set ArenaCorner1
rc set ArenaCorner2
rc 3v3
rc groupfight
rc openmelee 2 7
rc bot spawn 5 French ArmyLineInfantry
rc summonLine 10 French ArmyLineInfantry
rc spawnLine -20 30 90 10 French ArmyLineInfantry
rc get xvxDistance
rc set lineBotCount 10

Quick Start

Set up an arena first, then run one of the drill commands.

1. Set Arena Corners
rc set ArenaCorner1
rc set ArenaCorner2
Use your current position, or pass coordinates with rc set ArenaCorner1 [x,z] and rc set ArenaCorner2 [x,z].
2. Run A Drill
rc 3v3
rc groupfight
rc openmelee 2 7
Start a structured X-v-X, a group fight, or random open melee spawns inside the arena.
3. Spawn Bots
rc bot spawn 5 French ArmyLineInfantry
rc summonLine 5
Add drill targets, lines, or replacement bots using the bot commands.

Commands

Command Usage Description
xvx rc xvx <attacking:int> <defending:int> [strategy] [distance:float] [spacing:float] [orientation] Spawns an X-v-X match inside the arena. Shorthand commands such as rc 3v3 and rc 20v1 are supported. Defaults use xvxStrategy, xvxDistance, and xvxSpacing.
groupfight rc groupfight [strategy] [distance:float] [spacing:float] [orientation] Spawns both teams in lines for a group fight inside the arena. Defaults use groupfightStrategy, groupfightDistance, and groupfightSpacing.
openmelee rc openmelee [spacing:float] [offset:float] Spawns players randomly around the arena for open melee practice. Defaults use openMeleeSpacing and openMeleeOffset.
bot rc bot <subcommand> [args] Central command for spawning, summoning, listing, configuring, and removing bots.
summonLine rc summonLine [count] [faction] [class] [ai] [death] [name [regtag [uniformId]]] Spawns a shoulder-to-shoulder line of bots centered on your position and facing your direction. Defaults can use the caller's faction and class.
spawnLine rc spawnLine <x> <z> <rotation> [count] [faction] [class] [ai] [death] [name [regtag [uniformId]]] Spawns a bot line at a specific world position and rotation. Faction can be a faction name or attacking/defending.
get rc get <Configurable> [additional arguments] Reads MDS configurables and mod data at runtime. Additional shortcuts include Player <playerId>, Players <faction>, and Round.
set rc set <Configurable> <Value> [additional arguments] Sets MDS configurables at runtime, such as xvxDistance, lineBotCount, and lineSpacing.
Examples
rc xvx 3 3 next 4 1 northsouth
rc groupfight random 25 2 180
rc openmelee 2 7
rc spawnLine -20 30 90 10 French ArmyLineInfantry
rc get Players all
rc set xvxDistance 5

Bot Subcommands

All bot subcommands are accessed through rc bot <subcommand> [args].

Subcommand Usage Description
spawn rc bot spawn [count] [faction class] [ai] [death] [name [regtag [uniformId]]] Spawns one or more specific bots at random server spawn points. Faction and class default to the caller if omitted.
spawnRandom rc bot spawnRandom [count] Spawns one or more bots with fully random faction and class.
summon rc bot summon [faction] [class] [ai] [death] [name [regtag [uniformId]]] Spawns a single bot at your position and facing your direction.
setBotAi rc bot setBotAi <target> <ai> Sets AI behavior for tracked bots. Targets include all, attacking, defending, a faction name, or a player ID.
setBotDeathPolicy rc bot setBotDeathPolicy <target> <policy> Sets bot death handling. Policies are None, Kick, and Replace.
remove rc bot remove <target> Kicks tracked bots immediately. Targets include all, attacking, defending, a faction name, or a player ID.
list rc bot list Prints tracked bots to private messages, including player ID, faction, class, AI type, death policy, and spawn status.
Bot Examples
rc bot spawn
rc bot spawn 5
rc bot spawn Attacking ArmyLineInfantry
rc bot spawn 3 French ArmyLineInfantry None Replace
rc bot summon French ArmyLineInfantry
rc bot setBotDeathPolicy all Kick
rc bot remove all
rc bot list

Configurables

Defaults in Ryan's README are tuned for Palisade Arena A1.

Configurable Arguments Default Purpose
ArenaCorner1 x z floats, or none Not set First corner of the arena play area. If no coordinates are passed, the command uses the admin's position.
ArenaCorner2 x z floats, or none Not set Second corner of the arena play area. If no coordinates are passed, the command uses the admin's position.
xvxDistance Distance float 20 Distance between attacking and defending faction lines for xvx.
xvxSpacing Distance float 2 Space between each player on a line for xvx.
xvxStrategy Random, Next, Any, or Repeat Random Player selection strategy for xvx.
groupfightDistance Distance float 25 Distance between attacking and defending faction lines for groupfight.
groupfightSpacing Distance float 2 Space between each player on a line for groupfight.
groupfightStrategy Random or Repeat Random Player selection strategy for groupfight.
openMeleeSpacing Distance float 1.5 Minimum distance players can spawn from each other during openmelee.
openMeleeOffset Distance float 7 Minimum spawn distance from arena edges during openmelee.
Orientation Degree integer, or NorthSouth, EastWest, SouthNorth, WestEast, Random 90 Direction two lines spawn facing each other.
botDefaultAi None None Default AI behavior assigned to bots when not specified inline.
botDefaultDeathPolicy None, Kick, or Replace Kick Default death policy assigned to bots when not specified inline.
botKickDelay Seconds float 2 Delay after bot death before kicking, allowing the kill to register.
botReplaceDelay Seconds float 0.5 Delay after kicking a bot before re-spawning it.
lineBotCount Count integer greater than 0 10 Default number of bots used by summonLine and spawnLine.
lineSpacing Meters float greater than 0 0.55 Lateral spacing between bots in a line.

Mod Config Variables

Use global mod_variable or per-map mod_variable_local entries to configure MDS through rotation configs.

mod_variable MDS:<ConfigVariable>:<Argument(s)>
mod_variable_local MDS:<ConfigVariable>:<Argument(s)>
Area Variable Accepted Arguments
General EnableDebugLogging
EnableAdminOnly
true or false
Arena SetArena
AddArena
SetArenaCorner1
SetArenaCorner2
(x,z),(x,z) for arena pairs, or x,z for individual corners.
Drill SetXvXDistance
SetXvXSpacing
SetXvXStrategy
SetGroupfightDistance
SetGroupfightSpacing
SetGroupfightStrategy
SetOpenMeleeSpacing
SetOpenMeleeOffset
SetOrientation
Distance floats, strategy options, or orientation values depending on the setting.
Bot SetBotDefaultAi
SetBotDefaultDeathPolicy
SetBotKickDelay
SetBotReplaceDelay
None, death policies, or delay values in seconds.
Line SetLineBotCount
SetLineSpacing
SpawnLine
Count, spacing, or x,z,rotation[,count][,faction][,class][,ai][,death][,name[,regtag[,uniformId]]].
MDS:SpawnLine can be specified multiple times to schedule multiple bot lines when a round begins. attacking and defending resolve against the live round, so the same config can work across maps.
SpawnLine Examples
mod_variable_local MDS:SpawnLine:-20,30,90
mod_variable_local MDS:SpawnLine:-20,30,90,French
mod_variable_local MDS:SpawnLine:20,30,270,10,defending,ArmyLineInfantry,None,Replace,Bot,None,1

Example Config

# Global
mod_variable MDS:EnableDebugLogging:true
mod_variable MDS:EnableAdminOnly:true

# Map Rotation (per-map overrides)
mod_variable_local MDS:SetArena:(-40.99,42.69),(-3.35,5.38)
mod_variable_local MDS:SetXvXDistance:20
mod_variable_local MDS:SetXvXSpacing:2
mod_variable_local MDS:SetXvXStrategy:Random
mod_variable_local MDS:SetGroupfightDistance:25
mod_variable_local MDS:SetGroupfightSpacing:2
mod_variable_local MDS:SetGroupfightStrategy:Random
mod_variable_local MDS:SetOpenMeleeSpacing:1.5
mod_variable_local MDS:SetOpenMeleeOffset:7
mod_variable_local MDS:SetOrientation:NorthSouth

# Bots
mod_variable_local MDS:SetBotDefaultDeathPolicy:Replace
mod_variable_local MDS:SetBotKickDelay:2
mod_variable_local MDS:SetBotReplaceDelay:0.5
mod_variable_local MDS:SpawnLine:-20,30,90,10,attacking,ArmyLineInfantry
mod_variable_local MDS:SpawnLine:20,30,270,10,defending,ArmyLineInfantry,None,Replace,Bot,None,1

Support

For feedback, bug reports, and the latest upstream documentation, see Ryan's Drill Scripts on GitHub.

Future features listed in the source README include automatic repeating drills, modded UI, multi-arena support, and expanded bot AI such as autostab, autoblock, and 1v1 bot behavior.