EndCore Framework

Configuration

Where every EndCore config file lives, the settings most servers change first, and the convars and ACEs the framework reads.

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 shared are sent to players' game clients. Files named server never 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.

FileSent to clientsWhat it controls
config/server.luaNoWhitelist 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.luaYesDefault spawn, starter items, autosave interval, money types and starting balances
config/client.luaYesRun and swim speed, infinite stamina, and turning off GTA's peds, traffic and dispatch
shared/jobs.luaYesJobs and grades
shared/groups.luaYesPlayer group size, founding cost, invite timeout, name and tag rules, ranks
shared/levels.luaYesCharacter level cap and XP curve

Most-changed settings in config/server.lua

KeyDefaultWhat it does
closedServerfalseOnly players with encore.bypassclosed may connect
whitelistfalseOnly players with encore.whitelist may connect
characters.defaultNumberOfCharacters3Character 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.tickInterval60000Milliseconds between survival ticks
survival.hunger.decay / survival.thirst.decay0.8 / 1.2Points lost per tick
survival.radiation.sicknessAt400Radiation level where damage starts
server.checkDuplicateLicensetrueDrop 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 falseHook 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:

lua
-- 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

FileKeyDefaultWhat it does
shareddefaultSpawnvec4(-258.211, -293.077, 21.6114, 206.0)Where new characters appear (Burton Checkpoint)
sharedstarterItems2 water, 3 bread, 1 radioGiven once per character
shareddefaultMoney{ cash = 500, bank = 1000 }Starting balances. These keys also define which money types exist.
sharedupdateInterval5 * 60000Autosave interval in milliseconds
clientplayer.runSpeed1.0Sprint multiplier
clientplayer.infiniteStaminafalseKeep stamina full
clientworld.disablePedestrianstrueNo ambient pedestrians
clientworld.disableTraffictrueNo ambient traffic, parked cars, trains, boats or planes
clientworld.disableDispatchtrueNo 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]/.

ResourceConfig filesNotable settings
en-inventoryconfig/shared.lua, config/server.lua, data/items.luaGrid size, carry weight, trunk sizes, death bag rules, fixed stashes. Every item definition lives in data/items.lua.
en-targetconfig/client.luaLook key, hold or toggle, reach
en-zombiesconfig/shared.lua, config/server.luaZones, zombie types, senses, noise; population caps, infection, kill XP, loot tables
en-hudconfig.luaSpeed unit, minimap rule, display thresholds, default player settings
en-multicharacterconfig.luaSelection scene, new character spawn, name and age validation
en-loadinghtml/app.jsTips, progress phases, music volume
en-adminconfig.luaAdmin principal, panel and noclip keys, vehicle quick picks, Build tab kinds
en-partyconfig/shared.luaParty size, XP sharing mode and radius, blips
en-respawnconfig/shared.luaWait time, spawn choice, health and stats on waking, spawn points
en-minigameshtml/app.jsDifficulty constants for each game
en-radialmenuconfig/shared.luaKey, release to select, built-in groups
en-weathersyncconfig/shared.luaDay length, night pace, weather cycle, snow, ambient temperature model
en-garagesconfig/shared.lua, config/server.luaGarages, dealers, ownership limits and fees, fuel, repair; abandoned vehicle spawning and persistence
en-vehiclekeysconfig/shared.luaKey item, lock distance, lockpick and hotwire difficulty
en-shopsconfig/shared.luaItem values, pricing model, restock, traders
en-craftingconfig/shared.luaStations, placed benches, recipes
en-doorlockconfig/shared.luaLockpick rules, passcode cooldown, config doors
en-propertiesconfig/shared.luaTerritory, limits, upkeep, raiding, build pieces
en-questsconfig/shared.lua, data/npcs.lua, data/quests.luaJournal key, active quest limit, quest-giver NPCs, quest definitions
en-skillsconfig/shared.luaSkill curve, skills and bonuses, perks, respec cost
en-clothingconfig/shared.luaEquipment slots, starter clothes, creator options, barbers
en-consumablesconfig/shared.luaWhat each food, drink and medical item does
Tip

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

ConvarDefaultWhat it does
encore:disablebridgeunsettrue disables the QB-Core, QBX and ESX compatibility bridges. Set it with setr so clients read it too.
cfg
setr encore:disablebridge true

en-core reads no other convars.

ACEs and principals

ACE or principalUsed byWhat it allows
encore.whitelisten-coreConnecting while whitelist = true
encore.bypasscloseden-coreConnecting while closedServer = true
group.adminen-core, en-admin, en-inventory, en-zombies, en-garages, en-shops, en-quests, en-skills and othersAdmin commands. EndCore grants command.<name> to this principal for each restricted command it registers.
command.adminen-adminEvery admin panel action is checked against it
command.doorlocken-doorlockThe 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.