FS25 HelperPayroll replaces Farming Simulator 25's continuous AI-worker wage deductions with a configurable, save-specific payroll system.
It supports role-based and named-worker compensation, hourly or daily pay, per-role minimum call-outs, per-worker overrides, immediate or scheduled settlement, persistent ledger reporting, and optional integration with HelperProfiles.
Current version:
0.4.1.1Alpha 2
Game: Farming Simulator 25
Multiplayer: Not supported
- Suppresses the game's normal continuous AI-worker wage deductions.
- Calculates custom worker charges from configurable payroll policies.
- Supports
roleTypeandhelperSlotpayroll modes. - Supports hourly and daily compensation independently of payment timing.
- Configures pay basis, rate, and minimum call-out for each role.
- Allows each worker to inherit role terms or use a custom override.
- Supports immediate
onJobFinishsettlement or scheduleddailyPayroll. - Supports a global call-out fee and optional charge rounding.
- Stores settings, role policies, worker mappings, and pending payroll per savegame.
- Captures worker and compensation terms when a job starts.
- Records persistent payroll history by period, role, worker, and job.
- Provides an FS25-style management screen, overlays, reports, and console tools.
- Publishes an optional API used by HelperProfiles for role assignment and display.
- Download
FS25_HelperPayroll.zip. - Place the ZIP directly in the Farming Simulator 25 mods folder. Do not unpack it.
Documents/My Games/FarmingSimulator2025/mods
- Enable Helper Payroll Alpha for the intended savegame.
- Optionally enable FS25 HelperProfiles for named helper identities, in-game profile role assignment, and the HelperProfiles overlay role column.
Alpha builds should be tested on a copied savegame before being used in an important playthrough.
Keybinds can be reassigned in the Farming Simulator controls menu.
| Action | Default binding | Description |
|---|---|---|
| Cycle payroll role | ; |
Selects the next role in standalone roleType mode. |
| Toggle role list | RCTRL + ; |
Shows or hides the standalone role list. |
| Toggle report overlay | RCTRL + P |
Shows or hides the payroll report. |
| Open management screen | RCTRL + H |
Opens the full payroll-management UI. |
When HelperProfiles is active, it owns the semicolon key family. HelperPayroll suppresses its standalone ; and RCTRL + ; actions for that session to avoid conflicts. The management and report shortcuts remain available.
HelperPayroll separates three decisions:
-
Who is assigned?
Controlled by the payroll mode and worker-role mapping. -
How is the worker paid?
Controlled by the role or worker compensation policy: hourly or daily. -
When is the charge settled?
Controlled by the billing mode: on job finish or at the daily payroll hour.
Changing one does not automatically change the others.
Standalone-friendly default.
Every new AI job uses the currently selected payroll role. The selected role and its compensation terms are captured when the job starts.
Assigns roles to the deployed helper slot A–J.
- Works with slot fallbacks when HelperProfiles is absent.
- Uses live display names and stable identities when the HelperProfiles API is available.
- Stores identity and slot mappings in the current save.
- Supports separate custom compensation overrides for each worker.
Hourly work is based on the recorded job duration and the effective hourly rate.
labour = worked hours × rate
subtotal = labour + applicable call-out fee
charge = maximum(subtotal, effective minimum call-out)
The effective minimum comes from the worker override when custom compensation is enabled, otherwise from the assigned role. Older save data can fall back to the legacy global minimum.
A daily worker is charged once per worker per in-game day when that worker completes chargeable work.
- The role or worker rate is interpreted as a daily rate.
- Multiple completed jobs by the same worker on the same game day do not create multiple daily-rate charges.
- Minimum call-out is ignored for daily compensation.
- Payment timing still follows the selected billing mode.
Each role defines:
payBasis:hourlyordailyrate: hourly or daily amountminimumCallout: minimum charge when the role is hourly
Each A–J worker can use:
inherit: uses the assigned role policycustom: uses the worker's own pay basis, rate, and minimum call-out
This allows a role to be hourly by default while one named worker is paid a fixed daily amount.
Completed work is settled immediately.
- Hourly work is calculated when the job finishes.
- Daily compensation is applied once for that worker and game day.
- The global call-out fee is applied according to the current billing rules.
Completed work is accumulated and settled at the configured in-game payroll hour.
- Pending rows are grouped by worker and game day.
- Earlier unpaid days are treated as overdue and settle automatically.
- The authoritative game clock is used so accelerated time cannot silently skip a due payroll row.
dailyPayroll controls settlement timing; it does not force every role to use daily compensation.
Open the screen with:
RCTRL + H
The screen contains six tabs:
| Tab | Purpose |
|---|---|
| Overview | Shows active profile, modes, selected role, integration status, pending payroll, and save path. |
| Billing | Edits payroll mode, billing mode, payroll hour, legacy minimum, global call-out fee, and rounding. |
| Roles | Edits each role's pay basis, rate, and minimum call-out. |
| Workers | Assigns roles and configures inherited or custom worker compensation. |
| Ledger | Displays persistent payroll totals. |
| Help | Explains assignment, compensation, and settlement. |
Changes are staged until Apply is selected. Discard restores the currently loaded values.
- Reload Save reloads the global policy and reapplies the current save-specific settings.
- Reset Save requires a second confirmation before replacing the current save's payroll settings with the global defaults.
hpaySave resetperforms the reset immediately and does not show the management-screen confirmation.
Resetting a save does not overwrite the global defaultPayrollConfig.xml.
HelperProfiles is optional and is not a hard dependency.
HelperPayroll 0.4.1.1 publishes its role-assignment API globally and on the active mission so HelperProfiles can discover it reliably regardless of mod load order.
With HelperProfiles 2.0.27.2 or a compatible later build:
- HelperProfiles supplies stable helper identities and display names.
- HelperPayroll supplies ordered role definitions and effective role mappings.
- Roles can be assigned from the HelperProfiles Profiles screen.
- Set payroll mode to
helperSlotfor those individual assignments to control payroll calculations;roleTypecontinues to use the globally selected role. - The HelperProfiles overlay displays a live ROLE column.
- Assignments are stored by stable identity where possible, with A–J slot fallback.
- Worker identities and roles are included in payroll reports and ledger entries.
- HelperPayroll remains responsible for all compensation rules and persistence.
Changing a role while a job is already active does not retroactively alter the terms captured for that job.
Check integration status with:
hpayProfiles status
hpayProfiles slots
HelperPayroll remains usable in standalone roleType mode when HelperProfiles is absent.
On first use, HelperPayroll creates:
Documents/My Games/FarmingSimulator2025/modSettings/FS25_HelperPayroll/defaultPayrollConfig.xml
This file provides defaults for new saves and for Reset Save. The bundled XML inside the mod ZIP is a fallback/template and should not normally be edited.
Each save stores its effective configuration at:
Documents/My Games/FarmingSimulator2025/modSettings/FS25_HelperPayroll/savegameX/helperPayrollSettings.xml
The file contains:
- Active payroll profile.
- Payroll and billing modes.
- Role compensation policies.
- Worker-role mappings.
- Worker compensation overrides.
- Pending daily payroll.
- Overlay and reporting settings.
Save-specific settings take priority over the global template. Editing defaultPayrollConfig.xml does not automatically replace an existing save's settings.
Reload after manual XML edits with:
hpaySave reload
Payroll history is stored under:
Documents/My Games/FarmingSimulator2025/modSettings/FS25_HelperPayroll/savegameX/ledger
Typical files include:
index.xml
Y001_M06.xml
Exported reports are written to the current save's HelperPayroll settings folder.
The bundled default profile contains:
| Role ID | Display name | Pay basis | Rate | Minimum call-out |
|---|---|---|---|---|
owner |
Owner Labour | Hourly | 0.00 | 0.00 |
trainee |
Trainee Helper | Hourly | 10.00 | 5.00 |
standard |
Standard Helper | Hourly | 18.00 | 5.00 |
skilled |
Skilled Operator | Hourly | 22.00 | 5.00 |
contractor |
Contractor | Hourly | 30.00 | 5.00 |
Rates use the active save's currency display and economy context.
The bundled policy also includes example uk_tenant and us_ranch profiles.
The current UI can edit existing roles but does not yet add, rename, reorder, or delete role definitions.
Add custom roles to the relevant <workerRates> section in either the global template or the save-specific file:
<workerRates profile="default">
<worker id="seasonal"
name="Seasonal Worker"
payBasis="hourly"
rate="16.00"
minimumCallout="5.00" />
</workerRates>For a daily role:
<worker id="dayContractor"
name="Day Contractor"
payBasis="daily"
rate="240.00"
minimumCallout="0.00" />After editing the active save file while the game is running:
hpaySave reload
Role IDs must be unique and non-empty. Save-specific role definitions are preserved when the management screen writes the save.
<helperPayroll>
<settings>
<activePayrollProfile>default</activePayrollProfile>
<payrollMode>helperSlot</payrollMode>
<selectedRole>standard</selectedRole>
<fallbackRole>standard</fallbackRole>
<billingMode>dailyPayroll</billingMode>
<payrollHour>18</payrollHour>
<workerCalloutFee>0.00</workerCalloutFee>
<roundWorkerCharges>true</roundWorkerCharges>
</settings>
<workerRates profile="default">
<worker id="standard"
name="Standard Helper"
payBasis="hourly"
rate="18.00"
minimumCallout="5.00" />
<worker id="contractor"
name="Contractor"
payBasis="daily"
rate="250.00"
minimumCallout="0.00" />
</workerRates>
<helperSlots profile="default">
<helper slot="A"
name="Helper A"
role="Standard Helper"
workerRate="standard" />
</helperSlots>
</helperPayroll>Run a main command with help to display available subcommands.
| Command | Description |
|---|---|
hpayRole status |
Shows the active profile, selected role, basis, and rate. |
hpayRole list |
Lists available roles. |
hpayRole next |
Selects the next role. |
hpayRole prev |
Selects the previous role. |
hpayRole set <id|index|name> |
Selects a role. |
| Command | Description |
|---|---|
hpayOverlay on|off|toggle |
Controls the standalone role-list overlay. |
hpayOverlay status |
Shows role-list overlay status. |
hpayOverlay pos <x> <y> |
Sets normalized screen position. |
hpayOverlay anchor TL|TR|BL|BR |
Sets the anchor corner. |
hpayOverlay scale <0.5..2.0> |
Sets scale. |
hpayOverlay width <0.15..0.90> |
Sets width. |
hpayOverlay opacity <0..1> |
Sets background opacity. |
hpayOverlay font <0.010..0.030> |
Sets font size. |
hpayOverlay rowgap <0.001..0.03> |
Sets row spacing. |
hpayOverlay maxrows <3..30> |
Sets maximum rows. |
hpayOverlay pad <0..0.05> |
Sets padding. |
hpayOverlay bg|outline|shadow on|off |
Controls visual elements. |
| Command | Description |
|---|---|
hpayReport summary |
Prints the persistent ledger summary. |
hpayReport session |
Prints the current session report. |
hpayReport jobs [limit] [period] |
Prints recent persisted entries. |
hpayReport month <year> <month> |
Prints a specific monthly ledger. |
hpayReport roles |
Prints totals by role and worker rate. |
hpayReport daily |
Prints pending daily payroll rows. |
hpayReport export [name] |
Exports the persistent ledger summary. |
hpayReport exportSession [name] |
Exports the current session report. |
| Command | Description |
|---|---|
hpayConfig status |
Shows the global policy source and template values. |
hpayConfig path |
Prints the global policy path. |
hpayConfig reload |
Reloads global policy and save overrides. |
hpayConfig reset |
Regenerates the global template from bundled defaults. |
hpaySave status |
Shows the current save's effective settings. |
hpaySave path |
Prints the current save settings path. |
hpaySave reload |
Reloads global and current-save settings. |
hpaySave reset |
Immediately resets the current save from the global template. |
hpayProfiles status |
Shows HelperProfiles integration state. |
hpayProfiles slots |
Lists identities and payroll mappings. |
hpayDump status |
Prints full runtime status. |
hpayDump clock |
Shows payroll-clock and due-row state. |
hpayDump roles|ledger|report|config |
Prints the selected diagnostic view. |
Run:
hpayDump status
hpayConfig status
hpaySave status
Confirm that suppression and custom charging are enabled in the active settings.
- Confirm it was added to the active profile.
- Use a unique, non-empty role ID.
- Confirm
payBasisishourlyordaily. - Reload the active save settings.
- Check
log.txtfor XML or duplicate-role warnings.
Remember that compensation basis and payment schedule are separate:
- A
dailyrole is paid once per worker/day. dailyPayrollonly controls when completed work is settled.- An
hourlyrole can still be settled throughdailyPayroll. - A
dailyrole can still be settled throughonJobFinish.
Run:
hpayDump clock
hpayReport daily
Rows from an earlier game day should be treated as overdue and settle automatically.
Run:
hpayProfiles status
hpayProfiles slots
Confirm that HelperProfiles 2.0.27.2 or a compatible later build is enabled, only one copy of each mod ZIP exists, the game was restarted after replacing either mod, and the HelperPayroll API publication appears in log.txt.
Include the HelperPayroll version, HelperProfiles version when installed, relevant log.txt excerpt, savegame number, active modes, and clear reproduction steps.
- Publishes the role-assignment API globally and on the active mission.
- Allows HelperProfiles to discover the API reliably regardless of load order.
- Supplies ordered role definitions and effective identity/slot mappings.
- Accepts validated save-specific role changes through
setWorkerRole. - Retains hourly and daily role policies.
- Retains inherited or custom per-worker compensation.
- Preserves active-job compensation capture and persistent ledger behaviour.
This is an alpha integration build.
Planned work includes:
- Add, rename, reorder, and delete role controls in the management UI.
- Expanded helper-roster support beyond A–J in coordination with HelperProfiles.
- Optional rostered-day policies distinct from worked-day daily compensation.
- Continued reporting, localisation, and usability improvements.
Copyright © 2026 SimGamerJen. All rights reserved.
Editing, redistributing, re-uploading, repackaging, or publishing modified versions of this mod is prohibited without prior written permission from SimGamerJen.
The presence of source files in this repository does not grant permission to publish or redistribute derivative versions.
FS25 HelperPayroll is an unofficial Farming Simulator 25 mod and is not affiliated with or endorsed by GIANTS Software.