🐴Stables

Players can buy, store, retrieve, modify, or capture horses and carts. Every interaction is persistent and logged to Discord.

⚙️ Overview

The Stables System allows players to:

  • 🐎 Buy, manage and customize horses and carts

  • 🧳 Store or retrieve them from a stable or relay

  • 🗺️ Recall lost or distant mounts (paid by distance)

  • ✏️ Rename and edit visual equipment (mane, tail, bags, saddle, etc.)

  • Delete a mount permanently

  • 🪶 Capture or sell wild horses (job restriction)

  • 💬 Automatically log every important action to Discord

  • 🕵️ Horse theft: ownership can be transferred if someone stows your mount.

  • ☠️ Permanent death: dead horses cannot be revived; their inventory is wiped and the mount is unusable forever.

  • 🔥 Fire disable: if a cart burns, it is disabled until the next server reboot.

⚠️ A horse or cart stored in a relay or a stable is only accessible from that same relay or stable.

All mounts persist through server restarts — if you left a horse outside, it will remain exactly where you parked it.


🏇 Horses

🛒 Buying Horses

Horses are sorted by categories.

Each model includes:

  • 💰 Price

  • 📦 Storage capacity

  • 📝 Description

  • 🐴 Model hash

Example (excerpt from config.lua):

Config.AllHorses = {
  Work = {
    {
      hash = "A_C_Horse_Mustang_TigerStripesBay",
      translation = "Mustang",
      price = 800,
      capacity = 100,
      desc = "Strong and reliable — ideal for long workdays."
    },
  },
}

When buying a horse:

  • The player must choose a name (5–15 alphanumeric characters, no spaces)

  • The horse is added to their stable

  • A unique shared inventory is created automatically 🔒 Only the horse or cart’s owner can access this inventory.

  • A Discord log is sent confirming the purchase


🔄 Recall System

If your horse is too far away, you can recall it directly from the stable menu.

  • Free if closer than 100 meters

  • Otherwise: $0.05 per meter → 1000 m = $50

  • Once recalled, the horse is removed from the world and placed safely back in the stable

Example notification:

🐴 You paid $50 to recall “Mustang”.

A detailed log is also sent to Discord (including distance and price).


🪶 Relays

Relays are temporary storage points for mounts (horses only), perfect during long travels. They work like small stables but are independent from the main one.

Defined in config.lua:

Config.PickupHorse = {
  [1] = {
    StoreOpen = vector3(-370.0, 783.0, 116.4),
    OutSpawn  = vector4(-372.0, 785.0, 116.4, 180.0)
  },
}

Players can:

  • Store or retrieve horses.

  • Use relays for RP routes or missions


⚰️ Death and Deletion

💀 Death

  • Dead horses are marked as “dead” permanently.

  • They cannot be revived or used again.

  • Their inventory is automatically deleted.

  • A log is sent to Discord:

    ☠️ John killed a horse named “Mustang” (ID #3)

🗑️ Deletion

  • Players can delete a horse or cart manually.

  • They must confirm by typing its exact name.

  • The entry is soft-deleted (hidden from DB and UI).

  • Its inventory is permanently removed.


🛻 Carts

Carts behave just like horses but can be restricted by job.

Example:

Config.AllCarts = {
  { hash = "wagontraveller01x", translation = "Traveller Cart", price = 600, capacity = 250 },
  { hash = "wagondoc01x", translation = "Doctor’s Cart", job = "doctor", price = 1, capacity = 120 },
  { hash = "marshalwagon01x", translation = "Marshal Wagon", price = 1, capacity = 300 },
}

🪶 Horse Capture

The defined job (Config.CaptureJob) can capture wild horses found in the world.

Requirements

  • Must belong to the defined job

  • Only horses that are unowned can be captured

  • Only models listed in Config.AllHorses are capturable

In config.lua:

Config.CaptureJob = "horseseller"

🐎 Capture Flow

When a player captures a wild horse:

  • They find and approach a wild horse in the world.

  • They must bring it back to a stable.

  • Once at the stable, they select “Capture the horse” in the menu.

  • A confirmation window then appears offering two options:

Option
Result

💰 Sell the horse

Instantly sells it for 1/10 of its stable price

🐴 Keep it

Adds it to the player’s stable like a purchased horse


💵 Example

Model
Stable Price
Capture Sale
Keep

Mustang

$800

$80

Added to stable

Logs are automatically sent to Discord:

```css
[bt_stables]
John Whitefeather (steam:110000...)
- HORSE CAPTURE
Model: A_C_Horse_Mustang_TigerStripesBay
Price: $80
Job: horseseller
```

💬 Discord Logs

Every action triggers a formatted log sent to your Discord channel.

Action
Example Log

🐎 Purchase

+ purchased a horse: Mustang ($800)

🚚 Recall

+ initiated a recall for Mustang (ID: 12) at ~250 m for $12

🔥 Fire

- FIRE detected on a cart (ID: 34)

⚰️ Death

- Permanently killed a horse (Mustang)

🛻 Deletion

- Removed a cart (ID: 3)

🪶 Capture

- Captured a wild horse (Model: Mustang, $80)

💰 Sale

- Sold a horse (Model: Mustang, $80)

Configure your webhook inside config.lua:

Config.DiscordWebHook = "https://discord.com/api/webhooks/xxxxx"
Config.DiscordName = "Stables Logger"

🧩 Exports

➕ Create a Horse or Cart

exports.bt_stables:createStableItem(source, name, model, type, capacity, price)

Creates a new horse or cart inside the player’s stable. It automatically registers an inventory in VORP Inventory.

Example:

exports.bt_stables:createStableItem(src, "Spirit", "A_C_Horse_Arabian_Black", "horse", 80, 0)


🌍 Supported Languages

You can add a new language by:

  1. Extending the NUI translations in translate.js

  2. Adding the same language keys in Config.Txt (server messages)

Available in 6 languages:

  • 🇫🇷 French

  • 🇬🇧 English

  • 🇪🇸 Spanish

  • 🇩🇪 German

  • 🇵🇹 Portuguese

  • 🇮🇹 Italian

Select your language in config.lua:

Config.NUILang = "en"

🧠 Summary

Category
Feature

🐴 Horses

Purchase, store, edit, recall, delete, Job restrictions, inventory

🛻 Carts

Purchase, store, delete, Job restrictions, inventory

🪶 Capture

Native-exclusive capture or sell

💬 Discord

Logs every stable action

💾 Persistence

Fully saved and restored

🌐 Languages

6 translations included (you can add more)

⚙️ Exports

Create

🔧 Config

Everything editable in config.lua

Last updated