From the reference libraryRedM

autodoc_shared_functions

jo_libs/modules/pricing/autodoc/autodoc_shared_functions.md

autodoc_shared_functions

Constructor > jo.pricing.new()

Creates a canonical PriceClass. <br>

Constructor > jo.pricing.new() > Syntax

jo.pricing.new(data, reuseExisting)

Constructor > jo.pricing.new() > Parameters

data : PriceInput|PriceClass <BadgeOptional />

Price input to normalize <br> default:nil

reuseExisting : boolean <BadgeOptional />

Reuse existing PriceClass if already created <br> default:false

Constructor > jo.pricing.new() > Return Value

Type : PriceClass

Constructor > jo.pricing.new() > Example

local price = jo.pricing.new({
  money = 5,
  { money = 10 },
  { item = "water", quantity = 2 }
})

log(price:getCosts())
-- Expected output:
-- {
--   { money = 15 },
--   { item = "water", quantity = 2, keep = false }
-- }

Constructor > jo.pricing.newGroup()

Creates a canonical PriceGroupClass. <br>

Constructor > jo.pricing.newGroup() > Syntax

jo.pricing.newGroup(data, reuseExisting)

Constructor > jo.pricing.newGroup() > Parameters

data : PriceGroupInput <BadgeOptional />

Price group input to normalize <br> default:nil

reuseExisting : boolean <BadgeOptional />

Reuse existing PriceGroupClass if already created <br> default:false

Constructor > jo.pricing.newGroup() > Return Value

Type : PriceGroupClass

Constructor > jo.pricing.newGroup() > Example

local group = jo.pricing.newGroup({
  operator = "and",
  money = 10,
  gold = 2
})

print(group.operator)
-- Expected output: "and"

print(group:count())
-- Expected output: 2

log(group:compact():getCosts())
-- Expected output:
-- {
--   { money = 10 },
--   { gold = 2 }
-- }

JO Functions > jo.pricing.getCosts()

Returns the canonical costs list for a price input. <br>

JO Functions > jo.pricing.getCosts() > Syntax

jo.pricing.getCosts(price)

JO Functions > jo.pricing.getCosts() > Parameters

price : PriceInput

Price input

JO Functions > jo.pricing.getCosts() > Return Value

Type : Cost[]


JO Functions > jo.pricing.isPrice()

Returns true when a value is a PriceClass instance. <br>

JO Functions > jo.pricing.isPrice() > Syntax

jo.pricing.isPrice(value)

JO Functions > jo.pricing.isPrice() > Parameters

value : any

Value to test

JO Functions > jo.pricing.isPrice() > Return Value

Type : boolean

JO Functions > jo.pricing.isPrice() > Example

local price = jo.pricing.new({ money = 10 })
local plainTable = { costs = { { money = 10 } } }

print(jo.pricing.isPrice(price))
-- Expected output: true

print(jo.pricing.isPrice(plainTable))
-- Expected output: false

JO Functions > jo.pricing.isPriceGroup()

Returns true when a value is a PriceGroupClass instance. <br>

JO Functions > jo.pricing.isPriceGroup() > Syntax

jo.pricing.isPriceGroup(value)

JO Functions > jo.pricing.isPriceGroup() > Parameters

value : any

Value to test

JO Functions > jo.pricing.isPriceGroup() > Return Value

Type : boolean

JO Functions > jo.pricing.isPriceGroup() > Example

local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })
local plainTable = { operator = "or", prices = {} }

print(jo.pricing.isPriceGroup(group))
-- Expected output: true

print(jo.pricing.isPriceGroup(plainTable))
-- Expected output: false

JO Functions > jo.pricing.tax()

Returns the canonical costs list for a price input. <br> Splits a price into tax and remaining prices. <br>

JO Functions > jo.pricing.tax() > Syntax

jo.pricing.tax(price, percentage, roundUpItems)

JO Functions > jo.pricing.tax() > Parameters

price : PriceInput

Price input to split

percentage : number <BadgeOptional />

Tax multiplier applied to the input price <br> default:0

roundUpItems : boolean <BadgeOptional />

Round item quantities up instead of down <br> default:false

JO Functions > jo.pricing.tax() > Return Value

Type : PriceClass,PriceClass

JO Functions > jo.pricing.tax() > Example

local price = jo.pricing.new({ money = 10, item = "water", quantity = 3 })

-- With roundUpItems = false, item quantities in the tax are rounded down.
local taxPrice, remainingPrice = jo.pricing.tax(price, 0.5, false)

log(taxPrice:getCosts()) -- Tax PriceClass
-- Expected output:
-- {
--   { money = 5 },
--   { item = "water", quantity = 1, keep = false }
-- }

log(remainingPrice:getCosts()) -- Remaining PriceClass
-- Expected output:
-- {
--   { money = 5 },
--   { item = "water", quantity = 2, keep = false }
-- }

-- With roundUpItems = true, item quantities in the tax are rounded up.
local roundedTaxPrice, roundedRemainingPrice = jo.pricing.tax(price, 0.5, true)

log(roundedTaxPrice:getCosts()) -- Tax PriceClass
-- Expected output:
-- {
--   { money = 5 },
--   { item = "water", quantity = 2, keep = false }
-- }

log(roundedRemainingPrice:getCosts()) -- Remaining PriceClass
-- Expected output:
-- {
--   { money = 5 },
--   { item = "water", quantity = 1, keep = false }
-- }

The first returned PriceClass contains the tax amount. The second returned PriceClass contains the remaining price after the tax was removed from the input.

PriceClass Methods > PriceClass:add()

Adds a price to the current PriceClass. <br>

PriceClass Methods > PriceClass:add() > Syntax

PriceClass:add(price)

PriceClass Methods > PriceClass:add() > Parameters

price : PriceInput

Price input to add to the current price

PriceClass Methods > PriceClass:add() > Return Value

Type : PriceClass

PriceClass Methods > PriceClass:add() > Example

local price = jo.pricing.new({ money = 10 })
price:add({ money = 5, gold = 2 })

log(price:getCosts())
-- Expected output:
-- {
--   { money = 15 },
--   { gold = 2 }
-- }

PriceClass Methods > PriceClass:clear()

Removes every cost from the current PriceClass. <br>

PriceClass Methods > PriceClass:clear() > Syntax

PriceClass:clear()

PriceClass Methods > PriceClass:clear() > Return Value

Type : PriceClass

PriceClass Methods > PriceClass:clear() > Example

local price = jo.pricing.new({ money = 10, item = "water" })
price:clear()

log(price:getCosts())
-- Expected output: {}

print(price:isFree())
-- Expected output: true

PriceClass Methods > PriceClass:copy()

Creates a new independent copy of the current PriceClass. <br>

PriceClass Methods > PriceClass:copy() > Syntax

PriceClass:copy()

PriceClass Methods > PriceClass:copy() > Return Value

Type : PriceClass

PriceClass Methods > PriceClass:copy() > Example

local price = jo.pricing.new({ money = 10 })
local copy = price:copy()

copy:add({ gold = 2 })

log(price:getCosts())
-- Expected output: { { money = 10 } }

log(copy:getCosts())
-- Expected output: { { money = 10 }, { gold = 2 } }

PriceClass Methods > PriceClass:equals()

Returns true when another price has the same costs. <br>

PriceClass Methods > PriceClass:equals() > Syntax

PriceClass:equals(other)

PriceClass Methods > PriceClass:equals() > Parameters

other : PriceInput

Price input to compare with the current price

PriceClass Methods > PriceClass:equals() > Return Value

Type : boolean

PriceClass Methods > PriceClass:equals() > Example

local price = jo.pricing.new({ money = 10, item = "water" })

print(price:equals({ item = "water", money = 10 }))
-- Expected output: true

print(price:equals("invalid"))
-- Expected output: false

PriceClass Methods > PriceClass:getCosts() > Syntax

PriceClass:getCosts()

PriceClass Methods > PriceClass:getCosts() > Return Value

Type : Cost[]


PriceClass Methods > PriceClass:getGold() > Syntax

PriceClass:getGold()

PriceClass Methods > PriceClass:getGold() > Return Value

Type : number|nil

PriceClass Methods > PriceClass:getGold() > Example

local price = jo.pricing.new({ money = 10, gold = 2 })
local gold = price:getGold()

log(gold)
-- Expected output: 2

PriceClass Methods > PriceClass:getItem()

Returns an ItemCost by item name and keep flag. <br>

PriceClass Methods > PriceClass:getItem() > Syntax

PriceClass:getItem(item, keep)

PriceClass Methods > PriceClass:getItem() > Parameters

item : string

Item name

keep : boolean

Item keep flag - false: consumed cost, true: required but kept

PriceClass Methods > PriceClass:getItem() > Return Value

Type : ItemCost|nil

PriceClass Methods > PriceClass:getItem() > Example

local price = jo.pricing.new({
  { item = "water", quantity = 2, keep = false },
  { item = "permit", quantity = 1, keep = true }
})

local consumedWater = price:getItem("water", false)
local keptPermit = price:getItem("permit", true)

log(consumedWater)
-- Expected output: { item = "water", quantity = 2, keep = false }

log(keptPermit)
-- Expected output: { item = "permit", quantity = 1, keep = true }

PriceClass Methods > PriceClass:getItems() > Syntax

PriceClass:getItems()

PriceClass Methods > PriceClass:getItems() > Return Value

Type : ItemCost[]

PriceClass Methods > PriceClass:getItems() > Example

local price = jo.pricing.new({ money = 10, item = "water" })
local items = price:getItems()

log(items)
-- Expected output:
-- {
--   { item = "water", quantity = 1, keep = false }
-- }

PriceClass Methods > PriceClass:getMoney() > Syntax

PriceClass:getMoney()

PriceClass Methods > PriceClass:getMoney() > Return Value

Type : number|nil

PriceClass Methods > PriceClass:getMoney() > Example

local price = jo.pricing.new({ money = 10, gold = 2 })
local money = price:getMoney()

log(money)
-- Expected output: 10

PriceClass Methods > PriceClass:getRol() > Syntax

PriceClass:getRol()

PriceClass Methods > PriceClass:getRol() > Return Value

Type : number|nil

PriceClass Methods > PriceClass:getRol() > Example

local price = jo.pricing.new({ rol = 3 })
local rol = price:getRol()

log(rol)
-- Expected output: 3

PriceClass Methods > PriceClass:hasCurrency()

Returns true when a currency cost exists. <br>

PriceClass Methods > PriceClass:hasCurrency() > Syntax

PriceClass:hasCurrency(key)

PriceClass Methods > PriceClass:hasCurrency() > Parameters

key : "money"|"gold"|"rol"

Currency cost key

PriceClass Methods > PriceClass:hasCurrency() > Return Value

Type : boolean

PriceClass Methods > PriceClass:hasCurrency() > Example

local price = jo.pricing.new({ money = 10, item = "water" })

print(price:hasCurrency("money"))
-- Expected output: true

print(price:hasCurrency("gold"))
-- Expected output: false

PriceClass Methods > PriceClass:hasItem()

Returns true when an ItemCost exists for an item name and keep flag. <br>

PriceClass Methods > PriceClass:hasItem() > Syntax

PriceClass:hasItem(item, keep)

PriceClass Methods > PriceClass:hasItem() > Parameters

item : string

Item name

keep : boolean

Item keep flag - false: consumed cost, true: required but kept

PriceClass Methods > PriceClass:hasItem() > Return Value

Type : boolean

PriceClass Methods > PriceClass:hasItem() > Example

local price = jo.pricing.new({ item = "water", quantity = 2 })

print(price:hasItem("water", false))
-- Expected output: true

print(price:hasItem("water", true))
-- Expected output: false

PriceClass Methods > PriceClass:isCurrencyOnly()

Returns true when the PriceClass contains only currency costs. <br>

PriceClass Methods > PriceClass:isCurrencyOnly() > Syntax

PriceClass:isCurrencyOnly()

PriceClass Methods > PriceClass:isCurrencyOnly() > Return Value

Type : boolean

PriceClass Methods > PriceClass:isCurrencyOnly() > Example

print(jo.pricing.new({ money = 10, gold = 2 }):isCurrencyOnly())
-- Expected output: true

print(jo.pricing.new({ money = 10, item = "water" }):isCurrencyOnly())
-- Expected output: false

PriceClass Methods > PriceClass:isFree()

Returns true when the PriceClass has no payable costs. <br>

PriceClass Methods > PriceClass:isFree() > Syntax

PriceClass:isFree()

PriceClass Methods > PriceClass:isFree() > Return Value

Type : boolean

PriceClass Methods > PriceClass:isFree() > Example

print(jo.pricing.new():isFree())
-- Expected output: true

print(jo.pricing.new({ money = 0 }):isFree())
-- Expected output: true

print(jo.pricing.new({ item = "water" }):isFree())
-- Expected output: false

PriceClass Methods > PriceClass:isItemOnly()

Returns true when the PriceClass contains only item costs. <br>

PriceClass Methods > PriceClass:isItemOnly() > Syntax

PriceClass:isItemOnly()

PriceClass Methods > PriceClass:isItemOnly() > Return Value

Type : boolean

PriceClass Methods > PriceClass:isItemOnly() > Example

print(jo.pricing.new({ item = "water" }):isItemOnly())
-- Expected output: true

print(jo.pricing.new({ money = 10, item = "water" }):isItemOnly())
-- Expected output: false

PriceClass Methods > PriceClass:removeCurrency()

Removes a currency cost from the current PriceClass. <br>

PriceClass Methods > PriceClass:removeCurrency() > Syntax

PriceClass:removeCurrency(key)

PriceClass Methods > PriceClass:removeCurrency() > Parameters

key : "money"|"gold"|"rol"

Currency cost key to remove

PriceClass Methods > PriceClass:removeCurrency() > Return Value

Type : PriceClass

PriceClass Methods > PriceClass:removeCurrency() > Example

local price = jo.pricing.new({ money = 10, gold = 2 })
price:removeCurrency("money")

log(price:getCosts())
-- Expected output: { { gold = 2 } }

PriceClass Methods > PriceClass:removeItem()

Removes an ItemCost from the current PriceClass. <br>

PriceClass Methods > PriceClass:removeItem() > Syntax

PriceClass:removeItem(item, keep)

PriceClass Methods > PriceClass:removeItem() > Parameters

item : string

Item name

keep : boolean

Item keep flag - false: consumed cost, true: required but kept

PriceClass Methods > PriceClass:removeItem() > Return Value

Type : PriceClass

PriceClass Methods > PriceClass:removeItem() > Example

local price = jo.pricing.new({
  { item = "water", quantity = 2, keep = false },
  { item = "permit", keep = true }
})

price:removeItem("water", false)

log(price:getCosts())
-- Expected output:
-- {
--   { item = "permit", quantity = 1, keep = true }
-- }

PriceGroupClass Methods > PriceGroupClass:clear()

Removes every price from the group. <br>

PriceGroupClass Methods > PriceGroupClass:clear() > Syntax

PriceGroupClass:clear()

PriceGroupClass Methods > PriceGroupClass:clear() > Return Value

Type : PriceGroupClass

PriceGroupClass Methods > PriceGroupClass:clear() > Example

local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })
group:clear()

print(group:count())
-- Expected output: 0

print(group:isEmpty())
-- Expected output: true

PriceGroupClass Methods > PriceGroupClass:compact()

Compacts an "and" PriceGroupClass into a new PriceClass. <br>

PriceGroupClass Methods > PriceGroupClass:compact() > Syntax

PriceGroupClass:compact()

PriceGroupClass Methods > PriceGroupClass:compact() > Return Value

Type : PriceClass

PriceGroupClass Methods > PriceGroupClass:compact() > Example

local group = jo.pricing.newGroup({
  operator = "and",
  prices = {
    { money = 10 },
    { money = 5 },
    { item = "water", quantity = 2, keep = false  },
    { item = "water", quantity = 5 },
    { item = "water", quantity = 2, keep = true }
  }
})

local price = group:compact()
log(price:getCosts())
-- Expected output:
-- {
--   { money = 15 },
--   { item = "water", quantity = 7, keep = false },
--   { item = "water", quantity = 2, keep = true }
-- }

PriceGroupClass Methods > PriceGroupClass:copy()

Creates a new independent copy of the current PriceGroupClass. <br>

PriceGroupClass Methods > PriceGroupClass:copy() > Syntax

PriceGroupClass:copy()

PriceGroupClass Methods > PriceGroupClass:copy() > Return Value

Type : PriceGroupClass

PriceGroupClass Methods > PriceGroupClass:copy() > Example

local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })
local copy = group:copy()

copy:insert({ rol = 1 })

print(group:count())
-- Expected output: 2

print(copy:count())
-- Expected output: 3

PriceGroupClass Methods > PriceGroupClass:count()

Returns the number of prices in the group. <br>

PriceGroupClass Methods > PriceGroupClass:count() > Syntax

PriceGroupClass:count()

PriceGroupClass Methods > PriceGroupClass:count() > Return Value

Type : number

PriceGroupClass Methods > PriceGroupClass:count() > Example

local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })

print(group:count())
-- Expected output: 2

PriceGroupClass Methods > PriceGroupClass:get()

Returns a PriceClass by index. <br>

PriceGroupClass Methods > PriceGroupClass:get() > Syntax

PriceGroupClass:get(index)

PriceGroupClass Methods > PriceGroupClass:get() > Parameters

index : number

Price index

PriceGroupClass Methods > PriceGroupClass:get() > Return Value

Type : PriceClass|nil

PriceGroupClass Methods > PriceGroupClass:get() > Example

local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })
local firstPrice = group:get(1)

log(firstPrice:getCosts())
-- Expected output: { { money = 10 } }

PriceGroupClass Methods > PriceGroupClass:getCosts()

Returns the costs of a price by index. <br>

PriceGroupClass Methods > PriceGroupClass:getCosts() > Syntax

PriceGroupClass:getCosts(index)

PriceGroupClass Methods > PriceGroupClass:getCosts() > Parameters

index : number

Price index

PriceGroupClass Methods > PriceGroupClass:getCosts() > Return Value

Type : Cost[]|nil


PriceGroupClass Methods > PriceGroupClass:insert()

Inserts a PriceClass into the group. <br>

PriceGroupClass Methods > PriceGroupClass:insert() > Syntax

PriceGroupClass:insert(price, index)

PriceGroupClass Methods > PriceGroupClass:insert() > Parameters

price : PriceInput

Price input to insert

index : number <BadgeOptional />

Insertion index <br> default: append at the end

PriceGroupClass Methods > PriceGroupClass:insert() > Return Value

Type : PriceGroupClass

PriceGroupClass Methods > PriceGroupClass:insert() > Example

local group = jo.pricing.newGroup({ { money = 10 } })
group:insert({ gold = 2 })
group:insert({ rol = 1 }, 1)

print(group:count())
-- Expected output: 3

log(group:get(1):getCosts())
-- Expected output: { { rol = 1 } }

PriceGroupClass Methods > PriceGroupClass:isEmpty()

Returns true when the group contains no prices. <br>

PriceGroupClass Methods > PriceGroupClass:isEmpty() > Syntax

PriceGroupClass:isEmpty()

PriceGroupClass Methods > PriceGroupClass:isEmpty() > Return Value

Type : boolean

PriceGroupClass Methods > PriceGroupClass:isEmpty() > Example

local group = jo.pricing.newGroup()

print(group:isEmpty())
-- Expected output: true

group:insert({ money = 10 })

print(group:isEmpty())
-- Expected output: false

PriceGroupClass Methods > PriceGroupClass:remove()

Removes a PriceClass from the group by index. <br>

PriceGroupClass Methods > PriceGroupClass:remove() > Syntax

PriceGroupClass:remove(index)

PriceGroupClass Methods > PriceGroupClass:remove() > Parameters

index : number

Price index to remove

PriceGroupClass Methods > PriceGroupClass:remove() > Return Value

Type : PriceClass|nil

PriceGroupClass Methods > PriceGroupClass:remove() > Example

local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })
local removed = group:remove(1)

log(removed:getCosts())
-- Expected output: { { money = 10 } }

print(group:count())
-- Expected output: 1

PriceGroupClass Methods > PriceGroupClass:set()

Replaces an existing PriceClass by index. <br>

PriceGroupClass Methods > PriceGroupClass:set() > Syntax

PriceGroupClass:set(index, price)

PriceGroupClass Methods > PriceGroupClass:set() > Parameters

index : number

Existing price index to replace

price : PriceInput

Replacement price input

PriceGroupClass Methods > PriceGroupClass:set() > Return Value

Type : PriceGroupClass

PriceGroupClass Methods > PriceGroupClass:set() > Example

local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })
group:set(2, { item = "water", quantity = 2 })

log(group:get(2):getCosts())
-- Expected output:
-- {
--   { item = "water", quantity = 2, keep = false }
-- }
Back to documentation