Skip to content

Config Settings

Everything a server owner needs is in shared/config.lua. It is the only file left open in the escrowed resource. Game-feel values (movement, camera, painting, hunter weapon) are fixed on purpose and cannot be changed.

General

lua
FRKN.Locale = 'en'
OptionDescription
LocaleLanguage of the whole script: en, tr, de, fr, es, pt, it, nl, pl, ru, cs. Unknown codes fall back to English

Match Rules

lua
FRKN.Game = {
    MinPainters = 1,
    MinHunters = 1,
    MaxPlayers = 10,
    RequireReady = true,
    LobbyIdleTimeout = 600,
    LeaderboardFile = 'leaderboard.json',
    LeaderboardLimit = 500,
    DefaultMap = 'bennys',
    EndDelay = 5,
    Godmode = true,
    BlindHunters = true,
    MapLoadTime = 8,
    OutOfBoundsGrace = 10
}
OptionDescription
MinPainters / MinHuntersPlayers needed on each side before a match can start
MaxPlayersPlayers per lobby. Hard limit of 10 (there are 10 paint texture slots)
RequireReadyThe leader can only start once every player is ready
LobbyIdleTimeoutAn idle lobby closes after this many seconds. Does not apply during a match
LeaderboardFileFile the leaderboard is saved to, inside the resource folder
LeaderboardLimitHow many players the leaderboard keeps
DefaultMapMap used when a lobby is created without picking one
EndDelaySeconds the result screen stays up before everyone returns
GodmodePlayers cannot die or drown during a match
BlindHuntersThe hunter's screen is black while painters hide
MapLoadTimeSeconds of loading screen after the teleport so the map can stream in. 0 turns it off
OutOfBoundsGraceSeconds a player may stay outside the arena before being eliminated

Lobby Sliders

lua
FRKN.LobbySettings = {
    SearchTime = { Min = 60, Max = 600, Step = 30, Default = 300 },
    HideTime = { Min = 10, Max = 180, Step = 10, Default = 60 },
    Ammo = { Min = 1, Max = 250, Step = 1, Default = 30 },
    Hunters = { Min = 1, Max = 9, Step = 1, Default = 1 },
    Painters = { Min = 1, Max = 9, Step = 1, Default = 4 },
    Reward = { Min = 0, Max = 100000, Step = 50, Default = 0 },
    WhistleInterval = { Min = 20, Max = 90, Step = 5, Default = 45 }
}

Each entry controls one slider in the "Create Lobby" menu: its lowest value, highest value, step size and starting value.

OptionDescription
SearchTimeHow long hunters have to find everyone, in seconds
HideTimeHow long painters have to hide and paint, in seconds
AmmoHunter ammo when the leader turns the ammo limit on
Hunters / PaintersTeam sizes. In Double mode, Painters is the players per team
RewardEntry fee per player
WhistleIntervalSeconds between automatic whistles

Entry Fee & Prize Pool

lua
FRKN.Reward = {
    Enabled = true,
    Account = 'cash',
    Min = 0,
    Max = 100000,
    Step = 50,
    Default = 0,
    PayEliminated = true
}
OptionDescription
Enabledfalse removes the entry fee option from the lobby menu
Account'cash', 'bank', or an ESX account name
PayEliminatedCaught players still get a share if their side wins

The fee is taken from every player when the match starts and the pool is paid to the winning side. No money is created: if a match is cancelled or ends in a draw, everyone gets their fee back.

Team Radio

lua
FRKN.Voice = {
    Radio = true,
    RadioBase = 6000,
    EliminatedKeepRadio = false,
    RadioDefault = true,
    RadioKeyLabel = 'N'
}
OptionDescription
Radiofalse turns the team radio off completely
RadioBaseFirst radio channel used. Every lobby gets its own channels starting here, so pick a range no other resource uses
EliminatedKeepRadioCaught players stay on the team radio while spectating
RadioDefaultStarting position of the radio switch in the lobby menu
RadioKeyLabelKey shown on the HUD. Match it to your pma-voice radio key

Requires pma-voice. If it is not running, the radio switch is hidden automatically.

Whistle

lua
FRKN.Whistle = {
    Enabled = true,
    Key = 'B',
    KeyLabel = 'B',
    CooldownMs = 1200,
    AutoDefault = true,
    AutoInterval = 45,
    OnlyWhileSearching = true,
    Range = 42.0,
    NearRange = 5.0,
    Volume = 0.9,
    OcclusionVolume = 0.55,
    OcclusionFlags = 1,
    RippleAudience = 'painters',
    RippleDuration = 1500,
    RippleColor = { r = 66, g = 216, b = 105 }
}
OptionDescription
Enabledfalse removes the whistle key and its lobby switch
Key / KeyLabelDefault key and the label shown on the HUD
CooldownMsMilliseconds between two manual whistles
AutoDefaultStarting position of the auto-whistle switch
AutoIntervalFallback interval in seconds (the lobby slider decides the real one)
OnlyWhileSearchingNo whistling while painters are still hiding
Range / NearRangeDistance the whistle can be heard / distance it plays at full volume
Volume / OcclusionVolumeNormal volume / volume when a wall is in the way
OcclusionFlagsWhat counts as a wall: 1 = map geometry, 17 = also objects
RippleAudienceWho sees the ripple on the ground: 'painters', 'all' or 'none'

If you change Key, also tell your players: FiveM keeps each player's existing binding until they change it in the key settings.

Match Chat

lua
FRKN.Chat = {
    Enabled = true,
    Key = 'Y',
    KeyLabel = 'Y',
    MaxLength = 120,
    CooldownMs = 600,
    ShowMs = 9000,
    History = 40
}
OptionDescription
Key / KeyLabelKey that opens the chat box
MaxLengthCharacters per message
CooldownMsMilliseconds between two messages from the same player
ShowMsHow long a message stays on screen while the chat box is closed
HistoryMessages kept on screen while the chat box is open

Death Markers

lua
FRKN.DeathMarker = {
    Enabled = true,
    Audience = 'all',
    Duration = 0,
    DrawDistance = 45.0,
    Radius = 0.42,
    TextHeight = 0.55,
    TextScale = 1.0,
    Color = { r = 239, g = 68, b = 68 },
    ShowKiller = true
}
OptionDescription
AudienceWho sees the marker: 'all', 'painters' or 'hunters'
DurationSeconds the marker stays. 0 keeps it until the match ends
DrawDistanceMetres past which the marker is not drawn
Radius / TextHeight / TextScaleSize of the ring, height and size of the text
ShowKillerShows which hunter made the catch

Job NPC

lua
FRKN.JobNpc = {
    Enabled = true,
    Coords = { x = -213.5340, y = -1333.4371, z = 30.8904, h = 0.7685 },
    Model = 'as_big_idel_charactor_giant',
    GunModel = 'as_mc_gun_prop_giant',
    AnimDictionary = 'as_big_idel_charactor_giant@animation',
    Scale = 3.0,
    Height = 1.80,
    Gun = true,
    Animate = true,
    GroundLift = 0.0,
    TargetDistance = 2.5,
    TargetIcon = 'fa-solid fa-paint-roller',
    ReturnAfterDisconnect = true,
    StreamDistance = 150.0,
    Blip = { Enabled = true, Sprite = 1, Colour = 2, Scale = 0.8 }
}
OptionDescription
EnabledKeep this true: the NPC is the only way to open the lobby menu
CoordsWhere the NPC stands. h is the direction it faces
Model / GunModel / AnimDictionary / ScaleThe giant hunter character. Leave these as they are
HeightHow tall the NPC appears, in metres
Gun / AnimateGive the NPC a gun / play the idle pose
GroundLiftRaise the NPC if it sinks into the ground
TargetDistance / TargetIconInteraction distance and icon for qb-target / ox_target
ReturnAfterDisconnectA player who disconnects during a match comes back next to the NPC, not inside the arena
StreamDistanceThe NPC spawns within this many metres
BlipMap blip settings

Maps

lua
FRKN.Maps = {
    bennys = {
        label = "Benny's Garage",
        center = { x = -209.76, y = -1319.62, z = 30.08 },
        radius = 40.0,
        painters = {
            { x = -210.5457, y = -1322.8651, z = 30.8904, h = 129.7580 }
        },
        hunters = {
            { x = -210.5457, y = -1322.8651, z = 30.8904, h = 129.7580 }
        },
        doors = {
            { model = -427498890, x = -205.68, y = -1310.68, z = 30.3 }
        }
    },
    ...
}
OptionRequiredDescription
labelYesName shown in the lobby menu
centerYesCentre of the arena
radiusYesPlay area radius in metres. Players who stay outside it are eliminated
painters / huntersYesSpawn points (x, y, z, h). Add as many painter spawns as your largest painter team
doorsNoDoors locked for the whole match (model name or hash + position)
scaleNo'half' makes everyone start as small characters on this map
maxHeightNoCeiling above the centre, so nobody camps on the roof
minHeightNoFloor below the centre (negative). Players never fall under it
interiorLockNoSet to false for arenas that are not an MLO interior (prop shells)
boundsNoThe building's box (min / max). If the camera leaves it, the view switches to first person so the outside is never shown

Adding your own map: copy one of the existing entries, give it a new key, and set the centre, radius and spawn points. Stand at each spot in game and copy your coordinates. Add your map's doors to doors so nobody can leave the building during a match.

The three custom maps (artloft, modernpenthouse, modernloft) need their map resources (frkn-paintmap-1/2/3) to be running. If you remove a map resource, remove its entry from FRKN.Maps too.

Control Lock (advanced)

lua
FRKN.ControlLock = {
    Mode = 'all',
    Allowed = { 245, 249, 19, 20, 244, 38, 74 }
}
OptionDescription
Mode'all' blocks every GTA control while the painter character is active (cheapest), except the Allowed list. 'list' only blocks a fixed list and leaves everything else usable
AllowedControl IDs that stay usable in 'all' mode: chat, push-to-talk, ALT, Z, M, E, H

If another script (phone, radio, emotes…) stops working while someone is a painter, add its control ID to Allowed.