# Configuration > Configuration reference for ML Water Stations Category: LIQUID STATIONS · Source: https://miciomods.it/docs/ml-water-stations-configuration · Last updated: 2026-07-05 ## Overview - `shared/config.lua`: Interaction, theme, limits, decay, weather, liquids, containers, jerry cans, fixed tanks - `server/config_server.lua`: Discord webhook URLs ## General Settings **shared/config.lua** ```lua Config.Interaction = nil Config.Theme = 'default' Config.Debug = false Config.Locale = 'en' ``` - `Interaction`: Interaction mode. `nil` = auto-detect, `'textui'` = force ox_lib text UI, `'target'` = force targeting - `Theme`: UI theme. Options: `'default'`, `'wasteland'`, `'cyberpunk'`, `'noir'`, `'fantasy'` - `Debug`: Print debug messages to server/client console - `Locale`: Language code for translations ## Tank Limits & Placement **shared/config.lua** ```lua Config.TANK_LIMIT_PER_PLAYER = 3 Config.PROGRESS_INSTALL = 5000 Config.ENABLE_DUI = true ``` - `TANK_LIMIT_PER_PLAYER`: Maximum player-placed tanks per character - `PROGRESS_INSTALL`: Time in milliseconds to place a tank - `ENABLE_DUI`: Show the animated 3D circle UI above tanks displaying fill level ## Auto-Deletion **shared/config.lua** ```lua Config.DELETE_OLD_DAYS = 10 Config.DELETE_OPTIONS = { DeleteOnlyIfEmpty = true, DeleteOnlyIfBroken = false, } ``` - `DELETE_OLD_DAYS`: Delete inactive tanks after this many days. Set to `false` to disable - `DeleteOnlyIfEmpty`: Only auto-delete tanks with 0 liquid - `DeleteOnlyIfBroken`: Only auto-delete tanks with 0 health ## Broken Tank Behavior **shared/config.lua** ```lua Config.BrokenTank = { AllowDismantleWhenBroken = true, AutoDrainOnBreak = true, AllowTakeFromBroken = true, BrokenSpillagePercent = 0.5, AllowFillBroken = false, } Config.FixedTankAutoHeal = { Enabled = true, HealPerMinute = 2.0, } ``` - `AllowDismantleWhenBroken`: Allow dismantling a broken tank even if liquid remains (liquid is lost) - `AutoDrainOnBreak`: When health hits 0, the tank liquid level snaps to 0 - `AllowTakeFromBroken`: Take / drain operations still work on a broken tank, with spillage - `BrokenSpillagePercent`: Fraction (0..1) of the transfer lost while broken. `0.5` = half wasted - `AllowFillBroken`: Allow filling a broken tank or pouring jerry cans into it - `FixedTankAutoHeal.Enabled`: Auto-heal fixed tanks (without `infiniteHealth`) so they never stay broken forever - `FixedTankAutoHeal.HealPerMinute`: Health restored every 60s tick. Set `0` to disable healing ## Liquid Types **shared/config.lua** ```lua Config.LiquidTypes = { ['water'] = { label = 'Water', color = '#3498db', colorDark = '#2980b9', viscosity = 0.3, waveSpeed = 1.0, waveAmp = 5, bubbles = 8, shimmer = false, transparency = 0.85, }, } ``` - `label`: Display name in the UI - `color`: Primary liquid color (hex) - `colorDark`: Secondary/shadow liquid color (hex) - `viscosity`: Liquid thickness. Lower = more fluid movement in DUI - `waveSpeed`: Speed of wave animation in the DUI circle - `waveAmp`: Wave amplitude in pixels - `bubbles`: Number of bubble particles in the DUI - `shimmer`: Enable shimmer/sparkle effect on liquid surface - `transparency`: Liquid opacity. `1.0` = fully opaque, `0.0` = invisible ## Weather Integration **shared/config.lua** ```lua Config.EnableRainCollection = true Config.RainyFillableTypes = { 'water' } ``` - `EnableRainCollection`: Tanks auto-fill during rain - `RainyFillableTypes`: Liquid types that accumulate during rain. Only types listed here are affected ## Container Types **shared/config.lua** ```lua Config.Containers = { ['small_tank'] = { prop = 'prop_air_watertank3', item = 'small_water_tank', capacity = 50.0, maxHealth = 100.0, decayRate = 0.5, type = 'water', interactionDistance = 2.5, spawnDistance = 30.0, duiDistance = 8.0, duiScale = 0.04, duiOffset = vec3(0.0, 0.0, -1.0), rainFillAmount = 0.15, repairItems = { ['steel'] = { addHealth = 50.0 }, }, }, } ``` - `prop`: GTA prop model name - `item`: Inventory item that places this tank - `capacity`: Maximum liquid capacity in liters - `maxHealth`: Maximum tank durability - `decayRate`: Health lost per decay cycle (every 60 seconds) - `type`: Default liquid type (must match a key in `Config.LiquidTypes`) - `interactionDistance`: Maximum distance to interact with the tank - `spawnDistance`: Distance at which the prop is rendered client-side - `duiDistance`: Distance at which the 3D DUI circle appears - `duiScale`: Size of the DUI circle - `duiOffset`: Position offset of the DUI relative to the prop center (`vec3`) - `rainFillAmount`: Liquid added per rain cycle (every 60 seconds) - `repairItems`: Items that repair the tank. Each entry specifies `addHealth` (durability restored per use) ## Item Conversions ### Extracting from tanks **shared/config.lua** ```lua Config.CollectItems = { water = { ['bottle_water'] = { amount = 1, add = 0.5, give = 'bottle_empty' }, }, } ``` - `amount`: Number of filled items to give the player - `add`: Liquid removed from tank per extraction - `give`: Empty container returned after extraction ### Filling tanks **shared/config.lua** ```lua Config.FillItems = { water = { ['bottle_empty'] = { remove = 1, take = 0.5, give = 'bottle_water' }, }, } ``` - `remove`: Number of empty items consumed - `take`: Liquid added to tank per fill - `give`: Filled item given to the player ## Jerry Cans **shared/config.lua** ```lua Config.JerryCans = { ['jerrycan_small'] = { capacity = 10, acceptsLiquid = { 'fuel', 'diesel', 'biofuel' } }, ['jerrycan_medium'] = { capacity = 20, acceptsLiquid = { 'fuel', 'diesel', 'biofuel', 'ethanol' } }, ['jerrycan_large'] = { capacity = 50, acceptsLiquid = { 'fuel', 'diesel', 'biofuel', 'ethanol' } }, ['kerosene_container'] = { capacity = 25, acceptsLiquid = { 'kerosene' } }, ['fuel_barrel'] = { capacity = 200, acceptsLiquid = { 'fuel', 'diesel' } }, } ``` - `capacity`: Maximum liquid the jerry can holds - `acceptsLiquid`: List of liquid types this jerry can accepts Jerry cans store dynamic fluid amounts via item metadata (`fuelType`, `fuelAmount`, `maxCapacity`). ## Fixed Tanks **shared/config.lua** ```lua Config.FixedTanks = { { id = 'sandy_shores_farm', tankType = 'large_tank', coords = vec3(-1414.2345, 5098.0386, 59.5271), heading = 90.0, }, } ``` - `id`: Unique identifier for the fixed tank (used in database) - `tankType`: Must match a key in `Config.Containers` - `coords`: World position (`vec3`) - `heading`: Rotation in degrees Fixed tanks cannot be dismantled by players. ## Discord Webhooks **server/config_server.lua** ```lua Config.Log = { saveTank = 'YOUR_WEBHOOK', fillTank = 'YOUR_WEBHOOK', takeWater = 'YOUR_WEBHOOK', repairTank = 'YOUR_WEBHOOK', dismantleTank = 'YOUR_WEBHOOK', jerryCanFill = 'YOUR_WEBHOOK', jerryCanDrain = 'YOUR_WEBHOOK', exploits = 'YOUR_WEBHOOK', } ``` - `saveTank`: Tank placement - `fillTank`: Liquid added to a tank - `takeWater`: Liquid extracted from a tank - `repairTank`: Tank repaired - `dismantleTank`: Tank dismantled and returned to inventory - `jerryCanFill`: Jerry can filled from a tank - `jerryCanDrain`: Jerry can drained into a tank - `exploits`: Anti-cheat alerts: rate limit, invalid coords, placement spoofing Set any webhook to `false` to disable that log entirely.