> For the complete documentation index, see [llms.txt](https://code-after-sex.gitbook.io/script-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://code-after-sex.gitbook.io/script-documentation/cas-metabolism-v2/exports.md).

# Exports

All CAS Metabolism V2 exports and events for RedM — read and write hunger, thirst, stress, alcohol and weight, control the HUD, and register your own items.

Replace `cas-metabolism` with whatever you named the folder.

***

## Server

### Reading

```lua
local state = exports['cas-metabolism']:getState(source)
-- { hunger = 72.5, thirst = 48.0, hygiene = 91.0, urine = 12.0,
--   stress = 4.0, alcohol = 0.0, weight = 50.0 }

local hunger = exports['cas-metabolism']:getNeed(source, 'hunger')
local drink  = exports['cas-metabolism']:getAlcohol(source)
local drunk  = exports['cas-metabolism']:isDrunk(source)        -- boolean

exports['cas-metabolism']:getFramework()                        -- 'vorp' or 'rsg'
```

### Writing

```lua
exports['cas-metabolism']:setNeed(source, 'thirst', 100)
exports['cas-metabolism']:addNeed(source, 'hunger', -15)
exports['cas-metabolism']:addStress(source, 20)

exports['cas-metabolism']:setState(source, { hunger = 80, thirst = 60 })
exports['cas-metabolism']:resetState(source)
exports['cas-metabolism']:saveNow(source)
```

`setNeed` and `addNeed` take `hunger`, `thirst`, `hygiene`, `urine`, `stress`, `alcohol` and `weight`.

### Applying an item's effects without the animation

```lua
exports['cas-metabolism']:applyEffects(source, {
    hunger = 30, thirst = 10, stress = -5,
})
```

### Registering items

```lua
exports['cas-metabolism']:registerConsumable('apple', {
    recipe = 'fruit', label = 'Apple', effects = { hunger = 20 },
})

exports['cas-metabolism']:registerConsumeHandler('myHandler', function(source, item, recipe)
    -- return true to say you handled it yourself
end)
```

***

## Client

### Reading

```lua
exports['cas-metabolism']:getState()
exports['cas-metabolism']:getNeed('thirst')
exports['cas-metabolism']:getTemperature()      -- degrees Celsius
exports['cas-metabolism']:getAlcoholStage()     -- nil, or the current stage
exports['cas-metabolism']:getClothingWarmth()   -- what they are wearing is worth
exports['cas-metabolism']:getWeight()
-- { weight = 61.2, band = 'stout', steps = 1, index = 12, base = 11, ... }

exports['cas-metabolism']:isConsuming()
exports['cas-metabolism']:isRelieving()
exports['cas-metabolism']:isDrunk()
exports['cas-metabolism']:calmSources()
```

### Showing and hiding the HUD

The pair a radial menu wants:

```lua
exports['cas-metabolism']:setHudVisible(false)   -- put it away
exports['cas-metabolism']:setHudVisible(true)    -- bring it back
exports['cas-metabolism']:isHudVisible()         -- did the PLAYER hide it?
exports['cas-metabolism']:toggleHud()
```

{% hint style="info" %}
`isHudVisible` answers "did the player put it away", not "is it on screen right now". A HUD hidden by a cutscene still reports visible, which is what a menu's toggle needs.
{% endhint %}

### Your own reason to hide it

```lua
exports['cas-metabolism']:registerHideRule('myMenu', function()
    return MyMenuIsOpen        -- return true to hide
end)

exports['cas-metabolism']:removeHideRule('myMenu')
```

Also available: `setHideWhen(name, on)`, `isHideWhen(name)`, `setSprintHide(on)`, `isSprintHide()`, `isHidingForSprint()`.

### Driving actions

```lua
exports['cas-metabolism']:consume('apple')
exports['cas-metabolism']:cancelConsume()
exports['cas-metabolism']:drinkFromSource()
exports['cas-metabolism']:relieve()
exports['cas-metabolism']:vomit()
exports['cas-metabolism']:passOut()
exports['cas-metabolism']:notify('Message', 'success')  -- 'success' 'error' 'inform'
```

### Feeding the rail

```lua
exports['cas-metabolism']:setTelegrams(3)
exports['cas-metabolism']:setVoiceRange('whisper')   -- 'whisper' 'normal' 'shout'
```

### Settings panel

```lua
exports['cas-metabolism']:openSettings()
exports['cas-metabolism']:closeSettings()
```

***

## Events

Listen for a notification instead of showing ours:

```lua
AddEventHandler('cas-metabolism:notify', function(message, kind)
    -- kind is 'success', 'error' or 'inform'
end)
```

Start a smoke from your own item script:

```lua
TriggerEvent('cas-metabolism:smoke:cigaret')
TriggerEvent('cas-metabolism:smoke:cigar')
TriggerEvent('cas-metabolism:smoke:pipe_smoker')
TriggerEvent('cas-metabolism:smoke:chewingtobacco')
TriggerEvent('cas-metabolism:smoke:stop')
```
