Configuration
Files: config/config.lua, config/tablet.lua
All configuration options for the wtf_group resource.
config.lua
Framework
lua
Config.Framework = 'auto' -- 'auto', 'qbcore', 'esx', 'qbx', 'standalone'
Config.FrameworkOverride = nil -- Override detected frameworkGroup Limits
lua
Config.MinMembers = 1
Config.MaxMembers = 8
Config.InviteTimeout = 30 -- seconds
Config.DefaultGroupType = 'default'
Config.GroupLimits = {
default = { min = 1, max = 8 },
heist = { min = 2, max = 6 },
robbery = { min = 1, max = 4 },
job = { min = 1, max = 3 },
race = { min = 2, max = 12 },
}Task Settings
lua
Config.LockOnTask = true -- Lock group during active task
Config.FailOnDrop = false -- Auto-fail if member drops
Config.PayDropped = false -- Pay dropped members
Config.AutoPromote = true -- Auto-promote on leader leave
Config.AutoRejoin = true -- Auto-rejoin on reconnect
Config.PayoutSplit = 'equal'Roles
lua
Config.Roles = {
{ id = 'leader', label = 'Leader', icon = 'crown', color = '#e94560', permissions = { ... } },
{ id = 'driver', label = 'Driver', icon = 'car', color = '#3498db', permissions = { 'drive_vehicle' } },
{ id = 'hacker', label = 'Hacker', icon = 'laptop', color = '#2ecc71', permissions = { 'hack_terminal' } },
{ id = 'shooter', label = 'Shooter', icon = 'crosshairs', color = '#e67e22', permissions = { 'use_weapon' } },
{ id = 'healer', label = 'Healer', icon = 'medkit', color = '#9b59b6', permissions = { 'revive_player' } },
{ id = 'member', label = 'Member', icon = 'user', color = '#95a5a6', permissions = {} },
}Reputation
lua
Config.Reputation = {
XPPerTaskComplete = 100,
XPPerTaskFail = 10,
XPPerMemberBonus = 10,
LevelThresholds = { 0, 500, 1200, 2500, 5000, 10000, 20000, 50000 },
MaxLevel = 8,
Perks = { ... },
}GPS Blips
lua
Config.Blips = {
enabled = true,
requireItem = true,
item = 'gps_tracker',
color = 3,
scale = 0.8,
footInterval = 500,
vehicleInterval = 500,
sprites = { ... },
vehicleClasses = { ... },
vehicleModels = { ... },
}Feature Toggles
lua
Config.Alliance = { MaxAlliances = 3, MaxWars = 2, WarDuration = 3600 }
Config.Turfs = { Enabled = true, MaxTurfs = 5, IncomeInterval = 600 }
Config.Bounties = { Enabled = true, MaxActiveBounties = 10 }
Config.Mailbox = { Enabled = true, MaxMessageLength = 5000 }
Config.Garage = { Enabled = true, MaxVehicles = 10 }VPN
lua
Config.VpnAdminCommands = {
enabled = true,
ace = 'admin',
}
Config.VpnProxies = {
{ id = 'standard', name = 'Standard VPN', description = 'Basic encrypted connection', icon = 'shield', color = '#4caf50', category = 'Free', is_default = true, sort_order = 1 },
{ id = 'regional', name = 'Regional Proxy', description = 'Route through regional servers', icon = 'globe', color = '#2196f3', category = 'Free', is_default = true, sort_order = 2 },
{ id = 'darkweb', name = 'Dark Web Proxy', description = 'Anonymous routing', icon = 'skull', color = '#9c27b0', category = 'Premium', is_default = false, sort_order = 3 },
{ id = 'military', name = 'Military Grade', description = 'Military-grade encryption', icon = 'lock', color = '#ff5722', category = 'Premium', is_default = false, sort_order = 4 },
{ id = 'quantum', name = 'Quantum Encrypted', description = 'Quantum-resistant protocol', icon = 'atom', color = '#00bcd4', category = 'Premium', is_default = false, sort_order = 5 },
{ id = 'ghost', name = 'Ghost Protocol', description = 'Complete digital invisibility', icon = 'ghost', color = '#607d8b', category = 'Premium', is_default = false, sort_order = 6 },
{ id = 'phantom', name = 'Phantom Shield', description = 'Undetectable connection', icon = 'eye-off', color = '#e91e63', category = 'Premium', is_default = false, sort_order = 7 },
}Proxy fields:
id— Unique identifier (used in exports and DB)name— Display name in VPN appdescription— Tooltip texticon— Icon identifier (shield, globe, skull, lock, atom, ghost, eye-off)color— Hex color for the iconcategory—FreeorPremiumis_default—true= free (no key needed),false= requires license keysort_order— Display order in the app
Darkweb Category
lua
Config.DarkWeb = {
requiredProxyId = 'darkweb', -- Which proxy ID triggers darkweb access
apps = { 'vpn', 'auction' }, -- Apps gated by darkweb VPN connection
}Fields:
requiredProxyId— Must match anidfromConfig.VpnProxies. When the player is connected to this proxy, the Darkweb category appears in the App Store.apps— List of app IDs that require darkweb VPN to install. These apps are hidden from the App Store and cannot be installed unless connected to the required proxy. Already-installed apps remain accessible.
Behavior:
- Darkweb category tab only visible when connected to the required proxy
- Darkweb apps filtered out when not connected
- Install blocked for darkweb apps without VPN
- Uninstall always works regardless of VPN
- VPN app reconnection correctly restores connected view after minimize/restore
Contracts
lua
Config.Contracts = {
enabled = true,
maxPerPlayer = 3,
restockInterval = 3600,
restockAmount = 5,
requireGroup = true,
requireLeaderToStart = true,
cooldownActivity = 'contract',
showStock = true,
showPlayerCount = true,
globalLock = true,
categories = {
{ id = 'all', label = 'All', icon = '📋' },
{ id = 'heist', label = 'Heists', icon = '💀' },
{ id = 'robbery', label = 'Robberies', icon = '🔫' },
{ id = 'job', label = 'Jobs', icon = '💼' },
},
contracts = {
gruppe6_heist = {
name = 'Gruppe6 Armored Truck',
description = 'Rob a Gruppe6 Stockade armored truck.',
category = 'heist',
price = 50000,
initialStock = 10,
cooldown = 3600,
failCooldown = 600,
minPlayers = 1,
minLevel = 1,
enabled = true,
integration = {
resource = 'gruppe6-heist',
startEvent = 'gruppe6_heist:client:startFromContract',
startTarget = 'client',
},
},
},
}Fields:
enabled— Master toggle for the Contracts appmaxPerPlayer— Max owned contracts per player per typerestockInterval— Seconds between automatic stock restocksrestockAmount— How many units added per restock tickrequireGroup— Must be in a group to purchase contractsrequireLeaderToStart— Only the group leader can start a purchased contractcooldownActivity— Cooldown key used withBridge.SetCooldownshowStock— Show stock info on contract cardsshowPlayerCount— Show how many players own each contractglobalLock— Only ONE active instance per contract type server-widecategories— Filter tabs in the Browse viewcontracts— Table of available contract types
Contract fields:
name— Display namedescription— Short descriptioncategory— Must match a category IDprice— Cost to purchaseinitialStock— Starting stock (restocks to this)cooldown— Seconds after completion before same player can buy againfailCooldown— Seconds after failure before same player can buy againminPlayers— Minimum group members required to startminLevel— Minimum group reputation level to startenabled— Toggle individual contractintegration— Optional external resource integration
Integration fields:
resource— External resource namestartEvent— Event name fired on the client when contract startsstartTarget—'client'or'server'(where the event is triggered)
tablet.lua
Tablet Settings
lua
Config.Tablet = {
enabled = true,
command = 'tablet',
keybind = 'F7',
animation = 'phone',
iconSize = 'medium',
}Taskbar
lua
Config.Tablet.taskbar = {
position = 'bottom',
autoHide = false,
height = 48,
showClock = true,
clockFormat = '24h',
}Window Manager
lua
Config.Tablet.windows = {
snapEnabled = true,
snapThreshold = 30,
animateWindows = true,
defaultWidth = 700,
defaultHeight = 500,
minWidth = 300,
minHeight = 200,
}Themes
3 built-in themes: dark, light, cyberpunk
Notifications
lua
Config.Tablet.notifications = {
enabled = true,
sound = true,
toastDuration = 4000,
maxVisible = 5,
}Permissions
lua
Config.Tablet.permissions = {
requireGroup = false,
adminOnly = false,
allowedJobs = {},
}