Police Training
Main Config
This guide will help you understand and modify the configuration for the Police Training training system, a tactical police training resource for FiveM servers.
Table of Contents#
- Basic Settings
- Police & Permission Settings
- Game Mechanics
- Player & NPC Configuration
- UI & Notifications
- Weapons Configuration
- Map Selection System
- Spawn Points & Maps
- Interior Maps
- Small Interiors
Basic Settings#
Debug Mode
Config.Debug = false
- Purpose: Enables debug logging and additional console output
- Values:
trueorfalse - Recommendation: Keep
falsein production
Routing Bucket
Config.orgBucket = 0
- Purpose: The routing bucket players are placed in after completing training
- Values: Any integer
- Note: Most servers should keep this as
0(default world)
Police & Permission Settings#
Police Jobs
Config.PoliceRole = { 'police', 'offpolice' }
- Purpose: Defines which job names can access the training system
- Format: Table of strings
- Example: Add more jobs like
{ 'police', 'sheriff', 'state'— set to false to disable.
Minimum Grade Requirement
Config.PoliceGrade = 3
- Purpose: Minimum job grade required to access training for all jobs defined in Config.PoliceRole
Discord Role Verification (Optional)
Config.DiscordRoleCheck = false
Config.DiscordRolesToCheck = {
"Senior Admin Team",
"Admin Team",
"Tactical Operations Unit",
"Police Leaders"
}
- Purpose: Additional permission layer using Discord roles for those starting the match
- Setup: Set
DiscordRoleCheck = trueand add your Discord role names, you'll need to set this up with your own role check script in config-client.lua under the function roleCheck()
Game Mechanics#
Hostage Behaviour
Config.hostileHostageChance = 40
- Purpose: Percentage chance (0-100) that a hostage will become hostile when players attempt to cuff them
- Balance: Higher values = more challenging scenarios
Hostage Death Consequences
Config.deadHostageResponse = 'mask'
- Purpose: Adds a consequence to killing a hostage who is not hostile
- Options:
'mask'— Replaces player's mask as punishment'death'— Kills the playerfalse— No consequence
Mask Punishment Settings (if using 'mask' option)
Config.hostageKilledMask_Male = 97
Config.hostageKilledMaskTexture_Male = 0
Config.hostageKilledMask_Female = 97
Config.hostageKilledMaskTexture_Female = 0
Player & NPC Configuration#
Default Guard/Hostage Stats
Config.defaultHealth = 100
Config.defaultArmor = 0
Config.defaultAccuracy = 80
- Health: 1-200 (100 = full health)
- Armor: 0-100 (0 = no armor)
- Accuracy: 0-100 (affects AI accuracy)
NPC Guard Models
Config.SoldierModels = {
's_m_y_marine_02',
'csb_mweather',
's_m_y_swat_01',
's_m_y_marine_03'
}
- Purpose: Random selection of guard/enemy models
- Format: Valid GTA V ped model names
Default Weapons
Config.defaultWeapon = 'weapon_carbinerifle'
Config.hostileHostageWeapon = 'WEAPON_pistol'
UI & Notifications#
Radio Settings
Config.useRadio = false
Config.defaultRadio = 997
- useRadio: Enable/disable automatic radio channel assignment
- defaultRadio: Channel number to assign players
- Radio Script: Will need to implement your own radio script functionality in config-client.lua.
Notification Settings
Config.notifyTitle = 'Police Training'
Config.notifyAnimation = 'beatFade'
Config.notifyIcon = 'fa-solid fa-person-rifle'
Weapons Configuration#
The weapons table defines available weapons in the training system:
Config.Weapons = {
{ value = 'weapon_g36', label = 'G36' },
{ value = 'WEAPON_PISTOL', label = 'Pistol' },
-- Add more weapons here
}
Adding New Weapons
{ value = 'WEAPON_HASH', label = 'Display Name' },
Map Selection System#
Menu Structure
Config.mapSelection = {
menuId = 'map_selection',
title = 'Select Map Category!',
options = {
{
title = 'External Maps',
description = 'Maps outside in the fresh air!',
icon = 'fa-solid fa-tree',
menu = 'map_selection_external',
},
{
title = 'Interiors',
description = 'Maps inside buildings!',
icon = 'fa-solid fa-door-closed',
menu = 'map_selection_interior',
},
}
}
Best Practices#
Performance Optimization
- Keep enemy counts reasonable (15-30 for most maps)
- Use polyZones to limit map boundaries
- Test maps with multiple players
Balance Considerations
- Outdoor maps can handle more enemies
- Indoor maps should have fewer enemies but more tactical complexity
- Consider sightlines and cover when placing enemies
Testing New Maps
- Load the map with debug enabled
- Test with minimum and maximum enemy counts
- Verify all spawn points are accessible
- Check that polyZone boundaries work correctly
- Test with multiple players
Troubleshooting Common Issues
Players spawning in walls/ground#
- Check Z coordinate accuracy
- Ensure
findZ = truefor external maps if needed
Enemies not spawning#
- Verify coordinate format (vector4 with heading)
- Check that coordinates are within the map boundaries
Menu not displaying maps#
- Confirm
menuIdmatches between map and menu configuration - Verify all required fields are present
Performance issues#
- Reduce enemy counts
- Optimize polyZone point count
- Check for overlapping spawn points
Support & Resources#
- Coordinates: Use in-game coordinate tools or scripts
- Icons: Font Awesome icons (fa-solid, fa-regular, etc.)
- Models: GTA V ped and vehicle spawn names
- IPL: bob74_ipl documentation for interior configuration
Remember to restart your resource after making configuration changes!