Configuration
return {
-- Debug mode (enables debug visuals for zones/targets)
Debug = false,
-- Locale configuration
Locale = "en", -- Language for translations (en, es, de, etc.)
-- UI Accent Color (hex color without #, used for HUD elements, shop, etc.)
-- Examples: "d97706" (orange/amber - default), "3b82f6" (blue), "10b981" (green), "ef4444" (red), "8b5cf6" (purple) "ec4899"" (pink)
AccentColor = "d97706",
-- Maps to load (file names in configs/maps without .lua extension)
Maps = {
'server_farm',
'cayo_estate',
'doomsday_bunker',
'gunrunning_bunker'
},
-- Cooldown configuration
Cooldown = {
enabled = true, -- If true, players will be put on cooldown after completing a horde
duration = 60, -- Cooldown duration in minutes (e.g., 60 = 1 hour)
},
-- Inventory configuration
ConfiscateInventory = true, -- If true, player's inventory is confiscated when entering horde and returned when leaving
-- Friendly fire configuration
FriendlyFire = false, -- If true, players can damage each other during horde. If false, players cannot damage teammates.
-- Revive on exit configuration
ReviveOnExit = true, -- If true, players will be revived when they leave/are kicked from a horde game
-- Shop Revive configuration (revive dead teammates from the shop menu)
ShopRevive = {
enabled = true, -- If true, players can revive dead teammates from the shop menu for points
cost = 5000, -- Cost in points to revive a teammate
},
-- Starting loadout given to players when entering horde
StartingLoadout = {
enabled = true, -- If true, give players the starting loadout when they enter horde
items = {
{ name = "WEAPON_PISTOL", count = 1 },
{ name = "ammo-9", count = 200 },
{ name = "bandage", count = 10 },
{ name = "oxy", count = 10 },
{ name = "burger", count = 3 },
{ name = "water", count = 3 },
{ name = "radio", count = 1 },
},
},
-- Radio sync configuration (requires pma-voice)
-- Channel allocation priority: useChannelPool > useRandomChannel > channelOffset
RadioSync = {
enabled = true, -- If true, all players in a horde game will be set to the same radio frequency
useChannelPool = false, -- If true, use a predefined pool of channels
channelPool = { 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010 }, -- Pool of available radio channels (only used if useChannelPool = true)
useRandomChannel = true, -- If true (and useChannelPool = false), generate a random channel between randomMin and randomMax
randomMin = 100000, -- Minimum random channel value (only used if useRandomChannel = true)
randomMax = 999999, -- Maximum random channel value (only used if useRandomChannel = true)
channelOffset = 1000, -- Radio channel = gameIdCounter + offset (only used if useChannelPool = false and useRandomChannel = false)
},
-- Level System Configuration
LevelSystem = {
-- XP required to reach each level (index = level)
levels = {
[1] = 0, -- Starting level
[2] = 100,
[3] = 250,
[4] = 450,
[5] = 700,
[6] = 1000,
[7] = 1400,
[8] = 1900,
[9] = 2500,
[10] = 3200,
[11] = 4000,
[12] = 5000,
[13] = 6200,
[14] = 7600,
[15] = 9200,
[16] = 11000,
[17] = 13000,
[18] = 15500,
[19] = 18500,
[20] = 22000,
-- Add more levels as needed
},
-- XP rewards
xpRewards = {
enemyKill = 10, -- XP per enemy killed
roundComplete = 50, -- XP per round completed
hordeComplete = 200, -- XP for completing a full horde
lootDeposit = 5, -- XP per loot deposited
},
},
-- Ped configuration (spawns via ox_lib point proximity)
-- You can use EITHER Ped, Zone, or BOTH for horde entry
Ped = {
enabled = true, -- Enable/disable ped spawning
model = 'g_m_y_lost_01', -- Ped model (use any valid ped model)
coords = vector4(705.81, -966.72, 29.41, 304.76), -- Spawn location (x, y, z, heading)
spawnDistance = 50.0, -- Distance to spawn ped (in units)
despawnDistance = 60.0, -- Distance to despawn ped (should be > spawnDistance)
scenario = 'WORLD_HUMAN_SMOKING', -- Ped scenario/animation (nil to disable)
invincible = true, -- Make ped invincible
freeze = true, -- Freeze ped in place
blockEvents = true, -- Block ped from reacting to events
-- ox_target options for the ped
target = {
enabled = true, -- Enable target on ped
icon = 'fas fa-comments', -- Target icon (Font Awesome)
label = 'Talk', -- Target label
distance = 2.5, -- Interaction distance
-- You can add custom action here or override in code
}
},
-- Zone-only configuration (target zone without a ped)
-- Use this if you want a target location instead of/in addition to a ped
Zone = {
enabled = false, -- Enable/disable zone target (set to true and Ped.enabled to false for zone-only)
coords = vector3(707.32, -967.67, 30.48), -- Zone center location (x, y, z)
size = vector3(1.5, 1.5, 2.0), -- Zone size (width, depth, height)
rotation = 0.0, -- Zone rotation in degrees
debug = false, -- Show debug zone outline (useful for positioning)
-- ox_target options for the zone
target = {
icon = 'fas fa-skull-crossbones', -- Target icon (Font Awesome)
label = 'Horde Mode', -- Target label (shown in target menu)
distance = 2.5, -- Interaction distance
}
},
-- ============================================
-- WEAPON DISPLAY MODELS (Mystery Box)
-- ============================================
-- Maps weapon names to their prop models for the mystery box weapon display
-- Add new weapons here to show them properly in the mystery box animation
-- The key is the weapon name (lowercase), the value is the prop model name
-- If a weapon is not listed, it will use the fallback model (w_pi_pistol)
WeaponDisplayModels = {
-- Pistols
["weapon_pistol"] = "w_pi_pistol",
["weapon_combatpistol"] = "w_pi_combatpistol",
["weapon_pistol_mk2"] = "w_pi_pistol_mk2",
["weapon_appistol"] = "w_pi_appistol",
["weapon_snspistol"] = "w_pi_sns_pistol",
["weapon_vintagepistol"] = "w_pi_vintage_pistol",
["weapon_heavypistol"] = "w_pi_heavypistol",
["weapon_ceramicpistol"] = "w_pi_ceramic_pistol",
["weapon_pistol50"] = "w_pi_pistol50",
-- Machine Pistols
["weapon_machinepistol"] = "w_sb_compactsmg",
-- SMGs
["weapon_microsmg"] = "w_sb_microsmg",
["weapon_smg"] = "w_sb_smg",
["weapon_smg_mk2"] = "w_sb_smg_mk2",
["weapon_minismg"] = "w_sb_minismg",
["weapon_combatpdw"] = "w_sb_pdw",
-- Shotguns
["weapon_pumpshotgun"] = "w_sg_pumpshotgun",
["weapon_pumpshotgun_mk2"] = "w_sg_pumpshotgunmk2",
["weapon_sawnoffshotgun"] = "w_sg_sawnoff",
["weapon_dbshotgun"] = "w_sg_doublebarrel",
["weapon_assaultshotgun"] = "w_sg_assaultshotgun",
["weapon_combatshotgun"] = "w_sg_pumpshotgunh4",
["weapon_heavyshotgun"] = "w_sg_heavyshotgun",
-- Assault Rifles
["weapon_carbinerifle"] = "w_ar_carbinerifle",
["weapon_carbinerifle_mk2"] = "w_ar_carbineriflemk2",
["weapon_assaultrifle"] = "w_ar_assaultrifle",
["weapon_assaultrifle_mk2"] = "w_ar_assaultriflemk2",
["weapon_specialcarbine"] = "w_ar_specialcarbine",
["weapon_specialcarbine_mk2"] = "w_ar_specialcarbinemk2",
["weapon_bullpuprifle"] = "w_ar_bullpuprifle",
["weapon_bullpuprifle_mk2"] = "w_ar_bullpupriflemk2",
["weapon_advancedrifle"] = "w_ar_advancedrifle",
["weapon_militaryrifle"] = "w_ar_bullpuprifleh4",
["weapon_compactrifle"] = "w_ar_assaultrifle_smg",
["weapon_tacticalrifle"] = "w_ar_carbinerifle",
-- Machine Guns
["weapon_combatmg"] = "w_mg_combatmg",
["weapon_combatmg_mk2"] = "w_mg_combatmgmk2",
["weapon_mg"] = "w_mg_mg",
["weapon_gusenberg"] = "w_sb_gusenberg",
-- Sniper Rifles
["weapon_marksmanrifle"] = "w_sr_marksmanrifle",
["weapon_marksmanrifle_mk2"] = "w_sr_marksmanriflemk2",
["weapon_sniperrifle"] = "w_sr_sniperrifle",
["weapon_heavysniper"] = "w_sr_heavysniper",
["weapon_heavysniper_mk2"] = "w_sr_heavysnipermk2",
-- Heavy Weapons
["weapon_rpg"] = "w_lr_rpg",
["weapon_minigun"] = "w_mg_minigun",
["weapon_grenadelauncher"] = "w_lr_grenadelauncher",
["weapon_hominglauncher"] = "w_lr_homing",
-- Melee (optional - for display in mystery box if added)
["weapon_bat"] = "w_me_bat",
["weapon_crowbar"] = "w_me_crowbar",
["weapon_knife"] = "w_me_knife_01",
["weapon_machete"] = "w_me_machette_lr",
["weapon_hatchet"] = "w_me_hatchet",
["weapon_switchblade"] = "w_me_switchblade",
},
-- Fallback model when weapon is not found in WeaponDisplayModels
WeaponDisplayFallback = "w_pi_pistol",
-- ============================================
-- WEAPON AMMO TYPE MAPPING
-- ============================================
-- Central config linking weapons to their ammo types
-- Add your weapons here and they'll automatically link to the correct ammo in shops (use lowercase)
-- Weapons not listed here (like melee) won't have ammo requirements
WeaponAmmoTypes = {
-- Pistols (9mm)
["weapon_pistol"] = "ammo-9",
["weapon_combatpistol"] = "ammo-9",
["weapon_pistol_mk2"] = "ammo-9",
["weapon_appistol"] = "ammo-9",
["weapon_ceramicpistol"] = "ammo-9",
["weapon_vintagepistol"] = "ammo-9",
["weapon_machinepistol"] = "ammo-9",
-- Pistols (.45 ACP)
["weapon_heavypistol"] = "ammo-45",
["weapon_snspistol"] = "ammo-45",
["weapon_snspistol_mk2"] = "ammo-45",
["weapon_pistol50"] = "ammo-45",
-- Revolvers
["weapon_revolver"] = "ammo-44",
["weapon_revolver_mk2"] = "ammo-44",
["weapon_doubleaction"] = "ammo-38",
["weapon_navyrevolver"] = "ammo-38",
-- SMGs (9mm)
["weapon_smg"] = "ammo-9",
["weapon_smg_mk2"] = "ammo-9",
["weapon_combatpdw"] = "ammo-9",
["weapon_minismg"] = "ammo-9",
-- SMGs (.45 ACP)
["weapon_microsmg"] = "ammo-45",
-- Shotguns
["weapon_pumpshotgun"] = "ammo-shotgun",
["weapon_pumpshotgun_mk2"] = "ammo-shotgun",
["weapon_sawnoffshotgun"] = "ammo-shotgun",
["weapon_dbshotgun"] = "ammo-shotgun",
["weapon_assaultshotgun"] = "ammo-shotgun",
["weapon_combatshotgun"] = "ammo-shotgun",
["weapon_heavyshotgun"] = "ammo-shotgun",
["weapon_musket"] = "ammo-shotgun",
-- Assault Rifles (5.56)
["weapon_carbinerifle"] = "ammo-rifle",
["weapon_carbinerifle_mk2"] = "ammo-rifle",
["weapon_specialcarbine"] = "ammo-rifle",
["weapon_specialcarbine_mk2"] = "ammo-rifle",
["weapon_bullpuprifle"] = "ammo-rifle",
["weapon_bullpuprifle_mk2"] = "ammo-rifle",
["weapon_advancedrifle"] = "ammo-rifle",
["weapon_militaryrifle"] = "ammo-rifle",
["weapon_tacticalrifle"] = "ammo-rifle",
["weapon_heavyrifle"] = "ammo-rifle",
-- Assault Rifles (7.62)
["weapon_assaultrifle"] = "ammo-rifle2",
["weapon_assaultrifle_mk2"] = "ammo-rifle2",
["weapon_compactrifle"] = "ammo-rifle2",
-- Machine Guns
["weapon_mg"] = "ammo-rifle",
["weapon_combatmg"] = "ammo-rifle",
["weapon_combatmg_mk2"] = "ammo-rifle",
["weapon_gusenberg"] = "ammo-rifle",
-- Sniper Rifles
["weapon_sniperrifle"] = "ammo-sniper",
["weapon_heavysniper"] = "ammo-sniper",
["weapon_heavysniper_mk2"] = "ammo-sniper",
["weapon_marksmanrifle"] = "ammo-sniper",
["weapon_marksmanrifle_mk2"] = "ammo-sniper",
["weapon_precisionrifle"] = "ammo-sniper",
},
-- ============================================
-- SHOP ITEMS CONFIGURATION (DEFAULT)
-- ============================================
-- This is the default shop configuration used for all maps.
-- Individual maps can override this by defining their own `shopItems` table
-- in their map config file (see configs/maps/*.lua for examples).
--
-- Item parameters:
-- name: item spawn name (must match ox_inventory item name)
-- label: display name in the shop UI
-- rarity: "common", "uncommon", "rare", or "epic" (affects color/styling)
-- price: cost in horde currency
-- chance: weighted chance to appear (higher = more likely, e.g. 100 vs 10)
-- quantity: how many of the item you receive per purchase (e.g. buy 1, get 3 bandages)
-- amount (optional): how many times this item can be purchased before it becomes sold out
-- - If set to 3, players can buy the item 3 times (each time getting 'quantity' items)
-- - Once purchased 'amount' times, item gets removed from list
-- - If omitted, item is removed from shop after a single purchase
--
-- Weighted chance system: higher "chance" values = more likely to appear
-- itemCount: number of items to show from this category in the shop
-- guaranteeAmmoForWeapons: if true, ammo for selected weapons will always appear in items section
-- ammoBoostMultiplier: how much to boost ammo chance when matching weapon is in shop (default 3x) - only used if guaranteeAmmoForWeapons is false
ShopItems = {
guaranteeAmmoForWeapons = true, -- Always include ammo for selected weapons in the items section
ammoBoostMultiplier = 3, -- Boost ammo chance by this multiplier when matching weapon is selected (fallback if guarantee is false)
items = {
itemCount = 6, -- Number of items to show in shop
list = {
-- Healing items
{ name = "bandage", label = "BANDAGE", rarity = "common", price = 150, quantity = 3, chance = 100 },
{ name = "firstaid", label = "FIRST AID KIT", rarity = "uncommon", price = 400, quantity = 1, chance = 50 },
{ name = "ifaks", label = "IFAK", rarity = "uncommon", price = 350, quantity = 1, chance = 55 },
{ name = "painkillers", label = "PAINKILLERS", rarity = "common", price = 200, quantity = 2, chance = 70 },
{ name = "oxy", label = "OXYCODONE", rarity = "rare", price = 300, quantity = 3, chance = 30 },
-- Food & Drink
{ name = "water", label = "WATER", rarity = "common", price = 100, quantity = 2, chance = 80 },
{ name = "burger", label = "BURGER", rarity = "common", price = 120, quantity = 2, chance = 75 },
{ name = "sandwich", label = "SANDWICH", rarity = "common", price = 110, quantity = 2, chance = 75 },
{ name = "sprunk", label = "SPRUNK", rarity = "common", price = 80, quantity = 2, chance = 85 },
-- Armor
{ name = "armour", label = "BODY ARMOR", rarity = "rare", price = 600, quantity = 1, chance = 25 },
-- Ammo types (item name must match the ammo type in WeaponAmmoTypes, e.g., "ammo-9")
{ name = "ammo-9", label = "9MM AMMO", rarity = "common", price = 100, quantity = 60, chance = 40, amount = 3 },
{ name = "ammo-45", label = ".45 ACP AMMO", rarity = "common", price = 120, quantity = 50, chance = 35, amount = 3 },
{ name = "ammo-38", label = ".38 SPECIAL AMMO", rarity = "uncommon", price = 130, quantity = 48, chance = 30, amount = 3 },
{ name = "ammo-44", label = ".44 MAGNUM AMMO", rarity = "uncommon", price = 160, quantity = 36, chance = 25, amount = 3 },
{ name = "ammo-rifle", label = "5.56 RIFLE AMMO", rarity = "uncommon", price = 150, quantity = 60, chance = 30, amount = 3 },
{ name = "ammo-rifle2", label = "7.62 RIFLE AMMO", rarity = "uncommon", price = 180, quantity = 60, chance = 25, amount = 3 },
{ name = "ammo-shotgun", label = "12 GAUGE SHELLS", rarity = "uncommon", price = 140, quantity = 24, chance = 30, amount = 3 },
{ name = "ammo-sniper", label = "SNIPER AMMO", rarity = "rare", price = 200, quantity = 20, chance = 15, amount = 3 },
-- Utilities
{ name = "lockpick", label = "LOCKPICK", rarity = "uncommon", price = 250, quantity = 1, chance = 40 },
{ name = "radio", label = "RADIO", rarity = "uncommon", price = 300, quantity = 1, chance = 35 },
{ name = "repairkit", label = "REPAIR KIT", rarity = "rare", price = 500, quantity = 1, chance = 20 },
},
},
-- Weapons (ammo types are looked up from WeaponAmmoTypes config above)
weapons = {
itemCount = 3, -- Number of weapons to show in shop
list = {
-- Pistols
{ name = "weapon_pistol", label = "PISTOL", rarity = "common", price = 400, chance = 80 },
{ name = "weapon_combatpistol", label = "COMBAT PISTOL", rarity = "common", price = 500, chance = 70 },
{ name = "weapon_pistol_mk2", label = "PISTOL MK2", rarity = "uncommon", price = 650, chance = 45 },
{ name = "weapon_appistol", label = "AP PISTOL", rarity = "uncommon", price = 700, chance = 40 },
{ name = "weapon_ceramicpistol", label = "CERAMIC PISTOL", rarity = "uncommon", price = 600, chance = 50 },
{ name = "weapon_vintagepistol", label = "VINTAGE PISTOL", rarity = "uncommon", price = 550, chance = 55 },
{ name = "weapon_heavypistol", label = "HEAVY PISTOL", rarity = "uncommon", price = 650, chance = 50 },
{ name = "weapon_snspistol", label = "SNS PISTOL", rarity = "common", price = 350, chance = 65 },
{ name = "weapon_machinepistol", label = "MACHINE PISTOL", rarity = "uncommon", price = 700, chance = 45 },
-- Revolvers
{ name = "weapon_revolver", label = "REVOLVER", rarity = "rare", price = 800, chance = 30 },
{ name = "weapon_doubleaction", label = "DOUBLE ACTION REVOLVER", rarity = "uncommon", price = 600, chance = 40 },
-- SMGs
{ name = "weapon_smg", label = "SMG", rarity = "rare", price = 900, chance = 30 },
{ name = "weapon_smg_mk2", label = "SMG MK2", rarity = "rare", price = 1100, chance = 20 },
{ name = "weapon_combatpdw", label = "COMBAT PDW", rarity = "rare", price = 950, chance = 25 },
{ name = "weapon_minismg", label = "MINI SMG", rarity = "uncommon", price = 750, chance = 35 },
{ name = "weapon_microsmg", label = "MICRO SMG", rarity = "uncommon", price = 700, chance = 40 },
-- Shotguns
{ name = "weapon_pumpshotgun", label = "PUMP SHOTGUN", rarity = "uncommon", price = 750, chance = 35 },
{ name = "weapon_sawnoffshotgun", label = "SAWED-OFF SHOTGUN", rarity = "uncommon", price = 650, chance = 40 },
{ name = "weapon_dbshotgun", label = "DOUBLE BARREL SHOTGUN", rarity = "rare", price = 850, chance = 25 },
{ name = "weapon_assaultshotgun", label = "ASSAULT SHOTGUN", rarity = "epic", price = 1400, chance = 10 },
{ name = "weapon_combatshotgun", label = "COMBAT SHOTGUN", rarity = "epic", price = 1500, chance = 8 },
-- Assault Rifles
{ name = "weapon_carbinerifle", label = "CARBINE RIFLE", rarity = "rare", price = 1200, chance = 20 },
{ name = "weapon_specialcarbine", label = "SPECIAL CARBINE", rarity = "rare", price = 1300, chance = 18 },
{ name = "weapon_bullpuprifle", label = "BULLPUP RIFLE", rarity = "rare", price = 1250, chance = 18 },
{ name = "weapon_advancedrifle", label = "ADVANCED RIFLE", rarity = "epic", price = 1500, chance = 12 },
{ name = "weapon_militaryrifle", label = "MILITARY RIFLE", rarity = "epic", price = 1600, chance = 10 },
{ name = "weapon_tacticalrifle", label = "TACTICAL RIFLE", rarity = "epic", price = 1550, chance = 10 },
{ name = "weapon_assaultrifle", label = "ASSAULT RIFLE", rarity = "rare", price = 1100, chance = 22 },
{ name = "weapon_compactrifle", label = "COMPACT RIFLE", rarity = "uncommon", price = 900, chance = 30 },
-- Sniper Rifles
{ name = "weapon_marksmanrifle", label = "MARKSMAN RIFLE", rarity = "epic", price = 1800, chance = 8 },
{ name = "weapon_sniperrifle", label = "SNIPER RIFLE", rarity = "epic", price = 2000, chance = 6 },
-- Machine Guns
{ name = "weapon_combatmg", label = "COMBAT MG", rarity = "epic", price = 2200, chance = 5 },
-- Melee (no ammo needed)
{ name = "weapon_bat", label = "BASEBALL BAT", rarity = "common", price = 200, chance = 60 },
{ name = "weapon_crowbar", label = "CROWBAR", rarity = "common", price = 250, chance = 55 },
{ name = "weapon_knife", label = "KNIFE", rarity = "common", price = 180, chance = 65 },
{ name = "weapon_machete", label = "MACHETE", rarity = "uncommon", price = 350, chance = 40 },
{ name = "weapon_hatchet", label = "HATCHET", rarity = "uncommon", price = 300, chance = 45 },
},
},
-- Shop perks reference VotePerks by their id
-- These apply the actual perk effects to the entire team
perks = {
itemCount = 2, -- Number of perks to show in shop
list = {
-- Common perks
{ name = "thick_skin", label = "-25% DAMAGE TAKEN", rarity = "common", price = 500, chance = 80 },
{ name = "fortified", label = "+50 ARMOR (-20% DMG)", rarity = "common", price = 400, chance = 70 },
{ name = "adrenaline", label = "+25% SPEED BELOW 50% HP", rarity = "common", price = 450, chance = 75 },
-- Uncommon perks
{ name = "speed_demon", label = "+50% MOVEMENT SPEED", rarity = "uncommon", price = 750, chance = 50 },
{ name = "scavenger", label = "+10 AMMO ON KILL", rarity = "uncommon", price = 600, chance = 55 },
{ name = "hired_gun", label = "+15 CURRENCY PER KILL", rarity = "uncommon", price = 650, chance = 50 },
{ name = "bargain_hunter", label = "-25% SHOP PRICES (-10% DMG)", rarity = "uncommon", price = 700, chance = 45 },
-- Rare perks
{ name = "vampire", label = "+25 HP PER KILL (NO REGEN)", rarity = "rare", price = 1000, chance = 25 },
{ name = "double_damage", label = "+100% DAMAGE (+50% DMG TAKEN)", rarity = "rare", price = 1200, chance = 20 },
{ name = "last_stand", label = "SURVIVE FATAL HIT ONCE", rarity = "rare", price = 1500, chance = 15 },
{ name = "lightweight", label = "+35% SPEED, +75% JUMP (+40% DMG TAKEN)", rarity = "rare", price = 900, chance = 30 },
{ name = "rich_loot", label = "+75% LOOT VALUE (+25% DMG TAKEN)", rarity = "rare", price = 1100, chance = 25 },
{ name = "headhunter", label = "+200% HEADSHOT DMG (-50% BODY)", rarity = "rare", price = 850, chance = 30 },
{ name = "bounty_hunter", label = "+50% CURRENCY (ENEMIES +25% FASTER)", rarity = "rare", price = 950, chance = 28 },
-- Epic perks
{ name = "infinite_ammo", label = "INFINITE AMMO", rarity = "epic", price = 2000, chance = 10 },
},
},
},
-- Reroll costs
RerollCost = 200,
-- Looting phase configuration
LootingPhaseDuration = 240, -- Duration in seconds (120 = 2 minutes)
-- Start with loot round instead of enemy round
-- If true, the first round will be a looting phase (after the intro), then enemy rounds begin
-- If false (default), the first round starts immediately (after the intro) with enemies
StartWithLootRound = true, -- If you have Confiscate to true, then it's pretty much a MUST that you enable this, unless you want your players to go at the NPCs with their bare hands :)
-- Clear dead bodies when a new round begins (after perk voting and looting phase, as "Round X beginning" appears)
-- If false, bodies remain until EndLootingPhase clears all bodies unconditionally
ClearBodiesOnRoundEnd = true,
-- ============================================
-- PER-MODEL CARRY OFFSETS
-- ============================================
-- Override offset/rotation for specific loot models
-- If a model is not listed here, it uses the default CarryAnimation values
CarryOffsets = {
['prop_box_ammo01a'] = {
offset = vector3(0.155, -0.090, 0.130),
rotation = vector3(-110.0, 179.0, 45.0),
},
['prop_box_ammo02a'] = {
offset = vector3(0.105, -0.090, 0.180),
rotation = vector3(-110.0, 184.0, 47.0),
},
['prop_cs_cardbox_01'] = {
offset = vector3(-0.065, 0.030, 0.230),
rotation = vector3(-130.0, 105.0, -1.0),
},
['prop_box_ammo04a'] = {
offset = vector3(0.135, -0.000, 0.200),
rotation = vector3(-137.0, 109.0, -21.0),
},
['h4_prop_h4_crate_cloth_01a'] = {
offset = vector3(0.175, 0.040, 0.190),
rotation = vector3(-99.0, 184.0, 35.0),
},
['prop_box_guncase_01a'] = {
offset = vector3(0.065, -0.060, 0.200),
rotation = vector3(-130.0, 105.0, -11.0),
},
['h4_prop_h4_box_ammo03a'] = {
offset = vector3(0.195, 0.030, 0.210),
rotation = vector3(-136.0, 107.0, -11.0),
},
['hei_prop_heist_box'] = {
offset = vector3(-0.085, -0.000, 0.230),
rotation = vector3(-132.0, 109.0, 0.0),
},
['xm3_prop_xm3_boxwood_01a'] = {
offset = vector3(0.355, 0.150, 0.070),
rotation = vector3(-124.0, 111.0, 0.0),
},
['gr_prop_gr_v_mill_crate_01a'] = {
offset = vector3(0.195, 0.030, 0.190),
rotation = vector3(-76.0, 12.0, 42.0),
},
['ch_prop_ch_crate_full_01a'] = {
offset = vector3(0.265, 0.090, 0.200),
rotation = vector3(-139.0, 108.0, -10.0),
},
['h4_prop_h4_box_ammo_02a'] = {
offset = vector3(0.185, -0.030, 0.300),
rotation = vector3(-130.0, 105.0, 0.0),
},
['sm_prop_smug_crate_m_01a'] = {
offset = vector3(0.175, -0.010, 0.160),
rotation = vector3(-128.0, 116.0, -4.0),
},
['xm3_prop_xm3_crate_supp_01a'] = {
offset = vector3(0.155, -0.030, 0.190),
rotation = vector3(-130.0, 105.0, 0.0),
},
['prop_mb_crate_01a'] = {
offset = vector3(0.335, 0.160, 0.080),
rotation = vector3(-127.0, 104.0, 0.0),
},
['m23_2_prop_m32_prof_crate_01a'] = {
offset = vector3(-0.025, 0.190, 0.300),
rotation = vector3(-130.0, 105.0, 0.0),
},
},
-- Default carry animation configuration (used when model not in CarryOffsets)
CarryAnimation = {
dict = 'anim@heists@box_carry@',
anim = 'idle',
bone = 0xEB95, -- Spine bone
offset = vector3(0.075, -0.15, 0.30),
rotation = vector3(-130.0, 105.0, 0.0),
},
-- ============================================
-- MODULAR PERK SYSTEM
-- ============================================
-- Each perk has an id, icon, and a list of effects (buffs/debuffs)
-- Effects are automatically applied/removed by the perk system
--
-- Available effect types:
--
-- PLAYER COMBAT MODIFIERS:
-- { type = "damage", value = 0.5 } -- +50% damage dealt (use negative for reduction)
-- { type = "speed", value = 0.3 } -- +30% movement speed
-- { type = "incoming_damage", value = 0.25 } -- +25% damage taken (use negative for reduction)
-- { type = "armor", value = 50 } -- +50 flat armor
-- { type = "heal_on_kill", value = 25 } -- +25 HP per kill
-- { type = "ammo_on_kill", value = 50 } -- +50 ammo per kill
-- { type = "headshot_damage", value = 2.0 } -- +200% headshot damage
-- { type = "bodyshot_damage", value = -0.5 } -- -50% body damage
-- { type = "regen_per_second", value = 5 } -- Regenerate 5 HP per second
--
-- CURRENCY/REWARDS MODIFIERS:
-- { type = "loot_value", value = 0.75 } -- +75% loot value
-- { type = "points", value = 1.0 } -- +100% points earned
-- { type = "currency", value = 0.5 } -- +50% all currency earned
-- { type = "headshot_currency", value = 0.5 } -- +50% bonus currency for headshot kills
-- { type = "kill_currency", value = 10 } -- +10 flat bonus currency per kill
--
-- ENEMY/GUARD MODIFIERS (debuffs - makes enemies stronger):
-- { type = "enemy_speed", value = 0.25 } -- Enemies move +25% faster
-- { type = "enemy_health", value = 0.5 } -- Enemies have +50% more health
-- { type = "enemy_damage", value = 0.3 } -- Enemies deal +30% more damage
-- { type = "enemy_armor", value = 0.5 } -- Enemies have +50% more armor
-- { type = "enemy_accuracy", value = 0.25 } -- Enemies have +25% better accuracy
--
-- BOOLEAN TOGGLES:
-- { type = "infinite_ammo", value = true } -- Enable infinite ammo
-- { type = "no_health_regen", value = true } -- Disable natural health regen
-- { type = "one_hit_kill", value = true } -- Player dies in one hit
-- { type = "explosive_rounds", value = true } -- Bullets cause explosions
-- { type = "thermite_rounds", value = true } -- Enemies burn on hit
-- { type = "no_armor", value = true } -- Cannot have armor
-- { type = "last_stand", value = true } -- Survive one fatal hit
-- { type = "super_jump", value = true } -- Super jump (very high)
-- { type = "jump_height", value = 0.5 } -- +50% jump height (normal jump modifier)
--
-- SPECIAL EFFECTS:
-- { type = "berserker", value = 0.25 } -- +25% damage per kill, resets on hit
-- { type = "adrenaline", value = 0.25 } -- +25% speed when below 50% HP
-- { type = "rage_mode", value = 0.1 } -- +10% damage per 10% HP lost
-- { type = "gambler", value = true } -- Random bonuses/penalties
--
-- benefit/downside are display strings for the UI (auto-generated from effects if omitted)
--
-- ICONS: Use any icon from https://lucide.dev/icons
-- Copy the icon name exactly as shown on the website (kebab-case)
-- Examples: "crosshair", "skull", "flame", "shield", "zap", "target", "swords", "heart"
VotePerks = {
-- Damage perks
{
id = "double_damage",
icon = "crosshair",
benefit = "+100% DAMAGE",
downside = "+50% DAMAGE TAKEN",
effects = {
{ type = "damage", value = 1.0 },
{ type = "incoming_damage", value = 0.5 },
}
},
{
id = "glass_cannon",
icon = "skull",
benefit = "+150% DAMAGE",
downside = "ONE-HIT KILLS YOU",
effects = {
{ type = "damage", value = 1.5 },
{ type = "one_hit_kill", value = true },
}
},
{
id = "berserker",
icon = "flame",
benefit = "+25% DMG PER KILL (STACKS)",
downside = "LOSE STACKS ON HIT",
effects = {
{ type = "berserker", value = 0.25, maxStacks = 10 },
}
},
-- Explosive rounds perk (commented out by default - can cause issues with certain weapons)
-- Uncomment to enable:
-- {
-- id = "explosive_rounds",
-- icon = "bomb",
-- benefit = "BULLETS CAUSE EXPLOSIONS",
-- downside = "-50% DAMAGE",
-- effects = {
-- { type = "explosive_rounds", value = true },
-- { type = "damage", value = -0.5 },
-- }
-- },
{
id = "headhunter",
icon = "target",
benefit = "+200% HEADSHOT DAMAGE",
downside = "-50% BODY DAMAGE",
effects = {
{ type = "headshot_damage", value = 2.0 },
{ type = "bodyshot_damage", value = -0.5 },
}
},
-- Defensive perks
{
id = "fortified",
icon = "hard-hat",
benefit = "+50 ARMOR",
downside = "-20% DAMAGE",
effects = {
{ type = "armor", value = 50 },
{ type = "damage", value = -0.2 },
}
},
{
id = "thick_skin",
icon = "shield",
benefit = "-25% DAMAGE TAKEN",
downside = "NO DOWNSIDE",
effects = {
{ type = "incoming_damage", value = -0.25 },
}
},
{
id = "last_stand",
icon = "heart-crack",
benefit = "SURVIVE FATAL HIT ONCE",
downside = "NO DOWNSIDE",
effects = {
{ type = "last_stand", value = true },
}
},
-- Mobility perks
{
id = "speed_demon",
icon = "zap",
benefit = "+50% MOVEMENT SPEED",
downside = "NO DOWNSIDE",
effects = {
{ type = "speed", value = 0.5 },
}
},
{
id = "adrenaline",
icon = "heart-pulse",
benefit = "+25% SPEED BELOW 50% HP",
downside = "NO DOWNSIDE",
effects = {
{ type = "adrenaline", value = 0.25, threshold = 0.5 },
}
},
{
id = "lightweight",
icon = "feather",
benefit = "+35% SPEED, +75% JUMP HEIGHT",
downside = "+40% DAMAGE TAKEN",
effects = {
{ type = "speed", value = 0.35 },
{ type = "jump_height", value = 0.75 }, -- Increased from 0.5 for more noticeable effect
{ type = "incoming_damage", value = 0.4 },
}
},
-- Utility perks
{
id = "infinite_ammo",
icon = "infinity",
benefit = "INFINITE AMMO",
downside = "NO DOWNSIDE",
effects = {
{ type = "infinite_ammo", value = true },
}
},
{
id = "rich_loot",
icon = "coins",
benefit = "+75% LOOT VALUE",
downside = "+25% DAMAGE TAKEN",
effects = {
{ type = "loot_value", value = 0.75 },
{ type = "incoming_damage", value = 0.25 },
}
},
{
id = "scavenger",
icon = "package-open",
benefit = "+10 AMMO ON KILL",
downside = "NO DOWNSIDE",
effects = {
{ type = "ammo_on_kill", value = 10 },
}
},
-- Thermite rounds perk (commented out by default - can cause issues with certain weapons)
-- Uncomment to enable:
-- {
-- id = "thermite_rounds",
-- icon = "flame",
-- benefit = "ENEMIES BURN ON HIT",
-- downside = "-25% DAMAGE",
-- effects = {
-- { type = "thermite_rounds", value = true },
-- { type = "damage", value = -0.25 },
-- }
-- },
-- Risk/Reward perks
{
id = "vampire",
icon = "droplet",
benefit = "+25 HP PER KILL",
downside = "NO HEALTH REGEN",
effects = {
{ type = "heal_on_kill", value = 25 },
{ type = "no_health_regen", value = true },
}
},
{
id = "gambler",
icon = "dices",
benefit = "RANDOM BONUS EACH KILL",
downside = "RANDOM PENALTY EACH HIT",
effects = {
{ type = "gambler", value = true },
}
},
{
id = "rage_mode",
icon = "angry",
benefit = "+10% DMG PER 10% HP LOST",
downside = "NO ARMOR ALLOWED",
effects = {
{ type = "rage_mode", value = 0.1 },
{ type = "no_armor", value = true },
}
},
{
id = "marked_for_death",
icon = "circle-dot",
benefit = "+100% LOOT & POINTS",
downside = "+50% DAMAGE TAKEN",
effects = {
{ type = "loot_value", value = 1.0 },
{ type = "points", value = 1.0 },
{ type = "incoming_damage", value = 0.5 },
}
},
-- Currency perks
{
id = "bounty_hunter",
icon = "dollar-sign",
benefit = "+50% CURRENCY",
downside = "ENEMIES +25% FASTER",
effects = {
{ type = "currency", value = 0.5 },
{ type = "enemy_speed", value = 0.25 },
}
},
{
id = "precision_payout",
icon = "target",
benefit = "+75% HEADSHOT CURRENCY",
downside = "-25% BODY DAMAGE",
effects = {
{ type = "headshot_currency", value = 0.75 },
{ type = "bodyshot_damage", value = -0.25 },
}
},
{
id = "hired_gun",
icon = "banknote",
benefit = "+15 CURRENCY PER KILL",
downside = "NO DOWNSIDE",
effects = {
{ type = "kill_currency", value = 15 },
}
},
{
id = "bargain_hunter",
icon = "percent",
benefit = "-25% SHOP PRICES",
downside = "-10% DAMAGE",
effects = {
{ type = "shop_discount", value = 0.25 },
{ type = "damage", value = -0.1 },
}
},
-- Enemy modifier perks (high risk/reward)
{
id = "elite_guards",
icon = "shield-alert",
benefit = "+200% CURRENCY",
downside = "ENEMIES +50% ARMOR",
effects = {
{ type = "currency", value = 2.0 },
{ type = "enemy_armor", value = 0.5 },
}
},
{
id = "berserker_horde",
icon = "footprints",
benefit = "+100% DAMAGE",
downside = "ENEMIES +50% SPEED",
effects = {
{ type = "damage", value = 1.0 },
{ type = "enemy_speed", value = 0.5 },
}
},
{
id = "brutal_guards",
icon = "swords",
benefit = "+150% LOOT VALUE",
downside = "ENEMIES +40% DAMAGE",
effects = {
{ type = "loot_value", value = 1.5 },
{ type = "enemy_damage", value = 0.4 },
}
},
{
id = "sharpshooter_enemies",
icon = "eye",
benefit = "+50% ALL CURRENCY",
downside = "ENEMIES +30% ACCURACY",
effects = {
{ type = "currency", value = 0.5 },
{ type = "enemy_accuracy", value = 0.3 },
}
},
},
-- Perk voting configuration
PerkVoteDuration = 15, -- Seconds to vote for a perk
-- ============================================
-- END GAME LOOT CONFIGURATION
-- ============================================
-- When players end the game early, they get a loot shop screen
-- where they can spend their remaining points on items
--
-- Each map can override this loot table by defining its own `endGameLoot` table
-- (see map config files for examples). If a map doesn't define one, this default is used.
--
-- Weighted chance system:
-- - Higher "chance" values = more likely to appear
-- - The system picks items based on weighted probability
-- - Example: item with chance=10 is 10x more likely than item with chance=1
--
-- ============================================
-- FALLBACK END GAME LOOT (OPTIONAL)
-- ============================================
-- By default, every map has its own loot pool defined in configs/maps/<map_name>.lua
-- You can uncomment this section to specify a central/fallback loot table that will be
-- used for maps that don't define their own endGameLoot, or if you prefer to manage
-- all loot from one place (in which case, remove endGameLoot from individual map files).
--
--[[
EndGameLoot = {
-- Cost to reroll the loot shop items
rerollCost = 200,
-- Number of items to show in the shop at once
itemCount = 6,
-- Duration in seconds before game fully ends (countdown timer)
duration = 60,
-- Fallback loot table (used if map doesn't specify its own)
-- Each item has: name, label, rarity, price, chance (weight), quantity (optional), image (optional)
lootTable = {
-- ============================================
-- COMMON ITEMS (chance 60-100) - Silver jewelry, cash & heist tools
-- ============================================
{ name = "bands", label = "Band of Notes", rarity = "common", price = 800, chance = 100, quantity = 3 },
{ name = "rolls", label = "Roll of Notes", rarity = "common", price = 700, chance = 95, quantity = 3 },
{ name = "md_silverring", label = "Silver Ring", rarity = "common", price = 900, chance = 90 },
{ name = "md_silverearings", label = "Silver Earrings", rarity = "common", price = 1000, chance = 85 },
{ name = "md_silverdime", label = "Silver Dime", rarity = "common", price = 600, chance = 95 },
{ name = "md_blackwatch", label = "Watch", rarity = "common", price = 1100, chance = 80 },
{ name = "md_ancientcoin", label = "Ancient Coin", rarity = "common", price = 1200, chance = 75 },
{ name = "lockpick", label = "Lockpick", rarity = "common", price = 500, chance = 85, quantity = 3 },
{ name = "advancedlockpick", label = "Advanced Lockpick", rarity = "common", price = 800, chance = 70 },
{ name = "thermite", label = "Thermite", rarity = "common", price = 1500, chance = 65 },
-- ============================================
-- UNCOMMON ITEMS (chance 30-55) - Gold jewelry, cases & valuable loot
-- ============================================
{ name = "md_silverounce", label = "1oz Silver Bar", rarity = "uncommon", price = 1800, chance = 55 },
{ name = "md_goldring", label = "Gold Ring", rarity = "uncommon", price = 2200, chance = 50 },
{ name = "md_golddollar", label = "Gold Dollar", rarity = "uncommon", price = 2000, chance = 52 },
{ name = "md_goldearings", label = "Gold Earrings", rarity = "uncommon", price = 2500, chance = 45 },
{ name = "goldchain", label = "Gold Chain", rarity = "uncommon", price = 2800, chance = 42 },
{ name = "rolex", label = "Golden Watch", rarity = "uncommon", price = 3500, chance = 38 },
{ name = "fleeca_case", label = "Fleeca Bank Case", rarity = "uncommon", price = 3000, chance = 40 },
{ name = "house_case", label = "House Robbery Case", rarity = "uncommon", price = 2800, chance = 42 },
{ name = "cryptostick", label = "Crypto Stick", rarity = "uncommon", price = 2500, chance = 45 },
{ name = "drill", label = "Drill", rarity = "uncommon", price = 2000, chance = 48 },
-- ============================================
-- RARE ITEMS (chance 10-28) - Gold bars, diamonds & premium cases
-- ============================================
{ name = "md_goldnecklace", label = "Gold Necklace", rarity = "rare", price = 4000, chance = 28 },
{ name = "md_goldnugget", label = "Gold Nugget", rarity = "rare", price = 4500, chance = 25 },
{ name = "md_diamondearings", label = "Diamond Earrings", rarity = "rare", price = 5000, chance = 22 },
{ name = "goldbar", label = "Gold Bar", rarity = "rare", price = 6000, chance = 18 },
{ name = "diamond_ring", label = "Diamond Ring", rarity = "rare", price = 7000, chance = 15 },
{ name = "jewelry_case", label = "Jewelry Store Case", rarity = "rare", price = 5500, chance = 20 },
{ name = "chopshop_case", label = "Chop Shop Case", rarity = "rare", price = 4500, chance = 22 },
{ name = "coke_small_brick", label = "Coke Package", rarity = "rare", price = 5000, chance = 20 },
{ name = "md_goldounce", label = "1oz Gold Bar", rarity = "rare", price = 8000, chance = 12 },
{ name = "md_platinumnugget", label = "Platinum Nugget", rarity = "rare", price = 9000, chance = 10 },
-- ============================================
-- EPIC ITEMS (chance 2-8) - Jackpot loot & legendary items
-- ============================================
{ name = "md_diamondnecklace", label = "Diamond Necklace", rarity = "epic", price = 12000, chance = 8 },
{ name = "md_diamondring", label = "Diamond Ring", rarity = "epic", price = 10000, chance = 8 },
{ name = "md_presidentialwatch", label = "Presidential Watch", rarity = "epic", price = 15000, chance = 5 },
{ name = "md_relicrevolver", label = "Relic Revolver", rarity = "epic", price = 12000, chance = 6 },
{ name = "pacific_case", label = "Pacific Bank Case", rarity = "epic", price = 18000, chance = 4 },
{ name = "casino_case", label = "Casino Heist Case", rarity = "epic", price = 25000, chance = 2 },
{ name = "coke_brick", label = "Coke Brick", rarity = "epic", price = 15000, chance = 5 },
{ name = "weed_brick", label = "Weed Brick", rarity = "epic", price = 12000, chance = 6 },
{ name = "secured_safe", label = "Secured Safe", rarity = "epic", price = 14000, chance = 5 },
{ name = "expensive_champagne", label = "Expensive Champagne", rarity = "epic", price = 8000, chance = 7, quantity = 3 },
},
},
]]
-- Stats configuration
Stats = {
enabled = true, -- Master toggle: if false, stats option is hidden from ped menu entirely
-- Individual stat toggles (only applicable if enabled = true)
showGamesPlayed = true,
showSoloGames = true,
showGroupGames = true,
showPlayTime = true,
showKills = true,
showRoundsCleared = true,
showHordesCompleted = true,
showDamageDealt = true,
showDamageTaken = true,
showCoinsEarned = true,
showCoinsSpent = true,
showLootDeposited = true,
},
}
Last updated