Repair Garages Project is a beautiful addition to any roleplay server. 5 Unique locations and 2 interior styles makes each location experience unique. Actually working carlifts is a perfect touch to increase realism of your roleplay situations. Created with love and intent!
Integrated visuals and smooth layout for easy roleplay
🔁 Entity Sets
You can toggle the following themes using EntitySets:
1
2
Use them in your scripts or prop editors like Codewalker.
🪑 Custom Props
This map includes custom, streamed furniture and ambiance items:
Chairs:
v_corp_sidechair
xs_x18intvip_bar_stool
xm_lab_sofa_02
prop_off_chair_01
TVs & Screens:
car_service_chiilzone_det
🎯 Custom Prop Animations (ox_lib Required)
This project includes custom prop animations that enhance immersion and interactivity. These animations only function if ox_lib is properly ensured in your server.
⚠️ Make sure ox_lib is started before this resource.
Add this to your server.cfg if you haven’t already:
🪄 Activation Spots
Below are the locations where players can trigger animations on custom props:
Press "E" when looking at the RED button
Prop Names
Prop names are defined in each location's config. The default lifts use this naming pattern:
Prop
Name
Lift 1
prompt_sandy_is_lift_mechanic_1
Lift 2
prompt_sandy_is_lift_mechanic_2
Lift 3
prompt_sandy_is_lift_mechanic_3
Lift 4
prompt_sandy_is_lift_mechanic_4
Lift 5
prompt_sandy_is_lift_mechanic_5
Lift 6
prompt_sandy_is_lift_mechanic_6
Lift 7
prompt_sandy_is_lift_mechanic_7
Lift 8
prompt_sandy_is_lift_mechanic_8
Lift 9
prompt_sandy_is_lift_mechanic_9
Lift 10
prompt_sandy_is_lift_mechanic_10
The exact prop names depend on your config.lua. Check the name field of each prop entry to find the correct identifier for your setup.
Exports
getLiftState
isLiftBusy
setLiftState
isLiftBusy
liftAnimationComplete
Fires when a prop animation finishes.
🚪Doorlock System
This map includes a doorlock system to control access to specific areas. Below are the details for implementing the doorlock feature:
Doorlock Configuration
Add the following SQL lines to your database to configure the doorlock system:
🚀 Installation Guide
To install the Repair Garage map on your FiveM server, follow these steps:
Download the Map Resource
Ensure the prompt_repair_shops resource is downloaded and placed in your resources folder.
Add the Resource to server.cfg
Add the following line to your server.cfg to ensure the map loads when your server starts:
Set Up Doorlocks
Add the provided SQL lines to your database to configure the doorlock system.
Install MapData
For Sandy Area maps, ensure you have the correct MapData installed. Refer to the MapData Documentation for detailed instructions.
Test the Map
Restart your server and visit the map at it's location to ensure everything is working correctly.
For further assistance, contact support. Enjoy using Repair Garage on your FiveM server! 🚀
-- Returns: true (open/up), false (closed/down), or nil (unknown)
local isUp = exports['prompt_repair_shops']:getLiftState('prompt_sandy_is_lift_mechanic_1')
-- Returns: true if animating, false otherwise
local busy = exports['prompt_repair_shops']:isLiftBusy('prompt_sandy_is_lift_mechanic_1')
-- state: true = open/up, false = close/down
exports['prompt_repair_shops']:setLiftState('prompt_sandy_is_lift_mechanic_1', true)
```<div data-gb-custom-block data-tag="hint" data-style='warning'>`setLiftState` does not check if the prop is busy. You should check `isLiftBusy` first to avoid overlapping animations.</div></div><div data-gb-custom-block data-tag="tab" data-title='Server'>#### getLiftState
```lua
-- Returns: true (open/up), false (closed/down), or nil (unknown)
local isUp = exports['prompt_repair_shops']:getLiftState('prompt_sandy_is_lift_mechanic_1')
-- Returns: true if animating, false otherwise
local busy = exports['prompt_repair_shops']:isLiftBusy('prompt_sandy_is_lift_mechanic_1')
```</div></div>### Events<div data-gb-custom-block data-tag="tabs"><div data-gb-custom-block data-tag="tab" data-title='Client'>#### liftStateChanged
Fires when a prop animation **starts**.
```lua
AddEventHandler('prompt_repair_shops:liftStateChanged', function(propName, state)
-- propName: string (e.g. "prompt_sandy_is_lift_mechanic_1")
-- state: true = opening/going up, false = closing/going down
end)
AddEventHandler('prompt_repair_shops:liftAnimationComplete', function(propName, state)
-- propName: string (e.g. "prompt_sandy_is_lift_mechanic_1")
-- state: true = now open/up, false = now closed/down
end)
```</div><div data-gb-custom-block data-tag="tab" data-title='Server'>#### liftStateChanged
Fires when a prop's state is updated in GlobalState.
```lua
AddEventHandler('prompt_repair_shops:liftStateChanged', function(propName, state)
-- propName: string (e.g. "prompt_sandy_is_lift_mechanic_1")
-- state: true = open/up, false = closed/down
end)
```</div></div>
### Full Example
```lua
-- Client-side: listen for any lift across all repair shop locations
AddEventHandler('prompt_repair_shops:liftStateChanged', function(propName, state)
print(propName .. ' is now ' .. (state and 'GOING UP' or 'GOING DOWN'))
end)
AddEventHandler('prompt_repair_shops:liftAnimationComplete', function(propName, state)
print(propName .. ' finished animating, now ' .. (state and 'UP' or 'DOWN'))
end)
-- Raise a specific lift programmatically
local propName = 'prompt_sandy_is_lift_mechanic_1'
local busy = exports['prompt_repair_shops']:isLiftBusy(propName)
local isUp = exports['prompt_repair_shops']:getLiftState(propName)
if not busy and not isUp then
exports['prompt_repair_shops']:setLiftState(propName, true)
end