> For the complete documentation index, see [llms.txt](https://souda-hub.gitbook.io/souda-hub-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://souda-hub.gitbook.io/souda-hub-docs/scripts/uniqueue.md).

# Uniqueue

## Client

### Getting Group or Is in Group

```lua
-- LocalPlayer.state.group or nil
-- Returns Group ID through State Bag
if LocalPlayer.state.group then
    --Your Code
end
```

## Server

### Exports

#### GetFellowGroupMembers

```lua
GetFellowGroupMembers(player)
-- returns a table array
{
      name = GetPlayerName(source), -- Fivem Name
      isLeader = false or true,
      id = 1,
}

--Example Code

local Members = exports['souda-uniqueue']:GetFellowGroupMembers(source)
if not Members then return end --Means Not In Any Group
for _, e in pairs(Members) do
      TriggerClientEvent('test:event', e.id, 'meow')
end
```

#### GetMembersByGroup

```lua
GetMembersByGroup(groupID)
-- returns a table array
{
      name = GetPlayerName(source), -- Fivem Name
      isLeader = false or true,
      id = 1,
}

--Example
local group = Player(source).state.group
if not group then return end
local Members = exports['souda-uniqueue']:GetMembersByGroup(group)
if not Members then return end --Means Not In Any Group
for _, e in pairs(Members) do
      TriggerClientEvent('test:event', e.id, 'meow')
end
```

#### GetGroupByMember (Better Use State Bags)

```lua
GetGroupByMember(player)
-- Returns Group ID
-- Example
local Group = GetGroupByMember(source)
-- Better Option
local Group = Player(source).state.group
```

#### CreateQueue

```lua
-- name = Unique Identifier Example : bank_robbbery
-- minPoliceRequired = Police Amount Required Eg : 2
-- Cooldown = Each Job Gets Assigend After This Required Value in Seconds : 60 
-- MinMembers = MinMembers Requierd to Start The Job else Removed From Queue
-- MaxMembers = MaxMembers Requierd to Start The Job else Removed From Queue
-- OnStart = function with group which is sent onstart(group) see Example

CreateQueue(name, minPoliceRequired, cooldown, minMembers, maxMembers, onStart)
--Example
SetTimeout(500, function () -- Timeout server can initialize other scripts before
    exports['souda-uniqueue']:CreateQueue('bank_robbery', 3, 600, 3, 5, function (group)
        local Members = exports['souda-uniqueue']:GetMembersByGroup(group)
        if Members then
            for _, m in pairs(Members) do
                TriggerClientEvent('cl:souda-test:assignJob', m.id, 'meow')
            end
        end
    end)
end)
```

#### JoinQueue

```lua
-- name Queue Name Eg : bank_robbery
-- Group ID
-- returns Position of Queue after join else false
JoinQueue(name, group)
--Example
local group = Player(source).state.group
if not group then return end
local Position = exports['souda-uniqueue']:JoinQueue('bank_robbery', group)
print(Position) --Returns Queue Position
```

#### LeaveQueue

```lua
-- name Queue Name Eg : bank_robbery
-- Group ID
-- returns true or false
LeaveQueue(name, group)
--Example
local group = Player(source).state.group
if not group then return end
local Left = exports['souda-uniqueue']:JoinQueue('bank_robbery', group)
print(Left) --Returns true or false
```

#### GetQueuePosition

```lua
-- name Queue Name Eg : bank_robbery
-- Source Player ID
-- Returns Current Position in Queue or false
GetQueuePosition(source, name)
--Example
local group = Player(source).state.group
if not group then return end
local Position = exports['souda-uniqueue']:GetQueuePosition(source, group)
```

#### GetGroupSize

```lua
-- group ID
-- Returns Group Size : 2 or false
GetGroupSize(group)
-- Example
local group = Player(source).state.group
if not group then return end
local Size = exports['souda-uniqueue']:GetGroupSize(group)
```

## Statebags

```lua
local group = Player(source).state.group
if not group then return end
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://souda-hub.gitbook.io/souda-hub-docs/scripts/uniqueue.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
