Vehicle Data File
This shows you how to setup your vehicle data file, an important step in the Smart Vehicle creation process. This document is designed for developers.
Data File Creation
This documentation is designed for vehicle developers and you should have relevant experience in this area.
If you've got to this part, your vehicle should now be ready to create a data file. You should have:
Your base vehicle (with no attached parts, such as ladders)
All moveable parts exported separately as props
Default offset & rotation values for all props recorded
Maxmum offset & rotation values for all props recorded
Throughout this document we will refer to the included fire truck and the data file that enables it to work with Smart Ladder. As this vehicle is fully setup, it should provide a good starting point and reference for setting up your own vehicles with the resource.
Creating vehicle data files for use with Smart Ladder may at first appear confusing, but once you've read this and started doing it yourself, you'll soon get the hang of it.
Automatic Setup
Most vehicles (with only one setup) will automatically setup with Smart Vehicle, meaning the vehicle will automatically run /setupvehicle
when a player gets in the drivers seat. As developers, you have the option to disable this for a specific vehicle in the vehicle lua file:
firetruk = {
model = `firetruk`,
name = "FireTruck",
id = 1,
disableAutomaticSetup = true
Just set disableAutomaticSetup to true in the vehicle lua file, disabling automatic setup for that model.
Trailer Setup
Some vehicle creators have chosen to setup Smart Ladder as a trailer vehicle. To enable this, we have added code which informs the resource that the vehicle is a trailer, preventing it flipping out of control.

To enable this, just add a new line in the vehicle data file named isTrailer = true.
Cab & Trailer
Sometimes, users want to be able to have both a cab and a trailer with their own Smart Vehicle setups. To allow this to work, add this line to the cab vehicle lua file:
isCab = true,
Data File Creation
Throughout this documentation, you should have the firetruk.lua file open in the vehicles folder in order to refer to it.
firetruk = {
-- Our data goes here
}
addVehicle(firetruk)
All data files begin with the name of the vehicle, such as firetruk surrounded in brackets. At the bottom of the file, we use the addVehicle(vehicleName) function to add the data to the SmartLadder resource.
You can likely create multiple vehicle files by cloning an existing one and just making changes. This ensures you have the structure the same, as often fire vehicles are very similar.
There are several configuration values which are relevant, but we'll go through later. These three at the start though should be completed now:
model = `firetruk`,
name = "Fire Truck",
controlToOperate = {73, "INPUT_VEH_DUCK"},
Here you should add the model of the fire truck, surrounded by this symbol: `` . You can set the name of the fire truck to anything you like, this is just a reference for the vehicle as we plan to add logging in the future.
The controlToOperate value is the key that a user will press to start controlling the vehicle. By default, this is X but you can use the controls list found on the FiveM documentation here to change it.
You should set the number to the control index and the string next to it is the name of the control, taken from the FiveM control list documentation.

Here's an example for the key D, you should set the number to 9 and the string to "INPUT_VEH_DUCK".
controlToOperate = {9, "INPUT_VEH_DUCK"},
You have now successfully changed the key to operate the vehicle. We'll now move onto setting up the props, the more complicated part.
Dynamic Attachment Feature
As Smart Vehicle developed, we added the option for you to allow dynamic vehicle attachments. This means you can create vehicles such as flatbeds, drive a vehicle onto it and just press E to attach.

The vehicle you are sat in when you press E (configurable in the Smart Vehicle config.lua file) will then attach to the Smart Vehicle below it. To work, you must set the following line in the Smart Vehicle:
enableDynamicAttachment = true,
Disable Outside Control
We've added the option for you to disable outside control of the vehicle, meaning a player will no longer be able to control the vehicle without being in the driver seat. This is perfect for construction vehicles where it would make no sense for the vehicle to be controlled by anyone not driving it!
To disable outside control, add the following line to the data file:
disableOutsideControl = true,
Please note that if you have disabled outside control, you will need to setup controlling while driving, as set out in the section below.
Control while driving
We've added the ability for you to allow vehicles to be controlled whilst a player is driving. This is perfect for making construction vehicles and other types which require parts to move whilst driving.
To allow a vehicle to be controlled whilst driving, add the following line to the data file:
operateWhileDriving = true,
Whilst a player is driving a setup smart vehicle, they can press the control key to begin controlling the vehicle whilst driving. Please note, a player is unable to leave the vehicle until they stop controlling the vehicle and a message will be displayed to show this if they attempt to do so.

Data Entries
For this next part, you'll need to navigate to the data = {
section of the vehicle data file. This is where we'll define all of the props that need to be installed on the vehicle and the position in which that should be done. You'll also define the control for moving each prop and the way in which it should move, along with the maximum and minimum off set and rotation values.
data = {
-- Data entries here
}
The data section is essentially a table of data entries. Each entry is wrapped in brackets: {}.
Every moveable part of the vehicle needs a data entry. For example, on our released ladder as part of this resource, we have the following data entries:
Ladder Seat - this rotates left and right
Ladder Base- this rotates up and down
Ladder Outer - this is the external ladder
Ladder Middle - this is the middle ladder
Ladder Inner - this is the internal ladder
Ladder End Piece - this is the rotating end of the ladder
Cage - this is the cage at the end that rotates
Outrigger 1 - This is the first outrigger
Outrigger 2 - This is the second outrigger
Outrigger 3 - This is the third outrigger
Outrigger 4 - This is the fourth outrigger
Foot1 - This is the first foot
Foot 2 - This is the second foot
Foot 3 - This is the third foot
Foot 4 - This is the fourth foot
As you can see this one vehicle needs a large amount of data entries to successfully operate with SmartLadder and hopefully gives you an idea of what a data entry is. For example, even though the outriggers are using the exact same prop name, as they are all in different positions on the vehicle, they all need their own data entry. Setting all their controls to the same is the key factor that allows them all to move at the same time, which we'll discuss in more detail throughout this documentation.
A data entry
Each data entry needs a number of core values, we'll go through them one by one and tell you what it is for and how you can set it.
ID
The ID (id = "LadderSeat",
) value must be unique for this data entry. This can be anything that identifies that prop, for example we've set the first one to "LadderSeat". ID's are used throughout the data section.
For example, if you want another prop to attach to the LadderSeat prop, you'll need to reference the LadderSeat data entry ID later. We'll go into more detail on this though.
Keep Collision
For some Smart Vehicles, you may want to keep collision enabled on a certain prop while you are controlling it, such as flatbeds where you drive a vehicle onto the bed, begin controlling before using the attach vehicle function.
keepCollion = true,
Setting keepCollision will keep collision enabled on that specific prop when controlling.
Model
model = `ladder_seat`,
The model value is the model of the prop. This doesn't need to be unique, so if you have four data entries for four outriggers, they can all use the same model name and it will work perfectly fine. Just make sure your model is wrapped in this symbol: ``, as this ensures runtime hashing and improved efficiency.
This should be the name of one of your addon props that you created earlier and exported from either ZModeler3 or another software.
usesConvertibleRoof Property
Often, developers may use animations as part of a convertible roof to improve the vehicle experience, such as our Water Carrier and command unit. In order to integrate this into one of our menus, you'll need to set this property:
usesConvertibleRoof = true,
You can then use control 74 (the default convertible roof key) in menus for it to work.
isLadder Property
isLadder = false,
This is a simple true or false and determines whether the data entry is a ladder. For our base vehicle, we setup the three ladders next to each other as a data entry and enabled this for all three.
The reason we have a separate isLadder property is because ladders move differently to other props. For example, you press one control to move all outriggers at once (and their data entries have the same control value, allowing this). With a ladder though, we don't want them to move at the same time, but instead one by one.
If you want them all to move at the same time, you should be good to disable this as some american fire trucks work in this way, allowing a faster extension of the ladder.
Remember that you need a separate data entry for each ladder. For our base vehicle we have Ladder Outer, Ladder Inner and Ladder Middle. All three have the isLadder property set to true, meaning that they don't all extend at the same time.
disableControlWhileDriving
This configuration value allows you to disable specific props from being controlled while driving. For example, you may have a vehicle which can be controlled while driving and also outside, yet you only want some parts of it to be available from behind the wheel.
disableControlWhileDriving = true,
For this to have an impact, you must also have enabled
operateWhileDriving = true,
at the top of the vehicle lua file.
attachTo Property
This configuration value is very important and makes use of ID's for data values.
Essentially, this defines where you want the current data entry/moveable prop to attach to. You have the option of choosing another data entry and entering the ID of it here, or using the term "vehicle", which will attach it to the vehicle.
For example, in the LadderSeat data entry, we have the following attachTo property:
attachTo = "vehicle",
This is because the ladder seat needs to attach to the vehicle and rotate.
If you are attaching to a vehicle, you have the option to choose a bone index:
boneIndex = "engine",
As props are unable to utilise bone indexes, this property will only work when attaching a prop to a vehicle, such as attaching a prop to the bonnet or engine. You can find a list of base game bone indexes online here (not all relevant to every vehicle), or you can even add your own bone indexes in 3D modelling softwares.
If we look at the next data entry for our included vehicle, it has a different attachTo property:
attachTo = "LadderSeat",
Instead of using "vehicle", we are using "LadderSeat" which is the ID of the ladder seat prop. This will attach the ladder base prop to the ladder seat prop.
This is essentially how it works throughout. For example, for all four outriggers, you'll want them to attach to the vehicle, so you can set it to "vehicle". In contrast, for the cage, you'll want that to either attach to the end of the ladder or a ladder end piece, so you'll find the ID for that data value and enter it here.
Whilst this may seem complex, once you try it in-game, you should soon have the hang of it. You can always test the vehicle out in-game as you go along, adding a data entry then restarting the resource and trying it out to see if your changes worked.
If you need assistance with this, our support team may be able to help, although they have limited experience in vehicle creation. We are seeking to have a team just for assisting with the SmartLadder resource.
Default Offset
By this point, you should already have the default offset for the data point. This is the offset that it will attach to, relative to the prop/vehicle it is attaching to.
defaultOffSet = {0.0, -2.0, 1.17},
offSet = {0.0, -2.0, 1.17},
You should enter this value that you obtained earlier using a menu such as menyoo into both the defaultOffSet and the offSet values.
In this example, the ladder base will attach to the ladder seat with an offSet of 0.0 left/right, -2.0 forwards/backwards and 1.17 up/down.
{Left/Right, Forward/Backwards, Up/Down}
This is the format used and we'll talk more about this later when we start configuring the movement of these props and data entries.
Default Rotation
This is exactly the same as the default offSet, except this is for rotation. You should have already obtained this value earlier using a menu such as menyoo.
rotation = {0.0, 0.0, 0.0},
{X, Y, Z}
This allows you to rotate the pitch, yaw and roll properties of the data entry. For our ladder base, we wanted the same rotation as the ladder seat when it attaches, as it sits just ontop of it so we set the rotation to 0 for all three values.
Minimum/Maximum Rotation
This allows you to set a minimum/maximum rotation value for the prop. You can set both or just a minimum/maximum or no limits at all.
For example, with our cage data entry, we don't want it to be rotated a full 360 degrees as it would collide with the ladder, so we gather the rotations needed and then set the maximum/minimum values in the data entry.
At the top of the configuration file, you can enable the following value to draw the rotation on the screen, this can assist in perfecting the maximum/minimum values:
drawRotation = true,
Here is the maximum and minimum rotation values for the cage:
minRotation = true,
minimumRotation = {-102.6667, 0.0, 0.0},
maxRotation = true,
maximumRotation = {90.3321, 0.0, 0.0},
As you can see, if you want a minimum rotation, you'll need to enable minRotation. This is the same if you want a maximum rotation, you'll need to enable maxRotation and then set the values for both.
Minimum/Maximum Offset
This allows you to set a minimum/maximum offset value for the prop. You can set both or just a minimum/maximum or no limits at all.
For example, with the ladders we only want them to be extended as far as the prop or even the outriggers should only be extended as far as they are visible with the vehicle. This is why a minimum and maximum value is important.
As the cage doesn't move, we don't need off set maximum/minimum values like we did for the previous example. Therefore, we'll use Ladder Outer instead to showcase this:
minOffSet = true,
minimumOffSet = {0.0, 2.69, 0.0},
maxOffSet = true,
maximumOffSet = {0.0, 8.3801, 0.0},
As you can see, if you want to set a minimum offSet value, you'll need to enable minOffSet and the same for a maximum offset, setting maxOffSet to true.
Toggle off by default
One of the action types for props is the ability to toggle it on and off, which is explained further down in the controls section. Smart Vehicle has the ability for you to set it to be toggled off initially, making it invisible but still allowing it to be connected to other props.
To do this, just set the following line of code on the prop:
toggleOffInitially = true,
Controls
This is where we'll define which controls move the prop and in which way. A single control can either rotate the prop or move it (changing the offset).
Multiple data entries can use the same control, this is how all four outriggers are able to move at the same time. By setting them all to the same control, the script is able to do that.
To begin, you'll need to choose a control from the FiveM controls list here. You'll need to find the control index of the key you want.

For example, the control D has an index of 9. You may find multiple indexes of the same control, just try the first one and if it doesn't work, you have others to also try.
You will need to create or navigate to the controls = {
section of the data entry.
For reference purposes, we'll use the OuterLadder data entry as an example. There are two ways of setting up controls within a data file:
Option 1:
[131] = {
movementType = "move",
axis = 2,
movementAmount = 0.01,
},
This is the original way that movement keys were added within Smart Vehicle. Since the introduction of the resource, we have enabled a second way to add keys:
Option 2: (preferred)
{
control = 131,
movementType = "move",
axis = 2,
movementAmount = 0.01,
},
The reason we provide the second option is because within an object in lua, each key must be unique (the control name in square brackets). Therefore, if we wanted the control 131 to move two different axis, this would be impossible by setting up two separate movements on the same keybind using option 1. Option 2 enables us to use the same key multiple times within the same data ID.
Dual Controls
Some complex Smart Ladder vehicles may have 20+ moveable parts, all of which could require their own unique keybind to operate. For this reason, we have added dual controls to allow you to require a user to press two keys at once before allowing a certain movement or rotation.
To setup a new dual control, add a new control as normal (such as the one above). Next, inside the control table, you'll need to add a new value secondaryControl:
[63] = {
secondaryControl = 26,
movementType = "rotate",
axis = 3,
movementAmount = 0.1,
},
As you can see, the main control for this code block is 63 (which is A), however the secondaryControl has been set to 26 (which is C). Therefore, in order to rotate this part, a user must press A and C at the same time. This allows you to increase the possibilities of vehicles with Smart Ladder.
Movement Types
The movementType
property can either be "move", "rotate", "attachVehicle", "spin" or "toggle"
If it is set to "move", it will adjust the offSet of the prop, based on your desired settings.
If it is set to "rotate", it will adjust the rotation of the prop, based on your desired settings.
If it is set to "attachVehicle", pressing the specified key will allow it to hook/pickup a vehicle, as seen with our recovery truck.
If it is set to "spin", the prop will continue to spin with your desired settings until the key is pressed again, even if you stop controlling the vehicle.
Attach Vehicle - More Information
Under the movementType = "attachVehicle"
property you are also able to set some other values:
overrideOffSet = false,
boneIndex = "engine",
offSet = {0.0, 0.0, 1.5},
rotation = {0.0, 0.0, 0.0}, },
rotationOrder = 0,
reverseOffSet = false,
rotationOrder = 0,
Firstly, you are able to set the offSet and rotation relative to the prop which the vehicle will be attaching to. This might be a hook or the bed of a trailer.
The boneIndex value is optional, but allows you to set a boneIndex to attach to on the vehicle.
Our resource will automatically work out the position to attach the vehicle to the prop and then add your offSet values onto it. For example, you may want to attach a vehicle to the bed of a trailer. Our resource will automatically work out the position once it is on the trailer, however you may want to move it up or down so your offSet is added to this. In the example above, the offSet is increased by 1.5.
If you enable reverseOffSet, this will calculate the offset from the vehicle to the prop but then reverse them. This may be useful for a recovery truck for example where you are driving a vehicle onto a bed, wanting it to attach at the exact position where it is driven onto.
Rotation Order is an optional value, allowing you to set the rotation order. For more info, see the FiveM utils page regarding the different rotation orders here. By default, we use 1 if not set.
If you enable overrideOffSet, this will use your offSet values fully and ignore our resource's calculation of the vehicle position relative to the prop. You may want to try both and see what works for you.
Toggle Movement Type
By setting a control type to "toggle", you are able to make the toggle the visibility of a prop in-game. This may be useful for vehicle extras and other misc props.
To begin, create a new control with a movement type of "toggle":
[101] = {
movementType = "toggle",
},
Next, press this control in-game and the configured prop will turn visible / invisible.
Spinning Movement Type
By setting a control movement type to "spin", you are able to make the prop continuously spin even when you are not controlling the vehicle. This may be useful for vehicles with warning signs ontop or any other type of construction vehicle.
To begin, create a new control with a movement type of "spin":
[39] = {
movementType = "spin",
removeSmoke = false,
axis = 3,
movementAmount = 0.3,
movementSpeed = 100,
},
Within this control, you must set the axis and movementAmount as usual (just how you would for the "move" or "rotate" movement types).
The new value movementSpeed must also be added. This is a value in milliseconds and means the spin will take place every X amount of milliseconds and move by your set movementAmount on the axis chosen. For example, the code above will spin 0.3 on axis 3 every 100 milliseconds (quite fast).
Remove Smart Vehicle Smoke
A spinning movement type has the ability to remove smoke created by Smart Fires, our fire resource used by thousands of servers. This may be useful for vehicles with an integrated fan, such as fire appliances. To enable this, just set removeSmoke to true within a spin movement type, seen above.
LadderOuter Example:
As we are looking at the LadderOuter here, we will want it to move up and down and not rotate at all. A prop can do both though, it must use different controls for it.
Therefore, we set the movementType
to "move" for both the OuterLadder and all other ladders as we just want to change the offSet.
Axis
Once you have set the movenent type, you'll want to configure which axis you want it to move on. This is a number between 1 and 3.
If the axis is 1, it will move the first value in either the rotation or offSet. If the axis is 2, it will move the second value and if the axis is 3, it will move the third value.
rotation = {0.0, 0.0, 0.0},
-- {Axis1, Axis2, Axis3}
offSet = {0.0, -2.0, 1.17},
-- {Axis1, Axis2, Axis3}
For the ladders, we have set the axis to 2. As we've set the movement type to "move" this means it will change the second value of the offSet property. This means forwards/backwards. If the axis was set to 1, it would move left and right and if the axis was set to 3, it would move up and down.
As it is a ladder however, we want it to move forwards and backwards, so an axis of 2 is pefect. For other props such as outrigger feet, you'll want them to move a different way, namely up and down, so you'll want a different axis (up and down would be 3). Outriggers for example may move left and right, so their axis would be 1, depending on how the prop is setup.
Movement Amount
The movement amount property determines by how much the prop is moved or rotated when the key is pressed. Remember the key can be held down, so you won't want to set this too high.
From our experience, you'll want higher movement amounts when you're rotating a prop, compared to just moving it, this is because it operates within a bigger scale.
For example, we've set the movementAmount to the following for LadderOuter:
movementAmount = 0.01,
This can also be seen as the speed at which the ladder will move, which we've set to 0.01. This is relatively slow, but as we want it to appear synced to the best extent for other players, it's best not to have this too fast.
Reducing
Remember that you'll also need a control for reducing the value. For example, in the context of ladders, this means one key to extend them and one key to retract them.
Here's the control setup for retracting the ladder outer, which is also the same for the other ladders:
[132] = {
movementType = "move",
axis = 2,
movementAmount = -0.01,
},
To quickly run through this, we have a control index of 132 setup. This is LEFT CTRL after searching the FiveM controls list. The movement type is set to "move", meaning it will adjust the offSet on axis 2, which is forwards and backwards (as it is a ladder). This time though, the movement amount is set to -0.01. This is because we are retracting the ladder, not extending it.
Data Entry Completed
You've now got to the end of adding a data entry. You aren't completely done though and there's still a couple of key configuration values to add which we missed at the beginning. Head to the top of the config.lua and we'll get started:
Ped Attachment Point
pedAttachment = {
id = "LadderSeat",
offSet = {-0.91, -1.89, 0.63},
rotation = {0.0, 0.0, 0.0},
},
This is the point at which the ped will attach to the vehicle once they are controlling it. You should specify the ID once again of either "vehicle", to directly attach them to the vehicle, or the ID of a data entry.
In our included fire truck, you can see we have specified the ID of "LadderSeat". This will attach them to the ladder seat prop with the specified offSet and rotation. This visually puts them into the vehicle seat.
Animation & Prop
This is the animation settings for the ped once they are attached to the vehicle/prop, when they are controlling it.
animation = {
enabled = true,
idle = {
dict = "anim@arena@amb@seating@seat_b@",
name = "base"
},
prop = {
enabled = true,
model = "bv_controller",
attachToPed = {
boneIndex = 18905,
offSet = {0.3, 0.0, 0.18},
rotation = {60.0, -69.0, 173.0},
}
},
},
If you don't want an animation, you can set enabled to false. Additionally, you should then set the animation dict and name within the idle = {
section. We plan to add an animation for entering the seat in the future, which is why we've named this idle for now.
A menu such as menyoo contains a full list of animation dictionaries and names. Alternatively, you can find a full list here.
Prop Attachment
Inside the animation section, you also have the option to enable a prop which will be attached to the vehicle. In the example above, we attach a controller prop to the player which is used for our Scissor Lift and Recovery Truck, see in the photo below:

Developers are free to use this prop in any Smart Vehicle and the prop is already in the stream folder for the Smart Vehicle resource, meaning you won't need to include a separate one in your release (although you can make your own control panel prop if you like).
The attachToPed section allows you to set the following properties:
Bone Index - This is the bone index of the ped that the prop will attach to. For a full list of bone indexes, see here. Alternatively, use -1 for no bone index, meaning it will attach to the centre.
OffSet - As with setting up the props for Smart Vehicle, this is the offset from the ped (or the bone index of the ped if using one) that the prop will attach to.
Rotation - As with setting up the props for Smart Vehicle, this is the rotation of the object relative to the ped (or the bone index of the prop if using one) that the prop will attach to.
The prop attachment will not work when controlling the vehicle whilst driving, or when in the cage.
Cage Settings
This is where you'll define the ID of the ladder cage and also the position where the ped should attach to. This setting is important because people can enter the cage using /entercage and exit using /exitcage.
cage = {
controlFromCage = true,
enabled = true,
id = "Cage",
offSet = {0.0, 0.5, 1.05},
rotation = {0.0, 0.0, 0.0},
},
If you don't want this setting enabled, as your vehicle may not have a cage for example, you can just set enabled to false.
The ID should be the ID of the data entry you have setup for the cage. In our included vehicle, this is simply named "Cage", but it can be anything.
Enabling controlFromCage will allow you to start and stop controlling the vehicle whilst inside/near the cage, including whilst attached to the cage using the /entercage
and /exitcage
commands.
The offSet and rotation is relative to the prop and this is the point where the ped will attach to. {0, 0, 0} may work, which would attach them to the centre of the cage, but with our included vehicle, we found it was too low down so we modified it to move them slightly forward and up, producing the following offset:
offSet = {0.0, 0.5, 1.05},
Multiple Ladders
You are able to setup different ladders to work for the same vehicle model in-game, allowing a user to select their desired ladder at the time of setup.
Each separate ladder requires a new .lua file, but with the following changes:
name = "FireTruck",
id = 1,
If you have multiple .lua files with the same vehicle model specified you must now add a different ID number to each of them. For example, if you have two vehicle files both for the firetruk model, one could have an id of 1 and the other an id of 2.
Lastly, the name must be one word, allowing a user to select it in-game with the /setupvehicle command.
Door Controls
Smart Vehicle allows for vehicle doors to be controlled by a keybind (and also then through a control menu). To do this, setup a doors section in your data file, such as the one seen below:
doors = {
enabled = true,
controls = {
[210] = 1, -- [Control] = Door Index,
}
},
The value in the brackets [210]
is the control, from the list here.
The value after the = is the door index, from the list here.
This will toggle the status of the door. If our resource detects that the door is closed, it will open it. If it detects it is open, it will close it. This will not work for all vehicle doors as some will not be setup properly to use this native on.
Spotlights
Smart Vehicle allows for working spotlights to be emitted from different props. To do this, setup a spotlight section in your data file, looking like this as an example:
spotlight = {
enabled = true,
control = {0, 101},
locations = {
["Cage"] = {
{
directionOffSet = {0.0, 10.0, 0.5},
color = {221, 221, 221}, -- rgb
distance = 70.0,
brightness = 70.0,
hardness = 2.3,
radius = 25.0,
falloff = 25.0,
},
},
["vehicle"] = {
{
directionOffSet = {0.0, 10.0, 0.5},
color = {221, 221, 221}, -- rgb
distance = 70.0,
brightness = 70.0,
hardness = 2.3,
radius = 25.0,
falloff = 25.0,
},
},
}
},
You can set the control used at the top of this section, which toggles all spotlights at the same time.
In the locations section, you may specify as many different items as you want. Each section within the locations table must reference the id name of a data reference later, such as "Cage" or "LadderSeat". Within that specific reference (such as cage), you can then setup multiple spotlight points, such as having two spotlights on the cage or front of your vehicle.
You can make spotlights come from the vehicle by setting the reference to "vehicle", as seen above in the example code.
Each entry requires the following values:
directionOffSet - This is the direction offset of the spotlight in relation to the prop.
For example: {0.0, 0.0, 90.0} - this would shine the light to the left of the prop
Color - This is an RGB value.
Distance - This is the maximum distance that the light can reach.
Hardness - This is the smoothness of the light edge circle
Radius - This is the radius size of the spotlight
Falloff - The fallout size of the light's edge
It is worth experimenting with these values to make sure they are perfect for your vehicle.
Working Water
Smart Vehicle allows for working water/particle effects to be emitted from different props. To do this, set up a water section in your data file, looking like this as an example:
water = {
enabled = true,
locations = {
["Cage"] = {
{
control = 101, -- h
scale = 1.0,
asset = "core",
name = "water_cannon_jet",
offSet = {0.33, 1.25, 0.45},
rotation = {-10.0, 0.0, 0.0},
},
{
control = 101, -- b
scale = 1.0,
asset = "core",
name = "water_cannon_jet",
offSet = {-0.33, 1.25, 0.45},
rotation = {-10.0, 0.0, 0.0},
},
},
}
},
In the locations section, you may specify as many different items as you want. Each section within the locations table must reference the id name of a data reference later, such as "Cage" or "LadderSeat". Within that specific reference (such as cage), you can then setup multiple particle points, such as having two water monitors on the rear of the cage as seen with our rearmount ladder.
Each water point within a location can have a control set, which can be the same for all of them, or unique, meaning you can control different water monitors with different controls.
You can make particles/water come from the vehicle by setting the reference to "vehicle", as seen above in the example code.
Each entry can have a different scale, particle asset and name, along with the offset and rotation which is relative to the prop (such as the cage in this case).
For a list of particles including the asset and particle name, see here.
Custom Features
We're always adding new features to Smart Ladder to allow third party developers to make new and realistic vehicles. Get in touch with us if you want something added and we'll try our best!
Finished
You are now ready to begin using your ladder in-game. If you have any questions, please reach out to our Support Team.
Last updated
Was this helpful?