RedM documentation

Murphy's Craft

Crafting System

Crafting Tables Configuration Guide


This guide explains how to create and configure Crafting Tables in Murphy Craft. Crafting Tables are geographical zones where players can access specific recipe categories.

Table of Contents


Overview

Crafting Tables are defined in shared/config.lua within the Config.CraftingTables array. Each crafting table represents a physical location in the game world where players can access the crafting menu and craft items from specific categories.

Key Differences from Crafting Stations:

  • Crafting Tables: Simple zones for immediate crafting (no timers or production queues)
  • Crafting Stations: Persistent locations with timers, production queues, and shared/personal storage

Basic Structure

lua
Config.CraftingTables = {
{
name = "My Crafting Table",
cat = { "category1", "category2" },
coords = vector3(x, y, z),
radius = 5.0,
blip = {
hash = "blip_hash_name",
modifier = "BLIP_MODIFIER_NAME", -- Optional
displaydistance = 50.0,
scale = 0.3,
},
},
}

Configuration Properties

Required Properties

Property Type Description
name string Display name for the crafting table (shown on blip and in UI)
cat table Array of category identifiers that are accessible at this location
coords vector3 World coordinates where the crafting table is located
radius number Radius (in game units) around the coordinates where players can access the crafting menu

Optional Properties

Property Type Default Description
blip table/nil nil Blip configuration object. Set to nil if you don't want a map blip

Blip Configuration

The blip property is an optional table that configures the map marker for the crafting table.

Blip Properties

Property Type Required Description
hash string Yes The blip sprite hash (e.g., "blip_product_moonshine")
modifier string No Blip color modifier (e.g., "BLIP_MODIFIER_MP_COLOR_4")
displaydistance number/nil No Maximum distance at which the blip is visible. Set to nil for always visible
scale number No Scale of the blip icon (default around 0.3)

Common Blip Hashes

Hash Description
blip_product_moonshine Moonshine/cooking related
blip_mp_pickup General pickup/medical
blip_weapon_handgun Weapons/gunsmith
blip_weapon_throwing_knife Tinkering/tools
blip_shop_blacksmith Blacksmith/recycling
blip_ambient_posse_deputy General crafting

Examples

Basic Kitchen Setup

lua
{
name = "Valentine Kitchen",
cat = { "cuisinier", "food" },
coords = vector3(-275.42, 805.33, 119.38),
radius = 5.0,
blip = {
hash = "blip_product_moonshine",
displaydistance = 50.0,
scale = 0.3,
},
},

Doctor Workshop with Multiple Categories

lua
{
name = "Saint Denis Medical Center",
cat = { "docteur", "medicine", "bandages" },
coords = vector3(2721.55, -1235.87, 49.94),
radius = 8.0,
blip = {
hash = "blip_mp_pickup",
modifier = "BLIP_MODIFIER_MP_COLOR_1",
displaydistance = 100.0,
scale = 0.4,
},
},

Crafting Table Without Blip

lua
{
name = "Hidden Workshop",
cat = { "bricoleur", "basic" },
coords = vector3(1234.56, -789.01, 45.67),
radius = 3.0,
blip = nil, -- No map marker
},

Gunsmith Workshop with Color Modifier

lua
{
name = "Rhodes Gunsmith",
cat = { "armurier" },
coords = vector3(1294.52, -1295.33, 76.91),
radius = 5.0,
blip = {
hash = "blip_weapon_handgun",
modifier = "BLIP_MODIFIER_MP_COLOR_4",
displaydistance = 75.0,
scale = 0.35,
},
},

Always-Visible Blip

lua
{
name = "Blackwater Forge",
cat = { "furnace", "armurier" },
coords = vector3(-802.45, -1241.67, 43.52),
radius = 6.0,
blip = {
hash = "blip_shop_blacksmith",
displaydistance = nil, -- Always visible on map
scale = 0.4,
},
},

Tips & Best Practices

1. Category Names

Categories referenced in cat must match the keys defined in your craft files located in shared/craft/. For example:

lua
-- In shared/craft/cuisinier.lua
Craft["cuisinier"] = {
name = "Cooking",
recipes = { ... }
}
-- In Config.CraftingTables
cat = { "cuisinier" } -- Must match "cuisinier" key

2. Combining Categories

You can combine multiple categories at one location:

lua
cat = { "cuisinier", "food", "basic" }

Players will see recipes from all specified categories when at this location.

3. Basic Categories

Remember that categories listed in Config.BasicsCategory are accessible everywhere, regardless of crafting table locations:

lua
Config.BasicsCategory = { "basic" } -- "basic" recipes available anywhere

4. Radius Considerations

  • Small radius (2-3): Precise location, player must be very close
  • Medium radius (5-6): Standard, good for most indoor locations
  • Large radius (8-10): Wide area, good for outdoor workshops or large buildings

5. Finding Coordinates

Use development tools or commands to get your current position in-game:

  • Enable Config.DevMode = true to visualize crafting zones
  • Use framework-specific coordinate commands

6. Job-Locked Categories

If a category has a job restriction, only players with that job will see those recipes even at the crafting table:

lua
-- In shared/craft/docteur.lua
Craft["docteur"] = {
name = "Medical Supplies",
job = "doctor", -- Only doctors can access
jobgrade = 2, -- Minimum grade required
recipes = { ... }
}

7. Multiple Locations

You can have multiple crafting tables with the same categories in different locations:

lua
-- Strawberry location
{
name = "Strawberry Kitchen",
cat = { "cuisinier" },
coords = vector3(-1773.546, -393.5962, 157.0192),
...
},
-- Valentine location
{
name = "Valentine Kitchen",
cat = { "cuisinier" },
coords = vector3(-275.42, 805.33, 119.38),
...
},

Complete Example

Here's a complete example of a well-configured Config.CraftingTables:

lua
Config.CraftingTables = {
-- Kitchen / Cooking
{
name = "Strawberry Kitchen Setup",
cat = { "cuisinier", "food" },
coords = vector3(-1773.546, -393.5962, 157.0192),
radius = 5.0,
blip = {
hash = "blip_product_moonshine",
displaydistance = 50.0,
scale = 0.3,
},
},
-- Medical
{
name = "Strawberry Doctor Workshop",
cat = { "docteur" },
coords = vector3(-1805.461, -431.6964, 157.9324),
radius = 5.0,
blip = {
hash = "blip_mp_pickup",
displaydistance = 50.0,
scale = 0.3,
},
},
-- Weapons
{
name = "Strawberry Gunsmith Workshop",
cat = { "armurier" },
coords = vector3(-1847.763, -427.9155, 159.7529),
radius = 5.0,
blip = {
hash = "blip_weapon_handgun",
displaydistance = 50.0,
scale = 0.3,
},
},
-- Tinkering / Tools
{
name = "Strawberry Tinkering Workshop",
cat = { "bricoleur" },
coords = vector3(-1815.606, -429.1396, 159.1538),
radius = 5.0,
blip = {
hash = "blip_weapon_throwing_knife",
displaydistance = 50.0,
scale = 0.3,
},
},
-- Recycling
{
name = "Strawberry Recycling Workshop",
cat = { "recyclage" },
coords = vector3(-1819.836, -421.7756, 159.092),
radius = 5.0,
blip = {
hash = "blip_shop_blacksmith",
displaydistance = 50.0,
scale = 0.3,
},
},
}

Troubleshooting

Issue Solution
Categories not showing Verify category name matches the key in shared/craft/*.lua files
Blip not appearing Check blip hash is valid and displaydistance is not set to 0
Cannot access crafting menu Ensure you're within the defined radius of the coords
Job-locked recipes not showing Verify player has the correct job and minimum grade

Last updated: September 9, 2026