Exports and events
Vehicle cleaned
Listen for this from your own resource to run anything you want when a vehicle is fully cleaned — give a reward, log it, play an effect:
AddEventHandler('PressureWasherV2:VehicleCleaned', function()
-- the vehicle finished its last stage
end)How synchronisation works
Worth knowing if you are integrating:
- Cable attach/detach and spray start/stop are relayed through the server to every client, so other players see the hose, the jet and the foam
- Vehicle dirt is a native, synced state. The player doing the cleaning drives it and everyone sees the result
- Van doors are read straight off the vehicle's own door state, so every client agrees on whether a van is open without any syncing of our own
- On disconnect, a player's spray is stopped and their cable removed for everyone
Money
All money is resolved server-side. The client only ever names which washer it is working from. If you are adding your own payout, do it server-side too and validate against the player's real job.
Custom foam artwork
CustomTexture is off and the stock splatter is what ships. A custom image does work — it was built, shipped and then dropped because it looked worse in game, not because it failed. The findings, kept so nobody rediscovers them:
- A resource cannot register a new decal type. The IDs live in
decals.datinsidecommon.rpfand no data_file mounter exposes it decals.datdoes ship a block of MARKER slots (9100-9123) declared with no diffuse map. Those exist for a script to fill at runtime withPatchDecalDiffuseMap, which is what Rockstar's own mission scripts do- It only works on those empty slots. Patching a normal type like 1030 or 1040 does nothing — no error, no change — their texture is baked in and resolved at load
- Patching is per decal type, not per texture:
fxdecal_splatter_mistis shared by blood, mud, paint and water, but patching type 1040 leaves the other three alone - Only the diffuse map can be patched; there is no equivalent for the normal, so foam keeps the stock water-splatter normal
- Avoid 9120-9122 (camera-rotate flag) and 9105/9109/9113/9114 (they do not exist)
- Each slot holds one texture, so variety means patching several slots
- A texture patch outlives the resource that made it, so the script un-patches on resource stop — and only once the last foam mark has gone, because a decal samples its texture when it renders
Turning it back on needs the ytd in a stream/ folder, plus CustomTextureDict and a CustomTextureSlots list of { slot, textureName } pairs.
Can't find what you need? Ask on Discord — response in under 5 hours.
