OPX//77
opx_infinitycrafting

Server

Last updated on

The crafting contract on the server — register benches, read a bench's view, order and collect.

local crafting = OPX.Api.Get('crafting')

From server code inside opx_infinity. A Result is { ok = true, value } or { ok = false, error, detail }.

RegisterBench

Registers a bench and its recipes. Does not yield. Call it from your module's Start, after crafting has published.

crafting.RegisterBench(benchKey, definition)

Parameters

  • benchKey: string — letters, digits, _ - . :, up to 64.
  • definition: table — see Bench definition.

Returns

  • Result integer (recipe count) — errors invalid_bench (detail: first problem), bench_taken

UnregisterBenches

Removes every bench with that owner. Orders already filed stay in the database.

crafting.UnregisterBenches(owner)

Parameters

  • owner: string

Returns

  • Result integer (benches removed)
Example
function M.Stop() crafting.UnregisterBenches('mymodule') end

UnregisterBench

Drops one bench, when the owner named is the one that registered it.

crafting.UnregisterBench(key, owner)

Returns

  • Result — boolean, whether a bench went; error not_owner

Benches

Every bench, sorted by key.

crafting.Benches()

Returns

  • Result table[] — { key, owner, label, recipes, queue, anchored }

View

What the menu draws for one player at one bench. Yields.

crafting.View(player, benchKey)

Parameters

  • player: integer
  • benchKey: string

Returns

  • Result { bench, label, queue, cooking, free, recipes, orders }
    • recipes[i]: { key, label, icon, output, outputLabel, count, seconds, price, money, inputs = { { item, label, need, held } }, ok, error, short } — ok: can be ordered now; error: the refusal code.
    • orders[i]: { id, recipe, label, output, count, remaining, ready }, soonest first.

Order

Places an order. Yields.

crafting.Order(player, benchKey, recipeKey)

Parameters

  • player: integer
  • benchKey: string
  • recipeKey: string

Returns

  • Result { id, seconds } — seconds: time until this order is ready, queue included. Errors: the refusal codes.
Example
local placed = crafting.Order(source, 'mymodule:bench', 'handgun_rounds')
if placed.ok then print(('ready in %d s'):format(placed.value.seconds)) end

Collect

Collects a ready order. Yields.

crafting.Collect(player, orderId)

Parameters

  • player: integer
  • orderId: integer

Returns

  • Result { bench, item, count }

On this page