Chapitre 6.10: Central Economy
Accueil | << Précédent : Networking & RPC | Central Economy | Suivant : Mission Hooks >>
Introduction
The Central Economy (CE) is DayZ's côté serveur system for managing all apparitionable entities in le monde: loot, vehicles, infected, animals, and dynamic events. It is configured entirely through XML files in the mission folder. While the CE itself is an engine system (not directly scriptable), understanding its configuration files is essential for any server mod. Ce chapitre couvre all CE configuration files, their structure, key parameters, and how they interact.
How the CE Works
- Le serveur reads
types.xmlto learn every item's nominal (target count) and min (minimum before restock). - Items are assigned usage flags (e.g.,
Military,Town) that map to building/location types. - Items are assigned value flags (e.g.,
Tier1throughTier4) that restrict them to map zones. - The CE periodically scans le monde, counts existing items, and apparitions new ones when counts fall below
min. - Items untouched for their
lifetime(seconds) are cleaned up. - Dynamic events (
events.xml) apparition vehicles, helicopter crashes, and infected groups on their own schedule.
File Overview
All CE files live in the mission folder (e.g., dayzOffline.chernarusplus/).
| File | Purpose |
|---|---|
db/types.xml | Every apparitionable item's parameters |
db/events.xml | Dynamic event definitions (vehicles, crashes, infected) |
db/globals.xml | Global CE parameters (timers, limits) |
db/economy.xml | Subsystem toggle switches |
cfgeconomycore.xml | Root classes, defaults, CE logging |
cfgapparitionabletypes.xml | Per-item attachment and cargo rules |
cfgrandompresets.xml | Random loot preset pools |
cfgeventapparitions.xml | World coordinates for event apparition positions |
cfglimitsdefinition.xml | All valid category, usage, and value flag names |
cfgplayerapparitionpoints.xml | Fresh apparition locations |
Spawn Cycle
types.xml
The most critical CE file. Every item that can exist in le monde must have an entry here.
Structure
<types>
<type name="AKM">
<nominal>10</nominal>
<lifetime>14400</lifetime>
<restock>0</restock>
<min>5</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0"
count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<category name="weapons"/>
<usage name="Military"/>
<value name="Tier3"/>
<value name="Tier4"/>
</type>
</types>Parameters
| Paramètre | Description | Typical Values |
|---|---|---|
nominal | Target count on the entire map | 1 - 200 |
lifetime | Seconds before untouched items deapparition | 3600 (1h) - 14400 (4h) |
restock | Seconds before CE attempts to reapparition after item is taken | 0 (immediate) - 1800 |
min | Minimum count before CE apparitions more | Usually nominal / 2 |
quantmin | Minimum quantity % (ammo, liquids); -1 = not applicable | -1, 0 - 100 |
quantmax | Maximum quantity %; -1 = not applicable | -1, 0 - 100 |
cost | Priority cost (always 100 in vanilla) | 100 |
Flags
| Flag | Description |
|---|---|
count_in_cargo | Count items inside player/container cargo toward nominal |
count_in_hoarder | Count items in storage (tents, barrels, buried stashes) |
count_in_map | Count items on the ground and in buildings |
count_in_player | Count items on player characters |
crafted | Item is craftable (CE does not apparition it naturally) |
deloot | Dynamic event loot (apparitioned by events, not CE) |
Category, Usage, and Value
- category: Item category (e.g.,
weapons,tools,food,clothes,containers) - usage: Where the item apparitions (e.g.,
Military,Police,Town,Village,Farm,Hunting,Coast) - value: Map tier restriction (e.g.,
Tier1= coast,Tier2= inland,Tier3= military,Tier4= deep inland)
An item can have multiple <usage> and <value> tags to apparition in multiple locations and tiers.
Exemple --- add a custom item to the economy:
<type name="MyCustomRifle">
<nominal>5</nominal>
<lifetime>14400</lifetime>
<restock>1800</restock>
<min>2</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0"
count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<category name="weapons"/>
<usage name="Military"/>
<value name="Tier3"/>
<value name="Tier4"/>
</type>globals.xml
Global CE parameters that affect all items.
<variables>
<var name="AnimalMaxCount" type="0" value="200"/>
<var name="CleanupAvoidance" type="0" value="100"/>
<var name="CleanupLifetimeDeadAnimal" type="0" value="1200"/>
<var name="CleanupLifetimeDeadInfected" type="0" value="330"/>
<var name="CleanupLifetimeDeadPlayer" type="0" value="3600"/>
<var name="CleanupLifetimeDefault" type="0" value="45"/>
<var name="CleanupLifetimeLimit" type="0" value="7200"/>
<var name="CleanupLifetimeRuined" type="0" value="330"/>
<var name="FlagRefreshFrequency" type="0" value="432000"/>
<var name="FlagRefreshMaxDuration" type="0" value="3456000"/>
<var name="IdleModeCountdown" type="0" value="60"/>
<var name="IdleModeStartup" type="0" value="1"/>
<var name="InitialSpawn" type="0" value="1200"/>
<var name="LootDamageMax" type="0" value="2"/>
<var name="LootDamageMin" type="0" value="0"/>
<var name="RespawnAttempt" type="0" value="2"/>
<var name="RespawnLimit" type="0" value="20"/>
<var name="RespawnTypes" type="0" value="12"/>
<var name="RestartSpawn" type="0" value="0"/>
<var name="SpawnInitial" type="0" value="1200"/>
<var name="TimeHopping" type="0" value="60"/>
<var name="TimeLogin" type="0" value="15"/>
<var name="TimeLogout" type="0" value="15"/>
<var name="TimePenalty" type="0" value="20"/>
<var name="WorldWetTempUpdate" type="0" value="1"/>
<var name="ZombieMaxCount" type="0" value="1000"/>
</variables>Key Parameters
| Variable | Description |
|---|---|
AnimalMaxCount | Maximum animals alive simultaneously |
ZombieMaxCount | Maximum infected alive simultaneously |
CleanupLifetimeDeadPlayer | Seconds before dead player body deapparitions |
CleanupLifetimeDeadInfected | Seconds before dead zombie deapparitions |
InitialSpawn | Number of items to apparition on server startup |
SpawnInitial | Number of apparition attempts on startup |
LootDamageMin / LootDamageMax | Damage range applied to apparitioned loot (0-4: Pristine to Ruined) |
ReapparitionAttempt | Seconds between reapparition checks |
FlagRefreshFrequency | Territory flag refresh interval (seconds) |
TimeLogin / TimeLogout | Login/logout timer (seconds) |
events.xml
Defines dynamic events: infected apparition zones, vehicle apparitions, helicopter crashes, and other world events.
Structure
<events>
<event name="StaticHeliCrash">
<nominal>3</nominal>
<min>1</min>
<max>3</max>
<lifetime>1800</lifetime>
<restock>0</restock>
<saferadius>500</saferadius>
<distanceradius>500</distanceradius>
<cleanupradius>200</cleanupradius>
<flags deletable="1" init_random="0" remove_damaged="1"/>
<position>fixed</position>
<limit>child</limit>
<active>1</active>
<children>
<child lootmax="10" lootmin="5" max="3" min="1"
type="Wreck_Mi8_Crashed"/>
</children>
</event>
</events>Event Parameters
| Paramètre | Description |
|---|---|
nominal | Target number of active events |
min / max | Minimum and maximum active at once |
lifetime | Seconds before event deapparitions |
saferadius | Minimum distance from players when apparition |
distanceradius | Minimum distance between event instances |
cleanupradius | Radius for cleanup checks |
position | "fixed" (from cfgeventapparitions.xml) or "player" (near players) |
active | 1 = enabled, 0 = disabled |
Children (Event Objects)
Each event can apparition one or more child objects:
| Attribut | Description |
|---|---|
type | Class name of the object to apparition |
min / max | Count range for this child |
lootmin / lootmax | Number of loot items apparitioned with this child |
cfgapparitionabletypes.xml
Defines what attachments and cargo apparition with specific items.
<spawnabletypes>
<type name="AKM">
<attachments chance="0.3">
<item name="AK_WoodBttstck" chance="0.5"/>
<item name="AK_PlasticBttstck" chance="0.3"/>
<item name="AK_FoldingBttstck" chance="0.2"/>
</attachments>
<attachments chance="0.2">
<item name="AK_WoodHndgrd" chance="0.6"/>
<item name="AK_PlasticHndgrd" chance="0.4"/>
</attachments>
<cargo chance="0.15">
<item name="Mag_AKM_30Rnd" chance="0.7"/>
<item name="Mag_AKM_Drum75Rnd" chance="0.3"/>
</cargo>
</type>
</spawnabletypes>How It Works
- Each
<attachments>block has achance(0.0 - 1.0) of being applied. - Within a block, items are selected by their individual
chancevalues (normalized to 100% within the block). - Multiple
<attachments>blocks allow different attachment slots to be independently rolled. <cargo>blocks work the same way for items placed in the entity's cargo.
cfgrandompresets.xml
Defines reusable loot preset pools referenced by cfgapparitionabletypes.xml.
<randompresets>
<cargo name="foodGeneral" chance="0.5">
<item name="Apple" chance="0.15"/>
<item name="Pear" chance="0.15"/>
<item name="BakedBeansCan" chance="0.3"/>
<item name="SardinesCan" chance="0.3"/>
<item name="WaterBottle" chance="0.1"/>
</cargo>
</randompresets>These presets can be referenced by name in cfgapparitionabletypes.xml:
<type name="Barrel_Green">
<cargo preset="foodGeneral"/>
</type>cfgeconomycore.xml
Root-level CE configuration. Defines default values, CE classes, and logging flags.
<economycore>
<classes>
<rootclass name="CfgVehicles" act="character" reportMemoryLOD="no"/>
<rootclass name="CfgVehicles" act="car"/>
<rootclass name="CfgVehicles" act="deployable"/>
<rootclass name="CfgAmmo" act="none" reportMemoryLOD="no"/>
</classes>
<defaults>
<default name="dyn_radius" value="40"/>
<default name="dyn_smin" value="0"/>
<default name="dyn_smax" value="0"/>
<default name="dyn_dmin" value="0"/>
<default name="dyn_dmax" value="10"/>
</defaults>
<ce folder="db"/>
</economycore>The <ce folder="db"/> tag tells the CE where to find types.xml, events.xml, and globals.xml.
cfglimitsdefinition.xml
Defines all valid category, usage, tag, and value flag names that can be used in types.xml.
<lists>
<categories>
<category name="weapons"/>
<category name="tools"/>
<category name="food"/>
<category name="clothes"/>
<category name="containers"/>
<category name="vehiclesparts"/>
<category name="explosives"/>
</categories>
<usageflags>
<usage name="Military"/>
<usage name="Police"/>
<usage name="Hunting"/>
<usage name="Town"/>
<usage name="Village"/>
<usage name="Farm"/>
<usage name="Coast"/>
<usage name="Industrial"/>
<usage name="Medic"/>
<usage name="Firefighter"/>
<usage name="School"/>
<usage name="Office"/>
<usage name="Prison"/>
<usage name="Lunapark"/>
<usage name="ContaminatedArea"/>
</usageflags>
<valueflags>
<value name="Tier1"/>
<value name="Tier2"/>
<value name="Tier3"/>
<value name="Tier4"/>
</valueflags>
</lists>Custom mods can add new flags here and reference them in their types.xml entries.
ECE Flags in Script
When apparition entities from script, the ECE flags (covered in Chapter 6.1) determine how the entity interacts with the CE:
| Flag | CE Behavior |
|---|---|
ECE_NOLIFETIME | Entity will never deapparition (not tracked by CE lifetime) |
ECE_DYNAMIC_PERSISTENCY | Entity becomes persistent only after player interaction |
ECE_EQUIP_ATTACHMENTS | CE apparitions configured attachments from cfgapparitionabletypes.xml |
ECE_EQUIP_CARGO | CE apparitions configured cargo from cfgapparitionabletypes.xml |
Exemple --- apparition an item that persists forever:
int flags = ECE_PLACE_ON_SURFACE | ECE_NOLIFETIME;
Object obj = GetGame().CreateObjectEx("Barrel_Green", pos, flags);Exemple --- apparition with CE-configured attachments:
int flags = ECE_PLACE_ON_SURFACE | ECE_EQUIP_ATTACHMENTS | ECE_EQUIP_CARGO;
Object obj = GetGame().CreateObjectEx("AKM", pos, flags);
// The AKM will spawn with random attachments per cfgspawnabletypes.xmlScript API for CE Interaction
While the CE is primarily XML-configured, there are some script-side interactions:
Reading Config Values
// Check if an item exists in CfgVehicles
bool exists = GetGame().ConfigIsExisting("CfgVehicles MyCustomItem");
// Read config properties
string displayName;
GetGame().ConfigGetText("CfgVehicles AKM displayName", displayName);
int weight = GetGame().ConfigGetInt("CfgVehicles AKM weight");Querying Objects in the World
// Get objects near a position
array<Object> objects = new array<Object>;
array<CargoBase> proxyCargos = new array<CargoBase>;
GetGame().GetObjectsAtPosition(pos, 50.0, objects, proxyCargos);Surface and Position Queries
// Get terrain height (for placing items on ground)
float surfaceY = GetGame().SurfaceY(x, z);
// Get surface type at position
string surfaceType;
GetGame().SurfaceGetType(x, z, surfaceType);Modding the Central Economy
Adding Custom Items
- Define the item class in your mod's
config.cppunderCfgVehicles. - Add a
<type>entry intypes.xmlwith nominal, lifetime, usage, and value flags. - Optionally add attachment/cargo rules in
cfgapparitionabletypes.xml. - If using new usage/value flags, define them in
cfglimitsdefinition.xml.
Modifying Existing Items
Edit the <type> entry in types.xml to change apparition rates, lifetimes, or location restrictions. Changes take effect on server restart.
Disabling Items
Set nominal and min to 0:
<type name="UnwantedItem">
<nominal>0</nominal>
<min>0</min>
<!-- rest of parameters -->
</type>Adding Custom Events
Add a new <event> block in events.xml and corresponding apparition positions in cfgeventapparitions.xml:
<!-- events.xml -->
<event name="MyCustomEvent">
<nominal>5</nominal>
<min>2</min>
<max>5</max>
<lifetime>3600</lifetime>
<restock>0</restock>
<saferadius>300</saferadius>
<distanceradius>800</distanceradius>
<cleanupradius>100</cleanupradius>
<flags deletable="1" init_random="1" remove_damaged="1"/>
<position>fixed</position>
<limit>child</limit>
<active>1</active>
<children>
<child lootmax="5" lootmin="2" max="1" min="1"
type="MyCustomObject"/>
</children>
</event><!-- cfgeventspawns.xml -->
<event name="MyCustomEvent">
<pos x="6543.2" z="2872.5" a="180"/>
<pos x="7821.0" z="3100.8" a="90"/>
<pos x="4200.5" z="8500.3" a="0"/>
</event>Résumé
| File | Purpose | Key Parameters |
|---|---|---|
types.xml | Item apparition definitions | nominal, min, lifetime, usage, value |
globals.xml | Global CE variables | ZombieMaxCount, AnimalMaxCount, cleanup timers |
events.xml | Dynamic events | nominal, lifetime, position, children |
cfgapparitionabletypes.xml | Attachment/cargo rules per item | attachments, cargo, chance |
cfgrandompresets.xml | Reusable loot pools | cargo/attachments presets |
cfgeconomycore.xml | Root CE configuration | classes, defaults, CE folder |
cfglimitsdefinition.xml | Valid flag definitions | categories, usageflags, valueflags |
| Concept | Point clé |
|---|---|
| Nominal/Min | CE apparitions items when count drops below min, targeting nominal |
| Lifetime | Seconds before untouched items deapparition |
| Usage flags | Where items apparition (Military, Town, etc.) |
| Value flags | Map tier restriction (Tier1 = coast through Tier4 = deep inland) |
| Count flags | Which items count toward nominal (cargo, hoarder, map, player) |
| Events | Dynamic apparitions with their own lifecycle (crashes, vehicles, infected) |
| ECE flags | ECE_NOLIFETIME, ECE_EQUIP for script-apparitioned items |
Bonnes pratiques
- Set
count_in_hoarder="1"for high-value items. Without this flag, players can hoard rare weapons in stashes without reducing le monde apparition count, leading to item duplication in practice. - Keep
restockat 0 for most items. Non-zero restock values delay reapparition after an item is picked up. Use it only for items that should not immediately reappear (e.g., rare military gear). - Test nominal/min ratios on a live server with players. Static testing does not reveal real CE behavior. Items interact with player movement patterns, container storage, and cleanup timers in ways that are only visible under real load.
- Always define new items in both
config.cppandtypes.xml. A config entry without a types.xml entry means the item will never apparition naturally. A types.xml entry without a config class causes CE errors. - Use
cfgapparitionabletypes.xmlto create weapon variety. Instead of apparition naked weapons, define attachment presets so players find weapons with random stocks, handguards, and magazines -- this dramatically improves loot quality perception.
Compatibilité et impact
- Multi-Mod : Multiple mods can add entries to
types.xml. If two mods define the same<type name="">, the last loaded file wins. Use unique class names to avoid collisions. Merge types.xml entries carefully on community servers. - Performance : High
nominalvalues (200+) for many item types strain the CE's apparition loop. The CE runs periodic scans that scale with total tracked entity count. Keep nominals realistic -- 5-20 for weapons, 20-100 for common items. - Serveur/Client : The CE runs entirely on le serveur. Clients have no visibility into CE state. All XML files are côté serveur only and are not distributed to clients.
Accueil | << Précédent : Networking & RPC | Central Economy | Suivant : Mission Hooks >>
