Difference between revisions of "Server Configuration/Body"

From Holdfast: Nations At War
Jump to navigation Jump to search
(Created page with "\= Server Configuration Files = \[\[File\:Hfconfig.png|thumb|right|Example Configuration File]] Server configuration files are plain text files containing settings defining th...")
(No difference)

Revision as of 09:24, 19 September 2025

\= Server Configuration Files = \[\[File\:Hfconfig.png|thumb|right|Example Configuration File]] Server configuration files are plain text files containing settings defining the server setup and the maps/game modes available in rotation. There are three types of line in a configuration file:

  • **Setting lines** — of the form \<setting> \<value>.
  • **Comment lines** — starting with a # character. Ignored by the server.
  • **Empty lines** — purely for spacing. Ignored by the server.

The usual layout: server-wide settings at the top, followed by one or more map rotations. Examples are included with the server download (see \[\[Server Hosting|Server Hosting]]).

\= Server-Wide Settings = These settings define how the server is visible to users, how it communicates with the server browser, and any restrictions on the server.

First up are the **port** settings. These are mandatory, and all must be unique per server instance on the same box.

server_port 20100
steam_communications_port 8700
steam_query_port 27000

Next are the settings defining how the server displays to players:

server_name New Server - Army Battlefield
server_welcome_message Welcome to my new game server!
server_region europe
server_admin_password ChangeThisPassword
#server_password ChangeThisPassword
server_intro_title Welcome to my server!
server_intro_body Greetings fellow humans

The optional server\_password can remain commented out. The server\_admin\_password is used for \[\[Remote Console Commands|Remote Console Commands]]. The intro title/body define the join popup. The server\_region values are:

| | - | ---------------- | | | | | | usaeast, usawest | | | | | | | | | | | | | | | | | | | | | | | | | | |

The **broadcast mode** determines network utilisation for close-range combat.

| | - | -------------------------------------------------------------------------------------------------------- | | Reduced packet rate on close-range (high player count). Default. | | | | Increased packet rate on close-range (low player count). | | | | In-between LowBandwidth and HighAccuracy. Playable on big servers with good hardware. | | | | Slightly less intensive than RealTime; recommended only for Melee; supports higher counts than RealTime. | | | | Even higher bandwidth than HighAccuracy; only for small-count Melee Arena. | | | | |
network_broadcast_mode LowBandwidth

Artillery respawn timers (seconds). Defaults are 120s (2 minutes):

artillery_fieldgun_respawn_timer 120
artillery_rocketlauncher_respawn_timer 120

Enable the anti-griefing mechanics for artillery pieces:

antigriefing_enabled false

Population thresholds for low/medium/high player count map buckets (defaults below):

population_low_min_players 30
population_medium_min_players 50
population_high_min_players 100

Toggle performance warnings:

show_serverperformance_warning true

Start on a random rotation entry:

map_rotation_start_randomise true

Capture requirements for Conquest/Frontlines (by pop bucket):

conquest_stealthcap_reqplayers_verylow 0
conquest_stealthcap_reqplayers_low 2
conquest_stealthcap_reqplayers_medium 3
conquest_stealthcap_reqplayers_high 4

\== Frontlines specific commands == Use this to set the game **type** to Frontlines (defaults to false). \[\[File\:Frontlines Config Example.png|thumb|Example Frontlines config]]

frontlines_mode true

\== Auto Shutdown/Restart System == An auto-shutdown and auto-restart system can be configured either in the config file or using the \[[1](https://docs.google.com/document/d/1eljq4DgrJ1sD44rWTKnGzYgckh7EBs5AlfKABzGwclM) VapuriLoadTester] launcher.

\=== Auto Shutdown === The game server can shut itself down after a specified number of minutes. This also closes the VLT helper program upon shutdown.

Define the time after which the server will shut down (minutes):

server_autoshutdown_interval_minutes 240

Shutdown does **not** wait for round end once interval + overtime elapses. Ensure players are warned via broadcasts:

server_autoshutdown_overtime_minutes 10
server_autoshutdown_broadcasted_message Server will be shutting down.
server_autoshutdown_broadcasted_message_interval_minutes 2

\=== Auto Restart === The server can restart itself every X minutes. This **does** wait for the round to complete unless overtime is exceeded.

server_autorestart_interval_minutes 320
server_autorestart_overtime_minutes 10
server_autorestart_broadcasted_message Auto restart at the end of the round.
server_autorestart_broadcasted_message_interval_minutes 2

\= Map Rotations = Studying the example config files bundled with the server is the best way to understand rotations. Additionally, Big Mamba has compiled a list of AGS-made configuration files: \[[2](https://github.com/ankit2951/holdfast-config) here].

\== Basic Map Settings == In Progress

map_name
game_mode
game_type
round_time_minutes
ships_respawn_timer
allow_midround_spawning
allow_faction_switching
allow_spectating
max_player_respawns
deathmatch_max_kills
reinforcements_per_faction
minimum_players
maximum_players
melee_weapons_only
faction_balancing
faction_balancing_discrepancy_amount
max_accumulated_faction_points
ships_preset
faction_attacking
faction_defending
max_tickets
ships_spawn
rowboat_cooldown_timer
rowboat_cooldown_while_sinking_timer
ships_spacemode
sappers_buildlimit
sappers_attacking_starting_materials
sappers_defending_starting_materials
max_player_respawn
officers_spawn_mounted

Spawn wave timers (defaults shown). vehicle applies to Cavalry; dynamic for Frontlines tables:

wave_spawn_time_seconds 10
wave_spawn_vehicle_time_seconds 20
wave_spawn_dynamic_time_seconds 15

Spawn immunity (max 5s):

spawn_immunity_timer 5

\=== Melee Arena Settings === First-round spawn window (allow time for initial load):

round_spawn_close_timer_seconds 45

Between-round spawn window (shorter for flow):

round_spawn_close_timer_seconds_between_rounds 15

Rounds to win:

amount_of_rounds 50

\=== Maps === Visit \[\[Maps|Maps]] or \[\[Server Configuration Enums|Server Configuration Enums]] for a full list of Holdfast maps.

\== Officer Orders == Enable/disable the officers order system.

class_system_orders <true/false>

Enable/disable the officers reinforcement system (flag in NaW; table in Frontlines).

class_system_orders_reinforce <true/false>

Reinforcement cooldown (seconds):

class_system_orders_reinforce_cooldown 240

Reinforcement spawn count per flag (set to -1 for Frontlines):

class_system_orders_reinforce_limit 25

Cooldowns (seconds) for leading abilities:

class_system_orders_reinforce_cooldown
class_system_orders_charge_cooldown
class_system_orders_formline_cooldown
class_system_orders_breakrankandfollow_cooldown
class_system_orders_fireatwill_cooldown
class_system_orders_makeready_cooldown
class_system_orders_fireorder_cooldown
class_system_orders_ceasefire_cooldown
class_system_orders_sergeantformline_cooldown
class_system_orders_sergeantrally_cooldown
class_system_orders_sergeantfireatwill_cooldown
class_system_orders_sergeantfireorder_cooldown
class_system_orders_sergeantceasefire_cooldown
class_system_orders_sergeantmakeready_cooldown
class_system_orders_sergeantbreakrankandfollow_cooldown

\== Conquest config == These options also affect Frontlines "Offensive".

conquest_tick_reward 3
conquest_ticker_time_seconds 1
conquest_tickets_per_capture 100
conquest_max_tickets 7500
conquest_territory_lock_time_seconds 0

\== Weather and time of day == Set the weather/time preset active on map load. none = random pool of valid presets for map type.

nature_preset none

\== Friendly fire == Enable friendly fire?

friendly_fire <true/false>

Melee bounce when FF disabled (true = weapon collides with friendlies):

friendly_fire_melee_bounce <true/false>

Reflect a percentage of FF damage back to attacker:

damage_split 50

\== Frontlines == Time (seconds) to domination loss in Offensive mode:

frontline_offensive_domination_duration_seconds 120

Capture point overrides:

capture_point_override <objective> <num_respawns> <time_for_1_person_to_capture> <max_people_affecting_time>
# Examples
capture_point_override A 150 30 1
capture_point_override B 175 30 1
capture_point_override C 350 60 2
capture_point_override D -1 90 3

\= Automatic Console Commands = You can issue any \[\[Remote Console Commands|RC commands]] at the start of a rotation to reset defaults, spawn bots, or set up scenarios.

\= Override Commands = Server administrators can customise roleplay scenarios via server-side overrides: class limits, spawnable classes, weapon/equipment selection, props/artillery per rotation, etc.

Land — Class Limit Override On Spawn Points

Spawn override commands define which classes appear on which spawn locations and their limits. (Note: replaces existing classes on that spawn.)

\[\[File:200 Carpenters vs 200 Rifleman.png|thumb|right|Tahir Desert Army Battlefield — 200 Carpenters vs 200 Riflemen]]

# Example — 1 team 200 Carpenter, the other 200 Rifleman
spawn_override A Carpenter 200
spawn_override B Rifleman 200

Exclusive modded uniforms Limit spawns to modded uniforms only:

exclusive_modded_uniforms british french

Place after !map\_rotation start and before !map\_rotation end.

Starting Weapon Override

Define starting weapons per faction/class (multiple per slot allowed via commas). Place within a rotation.

# Examples
starting_weapons_selection_override British Grenadier 4 2 Rifle
starting_weapons_selection_override French  Grenadier 4 3 Rifle Pike,Spontoon,Sword Pistol

Starting Weapon Bayonet Override

starting_weapons_bayonet_enabled <Faction> <Class> <true/false>
Firearm Ammo Override

Per firearm, per class:

# Examples
firearm_ammo_override British LightInfantry Musket_NewLandPatternBrownBess 2 0
firearm_ammo_override French  LightInfantry Musket_NewLandPatternBrownBess 0 1

Weapon Class Ammo Override Apply the same values to an entire weapon class:

weapon_class_ammo_override <Faction> <Class> <WeaponClass> <Starting> <Loaded> <MaxCarry>
Sapper Buildable Defences — Limits & Materials

Disable/limit emplacements or set starting materials:

# Disable explosives for defenders
sappers_buildlimit ExplosiveBarrel defending 0
# Starting materials
sappers_attacking_starting_materials 50
sappers_defending_starting_materials 200
Spawn Overrides (Land)

Add or replace spawn points depending on the game type. Use get playerPosition and get playerRotation in the console to capture coordinates.

objects_override spawnsection <PosXYZ> <RotXYZ> <ID>,<Spawn_Name>,<Category>,<Side>,<SizeX>,<SizeY>
Naval — Class Limits, Spawns, Health, Spacemode, Ship Spawns

Allow army classes on ships, define ship spawns, adjust health, enable flight, and set custom ship spawn locations.

# Class limits per ship type
ships_spawn_detail_override Frigate50gun British Rifleman 200
ships_spawn_detail_override Frigate50gun French  Rifleman 200

# Spawning & presets (use ships_preset 37 before custom spawns)
ships_preset 37
ships_spawn Frigate50gun 1 British 0
ships_spawn Rocketboat  10 French  4

# Health overrides
ships_health_detail_override Frigate50gun British 20000
ships_health_detail_override Frigate50gun French  70

# Flight mode (fun)
ships_spacemode true

# Spawn overrides (ocean maps)
objects_override shipspawnsection <PosXYZ> <RotXYZ>

\= Map Voting = \== Basics == Enable and configure map voting in the global section (not inside rotations):

map_voting_enabled true
map_voting_duration 15
map_voting_allow_same_map false
map_voting_history_count 3
map_voting_gameplay_modes ArmyBattlefield ArmyBattlefield ArmyConquest ArmySiege
map_voting_log_file_path logs_output/mapvotinglogs.txt

\==== Parameter notes ====

  • map\_voting\_duration — seconds the vote remains open.
  • map\_voting\_allow\_same\_map — can the same map appear again (e.g., RandomWaters with different configs).
  • map\_voting\_history\_count — how long since a map was played before it’s eligible again.
  • map\_voting\_gameplay\_modes — which modes are eligible (repeats allowed to weight).
  • map\_voting\_log\_file\_path — optional logging target.

\== Help — my map can’t be voted == Maps are bucketed by player count and mode. To hide a map from voting set all buckets to false. To enable broadly, set all to true (or leave commented).

population_verylow_playable  <true/false>
population_low_playable      <true/false>
population_medium_playable   <true/false>
population_high_playable     <true/false>

Note: For modded maps, load order matters — put the map first in the mod load order.

\== Map vote history by server population ==

map_voting_history_count_verylow 1
map_voting_history_count_low     2
map_voting_history_count_medium  4
map_voting_history_count_high   10

\== Can I manually trigger map voting? == Not directly, but you can end the round via a win condition object or the dynamic win condition flag to force a vote.

\== Include a random map choice ==

map_voting_include_random_choice <true/false>

\= Workshop Mods = For creators, see \[\[Script Modding Guide]] for deeper details.

\== Install mods == Global (not inside a rotation):

mods_installed_server_only <steamid>
mods_installed <steamid>

Per rotation (mod must be installed on server):

load_mod <steam_id>            # client + server
load_mod_client_only <steamid> # client only
load_mod_server_only <steamid> # server only

\== Mod Variables == Some workshop mods expose config variables:

mod_variable <string>        # global (all rotations)
mod_variable_local <string>  # local to the current rotation

\= Discord Admin Webhook Logger = \== Basics == Enable Discord developer mode (Settings → Advanced). Warnings show admin PMs/slays/kicks/revives/slaps. Banmutes show config-writing actions (kicks, VOIP/chat mutes, spammer, etc.).

discord_webhook_warning_tag_admin <@!ID> | <@!ID>
discord_webhook_warning_id    <webhookID>
discord_webhook_warning_token <webhookToken>

discord_webhook_banmute_tag_admin <@!ID> | <@!ID>
discord_webhook_banmute_id       <webhookID>
discord_webhook_banmute_token    <webhookToken>

\== How to set up == Place these in the **global** section of the server config (not inside a rotation).

Create two webhooks in your Discord channel and click **Copy Webhook URL** for each. Open each URL in a browser and copy the values of id and token into the corresponding config keys above. To tag users at the top of messages, right-click their name, **Copy ID**, and use the format <@!1234567890>.

If configured correctly, admin actions will log the following to the target channel:

  • Action performed
  • Title from \_tag\_admin
  • Admin (with Steam profile link)
  • Target user (with Steam profile link)
  • Server name
  • Reason
  • Date/time