Skip to content

FS25_SlurryPipeSystem

Choose a tag to compare

@Willbobber Willbobber released this 15 Jul 14:11

Version 1.0.0.9

Architecture

  • SlurryPipeManager.lua (12,065 lines) split into a core file plus eight domain
    modules (SPSM_Chains, SPSM_Couplers, SPSM_Flow, SPSM_Pressure,
    SPSM_Consistency, SPSM_Spreader, SPSM_Sprayers, SPSM_IBC). Pure relocation,
    mechanically verified byte-identical to V1.0.0.8.
  • Scripts folder reorganised into domain folders (debug/, chains/, couplers/,
    shearBolt/, blockage/, hud/, events/, agitators/, util/, water/,
    herbFertSprayer/, manager/, overrides/, settings/).
  • New central debug registry (scripts/debug/SPSDebugConfig.lua): one named
    on/off channel per file, runtime-switchable via the spsDebug console
    command. All channels ship OFF.

Performance (dedicated servers)

  • Vehicle config lookups were loading and parsing vehicle XML from disk on
    every call, from per-tick trigger hooks and per-frame discharge gates — the
    reported ~45 km/h speed caps and steering lag on busy servers. Both finders
    are now cached per configFileName (negatives included). One disk read per
    vehicle model per session.

Multiplayer fixes

  • Placeable-side hose disconnects are now owner-keyed (the event carries the
    placeable), so every machine resolves the exact coupling — fixes "friend
    detaches, still attached on my end until he drives off".
  • Selling a placeable now broadcasts authoritative disconnects for every live
    bond before teardown, and duplicate placeable registration (the stale
    "ghost pipe" generation on guests) is guarded out.
  • New placeable detach-handler registry: chains anchored or bonded to a sold
    placeable (animal pens, docking stations) are now fully removed with correct
    coupler close animations on every machine; sprayer-pipe disconnects on sell
    are broadcast; pending queues referencing the sold placeable are purged.
    Future placeables (separator etc.) plug into the same registry.
  • Disconnect events now log an [SPS MP RX] line on receivers.

Sprayer store system (new)

  • SPS xml now controls a store's fill types: coupler-declared types are seeded
    into the placeable's Storage at load — no map/base xml edits needed
    (storageFillTypeControl="store" opts a modder store out).
  • Per-coupler capacity="X": same-type couplers sum into that type's storage
    capacity; without it the store's own capacity applies.
  • Dynamic tank compartments: fillTypes="ANY" (or a category/name list) plus
    capacity makes a coupler one physical tank — it locks to the first liquid
    that flows through it and unlocks only when drained empty, then the type
    vanishes from the info panel. Works with basegame and script-mod liquids
    (SoilFertilizer etc.). Locked compartments persist in the savegame and sync
    to clients (event + join dump).
  • ANY couplers pre-seed the base "sprayer" category so basegame liquids always
    show on the store display; aggregate levels self-heal from older saves.
  • Connecting picks the coupler nearest the PLAYER when several are in reach —
    walk to the tank you want.
  • Sprayer placeable couplings accept node="..." (i3dMappings, matching the
    slurry placeable schema) as well as mountNodeName.

Robustness

  • Map mod folders can be renamed freely: bundled Witcombe config match paths
    no longer include the folder name, and both placeable register paths bail
    cleanly if a path-matched config finds none of its nodes (wrong placeable).
  • Water manifest matching is case-insensitive, supports title alternatives
    (titles="A;B") and opt-in substring matching (titleContains=); player
    folder renames never affected it.