You need to download & install these resources first:
Efficient Attachment Sync
Currency API (after installing, define a currency named cash)
Put the files you downloaded in their respective places
Set up some businesses and products (read below)
This script adds factories and buyers which sell and buy products, your job is to buy stuff from factories and sell them to buyers for profit.
/products: Accesses a vehicle's product inventory, you have to be at the back of the vehicle.
/takeproduct: Takes a product from the ground/factory.
/dropproduct: Drops a product from your hands to the ground/buyer.
Most of the changes are done by editing JSON files located in packages/courier/json/.
Remember to validate your changes here: https://jsonlint.com/
businessWorkInterval: Interval of the business work timer (used for factories to make product and buyers to sell product), default value is 60000.
worldCleanerInterval: Interval of the world cleaner timer (used for removing dropped products), default value is 60000.
droppedProductLife: Milliseconds a dropped product will stay for, default value is 600000.
dropProductOnDeath: If true, dying will cause players to drop the product they're carrying, default value is true.
dropProductOnDisconnect: If true, leaving the server will cause the players to drop the product they're carrying, default value is true.
This file contains an object that keeps which vehicles are supported by this script in modelName: capacity format. (Vehicles List)
"burrito3": 6, // 6 products for burrito3
"rumpo": 6, // 6 products for rumpo
"speedo": 4, // 4 products for speedo
"youga": 4 // 4 products for youga
This file contains the product information in object of objects format. A product has name, model, price, profit, businessTime, attachOffset and attachRotation properties.
name: The product's visible name.
model: Model name of the product, used for dropping and attaching.
price: Price of the product.
profit: Profit rate of the product. Price is multiplied by this value while selling products to a buyer.
businessTime: Milliseconds it takes for a factory to create one of this product/for a buyer to sell one of this product.
attachOffset: Attachment offset of the product model on player.
attachRotation: Attachment rotation of the product model on player.
// Example: Ammunition product
This file contains business information in array of objects format. A business has type, productType, initialStock, maxStock and position properties.
type: Business type, only factory and buyer are available.
productType: The product this business is interested in, only the values in products.json are available.
initialStock: How much product this business has on server start.
maxStock: Maximum product this business can have.
position: Location of the business.
// Example: Beer Factory & Buyer used in the video
This file contains business type information in object of objects format. You probably don't need to make any changes to this file, unless you want to add new business types. (which needs some scripting as well)
A business type has label and blipSprite properties.
label: Visible name, used for blip name and label.
blipSprite: Blip sprite of the business type. (Blip Sprite List)
// Example: Default business types
This script extends mp.Player and mp.Vehicle.
// Returns true if the player is carrying a product.
// Returns the type of product the player is carrying, will be null if the player isn't carrying anything.
// Makes the player start carrying a product. Type should be a valid product type and the player shouldn't be carrying a product, or it won't work.
// Makes the player stop carrying a product.
IMPORTANT: Vehicles with models that are in vehicles.json automatically get an inventory when entityCreated event is called, so you don't need to use setProductInventory for them. (Unless you want to be 100% sure they have it)
// Sets the product inventory of a vehicle. newInventory must be an array created by the array constructor like "new Array(8)".
// Returns true if the vehicle has a product inventory.
// Returns the product inventory of the vehicle, will be null if the vehicle doesn't have one.
// Adds a product to the vehicle product inventory, index must not have an item already and index must be within the bounds of product inventory array. Returns true if successful, false otherwise.
// Returns the product at the specified index of vehicle product inventory, will be null if index doesn't have a product.
// Removes the product at the specified index of vehicle product inventory. Returns true if successful, false otherwise.
Source code is available on GitHub in case you don't want to download: https://github.com/root-cause/ragemp-courier