Skip to content

MetaDen Tailor API Reference

Type Notes

  • source / playerId: server ID (number).
  • citizenId / identifier: unique persistent player ID (string).
  • vector3/vector4: FiveM vectors, but many callbacks also return plain {x,y,z,w} tables.
  • Callback signatures below are shown from consumer callsite perspective; source is provided internally by metabridge.

Client Exports

ExportSignatureReturnsSide effects
ToggleClothing`ToggleClothing(a?: stringtable, b?: stringtable, c?: string
EquipClothingEquipClothing(itemName: string)booleanApplies configured clothing variants for itemName; sends notify.
UnequipClothingUnequipClothing(itemName: string)booleanRestores previously stored ped appearance for itemName; sends notify.
GetCraftAmountGetCraftAmount()integerRead-only; current local craft amount (1..50).

ToggleClothing resolves item name from several payload shapes (direct name, item, itemName, item_name, nested data.name, metadata.name), including ox-style item use payloads.

Server Exports

ExportSignatureReturnsSide effects
GetExperienceDataGetExperienceData(source: number){ level: number, experience: number, experienceToNextLevel: number }Reads/creates tailorjob row for player identifier.
GetActiveDeliveryMission`GetActiveDeliveryMission(sourceOrIdentifier: numberstring)``DeliveryMission

DeliveryMission shape:

lua
---@class DeliveryMission
---@field item string
---@field itemName string
---@field amount number
---@field progress number
---@field reward number
---@field payment number
---@field location { x:number, y:number, z:number, w:number }

Metabridge Callbacks

CallbackSignature (consumer callsite)ReturnsNotes
tailor:server:getPlayerExperiencerequestCallbackAwait('tailor:server:getPlayerExperience'){ level:number, experience:number, experienceToNextLevel:number }Mirrors GetExperienceData.
tailor:server:ensurePlayerCanCraftrequestCallbackAwait('tailor:server:ensurePlayerCanCraft', item:string, itemType:string, quantity:number)booleanValidates recipe, inventory weight/slot, and required item counts.
tailor:server:getPlayerJobrequestCallbackAwait('tailor:server:getPlayerJob')`stringnil`
tailor:server:giveOrderItemsrequestCallbackAwait('tailor:server:giveOrderItems')booleanAttempts to hand all ordered materials; may partially deliver and return false.
tailor:server:chargeForOrder`requestCallbackAwait('tailor:server:chargeForOrder', cost:number, order:table<string,number>, location:vector4table)`boolean
tailor:server:completeOrderrequestCallbackAwait('tailor:server:completeOrder', order:string)booleanDeletes order row by id + orderDetails; legacy/rarely used path.
tailor:server:getPlayerOrdersrequestCallbackAwait('tailor:server:getPlayerOrders')`tablenil`
tailor:server:getDeliveryOrderrequestCallbackAwait('tailor:server:getDeliveryOrder')`tablenil`
tailor:server:requestDeliveryOrderrequestCallbackAwait('tailor:server:requestDeliveryOrder')`tablenil`
tailor:server:deliverOrderrequestCallbackAwait('tailor:server:deliverOrder')`booleannil`

Client Events

EventSignaturePurpose
tailor:client:openLaptopMenu()Open laptop station flow.
tailor:client:openOrderMaterialsMenu()Open order-materials flow (implemented in laptop client).
tailor:client:openDeliverOrderMenu()Open active delivery flow UI (implemented in laptop client).
tailor:client:openTailorMenu()Open tailoring recipe menu/station.
tailor:client:openCraftingMenu()Open materials crafting station.
tailor:client:craftItem(data: { item:string, type:string, duration:number, title:string, amount?:number })Trigger craft progress and server craft event.
tailor:client:selectCraftingAmount(data: { previousMenu:string })Opens amount input dialog (1..50).
tailor:client:setCraftAmount`(value:numberstring)`
tailor:client:submitOrderMaterials(order:table<string,number>)Submit material order payload (laptop client).
tailor:client:resumeOrderMaterials()Resume existing material order flow.
tailor:client:requestDeliveryOrderUi()Request delivery order from UI flow.
tailor:client:startDeliveryOrderUi()Begin active delivery route.
tailor:client:cancelDeliveryOrderUi()Cancel active delivery route/UI state.
tailor:ui:openStation`(station: 'laptop''sewing'

Server Events

EventSignatureSide effects
tailor:server:startCrafting(item:string, itemType:string, quantity:number)Removes required inputs, adds crafted output, grants XP.
tailor:server:restoreSeat(playerId:number)Restores seat metadata condition, consumes fixed materials.
tailor:server:becomeTailor()Assigns tailor job and initializes job reputation metadata.
tailor:server:cancelOrder()Deletes active tailorjob_missions row for source player.

Client Commands

Enabled only when Config.EnableClothingCommands ~= false.

CommandSignatureDescription
/tailor_toggle_cloth/tailor_toggle_cloth <item_name>Calls clothing toggle flow for an item name.
/tailor_dump/tailor_dumpPrints current ped component/prop values to client console.
/tailor_capture_cloth/tailor_capture_cloth <item_name>Prints copy/paste-ready clothing = { ... } snippet from current ped state.

Data Model

tailorjob

  • Primary key: id (citizenId / identifier).
  • Progress fields: level, experience, unlockedCounterfeit.
  • Created automatically on first XP access when missing.

tailorjob_order

  • One active order row per player (id as PK).
  • Stores ordered material payload JSON in orderDetails.
  • Stores pickup coordinates in orderCoordX/Y/Z/W.

tailorjob_missions

  • One active mission row per player (id as PK).
  • Stores mission item, amount, reward/payment, and destination coordinates.

Integration Examples

Use item with ox_inventory export

lua
-- item definition example
client = {
  export = 'metaden-tailor.ToggleClothing'
}

-- direct invocation example
local ok = exports['metaden-tailor']:ToggleClothing('basic_shirt')

Craft validation + server craft

lua
local Bridge = exports['metabridge']

local canCraft = Bridge:requestCallbackAwait('tailor:server:ensurePlayerCanCraft', 'basic_shirt', 'Tops', 1)
if canCraft then
    TriggerServerEvent('tailor:server:startCrafting', 'basic_shirt', 'Tops', 1)
end

Delivery payment event templating

lua
Config.DeliveryPayment = {
    method = 'event',
    reason = 'Tailor Delivery',
    business = 'tailor',
    event = {
        name = 'payckecks:addToPaycheck',
        args = { '{playerId}', '{amount}', '{reason}' }
    }
}

Supported template placeholders in event args:

  • {playerId}
  • {amount}
  • {reason}
  • {business}
  • {citizenId}