Let's Camp! Plus

Installation Guide!

⚠️ Do not rename the resource folder. The script will not function if renamed.

📖REQUIREMENTS:

Before installing, ensure you have:

  • A working FiveM server

  • An item system (like ox_inventory, qb-core, or equivalent)

  • A targeting system (e.g. ox_target)

  • Bridge Resource: xmmx_bridge

  • Minigames: xmmx_keysgame and xmmx_circlesgame (Included)

  • Mrs. BzZz Survival Props (Paid)

  • Mrs. BzZz Lumberjack Props (Free)

  • Mrs. BzZz Military Canteen (Free)

🛠️INSTALLATION:

• Copy the images from the .INSTALL/images folder into your inventory images folder. • Copy the items into your inventory or framework items table:

Copy to ox_inventory/data/items.lua:

    -- INGREDIENTS:
	["lcmarshmellow"] = {
		label = "Marshmellows",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Ingredient.",
		client = {
			image = "lcmarshmellow.png",
		}
	},
	["lcchocolate"] = {
		label = "Chocolate Bar",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Ingredient.",
		client = {
			image = "lcchocolate.png",
		}
	},
	["lcgramcrkrs"] = {
		label = "Graham Crackers",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Ingredient.",
		client = {
			image = "lcgramcrkrs.png",
		}
	},
	["lccampmeat"] = {
		label = "Raw Beef",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Ingredient.",
		client = {
			image = "lccampmeat.png",
		}
	},
	["lccampherbs"] = {
		label = "Wild Herbs",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Ingredient.",
		client = {
			image = "lccampherbs.png",
		}
	},
	["lccampbeans"] = {
		label = "Canned Beans",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Ingredient.",
		client = {
			image = "lccampbeans.png",
		}
	},
	["lccampcorn"] = {
		label = "Ear Corn",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Ingredient.",
		client = {
			image = "lccampcorn.png",
		}
	},
	["lccamppotato"] = {
		label = "Potato",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Ingredient.",
		client = {
			image = "lccamppotato.png",
		}
	},
	["lccampbutta"] = {
		label = "Butter",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Ingredient.",
		client = {
			image = "lccampbutta.png",
		}
	},
	["lccampfish"] = {
		label = "Fresh Fish",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Ingredient.",
		client = {
			image = "lccampfish.png",
		}
	},
	["lccampveggies"] = {
		label = "Jar Veggies",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Jar Veggies.",
		client = {
			image = "lccampveggies.png",
		}
	},
	["lccoffeebeans"] = {
		label = "Coffee Beans",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Coffee Beans.",
		client = {
			image = "lccoffeebeans.png",
		}
	},
	["lccampsoap"] = {
		label = "Critter Soap",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Critter Soap.",
		client = {
			image = "lccampsoap.png",
		}
	},
    -- CAMP EAT/DRINK ITEMS:
	["lccookedsmores"] = {
		label = "Smores",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! S'mores",
		client = {
			image = "lccookedsmores.png",
		}
	},
	["lccookedsteak"] = {
		label = "Cooked Steak",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Cooked Steak",
		client = {
			image = "lccookedsteak.png",
		}
	},
	["lccookedbeans"] = {
		label = "Cooked Beans",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Cooked Beans",
		client = {
			image = "lccookedbeans.png",
		}
	},
	["lccookedcorn"] = {
		label = "Cooked Corn",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Cooked Corn on the Cob",
		client = {
			image = "lccookedcorn.png",
		}
	},
	["lccookedfish"] = {
		label = "Cooked Fish",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Cooked Fished",
		client = {
			image = "lccookedfish.png",
		}
	},
	["lccookedpotato"] = {
		label = "Cooked Taters",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Cooked Taters",
		client = {
			image = "lccookedpotato.png",
		}
	},
	["lcherbtea"] = {
		label = "Herbal Tea",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Herbal Tea",
		client = {
			image = "lcherbtea.png",
		}
	},
	["lcfullcanteen"] = {
		label = "Full Canteen",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Full Canteen",
		client = {
			image = "lcfullcanteen.png",
		}
	},
	["lcemptycanteen"] = {
		label = "Empty Canteen",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Empty Canteen",
		client = {
			image = "lcemptycanteen.png",
		}
	},
	["lccampcoffee"] = {
		label = "Coffee",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Cup of Coffee",
		client = {
			image = "lccampcoffee.png",
		}
	},
	["lccookedstew"] = {
		label = "Cooked Stew",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Cooked Stew",
		client = {
			image = "lccookedstew.png",
		}
	},
	["lccookedsoup"] = {
		label = "Veggie Soup",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Veggie Soup",
		client = {
			image = "lccookedsoup.png",
		}
	}, 
	["lcfishnchips"] = {
		label = "Fish n Chips",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Fish n Chips",
		client = {
			image = "lcfishnchips.png",
		}
	},
	["lcsteakveggies"] = {
		label = "Steak n Veggies",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Steak n Veggies",
		client = {
			image = "lcsteakveggies.png",
		}
	},
	["lcmeatpotato"] = {
		label = "Meat n Potato",
		weight = 80,
		stack = true,
		close = true,
		description = "Lets Camp! Meat n Potato",
		client = {
			image = "lcmeatpotato.png",
		}
	},

    -- CAMP PROPS:
	['lc_campcookpot'] = { 
		label = 'Camp Pot', 		  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Camp Pot",
		client = {
			image = "lc_campcookpot.png",
		} 
	},
	["lc_campaxe"] = {
		label = "Camp Axe",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Axe",
		client = {
			image = "lc_campaxe.png",
		}
	},

	-- TENTS:
	["lc_camptent_a"] = {
		label = "Large Tent",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Large Tent",
		client = {
			image = "lc_camptent_a.png",
		}
	},
    ['lc_camptent_b'] = { 
		label = 'Small Tent', 		  
		weight = 200, 
		stack = true,
		close = true,
		description = "Lets Camp! Small Tent",
		client = {
			image = "lc_camptent_b.png",
		}
	},
    ['lc_camptent_c'] = { 
		label = 'Open Tent A', 		  
		weight = 200, 
		stack = true,
		close = true,
		description = "Lets Camp! Open Tent A",
		client = {
			image = "lc_camptent_c.png",
		}
	},
    ['lc_camptent_d'] = { 
		label = 'Open Tent B', 		  
		weight = 200, 
		stack = true,
		close = true,
		description = "Lets Camp! Open Tent B",
		client = {
			image = "lc_camptent_d.png",
		}
	},
    ['lc_camptent_e'] = { 
		label = 'Medic Tent', 		  
		weight = 200, 
		stack = true,
		close = true,
		description = "Lets Camp! Medic Tent",
		client = {
			image = "lc_camptent_e.png",
		}
	},

	-- BEDS:
	["lc_campbed_a"] = {
		label = "Camp Bed",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Bed",
		client = {
			image = "lc_campbed_a.png",
		}
	},
	["lc_campbed_b"] = {
		label = "Camp Survival Bed",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Survival Bed",
		client = {
			image = "lc_campbed_b.png",
		}
	},
	["lc_campbed_c"] = {
		label = "Camp Sleeping Bag",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Sleeping Bag",
		client = {
			image = "lc_campbed_c.png",
		}
	},

	-- APPLIANCE:
	["lc_campcooler"] = {
		label = "Camp Cooler",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Cooler",
		client = {
			image = "lc_campcooler.png",
		}
	},
	["lc_campgrill"] = {
		label = "Camp Grill",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Grill",
		client = {
			image = "lc_campgrill.png",
		}
	},

	-- FIRES:
	["lc_campfire_a"] = {
		label = "Camp Fire A",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Fire A",
		client = {
			image = "lc_campfire_a.png",
		}
	},
	["lc_campfire_b"] = {
		label = "Camp Fire B",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Fire B",
		client = {
			image = "lc_campfire_b.png",
		}
	},
	["lc_campfire_c"] = {
		label = "Camp Fire C",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Fire C",
		client = {
			image = "lc_campfire_c.png",
		}
	},

	-- TABLES:
    ['lc_camppicnic'] = { 
		label = 'Camp Picnic Table', 	  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Log",
		client = {
			image = "lc_camppicnic.png",
		}  
	},
	["lc_camptable_a"] = {
		label = "Camp Table A",
		weight = 200,
		stack = false,
		close = true,
		description = "Lets Camp! Table A",
		client = {
			image = "lc_camptable_a.png",
		}
	},
    ['lc_campworktable'] = { 
		label = 'Camp Work Table', 	  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Crafting Table",
		client = {
			image = "lc_campworktable.png",
		}  
	},
	-- CHAIRS:
	["lc_campchair_a"] = {
		label = "Camp Chair A",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Chair A",
		client = {
			image = "lc_campchair_a.png",
		}
	},
	["lc_campchair_b"] = {
		label = "Camp Chair B",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Chair B",
		client = {
			image = "lc_campchair_b.png",
		}
	},
	["lc_campchair_c"] = {
		label = "Camp Chair C",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Chair C",
		client = {
			image = "lc_campchair_c.png",
		}
	},
	["lc_campchair_d"] = {
		label = "Camp Chair D",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Chair D",
		client = {
			image = "lc_campchair_d.png",
		}
	},
	["lc_campchair_e"] = {
		label = "Camp Chair E",
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Chair E",
		client = {
			image = "lc_campchair_e.png",
		}
	},
    ['lc_campfence'] = { 
		label = 'Camp Wood Fence', 		  
		weight = 200, 
		stack = true,
		close = true,
		description = "Lets Camp! Wood Fence",
		client = {
			image = "lc_campfence.png",
		} 
	},
    ['lc_campfence_a'] = { 
		label = 'Camp Fence A', 		  
		weight = 200, 
		stack = true,
		close = true,
		description = "Lets Camp! Fence A",
		client = {
			image = "lc_campfence_a.png",
		} 
	},
    ['lc_campfence_b'] = { 
		label = 'Camp Fence B', 		  
		weight = 200, 
		stack = true,
		close = true,
		description = "Lets Camp! Fence B",
		client = {
			image = "lc_campfence_b.png",
		} 
	},
    ['lc_campfence_c'] = { 
		label = 'Camp Fence C', 		  
		weight = 200, 
		stack = true,
		close = true,
		description = "Lets Camp! Fence C",
		client = {
			image = "lc_campfence_c.png",
		} 
	},
    ['lc_campfence_d'] = { 
		label = 'Camp Fence D', 		  
		weight = 200, 
		stack = true,
		close = true,
		description = "Lets Camp! Fence D",
		client = {
			image = "lc_campfence_d.png",
		} 
	},
    ['lc_campdoor_a'] = { 
		label = 'Camp Door Fence', 		  
		weight = 200, 
		stack = true,
		close = true,
		description = "Lets Camp! Door Fence",
		client = {
			image = "lc_campdoor_a.png",
		} 
	},
    -- MATERIALS:
    ['lcburlapscrap'] = { 
		label = 'Camp Burlap Scraps', 	  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Burlap Scraps",
		client = {
			image = "lcburlapscrap.png",
		}  
	},
	['lcnylonrope'] = { 
		label = 'Camp Nylon Rope', 	  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Nylon Rope",
		client = {
			image = "lcnylonrope.png",
		}  
	},
	['lcferrorrod'] = { 
		label = 'Camp Ferro Rod', 	  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Ferro Rod",
		client = {
			image = "lcferrorrod.png",
		}  
	},
	['lccampstones'] = { 
		label = 'Camp Stones', 	  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Stones",
		client = {
			image = "lccampstones.png",
		}  
	},
    -- LIGHTS:
    ['lc_camplight_a'] = { 
		label = 'Camp Light', 	  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Light",
		client = {
			image = "lc_camplight_a.png",
		}  
	},
    ['lc_camplight_b'] = { 
		label = 'Camp Work Light', 	  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Work Light",
		client = {
			image = "lc_camplight_b.png",
		}  
	},
    -- LUMBER PROPS:
    ['lc_camplog_a'] = { 
		label = 'Camp Log A', 		  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Log A",
		client = {
			image = "lc_camplog_a.png",
		} 
	},
    ['lc_campwood_a'] = { 
		label = 'Camp Wood A', 		  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Wood A",
		client = {
			image = "lc_campwood_a.png",
		} 
	},
    ['lc_camplog_b'] = { 
		label = 'Camp Log B', 		  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Log B",
		client = {
			image = "lc_camplog_b.png",
		} 
	},
    ['lc_campwood_b'] = { 
		label = 'Camp Wood B', 		  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Wood B",
		client = {
			image = "lc_campwood_b.png",
		} 
	},
    ['lc_camplog_c'] = { 
		label = 'Camp Log C', 		  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Log C",
		client = {
			image = "lc_camplog_c.png",
		} 
	},
    ['lc_campwood_c'] = { 
		label = 'Camp Wood C', 		  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Wood C",
		client = {
			image = "lc_campwood_c.png",
		} 
	},
    ['lc_campsign_a'] = { 
		label = 'Camp Sign A', 		  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Camp Sign A",
		client = {
			image = "lc_campsign_a.png",
		} 
	},
	['lc_campsign_b'] = { 
		label = 'Camp Sign B', 		  
		weight = 200,
		stack = true,
		close = true,
		description = "Lets Camp! Camp Sign B",
		client = {
			image = "lc_campsign_b.png",
		} 
	},
Name
Description

FirstInstall

Must be true on first script start to set up the database.

Version

Enable version checking (recommended to keep up to date).

Debug

Enable debug output. Disable before going live.


Inventory & Consumables

Name
Description

Images

Path to inventory images (for example: ox_inventory/web/images/).

UseConsumables

Enables crafted food/drinks to be useable. Set to false if using your own.


Name
Description

Menu

Choose the menu style: xm, ui, qb, or ox.

MenuBlur

Enables screen blur while the crafting menu is open.

ToggleHud

Hides HUD when menu is open.

MenuTxt

Optional description text for xm_menu. Leave as empty string to skip.

MenuScheme

Menu color scheme (supports hex, rgb, or named colors).

iconColor

Icon color for menus and targets.

iconAnims

List of possible icon animations (used by ox menu).

qbImgSize

Image size in qb-menu (default is 100).

notItem

Icon for missing ingredients (e.g. ❌). Use "" for none.

hasItem

Icon for ingredients present (e.g. ✔️). Use "" for none.


Prop Placement Settings

Name
Description

PersistentProps

Saves props to database across restarts/logins.

UseInstance

Saves props to routing buckets (good for interiors).

CastDist

How far in front to raycast for placement.

MoveSpeed

Speed for vertical prop movement. (Range: 0.005 - 0.05)

MaxHeight

Prevents props being placed too high.

TextUI

Choose text UI type: ox or qb (must match xmmx_bridge).


Placement Controls (RayCastKeys)

Action
Key Code
Description

rotateLeft

14

Scroll Wheel Down

rotateRight

15

Scroll Wheel Up

rotatePitchUp

68

Right Mouse Button

rotatePitchDown

69

Left Mouse Button

rotateRollLeft

174

Arrow Left

rotateRollRight

175

Arrow Right

SnapGrnd

19

Left ALT

heightUp

172

Arrow Up

heightDown

173

Arrow Down

cancel

202

Backspace

place

215

Enter


Progress Bar & Animations

Setting
Description

UseProgress

Show a progress bar and animation for placement/removal.

AllRemove

Allow everyone to remove props, or just the placer.

AlertRemove

Notify players when a prop is removed.

Placement Animation

PropPlace = {
  Dict  = "mp_arresting",
  Clip  = "a_uncuff",
  Flag  = 49,
  Time  = 3500,
  Prog  = "Setting Up Item . . ."
}

Removal Animation

PropRemove = {
  Dict  = "random@domestic",
  Clip  = "pickup_low",
  Flag  = 8,
  Time  = 1500,
  Prog  = "Picking Up Item"
}

Camp Zones (Optional)

Setting
Description

ZoneChecks

Only allow placement inside predefined camp zones.

CampZones

Define each camp zone with coordinates, radius, and optional blip.

Example:

CampZones = {
  ["Raton Canyon! Camp Zone"] = {
    coords = vector3(-1080.23, 4371.21, 13.05),
    radius = 650.0,
    blip = true
  }
}

Zone Blip Configuration

ZoneBlip = {
  blipSprite  = 557,
  blipDisplay = 6,
  blipScale   = 0.7,
  blipColor   = 0,
  radiusColor = 5,
  radiusAlpha = 50
}

Player Camp Blips

Setting
Description

enabled

Enable player camp blips.

everyone

Should all players see each other's camp blips?

models

List of models that should be tracked and blipped.


Trees, Bathing, and Tools

Setting
Description

EnableTrees

Enable tree props that can be chopped.

EnableBathing

Allow players to bathe (if soap item is configured).

SoapItemName

Item name required for bathing.

AxeItemName

Item name needed to chop trees.


CampProps: Placeable Items

Each item in the CampProps list includes:

  • name: Item name in inventory

  • give: Whether the item is returned on pickup

  • model: The in-game model spawned

  • action: What it does (e.g., Tent, Fire, Craft, Prop)

  • within: Distance to object for placement

You can add your own props to this list. Tip: Set action = "Prop" to make it non-interactive (e.g., for static items or fences).


⚙️SETTINGS:

This file controls the animations, interactions, and tree harvesting settings within Let's Camp Plus. Below you'll find a breakdown of each configurable section.

Tent Sleeping (InTentAnim)

Setting
Description

Position

Text UI position (e.g. left-center)

ZoomKey

Zoom in while inside (default 0 for Z key)

CancelKey

Exit key (default 73 for X)

Dict, Clip, Flag

Animation details

OffSets

Offsets per tent model for proper player placement; can also enable slow healing with heal = true


Sitting in Chairs (ChairSitAnim)

Setting
Description

Scenario

Defines sitting animation scenario

CancelKey

Key to cancel sitting

OffSets

Model-specific offsets for proper sit alignment


Laying in Beds (BedLayAnim)

Setting
Description

Dict, Clip

Animation dictionary and clip

OffSets

Placement adjustments for each bed model


Canteen Filling (CanteenAnim)

Handles animation for filling canteens from a water source.

Setting
Description

Dict, Clip, Flag, Time, Prog

Animation and progress bar

Prop, Bone, Coord, Rot

Position and rotation for held prop


Hiking Mode (Hiking)

Enables optional idle animations and visible hiking backpacks when carrying certain items.

Setting
Description

EnableBag

Show backpack on player

EnableAnim

Play hiking animation

IdleCheck, ActiveCheck

Timers for checking movement

Items

Items that trigger hiking mode

Cloth

Clothing slot settings for backpacks (male/female)


Bathing Animation (BathingAnim)

Handles bathing with a progress bar, movement control, and nudity toggles.

Setting
Description

Dict, Clip, Time, Prog

Animation and duration

Move

Disables movement during animation

Nude

Whether clothes are removed during bathing

Cloth

Outfits applied per gender when bathing


Cooking Animations

Grill Cooking (GrillCookAnim)

Fire Cooking (FireCookAnim)

Both support minigames and movement control during the animation.

Setting
Description

Dict, Clip, Time, Prog

Animation and text

Prop, Bone, Coord, Rot

Cooking tool settings

Minigame, game

Whether a minigame is enabled and which one (keys, circles)


Cooler and Craft Bench

  • CoolerAnim: Animation for purchasing from coolers.

  • CraftBenchAnim: Used when crafting at workbenches. Minigame supported.


Tree Chopping Animation (TreeChopAnim)

Used for harvesting trees/logs.

Setting
Description

Dict, Clip, Time, ProgTree, ProgLog

Animation and progress bars

Prop, Bone, Coord, Rot

Axe visual settings

Minigame, game

Tree cutting minigame configuration


Carry Items (CarryModel)

Allows players to carry logs/wood visually.

Setting
Description

name

The item's identifier

Model

Prop model to attach

Dict, Clip, Flag

Animation details

x, y, z, xr, yr, zr

Positioning and rotation

Attack, Sprint, Car

Restrictions while carrying

Additional carry behavior is toggled by:

Setting
Description

CarryEnabled

Master toggle for carry functionality

NetworkProps

Make props visible to others


Tree & Logging System

Tree Configuration

Each tree entry in TreeModels includes:

  • label: Display name

  • item: Reward item when chopped

  • difficulty: For minigame tuning (easy, medium, etc.)

  • coords: Where trees spawn (use vec4)

Other Tree Settings

Setting
Description

Blips

Configures tree location blips

StumpModel

Model that replaces tree when chopped

RegrowTree

Minutes until a tree respawns

TreeTargetDist

Max distance to interact with tree

LogChopAmt

Random reward amount from log chopping


Example Tree Entry

["prop_tree_cedar_s_01"] = {
    blip = true,
    label = "Small Cedar Tree",
    item = "lc_camplog_c",
    amount = 1,
    difficulty = "easy",
    coords = {
        vec4(-943.150, 4401.460, 15.177, 29.64),
        vec4(-987.966, 4396.140, 14.324, 169.31),
        -- more coords...
    }
}

🛒SHOPS:

The shops.lua file handles shop ped locations, available purchasable items, and shop behavior (such as console logging and blips).

Global Settings

Setting
Description

Enabled

Enables or disables the shop system entirely.

ConsolePrints

Logs player shop usage to the server console when true.


Shopkeeper NPCs (Peds)

Define shopkeeper NPCs here. You can have multiple shop locations.

Peds = {
    {
        model = "a_m_y_hiker_01", 
        scenario = "WORLD_HUMAN_TOURIST_MAP", 
        coords = vector3(-1490.91, 4981.61, 63.33), 
        heading = 83.96, 
        blip = true
    },
    -- Add more shopkeepers as needed
}
  • model: Ped model used.

  • scenario: Ped activity (animation).

  • coords: Position in the world.

  • heading: Direction the ped is facing.

  • blip: Whether a blip should appear on the map for this shop.


Blip Settings (Blips)

Configure how shop locations appear on the map.

Setting
Description

Enabled

Toggles map blips for all shopkeepers. Set to false to hide all blips.

Label

Name shown on the map.

Sprite

Blip icon ID.

Display

Display mode (6 is standard).

Scale

Size of the blip.

Color

Color of the blip.


Canteen Handling

Used to manage canteen filling at water sources.

Setting
Description

EmptyCanteen

Item name for an empty canteen.

FullCanteen

Item name for a filled canteen.


Shop Items (Items)

Each entry represents a purchasable item. You can categorize and assign prices.

{ name = 'lc_camptent_a', cost = 1000, category = 'Tents' }
Field
Description

name

Item name (must match inventory item name).

cost

Price in in-game currency.

category

Used to organize items in the shop UI.


Available Categories

The following categories are currently used. These help sort items in the shop UI:

  • Appliance

  • Beds

  • Chairs

  • Fencing

  • Fires

  • Grocery

  • Hardware

  • Lumber

  • Tables

  • Tents

Note: Many items can also be crafted by players using workbenches or other features in the script.


Tips

  • For shop purchase logs add your webhook in the server/editable.lua.

  • Make sure items exist in your inventory system (e.g. ox_inventory) before adding them to the shop.

  • You can mix crafted and purchased item availability to control the in-game economy.


🗒️FUNCTIONS:

This file contains optional features like healing, stress relief, and minigames. You are encouraged to customize or delete functions that don’t fit your framework.

⚠️ The provided events are examples only. You must adapt them to your server’s inventory, status, and medical systems.

Camp Tent Logic (CampTent)

Handles healing and/or stress relief when a player is inside a tent.

Parameters:

  • bool: true when entering the tent, false when exiting.

  • heal: Enables slow healing if true.

Features:

  • Stress thread reduces stress over time.

  • Healing thread slowly restores health if below max.

  • Bleeding removal supported via randol_medical if health is high but not full.

Notes:

  • Threads are terminated when the player exits the tent.

  • Use your own healing or stress systems if different from hud:server:RelieveStress.


Camp Chair Logic (CampChair)

Relieves player stress while sitting in a chair.

  • Uses the same stress relief logic as tents.

  • Thread stops when player exits the chair.


Camp Bed Logic (CampBed)

Also provides stress relief, similar to chairs and tents.

  • Uses separate thread to avoid conflicts with other states.

  • You may choose to add sleep animations or healing here if needed.


Minigame Handler (MiniGame)

Triggers minigames during interactions like crafting, cooking, or using special items.

Supported Modes:

  • "circles": Uses xmmx_circlesgame

  • "keys": Uses xmmx_keysgame

  • "beans": Randomly triggers either of the two with different prompts

Usage:

local success = Config.MiniGame("keys")
if success then
    -- continue interaction
end

Tree Minigame (TreeMiniGame)

Handles tree chopping minigames.

Parameters:

  • game: "circles" or "keys"

  • level: "easy", "medium", or "hard"

  • label: The name of the tree or log for display

Behavior:

  • Custom prompts like "Chopping Pine Tree" will appear.

  • Success/failure returned to control chopping logic.

  • Designed for xmmx_circlesgame and xmmx_keysgame.


How to Customize

Here’s how you can tailor this file to your own framework:

Feature
Replace or Modify

Stress Relief

Replace hud:server:RelieveStress with your own event

Healing

Adjust SetEntityHealth or link to your health system

Bleeding Removal

Swap exports.randol_medical:ClearBleeding() with your system

Minigames

Add/replace your own games or prompts

Player Metadata

Update how you pull metadata if not using XM.GetPlayerData()


Important Tips

  • These functions are not required but enhance immersion.

  • Use them as a base template, not a final implementation.

  • Remove unused functions to avoid resource waste or errors.


Last updated