Configuration
Client (config/general.lua)
adminCommand
- Type:
string | nil - Default:
"hordeadmin" - Description: Chat command that opens the admin location editor. Set to
nilto disable the command entirely.
testingCommand
- Type:
string | nil - Default:
"hordetest" - Description: Chat command used for development testing. Set to
nilto disable.
bypassQueueCommand
- Type:
string | nil - Default:
"hordobypass" - Description: Chat command that allows admins to bypass a disabled horde queue and enter directly. Set to
nilto disable.
debug
- Type:
boolean - Default:
false - Description: Enables verbose debug prints to the server and client console. Set to
falsebefore going live.
Server (config/sv_config.lua)
The server config controls interiors, waves, perks, rewards, the shop, and all gameplay parameters. Key sections are described below.
interiors
- Type:
table - Description: Array of interior definitions. Each interior is an independently running horde game instance. Fields per interior:
key(string) - unique identifier used in database queries (e.g."syndicate")name(string) - display name shown in the admin editor menuinsideCoords(vector4) - teleport destination when entering the interiorhardMode(boolean) - enables extra admin edit modes (crates, fire zones, poison zones) and additional gameplay modifiers for this interior
waves
- Type:
table - Description: Ordered list of wave definitions. Each wave controls how many enemies spawn, their ped models, health, armour, weapons, and any special properties (e.g. explosive on death). The server cycles through waves sequentially.
perks
- Type:
table - Description: Pool of perk cards presented to players between waves. Each perk has:
id(string) - unique identifiername(string) - display namedescription(string) - shown on the perk cardicon(string) - icon name rendered in the NUIisBuff(boolean) -truefor player-favouring buffs,falsefor challenge debuffs- Effect fields (
damageModifier,defenseModifier,maxHealth,movementSpeed,unlimitedSprint,noSprintJump,damageReflect,shootingSelfDamage,oneHealth,pedDamageModifier) - applied to all players when the perk wins the vote
shop
- Type:
table - Description: Configuration for the in-wave currency shop. Contains:
weapons- pool of purchasable weapon items with prices;rerollCostto re-randomise the sectionitems- pool of purchasable consumable/utility items with prices;rerollCostto re-randomiseperks- pool of purchasable perks available mid-wave;rerollCostto re-randomise
finalShop
- Type:
table - Description: Supply items offered in the final shop that opens after the last wave. Each entry has a name, price, and count. Players can reroll the selection before ending the session.
crates
- Type:
table - Description: Loot tables for the interactable crates placed in the interior. Defines which items (and their quantities) are given when a crate is opened. Separate pools can be defined for locked vs unlocked crates.
bodies
- Type:
table - Description: Loot tables for searchable NPC bodies. Defines item pools, counts, and rarity weights for body-search rewards.
reviveItem
- Type:
string - Default:
"horde_revive" - Description: Item name consumed when a player revives a downed teammate inside the horde.
currency
- Type:
table - Description: Rules for awarding in-game horde currency to players. Typically configured per kill, headshot, or wave completion.
storageLocations
- Type:
table - Description: Array of external stash objects placed outside the interior. Each entry defines:
coords(vector3) - world positionrotation(vector3) - object rotationmodel(hash) - prop model to spawn
Admin Commands
| Command | Config key | Description |
|---|---|---|
/hordeadmin | config.adminCommand | Opens the interior selector and activates the in-game placement editor |
/hordetest | config.testingCommand | Testing shortcut; behaviour defined in sv_config.lua |
/hordobypass | config.bypassQueueCommand | Bypasses queue restrictions to enter the horde immediately |
Admin Editor Controls
When edit mode is active (entered via /hordeadmin → select interior):
| Key | Action |
|---|---|
| Left Click | Place item at cursor position |
| E | Cycle to next edit mode (DROP → NPC → CRATE → FIRE → POISON) |
| Left Arrow | Rotate preview left (NPC / CRATE / FIRE / POISON modes) |
| Right Arrow | Rotate preview right (NPC / CRATE / FIRE / POISON modes) |
| Target interact | Delete an existing stash, spawn, or object |
INFO
CRATE, FIRE, and POISON edit modes are only available for interiors with hardMode = true.
Developer Integration
waveCompleted(identifier, wave)
Open hook in open/server/server.lua. Called by the server at the end of every wave.
| Parameter | Type | Description |
|---|---|---|
identifier | string | The interior key of the running game instance |
wave | number | The wave number that just completed |
Use this to award reputation, trigger external events, log stats, or anything else your server requires:
lua
function waveCompleted(identifier, wave)
-- Example: give reputation for completing a wave
print(('Wave %d completed in interior: %s'):format(wave, identifier))
end