Pumps & Chargers
Use the station manager, save locations, register custom pumps, and adjust nozzle positions.
Choose what you need
| You want to... | Use |
|---|---|
| Place, move, duplicate, or remove a pump or charger | /fueladmin or /fuelpump |
| Place or change a fuel price sign | Price signs |
| Manually edit saved pump locations | data/pump_placements.json |
| Add a gas station icon to the map | Config.GasStations |
| Make an existing custom map pump usable | Config.AdditionalFuelPumpModels |
| Fit a physical display to a custom model | Custom displays |
| Move the nozzle on a particular vehicle | Config.CustomVehicleParameters |
A map icon does not create a pump. Registering a pump model enables interaction with that model; it does not place it in the world. Built-in pump profiles and placement defaults are internal, so normal setup does not require editing their geometry.
Admin access
Grant the editor permission to your existing admin group in server.cfg:
add_ace group.admin fs-fuel.admin allowYour admin accounts must already belong to that group. Config.PumpEditor.Ace changes the permission name, and Config.PumpEditor.Enabled = false disables editing. FS-Lib is required; FS-DevTools is not.
Open /fueladmin while on foot in the main world (routing bucket 0). The Station manager has Pumps and Price signs tabs. /fuelpump and /fuelsign open their respective tabs directly.
Place a pump or charger
- In Pumps, choose Gasoline or Electric. Gasoline placements serve both gasoline and diesel vehicles.
- Choose Place in world to drag the preview, or expand Precise adjustments to enter coordinates.
- Use Snap to ground if needed. You can also snap while using the world gizmo.
- Select Save placement to save immediately. Cancel discards the preview.
Search or filter the saved list to select a placement. You can move, duplicate, or delete FS-Fuel placements from any distance. Use Set waypoint when you want to visit one. Existing GTA or MLO map props are not editable through this list.
Duplicate placement opens an unsaved copy with the same model and settings. Saving gives it a new ID. Return a pump's active nozzles before moving or deleting it. Editor sessions expire after five minutes; if another admin changes placements while your preview is open, reopen it before saving.
World placement controls
| Control | Action |
|---|---|
| Left mouse button | Drag a gizmo handle. |
| W / R | Select move / rotate. |
| Q | Switch world / local axes. |
| G | Switch between handles and orbit-camera controls. Move the mouse to orbit and use the wheel to zoom. |
| Z | Snap to ground without leaving the gizmo. |
| Enter | Save the placement. |
| Esc | Cancel the preview. |
| Backspace | Reset position and rotation to the start of this gizmo session. |
| F2 / Left Alt | Open details while preserving the camera and current preview. |
Choose Place in world or press Left Alt to resume from details. World shortcuts are inactive while typing in the panel or saving. Handles must be visible to drag; use coordinate fields for distant placements.
Precise adjustments
X, Y, and Z are world coordinates in meters. Heading is in degrees. Fields apply when you press Enter or leave the field; there is no separate Apply button. Nudge controls move by 10 cm, or 1 cm with fine steps enabled. Rotation steps are 5 degrees, or 1 degree in fine mode.
Save and Cancel remain visible below the scrolling inspector. Full rotation, including tilt from the gizmo, is saved with the placement.
Saved pump locations
The running resource stores placements in data/pump_placements.json. In-game saves synchronize immediately with players and do not require a restart.
For manual editing, stop FS-Fuel, keep existing entries and unique numeric IDs, then restart afterward. The document has version: 1 and a placements array:
{
"version": 1,
"placements": [
{
"id": 1,
"type": "electric",
"coords": { "x": 1974.9941, "y": 3750.9226, "z": 32.1807 },
"heading": 120.1938
}
]
}Use gasoline or electric for type. Coordinates are examples; adjust them for your map. Z is the object's actual height. JSON uses quoted keys and plain numbers, with no comments, trailing commas, or Lua vector3 / vector4 calls. The editor allocates IDs automatically; gaps after deletion are normal.
Optional settings for one placement
Add only the fields you need. Recognized built-in models inherit their fitted hose profile and nozzle capacity.
| Field | JSON example | Meaning |
|---|---|---|
model | "my_charger" | Use a different streamed model. |
maxNozzles | 2 | Available nozzle slots on this pump; 0 disables pickup. This is separate from the per-player limit. |
verticalOffset | 1.0 | Interaction prompt height. |
ropeOffset | [0.0, 0.0, 1.4] | A single hose origin in model-local forward, right, up meters. |
ropeOffsets | {"left": [0.0, -0.3, 1.4], "right": [0.0, 0.3, 1.4]} | Separate origins for the two nozzle slots. |
displayStyle | "classic" | Liquid-fuel meter style: modern or classic. Chargers use electric. Physical screen geometry is configured separately. |
rotation | {"x": 0.0, "y": 0.0, "z": 90.0} | Full rotation in degrees; keep heading consistent with Z. |
placeOnGround | true | Ask GTA to ground the prop when spawned. Omit for the exact saved position. |
enabled | false | Keep the entry but disable the placement. |
The numbers above illustrate the format, not a universal fit for custom models.
Backups and updates
Before each admin save, the previous valid snapshot is stored in data/pump_placements.json.bak. Signs have their own JSON and backup. If a file is missing or invalid, that placement store is disabled without overwriting it. Repair the file or restore a valid backup, then restart.
When updating FS-Fuel, preserve your config, custom screen entries, pump and sign JSON files, and custom integration edits. Do not replace your live placements with the fresh package's defaults.
For source builds, copy in-game placement changes back into src/data/pump_placements.json and src/data/sign_placements.json before building. Builds copy those files into the output resource and do not make placement backups.
Electric chargers
The resource includes ev_charging_station and ev_connector. Keep the supplied asset layout and manifest together:
| Asset | Location |
|---|---|
| Charger model and archetype | stream/electric/station/ |
| Handheld connector model and archetype | stream/electric/connector/ |
| Sign meshes and digits | stream/signs/ |
| Sign archetype | stream/metadata/fs_gas_sign.ytyp |
Their .ytyp paths are already registered in fxmanifest.lua. No separate model download is needed for the included charger, connector, or signs.
To use a different charger, set its placement's model in JSON, or register it as a custom map pump below. Set Config.NozzleModels.electric if replacing the handheld connector too. Stream your custom assets and register their archetypes in their model resource; start that resource before FS-Fuel. Fit the new charger's physical display separately.
Keep Config.Electric.Enabled = true. Charger start/stop sounds and the shared fan loop are included; Config.Sounds controls playback. Two charging connectors share one fan loop, which stops when neither is charging.
Use a pump already on your map
The standard GTA pumps are already registered. For a custom map prop, add its model name inside Config.AdditionalFuelPumpModels:
{
hash = 'my_pump_model',
energyType = 'gasoline',
maxNozzles = 2,
displayStyle = 'modern',
verticalOffset = 1.0,
nozzleSides = { axis = 'y', negative = 'left', positive = 'right' },
ropeOffsets = {
left = { 0.0, -0.3, 2.3 },
right = { 0.0, 0.3, 2.3 },
},
},Measure the hose origins for your model in forward, right, up meters. The example's nozzleSides assigns the front (negative-Y) face to the left slot and the rear face to the right slot, matching the custom screen example. Adjust this for your model, or omit it to choose the nearest hose origin. Use energyType = 'electric' and displayStyle = 'electric' for a charger; its connector slots should match its actual left/right outlets. The map or another resource must place the prop. Display registration is separate; see Custom displays.
Map icons
Add an entry inside Config.GasStations:
{
coords = { x = 2000.0, y = 3775.0, z = 32.0 },
label = 'My gas station',
blip = { sprite = 361, colour = 2, scale = 0.65, shortRange = true },
},Only coords is required. Other fields inherit Config.StationBlips. Set blip = false or enabled = false on an entry to hide its icon. Icons do not spawn pumps or signs.
Adjust a vehicle's nozzle position
Add the vehicle's spawn name inside Config.CustomVehicleParameters, keeping the existing default entry:
['my_vehicle'] = {
nozzleOffset = { right = 0.2 },
},forward, right, and up move the nozzle in meters relative to the vehicle's fuel point. nozzleRotation = { x = 0.0, y = 0.0, z = 0.0 } adjusts its angle in degrees. Omitted values retain their existing defaults. Restart FS-Fuel and check the position in game.
Command shortcuts
/fuelpump add gasoline and /fuelpump add electric preview new placements. /fuelpump move, /fuelpump duplicate, and /fuelpump delete select the nearest saved pump through the same editor. Use the panel to choose a specific placement.