Call your car,
not a taxi.
rde_carservice delivers and stores garage vehicles through ox_core, with a real NPC driver and full property preservation — every modification survives every delivery. Request it from the phone, or fall back to a chat command that works even without one.
Overview
rde_carservice is a valet-style delivery/pickup system for ox_core garage vehicles. Request a stored vehicle to your location, or send a vehicle left in the world back to storage — an NPC driver spawns, drives it to you (or away), and every modification, plate, and stored property survives the round trip.
Quick Start
ensure ox_core
ensure ox_lib
ensure ox_target
ensure oxmysql
ensure rde_phone
ensure rde_carservice
The phone app appears on the homescreen automatically once rde_carservice starts — no extra setup beyond the dependency order above.
Chat Command Fallback
The phone app is the primary way to call this service, but /carservice works independently of it — same underlying lib.registerContext menu the phone triggers, reachable even if rde_phone isn't running.
Config.Command = {
enabled = true, -- fallback, stays on
name = 'carservice',
}
Configuration
Config.DeliveryCost = 750 -- cost to deliver a stored vehicle
Config.PickupCost = 500 -- cost to collect and store a vehicle
rde_parking Integration
Delivery fires a vehicleDelivered event that rde_parking listens for directly — no polling, no shared database table between the two resources. Vehicle ownership and stored state stay in one place.
Common Pitfalls
The old getVehicles callback used a Wait()-polling workaround
The NPWD-era phone bridge fired a net event and then polled a local variable with Wait() for up to 5 seconds waiting for a server response — a workaround for callback issues that were never actually specific to this data.
Fix: the phone app now calls the existing lib.callback.await('rde_carservice:getVehicles', false) directly — the clean callback already existed for the world menu, the polling detour was unnecessary.
Orphaned server-side push code, dead since the NPWD removal
A pushVehiclesToClient function and two related net events were left over from the exact workaround above — nothing on the client listened for them anymore once the polling was replaced, but they kept running on every player join.
Fix: removed entirely. Always grep for the client-side listener before assuming a server push mechanism is still load-bearing.
FAQ
Does the phone app replace the chat command?
No — both call the same underlying menu/callbacks. Neither is more "official" than the other.
What happens if the delivery times out?
The service auto-cancels after Config.ServiceTimeout seconds and refunds nothing already charged mid-delivery — configure this to match your server's typical player density.
Changelog
NPWD/Module Federation removed. Phone app rebuilt on rde_phone's SDK.
Vehicle-list polling workaround replaced with a direct callback. Orphaned server-side push code removed.