# Server

## Events (General)

### Prison Action Listener

{% hint style="info" %}
**SERVER**
{% endhint %}

This event is listener for actions happening in prison.

#### Example code

{% code title="server.lua" overflow="wrap" lineNumbers="true" %}

```lua

--- Action Types ---

-- PRISONER_RELEASED: Player is released from prison
-- PRISONER_LOADED: Player rejoins and is jailed since they have a remaining sentence
-- PRISONER_NEW: New player is jailed
-- PLAYER_ESCAPE_FROM_PRISON: Player escaped from prison (Prison break)
-- PLAYER_DESTROYED_WALL: Player destroyed a wall in prison (Prison break)

--- Prisoner Data Structure ---
--  data.prisoner: {
--     state: string,
--     officerName: string,
--     owner: string,
--     id: int,
--     jail_time: float,
--     source: int,
--     prisonerName: string,
--     jail_reason: string,
-- }

AddEventHandler('rcore_prison:server:heartbeat', function(actionType, data)
    -- Your event handling logic here

    if not next(data) then
        return
    end

    local prisoner = data.prisoner

    if not prisoner then
        return
    end

    if actionType == 'PRISONER_NEW' then
        print('New prisoner loaded')
    end
end)

```

{% endcode %}

## Exports (General)

List of general exports.

### Jail

{% hint style="info" %}
**SERVER**
{% endhint %}

This export is used when you want to jail target citizen.

#### Example code

{% code title="server.lua" overflow="wrap" lineNumbers="true" %}

```lua
local playerId = 1 -- playerId
local jailTime = 5 -- 5 minutes
local jailReason = 'multiple felonies' -- jailReason is optional, not needed
local officerPlayerId = 2 -- officerPlayerId is optional, if used it will be logged in ./jailcp Logs

exports['rcore_prison']:Jail(playerId, jailTime, jailReason, officerPlayerId)
```

{% endcode %}

### Unjail

{% hint style="info" %}
**SERVER**
{% endhint %}

This export is used when you want to unjail citizen which is in Prison.

#### Example code

{% code title="server.lua" overflow="wrap" lineNumbers="true" %}

```lua
local playerId = 1
local skipTeleport = true -- If you dont want to teleport in front of Prison

exports['rcore_prison']:Unjail(playerId, skipTeleport)
```

{% endcode %}

### UnjailOffline

{% hint style="info" %}
**SERVER**
{% endhint %}

This export is used when you want to unjail citizen which is offline

#### Example code

{% code title="server.lua" overflow="wrap" lineNumbers="true" %}

```lua
local charId = "ZW32561A"

exports['rcore_prison']:UnjailOffline(charId)
```

{% endcode %}

### GetPrisonerData

{% hint style="info" %}
**SERVER**
{% endhint %}

This export is used when you want to get more informations about target prisoner.

#### Example code

{% code title="server.lua" overflow="wrap" lineNumbers="true" %}

```lua
local playerId = 1
local data = exports['rcore_prison']:GetPrisonerData(playerId)

--- {

--- state: string,
--- officerName: string,
--- owner: string,
--- id: int,
--- jail_time: float,
--- source: int,
--- prisonerName: string,
--- jail_reason: string,
 

--- }: table


```

{% endcode %}

### EditPrisonerSentence

{% hint style="info" %}
**SERVER**
{% endhint %}

This export is used when you want to modify target prisoner sentence

#### Example code

{% code title="server.lua" overflow="wrap" lineNumbers="true" %}

```lua
local playerId = 1
local amount = 10 -- Set target player sentence
exports['rcore_prison']:EditPrisonerSentence(playerId, amount)

```

{% endcode %}

### IsPrisoner

{% hint style="info" %}
**SERVER**
{% endhint %}

This export is used when you want to check if target citizen is Prisoner

#### Example code

{% code title="server.lua" overflow="wrap" lineNumbers="true" %}

```lua
local playerId = 1
local state = exports['rcore_prison']:IsPrisoner(playerId)

if state then
    print('Player is prisoner')
else
    print('Player is citizen')
end

```

{% endcode %}

### AddCredits

{% hint style="info" %}
**SERVER**
{% endhint %}

This export is used when you want to give target Prisoner credits, if he has account!

#### Example code

{% code title="server.lua" overflow="wrap" lineNumbers="true" %}

```lua
local playerId = 1
local giveAmonunt = 500

exports['rcore_prison']:AddCredits(playerId, giveAmonunt)
```

{% endcode %}

### RemoveCredits

{% hint style="info" %}
**SERVER**
{% endhint %}

This export is used when you want to remove credits from Prisoner account.

#### Example code

{% code title="server.lua" overflow="wrap" lineNumbers="true" %}

```lua
local playerId = 1
local removeAmount = 500

exports['rcore_prison']:RemoveCredits(playerId, removeAmount)
```

{% endcode %}

### SetSolitary

{% hint style="info" %}
**SERVER**
{% endhint %}

This export is used when you want to sent Prisoner to Solitary cell

#### Example code

{% code title="server.lua" overflow="wrap" lineNumbers="true" %}

```lua
local playerId = 1
local sentenceAmount = 5 -- This is 5 mins by default
local sentenceReason = 'Attacked Prison Guard' -- optional, not requred

exports['rcore_prison']:SetSolitary(playerId, sentenceAmount)
```

{% endcode %}

### ReleaseFromSolitary

{% hint style="info" %}
**SERVER**
{% endhint %}

This export is used when you want to release prisoner from solitary

#### Example code

{% code title="server.lua" overflow="wrap" lineNumbers="true" %}

```lua
local playerId = 1

exports['rcore_prison']:ReleaseFromSolitary(playerId)
```

{% endcode %}

### IsPrisonerInSolitary

{% hint style="info" %}
**SERVER**
{% endhint %}

This export is used when you want to check if Prisoner is in Solitary cell

#### Example code

{% code title="server.lua" overflow="wrap" lineNumbers="true" %}

```lua
local playerId = 1
local state=  exports['rcore_prison']:IsPrisonerInSolitary(playerId)

if state then
    print('Prisoner is in solitary cell')
end
```

{% endcode %}

### StartCOMS

{% hint style="info" %}
**SERVER**
{% endhint %}

This export is used when you want to send citizen to Community service

#### Example code

{% code title="server.lua" overflow="wrap" lineNumbers="true" %}

```lua
local officerPlayerId = 1 -- If you sent nil instead, the action is not going to logged since initiator is not player but "server"
local targetPlayerid = 2 -- Target player which should have parolle
local parolleAmount = 10 -- How many COMS citizen have to do in cycle
local perollReason = 'Abusing' -- Optional (not required)


exports['rcore_prison']:StartCOMS(officerPlayerId, targetPlayerId, parolleAmount, perollReason)
```

{% endcode %}
