ScienceTechWorks • STW suite
← STW Online Manuals

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.

Experience summary: press F7 (the default keybind) whenever you want to open the STW Experience Summary Dialog. Profiles follow your identity, not your display name: changing a player name does not create a new XP profile. XP is saved separately for each scenario, so a new scenario begins with its own progression history.

Default rank ladder

Administrators can replace this ladder, but a fresh configuration uses the following thresholds.

XP requiredRank
0Recruit
1,200Soldier II
2,200Soldier III
3,600Corporal
5,500Senior Corporal
7,800Sergeant II
10,500Sergeant First Class
13,800Warrant Officer
17,600Sergeant Major
22,000Lieutenant
27,000Captain
32,500Major
38,600Colonel

Server setup and configuration

Load STWExperience on the server and start a session once. It creates three configuration files in the server profile directory:

FilePurpose
$profile:STW/Experience/STWExperienceConfig.jsonCore XP, notification, leaderboard, Discord reporting, and administration settings.
$profile:STW/Experience/STWExperienceVehicleKillCategories.jsonOrdered vehicle-kill XP category rules.
$profile:STW/Experience/STWExperienceRanks.jsonRank 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

SettingDefaultPurpose
enabledtrueMaster switch for XP awards. Connected time is still tracked for the profile.
timeTickMinutes5How 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.
xpNotificationTickMinutes60Cadence, 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).
connectedXpPerHour60XP awarded per hour connected. Set to 0 to disable time rewards.
combatXpEnabledtrueEnables soldier and configured vehicle-kill XP.
enemySoldierXp25Reward for eliminating an enemy soldier.
friendlySoldierXp-100Penalty for killing a friendly soldier.
civilianSoldierXp-150Penalty for killing a civilian-faction soldier.
enemyCombatKillNotificationInterval10Number 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.
notificationsEnabledtrueMaster switch for STW Experience on-screen notices, including combat XP, connected-time XP, profile-load and administration notices.
chatMessagesEnabledtrueMaster 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.
debugVehiclePrefabLoggingfalseWrites destroyed-vehicle prefab paths to the server log to help create precise vehicle category rules. Keep disabled during normal play.
allowNegativeXpfalseWhen false, penalties cannot reduce a profile below zero XP.
notificationSeconds4.0How long each XP notification remains visible; the permitted range is 1–10 seconds.
combatNotificationDelayMinimumSeconds, combatNotificationDelayMaximumSeconds30, 45Random 30–45-second delay range before each combat XP milestone notice is shown.
leaderboardEnabledtrueShows the all-time leaderboard in the F7 Experience Summary Dialog. When disabled, the dialog states that the leaderboard is disabled by the server.
leaderboardTopEntries5Maximum number of top leaderboard entries displayed. Values are limited to 1–10.
leaderboardShowPlayerNamesfalseShows player names in leaderboard entries when enabled. Leave it false to show standings without revealing other players' names.
discordReportingEnabledfalseEnables periodic, server-side Discord leaderboard reports. It remains inactive until a webhook URL is also set.
discordWebhookUrlEmptyDiscord webhook endpoint that receives the report. Keep this URL private; an empty value disables reporting even when discordReportingEnabled is true.
discordLeaderboardReportIntervalHours6How often the server sends the Discord leaderboard report. Values are limited to 1–168 hours.
discordShowPlayerNamesfalseShows 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.
adminMaximumXpAdjustment100000Largest 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.

SettingDefaultPurpose
vehicleKillCategoriesBuilt-in category listOrdered array of vehicle-kill XP rules. The default list covers helicopters, tanks, APCs, and common wheeled military vehicles.
Rule fieldWhat it controls
prefabPathContainsCase-sensitive fragment of the vehicle prefab path to match.
displayNameText shown in the XP notification.
enemyXpXP for destroying a vehicle belonging to an enemy faction.
friendlyXpXP adjustment for destroying a friendly vehicle.
civilianXpXP adjustment for destroying a civilian-faction vehicle.
uncrewedXpXP 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

SettingDefaultPurpose
ranksDefault ladder aboveOrdered 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.

Discord reporting: set 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.
Protect the webhook: treat 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.

  1. Stop the server and add the administrator's stable backend identity ID to adminIdentities in STWExperienceConfig.json.
  2. Set an appropriate adminMaximumXpAdjustment for the server.
  3. Restart the server, join as the authorised administrator, and press F8.
  4. Select an online player, enter an XP amount, then use the available controls.
ControlEffect
Add XP / Remove XPApplies the specified amount to the selected online player's profile, subject to adminMaximumXpAdjustment.
Remove LeaderboardExcludes the selected player from the leaderboard without resetting their complete profile.
Reset PlayerReplaces the selected online player's profile with a fresh one and removes their leaderboard entry.
Reset All ProfilesResets every Experience profile and leaderboard entry for the scenario.
Confirmation and scope: removing a leaderboard entry and both reset actions require a second press to confirm. The dialog manages online players with active Experience profiles; back up persistence data before any reset.

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 fieldWhat it controls
prefabPathContainsCase-sensitive piece of the vehicle prefab path to match.
displayNameText shown in the XP notification.
enemyXpXP for destroying a vehicle belonging to an enemy faction.
friendlyXpXP adjustment for destroying a friendly vehicle.
civilianXpXP adjustment for destroying a civilian-faction vehicle.
uncrewedXpXP 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.

Adding modded vehicles: set 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.

Resetting progress: stop the server first, back up the relevant player profile file, then remove that file from the folder above. The player receives a fresh profile for that scenario on their next connection. Do not delete the whole persistence folder unless you intend to reset every STWExperience profile.

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.