STWExperience
A persistent, server-side experience and rank system that rewards time in the field and meaningful combat—while making friendly fire and civilian casualties hurt where it counts.
STWExperience is an STW mod for Arma Reforger, the military sandbox by Bohemia Interactive. This guide is for players and server administrators.
What it does
STWExperience keeps an XP profile for each player identity on the server. Players earn XP for connected time and configured combat events, receive in-game notices, and progress through ranks chosen by the server owner.
Persistent profiles
XP, connected time and profile information are saved per player and scenario, then restored when that player returns.
Time rewards
Connected players earn XP at the rate selected by the server, paid out on a regular tick.
Combat rewards
Enemy soldier and selected vehicle kills can award XP; friendly and civilian losses can apply penalties.
Configurable ranks
Rank names and XP thresholds live in the server configuration, so progression fits the community rather than the other way around.
All-time leaderboard
The F7 summary can show the server's top XP players and each player's own placement, with privacy controls for player names.
For players
Press F7 to open the STW Experience Summary Dialog. F7 is the default keybind; it shows your current XP, rank, next rank target, combat record, service time and, when enabled by the server, the all-time leaderboard and your placement. The combat record includes soldier, vehicle, friendly-vehicle and uncrewed-vehicle kills, plus deaths, suicides, player kills, total survival time, longest life and current-life time. After spawning, STWExperience also shows a notification confirming whether your profile was loaded persistently and displays your current XP and rank.
- Stay connected: by default, the system awards 60 XP per connected hour.
- Fight the enemy: an enemy soldier elimination awards 25 XP by default.
- Protect friendlies and civilians: default penalties are 100 XP for a friendly soldier and 150 XP for a civilian.
- Watch for notices: by default, a combat XP notice is queued after every 10 enemy combat kills. Enemy soldiers and enemy vehicle destructions share this total; friendly, civilian and uncrewed vehicle losses do not count. The server can delay each milestone notice, normally by 30–45 seconds, so it does not crowd the immediate fight.
Default rank ladder
Administrators can replace this ladder, but a fresh configuration uses the following thresholds.
| XP required | Rank |
|---|---|
| 0 | Recruit |
| 1,200 | Soldier II |
| 2,200 | Soldier III |
| 3,600 | Corporal |
| 5,500 | Senior Corporal |
| 7,800 | Sergeant II |
| 10,500 | Sergeant First Class |
| 13,800 | Warrant Officer |
| 17,600 | Sergeant Major |
| 22,000 | Lieutenant |
| 27,000 | Captain |
| 32,500 | Major |
| 38,600 | Colonel |
Server setup and configuration
Load STWExperience on the server and start a session once. It creates three configuration files in the server profile directory:
| File | Purpose |
|---|---|
$profile:STW/Experience/STWExperienceConfig.json | Core XP, notification, leaderboard, Discord reporting, and administration settings. |
$profile:STW/Experience/STWExperienceVehicleKillCategories.json | Ordered vehicle-kill XP category rules. |
$profile:STW/Experience/STWExperienceRanks.json | Rank thresholds and names. |
On Windows, $profile is the directory selected by the server's -profile startup parameter. Stop the server before editing the JSON, keep a backup, then restart it to load your changes. Each file is validated independently and is rewritten with safe defaults if it is invalid or incompatible.
STWExperienceConfig.json
| Setting | Default | Purpose |
|---|---|---|
enabled | true | Master switch for XP awards. Connected time is still tracked for the profile. |
timeTickMinutes | 5 | How often connected-time XP is calculated and saved. Valid range: 1–60 minutes. This controls connected-time XP accrual and profile persistence, not the player-facing connected-time notification cadence. |
xpNotificationTickMinutes | 60 | Cadence, in minutes, for player-facing Connected time XP notifications. Valid values: 1–1,440; -1 disables only these notifications, while 0 is normalized to 1. It does not affect connected-time XP accrual or profile persistence, which remain controlled by timeTickMinutes (default 5 minutes). |
connectedXpPerHour | 60 | XP awarded per hour connected. Set to 0 to disable time rewards. |
combatXpEnabled | true | Enables soldier and configured vehicle-kill XP. |
enemySoldierXp | 25 | Reward for eliminating an enemy soldier. |
friendlySoldierXp | -100 | Penalty for killing a friendly soldier. |
civilianSoldierXp | -150 | Penalty for killing a civilian-faction soldier. |
enemyCombatKillNotificationInterval | 10 | Number of combined enemy soldier eliminations and enemy vehicle destructions between combat XP notices. Friendly, civilian and uncrewed vehicle losses do not advance this counter. Values are limited to 1–1,000. |
notificationsEnabled | true | Master switch for STW Experience on-screen notices, including combat XP, connected-time XP, profile-load and administration notices. |
chatMessagesEnabled | true | Master switch for STW Experience chat messages for the same notices. It can be used independently of notificationsEnabled. |
civilianFactionKeys | ["CIV"] | Faction keys treated as civilians for soldier and vehicle penalties. |
debugVehiclePrefabLogging | false | Writes destroyed-vehicle prefab paths to the server log to help create precise vehicle category rules. Keep disabled during normal play. |
allowNegativeXp | false | When false, penalties cannot reduce a profile below zero XP. |
notificationSeconds | 4.0 | How long each XP notification remains visible; the permitted range is 1–10 seconds. |
combatNotificationDelayMinimumSeconds, combatNotificationDelayMaximumSeconds | 30, 45 | Random 30–45-second delay range before each combat XP milestone notice is shown. |
leaderboardEnabled | true | Shows the all-time leaderboard in the F7 Experience Summary Dialog. When disabled, the dialog states that the leaderboard is disabled by the server. |
leaderboardTopEntries | 5 | Maximum number of top leaderboard entries displayed. Values are limited to 1–10. |
leaderboardShowPlayerNames | false | Shows player names in leaderboard entries when enabled. Leave it false to show standings without revealing other players' names. |
discordReportingEnabled | false | Enables periodic, server-side Discord leaderboard reports. It remains inactive until a webhook URL is also set. |
discordWebhookUrl | Empty | Discord webhook endpoint that receives the report. Keep this URL private; an empty value disables reporting even when discordReportingEnabled is true. |
discordLeaderboardReportIntervalHours | 6 | How often the server sends the Discord leaderboard report. Values are limited to 1–168 hours. |
discordShowPlayerNames | false | Shows player names in Discord leaderboard reports. Leave it false to publish rankings without names. |
adminIdentities | [] | Array of stable backend identity IDs allowed to open and use Experience administration. An empty array disables administration for everyone. |
adminMaximumXpAdjustment | 100000 | Largest single XP amount an authorised administrator may add or remove. Values are limited to 1–1,000,000. |
signature and version are maintained by STWExperience to identify and migrate the file. Do not edit them manually.
STWExperienceVehicleKillCategories.json
This file contains the ordered vehicleKillCategories array. The first rule whose prefabPathContains text appears in the destroyed vehicle's prefab path is used, so put precise rules above broad ones.
| Setting | Default | Purpose |
|---|---|---|
vehicleKillCategories | Built-in category list | Ordered array of vehicle-kill XP rules. The default list covers helicopters, tanks, APCs, and common wheeled military vehicles. |
| Rule field | What it controls |
|---|---|
prefabPathContains | Case-sensitive fragment of the vehicle prefab path to match. |
displayName | Text shown in the XP notification. |
enemyXp | XP for destroying a vehicle belonging to an enemy faction. |
friendlyXp | XP adjustment for destroying a friendly vehicle. |
civilianXp | XP adjustment for destroying a civilian-faction vehicle. |
uncrewedXp | XP adjustment when the vehicle faction cannot be resolved. Defaults to the negative of enemyXp. |
signature and version are maintained automatically; do not edit them manually.
STWExperienceRanks.json
| Setting | Default | Purpose |
|---|---|---|
ranks | Default ladder above | Ordered array of rank entries. Each entry contains xpRequired (the XP threshold) and name (the displayed rank name). |
signature and version are maintained automatically; do not edit them manually. Older combined-file vehicleKillCategories and ranks entries are imported into these separate files; configure them here going forward.
discordReportingEnabled to true, add a valid Discord webhook URL, and restart the server. The server then posts a styled all-time leaderboard report at the configured hourly interval. The reports use the same top-entry count as the in-game leaderboard.discordWebhookUrl like a password. Do not put it in public screenshots, guides or repositories; anyone with the URL may be able to post to that Discord channel.Experience administration
Authorised administrators can press F8 (the default Experience Administration keybind) to open the administration dialog. The server checks the administrator's backend identity for every request; having the keybind alone does not grant access.
- Stop the server and add the administrator's stable backend identity ID to
adminIdentitiesinSTWExperienceConfig.json. - Set an appropriate
adminMaximumXpAdjustmentfor the server. - Restart the server, join as the authorised administrator, and press F8.
- Select an online player, enter an XP amount, then use the available controls.
| Control | Effect |
|---|---|
| Add XP / Remove XP | Applies the specified amount to the selected online player's profile, subject to adminMaximumXpAdjustment. |
| Remove Leaderboard | Excludes the selected player from the leaderboard without resetting their complete profile. |
| Reset Player | Replaces the selected online player's profile with a fresh one and removes their leaderboard entry. |
| Reset All Profiles | Resets every Experience profile and leaderboard entry for the scenario. |
Vehicle rewards
Vehicle rewards are defined by the ordered vehicleKillCategories array. The first rule whose prefabPathContains text appears in the destroyed vehicle's prefab path is used. Put precise rules above broad ones.
| Rule field | What it controls |
|---|---|
prefabPathContains | Case-sensitive piece of the vehicle prefab path to match. |
displayName | Text shown in the XP notification. |
enemyXp | XP for destroying a vehicle belonging to an enemy faction. |
friendlyXp | XP adjustment for destroying a friendly vehicle. |
civilianXp | XP adjustment for destroying a civilian-faction vehicle. |
uncrewedXp | XP adjustment when the vehicle faction cannot be resolved. Defaults to the negative of enemyXp. |
The default categories cover helicopters; M1A1, M1A2, T-14 and T-90M tanks; Kurganets-25, Bradley and BMP vehicles; plus M113, LAV-25, BRDM-2 and BTR-70 vehicles. Their default enemy rewards range from 100 XP for an M113 to 1,000 XP for a helicopter; friendly and civilian losses carry much larger penalties.
debugVehiclePrefabLogging to true, destroy a representative vehicle, and read the server log for its prefab path. Add a narrow rule using that path fragment, turn debug logging off, then restart the server. This avoids accidental matches and noisy logs.Persistence and resets
When server profile storage is available, STWExperience writes player profiles here:
$profile:STW/Persistence/Experience/Players/
A global scenario record is stored alongside the player folder. Files include the scenario key, allowing the same player to have independent progress in different scenarios. Profiles save when a player disconnects and on each connected-time tick; dirty profiles also save as the session closes.
A sensible first configuration
Start with the defaults: 60 XP per connected hour, modest rewards for enemy soldiers, and meaningful penalties for friendly fire. Run a few sessions before increasing vehicle rewards or reducing rank thresholds. Progression works best when a rank represents sustained participation rather than one fortunate helicopter engagement.