Creating your own stable location is fairly easy. Here are a couple of steps :
First open STABLES.lua from the CONFIG folder
Each stable table in the config will be used for the horses, wagons and breeding scripts.
It's combined in a single table for easier setup.
To keep the correct format, copy/paste the entire stable table and place it directly underneath the previous one. Make sure you only change the index number (from [12] to [13]) and then edit the values inside.
Finally, double-check the closing } at the end of the main table and make sure it stays in place. This bracket closes the full stables table and should not be moved or removed.
Next step is changing the name, title_given and the coords
To easily get the coords you're going to need a tool for this. I personaly use the spooner, it's easy to use and allows you to copy paste the coords.
now there is several spooner versions so make sure yours display coords on the left when pressing the del key. You can download the spooner version I use directly from our discord file channel section.
To get ped or static coordinates, I usually spawn a ped using:
DEL → F → PEDS → select your ped → E
Then, aim at the ped and press Tab to display its properties. You will be able to copy its coordinates from there.
For easier setup, it’s recommended to freeze the ped in place.
Blip coordinates use Vector3:
x, y, z
Some parameters like horsepos or pedcoords use Vector4:
x, y, z, heading
The heading is a float value that controls the direction the ped or preview horse is facing. This is purely cosmetic and depends on your preference.
The horsepreviewcamoffset param is simply an X and Y offset for the camera when opening menus that require a horse preview.
You can leave it as-is or tweak it. There’s no strict rule here it’s mostly a trial-and-error process to find what looks best for your setup.
The other coordinates are the camera parameters (visible on the left side of your screen when using the spooner).
When you find the desired camera angle and position, press F to freeze the camera and enable mouse support. Then click on the clipboard icon under “Z” to copy the coordinates.
You will get a format like this:
480.63, -304.04, 145.30 - Rot : -9.63, 0.00, -85.78
These values represent:
posX, posY, posZ → camera position
rotX, rotY, rotZ → camera rotation
To use them in the config, the camera entry should look like this:
camera1example = {posX, posY, posZ, rotX, rotY, rotZ, fov}
camera1example = {480.63, -304.04, 145.30, -9.63, 0.00, -85.78, 50.0}
The FOV (Field of View) controls how wide the camera is. This is mostly a matter of preference, but a value around 50.0 is recommended as it is close to the default gameplay camera.
Now that we've seen how coords work let's review every param and what they're for
name – Internal name of the stable.
title_given – Main title given when you purchase a horse from this stable.
blipenabled – Enables or disables the map blip.
blipsprite – Blip icon sprite hash.
blipcoords – Vector3 position of the blip on the map.
pedenabled – Enables or disables the ambient stable NPC.
pedmodel – Model name of the NPC.
pedscenario – Scenario the NPC plays.
pedcoords – Vector4 position and heading of the NPC.
promptcoords – Vector3 position of the interaction prompt.
promptdistance – Distance required to trigger the prompt.
horsepos – Vector4 position where the preview horse spawns.
horsepreviewcamoffset – Camera offset for horse preview menus.
introcamerapos – Camera used when entering the stable when cutscene are enabled.
menucamera – Camera used for main stable menu.
breeding_camera – Camera used in breeding menu.
exitcamerapos – Camera used when exiting the stable when cutscene are enabled.
(All camera values use: posX, posY, posZ, rotX, rotY, rotZ, fov)
breeding_menu_enabled – Enables or disables breeding menu.
breeding_price – Price table for breeding (per job).
breeding_stallion_pos – Position of the stallion.
breeding_mare_pos – Position of the mare.
breeding_foal_pos – Position of the foal.
wagons_menu_enabled – Enables or disables wagon menu.
wagonpos – Position of wagon preview.
wagonpreviewcamoffset – Camera offset for wagon preview.
wagonspawnpos – Where purchased wagons spawn.
neutering_price – Price to neuter a horse.
rename_price – Price to rename a horse.
set_custom_title_price – Price to set custom horse title.
healing_price – Price to heal a horse.
purchase_multiplier – Multiplier for horse purchase price.
sell_multiplier – Multiplier for horse selling price.
Role Based
rolerestriction – Enables job restrictions.
rolesallowed – List of allowed roles and their permissions.
rolesallowed = {
[1] = {Role = "OTHER_JOBS", Menu_Options_Enabled = {main_menu = true, breed_horse_menu = true, custom_eyes = true, custom_coat = true, custom_coat_gene = true, custom_scale = true, display_owned = true, heal_horse = true, purchase_horse = true, purchase_horse_tack = true, horse_barber = true, set_horse_tack = true, sell_horse = true, delete_horse = true, sell_horse_tack = true, set_custom_title = true, rename_horse = true, spawn_horse = true, neuter_horse = true, show_parents_info = true, change_horse_personality = true},}, -- EVERY OTHER JOBS THAN THE ONES LISTED BELOW WILL GET THESE VALUES
},
When having Role = "OTHER_JOBS" it means every other job not listed below that line will get these permissions.
Player Based
playersrestriction – Enables per-player restrictions.
playersallowed – List of allowed players and permissions.
playersallowed = {
[1] = {IDENTIFIER = "OTHER_PLAYERS", CHARID = "OTHER_PLAYERS", Menu_Options_Enabled = {main_menu = true, breed_horse_menu = true, custom_eyes = true, custom_coat = true, custom_coat_gene = true, custom_scale = true, display_owned = true, heal_horse = true, purchase_horse = true, purchase_horse_tack = true, horse_barber = true, set_horse_tack = true, sell_horse = true, delete_horse = true, sell_horse_tack = true, set_custom_title = true, rename_horse = true, spawn_horse = true, neuter_horse = true, show_parents_info = true, change_horse_personality = true},}, -- EVERY OTHER PLAYER THAN THE ONES LISTED BELOW WILL GET THESE VALUES
[2] = {IDENTIFIER = "steam:99", CHARID = 1, Menu_Options_Enabled = {main_menu = true, breed_horse_menu = true, custom_eyes = true, custom_coat = true, custom_coat_gene = true,custom_scale = true, display_owned = true, heal_horse = true, purchase_horse = true, purchase_horse_tack = true, horse_barber = true, set_horse_tack = true, sell_horse = true, delete_horse = true, sell_horse_tack = true, set_custom_title = true, rename_horse = true, spawn_horse = true, neuter_horse = true, show_parents_info = true, change_horse_personality = true},}, -- IF playersrestriction = TRUE THEN LIST THE ROLES ALLOWED TO ACCESS THE STABLE HERE
},
IDENTIFIER = "OTHER_PLAYERS", CHARID = "OTHER_PLAYERS" means every other player not listed below that line will get these permissions.
IDENTIFIER = "steam:99", CHARID = 1
IDENTIFIER format should be a string and CHARID should be an int. If you're using rsg CHARID will be the citizenid.
Please note the format for identifier. it should be "steam:99", not "steam_99" if using VORP
Each permission table controls access to:
Buying/selling horses
Breeding
Customization (coat, eyes, scale)
Tack
Healing
Spawning
Neutering
Renaming
Personality changes
And more
playergotocoords – Where the player is teleported inside the stable.
Vector3 → x, y, z
Vector4 → x, y, z, heading
Camera → x, y, z, rotX, rotY, rotZ, fov
There you go that's all you need to know to create your own stable ! If you want other stables just add them after this one and always mind the lua index.