Market Dynamics

  • Market Dynamics
  • Market Dynamics
  • Market Dynamics
  • Market Dynamics
tisonK
495 subscribers
V1.2.0.8
18 696

FS25 Market Dynamics - Dynamic Crop Pricing

Real-world inspired crop pricing for Farming Simulator 25. Prices rise and fall daily and intraday on world events, supply, and demand, so no two playthroughs feel the same. Lock in futures contracts, ride out market shocks, and watch it all on a live market screen. Markets stay volatile but never absurd, clamped between 50% and 200% of base.

✨ Features
- Dynamic Pricing Engine
- Ten World Events
- Futures Contracts
- Live Market Screen
- Configurable Events
- Multiplayer Sync
- Mod Integrations
- 26 Languages

🎮 Controls
- Open New Contract dialog: N (or click "New Contract" on the Market screen)

Note that everything is server-authoritative in multiplayer, and you can safely remove the mod mid-save, it simply ignores its data on next load!

Works great with: FS25_FuturesMission and FS25_UsedPlus (integrations activate automatically when detected).
FuturesMission: https://github.com/Mmtrx/FS25_FuturesMission

===================================================================
GitHub Repository:
https://github.com/TheCodingDad-TisonK/FS25_MarketDynamics]
===================================================================
COPYRIGHT NOTICE:
All rights reserved. Unauthorized redistribution, copying,
modification, or claiming this mod as your own is strictly prohibited.

Original Author: TisonK
===================================================================

Server
Consoles
Changelog
22
  • [ What's new ]
    - World event alerts now appear as a non-modal banner instead of a popup that interrupts what you're doing.
    - New "Compact Event Banner" setting if you prefer a smaller alert (the full dialog stays the default).

    [ Fixes ]
    - Futures contracts now settle at the exact price you locked in.
    - Contract times sync correctly on dedicated servers (fixes a multiplayer mismatch).

  • - Dedicated server crash: replaced streamWriteFloat64 (unavailable on dedi builds) with streamWriteInt32 (seconds) for contract delivery time
    - Contract delivery double-counted: removed addFillLevelFromTool hook — standard selling stations call both hooks at the same stack level, bypassing the re-entrancy guard and inflating contract progress to 2×
    - Too many events on Rare: lowered Rare frequency scale from 0.4 → 0.15; added per-check cap of 1 new event with shuffled ordering to prevent event storms
    - Frequency setting change delayed: world event timer now resets immediately when eventFrequency or eventsEnabled changes in settings

  • - Settings panel removed from ingame settings
    - Custom settings panel integrated (NEEDS TO BE BINDED)

  • - Swapped out the ▲/▼ indicators since FS25 does not like it
    - Fixed `nill` error from missing l10n string
    - Updated all translation files (new keys have been added)

  • - Click the Crop, Price, or Change column header in the Prices tab to sort the list — click again to flip the order. A small ▲/▼ arrow shows which column is active.

    - MDM now correctly uses base prices set by the Realistic Economy mod. If you have both installed, MDM's price swings and world events will layer on top of REM's real-world prices instead of ignoring them.

  • Dedicated server admins were unable to add or remove custom fill types from
    world events — changes appeared to work but silently reverted every time. This
    update fixes that, and also makes it much easier to find crop names on servers
    running lots of crop mods.

    What's fixed / What's new:

    • Custom fill types now save correctly for dedicated server admins — no more
    changes disappearing after closing the dialog
    • Removing a fill type from an event list now actually sticks (closes #77)
    • "Browse Fill Types" dialog has a new real-time search bar — type part of a
    crop name to instantly filter the list instead of scrolling through 100+ entries
    • All existing languages updated with the new search label

    No save migration needed — existing savegames load normally.

  • - Fix contract defaulting on restart by persisting absolute game time and adding a synchronization guard in the update loop.
    - Implement 'Forfeit' action for contract owners, allowing non-admin clients on dedicated servers to manage their own contracts.
    - Refactor XML serialization to use the modern FS25 XMLFile class API, improving stability and fixing type-related script errors.
    - Fix an infinite loop in UPIntegration load logic that caused game freezes at 100% loading.
    - Suppress 'Failed to open xml' errors for missing legacy configuration files.
    - Ensure proper permission checks for admins and master users across UI elements.

  • Market Dynamics now reacts to what's happening in the world. If Random World
    Events fires a market crash, prices will reflect it. If your fields are under
    widespread crop stress, supply pressure nudges prices upward.

    What's new / fixed:
    - Random World Events integration: active economic and field events now
    directly shift crop prices (market boom +12%, crash -13%, export
    opportunity +18%, economic crisis -20%, and more)
    - Seasonal Crop Stress integration: when many of your fields are under
    critical stress, a mild supply-pressure price increase kicks in
    - Delivery time unit (real days vs. in-game days) is now a single global
    setting in ESC > Settings > Market Dynamics instead of a per-contract
    choice — existing contracts are not affected
    - New contract HUD showing your active contracts at a glance
    - Event alerts redesigned with cleaner notifications
    - Fixed contracts not completing correctly at selling points
    - Fixed delivery start time not being saved correctly across reloads
    - Fixed a time-scale warning that could trigger incorrectly during fast-forward
    - Browse Fill Types dialog for easier event configuration
    - Immediate contract delivery now available
    - Event settings sync properly in multiplayer

    Saves: No migration needed. Existing contracts carry over.

  • - Added a new HUD for when there is a active contract
    - Added a dialog that shows up when a event has started
    - Added new strings to all 25 translation files
    - Fixed a issue where contracts made could not be fullfilled while unloading at selling station
    - Added missing strings across all translation files

  • - Added a new HUD for when there is a active contract
    - Added a dialog that shows up when a event has started
    - Added new strings to all 25 translation files

  • - Added missing deliveryStartTime and bcManaged fields to MarketSerializer and network sync (#64)
    - Fixed BCIntegration deadline offset to use daysPerPeriod (#64)
    - Added UPIntegration hooks and fixed modifier removal keys (#64)
    - Added onLoad and getExtraData fallbacks to all stateless events for save load safety (#64)
    - Fixed TradeDisruptionEvent duplicate extra filltype application (#64)
    - Added session start grace period to MarketDynamics to prevent immediate contract defaults on server restart (#63, #60)
    - Implemented MDMMarketSyncEvent to sync server prices and active events to clients, fixing desyncs (#62)
    - Added deterministic oldest-first contract fulfillment logic
    - Registered missing dialogs and added nil guards across core systems

  • - Browse Types (extended) — You can now add individual fill types directly to events via the browser UI
    - Commodity handling expanded — events now support all fill types, not just crops
    - Multiplayer / dedicated server event settings improved for better consistency and reliability
    - Contract completion issue that could prevent contracts from finishing correctly

  • - Created MDMSettingsSyncEvent.lua: A new network event that handles synchronizing all settings (Price toggles, Event Frequency, Volatility, Disabled Events, and Custom Fruit Types) between the server and all connected clients.
    - Sync on Join: When a new player joins the server, they now automatically receive the full current settings from the server so they see exactly what the host sees.
    - Real-time Updates: Whenever any player (with permission) changes a setting in the Settings UI or the Event Settings dialogs, that change is now instantly broadcasted to the server and all other clients.
    - Server-Side Persistence: Because the server now receives these updates in real-time, it will correctly include your custom fruit types the next time the game is saved.

  • - Contracts now sync correctly to all clients on a dedicated server
    - Fixed a loading failure caused by incorrect file paths inside the mod zip
    - Time unit toggle (hours/days) moved into the contract dialog where it belongs
    - Contract input popup restyled and repositioned — no more clipped text field
    - Removed a leftover settings panel that was causing tab conflicts in multiplayer
    - Event Settings is now a footer button (alongside New Contract), easier to find

  • - Improved all the dialogs (should feel less noisy)
    - 2 new options for contract creation (custom amount & custom days)
    - Time Unit toggle added to choose between in-game & real days
    - Rework of the admin commands
    - Several small bugs fixed

  • Instead of picking from preset quantities, you can now enter any amount (liters or units) using the new custom input dialog. Same for delivery windows — type in any number of in-game or real-world days.

    [Save path fix]
    - The save file is no longer created inside a subfolder within your savegame directory. This fixes an issue where dedicated servers rejected uploaded savegames. Existing saves from v1.1.4.x are automatically migrated on first load.

    [Dialog button layout]
    - The quantity preset buttons in the futures contract dialog no longer overflow outside the dialog boundary.

    [Custom input dialog]
    - The hint text at the bottom of the custom input dialog is now fully visible (was being clipped in the previous layout).

    Full changelog -> https://github.com/TheCodingDad-TisonK/FS25_MarketDynamics/blob/main/CHANGELOG.md

  • FS25_FuturesMission has been updated -> https://github.com/Mmtrx/FS25_FuturesMission/releases/tag/v1.1.0.1

    The Market Dynamics tab was overwriting the SERVER SETTINGS tab when playing on a multiplayer server. MDM's tab now always inserts after all existing game tabs (including the MP-only SERVER SETTINGS tab), and recovers automatically if anything shifts tab positions.

  • 3 new events added!

    - ColdSnapEvent.lua — mixed-direction frost event; grain/oilseeds up, forage down; full save/load persistence via getExtraData/onLoad
    - FinancialPanicEvent.lua — black-swan macro shock; suppresses all crops simultaneously; rare, high intensity floor
    - ProteinPremiumEvent.lua — demand-pull protein trend; boosts soybean/canola and milling wheat/barley at different rates
    - Translation keys mdm_event_cold_snap, mdm_event_financial_panic, mdm_event_protein_premium added to all 26 language files

  • - Futures contracts no longer immediately default on the first reload after signing
    - Full multiplayer support for futures contracts. All contract actions (create, complete, cancel, delete) are now sent to the server for authoritative execution and synced back to all connected clients.

  • This update brings a full integration with FS25_FuturesMission (by Mmtrx), fixes several contract and pricing bugs that slipped through since launch, and cleans up confusing in-game messages so you always know where to go.

    What's new / fixed:
    • FuturesMission integration — when FS25_FuturesMission is installed, futures contracts are created through the BetterContracts mission flow and MDM handles the pricing side automatically
    • Savegame migration — existing MDM contracts are handed off to FuturesMission cleanly on first load; no manual steps needed
    • Fixed prices occasionally showing $0 in the market screen
    • Fixed contract list not responding to clicks in some situations
    • Fixed a game freeze that could occur when pressing New Contract with BetterContracts active
    • Fixed contract deadlines and event timers drifting out of sync over long play sessions
    • In-game messages now correctly name FS25_FuturesMission and tell you where to get it if you don't have it

    No save migration needed — your existing save works as-is.

  • Futures contracts now correctly track crop deliveries. Previously, contracts were stuck at 0% filled regardless of how much was delivered. (PriceHook.lua — use fillDelta instead of sellFillType return value, which is not the accepted liter count in FS25.)

Required mods
1
Credits
Comments
27