EndCore is configured with plain Lua files inside each resource. There is no web panel or database settings table: open the file, change the value, restart. Content that admins place in game (traders, garages, zones) is the exception; it is stored in the database by the content registry.
How config files work
- Config files return or define plain Lua tables. Keep the syntax valid: a missing comma stops the resource from starting, and the console shows the line.
- Files named
sharedare sent to players' game clients. Files namedservernever leave the server, so put anything sensitive (webhooks, ban hooks) there. - Files are read when a resource starts. Restart the resource after editing. For
en-core, a full server restart is the safest option because every other resource depends on it.
en-core
en-core has four config files and three shared data files.
| File | Sent to clients | What it controls |
|---|---|---|
config/server.lua | No | Whitelist and closed server, character slots, money rules, cash as an item, default metadata, the survival simulation, duplicate-license checks, Discord logging, the ban hook |
config/shared.lua | Yes | Default spawn, starter items, autosave interval, money types and starting balances |
config/client.lua | Yes | Run and swim speed, infinite stamina, and turning off GTA's peds, traffic and dispatch |
shared/jobs.lua | Yes | Jobs and grades |
shared/groups.lua | Yes | Player group size, founding cost, invite timeout, name and tag rules, ranks |
shared/levels.lua | Yes | Character level cap and XP curve |
Most-changed settings in config/server.lua
| Key | Default | What it does |
|---|---|---|
closedServer | false | Only players with encore.bypassclosed may connect |
whitelist | false | Only players with encore.whitelist may connect |
characters.defaultNumberOfCharacters | 3 | Character slots per license |
characters.playersNumberOfCharacters | {} | Per-license overrides, keyed by the full identifier, for example ['license:abc'] = 5 |
money.cashItem | 'cash' | Cash is an inventory item while en-inventory runs. false keeps cash as a balance. |
money.dontAllowMinus | { 'cash', 'bank' } | Money types that can't go below zero |
survival.tickInterval | 60000 | Milliseconds between survival ticks |
survival.hunger.decay / survival.thirst.decay | 0.8 / 1.2 | Points lost per tick |
survival.radiation.sicknessAt | 400 | Radiation level where damage starts |
server.checkDuplicateLicense | true | Drop a second session with the same license |
logging.webhook.<channel> | '' | Discord webhook for default, playermoney, playerinventory, death, joinleave, ooc, report, bans |
bans.checkForBan(license) | returns false | Hook for your own ban system |
Every survival key and its effect is listed in Survival system.
The ban hook runs when a player connects. Return true and a reason to reject them:
-- en-core/config/server.lua (excerpt)
bans = {
-- ...
checkForBan = function(license)
local row = MySQL.single.await('SELECT reason FROM my_bans WHERE license = ?', { license })
if row then
return true, ('Banned: %s'):format(row.reason)
end
return false, nil
end,
},Most-changed settings in config/shared.lua and config/client.lua
| File | Key | Default | What it does |
|---|---|---|---|
| shared | defaultSpawn | vec4(-258.211, -293.077, 21.6114, 206.0) | Where new characters appear (Burton Checkpoint) |
| shared | starterItems | 2 water, 3 bread, 1 radio | Given once per character |
| shared | defaultMoney | { cash = 500, bank = 1000 } | Starting balances. These keys also define which money types exist. |
| shared | updateInterval | 5 * 60000 | Autosave interval in milliseconds |
| client | player.runSpeed | 1.0 | Sprint multiplier |
| client | player.infiniteStamina | false | Keep stamina full |
| client | world.disablePedestrians | true | No ambient pedestrians |
| client | world.disableTraffic | true | No ambient traffic, parked cars, trains, boats or planes |
| client | world.disableDispatch | true | No police, EMS, fire or wanted level |
See Player data, Money and cash, Jobs, Groups, XP and levels and World and death for the full tables.
Gameplay resources
Each resource keeps its settings in its own folder. Paths are relative to resources/[encore]/.
| Resource | Config files | Notable settings |
|---|---|---|
| en-inventory | config/shared.lua, config/server.lua, data/items.lua | Grid size, carry weight, trunk sizes, death bag rules, fixed stashes. Every item definition lives in data/items.lua. |
| en-target | config/client.lua | Look key, hold or toggle, reach |
| en-zombies | config/shared.lua, config/server.lua | Zones, zombie types, senses, noise; population caps, infection, kill XP, loot tables |
| en-hud | config.lua | Speed unit, minimap rule, display thresholds, default player settings |
| en-multicharacter | config.lua | Selection scene, new character spawn, name and age validation |
| en-loading | html/app.js | Tips, progress phases, music volume |
| en-admin | config.lua | Admin principal, panel and noclip keys, vehicle quick picks, Build tab kinds |
| en-party | config/shared.lua | Party size, XP sharing mode and radius, blips |
| en-respawn | config/shared.lua | Wait time, spawn choice, health and stats on waking, spawn points |
| en-minigames | html/app.js | Difficulty constants for each game |
| en-radialmenu | config/shared.lua | Key, release to select, built-in groups |
| en-weathersync | config/shared.lua | Day length, night pace, weather cycle, snow, ambient temperature model |
| en-garages | config/shared.lua, config/server.lua | Garages, dealers, ownership limits and fees, fuel, repair; abandoned vehicle spawning and persistence |
| en-vehiclekeys | config/shared.lua | Key item, lock distance, lockpick and hotwire difficulty |
| en-shops | config/shared.lua | Item values, pricing model, restock, traders |
| en-crafting | config/shared.lua | Stations, placed benches, recipes |
| en-doorlock | config/shared.lua | Lockpick rules, passcode cooldown, config doors |
| en-properties | config/shared.lua | Territory, limits, upkeep, raiding, build pieces |
| en-quests | config/shared.lua, data/npcs.lua, data/quests.lua | Journal key, active quest limit, quest-giver NPCs, quest definitions |
| en-skills | config/shared.lua | Skill curve, skills and bonuses, perks, respec cost |
| en-clothing | config/shared.lua | Equipment slots, starter clothes, creator options, barbers |
| en-consumables | config/shared.lua | What each food, drink and medical item does |
Two settings in different resources should agree: en-weathersync's Config.temperature.interval should match en-core's survival.tickInterval. Both default to 60000.
Content placed in game
Traders, vehicle dealers, garages, quest NPCs, quests, crafting benches, barbers, spawn points and zombie zones can also be placed from the Build tab of the en-admin panel (F10). Placed entries are stored in the encore_content table and go live immediately.
- A placed entry with the same id as a config entry replaces it.
- Deleting the placed entry restores the config version.
This means you can keep sensible defaults in config files and let your staff adjust the live world without restarts. See en-admin and Content registry.
Convars
| Convar | Default | What it does |
|---|---|---|
encore:disablebridge | unset | true disables the QB-Core, QBX and ESX compatibility bridges. Set it with setr so clients read it too. |
setr encore:disablebridge trueen-core reads no other convars.
ACEs and principals
| ACE or principal | Used by | What it allows |
|---|---|---|
encore.whitelist | en-core | Connecting while whitelist = true |
encore.bypassclosed | en-core | Connecting while closedServer = true |
group.admin | en-core, en-admin, en-inventory, en-zombies, en-garages, en-shops, en-quests, en-skills and others | Admin commands. EndCore grants command.<name> to this principal for each restricted command it registers. |
command.admin | en-admin | Every admin panel action is checked against it |
command.doorlock | en-doorlock | The door editor, and opening every door when Config.adminBypass = true |
Some resources let you change the principal: Config.principal in en-admin, ServerConfig.adminPrincipal in en-inventory, and Config.adminPrincipal in en-doorlock. See Commands for the full list.